55 lines
1.5 KiB
Fortran
55 lines
1.5 KiB
Fortran
SUBROUTINE LEVSOL(A,B,POPP,IICAL,NLVCAL,IALL)
|
|
C =============================================
|
|
C
|
|
INCLUDE 'IMPLIC.FOR'
|
|
INCLUDE 'BASICS.FOR'
|
|
INCLUDE 'ATOMIC.FOR'
|
|
INCLUDE 'MODELQ.FOR'
|
|
INCLUDE 'ITERAT.FOR'
|
|
DIMENSION A(MLEVEL,MLEVEL),B(MLEVEL),POPP(MLEVEL),
|
|
* AP(MLEVEL,MLEVEL),BP(MLEVEL),POPP1(MLEVEL),
|
|
* IICAL(MLEVEL)
|
|
C
|
|
if(ioptab.lt.0) return
|
|
c
|
|
C new populations - solution of the rate equations
|
|
C
|
|
C a) either by inverting the global rate matrix (if IRSPLT=0)
|
|
C
|
|
IF(IRSPLT.EQ.0) THEN
|
|
CALL LINEQS(A,B,POPP,NLVCAL,MLEVEL)
|
|
C
|
|
C b) or by inverting several partial rate matrices for the
|
|
C individual chemical species
|
|
C
|
|
ELSE
|
|
DO 20 IAT=1,NATOM
|
|
IF(IIFIX(IAT).EQ.1.AND.IALL.EQ.0) GO TO 20
|
|
N1=N0A(IAT)
|
|
NK=NKA(IAT)
|
|
N1=IICAL(N1)
|
|
NK=IICAL(NK)
|
|
IF(N1.LE.0) THEN
|
|
DO I=N0A(IAT),NKA(IAT)
|
|
N1=IICAL(I)
|
|
IF(IICAL(I).GT.0) GO TO 10
|
|
END DO
|
|
10 CONTINUE
|
|
END IF
|
|
IF(N1.LE.0) GO TO 20
|
|
NLP=NK-N1+1
|
|
DO I=N1,NK
|
|
DO J=N1,NK
|
|
AP(I-N1+1,J-N1+1)=A(I,J)
|
|
END DO
|
|
BP(I-N1+1)=B(I)
|
|
END DO
|
|
CALL LINEQS(AP,BP,POPP1,NLP,MLEVEL)
|
|
DO I=N1,NK
|
|
POPP(I)=POPP1(I-N1+1)
|
|
END DO
|
|
20 CONTINUE
|
|
END IF
|
|
RETURN
|
|
END
|