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

69 lines
2.1 KiB
Fortran

SUBROUTINE LYMLIN(ID,FREQ,ABLY,EMLY,SCLY)
C =========================================
C
C OPACITY OF THE LYMAN LINES WINGS (ALPHA - DELTA)
C WITH APPROXIMATE PARTIAL REDISTRIBUTION
C
INCLUDE 'PARAMS.FOR'
INCLUDE 'MODELP.FOR'
DIMENSION SN(4),SR(4),SS(4),GS(4),FRLY(4),BNLY(4),GA(4)
DATA FRLY / 2.4660375E15, 2.9227111E15, 3.0825469E15, 3.156528E15/
* ,BNLY / 5.527E-2, 4.090E-2, 2.699E-2, 1.855E-2 /,
* SN / 1.308E5, 5.280E3, 5.847E2, 1.078E2 /,
* SR / 1.218E-16, 9.196E-17, 1.058E-16, 1.296E-16 /,
* SS / 9.478E-3, 1.600E-2, 1.441E-2, 1.547E-2 /,
* GS / 7.237E-8, 5.432E-6, 5.821E-5, 4.027E-4 /,
* GA / 1.000, 1.791, 2.362, 2.801 /
C
data icomp/0/
if(iath.le.0) return
if(icomp.eq.0) then
icomp=1
read(4,*,err=10,end=10) ifstrk,ifnat,ifres,ifprd,ifsti
go to 11
10 continue
ifstrk=0
ifnat=1
ifres=1
ifprd=0
ifsti=0
if(iophli.lt.0) then
ifstrk=1
ifprd=1
end if
11 continue
end if
c
ABLY=0.
EMLY=0.
SCLY=0.
if(freq.gt.3.3e15) return
P=POPUL(N0HN,ID)
T=TEMP(ID)
ANE=ELEC(ID)
DO 40 I=1,4
DFR=ABS(FRLY(I)-FREQ)
IF(DFR.LE.5.E11) DFR=1.E12
DFR2=DFR*DFR
DFRS=SQRT(DFR)
COR=(2.*FREQ/(FREQ+FRLY(I)))**2
F=1.
IF(iabs(IOPHLI).EQ.2) F=FEAUTR(FREQ,ID)
STARK=SS(I)*ANE*F/DFR2/DFRS
if(ifstrk.eq.0) stark=0.
if(ifnat.eq.0) sn(i)=0.
if(ifres.eq.0) sr(i)=0.
SGLY=SN(I)*(1.+SR(I)*P)*COR/DFR2+STARK
sgly=sgly*wnhint(i+1,id)
GAMA=1./(GA(I)+GS(I)*ANE*F/DFRS)
if(ifprd.eq.0) gama=0.
ABLY=ABLY+P*SGLY
EMLY=EMLY+POPUL(N0HN+I,ID)*SGLY*BNLY(I)*(1.-GAMA)
if(ifsti.ne.0) ably=ably-popul(n0hn+i,id)*sgly/(i+1)/(i+1)
SCLY=SCLY+P*SGLY*GAMA
40 CONTINUE
RETURN
END