SpectraRust/tlusty/extracted/levsol.f
2026-03-19 14:05:33 +08:00

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