ADAS Subroutine h9int
subroutine h9int( itran , stcode , i1a , i2a , aval , & iadftyp, DTYPE , ADF37 , iz1 , MAXT , & beth , il , nv , ia , wa , & xja , omga , scx , ilbeth, DPARAM, & zpla , bwnoa , ipla , TINE , IFOUT, & upsilon , dnsilon ) C---------------------------------------------------------------------- C C ****************** FORTRAN77 SUBROUTINE: H9INT ********************* C C PURPOSE: GENERATES MAXWELLIAN AND NON-MAXWELLIAN UPSILONS AND C DOWNSILONS FROM GIVEN COLLISIONAL DATA. THIS PROGRAM C IS A SUBROUTINE VERSION OF ADAS809. C C CALLING PROGRAM: CALLED FROM IDL VIA A C INTERFACE C C SUBROUTINE: C C (I*4) NDLEV = PARAMETER = MAX. NUMBER OF LEVELS ALLOWED C (I*4) NDTRN = PARAMETER = MAX. NO. OF TRANSITIONS ALLOWED C (I*4) NEDIM = PARAMETER = MAX. OF INPUT DATA FILE ENERGIES C (I*4) NDTEM = PARAMETER = MAXIMUM OF DATA CONVERSION TEMPS C (I*4) NDTIN = PARAMETER = MAX.NUMBER OF ISPF ENTERED TEMPS C (I*4) NFDIM = PARAMETER = MAX.NO. OF ENERGIES IN NUM. DIST. C C (I*4) I4UNIT = FUNCTION (SEE ROUTINE SECTION BELOW) C (I*4) IZ1 = RECOMBINING ION CHARGE READ FROM INPUT FILE C (NOTE: IZ1 SHOULD EQUAL IZ+1) C (I*4) IL = INPUT DATA FILE: NUMBER OF ENERGY INDEX C LEVELS. C (I*4) ITRAN = INPUT DATA FILE: TOTAL NUMBER OF TRANSITIONS. C (I*4) ICNTE = NUMBER OF ELECTRON IMPACT TRANSITIONS INPUT C (I*4) ICNTP = NUMBER OF PROTON IMPACT TRANSITIONS INPUT C (I*4) ICNTR = NUMBER OF FREE ELECTRON RECOMBINATIONS INPUT C (I*4) ICNTH = NO. OF CHARGE EXCHANGE RECOMBINATIONS INPUT C (I*4) NV = INPUT DATA FILE: NUMBER OF GAMMA/TEMPERATURE C PAIRS FOR THE SELECTED TRANSITION. C (I*4) MAXT = NUMBER OF TEMPERATURE VALUES. C (I*4) IFOUT = 1 => 'TINE(ARRAY)' UNITS: KELVIN C = 2 => 'TINE(ARRAY)' UNITS: EV C = 3 => 'TINE(ARRAY)' UNITS:REDUCED TEMPERATURE C (I*4) IUPPER = SELECTED TRANSITION: UPPER LEVEL ARRAY INDEX C (I*4) ILOWER = SELECTED TRANSITION: LOWER LEVEL ARRAY INDEX C (I*4) LUPPER = SELECTED TRANSITION: UPPER INDEX LEVEL C (I*4) LLOWER = SELECTED TRANSITION: LOWER INDEX LEVEL C C (R*8) R8TCON = FUNCTION (SEE ROUTINE SECTION BELOW) C (R*8) EUPPER = SELECTED TRANSITION: UPPER ENERGY LEVEL C RELATIVE TO INDEX LEVEL 1. (CM-1) C (R*8) ELOWER = SELECTED TRANSITION: LOWER ENERGY LEVEL C RELATIVE TO INDEX LEVEL 1. (CM-1) C (R*8) WUPPER = SELECTED TRANSITION: UPPER LEVEL STAT. WT. C (R*8) WLOWER = SELECTED TRANSITION: LOWER LEVEL STAR. WT. C (NOTE: STAT. WT. = STATISTICAL WEIGHT) C (R*8) BWNO = IONISATION POTENTIAL (CM-1) C (R*8) AA = SELECTED TRANSITION A-VALUE (SEC-1) C C (I*4) IA() = ENERGY LEVEL INDEX NUMBER C (I*4) I1A() = TRANSITION: C LOWER ENERGY LEVEL INDEX (CASE ' ' & 'P') C NOT USED (CASE 'H' & 'R') C (I*4) I2A() = TRANSITION: C UPPER ENERGY LEVEL INDEX (CASE ' ' & 'P') C CAPTURING LEVEL INDEX (CASE 'H' & 'R') C (I*4) IETRN() = ELECTRON IMPACT TRANSITION: C INDEX VALUES IN MAIN TRANSITION ARRAYS WHICH C REPRESENT ELECTRON IMPACT TRANSITIONS. C (I*4) IPTRN() = PROTON IMPACT TRANSITION: C INDEX VALUES IN MAIN TRANSITION ARRAYS WHICH C REPRESENT PROTON IMPACT TRANSITIONS. C (I*4) IRTRN() = FREE ELECTRON RECOMBINATION: C INDEX VALUES IN MAIN TRANSITION ARRAYS WHICH C REPRESENT FREE ELECTRON RECOMBINATIONS. C (I*4) IHTRN() = CHARGE EXCHANGE RECOMBINATION: C INDEX VALUES IN MAIN TRANSITION ARRAYS WHICH C REPRESENT CHARGE EXCHANGE RECOMBINATIONS. C (I*4) IE1A() = ELECTRON IMPACT TRANSITION: C LOWER ENERGY LEVEL INDEX C (I*4) IE2A() = ELECTRON IMPACT TRANSITION: C UPPER ENERGY LEVEL INDEX C (I*4) IP1A() = PROTON IMPACT TRANSITION: C LOWER ENERGY LEVEL INDEX C (I*4) IP2A() = PROTON IMPACT TRANSITION: C UPPER ENERGY LEVEL INDEX C C (R*8) XJA() = QUANTUM NUMBER (J-VALUE) FOR LEVEL 'IA()' C NOTE: (2*XJA)+1 = STATISTICAL WEIGHT C (R*8) WA() = ENERGY RELATIVE TO LEVEL 1 (CM-1) FOR LEVEL C 'IA()' C (I*4) IPLA(,) = PARENT INDEX FOR CONTRIBUTION TO IONIS. C OF LEVEL C 1ST DIMENSION: PARENT INDEX C 2ND DIMENSION: LEVEL INDEX C (R*8) ZPLA(,) = EFF. ZETA PARAM. FOR CONTRIBUTION TO IONIS. C OF LEVEL C 1ST DIMENSION: PARENT INDEX C 2ND DIMENSION: LEVEL INDEX C (R*8) AVALE() = ELECTRON IMPACT TRANSITION: A-VALUE (SEC-1) C (R*8) AVAL() = TRANSITION: C A-VALUE (SEC-1) (CASE ' ') C NEUTRAL BEAM ENERGY (CASE 'H') C NOT USED (CASE 'P' & 'R')C C (R*8) SCX() = INPUT DATA FILE: X-PARAMETER SET C (R*8) SCEF() = PROGRAM: INPUT FILE CONVERSION TEMPS, OR 2/3 C AVERAGE ENERGY OF NUMERICAL DISTRIBUTION IF C ADF37 COMPARISON FILE IS SELECTED (KELVIN) C (R*8) SCEF2() = MOST COMMON ENERGY OF DISTRIBUTION FUNC. IF C ADF37 COMPARISON FILE IS SELECTED (KELVIN) C (R*8) GAMMA() = INPUT DATA FILE: SELECTED TRANSITION - C GAMMA VALUE AT 'SCEF()' C (R*8) RATE() = INPUT DATA FILE: SELECTED TRANSITION - C EXCITATION RATE COEFF. (CM**3/S) AT 'SCEF()' C (R*8) DRATE() = INPUT DATA FILE: SELECTED TRANSITION - C DEEXCITATION RATE COEF.(CM**3/S) AT 'SCEF()' C C (R*8) TINE() = ISPF ENTERED ELECTRON TEMPERATURE VALUES. C (NOTE: UNITS ARE GIVEN BY 'IFOUT') C (R*8) TOA() = ISPF ENTERED TEMPERATURES (KELVIN) C C (R*8) TOSA() = SPLINE: SELECTED TEMPERATURES (KELVIN) C (R*8) GAMOSA()= SPLINE INTEROPLATED GAMMA VALUE AT 'TOSA()' C (R*8) ROSA() = EXCITATION RATE COEFF.(CM**3/S) AT 'TOSA()' C (R*8) DROSA() = DEEXCITATION RATE COEF.(CM**3/S) AT 'TOSA()' C C (R*8) TOMA() = MINIMAX: SELECTED TEMPERATURES (KELVIN) C (R*8) GAMOMA()= MINIMAX GENERATED GAMMA VALUE AT 'TOMA()' C (R*8) ROMA() = EXCITATION RATE COEFF.(CM**3/S) AT 'TOMA()' C (R*8) DROMA() = DEEXCITATION RATE COEF.(CM**3/S) AT 'TOMA()' C C (R*8) TSCEF(,) = INPUT DATA FILE: ELECTRON TEMPS OR 2/3 C AVERAGE ENERGY IF ADF37 COMPARISON FILE IS C SELECTED C 1ST DIMENSION: TEMPERATURES (SEE 'SCEF()') C 2ND DIMENSION: 1 => KELVIN (IFOUT=1) C 2 => EV (IFOUT=2) C 3 => REDUCED (IFOUT=3) C (R*8) SCOM(,) = TRANSITION: C GAMMA VALUES (CASE ' ' & 'P') C RATE COEFFT. (CM3 SEC-1) (CASE 'H' & 'R') C 1ST DIMENSION - TEMPERATURE 'SCEF()' C 2ND DIMENSION - TRANSITION NUMBER C C (L*4) LTRNG() = .TRUE. => TEMPERATURE 'TOA()' IN RANGE C .FALSE. => TEMPERATURE 'TOA()' OUT OF RANGE C (RANGE = INPUT TEMPERATURE RANGE) C C (C*1) TCODE() = TRANSITION: DATA TYPE POINTER: C ' ' => ELECTRON IMPACT TRANSITION C 'P' => PROTON IMPACT TRANSITION C 'H' => CHARGE EXCHANGE RECOMBINATION C 'R' => FREE ELECTRON RECOMBINATION C (C*18) CSTRGA()= NOMENCLATURE/CONFIGURATION FOR LEVEL 'IA()' C (C*18) CSTRGB()= AS CSTRGA() BUT ONLY TAKING THE LAST C 'ICSTMX' NON-BLANK BYTES. C (C*22) STRGA() = NOMENCLATURE FOR LEVEL 'IA()' INCLUDES: C 'CSTRGA()' AND QUANTUM NUMBERS. C (I*4) IFIRST = FIRST NON-BLANK CHARCTER IN FILENAME C C (I*4) ILAST = LAST NON-BLANK CHARCTER IN FILENAME C C (L*4) OPEN07 = .TRUE. => UNIT 7 IS OPEN C .FALSE. => UNIT 7 IS CLOSED C (L*4) LREP = .TRUE. => PAPER.TXT TO BE REPLACED C .FALSE. => PAPER.TXT NOT TO BE REPLACED C C C NOTE: INPUT TEMPERATURES 'TINE()' ARE CONVERTED TO KELVIN 'TOA()'. C C ROUTINES: C ROUTINE SOURCE BRIEF DESCRIPTION C ------------------------------------------------------------- C C AUTHOR: PAUL BRYANS C C DATE: 02 MARCH 2005 C C MODIFICATION HISTORY: C C DATE: 02/03/05 VERSION: 1.1 C MODIFIED: PAUL BRYANS C - EXAMPLE CODE C C DATE: 17/03/05 VERSION: 1.2 C MODIFIED: ALLAN WHITEFORD C - MODIFIED TO INTERFACE WITH C/IDL. C DATE: 04/04/05 C MODIFIED: ALLAN WHITEFORD C - CHANGED LSS04A FROM A SCALAR TO AN ARRAY OF C SIZE (NDLEV,NDMET) C C----------------------------------------------------------------------- CHARACTER*80 ADF37 INTEGER DTYPE, I1A(NDTRN), I2A(NDTRN) INTEGER IA(NDLEV), IADFTYP, IFOUT, IL INTEGER ILBETH, IPLA(NDMET,NDLEV), ITRAN INTEGER IZ1, MAXT, NV INTEGER STCODE(NDTRN) REAL*8 AVAL(NDTRN), BETH(NDTRN), BWNOA(NDMET) REAL*8 DNSILON(NDTEM,NDTRN), DPARAM REAL*8 OMGA(NEDIM,NDTRN), SCX(NEDIM) REAL*8 TINE(NDTIN), UPSILON(NDTEM,NDTRN) REAL*8 WA(NDLEV), XJA(NDLEV), ZPLA(NDMET,NDLEV)