ADAS Subroutine bxmpop
SUBROUTINE BXMPOP( NDMET ,
& NMET ,
& CRED ,
& RHS , CRMAT ,
& STKM
& )
C-----------------------------------------------------------------------
C
C ****************** FORTRAN77 SUBROUTINE: BXMPOP *********************
C
C PURPOSE: TO CALCULATE AND STACK UP IN 'STKM' THE METASTABLE LEVEL
C POPULATIONS FOR A GIVEN TEMPERATURE AND DENSITY.
C
C ALSO OUTPUTS INVERTED METASTABLE RATE MATRIX.
C
C CALLING PROGRAM: ADAS205/ADAS206
C
C SUBROUTINE:
C
C INPUT : (I*4) NDMET = MAXIMUM NUMBER OF METASTABLE LEVELS ALLOWED
C
C INPUT : (I*4) NMET = NUMBER OF METASTABLE LEVELS
C
C INPUT : (R*8) CRED(,) = MATRIX OF TRANSITION RATES BETWEEN
C METASTABLE LEVELS.
C (UNITS: SEC-1)
C VALUES FOR GIVEN TEMPERATURE AND DENSITY.
C 1st DIMENSION: METASTABLE LEVEL INDEX
C 2nd DIMENSION: METASTABLE LEVEL INDEX
C
C OUTPUT: (R*8) RHS() = GENERAL MATRIX SOLUTION WORK SPACE:
C USED IN SOLUTION OF 'NMET-1' LINEAR EQNS.
C A.X=B
C INPUT TO XXMINV: RIGHT HAND SIDE VECTOR 'B'
C (RHS(IM) = -(RATE FROM LEVEL 'IM+1' TO 1))
C (UNITS: SEC-1)
C OUTPUT FROM XXMINV: SOLUTION VECTOR 'X'
C (RHS(IM) = POPULATION OF LEVEL 'IM+1')
C VALUES FOR GIVEN TEMPERATURE AND DENSITY.
C DIMENSION: METASTABLE LEVEL - 1
C OUTPUT: (R*8) CRMAT(,)= INVERTED METASTABLE LEVEL RATE MATRIX
C COVERING ALL TRANSITIONS BETWEEN METASTABLE
C LEVELS EXCEPT THOSE INVOLVING LEVEL 1.
C VALUES FOR GIVEN TEMPERATURE AND DENSITY.
C BEFORE INPUT TO XXMINV: NOT INVERTED
C AFTER OUTPUT FROM XXMINV: AS-ABOVE
C 1st DIMENSION: METASTABLE LEVEL INDEX - 1
C 2nd DIMENSION: METASTABLE LEVEL INDEX - 1
C
C OUTPUT: (R*8) STKM() = METASTABLE LEVEL POPULATION MATRIX.
C VALUES FOR GIVEN TEMPERATURE AND DENSITY.
C DIMENSION: METASTABLE LEVEL INDEX
C
C (L*4) LSOLVE = PARAMETER = .TRUE.
C => USE 'XXMINV' TO SOLVE A SET OF
C LINEAR EQUATIONS A.X = B, WHERE
C A,X,B ARE MATRICES/VECTORS AND:
C A='CRMAT(,)' INPUT TO XXMINV
C B='RHS()' INPUT TO XXMINV
C X='RHS()' OUTPUT FROM XXMINV
C
C (I*4) NMET1 = 'NMET - 1'
C (I*4) IM = METASTABLE LEVEL ARRAY INDEX
C (I*4) IM1 = METASTABLE LEVEL ARRAY INDEX
C (I*4) IM2 = METASTABLE LEVEL ARRAY INDEX
C
C (R*8) DMINT = +1 or -1 DEPENDING ON WHETHER THE NUMBER OF
C ROW INTERCHANGES WAS EVEN OR ODD,
C RESPECTIVELY, WHEN INVERTING A MATRIX USING
C 'XXMINV'.
C
C ROUTINES:
C ROUTINE SOURCE BRIEF DESCRIPTION
C ------------------------------------------------------------
C XXMINV ADAS INVERTS MATRIX AND SOLVES EQUATIONS.
C
C NOTE:
C THE SOLUTION OF METASTABLE POPULATIONS GIVEN BELOW IS BASED ON
C METASTABLE LEVEL 1 HAVING A POPULATION OF UNITY (1.0).
C
C IF: m = number of metastable levels - 1
C
C R(mxm) = Rate matrix (sec-1) covering transistions between
C all possible pairs of metastable levels (except 1)
C row : final level
C column: initial level
C (R(mxm) = 'CRMAT(,)' on input to XXMINV)
C (R-1(mxm) = 'CRMAT(,)' on output from XXMINV)
C V(m) = Rate vector (sec-1) covering transistions between
C each metastable level (except 1) and met. level 1
C ( = 'RHS()' on input to XXMINV)
C P(m) = Metastable level populations - levels 2 -> 'NMET'
C ( = 'RHS()' on output from XXMINV)
C
C Therefore: R(mxm).P(m) = V(m)
C
C => P(m) = R-1(mxm).V(m)
C
C
C AUTHOR: PAUL E. BRIDEN (TESSELLA SUPPORT SERVICES PLC)
C K1/0/81
C JET EXT. 4569
C
C DATE: 09/10/90
C
C-----------------------------------------------------------------------
C
C-----------------------------------------------------------------------
LOGICAL LSOLVE
C-----------------------------------------------------------------------
INTEGER NDMET, NMET
REAL*8 CRED(NDMET,NDMET), CRMAT(NDMET,NDMET)
REAL*8 RHS(NDMET), STKM(NDMET)