ADAS Subroutine b4datd
SUBROUTINE B4DATD ( XRMEMB , NPMNCL , IMAXX ,
& NREPX , MAXTM , TEM ,
& NDBFILM , NBFIL , NCUTMC ,
& AUGM , DRM , DRMSF ,
& PWSAT , DSNXRT , OPEN17 ,
& dsnin , adas_c , adas_u
& )
C-----------------------------------------------------------------------
C
C ************** FORTRAN77 SUBROUTINE: B4DATD ************************
C
C VERSION: 1.1
C
C PURPOSE: PROCESS DIELECTRONIC DATA FILES TO PREPARE
C DIELECTRONIC AND AUGER DATA FOR ADAS204
C
C THE DR FILE LAYOUT IS SPECIFIED BY THE ADF09 FORMAT
C
C DATA: THE SOURCE DATA IS ACCESSED THROUGH A CROSS-REFERENCE FILE
C /../adas/adf18/a09_p204/<ion>n.dat
C WHERE <ION> DENOTES THE RECOMBINED ION (EG. C4)
C
C THE PARENT CROSS-REFERENCING IS BASED ON THE ADAS204
C DRIVING INPUT DATA FILE SPECIFIED BY THE ADF25 FORMAT
C /../adas/adf25/bns<yr>#<seq>/bns<yr>#<seq>_<code>.dat
C WHERE <yr> IS A TWO DIGIT YEAR NUMBER
C <seq> IS THE ISO=ELECTRONIC SEQUENCE SYMBOL
C <code> IS AN ION CODE (eg. c4) OR ELEMENT CODE
C (EG. c ) IF A NUMBER OF IONS OF THE
C ISO-ELECTRONIC SEQUENCE ARE STACKED
C SEQUENTIALLY.
C
C THE FILE NAMES ARE ANALYSED BY ADAS204 AND WARNINGS ISSUED
C IF APPROPRIATE. THESE WARNINGS ARE NOT NECESSARILY FATAL.
C FOR EXAMPLE, THE ADF18 FILE CONTAINS THE NAME OF ITS
C EXPECTED DRIVING ADF25 FILE. THESE DIFFER IF THE ADF25
C FILE IS DRIVING A COMPLETE ISO-ELECTRONIC SEQUENCE CALC.
C RATHER THAN JUST A SINGLE ION CASE.
C
C
C INPUT: (C*8) XRMEMB = CROSS-REFERENCE PARTITIONED DATA SET MEMBER
C (I*4) IMAXX = NUMBER OF REPRESENTATIVE LEVELS IN THE
C EXTENDED SET REQUIRED FOR THE MAIN CODE
C (I*4) NREPX() = REPRESENTATIVE N-SHELLS FOR THE MAIN CODE
C (I*4) NPMNCL = NUMBER OF PARENTS INCLUDED IN THE MAIN CODE
C ( GIVEN BY THE <INMEMB> FILE )
C (I*4) MAXTM = NUMBER OF TEMPERATURES USED IN MAIN CODE
C (R*8) TEM() = TEMPERATURES (K) USED IN THE MAIN CODE
C (I*4) NDBFILM = PARAMETER = MAXIMUM NUMBER OF DR FILES
C MUST BE GREATER THAN NDBFIL
C (C*120)DSNXRT = FIRST PART OF CROSS REFERENCE FILE NAME
C (L) OPEN17 = .FALSE. -OUTPUT TO UNIT=17 SWITCHED OFF.
C
C OUTPUT: (I*4) NCUTMC(,) = N-SHELL CUT FOR AUGER RATES (AUGER CHANNEL
C OPENS AT NCUTMC+1)
C 1ST. INDEX = INITIAL PARENT
C 2ND. INDEX = FINAL PARENT
C (R*8) AUGM(,,,) = AUGER RATES (SEC-1)
C 1ST INDEX = REPRESENTATIVE LEVEL
C 2ND INDEX = INITIAL PARENT
C 3RD INDEX = INITIAL SPIN SYSTEM
C 4TH INDEX = FINAL PARENT
C (R*8) DRM(,,,,) = DIELECTRONIC RATE COEFFTS. (CM3 SEC-1)
C 1ST INDEX = REPRESENTATIVE LEVEL
C 2ND INDEX = TEMPERATURE
C 3RD INDEX = INITIAL PARENT
C 4TH INDEX = INITIAL SPIN SYSTEM
C 5TH INDEX = FINAL PARENT
C (I*4) NBFIL = NUMBER OF DR FILES
C
C PROGRAM:(I*4) NDREP = PARAMETER = MAXIMUM NUMBER OF
C REPRESENTATIVE LEVELS
C (I*4) NDPRT = PARAMETER = MAXIMUM NUMBER OF PARENTS
C (I*4) NDSYS = PARAMETER = MAXIMUM NUMBER OF SPIN SYSTEMS
C (I*4) NDT = PARAMETER = MAXIMUM NUMBER OF TEMPERATURES
C (I*4) NDBFIL = PARAMETER = MAXIMUM NUMBER OF DR FILES
C (I*4) NDPAIR = PARAMETER = MAXIMUM NUMBER OF AUGER RATE
C PARENT PAIRS
C (I*4) NDREP = PARAMETER = MAXIMUM NUMBER OF MAIN CODE
C REPRESENTATIVE LEVELS
C (I*4) NDBREP = PARAMETER = MAXIMUM NUMBER OF DR
C REPRESENTATIVE LEVELS
C
C (C*1) CHARS1 = ONE CHARACTER
C (C*4) CHARS4 = FOUR CHARACTERS
C (C*120)DSNBD() = DR DIELECTRONIC DATA FILE MEMBER NAMES
C (C*30) BPDS = DR PARENT STATE DESCRIPTOR
C (C*30) BPDSC() = DR PARENT STATE DESCRIPTOR ARRAY
C (C*120)DSNMC = MAINCL CODE INPUT FILE MEMBER NAME
C (C*120)DSNMCO = MAINCL CODE OUTPUT FILE MEMBER NAME
C (C*120)DSN = CHARACTER FILE NAME WORKSPACE
C (C*120)DSHORT = CURRENT FILE NAME WITH SYMBOLIC NAMES
C (C*8) MEMBER = FILE MEMBER NAME WORKSPACE
C (C*80) STRING = LINE OUT STRING
C (C*133)LSTRNG = LINE IN STRING
C (C*89) LSTRGO = LONG LINE OUT STRING
C (L*4) OPEN12 = 'TRUE' IF OPEN
C (L*4) OPEN13 = 'TRUE' IF OPEN
C (L*4) OPEN14 = 'TRUE' IF OPEN
C (L*4) LEXIST = 'TRUE' IF FILE EXISTS
C (L*4) LSJ = 'TRUE' IF FILE EXISTS
C (L*4) LSETX = 'TRUE' IF SPLINE UNINITIATED
C
C (I*4) I = RUNNING INDEX
C (I*4) IBDPA() = PARENT INDEX IN THE COMPLETE DR LIST
C (I*4) IBFIL = RUNNING INDEX FOR DR FILES
C (I*4) IBREP = RUNNING REPRESENTATIVE SHELL INDEX
C (I*4) IBMAX() = NUMBER OF DR REPRESENTATIVE LEVELS
C 1ST. INDEX = DR FILE INDEX
C (I*4) IBPR = CURRENT PARENT READ FROM DR FILE
C (I*4) IBPRIA(,) = INITIAL PARENT INDEX FROM LIST FOR A FILE
C 1ST. INDEX = LEVEL INDEX
C 2ND. INDEX = DR FILE INDEX
C (I*4) IBPRFA(,) = FINAL PARENT INDEX FROM LIST FOR A FILE
C 1ST. INDEX = LEVEL INDEX
C 2ND. INDEX = DR FILE INDEX
C (I*4) IBREP = RUNNING INDEX FOR REPRESENTATIVE LEVELS
C (I*4) IC = COUNTER OF N-SHELLS BELOW AUGER CUT
C (I*4) IF = RUNNING INDEX ON TOTAL PARENT LIST
C (I*4) II = RUNNING INDEX ON TOTAL PARENT LIST
C (I*4) IMNPA() = PARENT INDEX CORRESPONDING TO MAIN CODE
C (I*4) IND = CHARACTER INDEX POSITION MARKER ON STRING
C (I*4) IOPT = SPLINE END CONDITION OPTION (SET =-1)
C (I*4) IP = RUNNING INDEX ON TOTAL PARENT COUNT FROM
C DR FILES
C (I*4) IPI = INITIAL PARENT OF SUPPL. AUGERING STATE
C (I*4) IPF = FINAL PARENT AFTER SUPPL. AUGER
C (I*4) ISYSI = INITIAL SPIN INDX. OF SUPPL.AUGERING STATE
C (I*4) IS = RUNNING INDEX
C (I*4) ISREP = SUPPLEMENTARY REPRESENTATIVE LEVEL INDEX
C (I*4) ISUPPLE = NUMBER OF SUPPLE. AUGER RATES
C (I*4) IPAIRS = RUNNING INDEX FOR AUGER RATE PARENT PAIRS
C (I*4) IPARM1 = DR FILE PARAMETER - PRTI
C (I*4) IPARM2 = DR FILE PARAMETER - TRMPRT
C (I*4) IPARM3 = DR FILE PARAMETER - SPNPRT
C (I*4) IPARM4 = DR FILE PARAMETER - PRTF
C (I*4) IPARM5 = DR FILE PARAMETER - TRMPRT
C (I*4) IPARM6 = DR FILE PARAMETER - SPNPRT
C (I*4) IPARM7 = DR FILE PARAMETER - NSYS
C (I*4) IPARM8 = DR FILE PARAMETER - SYS
C (I*4) IPARM9 = DR FILE PARAMETER - SPNSYS
C (I*4) IPRT = RUNNING INDEX FOR PARENTS
C (I*4) IPT = RUNNING INDEX ON TOTAL PARENT COUNT FROM
C DR FILES
C (I*4) IR = UNSPECIFIED LINE COUNTER
C (I*4) IREAD = FLAG FOR READ OPTION
C (I*4) IREFI() = INITIAL PARENT FOR AUGER RATE IN FULL LIST
C (I*4) IREFF() = FINAL PARENT FOR AUGER RATE IN FULL LIST
C (I*4) IREP = MAIN CODE REPRESENTATIVE LEVEL COUNTER
C (I*4) IRFF = POINTER TO FINAL PARENT IN FULL LIST
C (I*4) IRFI = POINTER TO INITIAL PARENT IN FULL LIST
C (I*4) IS = SPIN SYSTEM INDEX
C (I*4) ISET(,,) = FLAG FOR INPUT OF SUPP. AUGER DATA
C ISET = 0 NO SUPP. DATA
C ISET = 1 SUPP. DATA
C 1ST INDEX - IPRT
C 2ND INDEX - ISYS
C 3RD INDEX - JPRT
C (I*4) ISPF = FINAL PARENT SPIN FOR AUGER RATE
C (I*4) ISPFA(,) = FINAL PARENT SPIN FOR AUGER RATE
C 1ST. INDEX = AUGER PARENT PAIR
C 2ND. INDEX = DR FILE INDEX
C (I*4) ISPI = INITIAL PARENT SPIN FOR AUGER RATE
C (I*4) ISPIA(,) = FINAL PARENT SPIN FOR AUGER RATE
C 1ST. INDEX = AUGER PARENT PAIR
C 2ND. INDEX = DR FILE INDEX
C (I*4) IST1 = PARAMETER = MAIN OUTPUT STREAM
C (I*4) ISYS = RUNNING INDEX FOR SPIN SYSTEMS
C (I*4) IT = RUNNING INDEX FOR TEMPERATURES
C (I*4) JPRT = RUNNING INDEX FOR PARENTS
C (I*4) LEN1 = FIRST NON-BLANK CHARACTER IN MEMBER NAME
C (I*4) LEN2 = LAST NON-BLANK CHARACTER IN MEMBER NAME
C (I*4) MP() = INITIAL PARENT INDEX FOR AUGER RATE
C (I*4) MPA() = FINAL PARENT INDEX FOR AUGER RATE
C (I*4) NBCUT(,) = N-SHELL CUT FOR AUGER RATES (AUGER CHANNEL
C OPENS AT NBCUT+1)
C 1ST. INDEX = AUGER PARENT PAIR
C 2ND. INDEX = DR FILE INDEX
C (I*4) NBFIL = NUMBER OF DR FILES TO BE INCLUDED
C (I*4) NBREP(,) = DR REPRESENTATIVE LEVEL N -VALUE
C 1ST. INDEX = LEVEL INDEX
C 2ND. INDEX = DR FILE INDEX
C (I*4) NBT = NUMBER OF DR TEMPERATURES
C (I*4) NCUTS = FIRST OPENING NSHELL FOR SUPPL. AUGER
C (I*4) NDAUG = PARAMETER = MAXIMUM N-SHELL OF SPECIFIC
C AUGER DATA
C (I*4) NPAIRS = NUMBER OF AUGER RATE PARENT PAIRS
C (I*4) NPRNT =
C (I*4) NPRNTF() = NUMBER OF FINAL DR PARENTS FOR FILE
C (I*4) NPRNTI() = NUMBER OF INITIAL DR PARENTS FOR FILE
C (I*4) NPTOT = TOTAL NUMBER OF PARENTS ACCUMULATED FROM
C (I*4) NREP = VALUE OF REPRESENTATIVE N-SHELL NREPX(IREP)
C DR FILES
C (I*4) NSREP() = SUPPLEMENTARY AUGER REPRESENT. N-SHELLS
C (I*4) NTOP = MARKS DRM ARRAY ZERO FOR N>NTOP
C
C (R*8) AA() = SET OF AUGER RATES ON A LINE
C (R*8) AAS = SUPPL. AUGER COEFFT. AT NCUTS (SEC-1)
C (R*8) AUGTMP(N) = TEMPORARY STORE OF SUPP. AUGER RATES
C 1ST INDEX - N-SHELL VALUE
C (R*8) DDRROUT() = SCALED DIELECTRONIC DATA FOR SPLINE IN N
C (R*8) DELTAE = SATELLITE ENERGY LEVEL ( K)
C (R*8) DRRIN() = SCALED DIELECTRONIC DATA FOR SPLINE IN N
C (R*8) DRMSF(,,,,) SUMMED DR COEFFICIENT
C 1ST INDEX - FILE
C 2ND INDEX - TEMPERATURE
C 3RD INDEX - INITIAL PARENT
C 4TH INDEX - SPIN SYSTEM
C 5TH INDEX - FINAL PARENT
C (R*8) DRMS() TEMPORARY STORE OF SUMMED DR RATES
C 1ST INDEX - TEMPERATURE
C (R*8) DRMF(,) TEMPORARY STORE OF DR RATES FOR NBREP
C 1ST INDEX - REPRESENTATIVE LEVEL
C 2ND INDEX - TEMPERATURE
C (R*8) DTMP() = TEMPORARY STORE OF DIEL. COEFFICIENTS
C (R*8) DRROUT() = SCALED DIELECTRONIC DATA FOR SPLINE IN N
C (R*8) DY() = WORK VECTOR FOR SPLINE
C (R*8) SLOPE = N POWER FOR SUPPL. AUGER RATE ABOVE NCUTS
C (R*8) SYSFAC(,) = SPIN SYSTEM RESOLUTION OF AUGER RATES
C 1ST. INDEX = AUGER RATE INDEX ON LINE
C 2ND. INDEX = SPIN SYSTEM
C (R*8) TEB() = DR TEMPERATURES (K)
C (R*8) XIN() = WORK VECTOR FOR SPLINES
C (R*8) XOUT() = WORK VECTOR FOR SPLINE
C (R*8) XNBREP() = DR REPRES. LEVEL N -VALUE AS A REAL
C 1ST. INDEX = LEVEL INDEX
C (R*8) XNREPX() = REPRES. LEVEL N-VALUE FROM MAIN CODE AS A
C REAL
C (R*8) YIN() = WORK VECTOR FOR SPLINES
C (R*8) YOUT() = WORK VECTOR FOR SPLINE
C
C
C (R*8) XNREP = REAL VARIABLE FORM OF NREP
C
C (R*8) XICENH = IC ENHANCEMENT FACTOR FOR SPECIFIC
C N-SHELL
C
C
C ROUTINES:
C ROUTINE SOURCE BRIEF DESCRIPTION
C -------------------------------------------------------------
C B4FLNM ADAS EXPAND FILENAME SYMBOLIC PART IF PRESENT
C B4SUMD ADAS SUMS DR COEFFICIENTS OVER ALL N-SHELLS
C FINTB HPS CONVERTS X-VALUES FOR N SHELL SPINE
C XXSLEN ADAS FINDS LENGTH OF NON-BLANK PART OF STRINGS
C XXSPLN ADAS GENERAL CUBIC SPLINE
C
C
C AUTHOR: HUGH P. SUMMERS, JET
C K1/1/57
C JET EXT. 4941
C
C DATE: 12/05/92
C
C UPDATE: 04/06/92, WILLIAM J. DICKSON , JET
C ADJUSTED FORMAT STATEMENTS FROM ORIGINAL SPEC.
C TO READ DR FILES WITH CHARACTERS SHIFTED ONE
C SPACE TO THE LEFT.
C DEFINED OUTPUT STREAM BY PARAMETER IST1
C
C UPDATE: 07/92, WILLIAM J. DICKSON , JET
C DEFINE VALUE OF LSETX AT BEGINNING OF CODE
C
C UPDATE: 27/08/92, WILLIAM J. DICKSON , JET
C (1) ALLOW FOR SPECIFIC DATA FOR LOWEST N-SHELLS WHEN
C INPUTING SUPPLEMENTARY AUGER TRANSITION PROBABILITIES
C (2) DEFINE VARIABLE ISET TO MARK SUPPLEMENTARY DATA INPUT
C
C UPDATE: 06/09/92, WILLIAM J. DICKSON , JET
C XREF FILES NOW STORED UNDER JETXLE
C
C UPDATE: 14/12/92, WILLIAM J. DICKSON , JET
C SET UP ROUTINE TO SUM DR COEFFICIENTS OVER
C REPRESENTATIVE SET
C UPDATE: 13/11/93, WILLIAM J. DICKSON , JET
C (1) ALLOW FOR IC ENHANCEMENT FACTOR TO BE READ IN AS PART
C FILE AND SUBSEQUENT ADJUSTMENT OF DR RATE COEFFICIENT
C CHECK CODING AROUND FORMAT STATEMENT 1036.
C (NOTE THAT 1037 WAS ADDED AT THIS STAGE)
C
C UPDATE: 29/05/96 HP SUMMERS - COMPLETED UNIX FILE NAME PROCUREMENT
C WITH ENVIRONMENT VARIABLE SYMBOL
C SUBSTITUTION USING B4FLNM
C UPDATE: 22/01/97 HP SUMMERS - CHANGED NAME TO B4DATD FROM BDMNCL1
C AND SUBROUTINE BDDRSM2 TO B4SUMD
C UPDATE: 11/02/97 HP SUMMERS - IMPROVED INTERPOLATION OF SUPPLE.
C AUGER DATA FROM X-REF FILE.
C UPDATE: 17/02/97 HP SUMMERS - IMPROVED INTERPOLATION OF DR. DATA
C WITH N, TO ENSURE ABSOLUTE ZEROS
C ABOVE CUT-OFF N-SHELL
C-----------------------------------------------------------------------
C
C UNIX-IDL CONVERSION:
C
C VERSION: 1.1 DATE: 05-03-98
C MODIFIED: H. SUMMERS
C - MODIFIED VESION OF BDMNCL1.FOR v 1.1
C
C VERSION: 1.2 DATE: 26-11-98
C MODIFIED: Martin O'Mullane
C - redefine DSNXRT as the full DR supplement file
C name. It is now given in the adf25 dataset and
C passed through to here.
C
C VERSION: 1.3 DATE: 22-09-2000
C MODIFIED: Martin O'Mullane
C - Initialize ibmax to 0 to avoid troubles in the
C H-like case where we have no DR.
C
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
CHARACTER*80 ADAS_C, ADAS_U
CHARACTER*120 DSNIN, DSNXRT
CHARACTER*8 XRMEMB
INTEGER IMAXX, MAXTM, NBFIL
INTEGER NCUTMC(NDPRT,NDPRT), NDBFILM, NPMNCL
INTEGER NREPX(NDREP)
LOGICAL OPEN17
REAL*8 AUGM(NDREP,NDPRT,NDSYS,NDPRT)
REAL*8 DRM(NDREP,NDT,NDPRT,NDSYS,NDPRT)
REAL*8 DRMSF(NDBFILM,NDT,NDPRT,NDSYS,NDPRT)
REAL*8 PWSAT(NDBFILM,NDT,NDPRT,NDSYS,NDPRT)
REAL*8 TEM(NDT)