ADAS Subroutine d9mpop
C Copyright (c) 1995, Strathclyde University.
SUBROUTINE D9MPOP( NTDIM , NDDIM , IZDIMD, IPDIMD,
& NSTAGE, ITMAX , IDMAX , NPRT , NMSUM ,
& ACDA , SCDA , CCDA , QCDA , XCDA ,
& DENS , DENSH ,
& ITEM , IDEN ,
& CFREC , CFION , CFMET ,
& POPN , POPNMO, POPNPO,
& CPOPN , CPOPND, CPOPNZ,
& POPF ,
& XTEMP , YTEMP , YTEM ,
& RHS , RDUM , SOLVE , LSOLVE
& )
IMPLICIT REAL*8(A-H,O-Z)
C
C-----------------------------------------------------------------------
C
C ****************** FORTRAN 77 SUBROUTINE: D9MPOP ********************
C
C PURPOSE: CALCULATION OF METASTABLE RESOLVED IONISATION STAGE
C POPULATIONS OF A PARTICULAR ELEMENT FOR A GIVEN TEMPERATURE
C AND DENSITY. EXTENSION TO THE 2D (TEMPERATURE, DENSITY) CASE.
C
C CALLING PROGRAM: ADAS409
C
C SUBROUTINE:
C
C
C INPUT :(I*4) NTDIM = MAXIMUM NUMBER OF TEMPERATURE VALUES
C INPUT :(I*4) NDDIM = MAXIMUM NUMBER OF DENSITY VALUES
C INPUT :(I*4) IZDIMD = MAXIMUM NUMBER OF STAGES-1
C INPUT :(I*4) IPDIMD = MAXIMUM NUMBER OF METASTABLES FOR EACH
C IONISATION STAGE
C INPUT :(I*4) NSTAGE = NUMBER OF STAGES-1
C INPUT :(I*4) ITMAX = NUMBER OF TEMPERATURE VALUES
C INPUT :(I*4) IDMAX = NUMBER OF DENSITY VALUES
C INPUT :(R*8) NPRT( ) = PARTITION OF TOTAL METASTABLES ACCORDING
C TO IONISATION STAGES
C 1ST DIM: STAGE INDEX
C INPUT :(I*4) NMSUM = TOTAL NUMBER OF POPULATIONS
C INPUT :(R*8) ACDA(,,,,) = GENERALISED CR RECOMBINATION COEFFICIENT
C 1ST DIM: TEMPERATURE INDEX
C 2ND DIM: DENSITY INDEX
C 3RD DIM: STAGE INDEX (LESS 1)
C 4TH DIM: METASTABLE INDEX
C 5TH DIM: METASTABLE INDEX
C INPUT :(R*8) SCDA(,,,,) = GENERALISED CR IONISATION COEFFICIENT
C 1ST DIM: TEMPERATURE INDEX
C 2ND DIM: DENSITY INDEX
C 3RD DIM: STAGE INDEX (LESS 1)
C 4TH DIM: METASTABLE INDEX
C 5TH DIM: METASTABLE INDEX
C INPUT :(R*8) CCDA(,,,,) = GENERALISED CR CHARGE EXCH. COEFFICIENT
C 1ST DIM: TEMPERATURE INDEX
C 2ND DIM: DENSITY INDEX
C 3RD DIM: STAGE INDEX (LESS 1)
C 4TH DIM: METASTABLE INDEX
C 5TH DIM: METASTABLE INDEX
C INPUT :(R*8) QCDA(,,,) = GENERALISED CR CROSS-COUPL. COEFFICIENT
C 1ST DIM: TEMPERATURE INDEX
C 2ND DIM: DENSITY INDEX
C 3RD DIM: STAGE INDEX (LESS 1)
C 4TH DIM: METASTABLE INDEX
C 5TH DIM: METASTABLE INDEX
C INPUT :(R*8) XCDA(,,,) = GENERALISED CR PARENT X-CP. COEFFICIENT
C 1ST DIM: TEMPERATURE INDEX
C 2ND DIM: DENSITY INDEX
C 3RD DIM: STAGE INDEX (LESS 1)
C 4TH DIM: METASTABLE INDEX
C 5TH DIM: METASTABLE INDEX
C INPUT :(R*8) DENS() = ELECTRON DENSITIES FOR MODEL
C INPUT :(R*8) DENSH() = NEUTRAL HYDROGEN DENSITIES FOR MODEL
C
C INPUT :(I*4) ITEM = CURRENT TEMPERATURE INDEX
C INPUT :(I*4) IDEN = CURRENT DENSITY INDEX
C
C OUTPUT:(R*8) CFREC( , , ) = RECOMBINATION RATE COEFFICIENTS TO ALL
C METASTABLE IPDIMD;STARTING FROM FIRST TO
C GROUND LEVEL,WITH CFREC(1,IPDIMD,IPDIMD)
C SET TO ZERO
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD)
C OUTPUT:(R*8) CFION( , , ) = IONISATION RATE COEFFICIENTS TO ALL
C METASTABLE IPDIMD;STARTING FROM GROUND
C TO FIRST LEVEL,WITH
C CFION(NSTAGE,IPDIMD,IPDIMD)
C SET TO ZERO
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD)
C OUTPUT:(R*8) CFMET( , , ) = CROSS COUPLING COEFFICIENTS BETWEEN
C METASTABLE IPDIMD WITH LEADING DIAGONAL
C CALCULATED
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD)
C
C OUTPUT:(R*8) POPN( , , ) = ARRAY HOLDING POPULATION STATE VALUES
C WITH SECOND DIMENSION SET TO 1
C DIMENSIONS = (IPDIMD,NDONE,IZDIMD+1)
C OUTPUT:(R*8) POPNMO( , , ) = TEMPORARY NAME OF MATRIX HOLDING POPULATION
C STATE VALUES AFTER NORMALIZATION,TO BE
C SUBSTITUTED INTO NEXT EQUATION IN
C DOWNWARD LOOP
C DIMENSIONS = (IPDIMD,NDONE,IZDIMD+1)
C OUTPUT:(R*8) POPNPO( , , ) = TEMPORARY NAME OF MATRIX HOLDING POPULATION
C STATE VALUES AFTER NORMALIZATION,TO BE
C SUBSTITUTED INTO NEXT EQUATION IN UPWARD
C LOOP
C DIMENSIONS = (IPDIMD,NDONE,IZDIMD+1)
C
C OUTPUT:(R*8) CPOPN( , , ) = ARRAY HOLDING COEFFICIENTS OF POPULATION
C STATE EQUATIONS
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD+1)
C OUTPUT:(R*8) CPOPND( , , ) = TEMPORARY NAME OF MATRIX TO BE SUBSTITUTED
C INTO NEXT EQUATION IN UPWARD LOOP
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD+1)
C OUTPUT:(R*8) CPOPNZ( , , ) = TEMPORARY NAME OF MATRIX TO BE SUBSTITUTED
C INTO NEXT EQUATION IN DOWNWARD LOOP
C DIMENSIONS = (IPDIMD,IPDIMD,IZDIMD+1)
C
C OUTPUT:(R*8) POPF() = POPULATIONS FOR A SPECIFIED TEMPERATURE D
C 1ST DIM: INDEX OVER STAGES/METASTABLES
C
C OUTPUT:(R*8) XTEMP( , ) = TEMPORARY MATRIX USED DURING SUBROUTINE
C CALCULATIONS
C DIMENSIONS = (IPDIMD,IPDIMD)
C OUTPUT:(R*8) YTEMP( , ) = TEMPORARY MATRIX FOR DURING SUBROUTINE
C CALCULATIONS
C DIMENSIONS = (IPDIMD,IPDIMD)
C OUTPUT:(R*8) YTEM( ) = TEMPORARY ARRAY FOR HOLDING VALUES OF
C DIFFERENCE BETWEEN RECOMBINATION AND
C IONISATION GROUND LEVEL COEFFICIENTS
C DIMENSIONS = (NSTAGE)
C
C OUTPUT:(R*8) RHS( ) = SIPHONED OFF COLUMN OF NORMALIZATION
C MATRIX,USED TO CALCULATE METASTABLE
C IPDIMD OF DOMINANT STAGE THROUGH MATINV
C DIMENSIONS = (2*IPDIMD-1)
C OUTPUT:(R*8) RDUM( ) = DUMMY ARRAY USED IN MATINV AS RHS WHEN
C LSOLVE = FALSE
C OUTPUT:(R*8) SOLVE( , ) = NORMALIZATION MATRIX AT CRITICAL STAGE
C DIMENSIONS = (2*IPDIMD-1,2*IPDIMD-1)
C OUTPUT:(L*4) LSOLVE = .TRUE. => SOLVE SET OF EQUATIONS
C = .FALSE. => INVERT MATRIX ONLY
C
C (I*4) NDONE = PARAMETER = 1 TO ALLOW 3D MATRIX USE
C (I*4) ID = POSITION OF DOMINANT TERM
C (I*4) ISTATE = STAGE INDEX
C (I*4) ITEM = GENERAL INDEX
C (I*4) I = GENERAL INDEX
C (I*4) J = GENERAL INDEX
C (I*4) K = GENERAL INDEX
C (R*8) YMIN = VALUE OF DIFFERENCE BETWEEN
C RECOMBINATION AND IONISATION COEFFICIENTS
C OF GROUND IPDIMD
C
C ROUTINES:
C ROUTINE SOURCE BRIEF DESCRIPTION
C ----------------------------------------------------------
C D5DIAG ADAS SETS UP ON-DIAGONAL ELEMENT OF MATRIX
C D5MFSP ADAS EXECUTES PARTITION MATRIX INVERSION
C DXMADD ADAS MATRIX ADDITION/SUBTRACTION
C DXMMUL ADAS MATRIX MULTIPLICATION
C XXMINV ADAS MATRIX INVERSION
C
C
C AUTHOR: Alessandro Lanzafame, University of Strathclyde
C
C DATE: 11 December 1995
C
C-----------------------------------------------------------------------
C
C VERSION: 1.1 DATE: 12-03-98
C MODIFIED: RICHARD MARTIN
C - PUT UNDER SCCS CONTROL
C
C------------------------------------------------------------------------
INTEGER IDEN, IDMAX, IPDIMD, ITEM
INTEGER ITMAX, IZDIMD, NDDIM, NMSUM
INTEGER NPRT(IZDIMD), NSTAGE, NTDIM
LOGICAL LSOLVE
REAL*8 ACDA(NTDIM,NDDIM,IZDIMD,IPDIMD,IPDIMD)
REAL*8 CCDA(NTDIM,NDDIM,IZDIMD,IPDIMD,IPDIMD)
REAL*8 CFION(IPDIMD,IPDIMD,IZDIMD)
REAL*8 CFMET(IPDIMD,IPDIMD,IZDIMD)
REAL*8 CFREC(IPDIMD,IPDIMD,IZDIMD)
REAL*8 CPOPN(IPDIMD,IPDIMD,IZDIMD+1)
REAL*8 CPOPND(IPDIMD,IPDIMD,IZDIMD+1)
REAL*8 CPOPNZ(IPDIMD,IPDIMD,IZDIMD+1)
REAL*8 DENS(NDDIM), DENSH(NTDIM)
REAL*8 POPF(NMSUM), POPN(IPDIMD,NDONE,IZDIMD+1)
REAL*8 POPNMO(IPDIMD,NDONE,IZDIMD+1)
REAL*8 POPNPO(IPDIMD,NDONE,IZDIMD+1)
REAL*8 QCDA(NTDIM,NDDIM,IZDIMD,IPDIMD,IPDIMD)
REAL*8 RDUM(IPDIMD), RHS(2*IPDIMD-1)
REAL*8 SCDA(NTDIM,NDDIM,IZDIMD,IPDIMD,IPDIMD)
REAL*8 SOLVE(2*IPDIMD-1,2*IPDIMD-1)
REAL*8 XCDA(NTDIM,NDDIM,IZDIMD,IPDIMD,IPDIMD)
REAL*8 XTEMP(IPDIMD,IPDIMD), YTEM(IZDIMD)
REAL*8 YTEMP(IPDIMD,IPDIMD)