ADAS Subroutine d4data
SUBROUTINE D4DATA( TITLE , DATE , UIDIN , USERID , & ISWIT , NIND , YEAR , SELTAB , REPTAB , & NDZ , NDDEN , NDTIN , & IZ0 , IZ1 , NEL1 , IZ2 , NEL2 , & T , TL , MAXT , & DENSA , DENSL , MAXD , & ATTY , ARRAY , ZINTRP , DINTRP , TINTRP , & DSNIN , DSNO , OPEN17 & ) C----------------------------------------------------------------------- C C ****************** FORTRAN77 SUBROUTINE: D4DATA ********************* C C PURPOSE: TO OPEN/ACQUIRE DATA FROM STD.MASTER CONDENSED COLLISIONAL- C DIELECTRONIC FILES, OBTAIN INTERPOLATED COLLISIONAL- C DIELECTRONIC RECOMBINATION AND IONISATION COEFFICIENTS, AND C PREPARE ELEMENT MASTER FILE IF REQUIRED. C C CALLING PROGRAM: ADAS404 C C DATA: C C INPUT: C ------ C THE SOURCE DATA IS CONTAINED AS MEMBERS OF PARTITIONED C DATA SETS AS FOLLOWS: C C 1. JETUID.ACD<YR>.DATA C 2. JETUID.SCD<YR>.DATA C 3. JETUID.CCD<YR>.DATA C 4. JETUID.PRB<YR>.DATA C 5. JETUID.PRC<YR>.DATA C 6. JETUID.PLT<YR>.DATA C 7. JETUID.PLS<YR>.DATA C C WHERE <YR> DENOTES TWO INTEGERS FOR THE YEAR SELECTED. C IF <YR> IS BLANK THEN THE CURRENT RECOMMENDED DATA SETS ARE C USED C C 'JETUID' IS GIVEN BY 'UIDIN' C C THE PARTICULAR TYPE OPENED (1-7) IS SELECTED BY 'ISWIT' C C THE MEMBERS OF THE PARTITIONED DATA SETS ARE <SE> C WHERE <SE> IS THE ONE OR TWO LETTER ION SEQUENCE CODE C C THIS PROGRAM ASSESSES ONLY STANDARD MASTER CONDENSED FILES. C ----------------------------------------------------------- C C C OUTPUT: C ------- C THE OUTPUT ELEMENT MASTER DATA IS IN SEQUENTIAL FILES AS C FOLLOWS: C C 1. JETUID.ACD<YR>#<EL>.DATA C 2. JETUID.SCD<YR>#<EL>.DATA C 3. JETUID.CCD<YR>#<EL>.DATA C 4. JETUID.PRB<YR>#<EL>.DATA C 5. JETUID.PRC<YR>#<EL>.DATA C 6. JETUID.PLT<YR>#<EL>.DATA C 7. JETUID.PLS<YR>#<EL>.DATA C C WHERE <YR> IS AS ABOVE AND <EL> IS THE ELEMENT SYMBOL C C 'JETUID' IS GIVEN BY 'USERID' C C SUBROUTINE: C C INPUT : (C*32) TITLE = USER ENTERED PROGRAM RUN TITLE C INPUT : (C*8) DATE = CURRENT DATE (AS 'DD/MM/YY') C INPUT : (C*6) UIDIN = PROJECT UID FOR INPUT CONDENSED DATA FILE C INPUT : (C*6) USERID = USER ID FOR OUTPUT INC. ELEMENT MASTER FILE C C INPUT : (I*4) ISWIT = DATA TYPE SELECTOR (SEE ABOVE) (1 -> 7) C INPUT : (I*4) NIND = NUMBER OF STAGES BEGINNING WITH LOWEST TO C BE SKIPPED. IT IS ASSUMED THAT DATA FOR C THESE STAGES WILL BE SUPPLIED SEPARATELY. C (DESIGNED FOR NEUTRAL STATE). C INPUT : (C*2) YEAR = REFERENCE YEAR (ABBREVIATED) OF INPUT C MASTER CONDENSED COLL.-DIEL. COEFFTS. FILE. C INPUT : (L*4) SELTAB = .TRUE. => PREPARE ELEMENT MASTER FILE C .FALSE. => DO NOT PREPARE ELEM. MASTER FILE C INPUT : (L*4) REPTAB = .TRUE. => REPLACE EXISTING ELEMENT MASTER C FILES. C = .FALSE. => DO NOT REPLACE EXISTING ELEMENT C MASTER FILES. C ('REPTAB' IS IGNORED IF 'SELTAB'=.FALSE.) C C INPUT : (I*4) NDZ = NUMBER OF CHARGE STATES C INPUT : (I*4) NDDEN = MAXIMUM NUMBER OF INPUT DENSITIES C INPUT : (I*4) NDTIN = MAXIMUM NUMBER OF INPUT TEMPERATURES C C INPUT : (I*4) IZ0 = ELEMENT NUCLEAR CHARGE C (DETERMINES OUTPUT FILE NAME) C INPUT : (I*4) IZ1 = MINIMUM ALLOWED IONIC CHARGE + 1 C (ACCORDING TO AVAILABLE NO. OF SEQUENCES C STORED IN FILES FOR 'YEAR') C INPUT : (I*4) NEL1 = NUMBER OF ELECTRONS IN STATE 'IZ1' C INPUT : (I*4) IZ2 = MAXIMUM ALLOWED IONIC CHARGE + 1 C INPUT : (I*4) NEL2 = NUMBER OF ELECTRONS IN STATE 'IZ2' C C INPUT : (R*8) T() = SET OF 'MAXT' ELECTRON TEMPERATURES: KELVIN C INPUT : (R*8) TL() = LOG10('T()') C INPUT : (I*4) MAXT = NUMBER OF TEMPERATURES (<= 'NDTIN' ) C C INPUT : (R*8) DENSA() = SET OF 'MAXD' ELECTRON DENSITIES: CM-3 C INPUT : (R*8) DENSL() = LOG10 ('DENSA()') C INPUT : (I*4) MAXD = NUMBER OF DENSITIES (<= 'NDDEN' ) C C OUTPUT: (R*8) ATTY(,) = WORKING SPACE FOR 3-WAY SPLINE ITERPOLATION C ( STORES LOG10(INTERPOLATED VALUES) ) C 1ST DIMENSION: TEMPERATURE C 2ND DIMENSION: DENSITY C OUTPUT: (R*8) ARRAY(,,)= LOG10(INTERPOLATED DATA) FOR: C 1ST ARRAY DIMENSION - ION CHARGE/STAGE C 2ND ARRAY DIMENSION - TEMPERATURE C 3RD ARRAY DIMENSION - DENSITY C OUTPUT: (L*4) ZINTRP() = .TRUE. => 'ARRAY(,,)' VALUE FOR CHARGE- C STATE INTERPOLATED. C = .FALSE. => 'ARRAY(,,)' VALUE FOR CHARGE- C STATE EXTRAPOLATED. C 1ST DIMENSION: CHARGE-STATE INDEX C OUTPUT: (L*4) DINTRP(,)= .TRUE. => 'ARRAY(,,)' VALUE FOR DENSITY C INDEX AND CHARGE INTERPOLATED. C = .FALSE. => 'ARRAY(,,)' VALUE FOR DENSITY C INDEX AND CHARGE EXTRAPOLATED. C 1ST DIMENSION: DENSITY INDEX C 2ND DIMENSION: CHARGE-STATE INDEX C OUTPUT: (L*4) TINTRP(,)= .TRUE. =>'ARRAY(,,)' VALUE FOR TEMPERATURE C INDEX AND CHARGE INTERPOLATED. C = .FALSE. =>'ARRAY(,,)' VALUE FOR TEMPERATURE C INDEX AND CHARGE EXTRAPOLATED. C 1ST DIMENSION: TEMPERATURE INDEX C 2ND DIMENSION: CHARGE-STATE INDEX C OUTPUT: (C*80) DSNO() = OUPUT MASTER FILE NAME FOR EACH DATA TYPE C C OUTPUT: (C*80) DSNIN(,)= INPUT FILE NAME FOR EACH DATA TYPE AND C CHARGE C C (I*4) NKDIM = PARAMETER = C MAXIMUM ARRAY DIMENSIONS FOR CONDENSED C MASTER FILE DATA FOR A GIVEN CHARGE STATE. C (I*4) IUNT12 = PARAMETER = UNIT FOR READING DATA = 12 C C (R*8) LOGMIN = PARAMETER = MINIMUM LOG VALUE ALLOWED C C (C*2) XFESYM = FUNCTION - (SEE ROUTINES SECTION BELOW) C (C*30) DSNAME = INPUT MASTER CONDENSED FILE DATA SET NAME C (C*30) DSNOUT = OUTPUT ELEMENT MASTER FILE DATA SET NAME C (C*2) SEQUA = ELEMENT SYMBOL FOR GIVEN NUCLEAR CHARGE C (C*3) CDTYP() = INPUT MASTER CONDENSED FILE TYPE USED FOR C CONSTRUCTING 'DSNAME'/'DSNOUT'. () = 'ISWIT' C C (L*4) LEXIST = .TRUE. => STANDARD MASTER CONDENSED FILE C EXISTS. C .FALSE. => STANDARD MASTER CONDENSED FILE C DOES NOT EXIST. C (L*4) LERROR = .TRUE. => ERROR FOUND IN READING STANDARD C MASTER CONDENSED FILE. C .FALSE =>NO ERROR FOUND IN READING STANDARD C MASTER CONDENSED FILE. C (L*4) LSWIT = .TRUE. => SET OF 'EIA' VALUES PRESENT IN C MASTER CONDENSED FILE. C .FALSE => SET OF 'EIA' VALUES NOT PRESENT C IN MASTER CONDENSED FILE. C C (I*4) I4UNIT = FUNCTION (SEE ROUTINE SECTION BELOW) C (I*4) IZSTRT = 'IZ1' C (I*4) IZSTOP = 'IZ2' C (I*4) NZMAX = 'NDZ' C (I*4) NDMAX = 'NDDEN' C (I*4) NTMAX = 'NDTIN' C (I*4) ID = ARRAY SUBSCRIPT USED FOR DENSITY VALUES C (I*4) IS = ARRAY SUBSCRIPT USED FOR SEQUENCE VALUES. C REPRESENTS NUCLEAR CHARGE FOR ISO-ELECTRONIC C SEQUENCE ELEMENT. C (IMPLIES NUCLEAR CHARGE 'IS'-LIKE SEQUENCE) C (I*4) IT = ARRAY SUBSCRIPT USED FOR TEMPERATURE VALUES C (I*4) IDE = NUMBER OF REDUCED DENSITIES READ FROM INPUT C MASTER CONDENSED FOR SEQUENCE 'IS'. C (I*4) ITE = NO. OF REDUCED TEMPERATURES READ FROM INPUT C MASTER CONDENSED FOR SEQUENCE 'IS'. C (I*4) IZE = NO. OF CHARGE STATES GIVEN IN THE INPUT C MASTER CONDENSED FOR SEQUENCE 'IS'. C (I*4) IZF = ELEMENT RECOMBINING ION CHARGE (IZ0+1-IS) C (I*4) LS = NON-BLANK LENGTH OF 'SEQUA'. C (I*4) LD1 = VALUE FOR FIRST DIMENSION OF 'ARRAY(,,)' C (REPRESENTS STAGE/ION CHARGE) C C (R*8) ZIPT() = SET OF 'IZE' INPUT RECOMBINING ION CHARGES C READ FROM CONDENSED MASTER FILE. C (R*8) TR() = SET OF 'ITE' INPUT REDUCED TEMPERATURES C (K/Z1**2) READ FROM CONDENSED MASTER FILE. C (R*8) DENSR() = SET OF 'IDE' INPUT REDUCED DENSITIES (CM-3/ C Z1**7) READ FROM CONDENSED MASTER FILE. C (R*8) AIPT(,,)= CONDENSED MASTER FILE DATA. COLL-DIEL COEFF. C 1ST DIMENSION: REDUCED DENSITY ('DENSR()') C 2ND DIMENSION: REDUCED TEMPERATURE ('TR()') C 3RD DIMENSION: CHARGE STATE ('ZIPT()') C (R*8) EIA() = IONISATION RATE COEFFICIENTS: ()=ION CHARGE C (UNITS: PRIOR TO 'XXCEIA' CALL: WAVE NUMBERS C AFTER CALL TO 'XXCEIA': RYDBERGS ) C NOTE: C STREAM HANDLING: C STREAM 12 IS USED FOR READING CONDENSED MASTER FILES C STREAM 13 IS USED FOR WRITING ELEMENT MASTER FILES C C THIS SUBROUTINE IS A STRUCTURED AND AMENDED VERSION OF THE C SUBROUTINE 'EIONST' WRITTEN BY H.P. SUMMERS, JET (VERSION: C 2 NOV 1989 / 1FEB 1990). C C ROUTINES: C ROUTINE SOURCE BRIEF DESCRIPTION C ------------------------------------------------------------ C D4OUTF ADAS OUTPUT OF ELEMENT MASTER FILE C DXSPL1 ADAS 1ST PART OF 3-WAY SPLINE OF INPUT DATA C DXSPL2 ADAS 2ND PART OF 3-WAY SPLINE OF INPUT DATA C DXSPL3 ADAS 3RD PART OF 3-WAY SPLINE OF INPUT DATA C XXOPEN ADAS INQUIRE AND OPEN A DATA SET C XXINST ADAS FETCH DATA FROM STANDARD MASTER C CONDENSED FILE. C XXCEIA ADAS CONVERT ION. RATE COEF. FROM WAVE NOS TO C RYDBERGS AND EXTRAPOLATE MISSING VALUES C XFESYM ADAS CHARACTER*2 FUNCTION - C FETCH ELEMENT SYMBOL FOR GIVEN NUCLEAR C CHARGE C XXTERM ADAS TERMINATES PROGRAM WITH MESSAGE C I4UNIT ADAS FETCH UNIT NUMBER FOR OUTPUT OF MESSAGES C C C AUTHOR: PAUL E. BRIDEN (TESSELLA SUPPORT SERVICES PLC) C K1/0/81 C JET EXT. 4569 C C DATE: 08/10/90 C C DATE: 26/10/90 - PE BRIDEN (JET/TESSELLA) - MINIMUM LOG10 VALUE C ALLOWED WAS SET EQUAL TO 'LOGMIN'. I.E. GIVES C LOWER LIMIT FOR 'ARRAY(,,)'. C C UPDATE: 29/01/91 - PE BRIDEN - ADAS91 -INTRODUCED 'TINTRP' & 'DINTRP' C - AMENDED ARGUMENT LIST C - AMENDED ARGUMENT LISTS FOR C 'D4SPL2' AND 'D4SPL3'. C C UPDATE: 30/01/91 - PE BRIDEN - ADAS91 -INTRODUCED 'ZINTRP' C C UPDATE: 13/02/91 - PE BRIDEN - ADAS91 - REPLACED XXESYM WITH XFESYM C C UPDATE: 21/02/91 - PE BRIDEN - ADAS91: INTRODUCED 'IZSTRT' , 'IZSTOP' C 'NZMAX', 'NDMAX' AND 'NTMAX' TO STOP C ICA MESSAGES BEING GENERATED. C C UPDATE: 05/03/91 - PE BRIDEN - ADAS91: ADDED CALL TO 'XXOPEN' BEFORE C AMENDED 'XXINST'. C C UPDATE: 20/03/91 - PE BRIDEN - ADAS91: MAJOR CHANGES TO SPLINE C ROUTINES 'D4SPL?' -> 'DXSPL?'. C DENSA() ADDED TO ARGUMENT LIST C C UPDATE: 23/04/93 - PE BRIDEN - ADAS91: ADDED I4UNIT FUNCTION TO WRITE C STATEMENTS FOR SCREEN MESSAGES C C UPDATE: 24/05/93 - PE BRIDEN - ADAS91: CHANGED I4UNIT(0)-> I4UNIT(-1) C C UNIX-IDL PORT: C C VERSION: 1.1 DATE: 11-11-96 C MODIFIED: WILLIAM OSBORN (TESSELLA SUPPORT SERVICES PLC) C - FIRST CONVERTED C C VERSION: 1.2 DATE: 20-11-96 C MODIFIED: WILLIAM OSBORN (TESSELLA SUPPORT SERVICES PLC) C - TIDIED OUTPUT C C VERSION: 1.3 DATE: 28-11-96 C MODIFIED: WILLIAM OSBORN (TESSELLA SUPPORT SERVICES PLC) C - CORRECTED DEFINITION OF OPEN17 TO LOGICAL TYPE C C----------------------------------------------------------------------- C----------------------------------------------------------------------- CHARACTER*8 DATE CHARACTER*80 DSNIN(50,10), DSNO(10) CHARACTER*32 TITLE CHARACTER*6 UIDIN, USERID CHARACTER*2 YEAR INTEGER ISWIT, IZ0, IZ1, IZ2 INTEGER MAXD, MAXT, NDDEN, NDTIN INTEGER NDZ, NEL1, NEL2, NIND LOGICAL DINTRP(NDDEN,NDZ), OPEN17, REPTAB LOGICAL SELTAB, TINTRP(NDTIN,NDZ) LOGICAL ZINTRP(NDZ) REAL*8 ARRAY(NDZ,NDTIN,NDDEN), ATTY(NDTIN,NDDEN) REAL*8 DENSA(NDDEN), DENSL(NDDEN) REAL*8 T(NDTIN), TL(NDTIN)