ADAS Subroutine d5mfsp
SUBROUTINE D5MFSP( NDSTAT , NDMET , NDONE , & NSTATE , NMET , ID , NMSUM , & CFREC , CFION , CFMET , CPOPN , & POPN , POPNMO , POPNPO , & CPOPND , CPOPNZ , & POPF , & XTEMP , YTEMP , & RHS , RDUM , SOLVE , LSOLVE , LAGAIN & ) C------------------------------------------------------------------------------- C******************* FORTRAN77 SUBROUTINE: D5MFSP ********************* ******** C C PURPOSE: TO PERFORM THE MAIN MATRIX ALGEBRA WHICH CALCULATES THE C LEVEL POPULATIONS-INCLUDING METASTABLE STATES C C CALLING PROGRAM: D5MPOP C C INPUT: (R*8) CFREC( , , ) = RECOMBINATION RATE COEFFICIENTS TO ALL C METASTABLE NDMET;STARTING FROM FIRST TO C GROUND LEVEL,WITH CFREC(NDMET,NDMET,1) C SET TO ZERO C DIMENSIONS = (NDMET,NDMET,NDSTAT) C C (R*8) CFION( , , ) = IONISATION RATE COEFFICIENTS TO ALL C METASTABLE NDMET;STARTING FROM GROUND TO C FIRST LEVEL,WITH C CFION(NDMET,NDMET,NSTATE) SET TO ZERO C DIMENSIONS = (NDMET,NDMET,NDSTAT) C C (I*4) NSTATE = PARAMETER = NO OF NDMET C C (I*4) NDMET = PARAMETER = MAXIMUM SIZE OF MATRICES C HOLDING METASTABLE TRANSITIONS C C (R*8) NMET( ) = NO OF METASTABLES IN EACH ENERGY LEVEL C DETERMINES ACTUAL SIZE OF MINI MATRICES C DIMENSION = NDSTAT C C (I*4) NDONE = 1 0;MODIFYING MATRICES IN ORDER TO USE C SUBROUTINES C C (I*4) ID = POSITION OF DOMINANT TERM C C (R*8) CFMET( , , ) = CROSS COUPLING COEFFICIENTS BETWEEN C METASTABLE NDMET WITH LEADING DIAGONAL C CALCULATED C DIMENSIONS = (NDMET,NDMET,NDSTAT) C C (L*4) LSOLVE = TRUE => XXMINV SOLVES SET OF 'N' LINEAR C EQUATIONS A X = B WHERE A,X,B ARE C MATRICES/VECTORS AND: C A = 'A(,)' ON INPUT C X = 'B()' ON OUTPUT C B = 'B()' ON INPUT C FALSE => ONLY MATRIX INVERSION, C A INVERSE REPLACES A C C (R*8) DINT = + OR - 1 DEPENDING ON THE NUMBER OF ROW C INTERCHANGES IN THE MATRIX INVERSION C C C (R*8) NMETZ = ACTUAL DIMENSION OF NORMALIZATION MATRIX C ONCE FIRST ROW & COLUMN IS ELIMINATED C = NMET(ID)+NMET(ID+1)-1 C C (I*4) NDSTAT = PARAMETER = MAXIMUM NUMBER OF NDMET C C (I*4) NPOSX = NMET(ID) C C (I*4) NPOSY = NMET(ID+1) C C C OUTPUT:(R*8) CPOPN( , , ) = ARRAY HOLDING COEFFICIENTS OF POPULATION C STATE EQUATIONS C DIMENSIONS = (NDMET,NDMET,NDSTAT+1) C C (R*8) POPN( , , ) = ARRAY HOLDING POPULATION STATE VALUES WITH C THIRD DIMENSION SET TO 1 C DIMENSIONS = (NDMET,NDONE,NDSTAT+1) C C (R*8) CPOPND( , , ) = TEMPORARY NAME OF MATRIX TO BE SUBSTITUTED C INTO NEXT EQUATION IN UPWARD LOOP C DIMENSIONS = (NDMET,NDMET,NDSTAT+1) C C (R*8) CPOPNZ( , , ) = TEMPORARY NAME OF MATRIX TO BE SUBSTITUTED C INTO NEXT EQUATION IN DOWNWARD LOOP C DIMENSIONS = (NDMET,NDMET,NDSTAT+1) C C (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 = (NDMET,NDONE,NDSTAT+1) C C (R*8) POPNMO( , , ) = TEMPORARY NAME OF MATRIX HOLDING POPULATION C STATE VALUES AFTER NORMALIZATION,TO BE C SUBSTITUTED INTO NEXT EQUATION IN DOWNWARD C LOOP C DIMENSIONS = (NDMET,NDONE,NDSTAT+1) C C (R*8) SUM = SUM OF ALL LEVEL POPULATION VALUES C INCLUDING METASTABLES C C (R*8) XTEMP( , ) = TEMPORARY MATRIX FOR DURING SUBROUTINE C CALCULATIONS C DIMENSIONS = (NDMET,NDMET) C C (R*8) YTEMP( , ) = TEMPORARY MATRIX FOR DURING SUBROUTINE C CALCULATIONS C DIMENSIONS = (NDMET,NDMET) C C (R*8) PTEMP( , , ) = TEMPORARY MATRIX FOR DURING ERROR CHECK C CALCULATIONS C DIMENSIONS = (NDMET,NDONE,NDSTAT) C C (R*8) QTEMP( , , ) = TEMPORARY MATRIX FOR DURING ERROR CHECK C CALCULATIONS C DIMENSIONS = (NDMET,NDONE,NDSTAT) C C (R*8) RTEMP( , , ) = TEMPORARY MATRIX FOR DURING ERROR CHECK C CALCULATIONS C DIMENSIONS = (NDMET,NDONE,NDSTAT) C C (R*8) STEMP( , , ) = TEMPORARY MATRIX FOR DURING ERROR CHECK C CALCULATIONS C DIMENSIONS = (NDMET,NDONE,NDSTAT) C C (R*8) TEMP( , , ) = MATRIX HOLDING RESULTS OF ERROR CHECK C ALL OF WHICH SHOULD BE ZERO C DIMENSIONS = (NDMET,NDONE,NDSTAT) C C (R*8) SOLVE( , ) = NORMALIZATION MATRIX AT CRITICAL STAGE C DIMENSIONS = (2*NDMET-1,2*NDMET-1) C C (R*8) CTEMP( , , ) = HOLDS VALUES OF CFMET FOR ERROR CHECK,IS C NECCESSARY SINCE CFMET IS ALTERED DURING C CALCULATIONS C DIMENSIONS = (NDMET,NDMET,NDSTAT) C C (R*8) RHS( ) = SIPHONED OFF COLUMN OF NORMALIZATION C MATRIX,USED TO CALCULATE METASTABLE C NDMET OF DOMINANT STAGE THROUGH XXMINV C DIMENSIONS = (2*NDMET-1) C C (R*8) RDUM( ) = DUMMY ARRAY USED IN XXMINV AS RHS WHEN C LSOLVE = FALSE C C C ROUTINES : C ROUTINE SOURCE BRIEF DESCRIPTION C ___________________________________________________________ C DXMADD ADAS MATRIX ADDITION/SUBTRACTION C DXMMUL ADAS MATRIX MULTIPLICATION C XXMINV ADAS MATRIX INVERSION C C C AUTHOR: D. BROOKS, H. P. SUMMERS, JET C K1/1/57 C JET EXT. 4941 C C DATE: 02/06/94 C C UPDATE: 14/02/95 HPS - INTRODUCED IAGAIN TO IMPROVE DOMINANT STAGE C IDENTIFICATION. C UPDATE: 06/07/95 HPS - MODIFIED LOOP TO PREVENT IAGAIN AND HENCE ID C BEING SET GREATER THAN NSTATE-1. C C UNIX-IDL PORT: C C VERSION: 1.1 DATE: 08-11-95 C MODIFIED: TIM HAMMOND (TESSELLA SUPPORT SERVICES PLC) C - FIRST RELEASE C C VERSION: 1.2 DATE: 01-12-95 C MODIFIED: TIM HAMMOND (TESSELLA SUPPORT SERVICES PLC) C - COPIED FOLLOWING UPDATES MADE BY DAVID BROOKS: C C UPDATE: 29/11/95 DHB - INTRODUCED A CHECK TO MAKE SURE THAT THE C POPULATION EQUATIONS ARE SOLVED FOR THE BEST C POSSIBLE CHOICE OF DOMINANT STAGE. NB: THIS C IS NOT THE DOMINANT STAGE ITSELF BUT THE C NEAREST STAGE TO IT THAT CAN SUPPORT THE C CALCULATION I.E. THERE IS A CHECK TO MAKE C SURE THE DOMINANT STAGE IDENTIFICATION DOES C NOT PUSH THE SOLUTION LOOP TOO CLOSE TO ANY C REGION OF RAPID POPULATION DROP OFF. THE C PARAMETER ACC HAS BEEN INTRODUCED TO MEASURE C THIS DROP OFF AND CAN BE ADJUSTED IF IT IS TOO C STRINGENT. C UPDATE: 29/11/95 DHB - ADDED CHECK TO AVOID UNNECCESARY LOOPING IN C UNRESOLVED CASE. C C VERSION: 1.3 DATE: 01-12-95 C MODIFIED: TIM HAMMOND (TESSELLA SUPPORT SERVICES PLC) C - SWAPPED ORDER OF DECLARATION OF PARAMETER ACC. C C------------------------------------------------------------------------------- INTEGER ID, NDMET, NDONE, NDSTAT INTEGER NMET(NDSTAT), NMSUM, NSTATE LOGICAL LAGAIN, LSOLVE REAL*8 CFION(NDMET,NDMET,NDSTAT) REAL*8 CFMET(NDMET,NDMET,NDSTAT) REAL*8 CFREC(NDMET,NDMET,NDSTAT) REAL*8 CPOPN(NDMET,NDMET,NDSTAT+1) REAL*8 CPOPND(NDMET,NDMET,NDSTAT+1) REAL*8 CPOPNZ(NDMET,NDMET,NDSTAT+1) REAL*8 POPF(NMSUM), POPN(NDMET,NDONE,NDSTAT+1) REAL*8 POPNMO(NDMET,NDONE,NDSTAT+1) REAL*8 POPNPO(NDMET,NDONE,NDSTAT+1) REAL*8 RDUM(NDMET), RHS(2*NDMET-1) REAL*8 SOLVE(2*NDMET-1,2*NDMET-1) REAL*8 XTEMP(NDMET,NDMET), YTEMP(NDMET,NDMET)