ADAS Subroutine d9rdnm
C Copyright (c) 1997, Strathclyde University. SUBROUTINE D9RDNM( DSNINC , LPART , IFAIL , & IZ0 , NPART , IPRTD , IGRDD , ICLASS , & IZ1 , ITMAX , IDMAX , & ISDIMD , IZDIMD , ITDIMD , & ISMAXD , IZMAXD , ITMAXD , IDMAXD , NPARTR, & DTEV , DDENS , & DTEVD , DDENSD , DRCOFD , ZDATA , & DRCOFI & ) C C----------------------------------------------------------------------- C C ****************** FORTRAN77 SUBROUTINE: D9RDNM ********************* C C PURPOSE : TO EXTRACT COLLISIONAL DIELECTRONIC DATA FOR A C (TEMPERATURE, DENSITY) GRID FROM C EITHER PARTIAL (METASTABLE/PARENT RESOLVED) OR STANDARD C (UNRESOLVED) ISONUCLEAR MASTER FILES C C NOTE : THE SOURCE DATA IS CONTAINED AS SEQUENTIAL DATASETS C WITH THE FOLLOWING NAMING CONVENTIONS: C C (1) JETSHP.ACD<YR>#<EL).<CODE>DATA C (2) JETSHP.SCD<YR>#<EL>.<CODE>DATA C (3) JETSHP.CCD<YR>#<EL>.<CODE>DATA C (4) JETSHP.PRB<YR>#<EL>.<FILT>.<CODE>DATA C (5) JETSHP.PRC<YR>#<EL>.<FILT>.<CODE>DATA C (6) JETSHP.QCD<YR>#<EL>.<CODE>DATA C (7) JETSHP.XCD<YR>#<EL>.<CODE>DATA C (8) JETSHP.PLT<YR>#<EL>.<CODE>DATA C (9) JETSHP.PLS<YR>#<EL>.<CODE>DATA C C WHERE, <YR> = TWO DIGIT YEAR NUMBER C <EL> = ONE OR TWO CHARACTER ELEMENT SYMBOL C <CODE> = R => PARTIAL DATA C U => PARTIAL DATA C OMITTED => STANDARD DATA C <FILT> = SIX CHARACTER POWER FILTER CODE C C AND DATA OF CLASSES 6 AND 7 DO NOT EXIST FOR THE PARTIAL CASE. C C C INPUT : (C*120) DSNINC = ISONUCLEAR MASTER FILE NAME - VERIFIED C AND READY FOR DYNAMIC ALLOCATION. C INPUT : (L*4) LPART = .TRUE. => PARTIAL (RESOLVED) MASTER DATA C . FALSE. => UNSRESOLVED MASTER DATA C INPUT : (I*4) IZ0 = NUCLEAR CHARGE C INPUT : (I*4) NPART() = METASTABLE PARTITION. I.E. NUMBER OF C METASTABLES FROM CHARGE STATE IZ1MIN-1 TO C IZ1MAX ON INPUT C INPUT : (I*4) IPRTD = REQUIRED PARENT INDEX C INPUT : (I*4) IGRDD = REQUIRED GROUND INDEX C INPUT : (I*4) ICLASS = CLASS OF DATA (1 - 9 ) C INPUT : (I*4) IZ1 = REQUIRED ION CHARGE + 1 C INPUT : (I*4) ITMAX = NUMBER OF DTEV() VALUES C INPUT : (I*4) IDMAX = NUMBER OF DDENS() VALUES C INPUT : (I*4) ISDIMD = MAXIMUM NUMBER OF (CHARGE, PARENT, GROUND) C BLOCKS IN ISONUCLEAR MASTER FILES C INPUT : (I*4) IZDIMD = MAXIMUM NUMBER OF CHARGE STATES C IN ISONUCLEAR MASTER FILES C INPUT : (I*4) ITDIMD = MAXIMUM NUMBER OF TEMP OR DENS VALUES IN C ISONUCLEAR MASTER FILES C INPUT : (R*8) DTEV() = DLOG10(ELECTRON TEMPERATURES (EV)) C INPUT : (R*8) DDENS() = DLOG10(ELECTRON DENSITIES (CM-3)) C C OUTPUT : (I*4) IFAIL = 0 IF ROUTINE SUCCESSFUL - DATA FOR THE C REQUESTED YEAR USED. C = 1 IF ROUTINE OPEN STATEMENT FAILED C = 2 IF FILE EXISTS BUT REQUIRED DATA C BLOCK DOES NOT C OUTPUT : (I*4) ISMAXD = NUMBER OF (CHARGE, PARENT, METASTABLE) C BLOCKS IN SELECTED MASTER FILE C OUTPUT : (I*4) IZMAXD = NUMBER OF ZDATA() VALUES IN SELECTED C MASTER FILE C OUTPUT : (I*4) ITMAXD = NUMBER OF DTEVD() VALUES IN SELECTED C MASTER FILE C OUTPUT : (I*4) IDMAXD = NUMBER OF DDENSD() VALUES IN SELECTED C MASTER FILE C OUTPUT : (I*4) NPARTR() = METASTABLE PARTITION. I.E. NUMBER OF C METASTABLES FROM CHARGE STATE IZ1MIN-1 TO C IZ1MAX FOUND IN MASTER FILE C OUTPUT : (R*8) DTEVD() = DLOG10(DATA ELECTRON TEMPERATURES (EV)) C IN SELECTED MASTER FILE C OUTPUT : (R*8) DDENSD() = DLOG10(DATA ELECTRON DENSITIES (CM-3)) C IN SELECTED MASTER FILE C OUTPUT : (R*8) DRCOFD(,,)= DLOG10(DATA RATE COEFFICIENTS (CM-3/S)) C IN SELECTED MASTER FILE C 1ST DIM: (CHARGE,META,GRD) BLOCK INDEX C 2ND DIM: TEMPERATURE INDEX C 3RD DIM: DENSITY INDEX C OUTPUT : (R*8) ZDATA() = CHARGE + 1 FOR IONS IN SELECTED MASTER C FILE C 1ST DIM: (CHARGE,META,GRD) BLOCK INDEX C OUTPUT : (R*8) DRCOFI(,) = INTERPOLATION OF DRCOFD(,,) FOR C DTEV() & DDENS() C C PROGRAM: (C*80) DSNOLD = FILE NAME USED IN PREVIOUS CALL C (C*80) CLINE = GENERAL CHARACTER VARIABLE C (C*80) CTERM = TERMINATOR LINE - '-' FILLED VARIABLE C (C*4)) CPATRN() = PATTERN USED TO DETECT DATA CLASS C (I*4) IZ0D = NUCLEAR CHARGE READ FROM MASTER FILE C (I*4) IZ1MIN = MINIMUM CHARGE+1 READ FROM MASTER FILE C (I*4) IZ1MAX = MAXIMUM CHARGE+1 READ FROM MASTER FILE C (I*4) IABT = ABORT CODE C (I*4) INDSEL = LOCATION OF (CHARGE,PRNT,GRND) C DATA BLOCK IN FILE C (I*4) IZDAT = CURRENT DATA BLOCK ION CHARGE +1 C (I*4) ISEL = GENERAL INDEX C (I*4) I = GENERAL INDEX C (I*4) IT = GENERAL INDEX C (I*4) ID = GENERAL INDEX C (I*4) IZCHK = INDEX TO VERIFY DATA Z1 SET COMPLETE C (I*4) IPRTR() = PARENT INDICES IN DATA SET C (I*4) IGRDR() = GROUND INDICES IN DATA SET C (I*4) LCK = MUST BE GREATER THAN 'ITMAXD' & 'IDMAXD' C & 'ITMAX' - ARRAY SIZE FOR SPLINE CALCS. C (R*8) A() = GENERAL ARRAY C (R*8) DRCOF0(,) = INTERPOLATION OF DRCOFD(,,) W.R.T DTEV() C (L*8) LEXIST = TRUE --- FILE TO OPEN EXISTS ELSE NOT C (I*4) L1 = PARAMETER = 1 C (I*4) IOPT = DEFINES THE BOUNDARY DERIVATIVES FOR THE C SPLINE ROUTINE 'XXSPLN', SEE 'XXSPLN'. C (L*4) LSETX = .TRUE. => SET UP SPLINE PARAMETERS RELATING C TO X-AXIS. C .FALSE. => DO NOT SET UP SPLINE PARAMETERS C RELATING TO X-AXIS. C (I.E. THEY WERE SET IN A PREVIOUS C CALL ) C (VALUE SET TO .FALSE. BY 'XXSPLN') C (R*8) DY() = SPLINE INTERPOLATED DERIVATIVES C C C ROUTINES: C ROUTINE SOURCE BRIEF DESCRIPTION C ------------------------------------------------------------ C I4UNIT ADAS FETCH UNIT NUMBER FOR OUTPUT OF MESSAGES C I4FCTN ADAS CONVERT STRING TO INTEGER FORM C C (R*8 ADAS FUNCTION - 'R8FUN1' ( X -> X) ) C C AUTHOR : Alessandro Lanzafame C C DATE : 8th December 1995 C C----------------------------------------------------------------------- C C VERSION: 1.1 DATE: 12-03-98 C MODIFIED: RICHARD MARTIN C - PUT UNDER SCCS CONTROL C C----------------------------------------------------------------------- CHARACTER*120 DSNINC INTEGER ICLASS, IDMAX, IDMAXD, IFAIL INTEGER IGRDD, IPRTD, ISDIMD, ISMAXD INTEGER ITDIMD, ITMAX, ITMAXD, IZ0 INTEGER IZ1, IZDIMD, IZMAXD INTEGER NPART(IZDIMD), NPARTR(IZDIMD) LOGICAL LPART REAL*8 DDENS(IDMAX), DDENSD(ITDIMD) REAL*8 DRCOFD(ISDIMD,ITDIMD,ITDIMD) REAL*8 DRCOFI(ITMAX,IDMAX), DTEV(ITMAX) REAL*8 DTEVD(ITDIMD), ZDATA(ISDIMD)