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

66 lines
2.6 KiB
Fortran

SUBROUTINE OPDATA
C =================
C
C Procedure reads photo-ionization cross sections fit coefficients
C based on Opacity-Project (OP) data from file RBF.DAT
C Data, as stored, requires linear interpolation.
C
C Meaning of global variables:
C NTOTOP = total number of levels in Opacity Project data
C IDLVOP() = level identifyer of current level
C NOP() = number of fit points for current level
C XOP(,) = x = alog10(nu/nu0) of fit point
C SOP(,) = sigma = alog10(sigma/10^-18) of fit point
C
INCLUDE 'PARAMS.FOR'
PARAMETER (MMAXOP = 200,! maximum number of levels in OP data
+ MOP = 15 )! maximum number of fit points per level
CHARACTER*10 IDLVOP(MMAXOP) ! level identifyer Opacity-Project data
COMMON /TOPB/ SOP(MOP,MMAXOP) ,! sigma = alog10(sigma/10^-18) of fit point
+ XOP(MOP,MMAXOP) ,! x = alog10(nu/nu0) of fit point
+ NOP(MMAXOP) ,! number of fit points for current level
+ NTOTOP ,! total number of levels in OP data
+ IDLVOP ,! level identifyer Opacity-Project data
+ LOPREA ! .T. OP data read in; .F. OP data not yer read in
CHARACTER*4 IONID
C
OPEN (UNIT=40,FILE='RBF.DAT',STATUS='OLD')
C Skip header
DO IREAD = 1, 21
READ (40,*)
END DO
IOP = 0
C = initialize sequential level index op Opacity Project data
C Read number of elements in file
READ (40,*) NEOP
DO IEOP = 1, NEOP
C Skip element name header
DO IREAD = 1, 3
READ (40,*)
END DO
C Read number of ionization stages of current element in file
READ (40,*) NIOP
DO IIOP = 1, NIOP
C Read ion identifyer, atomic & electron number, # of levels
C for current ion
READ (40,*) IONID, IATOM_OP, IELEC_OP, NLEVEL_OP
DO ILOP = 1, NLEVEL_OP
C Increase sequential level index of Opacity Project data
IOP = IOP+1
C Read level identifyer and number of sigma fit points
READ (40,*) IDLVOP(IOP), NOP(IOP)
C Read normalized log10 frequency and log10 cross section values
DO IS = 1, NOP(IOP)
READ (40,*) INDEX, XOP(IS,IOP), SOP(IS,IOP)
END DO
END DO
END DO
END DO
NTOTOP = IOP
C = total number of levels in Opacity Project data
LOPREA = .TRUE.
C = set flag as data has been read in
C
RETURN
END