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

87 lines
2.2 KiB
Fortran

SUBROUTINE RESOLV
C
C driver for evaluating opacities and emissivities which then
C enter the solution of the radiative transfer equation
C (RTE or RTEDFE)
C
INCLUDE 'PARAMS.FOR'
INCLUDE 'MODELP.FOR'
INCLUDE 'LINDAT.FOR'
INCLUDE 'SYNTHP.FOR'
DIMENSION CROSS(MCROSS,MFRQ),
* ABSO(MFREQ),EMIS(MFREQ),SCAT(MFREQ)
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
* SC(MFREQ,MDEPTH)
COMMON/HPOPST/HPOP
C
IHYL=-1
c
c if(imode.le.-3) call abnchn(1)
C
C set up the partial line list for the current interval
C
CALL INISET
if(ifmol.gt.0) then
do ilist=1,nmlist
call molset(ilist)
end do
end if
C
C select possible hydrogen lines that may contribute to the opacity
C
IF(IMODE.NE.-1) CALL HYLSET
C
C select possible He II lines that may contribute to the opacity
C
IF(IMODE.NE.-1) CALL HE2SET
C
C output of information about selected lines
C
CALL INIBLA
if(ifmol.gt.0) call iniblm
C
C photoinization cross-sections
C
CALL CROSET(CROSS)
C
C monochromatic opacity and emissivity including all contributing
C lines and continua
C
IF(IMODE.GE.-1) THEN
DO ID=1,ND
CALL OPAC(ID,CROSS,ABSO,EMIS,SCAT)
ABSTD(ID)=0.5*(ABSO(1)+ABSO(2))
DO IJ=1,NFREQ
CH(IJ,ID)=ABSO(IJ)
ET(IJ,ID)=EMIS(IJ)
SC(IJ,ID)=SCAT(IJ)
END DO
if(imode0.eq.-4) call ougrid(abso)
END DO
C
C output of information about selected hydrogen lines
C
CALL INIBLH
C
C the iron curtain or opacity table option - output of monochromatic opacities
C
ELSE IF(IMODE.EQ.-2) THEN
ID=1
write(27,626) temp(id),dens(id),elec(id)
CALL OPAC(ID,CROSS,ABSO,EMIS,SCAT)
DO IJ=3,NFREQ-1
ABSO(IJ)=(ABSO(IJ)+SCAT(IJ))/HPOP
WRITE(27,627) WLAM(IJ),ABSO(IJ),scat(ij)
END DO
else
id=1
call opac(id,cross,abso,emis,scat)
ch(1,id)=abso(1)
ch(2,id)=abso(2)
call ougrid(abso)
END IF
626 format(1p3e15.4)
627 format(f15.3,1p2e15.5)
RETURN
END