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

38 lines
1.0 KiB
Fortran

SUBROUTINE LEVSOL(A,B,POPP,NLVCAL)
C ==================================
C
INCLUDE 'PARAMS.FOR'
INCLUDE 'MODELP.FOR'
DIMENSION A(MLEVEL,MLEVEL),B(MLEVEL),POPP(MLEVEL),
* AP(MLEVEL,MLEVEL),BP(MLEVEL),POPP1(MLEVEL)
C
C new populations by inverting several partial rate matrices for the
C individual chemical species
C
if(nlvcal.le.0) return
DO 50 IAT=1,NATOM
N1=N0A(IAT)
NK=NKA(IAT)
IF(N1.LE.0) THEN
DO 1 I=N0A(IAT),NKA(IAT)
N1=I
IF(I.GT.0) GO TO 2
1 CONTINUE
2 CONTINUE
END IF
IF(N1.LE.0) GO TO 50
NLP=NK-N1+1
DO 20 I=N1,NK
DO 10 J=N1,NK
AP(I-N1+1,J-N1+1)=A(I,J)
10 CONTINUE
BP(I-N1+1)=B(I)
20 CONTINUE
CALL LINEQS(AP,BP,POPP1,NLP,MLEVEL)
DO 30 I=N1,NK
POPP(I)=POPP1(I-N1+1)
30 CONTINUE
50 CONTINUE
RETURN
END