23918 lines
800 KiB
Fortran
23918 lines
800 KiB
Fortran
PROGRAM SYNSPEC
|
|
C
|
|
C =====================================================================I
|
|
C I
|
|
C Program for evaluting synthetic spectra for a given model atmosphere I
|
|
C I
|
|
C ***************** I
|
|
C VERSION SYNSPEC54 I
|
|
C ***************** I
|
|
C I
|
|
C Input: the same as input to TLUSTY or TLUSDISK - unit 5 I
|
|
C additional 6 lines of input - unit 55 (proc. START and INIBL0)I
|
|
C chemical composition - unit 56 (if a switch is on in unit 55) I
|
|
C model atmosphere - unit 8 (procedures INPMOD or INKUR) I
|
|
C line list - unit 19 (procedure INISET) I
|
|
C I
|
|
C Output: diagnostic outprint - unit 6 (several procedures) I
|
|
C synthetic spectrum - unit 7 (procedure OUTPRI) I
|
|
C flux in continuum - unit 17 (procedure OUTPRI) I
|
|
C identification table- unit 12 (procedure INIBLA) I
|
|
C partial equiv.widths- unit 16 (procedure OUTPRI) I
|
|
C elapsed time - unit 69 (procedure TIMING - UNIX only) I
|
|
C I
|
|
C -- if specific intensities are also calculated (set up by the I
|
|
C input on unit 55), there are two aditional output files: I
|
|
C I
|
|
C specific intensities - unit 10 I
|
|
C specific intensities in continuum - unit 18 I
|
|
C I
|
|
C -- in the iron-curtain option (IMODE=-2), there is another I
|
|
C output file: I
|
|
C monochromatic opacities - unit 27 I
|
|
C I
|
|
C *** The contents of units 7 and 17 serve as an input to the I
|
|
C program ROTIN, which performs rotational and instrumental I
|
|
C ROTIN, which performs rotational and instrumental I
|
|
C convolutions, and sets up files for a plot. I
|
|
C I
|
|
C Basic options: controlled by switch IMODE I
|
|
C IMODE = 0 - normal synthetic spectrum I
|
|
C (ie. identification table + emergent flux) I
|
|
C = 1 - detailed profiles of a few individual lines I
|
|
C = 2 - emergent flux in the continuum (without the I
|
|
C contribution of lines) I
|
|
C = -1 - only identification table, ie. a list of lines which I
|
|
C contribute to opacity in a given wavelength I
|
|
C region, together with their approximate equivalent I
|
|
C widths. Synthetic spectrum is not calculated. I
|
|
C = -2 - the "iron curtain" option, ie. a monochromatic I
|
|
c opacity for a homogeneous slab of a given T and n_e I
|
|
C I
|
|
C I
|
|
C ==================================================================== I
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
include 'MODELP.FOR'
|
|
include 'SYNTHP.FOR'
|
|
C
|
|
OPEN(UNIT=12,STATUS='UNKNOWN')
|
|
OPEN(UNIT=14,STATUS='UNKNOWN')
|
|
C
|
|
C INITIALIZATION - INPUT OF BASIC PARAMETERS AND MODEL ATMOSPHERE
|
|
C
|
|
CALL START
|
|
if(ifeos.gt.0) imode=-3
|
|
if(ibfac.gt.1) then
|
|
LTE0=LTE
|
|
LTE=.TRUE.
|
|
END IF
|
|
IF(IMODE.GE.-2.AND.IFEOS.LE.0) THEN
|
|
IF(INMOD.GT.0) CALL INPMOD
|
|
IF(INMOD.EQ.0) CALL INKUR
|
|
IF(ICHANG.NE.0) CALL CHANGE
|
|
IF(IBFAC.GT.1) THEN
|
|
CALL INPBF
|
|
LTE=LTE0
|
|
END IF
|
|
IF(IFWIN.GT.1) CALL SETWIN
|
|
ELSE
|
|
CALL INGRID(0,inext,0)
|
|
END IF
|
|
C
|
|
CALL INIBL0
|
|
CALL INIMOD
|
|
CALL TINT
|
|
c
|
|
IMODE0=IMODE
|
|
IF(IMODE0.EQ.-4) IMODE=2
|
|
igrd=0
|
|
1 continue
|
|
c
|
|
IF(IMODE0.LE.-3.and.ifeos.le.0) CALL INIBL1(IGRD)
|
|
IF(IFMOL.GT.0) then
|
|
CALL MOLINI
|
|
if(ifeos.ne.0) call eospri
|
|
end if
|
|
c
|
|
c zero abundances for selected species (if required)
|
|
c
|
|
if(imode0.le.-3) call abnchn(1)
|
|
c
|
|
IBLANK=0
|
|
NXTSET=0
|
|
IF(IFMOL.GT.0.AND.IMODE.LT.2) THEN
|
|
DO ILIST=1,NMLIST
|
|
NXTSEM(ILIST)=0
|
|
INACTM(ILIST)=0
|
|
NLINMT(ILIST)=0
|
|
END DO
|
|
END IF
|
|
c
|
|
if(ifeos.le.0) then
|
|
IF(IMODE.LT.2) CALL INILIN
|
|
C
|
|
IF(IFMOL.GT.0.AND.IMODE.LT.2) THEN
|
|
DO ILIST=1,NMLIST
|
|
IF(IMODE.EQ.-3.AND.TEMP(1).LT.TMLIM(ILIST))
|
|
* CALL INMOLI(ILIST)
|
|
IF(IMODE.GE.-2.and.imode.le.1) CALL INMOLI(ILIST)
|
|
END DO
|
|
END IF
|
|
end if
|
|
c
|
|
5 CONTINUE
|
|
c
|
|
C ACTUAL CALCULATION OF THE SYNTHETIC SPECTRUM
|
|
C
|
|
IF(IFEOS.GT.0) GO TO 30
|
|
10 IBLANK=IBLANK+1
|
|
IF(IFWIN.LE.0) THEN
|
|
CALL RESOLV
|
|
IF(IMODE0.LT.0) GO TO 20
|
|
if(ifreq.le.10.and.inmod.le.1) then
|
|
CALL RTECD
|
|
else
|
|
call RTE
|
|
end if
|
|
else
|
|
CALL RESOLW
|
|
end if
|
|
CALL OUTPRI
|
|
20 CONTINUE
|
|
if((imode.ge.0.and.imode.ne.7.and.iprin.ge.1).or.
|
|
* (imode.lt.0.and.iprin.ge.2)) then
|
|
CALL IDTAB
|
|
IF(IFMOL.GT.0) CALL IDMTAB
|
|
end if
|
|
IF(IBLANK.LT.NBLANK) GO TO 10
|
|
IF(NXTSET.EQ.1.AND.IRLIST.EQ.0) THEN
|
|
IF(IMODE.LT.2) CALL INILIN
|
|
GO TO 5
|
|
END IF
|
|
IF(IFMOL.GT.0.AND.IMODE.LT.2.AND.IRLIST.GT.0) THEN
|
|
DO ILIST=1,NMLIST
|
|
IF(NXTSEM(ILIST).EQ.1.and.inactm(ilist).eq.0) THEN
|
|
CALL INMOLI(ILIST)
|
|
iblank=0
|
|
GO TO 5
|
|
END IF
|
|
END DO
|
|
END IF
|
|
30 CONTINUE
|
|
c
|
|
if(imode0.lt.-2) then
|
|
call ingrid(1,inext,igrd)
|
|
igrd=igrd+1
|
|
c call timing(1,igrd)
|
|
if(inext.gt.0) go to 1
|
|
end if
|
|
if(imode0.le.-3.and.ifeos.le.0) call fingrd
|
|
call timing(2,iblank)
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
C
|
|
|
|
SUBROUTINE START
|
|
C ================
|
|
C
|
|
C General input and initialization procedure
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
common/quasun/nunalp,nunbet,nungam,nunbal
|
|
C
|
|
C ------------------------------------------------
|
|
C Additional basic input parameters - from unit 55
|
|
C ------------------------------------------------
|
|
C
|
|
C IMODE = 0 - normal synthetic spectrum
|
|
C = 1 - detailed profiles of a few individual lines
|
|
C = 2 - emergent flux in the continuum (without the
|
|
C contribution of lines)
|
|
C = -1 - identification table, ie. a list of lines which
|
|
C contribute to opacity in a given wavelength
|
|
C region, together with their approximate equivalent
|
|
C widths. Synthetic spectrum is not calculated.
|
|
C = -2 - the "iron curtain" option, ie. a monochromatic
|
|
C opacity for a homogeneous slab of a given T and n_e
|
|
C
|
|
C IDSTD - index of the "standard depth" (ie the depth at which
|
|
C the continuum optical depth is of the order of unity)
|
|
C (for detailed explanation see the code TLUSTY)
|
|
C
|
|
C IPRIN - determines the amount of output:
|
|
C =0 - standard output:
|
|
C condensed output on unit 6 (basics + error messages),
|
|
C no output on unit 96 (depths of formation);
|
|
C normal output on 16 (equivalent widths);
|
|
C normal output on 12 (identification table)
|
|
C >0 - more output:
|
|
C =1 - emergent flux on unit 6, no unit 96
|
|
C =2 - identification table + flux on unit 6, no unit 96
|
|
C =3 - as before, plus unit 96 (depths of formation);
|
|
C =4 - as before, plus unit 97 (contribution functions);
|
|
C <0 - less output:
|
|
C =-1 - no output on unit 16
|
|
C =-2 - no output on units 16 and 12
|
|
C
|
|
C INMOD = 0 - input model atmosphere as a Kurucz model
|
|
C (read by procedure INKUR)
|
|
C = 1 - input model atmosphere is a model calculated
|
|
C by the program TLUSTY
|
|
C (read by procedure INPMOD)
|
|
C = 2 - input model is a model of the vertical structure
|
|
C of one ring of an accretion disk
|
|
C INTRPL - switch indicating whether the input model has to be
|
|
C interpolated to the present depth scale;
|
|
C for details see procedure INPMOD
|
|
C ICHANG - switch indicating whether the populations from the
|
|
C input model have to be updated;
|
|
C for details see procedure CHANGE
|
|
C ICHEMC - switch indicating that new chemical composition will
|
|
C be read from unit 56
|
|
C IOPHLI - switch for treatment the Lyman line wings -see LYMLIN
|
|
C
|
|
|
|
IFWIN=0
|
|
nunalp=0
|
|
nunbet=0
|
|
nungam=0
|
|
nunbal=0
|
|
iunitm(1)=20
|
|
nmlist=0
|
|
NDSTEP=0
|
|
if(ifeos.le.0) then
|
|
READ(55,*,END=3) IMODE,IDSTD,IPRIN
|
|
READ(55,*,END=3) INMOD,INTRPL,ICHANG,ICHEMC
|
|
READ(55,*,ERR=3,END=3) IOPHLI,nunalp,nunbet,nungam,nunbal
|
|
3 continue
|
|
end if
|
|
IF(IMODE.LT.-90) THEN
|
|
IMODE=-IMODE-100
|
|
IFWIN=1
|
|
END IF
|
|
if(imode.gt.5) then
|
|
imode=imode-10
|
|
ifmol=1
|
|
nmlist=1
|
|
iunitm(1)=20
|
|
end if
|
|
c disabling an old option
|
|
iophli=0
|
|
c
|
|
c standard initialization
|
|
c
|
|
call initia
|
|
c
|
|
c if needed, read tables with data for quasimolecular satellites of
|
|
c Lyman alpha, beta, gamma, and Balmer alpha
|
|
c
|
|
call getlal
|
|
c
|
|
IF(IMODE.LT.-1) THEN
|
|
ND=1
|
|
IDSTD=1
|
|
END IF
|
|
IF(INMOD.GT.0.AND.INTRPL.GT.0) READ(55,*) (DM(I),I=1,ND)
|
|
C
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INITIA
|
|
C =================
|
|
C
|
|
C driver for input and initializations
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (WI1=911.753578, WI2=227.837832)
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
CHARACTER*10 TYPLEV(MLEVEL)
|
|
CHARACTER*4 TYPION(MIOEX),TYPIOI
|
|
CHARACTER*40 FIDATA(MION),FIODF1(MION),FIODF2(MION),FIBFCS(MION),
|
|
* FILEI
|
|
CHARACTER*20 FINSTD
|
|
CHARACTER*1 BLNK
|
|
COMMON/PRINTP/TYPLEV
|
|
COMMON/IONDAT/IATI(MION),IZI(MION),NLEVS(MION),NLLIM(MION)
|
|
COMMON/IONFIL/FIDATA,FIODF1,FIODF2,FIBFCS
|
|
COMMON/INUNIT/IUNIT
|
|
COMMON/STRPAR/IMER,ITR,IC,IL,IP,NLASTE,NHOD
|
|
common/quasex/iexpl(mlevel),iltot(mlevel)
|
|
DIMENSION IGLE(18),IGMN(25),IGFE(26),IGNI(28)
|
|
DATA IGLE/2,1,2,1,6,9,4,9,6,1,2,1,6,9,4,9,6,1/
|
|
DATA IGMN/2,1,2,1,6,9,4,9,6,1,2,1,6,9,4,9,6,1,
|
|
* 10,21,28,25,6,7,6/
|
|
DATA IGFE/2,1,2,1,6,9,4,9,6,1,2,1,6,9,4,9,6,1,
|
|
* 10,21,28,25,6,25,30,25/
|
|
DATA IGNI/2,1,2,1,6,9,4,9,6,1,2,1,6,9,4,9,6,1,
|
|
* 10,21,28,25,6,25,28,21,10,21/
|
|
DATA BLNK /' '/
|
|
C
|
|
CALL READBF
|
|
C
|
|
C ------------------------------------
|
|
C Basic input parameters - atmospheres
|
|
C ------------------------------------
|
|
C
|
|
IF(INMOD.LE.1) THEN
|
|
READ(IBUFF,*) TEFF,GRAV
|
|
ELSE IF(INMOD.EQ.2) THEN
|
|
C
|
|
C ------------------------------
|
|
C Basic input parameters - disks
|
|
C ------------------------------
|
|
C
|
|
READ(IBUFF,*) DISPAR
|
|
END IF
|
|
C
|
|
C ----------------------------
|
|
C other basic input parameters
|
|
C ----------------------------
|
|
C
|
|
READ(IBUFF,*) LTE,LTGREY
|
|
READ(IBUFF,*) FINSTD
|
|
CALL NSTPAR(FINSTD)
|
|
C
|
|
C
|
|
C ----------------------------
|
|
C Frequency points and weights
|
|
C ----------------------------
|
|
C
|
|
READ(IBUFF,*) NFREAD
|
|
NJREAD=NFREAD
|
|
C
|
|
IF(NJREAD.LT.0) THEN
|
|
NJREAD=-NJREAD
|
|
NFREQC=NJREAD
|
|
DO IJ=1,NJREAD
|
|
READ(IBUFF,*) FREQEXP
|
|
END DO
|
|
ELSE
|
|
NFREQC=NJREAD
|
|
END IF
|
|
C
|
|
WRITE(6,601) TEFF,GRAV
|
|
C
|
|
C ----------------------------------------------------
|
|
C turbulent velocities
|
|
C ----------------------------------------------------
|
|
C
|
|
IF(VTB.LT.1.E3) VTB=VTB*1.E5
|
|
DO ID=1,ND
|
|
VTURB(ID)=VTB
|
|
END DO
|
|
C
|
|
C ----------------------------------------------------
|
|
C Input parameters for explicit and non-explicit atoms
|
|
C ----------------------------------------------------
|
|
C
|
|
C Input parameters are read by procedure STATE
|
|
C (see description there)
|
|
C
|
|
CALL STATE0(1)
|
|
ID=1
|
|
IF(IPRIN.GE.1) WRITE(6,607) YTOT(ID),WMY(ID),WMM(ID)
|
|
DO I=1,MLEVEL
|
|
ILK(I)=0
|
|
iexpl(i)=0
|
|
iltot(i)=0
|
|
END DO
|
|
C
|
|
C --------------------------------------------------------------
|
|
C Input of parameters for explicit ions, levels, and transitions
|
|
C --------------------------------------------------------------
|
|
C
|
|
ILEV=0
|
|
IATLST=0
|
|
ION=0
|
|
IA=0
|
|
IUNIT=34
|
|
NATOM=0
|
|
WRITE(6,613)
|
|
10 CONTINUE
|
|
READ(IBUFF,*,END=20,ERR=20) IATII,IZII,NLEVSI,ILASTI,ILVLIN,
|
|
* NONSTD,TYPIOI,FILEI
|
|
IF(ILASTI.EQ.0) THEN
|
|
ION=ION+1
|
|
IATI(ION)=IATII
|
|
IZI(ION)=IZII
|
|
NLEVS(ION)=NLEVSI
|
|
TYPION(ION)=TYPIOI
|
|
FIDATA(ION)=FILEI
|
|
NLLIM(ION)=ILVLIN
|
|
ILIMITS(ION)=-1
|
|
IUPSUM(ION)=0
|
|
FIBFCS(ION)=BLNK
|
|
MODEFF=1
|
|
NFF=0
|
|
IF(IATI(ION).EQ.1.AND.IZI(ION).EQ.0) THEN
|
|
IUPSUM(ION)=-100
|
|
MODEFF=2
|
|
END IF
|
|
IF(IATI(ION).EQ.2.AND.IZI(ION).EQ.1) THEN
|
|
MODEFF=2
|
|
END IF
|
|
IF(NONSTD.GE.10) THEN
|
|
WRITE(*,*)'INITIA: QUANTUM NUMBERS AND ENERGY LIMITS WILL'
|
|
WRITE(*,*)' BE IGNORED FOR ION ',IATII,' ',IZII
|
|
ILIMITS(ION)=0
|
|
NONSTD=NONSTD-10
|
|
END IF
|
|
IF(NONSTD.GT.0) THEN
|
|
READ(IBUFF,*) IUPSUM(ION),ICUP,MODEFF,NFF
|
|
ELSE IF(NONSTD.LT.0) THEN
|
|
READ(IBUFF,*) ifil1,ifil2,FIODF1(ION),
|
|
* FIODF2(ION),FIBFCS(ION)
|
|
IF(FIBFCS(ION).NE.' ') THEN
|
|
IUNIT=IUNIT+1
|
|
INBFCS(ION)=IUNIT
|
|
END IF
|
|
IUPSUM(ION)=1
|
|
END IF
|
|
C
|
|
IF(IATI(ION).EQ.IATLST) THEN
|
|
NFIRST(ION)=ILEV
|
|
ELSE
|
|
NFIRST(ION)=ILEV+1
|
|
IATLST=IATI(ION)
|
|
IA=IATEX(IATLST)
|
|
N0A(IA)=NFIRST(ION)
|
|
NATOM=MAX(NATOM,IA)
|
|
END IF
|
|
NLAST(ION)=NFIRST(ION)+NLEVS(ION)-1
|
|
NNEXT(ION)=NLAST(ION)+1
|
|
ILEV=NNEXT(ION)
|
|
IZ(ION)=IZI(ION)+1
|
|
IF(NFF.GT.0) FF(ION)=EH/H*IZ(ION)*IZ(ION)/NFF/NFF
|
|
C
|
|
N0I=NFIRST(ION)
|
|
N1I=NLAST(ION)
|
|
NKI=NNEXT(ION)
|
|
IFREE(ION)=MODEFF
|
|
DO II=N0I,N1I
|
|
IEL(II)=ION
|
|
IATM(II)=IA
|
|
END DO
|
|
ILK(NKI)=ION
|
|
IATM(NKI)=IA
|
|
C
|
|
IF(NUMAT(IA).EQ.1) THEN
|
|
IATH=IA
|
|
IF(IZ(ION).EQ.1) IELH=ION
|
|
IF(IZ(ION).EQ.0) IELHM=ION
|
|
END IF
|
|
IF(NUMAT(IA).EQ.2) THEN
|
|
IATHE=IA
|
|
IF(IZ(ION).EQ.1) IELHE1=ION
|
|
IF(IZ(ION).EQ.2) IELHE2=ION
|
|
END IF
|
|
C
|
|
IF(IPRIN.GE.0)
|
|
* WRITE(6,614) TYPION(ION),N0I,N1I,NKI,IZ(ION)
|
|
C
|
|
ELSE IF(ILASTI.GT.0) THEN
|
|
ENION(ILEV)=0.
|
|
G(ILEV)=ILASTI
|
|
NQUANT(ILEV)=1
|
|
TYPLEV(ILEV)=TYPIOI
|
|
IFWOP(ILEV)=0
|
|
IEL(ILEV)=ION
|
|
NKA(IA)=NNEXT(ION)
|
|
IF(ILASTI.EQ.1.AND.IATII.GT.IZII) THEN
|
|
IF(IATII.LT.25) THEN
|
|
G(ILEV)=IGLE(IATII-IZII)
|
|
ELSE IF(IATII.EQ.25) THEN
|
|
G(ILEV)=IGMN(IATII-IZII)
|
|
ELSE IF(IATII.EQ.26) THEN
|
|
G(ILEV)=IGFE(IATII-IZII)
|
|
ELSE IF(IATII.EQ.28) THEN
|
|
G(ILEV)=IGNI(IATII-IZII)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
GO TO 20
|
|
END IF
|
|
GO TO 10
|
|
20 CONTINUE
|
|
NION=ION
|
|
NLEVEL=NKI
|
|
C
|
|
if(iath.gt.0) then
|
|
N0H=N0A(IATH)
|
|
N1H=NLAST(IELH)
|
|
NKH=NNEXT(IELH)
|
|
N0HN=NFIRST(IELH)
|
|
N0M=0
|
|
IF(IELHM.GT.0) THEN
|
|
N0M=NFIRST(IELHM)
|
|
IOPHMI=0
|
|
end if
|
|
else
|
|
n0h=0
|
|
n1h=0
|
|
nkh=0
|
|
n0hn=0
|
|
end if
|
|
C
|
|
IF(IPRIN.GE.1) WRITE(6,603) INMOD,ND,IDSTD,INTRPL,ICHANG,
|
|
* NATOM,NION,NLEVEL,
|
|
* IELH,IELHM,IATH
|
|
C
|
|
C -----------------------------------------
|
|
C Parameters for individual explicit levels
|
|
C -----------------------------------------
|
|
C
|
|
IMER=0
|
|
ITR=0
|
|
IC=0
|
|
IL=0
|
|
IP=0
|
|
C
|
|
DO ION=1,NION
|
|
CALL RDATA(ION)
|
|
NFF=NQUANT(NLAST(ION))+1
|
|
IF(NFF.GT.0) FF(ION)=EH/H*IZ(ION)*IZ(ION)/NFF/NFF
|
|
END DO
|
|
C
|
|
IF(IPRIN.GE.1) WRITE(6,615)
|
|
DO I=1,NLEVEL
|
|
IF(IPRIN.GE.1)
|
|
* WRITE(6,616) I,TYPLEV(I),TYPION(IEL(I)),ENION(I),G(I),
|
|
* NQUANT(I),IEL(I),ILK(I),IATM(I)
|
|
END DO
|
|
C
|
|
C -----------------------------------------
|
|
C Input parameters for additional opacities
|
|
C -----------------------------------------
|
|
C
|
|
IF(IPRIN.GE.0) WRITE(6,605) IOPHMI,IOPH2P,IOPHEM,IOPCH,IOPOH,
|
|
* IOPH2M,IOH2H2,IOH2HE,IOH2H1,IOHHE,
|
|
* IRSCT,IRSCH2,IRSCHE,IOPHLI
|
|
C
|
|
C
|
|
IF(VTB.LT.1.E3) VTB=VTB*1.E5
|
|
DO ID=1,ND
|
|
VTURB(ID)=VTB
|
|
END DO
|
|
WRITE(6,608) VTB*1.E-5
|
|
DO I=1,ND
|
|
VTURB(I)=VTURB(I)*VTURB(I)
|
|
END DO
|
|
C
|
|
601 FORMAT(31X,'*******************************************'/
|
|
* 31X,'I',41X,'I'/
|
|
* 31X,'I S Y N T H E T I C S P E C T R U M I'/
|
|
* 31X,'I',41X,'I'/
|
|
* 31X,'I',8X,'FOR MODEL ATMOSPHERE WITH',8X,'I'/
|
|
* 31X,'I',41X,'I'/
|
|
* 31X,'I',14X,'TEFF =',F7.0,13X,'I'/
|
|
* 31X,'I',14X,'LOG G =',F7.2,13X,'I'/
|
|
* 31X,'I',41X,'I'/
|
|
* 31X,'*******************************************')
|
|
603 FORMAT(//' BASIC INPUT PARAMETERS'/
|
|
* ' ----------------------'/
|
|
* ' INMOD =',I5/
|
|
* ' ND =',I5/
|
|
* ' IDSTD =',I5/
|
|
* ' INTRPL =',I5/
|
|
* ' ICHANG =',I5/
|
|
* ' NATOM =',I5/
|
|
* ' NION =',I5/
|
|
* ' NLEVEL =',I5/
|
|
* ' IELH =',I5/
|
|
* ' IELHM =',I5/
|
|
* ' IATH =',I5)
|
|
605 FORMAT(//' ADDITIONAL OPACITY SOURCES'/
|
|
* ' --------------------------'/
|
|
* ' IOPHMI (H- OPACITY IN LTE) =',I3/
|
|
* ' IOPH2P (H2+ OPACITY) =',I3/
|
|
* ' IOPHEM (HE- B-F AND F-F) =',I3/
|
|
* ' IOPCH (CH OPACITY) =',I3/
|
|
* ' IOPOH (OH OPACITY) =',I3/
|
|
* ' IOPH2M (H2- OPACITY) =',I3/
|
|
* ' IOH2H2 (CIA H2-H2 OPACITY =',I3/
|
|
* ' IOH2HE (CIA H2-He OPACITY =',I3/
|
|
* ' IOH2H1 (CIA H2-H OPACITY =',I3/
|
|
* ' IOHHE (CIA H-He OPACITY =',I3/
|
|
* ' IRSCT (RAYLEIGH SCAT. ON H I) =',I3/
|
|
* ' IRSCH2 (RAYLEIGH SCAT. ON H2 =',I3/
|
|
* ' IRSCHE (RAYLEIGH SCAT. ON HE I) =',I3/
|
|
* ' IOPHLI (LYMAN LINES WINGS) =',I3)
|
|
607 FORMAT(///' YTOT =',F11.5/' WMY =',1PE15.5/
|
|
* ' WMM =',E15.5)
|
|
608 FORMAT(//' TURBULENT VELOCITY - DEPTH-INDEPENDENT VTURB =',
|
|
* 1PE10.3,' KM/S'/
|
|
* ' ------------------'/)
|
|
613 FORMAT(//' EXPLICIT IONS INCLUDED'/
|
|
* ' ----------------------'//
|
|
* ' ION N0 N1 NK IZ'/)
|
|
614 FORMAT(A4,4I6)
|
|
615 FORMAT(//' EXPLICIT ENERGY LEVELS INCLUDED'/
|
|
* ' -------------------------------'//
|
|
* ' NO. LEVEL ION ION.EN.(ERG) G NQUANT',
|
|
* ' IEL ILK IAT'/)
|
|
616 FORMAT(I4,2X,A10,A4,1PE15.7,0PF10.2,4I5)
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ************************************************************************
|
|
C
|
|
C
|
|
C
|
|
SUBROUTINE RDATA(ION)
|
|
C =====================
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (WI1=911.753578, WI2=227.837832)
|
|
PARAMETER (T15=1.D-15)
|
|
PARAMETER (ECONST= 5.03411142E15)
|
|
PARAMETER (MCFIT=10)
|
|
CHARACTER*10 TYPLEV(MLEVEL)
|
|
CHARACTER*40 FIDATA(MION),FIODF1(MION),FIODF2(MION),FIBFCS(MION)
|
|
CHARACTER*1 A
|
|
CHARACTER*1000 CADENA
|
|
CHARACTER(len=100) :: DUM
|
|
COMMON/IONDAT/IATI(MION),IZI(MION),NLEVS(MION),NLLIM(MION)
|
|
COMMON/IONFIL/FIDATA,FIODF1,FIODF2,FIBFCS
|
|
COMMON/TOPCS/CTOP(MFIT,MCROSS), !sigma=alog10(sigma/10^-18) of fit point
|
|
* XTOP(MFIT,MCROSS) ! x = alog10(nu/nu0) of fit point
|
|
COMMON/PRINTP/TYPLEV
|
|
COMMON/INUNIT/IUNIT
|
|
COMMON/STRPAR/IMER,ITR,IC,IL,IP,NLASTE,NHOD
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
common/quasex/iexpl(mlevel),iltot(mlevel)
|
|
dimension CTEMP(MCFIT),CRATE(MCFIT)
|
|
|
|
data iexp0/0/
|
|
C
|
|
c IUNIT=IUNIT+1
|
|
IUNIT=94
|
|
OPEN(IUNIT,FILE=FIDATA(ION),STATUS='OLD')
|
|
C
|
|
C read the first record - a label for the energy level input
|
|
C
|
|
READ(IUNIT,501) A
|
|
501 FORMAT(A1)
|
|
C
|
|
C -----------------------------------------------------
|
|
C input parameters for explicit energy levels
|
|
C -----------------------------------------------------
|
|
C
|
|
C If ILIMITS(ION) < 0, the program finds out whether energy and
|
|
C quantum numbers are included in the input data files
|
|
|
|
IF (ILIMITS(ION).LT.0) THEN
|
|
READ(IUNIT,'(1000A)')CADENA
|
|
BACKSPACE(IUNIT)
|
|
CALL COUNT_WORDS(CADENA,NOW)
|
|
IF (NOW.LT.14) THEN
|
|
ILIMITS(ION)=0
|
|
ELSE
|
|
ILIMITS(ION)=1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
C Standard format: ENION(I),G(I),NQUANT(I),TYPLEV(I),ifwop(i)
|
|
|
|
IF (ILIMITS(ION).EQ.0) THEN
|
|
C
|
|
DO IL=1,NLEVS(ION)
|
|
I=IL+NFIRST(ION)-1
|
|
IE=IEL(I)
|
|
N0I=NFIRST(IE)
|
|
NKI=NNEXT(IE)
|
|
ia=numat(iatm(n0i))
|
|
if(isemex(ia).le.1) then
|
|
iexp0=iexp0+1
|
|
iexpl(i)=iexp0
|
|
iltot(iexp0)=i
|
|
c write(6,671) il,i,ia,ion,isemex(ia),iexp0,iltot(iexp0)
|
|
if(il.eq.nlevs(ion)) then
|
|
if(nki.eq.nka(iatm(i))) then
|
|
iexp0=iexp0+1
|
|
iexpl(nki)=iexp0
|
|
iltot(iexp0)=nki
|
|
c write(6,671) il+1,nki,ia,ion,isemex(ia),iexp0,iltot(iexp0)
|
|
end if
|
|
end if
|
|
c 671 format('il,i,ia,ion,isem,iexp,iltot',7i4)
|
|
end if
|
|
IQ=I-N0I+1
|
|
X=IQ*IQ
|
|
ifwop(i)=0
|
|
IZZ=IZ(IE)
|
|
READ(IUNIT,*)
|
|
* ENION(I),G(I),NQUANT(I),TYPLEV(I),ifwop(i)
|
|
if(ifwop(i).lt.0.and.i.ne.nlast(ie))
|
|
* call quit('conflict in negative ifwop')
|
|
if(ifwop(i).ge.2) ifwop(i)=0
|
|
IF(I.LT.NKI) THEN
|
|
E=ENION(I)
|
|
E0=E
|
|
IF(E.LT.0.) THEN
|
|
E=-E
|
|
E0=E
|
|
END IF
|
|
IF(E.EQ.0.) THEN
|
|
c if(izz.le.2) then
|
|
if(izz.le.-2) then
|
|
w0=wi1
|
|
if(izz.eq.2) w0=wi2
|
|
WL0=W0*X
|
|
IF(WL0.GT.2000.) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+1.D0)
|
|
END IF
|
|
E0=H*CL*1.D8/WL0
|
|
else
|
|
E0=EH*IZZ*IZZ/X
|
|
end if
|
|
END IF
|
|
IF(E.GT.1.D-7.AND.E.LT.100.) E0=1.6018D-12*E
|
|
IF(E.GT.100..AND.E.LT.1.D7) E0=1.9857D-16*E
|
|
IF(E.GT.1.D7) E0=H*E
|
|
IF(ENION(I).GE.0.) THEN
|
|
ENION(I)=E0
|
|
ELSE
|
|
ENION(I)=-E0
|
|
ENDIF
|
|
IF(G(I).EQ.0.) G(I)=2.D0*X
|
|
IF(NQUANT(I).EQ.0) NQUANT(I)=IQ
|
|
ELSE
|
|
c if(modref.ge.0) nref(iatm(i))=nka(iatm(i))
|
|
IF(G(I).EQ.0..AND.NKI.EQ.NKA(IATM(I))) G(I)=1.
|
|
END IF
|
|
if(ifwop(i).lt.0) then
|
|
enion(i)=0.
|
|
ff(ie)=0.
|
|
IMER=IMER+1
|
|
IMRG(I)=IMER
|
|
IIMER(IMER)=I
|
|
endif
|
|
fropc(i)=0.
|
|
END DO
|
|
|
|
C Upgraded format including limits for energies, and quantum numbers
|
|
|
|
ELSE
|
|
|
|
DO IL=1,NLEVS(ION)
|
|
I=IL+NFIRST(ION)-1
|
|
IE=IEL(I)
|
|
N0I=NFIRST(IE)
|
|
NKI=NNEXT(IE)
|
|
ia=numat(iatm(n0i))
|
|
if(isemex(ia).le.1) then
|
|
iexp0=iexp0+1
|
|
iexpl(i)=iexp0
|
|
iltot(iexp0)=i
|
|
if(il.eq.nlevs(ion)) then
|
|
if(nki.eq.nka(iatm(i))) then
|
|
iexp0=iexp0+1
|
|
iexpl(nki)=iexp0
|
|
iltot(iexp0)=nki
|
|
end if
|
|
end if
|
|
end if
|
|
IQ=I-N0I+1
|
|
X=IQ*IQ
|
|
ifwop(i)=0
|
|
IZZ=IZ(IE)
|
|
READ(IUNIT,*)
|
|
* ENION(I),G(I),NQUANT(I),TYPLEV(I),ifwop(i),frdodf,imodl,
|
|
* ENION1(I),ENION2(I),
|
|
* SQUANT1(I),SQUANT2(I),
|
|
* LQUANT1(I),LQUANT2(I),
|
|
* PQUANT1(I),PQUANT2(I)
|
|
if(ifwop(i).lt.0.and.i.ne.nlast(ie))
|
|
* call quit('conflict in negative ifwop')
|
|
if(ifwop(i).ge.2) ifwop(i)=0
|
|
IF(I.LT.NKI) THEN
|
|
|
|
C check and, if necessary, transform ENION(I)
|
|
|
|
E=ENION(I)
|
|
E0=E
|
|
IF(E.LT.0.) THEN
|
|
E=-E
|
|
E0=E
|
|
END IF
|
|
IF(E.EQ.0.) THEN
|
|
c if(izz.le.2) then
|
|
if(izz.le.-2) then
|
|
w0=wi1
|
|
if(izz.eq.2) w0=wi2
|
|
WL0=W0*X
|
|
IF(WL0.GT.2000.) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+1.D0)
|
|
END IF
|
|
E0=H*CL*1.D8/WL0
|
|
else
|
|
E0=EH*IZZ*IZZ/X
|
|
end if
|
|
END IF
|
|
IF(E.GT.1.D-7.AND.E.LT.100.) E0=1.6018D-12*E
|
|
IF(E.GT.100..AND.E.LT.1.D7) E0=1.9857D-16*E
|
|
IF(E.GT.1.D7) E0=H*E
|
|
IF(ENION(I).GE.0.) THEN
|
|
ENION(I)=E0
|
|
ELSE
|
|
ENION(I)=-E0
|
|
ENDIF
|
|
|
|
C check and, if necessary, transform ENION1(I)
|
|
|
|
E=ENION1(I)
|
|
E0=E
|
|
IF(E.LT.0.) THEN
|
|
E=-E
|
|
E0=E
|
|
END IF
|
|
IF(E.EQ.0.) THEN
|
|
c if(izz.le.2) then
|
|
if(izz.le.-2) then
|
|
w0=wi1
|
|
if(izz.eq.2) w0=wi2
|
|
WL0=W0*X
|
|
IF(WL0.GT.2000.) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+1.D0)
|
|
END IF
|
|
E0=H*CL*1.D8/WL0
|
|
else
|
|
E0=EH*IZZ*IZZ/X
|
|
end if
|
|
END IF
|
|
IF(E.GT.1.D-7.AND.E.LT.100.) E0=1.6018D-12*E
|
|
IF(E.GT.100..AND.E.LT.1.D7) E0=1.9857D-16*E
|
|
IF(E.GT.1.D7) E0=H*E
|
|
IF(ENION1(I).GE.0.) THEN
|
|
ENION1(I)=E0
|
|
ELSE
|
|
ENION1(I)=-E0
|
|
ENDIF
|
|
|
|
C check and, if necessary, transform ENION2(I)
|
|
|
|
E=ENION2(I)
|
|
E0=E
|
|
IF(E.LT.0.) THEN
|
|
E=-E
|
|
E0=E
|
|
END IF
|
|
IF(E.EQ.0.) THEN
|
|
c if(izz.le.2) then
|
|
if(izz.le.-2) then
|
|
w0=wi1
|
|
if(izz.eq.2) w0=wi2
|
|
WL0=W0*X
|
|
IF(WL0.GT.2000.) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+1.D0)
|
|
END IF
|
|
E0=H*CL*1.D8/WL0
|
|
else
|
|
E0=EH*IZZ*IZZ/X
|
|
end if
|
|
END IF
|
|
IF(E.GT.1.D-7.AND.E.LT.100.) E0=1.6018D-12*E
|
|
IF(E.GT.100..AND.E.LT.1.D7) E0=1.9857D-16*E
|
|
IF(E.GT.1.D7) E0=H*E
|
|
IF(ENION2(I).GE.0.) THEN
|
|
ENION2(I)=E0
|
|
ELSE
|
|
ENION2(I)=-E0
|
|
ENDIF
|
|
|
|
C
|
|
C Enforce an energy tolerance of 10% when the input files
|
|
C do not have any (e.g. pure levels in MODION models)
|
|
C
|
|
IF((ENION1(I)-ENION(I))/ENION(I).LT.1e-6)
|
|
* ENION1(I)=ENION(I)*(1.+ERANGE)
|
|
IF((ENION(I)-ENION2(I))/ENION(I).LT.1e-6)
|
|
* ENION2(I)=ENION(I)*(1.-ERANGE)
|
|
|
|
C
|
|
C Convert ENION1,ENION2 to cm-1 from the ground level
|
|
C so they can be directly used in NLTSET
|
|
C
|
|
|
|
ENION1(I)=(ENION(N0I)-ENION1(I))*ECONST
|
|
ENION2(I)=(ENION(N0I)-ENION2(I))*ECONST
|
|
|
|
|
|
IF(G(I).EQ.0.) G(I)=2.D0*X
|
|
IF(NQUANT(I).EQ.0) NQUANT(I)=IQ
|
|
ELSE
|
|
c if(modref.ge.0) nref(iatm(i))=nka(iatm(i))
|
|
IF(G(I).EQ.0..AND.NKI.EQ.NKA(IATM(I))) G(I)=1.
|
|
END IF
|
|
if(ifwop(i).lt.0) then
|
|
write(*,*)'RDATA: IFWOP<0 and ILIMITS is not 0'
|
|
stop
|
|
enion(i)=0.
|
|
ff(ie)=0.
|
|
IMER=IMER+1
|
|
IMRG(I)=IMER
|
|
IIMER(IMER)=I
|
|
endif
|
|
fropc(i)=0.
|
|
END DO
|
|
|
|
END IF
|
|
|
|
c
|
|
C ----------------------------------------------------------------------
|
|
C
|
|
C skip lines if more levels than needed, and skip the continuum transition
|
|
C label
|
|
C
|
|
5 READ(IUNIT,501) A
|
|
IF(A.NE.'*') GO TO 5
|
|
II0=NFIRST(ION)-1
|
|
ILLIM=NLLIM(ION)+II0
|
|
JCORR=0
|
|
C
|
|
C -----------------------------------------------------
|
|
C input parameters for continuum transitions
|
|
C -----------------------------------------------------
|
|
C
|
|
10 CONTINUE
|
|
c READ(IUNIT,*,END=20,ERR=15) II,JJ,MODE,IFANCY,ICOLIS,
|
|
c * IFRQ0,IFRQ1,OSC,CPARAM
|
|
READ(IUNIT,'(A100)',END=20) DUM
|
|
READ(DUM,*,IOSTAT=KSTAT) II,JJ,MODE,
|
|
* IFANCY,ICOLIS,
|
|
* IFRQ0,IFRQ1,OSC,CPARAM,NCOL
|
|
IF (KSTAT.NE.0) THEN
|
|
READ(DUM,*,ERR=15) II,JJ,MODE,
|
|
* IFANCY,ICOLIS,
|
|
* IFRQ0,IFRQ1,OSC,CPARAM
|
|
NCOL=0
|
|
END IF
|
|
IF (NCOL.NE.0) THEN
|
|
DO IIC=1,NCOL
|
|
READ(IUNIT,*) ITYPE, NCTEMP
|
|
READ(IUNIT,*) (CTEMP(IFIT),IFIT=1,NCTEMP)
|
|
READ(IUNIT,*) (CRATE(IFIT),IFIT=1,NCTEMP)
|
|
END DO
|
|
END IF
|
|
c
|
|
IF(II.EQ.0) THEN
|
|
IF(JJ.EQ.0) GO TO 30
|
|
II0=JJ-1
|
|
GO TO 10
|
|
END IF
|
|
IF(IABS(MODE).GT.100) READ(IUNIT,*) FR0INP
|
|
if(iabs(mode).eq.2) then
|
|
READ(IUNIT,*) kdo
|
|
go to 10
|
|
end if
|
|
IF(IFANCY.GT.49.and.ifancy.lt.100) IASV=1
|
|
if(iabs(mode).eq.3.or.iabs(mode).eq.4) go to 10
|
|
IF(IABS(MODE).EQ.5 .OR. IABS(MODE).EQ.15) THEN
|
|
READ(IUNIT,*) FROPCI
|
|
if(ion.eq.ielh) then
|
|
if(ii.eq.1.and.cutlym.ne.0) fropci=-cutlym
|
|
if(ii.eq.2.and.cutbal.ne.0) fropci=-cutbal
|
|
end if
|
|
if(abs(fropci).lt.1.e10) fropci=2.997925e18/fropci
|
|
END IF
|
|
IF(II.EQ.1) JCORR=NLEVS(ION)+1-JJ
|
|
II=II+II0
|
|
JJ=JJ+II0+JCORR
|
|
FROPC(II)=FROPCI
|
|
N0I=NFIRST(IE)
|
|
NKI=NNEXT(IE)
|
|
IF(JJ.GE.NKI) THEN
|
|
LPC=.FALSE.
|
|
IF(IELHE2.GE.0) THEN
|
|
IF(II.GE.NFIRST(IELHE2).AND.II.LE.NLAST(IELHE2)
|
|
* .AND.IFWOP(II).GE.0) LPC=.TRUE.
|
|
END IF
|
|
IF(II.GE.N0HN.AND.II.LE.N1H.AND.IFWOP(II).GE.0) LPC=.TRUE.
|
|
IF(LPC) THEN
|
|
MODE=5
|
|
XI=NQUANT(II)
|
|
X2=XI+3.
|
|
if(ii.ge.8) x2=xi+2.
|
|
IF(FROPC(II).GE.0.) THEN
|
|
FROPC(II)=ENION(II)/6.6256E-27*(1.-XI*XI/(X2*X2))
|
|
ELSE
|
|
FROPC(II)=ABS(FROPC(II))
|
|
END IF
|
|
c write(6,671) ii,fropc(ii),enion(ii)/h,2.997925e18/fropc(ii)
|
|
c 671 format(i4,1p2e13.5,0pf10.1)
|
|
END IF
|
|
END IF
|
|
IF(MODE.EQ.0) THEN
|
|
IF(II.LT.NLAST(ION)) GO TO 10
|
|
IF(II.EQ.NLAST(ION)) GO TO 15
|
|
END IF
|
|
C
|
|
C -----------------------------------------------------
|
|
C Additional input parameters for continuum transitions
|
|
C -----------------------------------------------------
|
|
C
|
|
C Only for IFANCY = 2, 3, or 4
|
|
C S0BF, ALFBF, BETBF, GAMBF - parameters for evaluation the
|
|
C photoionization cross-section
|
|
C
|
|
IF(IFANCY.GE.2.AND.IFANCY.LE.4)
|
|
* READ(IUNIT,*) S0BF(II),ALFBF(II),BETBF(II),GAMBF(II)
|
|
C
|
|
C -----------------------------------------------------
|
|
C Additional input parameters for continuum transitions -TOPBASE DATA
|
|
C -----------------------------------------------------
|
|
C
|
|
C Only for IFANCY > 100 there are IFANCY-100 fit points
|
|
C
|
|
C XTOP(MFIT,MCROSS) - x = alog10(nu/nu0) of a fit point
|
|
C CTOP(MFIT,MCROSS) - sigma = alog10(sigma/10^-18) of a fit point
|
|
C
|
|
C there are IFANCY-100 fit points
|
|
C
|
|
IF(IFANCY.GT.100) THEN
|
|
NFIT=IFANCY-100
|
|
IF(NFIT.GT.MFIT) call quit(' nfit too large (TOPBASE fits)')
|
|
READ(IUNIT,*) (XTOP(IFIT,II),IFIT=1,NFIT)
|
|
READ(IUNIT,*) (CTOP(IFIT,II),IFIT=1,NFIT)
|
|
END IF
|
|
IBF(II)=IFANCY
|
|
INDEXP(II)=IABS(MODE)
|
|
IF(II.LT.NLAST(ION)) GO TO 10
|
|
15 READ(IUNIT,501) A
|
|
IF(A.NE.'*') GO TO 15
|
|
C
|
|
C -----------------------------------------------------------
|
|
C Input parameters for line transitions
|
|
C -----------------------------------------------------------
|
|
C
|
|
20 CONTINUE
|
|
READ(IUNIT,*,END=30,ERR=30) II,JJ,MODE,IFANCY,ICOLIS,
|
|
* IFRQ0,IFRQ1,OSC,CPARAM
|
|
IF(IABS(MODE).GT.100) READ(IUNIT,*) FR0INP
|
|
IF(JJ.GT.NLEVS(ION)) THEN
|
|
IF(IABS(MODE).EQ.2) THEN
|
|
READ(IUNIT,*) K1,K2,K3,X1,X2,X3,K4
|
|
GO TO 20
|
|
END IF
|
|
IF(IABS(MODE).EQ.1) READ(IUNIT,*) LCMP
|
|
IF(IABS(IFANCY).EQ.1) READ(IUNIT,*) GAMR,STARK1,STARK2,
|
|
* STARK3,VDWH
|
|
GO TO 20
|
|
END IF
|
|
if(iabs(mode).eq.2) then
|
|
READ(IUNIT,*) K1,K2,K3,X1,X2,X3,K4
|
|
go to 20
|
|
end if
|
|
if(iabs(mode).eq.3.or.iabs(mode).eq.4) go to 20
|
|
IF(MODE.EQ.0) GO TO 20
|
|
C
|
|
C -----------------------------------------------------------
|
|
C Additional input parameters for "clasical" line transitions
|
|
C (i.e. those not represented by ODF's - ie ABS(MODE)=1)
|
|
C -----------------------------------------------------------
|
|
C
|
|
READ(IUNIT,*) LCOMP,INTMOD,NF,XMAX,TSTD
|
|
IF(IABS(IFANCY).EQ.1) READ(IUNIT,*) GAMR,STARK1,STARK2,
|
|
* STARK3,VDWH
|
|
GO TO 20
|
|
C
|
|
30 CONTINUE
|
|
close(iunit)
|
|
RETURN
|
|
END
|
|
c
|
|
c
|
|
C *****************************************************************
|
|
c
|
|
C
|
|
SUBROUTINE NSTPAR(FINSTD)
|
|
C ==========================
|
|
C
|
|
C settiing up the default values of various input flags, and
|
|
C input of non-standard values of various input flags and parameters
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
common/hhebrd/sthe,nunhhe
|
|
common/gompar/hglim,ihgom
|
|
common/brdstd/gsstd,gwstd
|
|
C
|
|
PARAMETER(MVAR=44)
|
|
PARAMETER(INPFI=4)
|
|
CHARACTER*(*) FINSTD
|
|
CHARACTER*6 PVALUE(MVAR)
|
|
CHARACTER*80 TEXT
|
|
CHARACTER VARNAM(MVAR)*6
|
|
CHARACTER*20 BLNK
|
|
CHARACTER*6 BLNK6
|
|
C
|
|
DATA VARNAM /'IATREF',
|
|
* 'BERGFC','IHYDPR','NUNHHE','STHE ',
|
|
* 'ND ','NFREQS','IBFAC ',
|
|
* 'INTRPL','ICHANG','IFEOS ',
|
|
* 'IOPHMI','IOPH2P','IOPHEM','IOPCH ','IOPOH ',
|
|
* 'IOPH2M','IOH2H2','IOH2HE','IOH2H1','IOHHE ',
|
|
* 'IRSCT ','IRSCH2','IRSCHE',
|
|
* 'TRAD ','WDIL ',
|
|
* 'VTB ','IFMOL','TMOLIM',
|
|
* 'MOLTAB','IRWTAB','IIRWIN','IPFEXO',
|
|
* 'CUTLYM','CUTBAL','IHXENB',
|
|
* 'GSSTD ','GWSTD ',
|
|
* 'IHGOM ','HGLIM ',
|
|
* 'ERANGE',
|
|
* 'ISPICK','ILPICK','IPPICK'/
|
|
|
|
C
|
|
DATA PVALUE /' 1',
|
|
* ' 1.D0',' 0',' 0',' 1.e19',
|
|
* ' 70',' 120',' 0',
|
|
* ' 0',' 0',' 0',
|
|
* ' 1',' 1',' 1',' 1',' 1',
|
|
* ' 1',' 1',' 1',' 1',' 1',
|
|
* ' 1',' 1',' 1',
|
|
* ' 0.',' 0.',
|
|
* ' 2.',' 1',' 9000.',
|
|
* ' 1',' 1',' 1',' 1',
|
|
* ' 0.',' 0.',' 0',
|
|
* '3.1e-5','1.0e-7',
|
|
* ' 0',' 1.e18',
|
|
* ' 0.10',
|
|
* ' 1',' 1',' 1'/
|
|
C
|
|
DATA BLNK/' '/,BLNK6/' '/
|
|
C
|
|
IF(FINSTD.NE.BLNK)
|
|
* OPEN(UNIT=INPFI,FILE=FINSTD,STATUS='UNKNOWN')
|
|
C
|
|
INDV=-1
|
|
C
|
|
C go through the input file line by line
|
|
c
|
|
write(6,601)
|
|
601 format(/' INPUT KEYWORD PARAMETERS:'/
|
|
* ' -------------------------')
|
|
c
|
|
10 CONTINUE
|
|
K0=1
|
|
READ(INPFI,500,END=70,ERR=70) TEXT
|
|
500 FORMAT(A)
|
|
WRITE(6,*) TEXT
|
|
20 CONTINUE
|
|
CALL GETWRD(TEXT,K0,K1,K2)
|
|
IF(K1.EQ.0) GO TO 60
|
|
K0=K2+2
|
|
IF(TEXT(K1:K2).EQ.'=') GO TO 20
|
|
INDV=-INDV
|
|
IF(INDV.EQ.1) THEN
|
|
DO 40 I=1,MVAR
|
|
IF(TEXT(K1:K2).EQ.VARNAM(I)(1:K2-K1+1)) GO TO 50
|
|
40 CONTINUE
|
|
CALL GETWRD(TEXT,K0,K1,K2)
|
|
IF(K1.EQ.0) THEN
|
|
K0=1
|
|
45 READ(INPFI,500,END=70) TEXT
|
|
CALL GETWRD(TEXT,K0,K1,K2)
|
|
IF(K1.EQ.0) GO TO 45
|
|
END IF
|
|
K0=K2+2
|
|
INDV=-INDV
|
|
GO TO 20
|
|
50 CONTINUE
|
|
IVAR=I
|
|
ELSE
|
|
PVALUE(IVAR)=BLNK6
|
|
PVALUE(IVAR)(6-K2+K1:6)=TEXT(K1:K2)
|
|
END IF
|
|
GO TO 20
|
|
60 CONTINUE
|
|
GO TO 10
|
|
70 CONTINUE
|
|
C
|
|
DO I=1,MVAR
|
|
WRITE(84,684) PVALUE(I)
|
|
684 FORMAT(1X,A)
|
|
END DO
|
|
C
|
|
CLOSE(UNIT=84)
|
|
REWIND(84)
|
|
READ(84,*)
|
|
* IATREF,
|
|
* BERGFC,IHYDPR,NUNHHE,STHE ,
|
|
* ND ,NFREQS,IBFAC ,
|
|
* INTRPL,ICHANG,IFEOS ,
|
|
* IOPHMI,IOPH2P,IOPHEM,IOPCH ,IOPOH ,
|
|
* IOPH2M,IOH2H2,IOH2HE,IOH2H1,IOHHE ,
|
|
* IRSCT ,IRSCH2,IRSCHE,
|
|
* TRAD ,WDIL ,
|
|
* VTB ,IFMOL ,TMOLIM,
|
|
* MOLTAB,IRWTAB,IIRWIN,IPFEXO,
|
|
* CUTLYM,CUTBAL,IHXENB,
|
|
* GSSTD ,GWSTD ,
|
|
* IHGOM ,HGLIM ,
|
|
* ERANGE,
|
|
* ISPICK,ILPICK,IPPICK
|
|
C
|
|
if(imode.le.-3) then
|
|
irsct=0
|
|
irsche=0
|
|
irsch2=0
|
|
end if
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ***************************************************************
|
|
C
|
|
C
|
|
subroutine count_words(cadena,n)
|
|
C
|
|
C Counts the number of words separated by blanks in a string
|
|
C
|
|
character*1000 cadena
|
|
character*1 a,b
|
|
|
|
n=0
|
|
a=cadena(1:1)
|
|
if (a.ne.' ') n=1
|
|
do i=2,len(cadena)
|
|
b=cadena(i:i)
|
|
if(b.ne.' '.and.a.eq.' ') n=n+1
|
|
a=b
|
|
enddo
|
|
end
|
|
C
|
|
C
|
|
C ***************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE GETWRD(TEXT,K0,K1,K2)
|
|
C
|
|
C FINDS NEXT WORD IN TEXT FROM INDEX K0. NEXT WORD IS TEXT(K1:K2)
|
|
C THE NEXT WORD STARTS AT THE FIRST ALPHANUMERIC CHARACTER AT K0
|
|
C OR AFTER. IT ENDS WITH THE LAST ALPHANUMERIC CHARACTER IN A ROW
|
|
C FROM THE START
|
|
C
|
|
C TAKEN FROM MULTI - M. CARLSSON (1976)
|
|
C
|
|
C INCLUDE 'IMPLIC.FOR'
|
|
PARAMETER (MSEPAR=7)
|
|
CHARACTER*(*) TEXT
|
|
CHARACTER SEPAR(MSEPAR)
|
|
DATA SEPAR/' ','(',')','=','*','/',','/
|
|
C
|
|
K1=0
|
|
DO 400 I=K0,LEN(TEXT)
|
|
IF(K1.EQ.0) THEN
|
|
DO 100 J=1,MSEPAR
|
|
IF(TEXT(I:I).EQ.SEPAR(J)) GOTO 200
|
|
100 CONTINUE
|
|
K1=I
|
|
C
|
|
C NOT START OF WORD
|
|
C
|
|
200 CONTINUE
|
|
ELSE
|
|
DO 300 J=1,MSEPAR
|
|
IF(TEXT(I:I).EQ.SEPAR(J)) GOTO 500
|
|
300 CONTINUE
|
|
ENDIF
|
|
400 CONTINUE
|
|
C
|
|
C NO NEW WORD. RETURN K1=K2=0
|
|
C
|
|
K1=0
|
|
K2=0
|
|
GOTO 999
|
|
C
|
|
C NEW WORD IN TEXT(K1:I-1)
|
|
C
|
|
500 CONTINUE
|
|
K2=I-1
|
|
C
|
|
999 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE STATE0(MODOLD)
|
|
C =========================
|
|
C
|
|
C Initialization of the basic parameters for the Saha equation
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (enhe1=24.5799,enhe2=54.3999)
|
|
character*4 DYP
|
|
character*80 dum
|
|
DIMENSION D(3,MATOM),XI(8,MATOM),DYP(MATOM),
|
|
* abun0(matom),abun1(matom)
|
|
C
|
|
DATA DYP/' H ',' He ',' Li ',' Be ',' B ',' C ',
|
|
* ' N ',' O ',' F ',' Ne ',' Na ',' Mg ',
|
|
* ' Al ',' Si ',' P ',' S ',' Cl ',' Ar ',
|
|
* ' K ',' Ca ',' Sc ',' Ti ',' V ',' Cr ',
|
|
* ' Mn ',' Fe ',' Co ',' Ni ',' Cu ',' Zn ',
|
|
* ' Ga ',' Ge ',' As ',' Se ',' Br ',' Kr ',
|
|
* ' Rb ',' Sr ',' Y ',' Zr ',' Nb ',' Mo ',
|
|
* ' Tc ',' Ru ',' Rh ',' Pd ',' Ag ',' Cd ',
|
|
* ' In ',' Sn ',' Sb ',' Te ',' I ',' Xe ',
|
|
* ' Cs ',' Ba ',' La ',' Ce ',' Pr ',' Nd ',
|
|
* ' Pm ',' Sm ',' Eu ',' Gd ',' Tb ',' Dy ',
|
|
* ' Ho ',' Er ',' Tm ',' Yb ',' Lu ',' Hf ',
|
|
* ' Ta ',' W ',' Re ',' Os ',' Ir ',' Pt ',
|
|
* ' Au ',' Hg ',' Tl ',' Pb ',' Bi ',' Po ',
|
|
* ' At ',' Rn ',' Fr ',' Ra ',' Ac ',' Th ',
|
|
* ' Pa ',' U ',' Np ',' Pu ',' Am ',' Cm ',
|
|
* ' Bk ',' Cf ',' Es '/
|
|
C
|
|
C Standard atomic constants for first 99 species
|
|
C Abundances for the first 30 from Grevesse & Sauval,
|
|
C (1998, Space Sci. Rev. 85, 161)
|
|
C
|
|
C Element Atomic Solar Std.
|
|
C weight abundance highest
|
|
C
|
|
C ionization stage
|
|
DATA D/ 1.008, 1.0D0, 2.,
|
|
* 4.003, 1.00D-1, 3.,
|
|
* 6.941, 1.26D-11, 3.,
|
|
* 9.012, 2.51D-11, 3.,
|
|
* 10.810, 5.0D-10, 4.,
|
|
* 12.011, 3.31D-4, 5.,
|
|
* 14.007, 8.32D-5, 5.,
|
|
* 16.000, 6.76D-4, 5.,
|
|
* 18.918, 3.16D-8, 4.,
|
|
* 20.179, 1.20D-4, 4.,
|
|
* 22.990, 2.14D-6, 4.,
|
|
* 24.305, 3.80D-5, 4.,
|
|
* 26.982, 2.95D-6, 4.,
|
|
* 28.086, 3.55D-5, 5.,
|
|
* 30.974, 2.82D-7, 5.,
|
|
* 32.060, 2.14D-5, 5.,
|
|
* 35.453, 3.16D-7, 5.,
|
|
* 39.948, 2.52D-6, 5.,
|
|
* 39.098, 1.32D-7, 5.,
|
|
* 40.080, 2.29D-6, 5.,
|
|
* 44.956, 1.48D-9, 5.,
|
|
* 47.900, 1.05D-7, 5.,
|
|
* 50.941, 1.00D-8, 5.,
|
|
* 51.996, 4.68D-7, 5.,
|
|
* 54.938, 2.45D-7, 5.,
|
|
* 55.847, 3.16D-5, 5.,
|
|
* 58.933, 8.32D-8, 5.,
|
|
* 58.700, 1.78D-6, 5.,
|
|
* 63.546, 1.62D-8, 5.,
|
|
* 65.380, 3.98D-8, 5.,
|
|
* 69.72 , 1.34896324e-09 , 3.,
|
|
* 72.60 , 4.26579633e-09 , 3.,
|
|
* 74.92 , 2.34422821e-10 , 3.,
|
|
* 78.96 , 2.23872066e-09 , 3.,
|
|
* 79.91 , 4.26579633e-10 , 3.,
|
|
* 83.80 , 1.69824373e-09 , 3.,
|
|
* 85.48 , 2.51188699e-10 , 3.,
|
|
* 87.63 , 8.51138173e-10 , 3.,
|
|
* 88.91 , 1.65958702e-10 , 3.,
|
|
* 91.22 , 4.07380181e-10 , 3.,
|
|
* 92.91 , 2.51188630e-11 , 3.,
|
|
* 95.95 , 9.12010923e-11 , 3.,
|
|
* 99.00 , 1.00000000e-24 , 3.,
|
|
* 101.1 , 6.60693531e-11 , 3.,
|
|
* 102.9 , 1.23026887e-11 , 3.,
|
|
* 106.4 , 5.01187291e-11 , 3.,
|
|
* 107.9 , 1.73780087e-11 , 3.,
|
|
* 112.4 , 5.75439927e-11 , 3.,
|
|
* 114.8 , 6.60693440e-12 , 3.,
|
|
* 118.7 , 1.38038460e-10 , 3.,
|
|
* 121.8 , 1.09647810e-11 , 3.,
|
|
* 127.6 , 1.73780087e-10 , 3.,
|
|
* 126.9 , 3.23593651e-11 , 3.,
|
|
* 131.3 , 1.69824373e-10 , 3.,
|
|
* 132.9 , 1.31825676e-11 , 3.,
|
|
* 137.4 , 1.62181025e-10 , 3.,
|
|
* 138.9 , 1.58489337e-11 , 3.,
|
|
* 140.1 , 4.07380293e-11 , 3.,
|
|
* 140.9 , 6.02559549e-12 , 3.,
|
|
* 144.3 , 2.95120943e-11 , 3.,
|
|
* 147.0 , 1.00000000e-24 , 3.,
|
|
* 150.4 , 9.33254366e-12 , 3.,
|
|
* 152.0 , 3.46736869e-12 , 3.,
|
|
* 157.3 , 1.17489770e-11 , 3.,
|
|
* 158.9 , 2.13796216e-12 , 3.,
|
|
* 162.5 , 1.41253747e-11 , 3.,
|
|
* 164.9 , 3.16227767e-12 , 3.,
|
|
* 167.3 , 8.91250917e-12 , 3.,
|
|
* 168.9 , 1.34896287e-12 , 3.,
|
|
* 173.0 , 8.91250917e-12 , 3.,
|
|
* 175.0 , 1.31825674e-12 , 3.,
|
|
* 178.5 , 5.37031822e-12 , 3.,
|
|
* 181.0 , 1.34896287e-12 , 3.,
|
|
* 183.9 , 4.78630102e-12 , 3.,
|
|
* 186.3 , 1.86208719e-12 , 3.,
|
|
* 190.2 , 2.39883290e-11 , 3.,
|
|
* 192.2 , 2.34422885e-11 , 3.,
|
|
* 195.1 , 4.78630036e-11 , 3.,
|
|
* 197.0 , 6.76082952e-12 , 3.,
|
|
* 200.6 , 1.23026887e-11 , 3.,
|
|
* 204.4 , 6.60693440e-12 , 3.,
|
|
* 207.2 , 1.12201834e-10 , 3.,
|
|
* 209.0 , 5.12861361e-12 , 3.,
|
|
* 210.0 , 1.00000000e-24 , 3.,
|
|
* 211.0 , 1.00000000e-24 , 3.,
|
|
* 222.0 , 1.00000000e-24 , 3.,
|
|
* 223.0 , 1.00000000e-24 , 3.,
|
|
* 226.1 , 1.00000000e-24 , 3.,
|
|
* 227.1 , 1.00000000e-24 , 3.,
|
|
* 232.0 , 1.20226443e-12 , 3.,
|
|
* 231.0 , 1.00000000e-24 , 3.,
|
|
* 238.0 , 3.23593651e-13 , 3.,
|
|
* 237.0 , 1.00000000e-24 , 3.,
|
|
* 244.0 , 1.00000000e-24 , 3.,
|
|
* 243.0 , 1.00000000e-24 , 3.,
|
|
* 247.0 , 1.00000000e-24 , 3.,
|
|
* 247.0 , 1.00000000e-24 , 3.,
|
|
* 251.0 , 1.00000000e-24 , 3.,
|
|
* 254.0 , 1.00000000e-24 , 3./
|
|
c
|
|
data abun0 /
|
|
* 12.00,10.93, 1.05, 1.38, 2.70, 8.39, 7.78, 8.66, 4.56, 7.84,
|
|
* 6.17, 7.53, 6.37, 7.51, 5.36, 7.14, 5.50, 6.18, 5.08, 6.31,
|
|
* 3.05, 4.90, 4.00, 5.64, 5.39, 7.45, 4.92, 6.23, 4.21, 4.60,
|
|
* 2.88, 3.58, 2.29, 3.33, 2.56, 3.28, 2.60, 2.92, 2.21, 2.59,
|
|
* 1.42, 1.92,-9.99, 1.84, 1.12, 1.69, 0.94, 1.77, 1.60, 2.00,
|
|
* 1.00, 2.19, 1.51, 2.27, 1.07, 2.17, 1.13, 1.58, 0.71, 1.45,
|
|
* -9.99, 1.01, 0.52, 1.12, 0.28, 1.14, 0.51, 0.93, 0.00, 1.08,
|
|
* 0.06, 0.88,-0.17, 1.11, 0.23, 1.45, 1.38, 1.64, 1.01, 1.13,
|
|
* 0.90, 2.00, 0.65,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99, 0.06,
|
|
* -9.99,-0.52,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99/
|
|
c
|
|
data abun1 /
|
|
* 12.00,10.93, 3.26, 1.38, 2.79, 8.43, 7.83, 8.69, 4.56, 7.93,
|
|
* 6.24, 7.60, 6.45, 7.51, 5.41, 7.12, 5.50, 6.40, 5.08, 6.34,
|
|
* 3.15, 4.95, 3.93, 5.64, 5.43, 7.50, 4.99, 6.22, 4.19, 4.56,
|
|
* 3.04, 3.65, 2.30, 3.34, 2.54, 3.25, 2.36, 2.87, 2.21, 2.58,
|
|
* 1.46, 1.88,-9.99, 1.75, 1.06, 1.65, 1.20, 1.71, 0.76, 2.04,
|
|
* 1.01, 2.18, 1.55, 2.24, 1.08, 2.18, 1.10, 1.58, 0.72, 1.42,
|
|
* -9.99, 0.96, 0.52, 1.07, 0.30, 1.10, 0.48, 0.92, 0.10, 0.92,
|
|
* 0.10, 0.85,-0.12, 0.65, 0.26, 1.40, 1.38, 1.62, 0.80, 1.17,
|
|
* 0.77, 2.04, 0.65,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99, 0.06,
|
|
* -9.99,-0.54,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99,-9.99/
|
|
C
|
|
C
|
|
C Ionization potentials for first 99 species:
|
|
DATA XI/
|
|
C
|
|
C Element Ionization potentials (eV)
|
|
C I II III IV V VI VII VIII
|
|
C
|
|
* 13.595, 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
|
|
* 24.580, 54.400, 0. , 0. , 0. , 0. , 0. , 0. ,
|
|
* 5.392, 75.619,122.451, 0. , 0. , 0. , 0. , 0. ,
|
|
* 9.322, 18.206,153.850,217.713, 0. , 0. , 0. , 0. ,
|
|
* 8.296, 25.149, 37.920,259.298,340.22, 0. , 0. , 0. ,
|
|
* 11.264, 24.376, 47.864, 64.476,391.99,489.98, 0. , 0. ,
|
|
* 14.530, 29.593, 47.426, 77.450, 97.86,551.93,667.03, 0. ,
|
|
* 13.614, 35.108, 54.886, 77.394,113.87,138.08,739.11,871.39,
|
|
* 17.418, 34.980, 62.646, 87.140,114.21,157.12,185.14,953.6 ,
|
|
* 21.559, 41.070, 63.500, 97.020,126.30,157.91,207.21,239.0 ,
|
|
* 5.138, 47.290, 71.650, 98.880,138.37,172.09,208.44,264.16,
|
|
* 7.664, 15.030, 80.120,102.290,141.23,186.49,224.9 ,265.96,
|
|
* 5.984, 18.823, 28.440,119.960,153.77,190.42,241.38,284.53,
|
|
* 8.151, 16.350, 33.460, 45.140,166.73,205.11,246.41,303.07,
|
|
* 10.484, 19.720, 30.156, 51.354, 65.01,220.41,263.31,309.26,
|
|
* 10.357, 23.400, 35.000, 47.290, 72.50, 88.03,280.99,328.8 ,
|
|
* 12.970, 23.800, 39.900, 53.500, 67.80, 96.7 ,114.27,348.3 ,
|
|
* 15.755, 27.620, 40.900, 59.790, 75.00, 91.3 ,124.0 ,143.46,
|
|
* 4.339, 31.810, 46.000, 60.900, 82.6 , 99.7 ,118.0 ,155.0 ,
|
|
* 6.111, 11.870, 51.210, 67.700, 84.39,109.0 ,128.0 ,147.0 ,
|
|
* 6.560, 12.890, 24.750, 73.900, 92.0 ,111.1 ,138.0 ,158.7 ,
|
|
* 6.830, 13.630, 28.140, 43.240, 99.8 ,120.0 ,140.8 ,168.5 ,
|
|
* 6.740, 14.200, 29.700, 48.000, 65.2 ,128.9 ,151.0 ,173.7 ,
|
|
* 6.763, 16.490, 30.950, 49.600, 73.0 , 90.6 ,161.1 ,184.7 ,
|
|
* 7.432, 15.640, 33.690, 53.000, 76.0 , 97.0 ,119.24,196.46,
|
|
* 7.870, 16.183, 30.652, 54.800, 75.0 , 99.1 ,125.0 ,151.06,
|
|
* 7.860, 17.060, 33.490, 51.300, 79.5 ,102.0 ,129.0 ,157.0 ,
|
|
* 7.635, 18.168, 35.170, 54.900, 75.5 ,108.0 ,133.0 ,162.0 ,
|
|
* 7.726, 20.292, 36.830, 55.200, 79.9 ,103.0 ,139.0 ,166.0 ,
|
|
* 9.394, 17.964, 39.722, 59.400, 82.6 ,108.0 ,134.0 ,174.0 ,
|
|
* 6.000, 20.509, 30.700, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.89944,15.93462, 34.058, 45.715,99.99,99.99,99.99,99.99,
|
|
* 9.7887, 18.5892, 28.351, 99.99,99.99,99.99,99.99,99.99,
|
|
* 9.750,21.500, 32.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 11.839,21.600, 35.900, 99.99,99.99,99.99,99.99,99.99,
|
|
* 13.995,24.559, 36.900, 99.99,99.99,99.99,99.99,99.99,
|
|
* 4.175,27.500, 40.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.692,11.026, 43.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.2171,12.2236, 20.5244,60.607,99.99,99.99,99.99,99.99,
|
|
* 6.63390,13.13,23.17,34.418,80.348,99.99,99.99,99.99,
|
|
* 6.879,14.319, 25.039, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.099,16.149, 27.149, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.280,15.259, 30.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.364,16.759, 28.460, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.460,18.070, 31.049, 99.99,99.99,99.99,99.99,99.99,
|
|
* 8.329,19.419, 32.920, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.574,21.480, 34.819, 99.99,99.99,99.99,99.99,99.99,
|
|
* 8.990,16.903, 37.470, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.784,18.860, 28.029, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.342,14.627, 30.490,72.3,99.99,99.99,99.99,99.99,
|
|
* 8.639,16.500, 25.299,44.2,55.7,99.99,99.99,99.99,
|
|
* 9.0096,18.600, 27.96, 37.4,58.7,99.99,99.99,99.99,
|
|
* 10.454,19.090, 32.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 12.12984,20.975,31.05,45.,54.14,99.99,99.99,99.99,
|
|
* 3.893,25.100, 35.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.210,10.000, 37.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.580,11.060, 19.169, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.650,10.850, 20.080, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.419,10.550, 23.200, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.490,10.730, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.550,10.899, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.629,11.069, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.680,11.250, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.159,12.100, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.849,11.519, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.930,11.670, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.020,11.800, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.099,11.930, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.180,12.050, 23.700, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.250,12.170, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.099,13.899, 19.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.000,14.899, 23.299, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.879,16.200, 24.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.86404,17.700, 25.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 7.870,16.600, 26.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 8.500,17.000, 27.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 9.100,20.000, 28.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 8.95868,18.563,33.227, 99.99,99.99,99.99,99.99,99.99,
|
|
* 9.220,20.500, 30.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 10.430,18.750, 34.200, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.10829,20.4283,29.852,50.72,99.99,99.99,99.99,99.99,
|
|
* 7.416684,15.0325,31.9373,42.33,69.,99.99,99.99,99.99,
|
|
* 7.285519,16.679, 25.563,45.32,56.0,88.,99.99,99.99,
|
|
* 8.430,19.000, 27.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 9.300,20.000, 29.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 10.745,20.000, 30.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 4.000,22.000, 33.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 5.276,10.144, 34.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.900,12.100, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99,
|
|
* 6.000,12.000, 20.000, 99.99,99.99,99.99,99.99,99.99/
|
|
|
|
C
|
|
C
|
|
c DATA XIFE /8*0.,233.6,262.1/
|
|
c DATA NTOTA /99/
|
|
C
|
|
C An element (hydrogen through zinc) can be considered in one of
|
|
C the three following options:
|
|
C 1. explicitly - some of energy levels of some of its ionization
|
|
C states are considered explicitly, ie. their
|
|
C populations are determined by solving statistical
|
|
C equilibrium
|
|
C 2. implicitly - the atom is assumed not to contribute to
|
|
C opacity; but is allowed to contribute to the
|
|
C total number of particles and to the total charge;
|
|
C the latter is evaluated assuming LTE ionization
|
|
C balance, ie. by solving a set of Saha equations
|
|
C 3. not considered at all
|
|
C
|
|
C Input:
|
|
C
|
|
C For each element from 1 (hydrogen) to NATOMS, the following
|
|
C parameters:
|
|
C
|
|
C MA = 0 - if the element is not considered (option 3)
|
|
C = 1 - if the element is non-explicit (option 2)
|
|
C = 2 - if the element is explicit (option 1)
|
|
C = 4 - if the element is semi-explicit (i.e. behaves
|
|
C like MA=2 for continua and MA=1 for lines
|
|
C NA0,NAK - have the meaning only for MA=2; indicate that the
|
|
C explicit energy levels of the present species have
|
|
C the indices between NA0 and NAK (NAK is thus the index
|
|
C of the highest ionization state, which is represented
|
|
C as one-level ion).
|
|
C ION - has the meaning for MA=1 only;
|
|
C if ION=0, standard number of ionization degrees is
|
|
C considered
|
|
C (counting the neutral state also; so for
|
|
C instance to treat all stages of He requires
|
|
C ION=3, which is a default anyhow).
|
|
C if ION>0, then ION ionization degrees is considered
|
|
C MODPF - mode of evaluation of partition functions
|
|
C = 0 - standard evaluation (see procedure PARTF)
|
|
C > 0 - partition functions evaluated from the
|
|
C Opacity Project ionization fraction tables
|
|
C < 0 - non-standard evaluation, by user supplied
|
|
C procedure PFSPEC
|
|
C ABN - if ABN=0, solar abundance is assumed (given above;
|
|
C abundance here is assumed as relative
|
|
C to hydrogen by number
|
|
C if ABN>0, non-solar abundance ABN is assumed; in an
|
|
C arbitrary scale
|
|
C if ABN<0, non-solar abundance ABN is assumed;
|
|
C (-ABN times the solar value)
|
|
C PFS - see above
|
|
C
|
|
iabset=0
|
|
read(ibuff,'(a80)') dum
|
|
read(dum,*,iostat=kstat) natoms,iabset
|
|
if(kstat.ne.0) READ(dum,*) NATOMS
|
|
WRITE(6,600)
|
|
IAT=0
|
|
IREF=0
|
|
IF(NATOMS.LT.0) NATOMS=-NATOMS
|
|
C
|
|
DO I=1,MATOM
|
|
DO J=1,MION0
|
|
RR(I,J)=0.
|
|
END DO
|
|
if(iabset.eq.1) then
|
|
d(2,i)=10.**(abun1(i)-12.)
|
|
else if(iabset.ne.2) then
|
|
d(2,i)=10.**(abun0(i)-12.)
|
|
end if
|
|
END DO
|
|
DO ID=1,ND
|
|
YTOT(ID)=0.
|
|
WMY(ID)=0.
|
|
END DO
|
|
C
|
|
DO I=1,MATOM
|
|
TYPAT(I)=DYP(I)
|
|
LGR(I)=.TRUE.
|
|
LRM(I)=.TRUE.
|
|
IATEX(I)=-1
|
|
IF(I.LE.NATOMS) THEN
|
|
IF(MODOLD.EQ.0) THEN
|
|
READ(IBUFF,*) MA,NA0,NAK,ION,MODPF(I),ABN,
|
|
* (PFSTD(J,I),J=1,5)
|
|
MA=IABS(MA)
|
|
ELSE
|
|
READ(IBUFF,*) MA,ABN,MODPF(I)
|
|
ION=0
|
|
END IF
|
|
ELSE IF(MOD(IMODE,10).LE.1.and.imode.ne.-4) THEN
|
|
MA=1
|
|
ABN=0.
|
|
ION=0
|
|
MODPF(I)=0
|
|
ELSE
|
|
MA=0
|
|
END IF
|
|
AMAS(I)=D(1,I)
|
|
ABND(I)=D(2,I)
|
|
if(iref.gt.0) abnd(i)=d(2,i)*abnd(iref)/d(2,iref)
|
|
IONIZ(I)=int(D(3,I))
|
|
isemex(i)=0
|
|
C
|
|
C increase the standard highest ionization for Teff>30,000 K
|
|
C
|
|
IF(TEFF.GT.3.D4) THEN
|
|
IF(I.LE.8) IONIZ(I)=I+1
|
|
IF(I.GT.8.and.i.le.30) IONIZ(I)=9
|
|
END IF
|
|
C
|
|
DO J=1,9
|
|
IF(J.LE.8) ENEV(I,J)=xi(J,I)
|
|
if(enev(i,j).ge.enhe2) then
|
|
inpot(i,j)=3
|
|
else if(enev(i,j).ge.enhe1) then
|
|
inpot(i,j)=2
|
|
else
|
|
inpot(i,j)=1
|
|
end if
|
|
END DO
|
|
IF(MA.GT.0) THEN
|
|
LGR(I)=.FALSE.
|
|
IF(ABN.GT.0) ABND(I)=ABN
|
|
IF(ABN.LT.0) ABND(I)=ABS(ABN)*D(2,I)
|
|
IF(ION.NE.0) IONIZ(I)=ION
|
|
IF(ABN.GT.1.E6) THEN
|
|
READ(IBUFF,*) (ABNDD(I,ID),ID=1,ND)
|
|
ELSE
|
|
DO ID=1,ND
|
|
ABNDD(I,ID)=ABND(I)
|
|
END DO
|
|
END IF
|
|
IF(MA.EQ.1) THEN
|
|
LRM(I)=.FALSE.
|
|
IATEX(I)=0
|
|
ELSE
|
|
IAT=IAT+1
|
|
IATEX(I)=IAT
|
|
if(ma.eq.4) isemex(i)=1
|
|
if(ma.eq.5) isemex(i)=2
|
|
IF(IAT.EQ.IATREF) THEN
|
|
IREF=I
|
|
DO ID=1,ND
|
|
ABNREF(ID)=ABNDD(I,ID)
|
|
END DO
|
|
END IF
|
|
C
|
|
C store parameters for explicit atoms
|
|
C
|
|
DO ID=1,ND
|
|
ABUND(IAT,ID)=ABNDD(I,ID)
|
|
END DO
|
|
AMASS(IAT)=AMAS(I)*HMASS
|
|
NUMAT(IAT)=I
|
|
IF(MODOLD.EQ.0) THEN
|
|
N0A(IAT)=NA0
|
|
NKA(IAT)=NAK
|
|
END IF
|
|
END IF
|
|
DO ID=1,ND
|
|
YTOT(ID)=YTOT(ID)+ABNDD(I,ID)
|
|
WMY(ID)=WMY(ID)+ABNDD(I,ID)*AMAS(I)
|
|
END DO
|
|
ABN=ABND(I)/D(2,I)
|
|
IF(MA.EQ.1) WRITE(6,601) I,TYPAT(I),ABND(I),ABN
|
|
IF(MA.EQ.2) WRITE(6,602) I,TYPAT(I),ABND(I),ABN,IAT,NA0,NAK
|
|
END IF
|
|
END DO
|
|
IF(MOD(IMODE,10).LE.1) NATOMS=MATOM
|
|
DO ID=1,ND
|
|
WMM(ID)=WMY(ID)*HMASS/YTOT(ID)
|
|
END DO
|
|
DO JJ=1,NATOMS
|
|
DO ID=1,ND
|
|
RELAB(JJ,ID)=1.
|
|
END DO
|
|
END DO
|
|
C
|
|
IF(ICHEMC.NE.1) go to 100
|
|
C
|
|
C abundance change with respect to the model atmosphere input
|
|
C (unit 5);
|
|
C this option is switched on by the parameter ICHEMC (read from
|
|
C unit 55), if it is non-zero, an additional input from
|
|
C unit 56 is required
|
|
C
|
|
C unit 56 input:
|
|
C
|
|
C NCHANG - number of chemical elements for which the abundances
|
|
C are going to be changes;
|
|
C
|
|
C then there are NCHANG records, each contains:
|
|
C
|
|
C I - atomic number
|
|
C ABN - new abundance; coded using the same conventions as in
|
|
C the standard input
|
|
C
|
|
READ(56,*,ERR=566,END=566) NCHANG
|
|
WRITE(6,610)
|
|
DO II=1,NCHANG
|
|
READ(56,*) I,ABN
|
|
ABND(I)=D(2,I)
|
|
IF(ABN.GT.0) ABND(I)=ABN
|
|
IF(ABN.LT.0) ABND(I)=-ABN*D(2,I)
|
|
if(abn.gt.1.) abnd(i)=10.**(abn-12.)
|
|
IF(ABN.GT.1.E6) THEN
|
|
READ(56,*) (ABNDD(I,ID),ID=1,ND)
|
|
ELSE
|
|
DO ID=1,ND
|
|
ABNDD(I,ID)=ABND(I)
|
|
END DO
|
|
END IF
|
|
LGR(I)=.FALSE.
|
|
IATX=IATEX(I)
|
|
IF(IATX.GT.0) THEN
|
|
DO ID=1,ND
|
|
RELAB(IATX,ID)=ABNDD(I,ID)/ABUND(IATX,ID)
|
|
ABUND(IATX,ID)=ABNDD(I,ID)
|
|
END DO
|
|
END IF
|
|
ABNR=ABND(I)/D(2,I)
|
|
WRITE(6,601) I,TYPAT(I),ABND(I),ABNR
|
|
END DO
|
|
C
|
|
C renormalize abundances to have the standard element abundance
|
|
C equal to unity
|
|
C
|
|
100 IF(IREF.LE.1) RETURN
|
|
write(6,620)
|
|
DO I=1,MATOM
|
|
IAT=IATEX(I)
|
|
IF(IAT.GE.0) THEN
|
|
DO ID=1,ND
|
|
ABNDD(I,ID)=ABNDD(I,ID)/ABNREF(ID)
|
|
YTOT(ID)=YTOT(ID)+ABNDD(I,ID)
|
|
WMY(ID)=WMY(ID)+ABNDD(I,ID)*AMAS(I)
|
|
END DO
|
|
ABNR=ABND(I)/D(2,I)
|
|
IF(IAT.EQ.0) THEN
|
|
WRITE(6,601) I,TYPAT(I),ABND(I),ABNR
|
|
ELSE
|
|
DO ID=1,ND
|
|
ABUND(IAT,ID)=ABNDD(I,ID)
|
|
END DO
|
|
WRITE(6,602) I,TYPAT(I),ABND(I),ABNR,IAT,N0A(IAT),NKA(IAT)
|
|
END IF
|
|
END IF
|
|
END DO
|
|
DO ID=1,ND
|
|
WMM(ID)=WMY(ID)*HMASS/YTOT(ID)
|
|
END DO
|
|
RETURN
|
|
566 WRITE(6,656)
|
|
STOP
|
|
c
|
|
600 FORMAT(1H0//' CHEMICAL ELEMENTS INCLUDED'/
|
|
* ' --------------------------'//
|
|
* ' NUMBER ELEMENT ABUNDANCE'/1H ,16X,
|
|
* 'A=N(ELEM)/N(H) A/A(SOLAR)'/)
|
|
601 FORMAT(1H ,I4,3X,A5,1P2E14.2)
|
|
602 FORMAT(1H ,I4,3X,A5,1P2E14.2,3X,
|
|
* 'EXPLICIT: IAT=',I3,' N0A=',I3,' NKA=',I3)
|
|
610 FORMAT(//' CHEMICAL ELEMENTS INCLUDED - CHANGED (unit 56)'
|
|
* /' --------------------------'//
|
|
* ' NUMBER ELEMENT ABUNDANCE'/1H ,16X,
|
|
* 'A=N(ELEM)/N(H) A/A(SOLAR)'/)
|
|
620 FORMAT(1H0//' CHEMICAL ELEMENTS INCLUDED - RENORMALIZATION'/
|
|
* ' --------------------------'//
|
|
* ' NUMBER ELEMENT ABUNDANCE'/1H ,16X,
|
|
* 'A=N(ELEM)/N(H) A/A(SOLAR)'/)
|
|
656 FORMAT(//' CHEMICAL COMPOSITION COULD NOT BE READ FROM ',
|
|
* 'UNIT 56'//' STOP.')
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INIMOD
|
|
C
|
|
C SET UP COMMON/RRRVAL/ - VALUES OF N(ION)/U(ION) FOR ALL THE ATOMS
|
|
C AND IONS CONSIDERED
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/HPOPST/HPOP
|
|
C
|
|
c 1. "low-temperature" ionization fractions
|
|
c (using Hamburg partition functions)
|
|
c
|
|
DO 50 ID=1,ND
|
|
IF(IFMOL.EQ.0.OR.TEMP(ID).GE.TMOLIM) THEN
|
|
CALL STATE(ID,TEMP(ID),ELEC(ID),S1)
|
|
HPOP=DENS(ID)/WMM(ID)/YTOT(ID)
|
|
DO J=1,MION0
|
|
DO I=1,MATOM
|
|
RRR(ID,J,I)=RR(I,J)*HPOP
|
|
END DO
|
|
END DO
|
|
DO IAT=1,NATOM
|
|
ATTOT(IAT,ID)=HPOP*ABUND(IAT,ID)
|
|
END DO
|
|
ELSE
|
|
HPOP=ATTOT(1,ID)
|
|
END IF
|
|
IF(ID.NE.IDSTD) GO TO 50
|
|
TSTD=TEMP(ID)
|
|
VTS=VTURB(ID)
|
|
DSTD=SQRT(1.4E7*TSTD+VTS)
|
|
WRITE(6,601) ID,TEMP(ID),ELEC(ID),hpop
|
|
c DO I=1,MATOM
|
|
DO I=1,30
|
|
WRITE(6,602) TYPAT(I),(RRR(ID,J,I),J=1,MION0-1)
|
|
END DO
|
|
c WRITE(6,603)
|
|
c DO I=1,MATOM
|
|
c WRITE(6,602) TYPAT(I),(PFSTD(J,I),J=1,MION0-1)
|
|
c END DO
|
|
50 CONTINUE
|
|
c
|
|
c 2. "high-temperature" ionization fractions
|
|
c (using the Opacity Project ionization fractions)
|
|
c
|
|
if(teff.lt.0.) then
|
|
CALL FRAC1
|
|
ID=IDSTD
|
|
HPOP=DENS(ID)/WMM(ID)/YTOT(ID)
|
|
WRITE(6,604) ID,TEMP(ID),ELEC(ID)
|
|
DO 60 I=1,MATOM
|
|
WRITE(6,605) TYPAT(I),(RRR(ID,J,I)/hpop,J=1,MION)
|
|
ioniz(i)=i+1
|
|
60 continue
|
|
end if
|
|
C
|
|
601 FORMAT(/' N/U AT THE STANDARD DEPTH (ID =',I3,
|
|
* ' ; T,Ne = ',F8.1,1P2E12.3,' )'/
|
|
* ' --------------------------'//)
|
|
602 FORMAT(1H ,A4,1P8E9.2)
|
|
c 603 FORMAT(//' PARTITION FUNCTIONS AT THE STANDARD DEPTH'/
|
|
c * ' ------------------------------------------'//)
|
|
604 FORMAT(/' N/U AT THE STANDARD DEPTH - OP DATA',
|
|
* ' (ID =',I3,' ; T,Ne = ',F8.1,1PE12.3,' )'//)
|
|
605 FORMAT(1H ,A4,(1P8E9.2))
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE STATE(ID,TE,ANE,Q)
|
|
C
|
|
C modified LTE Saha equations - possibly using
|
|
C radiation temperatures after
|
|
C Schaerer and Schmutz AA 288, 321, 1994
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
common/moltst/pfmol(600,mdepth),anmol(600,mdepth),
|
|
* pfato(100,mdepth),anato(100,mdepth),
|
|
* pfion(100,mdepth),anion(100,mdepth)
|
|
common/ioniz2/anion2(30,mdepth)
|
|
dimension FFI(MION0)
|
|
C
|
|
Q=0.
|
|
DO 50 I=1,NATOMS
|
|
IF(LGR(I)) GO TO 50
|
|
ION=IONIZ(I)
|
|
RQ=0.
|
|
RS=1.
|
|
T=TRAD(INPOT(I,1),ID)
|
|
if(t.le.0.) t=te
|
|
X=SQRT(T/ANE)
|
|
XMX=2.145E4*SQRT(X)
|
|
CALL PARTF(I,1,T,ANE,XMX,UM)
|
|
PFSTD(1,I)=UM
|
|
JMAX=1
|
|
DO J=2,ION
|
|
J1=J-1
|
|
T=TRAD(INPOT(I,J),ID)
|
|
if(t.le.0.) t=te
|
|
TLN=LOG(T)*1.5
|
|
TK=BOLK*T
|
|
THL=11605./T
|
|
X=SQRT(T/ANE)
|
|
XMX=2.145E4*SQRT(X)
|
|
DCH=EH/XMX/XMX/TK
|
|
DCHT=DCH*J1
|
|
FI=36.113+TLN-THL*ENEV(I,J1)+DCHT
|
|
X=J
|
|
XMAX=XMX*SQRT(X)
|
|
CALL PARTF(I,J,T,ANE,XMAX,U)
|
|
PFSTD(J,I)=U
|
|
FI=EXP(FI)*U/UM/ANE
|
|
FFI(J)=FI
|
|
IF(FFI(J).GT.1.) JMAX=J
|
|
UM=U
|
|
END DO
|
|
IF(JMAX.LT.ION) THEN
|
|
R=1.
|
|
RQ=JMAX-1
|
|
DO J=JMAX+1,ION
|
|
R=R*FFI(J)
|
|
RR(I,J)=R/PFSTD(J,I)
|
|
RS=RS+R
|
|
RQ=RQ+(J-1)*R
|
|
END DO
|
|
END IF
|
|
IF(JMAX.GT.1) THEN
|
|
R=1.
|
|
DO JJ=1,JMAX-1
|
|
J=JMAX-JJ
|
|
R=R/FFI(J+1)
|
|
RR(I,J)=R/PFSTD(J,I)
|
|
RS=RS+R
|
|
RQ=RQ+(J-1)*R
|
|
END DO
|
|
END IF
|
|
ABND(I)=ABNDD(I,ID)
|
|
RR(I,JMAX)=ABND(I)/RS
|
|
DO J=1,ION
|
|
IF(J.NE.JMAX) RR(I,J)=RR(I,J)*RR(I,JMAX)
|
|
if(rr(i,j).lt.1.e-35) rr(i,j)=0.
|
|
END DO
|
|
RR(I,JMAX)=RR(I,JMAX)/PFSTD(JMAX,I)
|
|
X=RQ/RS
|
|
c IF(LRM(I)) GO TO 50
|
|
if(i.gt.1) Q=X*ABND(I)+Q
|
|
anato(i,id)=rr(i,1)*pfstd(1,i)
|
|
pfato(i,id)=pfstd(1,i)
|
|
anion(i,id)=rr(i,2)*pfstd(2,i)
|
|
pfion(i,id)=pfstd(2,i)
|
|
50 CONTINUE
|
|
c
|
|
do i=2,30
|
|
anion2(i,id)=rr(i,3)*pfstd(3,i)
|
|
end do
|
|
c
|
|
do imol=1,500
|
|
anmol(imol,id)=0.
|
|
pfmol(imol,id)=0.
|
|
end do
|
|
c
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE TINT
|
|
C
|
|
C LOGARITHMIC INTERPOLATION COEFFICIENTS FOR INTERPOLATION OF
|
|
C TEMP(ID) TO THE VALUES 5000,10000,20000,40000
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION TT(4)
|
|
DATA TT /3.699, 4.000, 4.301, 4.602/
|
|
C
|
|
DO ID=1,ND
|
|
T=LOG10(TEMP(ID))
|
|
J=3
|
|
IF(T.GT.TT(3)) J=4
|
|
JT(ID)=J
|
|
X=(TT(J)-TT(J-1))*(TT(J)-TT(J-2))*(TT(J-1)-TT(J-2))
|
|
TI0(ID)=(T-TT(J-2))*(T-TT(J-1))*(TT(J-1)-TT(J-2))/X
|
|
TI1(ID)=(T-TT(J-2))*(TT(J)-T)*(TT(J)-TT(J-2))/X
|
|
TI2(ID)=(T-TT(J-1))*(T-TT(J))*(TT(J)-TT(J-1))/X
|
|
ENd dO
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE INIBL0
|
|
C
|
|
C AUXILIARY INITIALIZATION PROCEDURE
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
parameter (un=1.)
|
|
character*2 iu
|
|
character*6 ilab
|
|
DIMENSION CROSS(MCROSS,MFRQ),
|
|
* ABSO(MFREQ),EMIS(MFREQ),SCAT(MFREQ),
|
|
* ABSOC(MFREQC),EMISC(MFREQC),SCATC(MFREQC)
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/lasers/lasdel
|
|
common/linrej/ilne(mdepth),ilvi(mdepth)
|
|
common/velaux/velmax,iemoff,nltoff,itrad
|
|
common/alsave/ALAM0s,ALASTs,CUTOF0s,CUTOFSs,RELOPs,SPACEs
|
|
C
|
|
C --------------------------------------------------------------
|
|
C Parameters controlling an evaluation of the synthetic spectrum
|
|
C
|
|
C --------------------------------------------------------------
|
|
C
|
|
C ALAM0, ALAM1 - synthetic spectrum is evaluated between wavelengths
|
|
C ALAM0 (initial) and ALAM1 (final), given in Anstroms
|
|
C CUTOF0 - cutoff parameter for normal lines (given in Angstroms)
|
|
C ie the maximum distance from the line center, in
|
|
C which the opacity in the line is allowd to contribute
|
|
C to the total opacity (recommended 5 - 10)
|
|
C CUTOFS = SPACON
|
|
C SPACON - spacing of the continuum wavelength points
|
|
C (at the midpoint of teh total interval; actual spacing
|
|
C is equidistant in log(lambda)
|
|
C RELOP - the minimum value of the ratio (opacity in the line
|
|
C center)/(opacity in continuum), for which is the line
|
|
C taken into account (usually 1d-4 to 1d-3)
|
|
C SPACE - the maximum distance of two neighbouring frequency
|
|
C points for evaluating the spectrum; in Angstroms
|
|
C
|
|
C INLTE = 0 - pure LTE (no line in NLTE)
|
|
C ne.0 - NLTE option, ie one or more lines treated
|
|
C in the exact or approximate NLTE approach
|
|
C IFHE2 gt.0 - He II line opacity in the first four series
|
|
C (Lyman, Balmer, Paschen, Brackett)
|
|
C for lines with lambda < 3900 A
|
|
C is taken into account even if line list
|
|
C does not contain any He II lines (i.e.
|
|
C He II lines are treated as the hydrogen lines)
|
|
C
|
|
C IHYDPR = 0 - means that hydrogen lines Stark profiles
|
|
C are calculated by approximate formulae
|
|
C > 0 - hydrogen lines Stark profiles are calculated
|
|
C in detail, using the Schoening & Butler tables;
|
|
C (for 1-2 to 1-5; 2-3 to 2-10).
|
|
C the tables are stored in file FOR0xx.dat,
|
|
C where xx=IHYDPR;
|
|
C higher Balmer lines are calculated as before
|
|
C
|
|
C the meaning of other parameters is quite analogous, for the
|
|
C following lines
|
|
C
|
|
C IHE1PR - He I lines at 4471, 4026, 4387, and 4922 Angstroms
|
|
C (tables calculated by Barnard, Cooper, and Shamey)
|
|
C IHE2PR - for the He II lines calculated by Schoening and Butler,
|
|
C
|
|
if(ifeos.le.0) then
|
|
READ(55,*) IFREQ,INLTE,ICONTL,INLIST,IFHE2
|
|
IF(LTE) INLTE=0
|
|
READ(55,*) IHYDPR,IHE1PR,IHE2PR
|
|
READ(55,*) ALAM0,ALAST,CUTOF0,CUTOFS,RELOP,SPACE
|
|
end if
|
|
C
|
|
IF(IDSTD.EQ.0) THEN
|
|
ID1=5
|
|
NDSTEP=(ND-2*ID1)/2
|
|
IDSTD=2*ND/3
|
|
ELSE IF(IDSTD.LT.0) THEN
|
|
ID1=1
|
|
NDSTEP=-IDSTD
|
|
IDSTD=2*ND/3
|
|
END IF
|
|
if(imode.le.-3) ndstep=1
|
|
c
|
|
alam0s=alam0
|
|
alasts=alast
|
|
cutof0s=cutof0
|
|
cutofss=cutofs
|
|
relops=relop
|
|
spaces=space
|
|
C
|
|
C if ALAST.lt.0 - set up vacuum wavelengths everywhere
|
|
C
|
|
vaclim=2000.
|
|
if(alast.lt.0.) then
|
|
alast=abs(alast)
|
|
alasts=alast
|
|
vaclim=1.e18
|
|
end if
|
|
c
|
|
if(inlte.lt.10) then
|
|
lasdel=.true.
|
|
else if(inlte.le.20) then
|
|
inlte=inlte-10
|
|
lasdel=.false.
|
|
else if(inlte.le.30) then
|
|
inlte=inlte-20
|
|
ifreq=11
|
|
lasdel=.true.
|
|
else if(inlte.le.40) then
|
|
inlte=inlte-30
|
|
ifreq=11
|
|
lasdel=.false.
|
|
end if
|
|
C
|
|
ibin(0)=mod(inlist,10)
|
|
do ilist=1,mmlist
|
|
tmlim(ilist)=tmolim
|
|
ibin(ilist)=mod(inlist,10)
|
|
ivdwli(ilist)=0
|
|
iun=19+ilist
|
|
write(iu,622) iun
|
|
622 format(i2)
|
|
amlist(ilist)='fort.' // iu
|
|
end do
|
|
c
|
|
if(imode.ge.-3.and.imode.le.1) then
|
|
nmlist=0
|
|
numlis=0
|
|
read(55,*,err=5,end=5) nmlist,(iunitm(ilist),ilist=1,nmlist)
|
|
do ilist=1,nmlist
|
|
write(iu,622) iunitm(ilist)
|
|
amlist(ilist) ='fort.' // iu
|
|
end do
|
|
5 continue
|
|
c
|
|
ilist=0
|
|
amlist(0)='fort.19'
|
|
read(3,*,err=20,end=20) amlist(0),ibin(0)
|
|
c
|
|
ilist=0
|
|
10 continue
|
|
ilist=ilist+1
|
|
read(3,*,end=20) amlist(ilist),ibin(ilist),tmlim(ilist)
|
|
numlis=numlis+1
|
|
go to 10
|
|
20 continue
|
|
if(numlis.gt.0) nmlist=numlis
|
|
if(nmlist.gt.0.and.ifmol.eq.0) then
|
|
write(*,*) 'NEEDS TO SET IFMOL > 0 with NMLIST>0'
|
|
stop
|
|
end if
|
|
c
|
|
ilist=0
|
|
ilab='ATOMIC'
|
|
write(6,623) ilist,ilab,trim(amlist(ilist)),ibin(ilist)
|
|
ilab='MOLEC '
|
|
do ilist=1,nmlist
|
|
write(6,624) ilist,ilab,trim(amlist(ilist)),ibin(ilist),
|
|
* tmlim(ilist)
|
|
end do
|
|
623 format(/'************************'/
|
|
* ' LINE LISTS:'/
|
|
* /' ILIST',8x,'FILENAME IBIN TMLIM'/
|
|
* i4,2x,a6,2x,a,2x,i4,f11.1)
|
|
624 format( i4,2x,a6,2x,a,2x,i4,f11.1)
|
|
end if
|
|
c
|
|
C
|
|
c VTB - turbulent velocity (in km/s). In non-negative, this
|
|
C value overwrites the value given by the standard input
|
|
C
|
|
read(55,*,err=30,end=30) VTB
|
|
if(ifwin.le.0) then
|
|
if(vtb.ge.0.) then
|
|
WRITE(6,608) VTB
|
|
608 FORMAT(//' TURBULENT VELOCITY - CHANGED TO VTURB =',
|
|
* 1PE10.3,' KM/S'/' ------------------'/)
|
|
do id=1,nd
|
|
vturb(id)=vtb*vtb*1.e10
|
|
end do
|
|
end if
|
|
end if
|
|
C
|
|
TSTD=TEMP(IDSTD)
|
|
VTS=VTURB(IDSTD)
|
|
DSTD=SQRT(1.4E7*TSTD+VTS)
|
|
30 continue
|
|
C
|
|
C angle points (in case the specific intensities are evaluated
|
|
C
|
|
C NMU0 - number of angles:
|
|
C >0 - and if also ANG0>0, angles (mu's) equidistant
|
|
C between 1 and ANG0
|
|
C >0 - and if also ANG0<0, angles (mu's) equidistant
|
|
C between 0.7 and ANG0, and sinuses equidistatnt for
|
|
C others
|
|
C <0 - angles read in the next record
|
|
C ANG0 - minimum mu (see above)
|
|
C IFLUX - mode for evaluating angle-dependent intensities and
|
|
C the corresponding flux:
|
|
C =0 - no specifiec intensities are evaluated; only usual
|
|
C flux is stored (unit 7 and 17)
|
|
C =1 - specific intensities are evaluated;
|
|
C and stored on unit 18
|
|
C =2 - (interesting only for the case of macroscopic
|
|
C velocity field); specific intensities evaluated by
|
|
C a simple formal solution (RESOLV)
|
|
C
|
|
NMU0=1
|
|
ANG0=1.
|
|
ANGL(1)=1.
|
|
WANGL(1)=0.
|
|
IFLUX=0
|
|
velmax=3.e5
|
|
nltoff=0
|
|
iemoff=0
|
|
itrad=0
|
|
do id=1,nd
|
|
wdil(id)=un
|
|
end do
|
|
if(ifwin.le.0) then
|
|
READ(55,*,end=100,err=100) NMU0,ANG0,IFLUX
|
|
C
|
|
C determinantion of the angle points and weights
|
|
C
|
|
IF(NMU0.LT.0) THEN
|
|
NMU0=IABS(NMU0)
|
|
READ(55,*) (ANGL(IMU),IMU=1,NMU0)
|
|
DO IMU=2,NMU0-1
|
|
WANGL(IMU)=0.5*(ANGL(IMU-1)+ANGL(IMU+1))
|
|
END DO
|
|
WANGL(1)=0.5*(ANGL(1)-ANGL(2))
|
|
WANGL(NMU0)=0.5*(ANGL(NMU0-1)-ANGL(NMU0))
|
|
ELSE
|
|
IF(ANG0.GT.0.) THEN
|
|
IF(NMU0.GT.1) THEN
|
|
DMU=(1.-ANG0)/(NMU0-1)
|
|
DO IMU=1,NMU0
|
|
ANGL(IMU)=1.-(IMU-1)*DMU
|
|
WANGL(IMU)=DMU
|
|
END DO
|
|
WANGL(1)=0.5*DMU
|
|
WANGL(NMU0-1)=0.5*DMU
|
|
WANGL(NMU0)=2.*DMU
|
|
END IF
|
|
ELSE
|
|
ANGH=0.70710678
|
|
DMU=ANGH/(NMU0-1)
|
|
DO IMU=1,NMU0
|
|
ANGL(IMU)=(IMU-1)*DMU
|
|
ANGL(IMU)=SQRT(1.-ANGL(IMU)**2)
|
|
IF(IMU.GT.1.AND.IMU.LT.NMU0)
|
|
* WANGL(IMU)=0.5*(ANGL(IMU-1)+ANGL(IMU+1))
|
|
END DO
|
|
WANGL(1)=0.5*(ANGL(1)-ANGL(2))
|
|
WANGL(NMU0)=0.5*(ANGL(NMU0-1)-ANGL(NMU0))
|
|
IF(ANG0.LT.0.) DMU=(ANGH+ANG0)/(NMU0-1)
|
|
DO IMU=1,NMU0-2
|
|
ANGL(IMU+NMU0)=ANGH-IMU*DMU
|
|
WANGL(IMU+NMU0)=DMU
|
|
END DO
|
|
WANGL(NMU0)=WANGL(NMU0)+0.5*DMU
|
|
WANGL(2*NMU0-3)=0.5*DMU
|
|
WANGL(2*NMU0-2)=2.*DMU
|
|
NMU0=2*NMU0-2
|
|
END IF
|
|
END IF
|
|
IF(NMU0.LE.0) GO TO 100
|
|
WRITE(6,609) NMU0,(ANGL(I),I=1,NMU0)
|
|
609 FORMAT(//' SPECIFIC INTENSITIES COMPUTED FOR',I3,
|
|
* ' ANGLES mu=cos(theta) ='/
|
|
* ' ---------------------------------',
|
|
* '------------------------'//
|
|
* (10F7.2))
|
|
100 CONTINUE
|
|
else
|
|
itrad=1
|
|
read(55,*,end=110,err=110) velmax,ITRAD,nltoff,iemoff
|
|
110 write(6,602) velmax,itrad,nltoff,iemoff
|
|
if(velmax.lt.0.) then
|
|
velmax=3.e5
|
|
go to 120
|
|
end if
|
|
602 format(//' velmax (velocity for line rejection)',
|
|
* ' itrad,nltoff,iemoff',f10.1,2i3)
|
|
C
|
|
C Set up rays and weights
|
|
C
|
|
call velset
|
|
call radtem
|
|
CALL SETRAY
|
|
CALL WGTJH1
|
|
C
|
|
end if
|
|
C
|
|
120 CONTINUE
|
|
velmax=velmax*1.e5
|
|
do id=1,nd
|
|
ilvi(id)=0
|
|
ilne(id)=0
|
|
if(vel(id).gt.velmax.and.iemoff.eq.0) ilvi(id)=1
|
|
if(vel(id).gt.velmax.and.nltoff.gt.0.and.iemoff.gt.0)
|
|
* ilne(id)=1
|
|
end do
|
|
C
|
|
IF(IMODE.EQ.-1) THEN
|
|
INLTE=0
|
|
CUTOF0=0.
|
|
END IF
|
|
C
|
|
C continuum frequencies
|
|
C
|
|
if(ifwin.le.0) then
|
|
alam0=alam0s
|
|
if(alam0s.eq.0.) alam0=5.e7/temp(1)/10.
|
|
if(alam0s.lt.0.) alam0=-5.e7/temp(1)/alam0s
|
|
alast=alasts
|
|
if(alasts.eq.0.) alast=5.e7/temp(1)*20.
|
|
if(alasts.lt.0.) alast=-5.e7/temp(1)*alasts
|
|
c if(alast.gt.1.e5) alast=1.e5
|
|
ALAMC=(ALAM0+ALAST)*0.5
|
|
if(space.eq.0.) space=4.3e-8*sqrt(temp(idstd))*alamc
|
|
if(space.lt.0.) space=-5.72e-8*sqrt(temp(idstd))*alamc*space
|
|
SPACF=2.997925E18/ALAMC/ALAMC*SPACE
|
|
WRITE(6,601) ALAM0,ALAST,CUTOF0,RELOP,SPACF,SPACE
|
|
CUTOF0=0.1*CUTOF0
|
|
SPACE0=SPACE*0.1
|
|
ALAM0=1.D-1*ALAM0
|
|
ALAST=1.D-1*ALAST
|
|
ALAMC=ALAMC*0.1
|
|
ALST00=ALAST
|
|
FRLAST=2.997925D17/ALAST
|
|
NFREQ=2
|
|
FREQ(1)=2.997925D17/ALAM0
|
|
FREQ(2)=FRLAST
|
|
C
|
|
else
|
|
C
|
|
spacon=cutofs
|
|
IF(SPACON.EQ.0) SPACON=3.
|
|
XFR=(ALAST-ALAM0)/SPACON
|
|
NFREQC=int(XFR)+1
|
|
NFREQC=MIN(NFREQC,MFREQC)
|
|
NFREQC=MAX(NFREQC,2)
|
|
DLAMLO=LOG10(ALAST/ALAM0)/(NFREQC-1)
|
|
AL0L=LOG10(ALAM0)
|
|
alambe=alam0
|
|
DO IJ=1,NFREQC
|
|
AL=AL0L+(IJ-1)*DLAMLO
|
|
ALAM=EXP(2.3025851*AL)
|
|
WLAMC(IJ)=ALAM
|
|
FREQC(IJ)=2.997925E18/ALAM
|
|
END DO
|
|
ALAMC=(ALAM0+ALAST)*0.5
|
|
SPACF=2.997925E18/ALAMC/ALAMC*SPACE
|
|
WRITE(6,601) ALAM0,ALAST,CUTOF0,RELOP,SPACF,SPACE
|
|
CUTOF0=0.1*CUTOF0
|
|
SPACE0=SPACE*0.1
|
|
ALAM0=1.D-1*ALAM0
|
|
ALAST=1.D-1*ALAST
|
|
ALAMC=ALAMC*0.1
|
|
ALST00=ALAST
|
|
FRLAST=2.997925D17/ALAST
|
|
NFREQ=2
|
|
FREQ(1)=2.997925D17/ALAM0
|
|
FREQ(2)=FRLAST
|
|
c
|
|
end if
|
|
c
|
|
CALL SIGAVS
|
|
IF(IHYDPR.NE.0) THEN
|
|
CALL HYDINI
|
|
CALL XENINI
|
|
END IF
|
|
IF(IHE1PR.GT.0) CALL HE1INI
|
|
IF(IHE2PR.GT.0) CALL HE2INI
|
|
C
|
|
C auxiliary quantities for dissolved fractions
|
|
C
|
|
DO ID=1,ND
|
|
CALL DWNFR0(ID)
|
|
CALL WNSTOR(ID)
|
|
END DO
|
|
C
|
|
c pretabulate expansion coefficients for the Voigt function
|
|
c
|
|
CALL PRETAB
|
|
c
|
|
c calculate the characteristic standard opacity
|
|
c
|
|
IF(IMODE.LE.2) THEN
|
|
if(ifwin.le.0.and.ndstep.eq.0) then
|
|
c
|
|
c old procedure
|
|
c
|
|
CALL CROSET(CROSS)
|
|
DO ID=1,ND
|
|
CALL OPAC(ID,CROSS,ABSO,EMIS,SCAT)
|
|
ABSTD(ID)=MIN(ABSO(1),ABSO(2))
|
|
END DO
|
|
else
|
|
c
|
|
c new procedure
|
|
c
|
|
if(ifwin.le.0) then
|
|
nfreqc=ifix(real(cutofs,4))
|
|
if(nfreqc.eq.0) nfreqc=mfreq
|
|
all0=log(alam0)
|
|
all1=log(alast)
|
|
dlc=(all1-all0)/(nfreqc-1)
|
|
do ijc=1,nfreqc
|
|
wlamc(ijc)=exp(all0+(ijc-1)*dlc)
|
|
freqc(ijc)=2.997925e17/wlamc(ijc)
|
|
end do
|
|
CALL CROSEW(CROSS)
|
|
do id=1,nd
|
|
CALL OPACON(ID,CROSS,ABSOC,EMISC,SCATC)
|
|
do ijc=1,nfreqc
|
|
abstdw(ijc,id)=absoc(ijc)
|
|
end do
|
|
end do
|
|
|
|
c write(*,*) 'abstdw(1,ij)',(abstdw(ij,1),ij=1,nfreqc)
|
|
c write(*,*) 'abstdw(50,ij)',(abstdw(ij,50),ij=1,nfreqc)
|
|
c
|
|
else
|
|
CALL CROSEW(CROSS)
|
|
DO ID=1,ND
|
|
CALL OPACW(ID,CROSS,ABSO,EMIS,ABSOC,EMISC,SCATC,0)
|
|
DO IJ=1,NFREQC
|
|
ABSTDW(IJ,ID)=ABSOC(IJ)/DENSCON(ID)
|
|
END DO
|
|
END DO
|
|
end if
|
|
end if
|
|
END IF
|
|
C
|
|
601 FORMAT(//'----------------------------------------------'/
|
|
* ' BASIC INPUT PARAMETERS FOR SYNTHETIC SPECTRA'/
|
|
* ' ---------------------------------------------'/
|
|
* ' INITIAL LAMBDA',28X,1H=,F10.3,' ANGSTROMS'/
|
|
* ' FINAL LAMBDA',28X,1H=,F10.3,' ANGSTROMS'/
|
|
* ' CUTOFF PARAMETER',26X,1H=,F10.3,' ANGSTROMS'/
|
|
* ' MINIMUM VALUE OF (LINE OPAC.)/(CONT.OPAC) =',1PE10.1/
|
|
* ' MAXIMUM FREQUENCY SPACING',17X,1H=,1PE10.3,' I.E.',
|
|
* 0PF6.3,' ANGSTROMS'/
|
|
* ' ---------------------------------------------'/)
|
|
c
|
|
write(6,612) idstd,ndstep
|
|
612 format(/'IDSTD, NDSTEP = ',2i5/)
|
|
RETURN
|
|
END
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
|
|
SUBROUTINE INIBL1(IGRD)
|
|
C =======================
|
|
C
|
|
C AUXILIARY INITIALIZATION PROCEDURE
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/alsave/ALAM0s,ALASTs,CUTOF0s,CUTOFSs,RELOPs,SPACEs
|
|
common/plaopa/plalin,plcint,chcint
|
|
common/conabs/absoc(mfreqc),emisc(mfreqc),scatc(mfreqc),
|
|
* plac(mfreqc)
|
|
parameter (un=1.,bnc=1.4743e-2,hkc=4.79928e4,
|
|
* clc=2.997925e17)
|
|
DIMENSION CROSS(MCROSS,MFRQ),
|
|
* ABSO(MFREQ),EMIS(MFREQ),SCAT(MFREQ)
|
|
C
|
|
C auxiliary quantities for dissolved fractions
|
|
C
|
|
DO ID=1,ND
|
|
CALL DWNFR0(ID)
|
|
CALL WNSTOR(ID)
|
|
anh2(id)=0.
|
|
anhm(id)=0.
|
|
anch(id)=0.
|
|
anoh(id)=0.
|
|
END DO
|
|
CALL TINT
|
|
c
|
|
c reset wavelengths in case of opacity grid calculations
|
|
c
|
|
if(igrd.ge.0) then
|
|
alam0=alam0s
|
|
if(alam0s.eq.0.) alam0=5.e7/temp(1)/10.
|
|
if(alam0s.lt.0.) alam0=-5.e7/temp(1)/alam0s
|
|
alast=alasts
|
|
if(alasts.eq.0.) alast=5.e7/temp(1)*20.
|
|
if(alasts.lt.0.) alast=-5.e7/temp(1)*alasts
|
|
c if(alast.gt.1.e5) alast=1.e5
|
|
cutof0=cutof0s
|
|
cutofs=cutofss
|
|
relop=relops
|
|
if(relops.eq.0) then
|
|
relop=1.e-15
|
|
if(temp(1).lt.2.e6) relop=1.e-6
|
|
if(temp(1).lt.1.e6) relop=1.e-5
|
|
if(temp(1).lt.1.e5) relop=1.e-4
|
|
end if
|
|
space=spaces
|
|
ALAMC=(ALAM0+ALAST)*0.5
|
|
if(space.eq.0.) space=4.3e-8*sqrt(temp(idstd))*alamc
|
|
if(space.lt.0.) space=-5.72e-8*sqrt(temp(idstd))*alamc*space
|
|
SPACF=2.997925E18/ALAMC/ALAMC*SPACE
|
|
CUTOF0=0.1*CUTOF0
|
|
SPACE0=SPACE*0.1
|
|
ALAM0=1.D-1*ALAM0
|
|
ALAST=1.D-1*ALAST
|
|
ALAMC=ALAMC*0.1
|
|
ALST00=ALAST
|
|
FRLAST=CLC/ALAST
|
|
c
|
|
nfreqc=ifix(real(cutofs,4))
|
|
if(nfreqc.eq.0) nfreqc=mfreq
|
|
all0=log(alam0)
|
|
all1=log(alast)
|
|
dlc=(all1-all0)/(nfreqc-1)
|
|
xcc0=hkc/temp(1)
|
|
do ijc=1,nfreqc
|
|
wlamc(ijc)=exp(all0+(ijc-1)*dlc)
|
|
freqc(ijc)=clc/wlamc(ijc)
|
|
c frc=freqc(ijc)*1.e-15
|
|
c plac(ijc)=bnc*frc**3/(exp(xcc0*frc)-un)
|
|
end do
|
|
id=1
|
|
CALL CROSEW(CROSS)
|
|
CALL OPACON(ID,CROSS,ABSOC,EMISC,SCATC)
|
|
wc0=(freqc(1)-freqc(2))*0.5
|
|
wc1=(freqc(nfreqc-1)-freqc(nfreqc))*0.5
|
|
do ijc=2,nfreqc-1
|
|
absoc(ijc)=min(absoc(ijc),1.e30)
|
|
write(26,642) wlamc(ijc)*10.,log(absoc(ijc)/dens(1))
|
|
end do
|
|
642 format(f11.3,1p5e13.5)
|
|
c
|
|
do ijc=1,nfreqc
|
|
abstdw(ijc,id)=absoc(ijc)
|
|
end do
|
|
c
|
|
end if
|
|
c
|
|
c calculate the characteristic standard opacity
|
|
c
|
|
IF(IMODE.LE.2.and.imode.ge.-2) THEN
|
|
if(ifwin.le.0) then
|
|
CALL CROSET(CROSS)
|
|
DO ID=1,ND
|
|
CALL OPAC(ID,CROSS,ABSO,EMIS,SCAT)
|
|
ABSTD(ID)=MIN(ABSO(1)+SCAT(1),ABSO(2)+SCAT(2))
|
|
END DO
|
|
else
|
|
CALL CROSEW(CROSS)
|
|
DO ID=1,ND
|
|
CALL OPACW(ID,CROSS,ABSO,EMIS,ABSOC,EMISC,SCATC,0)
|
|
DO IJ=1,NFREQC
|
|
denscon(id)=1.
|
|
ABSTDW(IJ,ID)=ABSOC(IJ)/DENSCON(ID)
|
|
END DO
|
|
END DO
|
|
end if
|
|
END IF
|
|
C
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
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
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
SUBROUTINE RTE
|
|
C
|
|
C solution of the radiative transfer equation by Feautrier method
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
DIMENSION D(3,3,MDEPTH),ANU(3,MDEPTH),AANU(MDEPTH),DDD(MDEPTH),
|
|
* AA(3,3),BB(3,3),CC(3,3),VL(3),AMU(3),WTMU(3),
|
|
* DT(MDEPTH),TAU(MDEPTH),
|
|
* RDD(MDEPTH),FKK(MDEPTH),ST0(MDEPTH),SS0(MDEPTH),
|
|
* RINT(MDEPTH,MMU)
|
|
CHARACTER*4 TYPION(9)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/CTRFUN/CINT1(MDEPTH),CINT2(MDEPTH),
|
|
* CTRI(MDEPTH),CTRR(MDEPTH),XKAR(MDEPTH),
|
|
* ABXLI(MFREQ),EMXLI(MFREQ),IJCTR(MFREQ)
|
|
COMMON/REFDEP/IREFD(MFREQ)
|
|
COMMON/CENTRL/ZND,IFZ0
|
|
PARAMETER (UN=1.D0, HALF=0.5D0)
|
|
PARAMETER (THIRD=UN/3., QUART=UN/4., SIXTH=UN/6.D0)
|
|
PARAMETER (TAUREF = 0.6666666666667)
|
|
DATA AMU/.887298334620742D0,.5D0,.112701665379258D0/,
|
|
1 WTMU/.277777777777778D0,.444444444444444D0,.277777777777778D0
|
|
1 /
|
|
DATA TYPION /' I ',' II ',' III',' IV ',' V ',
|
|
* ' VI ',' VII','VIII',' IX '/
|
|
C
|
|
NMU=3
|
|
ND1=ND-1
|
|
C
|
|
C Overall loop over frequencies
|
|
C
|
|
DO IJ=1,NFREQ
|
|
TAUMIN=CH(IJ,1)/DENS(1)*DM(1)*HALF
|
|
TAU(1)=TAUMIN
|
|
IREF=1
|
|
DO I=1,ND1
|
|
DT(I)=(DM(I+1)-DM(I))*(CH(IJ,I+1)/DENS(I+1)+CH(IJ,I)/DENS(I))*
|
|
* HALF
|
|
ST0(I)=ET(IJ,I)/CH(IJ,I)
|
|
SS0(I)=-SC(IJ,I)/CH(IJ,I)
|
|
TAU(I+1)=TAU(I)+DT(I)
|
|
IF(TAU(I).LE.TAUREF.AND.TAU(I+1).GT.TAUREF) IREF=I
|
|
END DO
|
|
IREFD(IJ)=IREF
|
|
ST0(ND)=ET(IJ,ND)/CH(IJ,ND)
|
|
SS0(ND)=-SC(IJ,ND)/CH(IJ,ND)
|
|
FR=FREQ(IJ)
|
|
BNU=BN*(FR*1.E-15)**3
|
|
PLAND=BNU/(EXP(HK*FR/TEMP(ND ))-UN)
|
|
DPLAN=BNU/(EXP(HK*FR/TEMP(ND-1))-UN)
|
|
DPLAN=(PLAND-DPLAN)/DT(ND1)
|
|
C
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C FIRST PART - VARIABLE EDDINGTON FACTORS
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C
|
|
ALB1=0.
|
|
DO I=1,NMU
|
|
C
|
|
C ************************
|
|
C UPPER BOUNDARY CONDITION
|
|
C ************************
|
|
C
|
|
ID=1
|
|
DTP1=DT(1)
|
|
Q0=0.
|
|
P0=0.
|
|
C
|
|
C allowance for non-zero optical depth at the first depth point
|
|
C
|
|
TAMM=TAUMIN/AMU(I)
|
|
IF(TAMM.GT.0.01) THEN
|
|
P0=UN-EXP(-TAMM)
|
|
ELSE
|
|
P0=TAMM*(UN-HALF*TAMM*(UN-TAMM*THIRD*(UN-QUART*TAMM)))
|
|
END IF
|
|
EX=UN-P0
|
|
Q0=Q0+P0*AMU(I)*WTMU(I)
|
|
C
|
|
DIV=DTP1/AMU(I)*THIRD
|
|
VL(I)=DIV*(ST0(ID)+HALF*ST0(ID+1))+ST0(ID)*P0
|
|
DO J=1,NMU
|
|
BB(I,J)=SS0(ID)*WTMU(J)*(DIV+P0)-ALB1*WTMU(J)
|
|
CC(I,J)=-HALF*DIV*SS0(ID+1)*WTMU(J)
|
|
END DO
|
|
BB(I,I)=BB(I,I)+AMU(I)/DTP1+UN+DIV
|
|
CC(I,I)=CC(I,I)+AMU(I)/DTP1-HALF*DIV
|
|
ANU(I,ID)=0.
|
|
END DO
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
S=0.
|
|
DO K=1,NMU
|
|
S=S+BB(I,K)*CC(K,J)
|
|
END DO
|
|
D(I,J,ID)=S
|
|
ANU(I,1)=ANU(I,1)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
C
|
|
C *******************
|
|
C NORMAL DEPTH POINTS
|
|
C *******************
|
|
C
|
|
DO ID=2,ND1
|
|
DTM1=DTP1
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTM1+DTP1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
BE=AL+GA
|
|
A=(UN-HALF*AL*DTP1*DTP1)*SIXTH
|
|
C=(UN-HALF*GA*DTM1*DTM1)*SIXTH
|
|
B=UN-A-C
|
|
VL0=A*ST0(ID-1)+B*ST0(ID)+C*ST0(ID+1)
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
AA(I,J)=-A*SS0(ID-1)*WTMU(J)
|
|
CC(I,J)=-C*SS0(ID+1)*WTMU(J)
|
|
BB(I,J)=B*SS0(ID)*WTMU(J)
|
|
END DO
|
|
END DO
|
|
DO I=1,NMU
|
|
DIV=AMU(I)**2
|
|
VL(I)=VL0
|
|
AA(I,I)=AA(I,I)+DIV*AL-A
|
|
CC(I,I)=CC(I,I)+DIV*GA-C
|
|
BB(I,I)=BB(I,I)+DIV*BE+B
|
|
END DO
|
|
DO I=1,NMU
|
|
S1=0.
|
|
DO J=1,NMU
|
|
S=0.
|
|
S1=S1+AA(I,J)*ANU(J,ID-1)
|
|
DO K=1,NMU
|
|
S=S+AA(I,K)*D(K,J,ID-1)
|
|
END DO
|
|
BB(I,J)=BB(I,J)-S
|
|
END DO
|
|
VL(I)=VL(I)+S1
|
|
END DO
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
ANU(I,ID)=0.
|
|
DO J=1,NMU
|
|
S=0.
|
|
DO K=1,NMU
|
|
S=S+BB(I,K)*CC(K,J)
|
|
END DO
|
|
D(I,J,ID)=S
|
|
ANU(I,ID)=ANU(I,ID)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
END DO
|
|
C
|
|
C ************
|
|
C LOWER BOUNDARY CONDITION
|
|
C ************
|
|
C
|
|
ID=ND
|
|
C
|
|
C First option:
|
|
C b.c. is different from stellar atmospheres; expresses symmetry
|
|
C at the central plane I(taumax,-mu,nu)=I(taumax,+mu,nu)
|
|
C
|
|
IF(IFZ0.EQ.0) THEN
|
|
B=DTP1*HALF
|
|
A=0.
|
|
DO I=1,NMU
|
|
BI=B/AMU(I)
|
|
AI=A/AMU(I)
|
|
VL(I)=ST0(ID)*BI+ST0(ID-1)*AI
|
|
DO J=1,NMU
|
|
AA(I,J)=-AI*SS0(ID-1)*WTMU(J)
|
|
BB(I,J)=BI*SS0(ID)*WTMU(J)
|
|
END DO
|
|
AA(I,I)=AA(I,I)+AMU(I)/DTP1-AI
|
|
BB(I,I)=BB(I,I)+AMU(I)/DTP1+BI
|
|
END DO
|
|
DO I=1,NMU
|
|
S1=0.
|
|
DO J=1,NMU
|
|
S=0.
|
|
S1=S1+AA(I,J)*ANU(J,ID-1)
|
|
DO K=1,NMU
|
|
S=S+AA(I,K)*D(K,J,ID-1)
|
|
END DO
|
|
BB(I,J)=BB(I,J)-S
|
|
END DO
|
|
VL(I)=VL(I)+S1
|
|
END DO
|
|
C
|
|
C Second option:
|
|
C b.c. is the same as in stellar atmospheres - the last depth point
|
|
C is not at the central plane
|
|
C
|
|
ELSE
|
|
DO I=1,NMU
|
|
AA(I,I)=AMU(I)/DTP1
|
|
VL(I)=PLAND+AMU(I)*DPLAN+AA(I,I)*ANU(I,ID-1)
|
|
DO J=1,NMU
|
|
BB(I,J)=-AA(I,I)*D(I,J,ID-1)
|
|
END DO
|
|
BB(I,I)=BB(I,I)+AA(I,I)+UN
|
|
END DO
|
|
END IF
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
ANU(I,ID)=0.
|
|
DO J=1,NMU
|
|
D(I,J,ID)=0.
|
|
ANU(I,ID)=ANU(I,ID)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
C
|
|
C ************
|
|
C BACKSOLUTION
|
|
C ************
|
|
C
|
|
ID=ND
|
|
FKK(ND)=THIRD
|
|
AJ=0.
|
|
AK=0.
|
|
DO I=1,NMU
|
|
RMU=WTMU(I)*ANU(I,ID)
|
|
AJ=AJ+RMU
|
|
AK=AK+RMU*AMU(I)*AMU(I)
|
|
END DO
|
|
RDD(ID)=AJ
|
|
FKK(ND)=AK/AJ
|
|
DO ID=ND-1,1,-1
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
ANU(I,ID)=ANU(I,ID)+D(I,J,ID)*ANU(J,ID+1)
|
|
END DO
|
|
END DO
|
|
AJ=0.
|
|
AK=0.
|
|
DO I=1,NMU
|
|
DIV=WTMU(I)*ANU(I,ID)
|
|
AJ=AJ+DIV
|
|
AK=AK+DIV*AMU(I)**2
|
|
END DO
|
|
FKK(ID)=AK/AJ
|
|
END DO
|
|
C
|
|
C surface Eddington actor
|
|
C
|
|
AH=0.
|
|
DO I=1,NMU
|
|
AH=AH+WTMU(I)*AMU(I)*ANU(I,1)
|
|
END DO
|
|
FH=AH/AJ-HALF*ALB1
|
|
C
|
|
c FKK(ND)=THIRD
|
|
C
|
|
C
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C SECOND PART - DETERMINATION OF THE MEAN INTENSITIES
|
|
C RECALCULATION OF THE TRANSFER EQUATION WITH GIVEN EDDINGTON FACTORS
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C
|
|
DTP1=DT(1)
|
|
DIV=DTP1*THIRD
|
|
BBB=FKK(1)/DTP1+FH+DIV+SS0(1)*(DIV+Q0)
|
|
CCC=FKK(2)/DTP1-HALF*DIV*(UN+SS0(2))
|
|
VLL=DIV*(ST0(1)+HALF*ST0(2))+ST0(1)*Q0
|
|
AANU(1)=VLL/BBB
|
|
DDD(1)=CCC/BBB
|
|
DO ID=2,ND1
|
|
DTM1=DTP1
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTP1+DTM1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
A=(UN-HALF*DTP1*DTP1*AL)*SIXTH
|
|
C=(UN-HALF*DTM1*DTM1*GA)*SIXTH
|
|
AAA=AL*FKK(ID-1)-A*(UN+SS0(ID-1))
|
|
CCC=GA*FKK(ID+1)-C*(UN+SS0(ID+1))
|
|
BBB=(AL+GA)*FKK(ID)+(UN-A-C)*(UN+SS0(ID))
|
|
VLL=A*ST0(ID-1)+C*ST0(ID+1)+(UN-A-C)*ST0(ID)
|
|
BBB=BBB-AAA*DDD(ID-1)
|
|
DDD(ID)=CCC/BBB
|
|
AANU(ID)=(VLL+AAA*AANU(ID-1))/BBB
|
|
END DO
|
|
C
|
|
C Lower boundary condition
|
|
C 1.option - different from stellar atmospheres
|
|
C
|
|
IF(IFZ0.EQ.0) THEN
|
|
B=DTP1*HALF
|
|
BBB=FKK(ND)/DTP1+B*(UN+SS0(ND))
|
|
AAA=FKK(ND-1)/DTP1
|
|
VLL=B*ST0(ND)
|
|
ELSE
|
|
C
|
|
C Lower boundary condition
|
|
C 2.option - stellar atmospheric
|
|
C
|
|
BBB=FKK(ND)/DTP1+HALF
|
|
AAA=FKK(ND1)/DTP1
|
|
VLL=HALF*PLAND+DPLAN*THIRD
|
|
END IF
|
|
BBB=BBB-AAA*DDD(ND1)
|
|
RDD(ND)=(VLL+AAA*AANU(ND1))/BBB
|
|
DO IID=1,ND1
|
|
ID=ND-IID
|
|
RDD(ID)=AANU(ID)+DDD(ID)*RDD(ID+1)
|
|
END DO
|
|
FLUX(IJ)=FH*RDD(1)
|
|
C
|
|
C if needed (if iprin.ge.3), output of interesting physical
|
|
C quantities at the monochromatic optical depth tau(nu)=2/3
|
|
C
|
|
IF(IPRIN.ge.3) THEN
|
|
T0=LOG(TAU(IREF+1)/TAU(IREF))
|
|
X0=LOG(TAU(IREF+1)/TAUREF)/T0
|
|
X1=LOG(TAUREF/TAU(IREF))/T0
|
|
DMREF=EXP(LOG(DM(IREF))*X0+LOG(DM(IREF+1))*X1)
|
|
TREF=EXP(LOG(TEMP(IREF))*X0+LOG(TEMP(IREF+1))*X1)
|
|
STREF=EXP(LOG(ST0(IREF))*X0+LOG(ST0(IREF+1))*X1)
|
|
SCREF=EXP(LOG(-SS0(IREF))*X0+LOG(-SS0(IREF+1))*X1)
|
|
SSREF=EXP(LOG(-SS0(IREF)*RDD(IREF))*X0+
|
|
* LOG(-SS0(IREF+1)*RDD(IREF+1))*X1)
|
|
SREF=STREF+SSREF
|
|
ALM=2.997925E18/FREQ(IJ)
|
|
WRITE(96,636) IJ,ALM,IREF,DMREF,TREF,SCREF,STREF,SSREF,SREF
|
|
636 FORMAT(1H ,I3,F10.3,I4,1PE10.3,0PF10.1,1X,1P3E10.3,E11.3)
|
|
END IF
|
|
C
|
|
C THIRD PART - DETERMINATION OF THE SPECIFIC INTENSITIES
|
|
C RECALCULATION OF THE TRANSFER EQUATION WITH GIVEN SOURCE FUNCTION
|
|
C
|
|
if(iflux.eq.0) return
|
|
DO IMU=1,NMU0
|
|
ANX=ANGL(IMU)
|
|
DTP1=DT(1)
|
|
DIV=DTP1*THIRD/ANX
|
|
C
|
|
TAMM=TAUMIN/ANX
|
|
IF(TAMM.LT.0.01) THEN
|
|
P0=TAMM*(UN-HALF*TAMM*(UN-TAMM*THIRD*(UN-QUART*TAMM)))
|
|
ELSE
|
|
P0=UN-EXP(-TAMM)
|
|
END IF
|
|
C
|
|
BBB=ANX/DTP1+UN+DIV
|
|
CCC=ANX/DTP1-HALF*DIV
|
|
VLL=(DIV+P0)*(ST0(1)-SS0(1)*RDD(1))
|
|
* +HALF*DIV*(ST0(2)-SS0(2)*RDD(2))
|
|
AANU(1)=VLL/BBB
|
|
DDD(1)=CCC/BBB
|
|
DIV=ANX*ANX
|
|
DO ID=2,ND1
|
|
DTM1=DT(ID-1)
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTP1+DTM1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
A=(UN-HALF*DTP1*DTP1*AL)*SIXTH
|
|
C=(UN-HALF*DTM1*DTM1*GA)*SIXTH
|
|
AAA=DIV*AL-A
|
|
CCC=DIV*GA-C
|
|
BBB=DIV*(AL+GA)+UN-A-C
|
|
VLL=A*(ST0(ID-1)-SS0(ID-1)*RDD(ID-1))+
|
|
* C*(ST0(ID+1)-SS0(ID+1)*RDD(ID+1))+
|
|
* (UN-A-C)*(ST0(ID)-SS0(ID)*RDD(ID))
|
|
BBB=BBB-AAA*DDD(ID-1)
|
|
DDD(ID)=CCC/BBB
|
|
AANU(ID)=(VLL+AAA*AANU(ID-1))/BBB
|
|
END DO
|
|
C
|
|
C Lower boundary condition
|
|
C 1.option - different from stellar atmospheres
|
|
C
|
|
IF(IFZ0.EQ.0) THEN
|
|
B=DTP1*HALF/ANX
|
|
BBB=ANX/DTP1+B*(UN+SS0(ND))
|
|
AAA=ANX/DTP1
|
|
VLL=B*ST0(ND)
|
|
ELSE
|
|
C
|
|
C Lower boundary condition
|
|
C 2.option - stellar atmospheric
|
|
C
|
|
AAA=ANX/DTP1
|
|
BBB=AAA+UN
|
|
VLL=PLAND+ANX*DPLAN
|
|
END IF
|
|
C
|
|
RINT(ND,IMU)=(VLL+AAA*AANU(ND1))/(BBB-AAA*DDD(ND1))
|
|
DO IID=1,ND1
|
|
ID=ND-IID
|
|
RINT(ID,IMU)=AANU(ID)+DDD(ID)*RINT(ID+1,IMU)
|
|
END DO
|
|
END DO
|
|
c
|
|
FLX=0.
|
|
DO IMU=1,NMU0
|
|
RINT(1,IMU)=RINT(1,IMU)/HALF
|
|
FLX=FLX+ANGL(IMU)*WANGL(IMU)*RINT(1,IMU)
|
|
END DO
|
|
FLX=FLX*HALF
|
|
c FLUX(IJ)=FLX
|
|
C
|
|
C output of emergent specific intensities to Unit 10
|
|
C and 18 (continuum)
|
|
C
|
|
IF(IJ.GT.2) THEN
|
|
WRITE(10,641) WLAM(IJ),FLX,(RINT(1,IMU),IMU=1,NMU0)
|
|
ELSE
|
|
WRITE(18,641) WLAM(IJ),FLX,(RINT(1,IMU),IMU=1,NMU0)
|
|
END IF
|
|
c
|
|
if(iprin.eq.4) then
|
|
c
|
|
c compute contribution function C_i (ctri) and C_r (ctrr)
|
|
c following Magain (1986, A&A 163, 135)
|
|
c
|
|
if(ijctr(ij).gt.0) then
|
|
xfr0=(freq(ij)-freq(2))/(freq(1)-freq(2))
|
|
tauc=ch(1,1)/dens(1)*dm(1)*half
|
|
do id=1,nd
|
|
chc1=ch(1,id)
|
|
chc2=ch(2,id)
|
|
chcc=chc2+xfr0*(chc1-chc2)
|
|
etc1=et(1,id)
|
|
etc2=et(2,id)
|
|
etcc=etc2+xfr0*(etc1-etc2)
|
|
stcc=etcc/chcc
|
|
cint=cint2(id)+xfr0*(cint1(id)-cint2(id))
|
|
avx=(chc1+chc2)*0.5*relop
|
|
call linop(id,abxli,emxli,avx)
|
|
sli0=emxli(ij)/abxli(ij)
|
|
abt0=ch(ij,id)
|
|
emt0=et(ij,id)
|
|
stt0=emt0/abt0
|
|
Xkar(id)=abxli(ij)+chcc*stcc/cint
|
|
ctri(id)=tauc*abt0/chc1*stt0*exp(-tau(id))
|
|
if(tau(id).gt.70.) ctri(id)=0.
|
|
ctrr(id)=tauc/chc1*abxli(ij)*(un-sli0/cint)
|
|
if(id.lt.nd) then
|
|
dtc=(ch(1,id+1)/dens(id+1)+ch(1,id)/dens(id))
|
|
tauc=tauc+half*dtc*(dm(id+1)-dm(id))
|
|
endif
|
|
end do
|
|
taurs=Xkar(1)/dens(1)*dm(1)*half
|
|
xcti=ctri(1)*half*(dm(2)-dm(1))
|
|
xctr=ctrr(1)*half*(dm(2)-dm(1))
|
|
do i=1,nd-1
|
|
ctrr(i)=ctrr(i)*exp(-taurs)
|
|
if(i.eq.1) xctr=xctr*exp(-taurs)
|
|
if(i.gt.1) then
|
|
xcti=xcti+ctri(i)*half*(dm(i+1)-dm(i-1))
|
|
xctr=xctr+ctrr(i)*half*(dm(i+1)-dm(i-1))
|
|
endif
|
|
if(taurs.gt.70.) ctrr(i)=0.
|
|
dtrs=(dm(i+1)-dm(i))*(Xkar(i+1)/dens(i+1)+Xkar(i)/dens(i))
|
|
taurs=taurs+half*dtrs
|
|
end do
|
|
ctrr(nd)=0.
|
|
alam=2.997925d18/freq(ij)
|
|
il0=ijctr(ij)
|
|
il=indlin(il0)
|
|
iat=indat(il)/100
|
|
ion=mod(indat(il),100)
|
|
write(97,376) il,alam,typat(iat),typion(ion),iref,dmref,tref
|
|
376 format(i5,f11.4,2x,2a4,i8,1pe12.4,0pf10.1)
|
|
do id=1,nd
|
|
ctrip=ctri(id)/xcti
|
|
ctrrp=ctrr(id)/xctr
|
|
write(97,377) id,dm(id),tau(id),ctrip,ctrrp
|
|
377 format(i4,1p4e12.4)
|
|
end do
|
|
else if(ij.eq.1) then
|
|
do id=1,nd
|
|
cint1(id)=rint(id,nmu0)
|
|
end do
|
|
else if(ij.eq.2) then
|
|
do id=1,nd
|
|
cint2(id)=rint(id,nmu0)
|
|
end do
|
|
endif
|
|
endif
|
|
641 FORMAT(1H ,f10.3,1pe15.5/(1P5E15.5))
|
|
c
|
|
c end of the global loop over frequencies
|
|
c
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE OUTPRI
|
|
C
|
|
C Output of synthetic spectrum
|
|
C
|
|
C Output onto unit 7 serves as an input to the next program
|
|
C ROTINS, which performs convolutions for the rotational and
|
|
C instrumental broadening, and plots the synthetic spectrum
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (UN=1.,CAS=1./2.997925D18,EQWC=1.19917D22)
|
|
PARAMETER (PI2=3.141592654/2.)
|
|
DIMENSION FLX(3),REL(3),ALX(3)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
C
|
|
if(ifwin.le.0) then
|
|
C
|
|
C output of synthetic spectrum on unit 7
|
|
C
|
|
DO IJ=3,NFREQ-1
|
|
FLAM=FLUX(IJ)*FREQ(IJ)*FREQ(IJ)*CAS
|
|
WRITE(7,701) WLAM(IJ),FLAM
|
|
END DO
|
|
C
|
|
C output of the continuum flux on unit 17
|
|
C
|
|
FLAM=FLUX(1)*FREQ(1)*FREQ(1)*CAS
|
|
WRITE(17,701) WLAM(1),FLAM
|
|
IF(IBLANK.EQ.NBLANK) THEN
|
|
FLAM=FLUX(NFREQ)*FREQ(NFREQ)*FREQ(NFREQ)*CAS
|
|
WRITE(7,701) WLAM(NFREQ),FLAM
|
|
FLAM=FLUX(2)*FREQ(2)*FREQ(2)*CAS
|
|
WRITE(17,701) WLAM(2),FLAM
|
|
END IF
|
|
else
|
|
DO IJ=1,NFROBS
|
|
FLAM=FLUX(IJ)*FRQOBS(IJ)*FRQOBS(IJ)*CAS*0.5
|
|
flam=max(flam,1.e-40)
|
|
WRITE(7,701) WLobs(IJ),FLAM
|
|
END DO
|
|
end if
|
|
C
|
|
C unit 6 and 16 outputs
|
|
C
|
|
if(iprin.lt.3) return
|
|
if(iprin.ge.3) then
|
|
WRITE(6,600)
|
|
WRITE(6,601)
|
|
end if
|
|
K1=0
|
|
EQW=0.
|
|
EQWP=0.
|
|
IF(IBLANK.EQ.1) EQWT=0.
|
|
IF(IBLANK.EQ.1) EQWTP=0.
|
|
XX=UN/(FREQ(2)-FREQ(1))
|
|
XXX=UN/(FREQ(1)+FREQ(2))/(FREQ(1)+FREQ(2))
|
|
if(ifwin.le.0) then
|
|
DO IJ=1,NFREQ
|
|
FLAM=FLUX(IJ)*FREQ(IJ)*FREQ(IJ)*CAS
|
|
CONT=((FREQ(IJ)-FREQ(1))*FLUX(2)+(FREQ(2)-FREQ(IJ))*FLUX(1))*XX
|
|
RE0=FLUX(IJ)/CONT
|
|
EQW=EQW+(UN-RE0)*W(IJ)
|
|
REP=RE0
|
|
IF(REP.GT.UN) REP=UN
|
|
EQWP=EQWP+(UN-REP)*W(IJ)
|
|
K1=K1+1
|
|
FLX(K1)=LOG10(FLAM)
|
|
ALX(K1)=WLAM(IJ)
|
|
REL(K1)=RE0
|
|
IF(K1.EQ.3.OR.IJ.EQ.NFREQ) THEN
|
|
WRITE(6,602) (ALX(I),FLX(I),REL(I),I=1,K1)
|
|
K1=0
|
|
END IF
|
|
END DO
|
|
else
|
|
DO IJ=1,NFROBS
|
|
FLAM=FLUX(IJ)*FREQ(IJ)*FREQ(IJ)*CAS
|
|
CONT=((FRQOBS(IJ)-FREQ(1))*FLUX(2)+
|
|
* (FREQ(2)-FRQOBS(IJ))*FLUX(1))*XX
|
|
RE0=FLUX(IJ)/CONT
|
|
EQW=EQW+(UN-RE0)*W(IJ)
|
|
REP=RE0
|
|
IF(REP.GT.UN) REP=UN
|
|
EQWP=EQWP+(UN-REP)*W(IJ)
|
|
if(iprin.gt.0) then
|
|
K1=K1+1
|
|
FLX(K1)=LOG10(FLAM)
|
|
ALX(K1)=WLAM(IJ)
|
|
REL(K1)=RE0
|
|
IF(K1.EQ.3.OR.IJ.EQ.NFREQ) THEN
|
|
WRITE(6,602) (ALX(I),FLX(I),REL(I),I=1,K1)
|
|
K1=0
|
|
END IF
|
|
end if
|
|
END DO
|
|
end if
|
|
C
|
|
C output of partial equivalent widths on unit 16
|
|
C
|
|
EQW=EQW*EQWC*XXX
|
|
EQWT=EQWT+EQW
|
|
EQWP=EQWP*EQWC*XXX
|
|
EQWTP=EQWTP+EQWP
|
|
if(iprin.gt.2) WRITE(6,603) EQW,EQWP,EQWT,EQWTP
|
|
WRITE(16,616) WLAM(1),WLAM(2),EQW,EQWP,EQWT,EQWTP
|
|
C
|
|
600 FORMAT(/' EMERGENT RADIATION'/' ------------------'/)
|
|
601 FORMAT(3(' LAMBDA LOG HLAM REL')/)
|
|
602 FORMAT(3(2X,F9.3,F8.4,F7.3))
|
|
603 FORMAT(/,' EQUIVALENT WIDTH THIS SET =',2F8.1,' mA'/
|
|
* ' EQUIVALENT WIDTH TOTAL =',2F8.1,' mA'//)
|
|
616 FORMAT(2F12.3,4F12.1)
|
|
701 FORMAT(F12.5,1PE15.5)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE CROSET(CROSS)
|
|
C
|
|
C SET UP ARRAY CROSS - PHOTOIONIZATION CROSS-SECTIONS
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
DIMENSION CROSS(MCROSS,MFRQ)
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
C
|
|
IJ0=2
|
|
IF(NFREQ.EQ.1) IJ0=1
|
|
IF(IMODE.EQ.2) IJ0=NFREQ
|
|
DO IJ=1,IJ0
|
|
DO IT=1,MCROSS
|
|
CROSS(IT,IJ)=0.
|
|
END DO
|
|
END DO
|
|
DO IT=1,NLEVEL
|
|
IF(INDEXP(IT).NE.5) THEN
|
|
DO IJ=1,IJ0
|
|
FR=FREQ(IJ)
|
|
CROSS(IT,IJ)=SIGK(FR,IT,0)
|
|
END DO
|
|
ELSE
|
|
DO IJ=1,IJ0
|
|
FR=FREQ(IJ)
|
|
CROSS(IT,IJ)=SIGK(FR,IT,1)
|
|
IF(FR.LT.FROPC(IT)) CROSS(IT,IJ)=0.
|
|
END DO
|
|
END IF
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE CROSEW(CROSS)
|
|
C
|
|
C SET UP COMMON/PHOPAR/ - PHOTOIONIZATION CROSS-SECTIONS
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
DIMENSION CROSS(MCROSS,MFRQ)
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
C
|
|
IJ0=NFREQC
|
|
DO IJ=1,IJ0
|
|
DO IT=1,MCROSS
|
|
CROSS(IT,IJ)=0.
|
|
END DO
|
|
END DO
|
|
DO IT=1,NLEVEL
|
|
IF(INDEXP(IT).NE.5) THEN
|
|
DO IJ=1,IJ0
|
|
FR=FREQC(IJ)
|
|
CROSS(IT,IJ)=SIGK(FR,IT,0)
|
|
END DO
|
|
ELSE
|
|
DO IJ=1,IJ0
|
|
FR=FREQC(IJ)
|
|
CROSS(IT,IJ)=SIGK(FR,IT,1)
|
|
IF(FR.LT.FROPC(IT)) CROSS(IT,IJ)=0.
|
|
END DO
|
|
END IF
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION SIGK(FR,ITR,MODE)
|
|
C ==========================
|
|
C
|
|
C driver for evaluating the photoionization cross-sections
|
|
C
|
|
C Input: FR - frequency
|
|
C ITR - index of the transition
|
|
c mode - =0 cross-section equal to zero longward of edge
|
|
c mode - >0 cross-section non-zero (extrapolated) longward of edge
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (SIH0=2.815D29, E10=2.3025851)
|
|
parameter (wi1=911.753878, wi2=227.837832, un=1.e0)
|
|
CHARACTER*10 TYPLEV(MLEVEL)
|
|
COMMON/PRINTP/TYPLEV
|
|
COMMON/TOPCS/CTOP(MFIT,MCROSS), ! sigma = alog10(sigma/10^-18) of fit point
|
|
+ XTOP(MFIT,MCROSS) ! x = alog10(nu/nu0) of fit point
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
DIMENSION XFIT(MFIT) , ! local array containing x for OP data
|
|
+ SFIT(MFIT) ! local array containing sigma for OP data
|
|
C
|
|
PEACH(X,S,A,B) =A*X**S*(B+X*(1.-B))*1.E-18
|
|
HENRY(X,S,A,B,C)=A*X**S*(C+X*(B-2.*C+X*(1.+C-B)))*1.E-18
|
|
C
|
|
SIGK=0.
|
|
II=ITR
|
|
FR0=ENION(II)/6.6256E-27
|
|
IF(FR0.LE.0.) RETURN
|
|
wl0=2.997925e18/fr0
|
|
C
|
|
C wavelength with an explicit correction to the air wavalength
|
|
C
|
|
IF(WL0.GT.vaclim) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+UN)
|
|
fr0=2.997925e18/wl0
|
|
END IF
|
|
c
|
|
IF(mode.eq.0 .and. FR.LT.FR0) RETURN
|
|
C
|
|
C IBF(ITR) is the switch controlling the mode of evaluation of the
|
|
C cross-section:
|
|
C = 0 hydrogenic cross-section, with Gaunt factor set to 1
|
|
C = 1 hydrogenic cross-section with exact Gaunt factor
|
|
C = 2 Peach-type expression (see function PEACH)
|
|
C = 3 Henry-type expression (see function HENRY)
|
|
C = 4 Butler new calculations
|
|
C = 7 hydrogenic cross-section with Gaunt factor from K. Werner
|
|
C = 9 Opacity project fits (routine TOPBAS - interpolations)
|
|
C > 100 - cross-sections extracted form TOPBASE, for several points
|
|
C In this case, IBF-100 is the number of points
|
|
C < 0 non-standard, user supplied expression (user should update
|
|
C subroutine SPSIGK)
|
|
C
|
|
C for H- : for any IBF > 0 - standard expression
|
|
C for He I:
|
|
C for IBF = 11 or = 13 - Opacity Project cross section
|
|
C Seaton-Ferney's cubic fits, Hummer's procedure (HEPHOT)
|
|
C IBF = 11 means that the multiplicity S=1 (singlet)
|
|
C IBF = 13 means that the multiplicity S=3 (triplet)
|
|
C for IBF = 10 - cross section, based on Opacity Project, but
|
|
C appropriately averaged for an averaged level
|
|
C
|
|
C
|
|
IB=IBF(ITR)
|
|
IQ=NQUANT(II)
|
|
IE=IEL(II)
|
|
IF(IE.EQ.IELHM) THEN
|
|
SIGK=SBFHMI(FR)
|
|
RETURN
|
|
END IF
|
|
IF(IE.EQ.IELHE1.AND.IB.GE.10.AND.IB.LE.13) THEN
|
|
SIGK=SBFHE1(II,IB,FR)
|
|
RETURN
|
|
END IF
|
|
c
|
|
CH=IZ(IE)*IZ(IE)
|
|
IQ5=IQ*IQ*IQ*IQ*IQ
|
|
C
|
|
IF(IB.EQ.0) THEN
|
|
C
|
|
C hydrogenic expression (for IBF = 0)
|
|
C
|
|
SIGK=SIH0/FR/FR/FR*CH*CH/IQ5
|
|
C
|
|
C exact hydrogenic - with Gaunt factor (for IBF=1)
|
|
C
|
|
ELSE IF(IB.EQ.1) THEN
|
|
SIGK=SIH0/FR/FR/FR*CH*CH/IQ5
|
|
c IF(FR.GE.FR0.OR.(IE.EQ.IELH.AND.IQ.LE.3))
|
|
c * SIGK=SIGK*GAUNT(IQ,FR/CH)
|
|
fr0l=0.95*fr0
|
|
if(fr.ge.fr0) then
|
|
sigk=sigk*gaunt(iq,fr/ch)
|
|
else if(fr.ge.fr0l) then
|
|
gau0=gaunt(iq,fr0/ch)
|
|
corg=(fr-fr0l)/(fr0-fr0l)*(gau0-1.)+1.
|
|
sigk=sigk*corg
|
|
end if
|
|
ELSE IF(IB.EQ.2) THEN
|
|
C
|
|
C Peach-type formula (for IBF=2)
|
|
C
|
|
IF(GAMBF(II).GT.0) THEN
|
|
IF(GAMBF(II).LT.1.E6) THEN
|
|
FR0=2.997925E18/GAMBF(II)
|
|
ELSE
|
|
FR0=GAMBF(II)
|
|
END IF
|
|
IF(FR.LT.FR0) RETURN
|
|
END IF
|
|
FREL=FR0/FR
|
|
SIGK=PEACH(FREL,S0BF(II),ALFBF(II),BETBF(II))
|
|
ELSE IF(IB.EQ.3) THEN
|
|
C
|
|
C Henry-type formula (for IBF=3)
|
|
C
|
|
FREL=FR0/FR
|
|
SIGK=HENRY(FREL,S0BF(II),ALFBF(II),BETBF(II),GAMBF(II))
|
|
C
|
|
C Butler expression
|
|
C
|
|
ELSE IF(IB.EQ.4) THEN
|
|
FREL=FR0/FR
|
|
XL=LOG(FREL)
|
|
SL=S0BF(II)+XL*(ALFBF(II)+XL*BETBF(II))
|
|
SIGK=EXP(SL)
|
|
C
|
|
C exact hydrogenic - with Gaunt factor from K Werner (for IBF=7)
|
|
C
|
|
ELSE IF(IB.EQ.7) THEN
|
|
IQ5=IQ*IQ*IQ*IQ*IQ
|
|
SIGK=SIH0/(FR*FR*FR)*CH*CH/IQ5*GNTK(IQ,FR/CH)
|
|
C
|
|
C selected Opacity Project data (for IBF=9)
|
|
C (c.-s. evaluated by routine TOPBAS which needs an input file RBF.DAT)
|
|
C
|
|
ELSE IF(IB.EQ.9) THEN
|
|
SIGK=TOPBAS(FR,FR0,TYPLEV(II))
|
|
C
|
|
C other Opacity Project data (for IBF>100)
|
|
C (c.-s. evaluated by interpolating from direct input data)
|
|
C
|
|
ELSE IF(IB.GT.100) THEN
|
|
NFIT=IB-100
|
|
X = LOG10(FR/FR0)
|
|
IF(X.LT.XTOP(1,II)) THEN
|
|
SIGM=0.
|
|
ELSE
|
|
DO IFIT = 1,NFIT
|
|
XFIT(IFIT) = XTOP(IFIT,II)
|
|
SFIT(IFIT) = CTOP(IFIT,II)
|
|
END DO
|
|
SIGM = YLINTP (X,XFIT,SFIT,NFIT,MFIT)
|
|
SIGM = 1.D-18*EXP(E10*SIGM)
|
|
END IF
|
|
SIGK=SIGM
|
|
ELSE IF(IB.LT.0) THEN
|
|
CALL SPSIGK(ITR,IB,FR,SIGSP)
|
|
SIGK=SIGSP
|
|
END IF
|
|
if(iatm(ii).eq.iath.and.ii.gt.n0hn+2.
|
|
* and.ib.le.1.and.fr.lt.fr0) then
|
|
fr1=fropc(ii)
|
|
frdec=min(fr1*1.25,fr0)
|
|
if(fr.gt.fr1.and.fr.lt.frdec)
|
|
* sigk=sigk*(fr-fr1)/(frdec-fr1)
|
|
end if
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION GAUNT(I,FR)
|
|
C ====================
|
|
C
|
|
C Hydrogenic bound-free Gaunt factor for the principal quantum
|
|
C number I and frequency FR
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
X=FR/2.99793E14
|
|
GAUNT=1.
|
|
IF(I.EQ.1) THEN
|
|
GAUNT=1.2302628+X*(-2.9094219E-3+X*(7.3993579E-6-8.7356966E-9*X))
|
|
*+(12.803223/X-5.5759888)/X
|
|
ELSE IF(I.EQ.2) THEN
|
|
GAUNT=1.1595421+X*(-2.0735860E-3+2.7033384E-6*X)+(-1.2709045+
|
|
*(-2.0244141/X+2.1325684)/X)/X
|
|
ELSE IF(I.EQ.3) THEN
|
|
GAUNT=1.1450949+X*(-1.9366592E-3+2.3572356E-6*X)+(-0.55936432+
|
|
*(-0.23387146/X+0.52471924)/X)/X
|
|
ELSE IF(I.EQ.4) THEN
|
|
GAUNT=1.1306695+X*(-1.3482273E-3+X*(-4.6949424E-6+2.3548636E-8*X))
|
|
*+(-0.31190730+(0.19683564-5.4418565E-2/X)/X)/X
|
|
ELSE IF(I.EQ.5) THEN
|
|
GAUNT=1.1190904+X*(-1.0401085E-3+X*(-6.9943488E-6+2.8496742E-8*X))
|
|
*+(-0.16051018+(5.5545091E-2-8.9182854E-3/X)/X)/X
|
|
ELSE IF(I.EQ.6) THEN
|
|
GAUNT=1.1168376+X*(-8.9466573E-4+X*(-8.8393133E-6+3.4696768E-8*X))
|
|
*+(-0.13075417+(4.1921183E-2-5.5303574E-3/X)/X)/X
|
|
ELSE IF(I.EQ.7) THEN
|
|
GAUNT=1.1128632+X*(-7.4833260E-4+X*(-1.0244504E-5+3.8595771E-8*X))
|
|
*+(-9.5441161E-2+(2.3350812E-2-2.2752881E-3/X)/X)/X
|
|
ELSE IF(I.EQ.8) THEN
|
|
GAUNT=1.1093137+X*(-6.2619148E-4+X*(-1.1342068E-5+4.1477731E-8*X))
|
|
*+(-7.1010560E-2+(1.3298411E-2 -9.7200274E-4/X)/X)/X
|
|
ELSE IF(I.EQ.9) THEN
|
|
GAUNT=1.1078717+X*(-5.4837392E-4+X*(-1.2157943E-5+4.3796716E-8*X))
|
|
*+(-5.6046560E-2+(8.5139736E-3-4.9576163E-4/X)/X)/X
|
|
ELSE IF(I.EQ.10) THEN
|
|
GAUNT=1.1052734+X*(-4.4341570E-4+X*(-1.3235905E-5+4.7003140E-8*X))
|
|
*+(-4.7326370E-2+(6.1516856E-3-2.9467046E-4/X)/X)/X
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION GNTK(I,FR)
|
|
C ===================
|
|
C
|
|
C Hydrogenic bound-free Gaunt factor for the principal quantum
|
|
C number I and frequency FR (from Klaus Werner)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
GNTK=1.
|
|
IF(I.GT.3) GO TO 16
|
|
Y=1./FR
|
|
GO TO (1,2,3),I
|
|
1 GNTK=0.9916+Y*(2.71852D13-Y*2.26846D30)
|
|
GO TO 16
|
|
2 GNTK=1.1050-Y*(2.37490D14-Y*4.07677D28)
|
|
GO TO 16
|
|
3 GNTK=1.1010-Y*(0.98632D14-Y*1.03540D28)
|
|
16 RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE SPSIGK(ITR,IB,FR,SIGSP)
|
|
C ==================================
|
|
C
|
|
C Non-standard evaluation of the photoionization cross-sections
|
|
C Basically user-suppled procedure; here are some examples
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
SIGSP=0.
|
|
if(itr.le.0) return
|
|
C
|
|
C Special formula for the He I ground state
|
|
C
|
|
IF(IB.EQ.-201) SIGSP=7.3E-18*EXP(1.373-2.311E-16*FR)
|
|
C
|
|
C Special formula for the averaged <n=2> level of He I
|
|
C
|
|
IF(IB.EQ.-202) SIGSP=SGHE12(FR)
|
|
C
|
|
C Carbon ground configuration levels 2p2 1D and 1S
|
|
C
|
|
IF(IB.EQ.-602.OR.IB.EQ.-603) THEN
|
|
CALL CARBON(IB,FR,SG)
|
|
SIGSP=SG
|
|
END IF
|
|
C
|
|
C Hidalgo (Ap.J. 153, 981, 1968) photoionization data
|
|
C
|
|
IF(IB.LE.-101.AND.IB.GE.-137) SIGSP=HIDALG(IB,FR)
|
|
C
|
|
C Reilman and Manson (Ap.J. Suppl. 40, 815, 1979) photoionization data
|
|
C
|
|
IF(IB.LE.-301.AND.IB.GE.-337) SIGSP=REIMAN(IB,FR)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE CARBON(IB,FR,SG)
|
|
C ===========================
|
|
C
|
|
C Photoionization cross-section for neutral carbon 2p1D and 2p1S
|
|
C levels (G.B.Taylor - private communication)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION FR2(34),SG2(34),FR3(45),SG3(45)
|
|
DATA FR2/ 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.80, 0.81, 0.82,
|
|
* 0.83, 0.85, 0.86, 0.87, 0.88, 0.89, 0.90,
|
|
* 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99,
|
|
* 1.00, 1.10, 1.20, 1.30, 1.45, 1.50, 1.60, 1.80, 2./
|
|
DATA SG2/ 12.04, 12.03, 12.09, 12.26, 12.60, 13.24, 14.36, 16.24,
|
|
* 19.28, 23.94, 37.41, 42.88, 44.76, 43.41, 40.46, 37.19,
|
|
* 34.26, 31.82, 29.96, 28.57, 27.68, 27.37, 27.84, 29.69,
|
|
* 34.45, 46.35, 13.80, 11.54, 10.40, 8.96, 8.54, 7.47,
|
|
* 6.53, 5.66/
|
|
DATA FR3/ 0.66, 0.68, 0.70, 0.72, 0.74, 0.76, 0.78, 0.80, 0.82,
|
|
* 0.84, 0.86, 0.864,0.866,0.868,0.87, 0.874,0.876,0.88,
|
|
* 0.882,0.884,0.886,0.888,0.89 ,0.894,0.896,0.898,0.90,
|
|
* 0.904,0.908,0.910,0.920,0.94, 0.98, 1.00, 1.10, 1.20,
|
|
* 1.26, 1.34, 1.36, 1.40, 1.46, 1.60, 1.70, 1.80, 2./
|
|
DATA SG3/ 13.94, 13.29, 12.56, 11.73, 10.82, 10.18, 8.62, 7.27,
|
|
* 5.74, 4.14, 4.61, 5.92, 6.94, 8.34, 10.21, 16.12,
|
|
* 20.64, 34.56, 44.82, 57.71, 73.09, 89.99,106.38,127.08,
|
|
* 128.38,124.44,117.17, 99.32, 82.95, 76.05, 52.65, 33.23,
|
|
* 21.29, 18.69, 12.62, 11.44, 9.77, 7.53, 10.47, 9.65,
|
|
* 10.19, 7.28, 6.70, 6.11, 4.96/
|
|
DATA NC2,NC3/34,45/
|
|
DATA FR0/3.28805E15/
|
|
F=FR/FR0
|
|
IF(IB.NE.-602) GO TO 25
|
|
J=2
|
|
IF(F.LE.FR2(1)) GO TO 20
|
|
DO 10 I=2,NC2
|
|
J=I
|
|
IF(F.GT.FR2(I-1).AND.F.LE.FR2(I)) GO TO 20
|
|
10 CONTINUE
|
|
20 SG=(F-FR2(J-1))/(FR2(J)-FR2(J-1))*(SG2(J)-SG2(J-1))+SG2(J-1)
|
|
SG=SG*1.E-18
|
|
25 IF(IB.NE.-603) GO TO 50
|
|
J=2
|
|
IF(F.LE.FR3(1)) GO TO 40
|
|
DO 30 I=2,NC3
|
|
J=I
|
|
IF(F.GT.FR3(I-1).AND.F.LE.FR3(I)) GO TO 40
|
|
30 CONTINUE
|
|
40 SG=(F-FR3(J-1))/(FR3(J)-FR3(J-1))*(SG3(J)-SG3(J-1))+SG3(J-1)
|
|
SG=SG*1.E-18
|
|
50 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
|
|
FUNCTION SGHE12(FR)
|
|
C ===================
|
|
C
|
|
C Special formula for the photoionization cross-section from the
|
|
C averaged <n=2> level of He I
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DATA C1/3.E0/,C2/9.E0/,C3/1.6E1/,
|
|
* A1/6.45105E-18/,A2/3.02E-19/,A3/9.9847E-18/,A4/1.1763673E-17/,
|
|
* A5/3.63662E-19/,A6/-2.783E2/,A7/1.488E1/,A8/-2.311E-1/,
|
|
* E1/3.5E0/,E2/3.6E0/,E3/1.91E0/,E4/2.9E0/,E5/3.3E0/
|
|
X=FR*1.E-15
|
|
XX=LOG(FR)
|
|
SGHE12=(C1*(A1/X**E1+A2/X**E2)+A3/X**E3+C2*(A4/X**E4+A5/X**E5)+
|
|
* C1*EXP(A6+XX*(A7+XX*A8)))/C3
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
FUNCTION HIDALG(IB,FR)
|
|
C ======================
|
|
C
|
|
C Read table of wavelengths and photo-ionization cross-sections
|
|
C from Hidalgo (1968, Ap. J., 153, 981) for the species indicated by IB
|
|
C (Hidalgo's number = INDEX = -IB-100).
|
|
C Compute linearly interpolated value of the cross-section
|
|
C at the frequency FR.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION WL1(20),WL2(20),WLI(20),SIG0(20,24),SIGS(20)
|
|
C
|
|
DATA WL1 /
|
|
* 39.1, 80.9, 97.6,100.1,104.3,107.2,108.7,111.9,113.6,115.4,
|
|
* 117.1,119.0,124.8,126.9,129.1,131.3,133.6,136.0,138.5,141.1/
|
|
DATA WL2 /
|
|
* 68.5, 80.9,100.1,120.9,158.8,165.7,177.3,190.6,200.7,206.2,
|
|
* 211.9,218.0,224.5,231.3,246.3,5*0./
|
|
DATA SIG0 /
|
|
*120*0.,
|
|
*.0460,.2400,.3500,.3700,.4000,.4300,.4400,.4600,.4700,.4900,
|
|
*.5000,.5200,.5700,.6200, 6*0.,
|
|
* 80*0.,
|
|
*.0092,.1000,.1900,.2100,.2300,.2500,.2600,.2900,.3000,.3200,
|
|
*.3400,.3500,.4100,.4300,.4500,.4800,.5000,.5300,.5600,.5900,
|
|
* 20*0.,
|
|
*.3400,.4600,.6300,.7700,.9100,1.080, 14*0.,
|
|
* 20*0.,
|
|
*.0064,.1100,.2200,.4100,.9400,1.000,1.300,1.600, 12*0.,
|
|
* 80*0.,
|
|
*.0370,.0650,.1300,.2400,.5500,.6300,.7700,.9500,1.100,1.250,
|
|
* 10*0.,
|
|
* 40*0.,
|
|
*.0220,.0390,.0800,.1500,.3500,.4000,.4900,.6200,.7200,.7800,
|
|
*.8500,.9300,1.020,
|
|
* 7*0./
|
|
C
|
|
INDEX=-IB-100
|
|
NUM=20
|
|
IF(INDEX.GE.13.AND.INDEX.LE.27) NUM=15
|
|
DO 10 I=1,NUM
|
|
IF(INDEX.LT.13) WLI(I)=WL1(I)
|
|
IF(INDEX.GE.13) WLI(I)=WL2(I)
|
|
SIGS(I)=SIG0(I,INDEX)
|
|
10 CONTINUE
|
|
C
|
|
WLAM=2.997925E18/FR
|
|
IL=1
|
|
IR=NUM
|
|
DO 50 I=1,NUM-1
|
|
IF(WLAM.GE.WLI(I).AND.WLAM.LE.WLI(I+1)) THEN
|
|
IL=I
|
|
IR=I+1
|
|
GO TO 60
|
|
ENDIF
|
|
50 CONTINUE
|
|
C
|
|
C LINEAR INTERPOLATION:
|
|
C
|
|
60 SIGM=(SIGS(IR)-SIGS(IL))*(WLAM-WLI(IL))/(WLI(IR)-WLI(IL))
|
|
* + SIGS(IL)
|
|
C
|
|
C IF OUTSIDE WAVELENGTH RANGE SET TO FIRST(LAST) VALUE:
|
|
C
|
|
IF(WLAM.LE.WLI(1)) SIGM=SIGS(1)
|
|
IF(WLAM.GE.WLI(NUM)) SIGM=SIGS(NUM)
|
|
C
|
|
C IF LAST NON-ZERO SIG VALUES, NO INTERPOLATION:
|
|
C
|
|
c IF(SIGS(IR).EQ.0.) SIGM=SIGS(IL)
|
|
C
|
|
HIDALG=SIGM*1.E-18
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
FUNCTION REIMAN(IB,FR)
|
|
C ======================
|
|
C
|
|
C Read table of photon energies and photo-ionization cross-sections
|
|
C from Reilman & Manson (1979, Ap. J. Suppl., 40, 815) for the species
|
|
C indicated by IB
|
|
C
|
|
C Compute linearly interpolated value of the cross-section
|
|
C at the frequency FR.
|
|
C
|
|
C (At the moment, only a few transitions are considered)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION HEV(30),F0(30),SIG0(30,2),SIGS(30)
|
|
C
|
|
DATA HEV /
|
|
* 130.,160.,190.,210.,240.,270.,300.,330.,360.,390.,
|
|
* 420.,450.,480.,510.,540.,570.,600.,630.,660.,690.,
|
|
* 720.,750.,780.,810.,840.,870.,900.,930.,960.,990./
|
|
DATA SIG0 /
|
|
* 3*0., 4.422E-1, 3.478E-1,
|
|
* 2.794E-1, 2.286E-1, 1.899E-1, 1.598E-1, 1.360E-1,
|
|
* 1.169E-1, 1.013E-1, 8.845E-2, 7.776E-2, 6.877E-2,
|
|
* 6.114E-2, 5.463E-2, 4.904E-2, 4.419E-2, 3.998E-2,
|
|
* 3.629E-2, 3.305E-2, 3.019E-2, 2.766E-2, 2.540E-2,
|
|
* 2.339E-2, 2.158E-2, 1.996E-2, 1.850E-2, 1.718E-2,
|
|
* 4*0., 1.981E-1, 1.584E-1,
|
|
* 1.290E-1, 1.066E-1, 8.932E-2, 7.567E-2, 6.475E-2,
|
|
* 5.589E-2, 4.862E-2, 4.259E-2, 3.754E-2, 3.329E-2,
|
|
* 2.966E-2, 2.656E-2, 2.388E-2, 2.157E-2, 1.954E-2,
|
|
* 1.777E-2, 1.621E-2, 1.484E-2, 1.362E-2, 1.253E-2,
|
|
* 1.155E-2, 1.067E-2, 9.888E-3, 9.179E-3/
|
|
C
|
|
INDEX=-IB-300
|
|
NUM=30
|
|
DO 10 I=1,NUM
|
|
F0(I)=HEV(I)*2.418573E14
|
|
SIGS(I)=SIG0(I,INDEX)
|
|
10 CONTINUE
|
|
C
|
|
IL=1
|
|
IR=NUM
|
|
DO 50 I=1,NUM-1
|
|
IF(FR.GE.F0(I).AND.FR.LE.F0(I+1)) THEN
|
|
IL=I
|
|
IR=I+1
|
|
GO TO 60
|
|
ENDIF
|
|
50 CONTINUE
|
|
C
|
|
C LINEAR INTERPOLATION:
|
|
C
|
|
60 SIGM=(SIGS(IR)-SIGS(IL))*(FR-F0(IL))/(F0(IR)-F0(IL))
|
|
* + SIGS(IL)
|
|
C
|
|
C IF OUTSIDE WAVELENGTH RANGE SET TO FIRST(LAST) VALUE:
|
|
C
|
|
IF(FR.LE.F0(1)) SIGM=SIGS(1)
|
|
IF(FR.GE.F0(NUM)) SIGM=SIGS(NUM)
|
|
C
|
|
C IF LAST NON-ZERO SIG VALUES, NO INTERPOLATION:
|
|
C
|
|
c IF(SIGS(IR).EQ.0.) SIGM=SIGS(IL)
|
|
C
|
|
REIMAN=SIGM*1.E-18
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION SBFHE1(II,IB,FR)
|
|
C =========================
|
|
C
|
|
C Calculates photoionization cross sections of neutral helium
|
|
C from states with n = 1, 2, 3, 4.
|
|
C
|
|
C The levels are either non-averaged (l,s) states, or some
|
|
C averaged levels.
|
|
C The program allows only two standard possibilities of
|
|
C constructing averaged levels:
|
|
C i) all states within given principal quantum number n (>1) are
|
|
C lumped together
|
|
C ii) all siglet states for given n, and all triplet states for
|
|
C given n are lumped together separately (there are thus two
|
|
C explicit levels for a given n)
|
|
C
|
|
C The cross sections are calculated using appropriate averages
|
|
C of the Opacity Project cross sections, calculated by procedure
|
|
C HEPHOT
|
|
C
|
|
C Input parameters:
|
|
C II - index of the lower level (in the numbering of explicit
|
|
C levels)
|
|
C IB - photoionization switch IBF for the given transition
|
|
C = 10 - means that the given transition is from an
|
|
C averaged level
|
|
C = 11 - the given transition is from non-averaged
|
|
C singlet state
|
|
C = 13 - the given transition is from non-averaged
|
|
C triplet state
|
|
C FR - frequency
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
C
|
|
NI=NQUANT(II)
|
|
IGI=INT(G(II)+0.01)
|
|
IS=IB-10
|
|
sbfhe1=0.
|
|
C
|
|
C ----------------------------------------------------------------
|
|
C IB=11 or 13 - photoionization from an non-averaged (l,s) level
|
|
C ----------------------------------------------------------------
|
|
C
|
|
IF(IS.EQ.1.OR.IS.EQ.3) THEN
|
|
IL=(IGI/IS-1)/2
|
|
SBFHE1=HEPHOT(IS,IL,NI,FR)
|
|
END IF
|
|
C
|
|
C ----------------------------------------------------------------
|
|
C IS=10 - photoionization from an averaged level
|
|
C ----------------------------------------------------------------
|
|
C
|
|
IF(IS.EQ.0) THEN
|
|
IF(NI.EQ.2) THEN
|
|
C
|
|
C ******** photoionization from an averaged level with n=2
|
|
C
|
|
IF(IGI.EQ.4) THEN
|
|
C
|
|
C a) lower level is an averaged singlet state
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,2,FR)+3.D0*HEPHOT(1,1,2,FR))/9.D0
|
|
ELSE IF(IGI.EQ.12) THEN
|
|
C
|
|
C b) lower level is an averaged triplet state
|
|
C
|
|
SBFHE1=(HEPHOT(3,0,2,FR)+3.D0*HEPHOT(3,1,2,FR))/9.D0
|
|
ELSE IF(IGI.EQ.16) THEN
|
|
C
|
|
C c) lower level is an average of both singlet and triplet states
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,2,FR)+3.D0*(HEPHOT(1,1,2,FR)+
|
|
* HEPHOT(3,0,2,FR))+9.D0*HEPHOT(3,1,2,FR))/1.6D1
|
|
ELSE
|
|
GO TO 10
|
|
END IF
|
|
C
|
|
C
|
|
C ******** photoionization from an averaged level with n=3
|
|
C
|
|
ELSE IF(NI.EQ.3) THEN
|
|
IF(IGI.EQ.9) THEN
|
|
C
|
|
C a) lower level is an averaged singlet state
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,3,FR)+3.D0*HEPHOT(1,1,3,FR)+
|
|
* 5.D0*HEPHOT(1,2,3,FR))/9.D0
|
|
ELSE IF(IGI.EQ.27) THEN
|
|
C
|
|
C b) lower level is an averaged triplet state
|
|
C
|
|
SBFHE1=(HEPHOT(3,0,3,FR)+3.D0*HEPHOT(3,1,3,FR)+
|
|
* 5.D0*HEPHOT(3,2,3,FR))/9.D0
|
|
ELSE IF(IGI.EQ.36) THEN
|
|
C
|
|
C c) lower level is an average of both singlet and triplet states
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,3,FR)+3.D0*HEPHOT(1,1,3,FR)+
|
|
* 5.D0*HEPHOT(1,2,3,FR)+
|
|
* 3.D0*HEPHOT(3,0,3,FR)+9.D0*HEPHOT(3,1,3,FR)+
|
|
* 15.D0*HEPHOT(3,2,3,FR))/3.6D0
|
|
ELSE
|
|
GO TO 10
|
|
END IF
|
|
ELSE IF(NI.EQ.4) THEN
|
|
C
|
|
C ******** photoionization from an averaged level with n=4
|
|
C
|
|
IF(IGI.EQ.16) THEN
|
|
C
|
|
C a) lower level is an averaged singlet state
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,4,FR)+3.D0*HEPHOT(1,1,4,FR)+
|
|
* 5.D0*HEPHOT(1,2,4,FR)+
|
|
* 7.D0*HEPHOT(1,3,4,FR))/1.6D1
|
|
ELSE IF(IGI.EQ.48) THEN
|
|
C
|
|
C b) lower level is an averaged triplet state
|
|
C
|
|
SBFHE1=(HEPHOT(3,0,4,FR)+3.D0*HEPHOT(3,1,4,FR)+
|
|
* 5.D0*HEPHOT(3,2,4,FR)+
|
|
* 7.D0*HEPHOT(3,3,4,FR))/1.6D1
|
|
ELSE IF(IGI.EQ.64) THEN
|
|
C
|
|
C c) lower level is an average of both singlet and triplet states
|
|
C
|
|
SBFHE1=(HEPHOT(1,0,4,FR)+3.D0*HEPHOT(1,1,4,FR)+
|
|
* 5.D0*HEPHOT(1,2,4,FR)+
|
|
* 7.D0*HEPHOT(1,3,4,FR)+
|
|
* 3.D0*HEPHOT(3,0,4,FR)+
|
|
* 9.D0*HEPHOT(3,1,4,FR)+
|
|
* 15.D0*HEPHOT(3,2,4,FR)+
|
|
* 21.D0*HEPHOT(3,3,4,FR))/6.4D1
|
|
ELSE
|
|
GO TO 10
|
|
END IF
|
|
ELSE
|
|
GO TO 10
|
|
END IF
|
|
END IF
|
|
RETURN
|
|
10 WRITE(6,601) NI,IGI,IS
|
|
601 FORMAT(1H0/' INCONSISTENT INPUT TO PROCEDURE SBFHE1'/
|
|
* ' QUANTUM NUMBER =',I3,' STATISTICAL WEIGHT',I4,' S=',I3)
|
|
STOP
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION HEPHOT(S,L,N,FREQ)
|
|
C ===========================
|
|
C
|
|
C EVALUATES HE I PHOTOIONIZATION CROSS SECTION USING SEATON
|
|
C FERNLEY'S CUBIC FITS TO THE OPACITY PROJECT CROSS SECTIONS
|
|
C UP TO SOME ENERGY "EFITM" IN THE RESONANCE-FREE ZONE. BEYOND
|
|
C THIS ENERGY LINEAR FITS TO LOG SIGMA IN LOG (E/E0) ARE USED.
|
|
C THIS EXTRAPOLATION SHOULD BE USED UP TO THE BEGINNING OF THE
|
|
C RESONANCE ZONE "XMAX", BUT AT PRESENT IT IS USED THROUGH IT.
|
|
C BY CHANGING A FEW LINES THAT ARE PRESENTLY COMMENTED OUT,
|
|
C FOR ENERGIES IN THE RESONANCE ZONE A VALUE OF 1/100 OF THE
|
|
C THRESHOLD CROSS SECTION IS USED -- THIS IS PURELY AD HOC AND
|
|
C ONLY A TEMPORARY MEASURE. OBVIOUSLY ANY OTHER VALUE OR FUNCTIONAL
|
|
C FORM CAN BE INSERTED HERE.
|
|
C
|
|
C CALLING SEQUENCE INCLUDES:
|
|
C S = MULTIPLICITY, EITHER 1 OR 3
|
|
C L = ANGULAR MOMENTUM, 0, 1, OR 2;
|
|
C for L > 2 - hydrogenic expresion
|
|
C FREQ = FREQUENCY
|
|
C
|
|
C DGH JUNE 1988 JILA, slightly modified by I.H.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INTEGER S,L,SS,LL
|
|
DIMENSION COEF(4,53),IST(3,2),N0(3,2),
|
|
* FL0(53),A(53),B(53),XFITM(53)
|
|
c DIMENSION XMAX(53)
|
|
C
|
|
DATA IST/1,36,20,11,45,28/
|
|
DATA N0/1,2,3,2,2,3/
|
|
C
|
|
DATA FL0/
|
|
. 2.521D-01,-5.381D-01,-9.139D-01,-1.175D+00,-1.375D+00,-1.537D+00,
|
|
.-1.674D+00,-1.792D+00,-1.896D+00,-1.989D+00,-4.555D-01,-8.622D-01,
|
|
.-1.137D+00,-1.345D+00,-1.512D+00,-1.653D+00,-1.774D+00,-1.880D+00,
|
|
.-1.974D+00,-9.538D-01,-1.204D+00,-1.398D+00,-1.556D+00,-1.690D+00,
|
|
.-1.806D+00,-1.909D+00,-2.000D+00,-9.537D-01,-1.204D+00,-1.398D+00,
|
|
.-1.556D+00,-1.690D+00,-1.806D+00,-1.909D+00,-2.000D+00,-6.065D-01,
|
|
.-9.578D-01,-1.207D+00,-1.400D+00,-1.558D+00,-1.692D+00,-1.808D+00,
|
|
.-1.910D+00,-2.002D+00,-5.749D-01,-9.352D-01,-1.190D+00,-1.386D+00,
|
|
.-1.547D+00,-1.682D+00,-1.799D+00,-1.902D+00,-1.995D+00/
|
|
C
|
|
DATA XFITM/
|
|
. 3.262D-01, 6.135D-01, 9.233D-01, 8.438D-01, 1.020D+00, 1.169D+00,
|
|
. 1.298D+00, 1.411D+00, 1.512D+00, 1.602D+00, 7.228D-01, 1.076D+00,
|
|
. 1.206D+00, 1.404D+00, 1.481D+00, 1.464D+00, 1.581D+00, 1.685D+00,
|
|
. 1.777D+00, 9.586D-01, 1.187D+00, 1.371D+00, 1.524D+00, 1.740D+00,
|
|
. 1.854D+00, 1.955D+00, 2.046D+00, 9.585D-01, 1.041D+00, 1.371D+00,
|
|
. 1.608D+00, 1.739D+00, 1.768D+00, 1.869D+00, 1.803D+00, 7.360D-01,
|
|
. 1.041D+00, 1.272D+00, 1.457D+00, 1.611D+00, 1.741D+00, 1.855D+00,
|
|
. 1.870D+00, 1.804D+00, 9.302D-01, 1.144D+00, 1.028D+00, 1.210D+00,
|
|
. 1.362D+00, 1.646D+00, 1.761D+00, 1.863D+00, 1.954D+00/
|
|
C
|
|
DATA A/
|
|
. 6.95319D-01, 1.13101D+00, 1.36313D+00, 1.51684D+00, 1.64767D+00,
|
|
. 1.75643D+00, 1.84458D+00, 1.87243D+00, 1.85628D+00, 1.90889D+00,
|
|
. 9.01802D-01, 1.25389D+00, 1.39033D+00, 1.55226D+00, 1.60658D+00,
|
|
. 1.65930D+00, 1.68855D+00, 1.62477D+00, 1.66726D+00, 1.83599D+00,
|
|
. 2.50403D+00, 3.08564D+00, 3.56545D+00, 4.25922D+00, 4.61346D+00,
|
|
. 4.91417D+00, 5.19211D+00, 1.74181D+00, 2.25756D+00, 2.95625D+00,
|
|
. 3.65899D+00, 4.04397D+00, 4.13410D+00, 4.43538D+00, 4.19583D+00,
|
|
. 1.79027D+00, 2.23543D+00, 2.63942D+00, 3.02461D+00, 3.35018D+00,
|
|
. 3.62067D+00, 3.85218D+00, 3.76689D+00, 3.49318D+00, 1.16294D+00,
|
|
. 1.86467D+00, 2.02110D+00, 2.24231D+00, 2.44240D+00, 2.76594D+00,
|
|
. 2.93230D+00, 3.08109D+00, 3.21069D+00/
|
|
C
|
|
DATA B/
|
|
.-1.29000D+00,-2.15771D+00,-2.13263D+00,-2.10272D+00,-2.10861D+00,
|
|
.-2.11507D+00,-2.11710D+00,-2.08531D+00,-2.03296D+00,-2.03441D+00,
|
|
.-1.85905D+00,-2.04057D+00,-2.02189D+00,-2.05930D+00,-2.03403D+00,
|
|
.-2.02071D+00,-1.99956D+00,-1.92851D+00,-1.92905D+00,-4.58608D+00,
|
|
.-4.40022D+00,-4.39154D+00,-4.39676D+00,-4.57631D+00,-4.57120D+00,
|
|
.-4.56188D+00,-4.55915D+00,-4.41218D+00,-4.12940D+00,-4.24401D+00,
|
|
.-4.40783D+00,-4.39930D+00,-4.25981D+00,-4.26804D+00,-4.00419D+00,
|
|
.-4.47251D+00,-3.87960D+00,-3.71668D+00,-3.68461D+00,-3.67173D+00,
|
|
.-3.65991D+00,-3.64968D+00,-3.48666D+00,-3.23985D+00,-2.95758D+00,
|
|
.-3.07110D+00,-2.87157D+00,-2.83137D+00,-2.82132D+00,-2.91084D+00,
|
|
.-2.91159D+00,-2.91336D+00,-2.91296D+00/
|
|
C
|
|
DATA ((COEF(I,J),I=1,4),J=1,10)/
|
|
. 8.734D-01,-1.545D+00,-1.093D+00, 5.918D-01, 9.771D-01,-1.567D+00,
|
|
.-4.739D-01,-1.302D-01, 1.174D+00,-1.638D+00,-2.831D-01,-3.281D-02,
|
|
. 1.324D+00,-1.692D+00,-2.916D-01, 9.027D-02, 1.445D+00,-1.761D+00,
|
|
.-1.902D-01, 4.401D-02, 1.546D+00,-1.817D+00,-1.278D-01, 2.293D-02,
|
|
. 1.635D+00,-1.864D+00,-8.252D-02, 9.854D-03, 1.712D+00,-1.903D+00,
|
|
.-5.206D-02, 2.892D-03, 1.782D+00,-1.936D+00,-2.952D-02,-1.405D-03,
|
|
. 1.845D+00,-1.964D+00,-1.152D-02,-4.487D-03/
|
|
DATA ((COEF(I,J),I=1,4),J=11,19)/
|
|
. 7.377D-01,-9.327D-01,-1.466D+00, 6.891D-01, 9.031D-01,-1.157D+00,
|
|
.-7.151D-01, 1.832D-01, 1.031D+00,-1.313D+00,-4.517D-01, 9.207D-02,
|
|
. 1.135D+00,-1.441D+00,-2.724D-01, 3.105D-02, 1.225D+00,-1.536D+00,
|
|
.-1.725D-01, 7.191D-03, 1.302D+00,-1.602D+00,-1.300D-01, 7.345D-03,
|
|
. 1.372D+00,-1.664D+00,-8.204D-02,-1.643D-03, 1.434D+00,-1.715D+00,
|
|
.-4.646D-02,-7.456D-03, 1.491D+00,-1.760D+00,-1.838D-02,-1.152D-02/
|
|
DATA ((COEF(I,J),I=1,4),J=20,27)/
|
|
. 1.258D+00,-3.442D+00,-4.731D-01,-9.522D-02, 1.553D+00,-2.781D+00,
|
|
.-6.841D-01,-4.083D-03, 1.727D+00,-2.494D+00,-5.785D-01,-6.015D-02,
|
|
. 1.853D+00,-2.347D+00,-4.611D-01,-9.615D-02, 1.955D+00,-2.273D+00,
|
|
.-3.457D-01,-1.245D-01, 2.041D+00,-2.226D+00,-2.669D-01,-1.344D-01,
|
|
. 2.115D+00,-2.200D+00,-1.999D-01,-1.410D-01, 2.182D+00,-2.188D+00,
|
|
.-1.405D-01,-1.460D-01/
|
|
DATA ((COEF(I,J),I=1,4),J=28,35)/
|
|
. 1.267D+00,-3.417D+00,-5.038D-01,-1.797D-02, 1.565D+00,-2.781D+00,
|
|
.-6.497D-01,-5.979D-03, 1.741D+00,-2.479D+00,-6.099D-01,-2.227D-02,
|
|
. 1.870D+00,-2.336D+00,-4.899D-01,-6.616D-02, 1.973D+00,-2.253D+00,
|
|
.-3.972D-01,-8.729D-02, 2.061D+00,-2.212D+00,-3.072D-01,-1.060D-01,
|
|
. 2.137D+00,-2.189D+00,-2.352D-01,-1.171D-01, 2.205D+00,-2.186D+00,
|
|
.-1.621D-01,-1.296D-01/
|
|
DATA ((COEF(I,J),I=1,4),J=36,44)/
|
|
. 1.129D+00,-3.149D+00,-1.910D-01,-5.244D-01, 1.431D+00,-2.511D+00,
|
|
.-3.710D-01,-1.933D-01, 1.620D+00,-2.303D+00,-3.045D-01,-1.391D-01,
|
|
. 1.763D+00,-2.235D+00,-1.829D-01,-1.491D-01, 1.879D+00,-2.215D+00,
|
|
.-9.003D-02,-1.537D-01, 1.978D+00,-2.213D+00,-2.066D-02,-1.541D-01,
|
|
. 2.064D+00,-2.220D+00, 3.258D-02,-1.527D-01, 2.140D+00,-2.225D+00,
|
|
. 6.311D-02,-1.455D-01, 2.208D+00,-2.229D+00, 7.977D-02,-1.357D-01/
|
|
DATA ((COEF(I,J),I=1,4),J=45,53)/
|
|
. 1.204D+00,-2.809D+00,-3.094D-01, 1.100D-01, 1.455D+00,-2.254D+00,
|
|
.-4.795D-01, 6.872D-02, 1.619D+00,-2.109D+00,-3.357D-01,-2.532D-02,
|
|
. 1.747D+00,-2.065D+00,-2.317D-01,-5.224D-02, 1.853D+00,-2.058D+00,
|
|
.-1.517D-01,-6.647D-02, 1.943D+00,-2.055D+00,-1.158D-01,-6.081D-02,
|
|
. 2.023D+00,-2.070D+00,-6.470D-02,-6.800D-02, 2.095D+00,-2.088D+00,
|
|
.-2.357D-02,-7.250D-02, 2.160D+00,-2.107D+00, 1.065D-02,-7.542D-02/
|
|
C
|
|
IF(L.GT.2) GO TO 20
|
|
C
|
|
C SELECT BEGINNING AND END OF COEFFICIENTS
|
|
C
|
|
SS=(S+1)/2
|
|
LL=L+1
|
|
NSL0=N0(LL,SS)
|
|
I=IST(LL,SS)+N-NSL0
|
|
C
|
|
C EVALUATE CROSS SECTION
|
|
C
|
|
FL=LOG10(FREQ/3.28805E15)
|
|
X=FL-FL0(I)
|
|
IF(X.GE.-0.001D0) THEN
|
|
IF(X.LT.XFITM(I)) THEN
|
|
P=COEF(4,I)
|
|
DO 10 K=1,3
|
|
P=X*P+COEF(4-K,I)
|
|
10 CONTINUE
|
|
HEPHOT=1.D-18*1.D1**P
|
|
ELSE
|
|
C OTHERWISE REMOVE INSTRUCTION AND 3 FOLLOWING "C"
|
|
C ELSE IF(X.LT.XMAX(I)) THEN
|
|
HEPHOT=1.D-18*1.D1**(A(I)+B(I)*X)
|
|
C ELSE
|
|
C HEPHOT=1.D-18*1.D1**(COEF(1,I)-2.0D0)
|
|
END IF
|
|
ELSE
|
|
HEPHOT=0.
|
|
END IF
|
|
RETURN
|
|
C
|
|
C Hydrogenic expression for L > 2
|
|
C [multiplied by relative population of state (s,l,n), ie.
|
|
C by stat.weight(s,l)/stat.weight(n)]
|
|
C
|
|
20 GN=2.D0*N*N
|
|
HEPHOT=2.815D29/FREQ/FREQ/FREQ/N**5*(2*L+1)*S/GN
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION TOPBAS(FREQ,FREQ0,TYPLV)
|
|
C ==================================
|
|
C
|
|
C Procedure calculates the photo-ionisation cross section SIGMA in
|
|
C [cm^2] at frequency FREQ. FREQ0 is the threshold frequency from
|
|
C level I of ion KI. Threshold cross-sections will be of the order
|
|
C of the numerical value of 10^-18.
|
|
C Opacity-Project (OP) interpolation fit formula
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (E10=2.3025851)
|
|
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
|
|
CHARACTER*10 TYPLV
|
|
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
|
|
DIMENSION XFIT(MOP) ,! local array containing x for OP data
|
|
+ SFIT(MOP) ! local array containing sigma for OP data
|
|
C
|
|
C Read OP data if not yet done
|
|
C
|
|
TOPBAS=0.
|
|
IF (.NOT.LOPREA) CALL OPDATA
|
|
X = LOG10(FREQ/FREQ0)
|
|
DO IOP = 1,NTOTOP
|
|
IF (IDLVOP(IOP).EQ.TYPLV) THEN
|
|
C level has been detected in OP-data file
|
|
IF (NOP(IOP).LE.0) GO TO 20
|
|
DO IFIT = 1,NOP(IOP)
|
|
XFIT(IFIT) = XOP(IFIT,IOP)
|
|
SFIT(IFIT) = SOP(IFIT,IOP)
|
|
END DO
|
|
SIGM = YLINTP (X,XFIT,SFIT,NOP(IOP),MOP)
|
|
SIGM = 1.D-18*EXP(E10*SIGM)
|
|
TOPBAS=SIGM
|
|
GO TO 10
|
|
END IF
|
|
END DO
|
|
10 RETURN
|
|
C Level is not found ,or no data for this level, in RBF.DAT
|
|
20 WRITE (61,100) TYPLV
|
|
100 FORMAT ('SIGMA.......: OP DATA NOT AVAILABLE FOR LEVEL ',A10)
|
|
RETURN
|
|
END
|
|
C
|
|
|
|
C ******************************************************************
|
|
C
|
|
C
|
|
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
|
|
C
|
|
C
|
|
C
|
|
C ******************************************************************
|
|
C
|
|
C
|
|
FUNCTION YLINTP (XINT,X,Y,N,NTOT)
|
|
C =================================
|
|
C
|
|
C linear interpolation routine. Determines YINT = Y(XINT) from
|
|
C grid Y(X) with N points and dimension NTOT.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION X(NTOT),Y(NTOT)
|
|
C
|
|
C bisection (see Numerical Recipes par 3.4 page 90)
|
|
JL = 0
|
|
JU = N+1
|
|
10 IF (JU-JL.GT.1) THEN
|
|
JM = (JU+JL)/2
|
|
IF ((X(N).GT.X(1)).EQV.(XINT.GT.X(JM))) THEN
|
|
JL = JM
|
|
ELSE
|
|
JU = JM
|
|
END IF
|
|
GO TO 10
|
|
END IF
|
|
J = JL
|
|
IF (J.EQ.N) J = J-1
|
|
IF (J.EQ.0) J = J+1
|
|
RC = (Y(J+1)-Y(J))/(X(J+1)-X(J))
|
|
YLINTP = RC*(XINT-X(J))+Y(J)
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE OPAC(ID,CROSS,ABSO,EMIS,SCAT)
|
|
C ========================================
|
|
C
|
|
C Absorption, emission, and scattering coefficients
|
|
C at depth ID and for several frequencies (some or all)
|
|
C
|
|
C Input: ID - depth index
|
|
C CROSS - two dimensional array of photoionization
|
|
C cross-sections
|
|
C Output: ABSO - array of absorption coefficient
|
|
C EMIS - array of emission coefficient
|
|
C SCAT - array of scattering coefficient (all scattering
|
|
C mechanisms except electron scattering)
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
DIMENSION CROSS(MCROSS,MFRQ)
|
|
DIMENSION ABSO(MFREQ),EMIS(MFREQ),SCAT(MFREQ),
|
|
* ABLIN(MFREQ),EMLIN(MFREQ)
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
PARAMETER (UN=1.,TEN15=1.E-15,CSB=2.0706E-16,CFF=3.694E8)
|
|
C
|
|
IF(IMODE.EQ.-1.AND.ID.NE.IDSTD) RETURN
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
T1=UN/T
|
|
HKT=HK*T1
|
|
TK=HKT/H
|
|
SRT=UN/SQRT(T)
|
|
SGFF=CFF*SRT
|
|
CON=CSB*T1*SRT
|
|
conts=1.e-36/con
|
|
ABLY=0.
|
|
EMLY=0.
|
|
SCLY=0.
|
|
sce=ane*sige
|
|
IJ0=2
|
|
IF(NFREQ.EQ.1) IJ0=1
|
|
IF(IMODE.EQ.2) IJ0=NFREQ
|
|
M=3
|
|
IF(ICONTL.EQ.1) M=1
|
|
C
|
|
C Opacity and emissivity in continuum
|
|
C **** calculated only in the first and the last frequency *****
|
|
C
|
|
DO 200 IJ=1,IJ0
|
|
FR=FREQ(IJ)
|
|
FR15=FR*TEN15
|
|
BNU=BN*FR15*FR15*FR15
|
|
HKF=HKT*FR
|
|
ABF=0.
|
|
EBF=0.
|
|
AFF=0.
|
|
DO 100 IL=1,NION
|
|
N0I=NFIRST(IL)
|
|
N1I=NLAST(IL)
|
|
NKE=NNEXT(IL)
|
|
XN=POPUL(NKE,ID)
|
|
C
|
|
C Bound-free contribution + possibly
|
|
c pseudo-continuum (accounting for dissolved fraction)
|
|
C
|
|
DO 10 II=N0I,N1I
|
|
SG=0.
|
|
IF(IFWOP(II).LT.0) THEN
|
|
SG=SGMERG(II,ID,FR)
|
|
ELSE
|
|
SG=CROSS(II,IJ)
|
|
IF(INDEXP(II).EQ.5) THEN
|
|
IZZ=IZ(IEL(II))
|
|
FR0=ENION(II)/6.6256E-27
|
|
CALL DWNFR1(FR,FR0,ID,IZZ,DW1)
|
|
SG=SG*DW1
|
|
END IF
|
|
END IF
|
|
if(sg.le.0.) go to 10
|
|
ABF=ABF+SG*POPUL(II,ID)
|
|
XX=SG*XN*EXP(ENION(II)*TK)*WOP(II,ID)
|
|
IF(XX.lt.conts) go to 10
|
|
EBF=EBF+XX*CON*G(II)/G(NKE)
|
|
10 CONTINUE
|
|
|
|
IT=IFREE(IL)
|
|
IF(IT.EQ.0) GO TO 100
|
|
C
|
|
C Free-free contribution
|
|
C
|
|
IE=IL
|
|
IF(IE.EQ.IELHM) GO TO 65
|
|
CH=IZ(IL)*IZ(IL)
|
|
SF1=CH*XN*SGFF/(FR*FR*FR)
|
|
C
|
|
C The following expression is the so-called modified free-free
|
|
C opacity, ie. allowing for the photoionization from higher,
|
|
C non-explicit, LTE energy levels of the ion IL
|
|
C
|
|
HKFM=HKT*MIN(FF(IL),FR)
|
|
SF2=EXP(HKFM)
|
|
IF(IT.NE.2) GO TO 50
|
|
SG=GFREE(T,FR/CH)
|
|
SF2=SF2+SG-UN
|
|
50 SFF=SF1*SF2
|
|
GO TO 70
|
|
65 SFF=SFFHMI(XN,FR,T)
|
|
70 AFF=AFF+SFF
|
|
100 CONTINUE
|
|
C
|
|
C Additional opacities
|
|
C
|
|
CALL OPADD(0,ID,FR,ABAD,EMAD,SCAD)
|
|
IF(IOPHLI.NE.0) CALL LYMLIN(ID,FR,ABLY,EMLY,SCLY)
|
|
C
|
|
C Total opacity and emissivity
|
|
C
|
|
X=EXP(-HKF)
|
|
X1=UN-X
|
|
BNE=BNU*X*ANE
|
|
c ABSO(IJ)=ABF+ANE*(X1*AFF-X*EBF)+ABAD+ABLY
|
|
ABSO(IJ)=ABF+ANE*(X1*AFF-X*EBF)+ABAD
|
|
EMIS(IJ)=BNE*(AFF+EBF)+EMAD+EMLY
|
|
SCAT(IJ)=SCAD+SCLY+sce
|
|
IF(IJ.EQ.1) THEN
|
|
ABLY1=ABLY
|
|
EMLY1=EMLY
|
|
SCLY1=SCLY
|
|
END IF
|
|
200 CONTINUE
|
|
AVAB=(ABSO(1)+ABSO(2)+SCAT(1)+SCAT(2))*0.5*RELOP
|
|
IF(NFREQ.LE.2.OR.IMODE.EQ.-1) RETURN
|
|
IF(IMODE.EQ.2) GO TO 225
|
|
C
|
|
C interpolated continuum opacity, emissivity, and scattering
|
|
C for all frequencies
|
|
C
|
|
DO IJ=3,NFREQ
|
|
ABSO(IJ)=FRX1(IJ)*ABSO(2)+FRX2(IJ)*ABSO(1)
|
|
EMIS(IJ)=FRX1(IJ)*EMIS(2)+FRX2(IJ)*EMIS(1)
|
|
SCAT(IJ)=FRX1(IJ)*SCAT(2)+FRX2(IJ)*SCAT(1)
|
|
END DO
|
|
C
|
|
C hydrogen lines -- for IHYL = 0
|
|
C *** calculated only for the first and the last frequency
|
|
C and interpolated hydrogen line opacity and emissivity
|
|
C for all frequencies
|
|
C
|
|
IF(IHYL.EQ.0) THEN
|
|
CALL HYDLIN(ID,1,2,ABLIN,EMLIN)
|
|
DO IJ=M,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+FRX1(IJ)*ABLIN(2)+FRX2(IJ)*ABLIN(1)
|
|
EMIS(IJ)=EMIS(IJ)+FRX1(IJ)*EMLIN(2)+FRX2(IJ)*EMLIN(1)
|
|
END DO
|
|
END IF
|
|
C
|
|
C **** Opacity and emissivity in lines ****
|
|
C
|
|
CALL LINOP(ID,ABLIN,EMLIN,AVAB)
|
|
DO IJ=3,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
C
|
|
C **** Opacity and emissivity in molecular lines ****
|
|
C
|
|
if(ifmol.gt.0) then
|
|
do ilist=1,nmlist
|
|
CALL MOLOP(ID,ABLIN,EMLIN,AVAB,ILIST)
|
|
DO IJ=3,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
end do
|
|
end if
|
|
225 CONTINUE
|
|
C
|
|
C **** Detailed opacity and emissivity in hydrogen lines ****
|
|
C (for IHYL=1)
|
|
C
|
|
IF(IHYL.GT.0.OR.IMODE.EQ.2) THEN
|
|
CALL HYDLIN(ID,M,NFREQ,ABLIN,EMLIN)
|
|
DO IJ=M,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
END IF
|
|
C
|
|
C **** Detailed opacity and emissivity in HE II lines ****
|
|
C (for IHE2L=1)
|
|
C
|
|
IF(IHE2L.GT.0) THEN
|
|
CALL HE2LIN(ID,M,NFREQ,ABLIN,EMLIN)
|
|
DO IJ=M,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
END IF
|
|
C
|
|
C opacity due to detailed photoinization cross-section
|
|
C (from tables; including resonance features)
|
|
C The two routines may be called and correspond to different formats
|
|
C as well as difference in INPUT!
|
|
C
|
|
CALL PHTION(ID,ABSO,EMIS,FREQ,NFREQ)
|
|
CALL PHTX(ID,ABSO,EMIS,FREQ,0)
|
|
C
|
|
if(imode.ge.0) then
|
|
do ij=1,nfreq
|
|
abso(ij)=abso(ij)+scat(ij)
|
|
end do
|
|
end if
|
|
C
|
|
IF(ICONTL.EQ.1) RETURN
|
|
ABSO(1)=ABSO(1)-ABLY1
|
|
EMIS(1)=EMIS(1)-EMLY1
|
|
SCAT(1)=SCAT(1)-SCLY1
|
|
ABSO(2)=ABSO(2)-ABLY
|
|
EMIS(2)=EMIS(2)-EMLY
|
|
SCAT(2)=SCAT(2)-SCLY
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE OPACW(ID,CROSS,ABSO,EMIS,
|
|
* ABSOC,EMISC,SCATC,MODC)
|
|
C ========================================
|
|
C
|
|
C Absorption, emission, and scattering coefficients
|
|
C at depth ID and for several frequencies (some or all)
|
|
C
|
|
C Input: ID - depth index
|
|
C CROSS - two dimensional array of photoionization
|
|
C cross-sections
|
|
C Output: ABSO - array of absorption coefficient
|
|
C EMIS - array of emission coefficient
|
|
C SCAT - array of scattering coefficient (all scattering
|
|
C mechanisms except electron scattering)
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
DIMENSION CROSS(MCROSS,MFRQ)
|
|
DIMENSION ABSO(MFREQ),EMIS(MFREQ),SCAT(MFREQ),
|
|
* ABSOC(MFREQC),EMISC(MFREQC),SCATC(MFREQC),
|
|
* ABLIN(MFREQ),EMLIN(MFREQ),
|
|
* ABL1(MFREQC),EML1(MFREQC),SCL1(MFREQC)
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
common/lasers/lasdel
|
|
PARAMETER (UN=1.,TEN15=1.E-15,CSB=2.0706E-16,CFF=3.694E8)
|
|
C
|
|
IF(IMODE.EQ.-1.AND.ID.NE.IDSTD) RETURN
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
T1=UN/T
|
|
HKT=HK*T1
|
|
TK=HKT/H
|
|
SRT=UN/SQRT(T)
|
|
SGFF=CFF*SRT
|
|
CON=CSB*T1*SRT
|
|
conts=1.e-36/con
|
|
ABLY=0.
|
|
EMLY=0.
|
|
SCLY=0.
|
|
IJ0=2
|
|
IF(NFREQ.EQ.1) IJ0=1
|
|
IF(IMODE.EQ.2) IJ0=NFREQ
|
|
M=3
|
|
C
|
|
C Opacity and emissivity in continuum
|
|
C **** calculated only for the continuum frequencies *****
|
|
C
|
|
DO 200 IJ=1,NFREQC
|
|
FR=FREQC(IJ)
|
|
FR15=FR*TEN15
|
|
BNU=BN*FR15*FR15*FR15
|
|
HKF=HKT*FR
|
|
ABF=0.
|
|
EBF=0.
|
|
AFF=0.
|
|
DO 100 IL=1,NION
|
|
N0I=NFIRST(IL)
|
|
N1I=NLAST(IL)
|
|
NKE=NNEXT(IL)
|
|
XN=POPUL(NKE,ID)
|
|
C
|
|
C Bound-free contribution + possibly
|
|
c pseudo-continuum (accounting for dissolved fraction)
|
|
C
|
|
DO 10 II=N0I,N1I
|
|
SG=0.
|
|
IF(IFWOP(II).LT.0) THEN
|
|
SG=SGMERG(II,ID,FR)
|
|
ELSE
|
|
SG=CROSS(II,IJ)
|
|
IF(INDEXP(II).EQ.5) THEN
|
|
IZZ=IZ(IEL(II))
|
|
FR0=ENION(II)/6.6256E-27
|
|
CALL DWNFR1(FR,FR0,ID,IZZ,DW1)
|
|
SG=SG*DW1
|
|
END IF
|
|
END IF
|
|
ABF=ABF+SG*POPUL(II,ID)
|
|
XX=SG*XN*EXP(ENION(II)*TK)*WOP(II,ID)
|
|
IF(XX.lt.conts) go to 10
|
|
EBF=EBF+XX*CON*G(II)/G(NKE)
|
|
10 CONTINUE
|
|
IT=IFREE(IL)
|
|
IF(IT.EQ.0) GO TO 100
|
|
C
|
|
C Free-free contribution
|
|
C
|
|
IE=IL
|
|
IF(IE.EQ.IELHM) GO TO 65
|
|
CH=IZ(IL)*IZ(IL)
|
|
SF1=CH*XN*SGFF/(FR*FR*FR)
|
|
C
|
|
C The following expression is the so-called modified free-free
|
|
C opacity, ie. allowing for the photoionization from higher,
|
|
C non-explicit, LTE energy levels of the ion IL
|
|
C
|
|
HKFM=HKT*MIN(FF(IL),FR)
|
|
SF2=EXP(HKFM)
|
|
IF(IT.NE.2) GO TO 50
|
|
SG=GFREE(T,FR/CH)
|
|
SF2=SF2+SG-UN
|
|
50 SFF=SF1*SF2
|
|
GO TO 70
|
|
65 SFF=SFFHMI(XN,FR,T)
|
|
70 AFF=AFF+SFF
|
|
100 CONTINUE
|
|
C
|
|
C Additional opacities
|
|
C
|
|
CALL OPADD(0,ID,FR,ABAD,EMAD,SCAD)
|
|
IF(IOPHLI.NE.0) CALL LYMLIN(ID,FR,ABLY,EMLY,SCLY)
|
|
C
|
|
C Total opacity and emissivity
|
|
C
|
|
X=EXP(-HKF)
|
|
X1=UN-X
|
|
BNE=BNU*X*ANE
|
|
ABSOC(IJ)=ABF+ANE*(X1*AFF-X*EBF)+ANE*SIGE+ABAD+ABLY
|
|
EMISC(IJ)=BNE*(AFF+EBF)+EMAD+EMLY
|
|
SCATC(IJ)=SCAD+SCLY
|
|
ABL1(IJ)=ABLY
|
|
EML1(IJ)=EMLY
|
|
SCL1(IJ)=SCLY
|
|
200 CONTINUE
|
|
c
|
|
if(modc.eq.0) return
|
|
c
|
|
IF(NFREQ.LE.2.OR.IMODE.EQ.-1) RETURN
|
|
C
|
|
C interpolated continuum and hydrogen line opacity and emissivity
|
|
C for all frequencies
|
|
C
|
|
DO IJ=1,NFREQ
|
|
IJC=IJCINT(IJ)
|
|
ABSO(IJ)=FRX1(IJ)*ABSOC(IJC)+(1.-FRX1(IJ))*ABSOC(IJC+1)
|
|
EMIS(IJ)=FRX1(IJ)*EMISC(IJC)+(1.-FRX1(IJ))*EMISC(IJC+1)
|
|
SCAT(IJ)=FRX1(IJ)*SCATC(IJC)+(1.-FRX1(IJ))*SCATC(IJC+1)
|
|
END DO
|
|
IF(IMODE.EQ.2) GO TO 225
|
|
C
|
|
C **** Opacity and emissivity in lines ****
|
|
C
|
|
CALL LINOPW(ID,ABLIN,EMLIN)
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
C
|
|
C **** Opacity and emissivity in molecular lines ****
|
|
C
|
|
if(ifmol.gt.0) then
|
|
do ilist=1,nmlist
|
|
CALL MOLOP(ID,ABLIN,EMLIN,AVAB,ILIST)
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
end do
|
|
end if
|
|
225 CONTINUE
|
|
C
|
|
C **** Detailed opacity and emissivity in hydrogen lines ****
|
|
C
|
|
CALL HYDLIW(ID,ABLIN,EMLIN)
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
C
|
|
C **** Detailed opacity and emissivity in HE II lines ****
|
|
C (for IHE2L=1)
|
|
C
|
|
CALL HE2LIW(ID,ABLIN,EMLIN)
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=ABSO(IJ)+ABLIN(IJ)
|
|
EMIS(IJ)=EMIS(IJ)+EMLIN(IJ)
|
|
END DO
|
|
C
|
|
C opacity due to detailed photoinization cross-section
|
|
C (from tables; including resonance features)
|
|
C The two routines may be called and correspond to different formats
|
|
C as well as difference in INPUT!
|
|
C
|
|
CALL PHTION(ID,ABSO,EMIS,FREQ,NFREQ)
|
|
CALL PHTX(ID,ABSO,EMIS,FREQ,0)
|
|
C
|
|
IF(ICONTL.EQ.1) RETURN
|
|
DO IJ=1,NFREQC
|
|
ABSOC(IJ)=ABSOC(IJ)-ABL1(IJ)
|
|
EMISC(IJ)=EMISC(IJ)-EML1(IJ)
|
|
SCATC(IJ)=SCATC(IJ)-SCL1(IJ)
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE OPACON(ID,CROSS,ABSOC,EMISC,SCATC)
|
|
C ============================================
|
|
C
|
|
C Absorption, emission, and scattering coefficients
|
|
C at depth ID and for several frequencies (some or all)
|
|
C
|
|
C Input: ID - depth index
|
|
C CROSS - two dimensional array of photoionization
|
|
C cross-sections
|
|
C Output: ABSO - array of absorption coefficient
|
|
C EMIS - array of emission coefficient
|
|
C SCAT - array of scattering coefficient
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
DIMENSION CROSS(MCROSS,MFRQ)
|
|
DIMENSION ABSOC(MFREQC),EMISC(MFREQC),SCATC(MFREQC)
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/dissol/fropc(mlevel),indexp(mlevel)
|
|
PARAMETER (UN=1.,TEN15=1.E-15,CSB=2.0706E-16,CFF=3.694E8)
|
|
C
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
T1=UN/T
|
|
HKT=HK*T1
|
|
TK=HKT/H
|
|
SRT=UN/SQRT(T)
|
|
SGFF=CFF*SRT
|
|
CON=CSB*T1*SRT
|
|
ABLY=0.
|
|
EMLY=0.
|
|
SCLY=0.
|
|
sce=ane*sige
|
|
C
|
|
C Opacity and emissivity in continuum
|
|
C **** calculated only for the continuum frequencies *****
|
|
C
|
|
DO 200 IJ=1,NFREQC
|
|
FR=FREQC(IJ)
|
|
FR15=FR*TEN15
|
|
BNU=BN*FR15*FR15*FR15
|
|
HKF=HKT*FR
|
|
ABF=0.
|
|
EBF=0.
|
|
AFF=0.
|
|
DO 100 IL=1,NION
|
|
N0I=NFIRST(IL)
|
|
N1I=NLAST(IL)
|
|
NKE=NNEXT(IL)
|
|
XN=POPUL(NKE,ID)
|
|
C
|
|
C Bound-free contribution + possibly
|
|
c pseudo-continuum (accounting for dissolved fraction)
|
|
C
|
|
DO 10 II=N0I,N1I
|
|
SG=0.
|
|
IF(IFWOP(II).LT.0) THEN
|
|
SG=SGMERG(II,ID,FR)
|
|
ELSE
|
|
SG=CROSS(II,IJ)
|
|
if(sg.le.0.) go to 10
|
|
IF(INDEXP(II).EQ.5) THEN
|
|
IZZ=IZ(IEL(II))
|
|
FR0=ENION(II)/6.6256E-27
|
|
CALL DWNFR1(FR,FR0,ID,IZZ,DW1)
|
|
SG=SG*DW1
|
|
END IF
|
|
END IF
|
|
if(popul(ii,id).lt.1.e-20.or.xn.lt.1.e-20) go to 10
|
|
ABF=ABF+SG*POPUL(II,ID)
|
|
XX=SG*XN*EXP(ENION(II)*TK-hkf)*WOP(II,ID)
|
|
ee=exp(enion(ii)*tk-hkf)
|
|
EBF=EBF+XX*CON*G(II)/G(NKE)
|
|
c if(id.eq.1.or.id.eq.50) write(*,*)'opacon',id,ij,ii,
|
|
c * popul(ii,id),sg,abf
|
|
10 CONTINUE
|
|
IT=IFREE(IL)
|
|
IF(IT.EQ.0) GO TO 100
|
|
C
|
|
C Free-free contribution
|
|
C
|
|
IE=IL
|
|
IF(IE.EQ.IELHM) GO TO 65
|
|
CH=IZ(IL)*IZ(IL)
|
|
SF1=CH*XN*SGFF/(FR*FR*FR)
|
|
C
|
|
C The following expression is the so-called modified free-free
|
|
C opacity, ie. allowing for the photoionization from higher,
|
|
C non-explicit, LTE energy levels of the ion IL
|
|
C
|
|
IF(IT.NE.2) GO TO 50
|
|
SG=GFREE(T,FR/CH)
|
|
SF2=SF2+SG-UN
|
|
50 SFF=SF1
|
|
GO TO 70
|
|
65 SFF=SFFHMI(XN,FR,T)
|
|
70 AFF=AFF+SFF
|
|
100 CONTINUE
|
|
C
|
|
C Additional opacities
|
|
C
|
|
CALL OPADD(0,ID,FR,ABAD,EMAD,SCAD)
|
|
IF(IOPHLI.NE.0) CALL LYMLIN(ID,FR,ABLY,EMLY,SCLY)
|
|
C
|
|
C Total opacity and emissivity
|
|
C
|
|
X=EXP(-HKF)
|
|
X1=UN-X
|
|
BNE=BNU*X*ANE
|
|
ABSOC(IJ)=ABF+ANE*(X1*AFF-EBF)+ABAD+ABLY
|
|
EMISC(IJ)=BNE*AFF+BNU*ANE*EBF+EMAD+EMLY
|
|
SCATC(IJ)=SCAD+SCLY+sce
|
|
c if(id.eq.1.or.id.eq.50) write(*,*)'opacon-tot',id,ij,
|
|
c * abf,ane,absoc(ij)
|
|
|
|
200 CONTINUE
|
|
C
|
|
CALL PHTION(ID,ABSOC,EMISC,FREQC,NFREQC)
|
|
CALL PHTX(ID,ABSOC,EMISC,FREQC,1)
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
FUNCTION SGMERG(II,ID,FR)
|
|
C =========================
|
|
C formal routine - taken from TLUSTY, but not used here
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (FRH=3.28805E15, PH2=2.815D29*2., EHB=157802.77355)
|
|
C
|
|
sgmerg=0.
|
|
c if(id.gt.0) return
|
|
IE=IEL(II)
|
|
CH=IZ(IE)*IZ(IE)
|
|
g(ii)=gmer(imrg(ii),id)
|
|
T1=1./TEMP(ID)
|
|
EX=EHB*CH*T1
|
|
II0=NQUANT(II-1)+1
|
|
SUM=0.
|
|
SUD=0.
|
|
DO 10 I=II0,NLMX
|
|
X=I
|
|
XI=1./(X*X)
|
|
FREDG=FRH*CH*XI
|
|
IF(FR.LT.FREDG) GO TO 10
|
|
EXI=EXP(EX*XI)
|
|
S=EXI*WNHINT(I,ID)*XI/X
|
|
SUM=SUM+S
|
|
c SUD=SUD+S*XI
|
|
10 CONTINUE
|
|
SG0=PH2/(FR*FR*FR*G(II))*CH*CH
|
|
SGMERG=SUM*SG0
|
|
c DSG=-SUD*SG0*EX*T1
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
FUNCTION GFREE(T,FR)
|
|
C ====================
|
|
C
|
|
C Hydrogenic free-free Gaunt factor, for temperature T and
|
|
C frequency FR
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
THET=5040.4/T
|
|
IF(THET.LT.4.E-2) THET=4.E-2
|
|
X=FR/2.99793E14
|
|
IF(X.GT.1) GO TO 10
|
|
IF(X.LT.0.2) X=0.2
|
|
GFREE=(1.0823+2.98E-2/THET)+(6.7E-3+1.12E-2/THET)/X
|
|
RETURN
|
|
10 C1=(3.9999187E-3-7.8622889E-5/THET)/THET+1.070192
|
|
C2=(6.4628601E-2-6.1953813E-4/THET)/THET+2.6061249E-1
|
|
C3=(1.3983474E-5/THET+3.7542343E-2)/THET+5.7917786E-1
|
|
C4=3.4169006E-1+1.1852264E-2/THET
|
|
GFREE=((C4/X-C3)/X+C2)/X+C1
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION SFFHMI_old(POPI,FR,T)
|
|
C ==========================
|
|
C
|
|
C Free-free cross section for H- (After Kurucz,1970,SAO 309, P.80)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
SFFHMI_old=(1.3727E-25+(4.3748E-10-2.5993E-7/T)/FR)*POPI/FR
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
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
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION FEAUTR(FREQ,ID)
|
|
C ========================
|
|
C
|
|
C LYMAN-ALPHA STARK BROADENING AFTER N.FEAUTRIER
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION DL(20),F05(20),F10(20),F20(20),F40(20),X(4)
|
|
DATA F05 / 0.0537, 0.0964, 0.1330, 0.3105, 0.4585, 0.6772, 0.8229,
|
|
* 0.8556, 0.9250, 0.9618, 0.9733, 1.1076, 1.0644, 1.0525,
|
|
* 0.8841, 0.8282, 0.7541, 0.7091, 0.7164, 0.7672/
|
|
DATA F10 / 0.1986, 0.2764, 0.3959, 0.5740, 0.7385, 0.9448, 1.0292,
|
|
* 1.0317, 0.9947, 0.8679, 0.8648, 0.9815, 1.0660, 1.0793,
|
|
* 1.0699, 1.0357, 0.9245, 0.8603, 0.8195, 0.7928/
|
|
DATA F20 / 0.4843, 0.5821, 0.7003, 0.8411, 0.9405, 1.0300, 1.0029,
|
|
* 0.9753, 0.8478, 0.6851, 0.6861, 0.8554, 0.9916, 1.0264,
|
|
* 1.0592, 1.0817, 1.0575, 1.0152, 0.9761, 0.9451/
|
|
DATA F40 / 0.7862, 0.8566, 0.9290, 0.9915, 1.0066, 0.9878, 0.8983,
|
|
* 0.8513, 0.6881, 0.5277, 0.5302, 0.6920, 0.8607, 0.9111,
|
|
* 0.9651, 1.0793, 1.1108, 1.1156, 1.1003, 1.0839/
|
|
DATA DL / -150., -120., -90., -60., -40., -20., -10., -8., -4.,
|
|
* -2., 2., 4., 8., 10., 20., 40., 60., 90., 120., 150./
|
|
DLAM=2.997925E18/FREQ-1215.685
|
|
DO 10 I=2,20
|
|
IF(DLAM.LE.DL(I)) GO TO 20
|
|
10 CONTINUE
|
|
I=20
|
|
20 J=I-1
|
|
C=DL(J)-DL(I)
|
|
A=(DLAM-DL(I))/C
|
|
B=(DL(J)-DLAM)/C
|
|
X(1)=F05(J)*A+F05(I)*B
|
|
X(2)=F10(J)*A+F10(I)*B
|
|
X(3)=F20(J)*A+F20(I)*B
|
|
X(4)=F40(J)*A+F40(I)*B
|
|
J=JT(ID)
|
|
Y=TI0(ID)*X(J)+TI1(ID)*X(J-1)+TI2(ID)*X(J-2)
|
|
FEAUTR=0.5*(Y+1.)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HYLSET
|
|
C =================
|
|
C
|
|
C Initialization procedure for treating the hydrogen line opacity
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
DIMENSION ALB(15)
|
|
DATA ALB /656.28,486.13,434.05,410.17,397.01,
|
|
* 388.91,383.54,379.79,377.06,375.02,
|
|
* 373.44,372.19,371.20,370.39,369.72/
|
|
C
|
|
C IHYL=-1 - hydrogen lines are excluded a priori
|
|
C
|
|
IHYL=-1
|
|
if(iath.le.0) return
|
|
IF(FREQ(2).GE.3.28805E15) RETURN
|
|
AL0=2.997925E17/FREQ(1)
|
|
AL1=2.997925E17/FREQ(2)
|
|
IF(AL0.GT.200..AND.AL1.LT.364.6) RETURN
|
|
IF(AL0.GT.560..AND.AL1.LT.580.) RETURN
|
|
IF(AL0.GT.720..AND.AL1.LT.820.3) RETURN
|
|
C
|
|
C otherwise, hydrogen lines are included
|
|
C
|
|
IHYL=0
|
|
M20=40
|
|
IF(AL1.LT.364.6) THEN
|
|
ILOWH=1
|
|
FRION=3.28805E15
|
|
M10=int(SQRT(3.28805E15/ABS(FRION-FREQ(2))))
|
|
IF(FRION.GT.FREQ(1)) M20=int(SQRT(3.28805E15/(FRION-FREQ(1))))
|
|
IHYL=1
|
|
IF(AL0.GT.123.) IHYL=0
|
|
IF(AL0.GT.104..AND.AL1.LT.120.) IHYL=0
|
|
IF(AL0.GT.98.5.AND.AL1.LT.102.) IHYL=0
|
|
IF(IMODE.EQ.2.OR.IHYDPR.NE.0.OR.GRAV.GE.6.) IHYL=1
|
|
ELSE IF(AL1.LT.820.) THEN
|
|
ILOWH=2
|
|
if(vaclim.lt.3600.) then
|
|
FRION=8.2225E14
|
|
M10=int(SQRT(3.289017E15/ABS(FRION-FREQ(2))))
|
|
else
|
|
FRION=8.22013E14
|
|
M10=int(SQRT(3.28805E15/ABS(FRION-FREQ(2))))
|
|
end if
|
|
IF(FRION.GT.FREQ(1)) M20=int(SQRT(3.289017E15/(FRION-FREQ(1))))
|
|
DO 10 I=1,15
|
|
AL=ALB(I)
|
|
IF(AL.LT.AL0-1..OR.AL.GT.AL1+1.) GO TO 10
|
|
IHYL=1
|
|
GO TO 20
|
|
10 CONTINUE
|
|
20 CONTINUE
|
|
IF(IMODE.EQ.2.OR.IHYDPR.NE.0.OR.GRAV.GE.6.) IHYL=1
|
|
ELSE
|
|
ILOWH=3
|
|
IHYL=1
|
|
END IF
|
|
c
|
|
ihyl=1
|
|
c
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HYLSEW(IJ)
|
|
C =====================
|
|
C
|
|
C Initialization procedure for treating the hydrogen line opacity
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
C
|
|
C IHYL=-1 - hydrogen lines are excluded a priori
|
|
C
|
|
IHYLW(IJ)=0
|
|
if(iath.le.0) return
|
|
FR=FREQ(IJ)
|
|
IF(FR.GE.3.28805E15) RETURN
|
|
AL0=2.997925E17/FR
|
|
AL1=AL0
|
|
IF(grav.lt.6.) then
|
|
IF(AL0.GT.160..AND.AL1.LT.364.6) RETURN
|
|
IF(AL0.GT.506..AND.AL1.LT.630.) RETURN
|
|
IF(AL0.GT.680..AND.AL1.LT.820.3) RETURN
|
|
else
|
|
IF(AL0.GT.540..AND.AL1.LT.600.) RETURN
|
|
IF(AL0.GT.720..AND.AL1.LT.820.3) RETURN
|
|
end if
|
|
C
|
|
C otherwise, hydrogen lines are included
|
|
C
|
|
IHYLW(IJ)=1
|
|
M20W(IJ)=40
|
|
IF(AL1.LT.364.6) THEN
|
|
ILOWHW(IJ)=1
|
|
FRION=3.28805E15
|
|
ELSE IF(AL1.LT.820.) THEN
|
|
ILOWHW(IJ)=2
|
|
FRION=8.2225E14
|
|
ELSE IF(AL1.LT.1458.) THEN
|
|
ILOWHW(IJ)=3
|
|
FRION=3.6544142E14
|
|
ELSE IF(AL1.LT.2278.) THEN
|
|
ILOWHW(IJ)=4
|
|
FRION=2.0555837E14
|
|
ELSE IF(AL1.LT.3281.) THEN
|
|
ILOWHW(IJ)=5
|
|
FRION=1.315589E14
|
|
ELSE IF(AL1.LT.4466.) THEN
|
|
ILOWHW(IJ)=6
|
|
FRION=9.136394E13
|
|
ELSE
|
|
ILOWHW(IJ)=7
|
|
FRION=6.7120228E13
|
|
END IF
|
|
IF(FRION.GT.FR) M10W(IJ)=int(SQRT(3.289017E15/ABS(FRION-FR)))
|
|
c WRITE(6,601) ILOWH,M20+1
|
|
c 601 FORMAT(1H0/ ' *** HYDROGEN LINES CONTRIBUTE'/
|
|
c * ' THE NEAREST LINE ON THE SHORT-WAVELENGTH SIDE IS',
|
|
c * I3,' TO ',I3/)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HYDLIN(ID,I0,I1,ABSOH,EMISH)
|
|
C =======================================
|
|
C
|
|
C opacity and emissivity of hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (FRH1=3.28805E15,FRH2=FRH1/4.,UN=1.,SIXTH=1./6.)
|
|
PARAMETER (CPP=4.1412E-16,CPJ=157803.)
|
|
PARAMETER (C00=1.25E-9,CDOP=1.284523E12,CID=0.02654,TWO=2.)
|
|
PARAMETER (CPJ4=CPJ/4.,AL10=2.3025851,CINV=UN/2.997925E18)
|
|
PARAMETER (CID1=0.01497)
|
|
common/quasun/nunalp,nunbet,nungam,nunbal
|
|
common/hhebrd/sthe,nunhhe
|
|
common/gompar/hglim,ihgom
|
|
DIMENSION PJ(40),PRF0(54),OSCH(4,22),
|
|
* ABSO(MFREQ),EMIS(MFREQ),ABSOH(MFREQ),EMISH(MFREQ)
|
|
dimension wlir(15),irlow(15),irupp(15)
|
|
DATA FRH /3.289017E15/
|
|
data wlir/
|
|
* 123680., 75005., 59066., 51273.,190570.,113060.,
|
|
* 87577., 75061.,277960.,162050.,123840.,105010.,
|
|
* 223340.,168760.,141790./
|
|
data irlow/4*6, 4*7, 4*8, 3*9/
|
|
data irupp/7,8,9,10,8,9,10,11,9,10,11,12,11,12,13/
|
|
data nlinir/15/
|
|
c
|
|
DATA INIT /0/
|
|
C
|
|
DO IJ=I0,I1
|
|
ABSOH(IJ)=0.
|
|
EMISH(IJ)=0.
|
|
END DO
|
|
c
|
|
if(iath.le.0.or.rrr(1,1,1).eq.0.) return
|
|
izz=1
|
|
C
|
|
IF(INIT.EQ.0) THEN
|
|
DO I=1,4
|
|
DO J=I+1,22
|
|
CALL STARK0(I,J,IZZ,XK,WL0,FIJ,FIJ0)
|
|
WLINE(I,J)=WL0
|
|
OSCH(I,J)=FIJ+FIJ0
|
|
END DO
|
|
END DO
|
|
INIT=1
|
|
END IF
|
|
DO IJ=I0,I1
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
END DO
|
|
c
|
|
if(ilowh.le.0) return
|
|
c
|
|
T=TEMP(ID)
|
|
T1=UN/T
|
|
SQT=SQRT(T)
|
|
ANE=ELEC(ID)
|
|
ANES=EXP(SIXTH*LOG(ANE))
|
|
TL=LOG10(T)
|
|
ANEL=LOG10(ANE)
|
|
C
|
|
C populations of the first 40 levels of hydrogen
|
|
C
|
|
ANP=POPUL(NKH,ID)
|
|
PP=CPP*ANE*ANP*T1/SQT
|
|
NLH=N1H-N0HN+1
|
|
c if(ifwop(n1h).lt.0) nlh=nlh-1
|
|
nlh=nlh-1
|
|
DO IL=1,50
|
|
X=IL*IL
|
|
IF(IL.LE.NLH) PJ(IL)=POPUL(N0HN+IL-1,ID)
|
|
IF(IL.GT.NLH) PJ(IL)=PP*EXP(CPJ/X*T1)*X*wnhint(il,id)
|
|
END DO
|
|
p2=pp*exp(cpj4*t1)*4.*wnhint(2,id)
|
|
c
|
|
C Frequency- and line-independent parameters for evaluating the
|
|
C asymptotic Stark profile
|
|
C
|
|
F00=C00*ANES*ANES*ANES*ANES
|
|
DOP0=1.E8*SQRT(1.65E8*T+VTURB(ID))
|
|
C
|
|
C -------------------------------------------------------------------
|
|
C overall loop over spectral series (only in the infrared region)
|
|
C -------------------------------------------------------------------
|
|
C
|
|
ISERL=ILOWH
|
|
ISERU=ILOWH
|
|
c
|
|
if(wlam(i0).gt.14000.) iseru=4
|
|
if(wlam(i0).gt.22700.) iseru=5
|
|
if(wlam(i0).gt.32800.) iseru=6
|
|
if(wlam(i0).gt.44660.) iseru=7
|
|
if(wlam(i0).gt.60000.) iserl=4
|
|
|
|
c
|
|
if(iserl.eq.3.and.iseru.eq.3.and.nunbal.gt.0) iserl=2
|
|
DO IJ=I0,I1
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
END DO
|
|
C
|
|
c ========================
|
|
c loop over spectral series
|
|
c ========================
|
|
c
|
|
DO I=ISERL,ISERU
|
|
c
|
|
c skip the following calculations if one uses the Gomez tables
|
|
c
|
|
if(ihgom.gt.0.and.elec(id).gt.hglim) then
|
|
if(i.ge.1.and.i.le.ihgom) then
|
|
call ghydop(id,i0,i1,pj,absoh,emish)
|
|
go to 200
|
|
end if
|
|
end if
|
|
c
|
|
II=I*I
|
|
XII=UN/II
|
|
POPI=PJ(I)
|
|
IF(I.EQ.1) FRH=3.28805E15
|
|
C
|
|
C determination of which hydrogen lines contribute in a current
|
|
C frequency region
|
|
C
|
|
M1=M10
|
|
IF(I.LT.ILOWH) M1=ILOWH-1
|
|
M2=M1+1
|
|
M1=M1-1
|
|
M2=M20+3
|
|
IF(M1.LT.I+1) M1=I+1
|
|
if(grav.gt.3.) then
|
|
m2=m2+5
|
|
m1=m1-3
|
|
if(m1.gt.i+6) m1=m1-3
|
|
end if
|
|
c new!
|
|
if(i.ge.3) then
|
|
m1=i+1
|
|
m2=i+40
|
|
end if
|
|
if(i.ge.4) m2=i+20
|
|
if(i.ge.6) m2=i+10
|
|
C
|
|
C loop over lines which contribute at given wavelength region
|
|
C
|
|
m1=min(m1,40)
|
|
m2=min(m2,40)
|
|
m1=max(m1,i+1)
|
|
m2=max(m2,i+2)
|
|
DO J=M1,M2
|
|
ILINE=0
|
|
JJ=J*J
|
|
XJJ=UN/JJ
|
|
ABTRA=PJ(I)*WNHINT(J,ID)
|
|
EMTRA=PJ(J)*WNHINT(I,ID)*II*XJJ*EXP(CPJ*(XII-XJJ)*T1)
|
|
if(i.le.2.and.j.le.i+2) then
|
|
abtra=pj(i)
|
|
emtra=pj(j)*wnhint(i,id)/wnhint(j,id)*
|
|
* ii*xjj*exp(cpj*(xii-xjj)*t1)
|
|
end if
|
|
IF(I.LE.4.AND.J.LE.22) ILINE=ILIN0(I,J)
|
|
c
|
|
c quasi-molecular opacity for Lyman-alpha and beta satellites
|
|
c
|
|
lquasi=i.eq.1.and.j.eq.2.and.nunalp.gt.0
|
|
lquasi=lquasi.or.i.eq.1.and.j.eq.3.and.nunbet.gt.0
|
|
lquasi=lquasi.or.i.eq.1.and.j.eq.4.and.nungam.gt.0
|
|
lquasi=lquasi.or.i.eq.2.and.j.eq.3.and.nunbal.gt.0
|
|
lalhhe=i.eq.1.and.j.eq.2.and.nunhhe.gt.0
|
|
if(lquasi) then
|
|
DO IJ=I0,I1
|
|
call allard(wlam(ij),popi,anp,sg,i,j)
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END DO
|
|
end if
|
|
ahe=0.
|
|
if(iathe.gt.0) ahe=popul(n0a(iathe),id)
|
|
if(lalhhe.and.ahe.gt.0.) then
|
|
rel=1./6.2831855
|
|
do ij=i0,i1
|
|
call lyahhe(wlam(ij),ahe,sg0)
|
|
sg=sg0*rel
|
|
abso(ij)=abso(ij)+sg*abtra
|
|
emis(ij)=emis(ij)+sg*emtra
|
|
end do
|
|
end if
|
|
c
|
|
c lines with special Stark broadening tables
|
|
c
|
|
IF(ILINE.GT.0) THEN
|
|
FID=CID*OSCH(I,J)
|
|
c
|
|
c switch to either original Lemke/Tremblay of Xenomorph
|
|
c
|
|
if(ilxen(i,j).eq.0.or.anel.lt.xnemin) then
|
|
c
|
|
c original Lemke/Tremblay
|
|
c
|
|
NWL=NWLHYD(ILINE)
|
|
DO IWL=1,NWL
|
|
PRF0(IWL)=PRFHYD(ILINE,ID,IWL)
|
|
END DO
|
|
DO IJ=I0,I1
|
|
AL=ABS(WLAM(IJ)-WLINE(I,J))
|
|
IF(AL.LT.1.E-4) AL=1.E-4
|
|
IF(ILEMKE.EQ.1) AL=AL/F00
|
|
AL=LOG10(AL)
|
|
DO 30 IWL=1,NWL-1
|
|
IW0=IWL
|
|
IF(AL.LE.WLHYD(ILINE,IWL+1)) GO TO 40
|
|
30 CONTINUE
|
|
40 IW1=IW0+1
|
|
PRFF=(PRF0(IW0)*(WLHYD(ILINE,IW1)-AL)+PRF0(IW1)*
|
|
* (AL-WLHYD(ILINE,IW0)))/
|
|
* (WLHYD(ILINE,IW1)-WLHYD(ILINE,IW0))
|
|
SG=EXP(PRFF*AL10)*FID
|
|
sg0=EXP(PRFF*AL10)
|
|
IF(ILEMKE.EQ.1) SG=SG*WLINE(I,J)**2*CINV/F00
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END DO
|
|
c
|
|
c XENOMORPH data for selected lines
|
|
c
|
|
else
|
|
ixn=ilxen(i,j)
|
|
nwl=nwlxen(ixn)
|
|
fr0l=2.997925e18/wline(i,j)
|
|
do ij=i0,i1
|
|
al=(freq(ij)-fr0l)/f00
|
|
if(abs(al).lt.1.e-4) al=1.e-4
|
|
all=log10(abs(al))
|
|
do 51 iwl=1,nwl-1
|
|
iw0=iwl
|
|
if(all.le.alxen(ixn,iwl+1)) go to 52
|
|
51 continue
|
|
52 iw1=iw0+1
|
|
if(al.gt.0.) then
|
|
prff=(prfb(ixn,id,iw0)*(alxen(ixn,iw1)-all)+
|
|
* prfb(ixn,id,iw1)*(all-alxen(ixn,iw0)))/
|
|
* (alxen(ixn,iw1)-alxen(ixn,iw0))
|
|
else
|
|
prff=(prfr(ixn,id,iw0)*(alxen(ixn,iw1)-all)+
|
|
* prfr(ixn,id,iw1)*(all-alxen(ixn,iw0)))/
|
|
* (alxen(ixn,iw1)-alxen(ixn,iw0))
|
|
end if
|
|
sg=exp(prff*al10)*fid/f00
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
end do
|
|
END IF
|
|
|
|
c
|
|
c lines without special Stark broadening tables
|
|
c
|
|
ELSE
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
if((wl0.le.wlam(i1).and.1.25*wl0.gt.wlam(i0)). or.
|
|
* (wl0.ge.wlam(i0).and.0.75*wl0.lt.wlam(i1))) then
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
c FID0=CID1*FIJ0/DOP
|
|
CALL DIVSTR(AD,DIV)
|
|
fac=two
|
|
if(lquasi) fac=un
|
|
DO IJ=I0,I1
|
|
fr=freq(ij)
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
IF(I.LT.5) THEN
|
|
SG=STARKA(BETA,AD,DIV,fac)*FID
|
|
if(iophli.eq.2.and.i.eq.1.and.j.eq.2)
|
|
* sg=sg*feautr(fr,id)
|
|
ELSE
|
|
SG=STARKIR(II,JJ,T,ANE,BETA)*FID
|
|
END IF
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END DO
|
|
END IF
|
|
END IF
|
|
END DO
|
|
END DO
|
|
C
|
|
C far infrared hydrogen lines
|
|
C
|
|
if(wlam(i1).gt.70000.) then
|
|
DO I=8,13
|
|
II=I*I
|
|
XII=UN/II
|
|
DO J=I+1,I+4
|
|
JJ=J*J
|
|
XJJ=UN/JJ
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
if((wl0.le.wlam(i1).and.1.5*wl0.gt.wlam(i0)). or.
|
|
* (wl0.ge.wlam(i0).and.0.5*wl0.lt.wlam(i1))) then
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
CALL DIVSTR(AD,DIV)
|
|
fac=two
|
|
DO IJ=I0,I1
|
|
fr=freq(ij)
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
SG=STARKIR(II,JJ,T,ANE,BETA)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END DO
|
|
END IF
|
|
END DO
|
|
END DO
|
|
END IF
|
|
200 continue
|
|
c
|
|
if(wlam(i1).gt.5.e5) then
|
|
do ij=i0,i1
|
|
fr=freq(ij)
|
|
do ilir=1,nlinir
|
|
if(wlam(ij).gt.wlir(ilir)*0.95.and.
|
|
* wlam(ij).lt.wlir(ilir)*1.05) then
|
|
j=irupp(ilir)
|
|
JJ=J*J
|
|
i=irlow(ilir)
|
|
II=I*I
|
|
XII=UN/II
|
|
XJJ=UN/JJ
|
|
ABTRA=PJ(I)*WNHINT(J,ID)
|
|
EMTRA=PJ(J)*WNHINT(I,ID)*II*XJJ*EXP(CPJ*(XII-XJJ)*T1)
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
CALL DIVSTR(AD,DIV)
|
|
fac=two
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
SG=STARKA(BETA,AD,DIV,fac)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
end if
|
|
end do
|
|
end do
|
|
end if
|
|
C
|
|
C ----------------------------
|
|
C total opacity and emissivity
|
|
C ----------------------------
|
|
C
|
|
DO IJ=I0,I1
|
|
F=FREQ(IJ)
|
|
F15=F*1.E-15
|
|
XKF=EXP(-4.79928e-11*F*T1)
|
|
XKFB=XKF*1.4743E-2*F15*F15*F15
|
|
ABSOH(IJ)=ABSO(IJ)-XKF*EMIS(IJ)
|
|
EMISH(IJ)=XKFB*EMIS(IJ)
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HYDLIW(ID,ABSOH,EMISH)
|
|
C =================================
|
|
C
|
|
C opacity and emissivity of hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (FRH1=3.28805E15,FRH2=FRH1/4.,UN=1.,SIXTH=1./6.)
|
|
PARAMETER (CPP=4.1412E-16,CPJ=157803.)
|
|
PARAMETER (C00=1.25E-9,CDOP=1.284523E12,CID=0.02654,TWO=2.)
|
|
PARAMETER (CPJ4=CPJ/4.,AL10=2.3025851,CINV=UN/2.997925E18)
|
|
PARAMETER (CID1=0.01497)
|
|
common/lasers/lasdel
|
|
common/quasun/nunalp,nunbet,nungam,nunbal
|
|
DIMENSION PJ(40),PRF0(54),OSCH(4,22),
|
|
* ABSO(MFREQ),EMIS(MFREQ),ABSOH(MFREQ),EMISH(MFREQ)
|
|
DATA FRH /3.289017E15/
|
|
DATA INIT /0/
|
|
C
|
|
if(iath.le.0) return
|
|
izz=1
|
|
C
|
|
IF(INIT.EQ.0) THEN
|
|
DO I=1,4
|
|
DO J=I+1,22
|
|
CALL STARK0(I,J,IZZ,XK,WL0,FIJ,FIJ0)
|
|
WLINE(I,J)=WL0
|
|
OSCH(I,J)=FIJ+FIJ0
|
|
END DO
|
|
END DO
|
|
INIT=1
|
|
END IF
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
ABSOH(IJ)=0.
|
|
EMISH(IJ)=0.
|
|
END DO
|
|
T=TEMP(ID)
|
|
T1=UN/T
|
|
SQT=SQRT(T)
|
|
ANE=ELEC(ID)
|
|
ANES=EXP(SIXTH*LOG(ANE))
|
|
C
|
|
C populations of the first 40 levels of hydrogen
|
|
C
|
|
ANP=POPUL(NKH,ID)
|
|
PP=CPP*ANE*ANP*T1/SQT
|
|
NLH=N1H-N0HN+1
|
|
if(ifwop(n1h).lt.0) nlh=nlh-1
|
|
DO 5 IL=1,40
|
|
X=IL*IL
|
|
IF(IL.LE.NLH) PJ(IL)=POPUL(N0HN+IL-1,ID)
|
|
IF(IL.GT.NLH) PJ(IL)=PP*EXP(CPJ/X*T1)*X*wnhint(il,id)
|
|
5 CONTINUE
|
|
p2=pp*exp(cpj4*t1)*4.*wnhint(2,id)
|
|
C
|
|
C Frequency- and line-independent parameters for evaluating the
|
|
C asymptotic Stark profile
|
|
C
|
|
F00=C00*ANES*ANES*ANES*ANES
|
|
DOP0=1.E8*SQRT(1.65E8*T+VTURB(ID))
|
|
C
|
|
C -------------------------------------------------------------------
|
|
C overall loop over spectral series (only in the infrared region)
|
|
C -------------------------------------------------------------------
|
|
C
|
|
DO 300 IJ=1,NFREQ
|
|
IF(IHYLW(IJ).LE.0) GO TO 300
|
|
ISERL=ILOWHW(IJ)
|
|
ISERU=ILOWHW(IJ)
|
|
IF(WLAM(IJ).GT.17000..AND.WLAM(IJ).LE.21000.) THEN
|
|
ISERL=3
|
|
ISERU=4
|
|
ELSE IF(WLAM(IJ).GT.22700..AND.WLAM(IJ).LE.29000.) THEN
|
|
ISERL=4
|
|
ISERU=5
|
|
ELSE IF(WLAM(IJ).GT.32800..AND.WLAM(IJ).LE.37000.) THEN
|
|
ISERL=5
|
|
ISERU=6
|
|
ELSE IF(WLAM(IJ).GT.37000..AND.WLAM(IJ).LE.44600.) THEN
|
|
ISERL=4
|
|
ISERU=6
|
|
ELSE IF(WLAM(IJ).GT.44660..AND.WLAM(IJ).LE.58300.) THEN
|
|
ISERL=5
|
|
ISERU=7
|
|
ELSE IF(WLAM(IJ).GT.58300..AND.WLAM(IJ).LE.72000.) THEN
|
|
ISERL=6
|
|
ISERU=8
|
|
ELSE IF(WLAM(IJ).GT.72000..AND.WLAM(IJ).LE.73800.) THEN
|
|
ISERL=5
|
|
ISERU=8
|
|
ELSE IF(WLAM(IJ).GT.73800..AND.WLAM(IJ).LE.77000.) THEN
|
|
ISERL=5
|
|
ISERU=9
|
|
ELSE IF(WLAM(IJ).GT.77000.) THEN
|
|
ISERL=6
|
|
ISERU=9
|
|
END IF
|
|
C
|
|
if(iserl.eq.3.and.iseru.eq.3.and.nunbal.gt.0) iserl=2
|
|
C
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
DO 200 I=ISERL,ISERU
|
|
II=I*I
|
|
XII=UN/II
|
|
PLTEI=PP*EXP(CPJ*T1*XII)*II
|
|
POPI=PJ(I)
|
|
IF(I.EQ.1) FRH=3.28805E15
|
|
C
|
|
C determination of which hydrogen lines contribute in a current
|
|
C frequency region
|
|
C
|
|
M1=M10W(IJ)
|
|
IF(I.LT.ILOWHW(IJ)) M1=ILOWHW(IJ)-1
|
|
M2=M1+1
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(grav.lt.3..and.M1.LE.16.AND.I.EQ.7) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.14.AND.I.EQ.6) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.12.AND.I.EQ.5) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.10.AND.I.EQ.4) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.8.AND.I.EQ.3) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.6.AND.I.EQ.2) GO TO 10
|
|
IF(grav.lt.3..and.M1.LE.4.AND.I.EQ.1) GO TO 10
|
|
M1=M1-1
|
|
M2=M20W(IJ)+3
|
|
IF(M1.LT.I+1) M1=I+1
|
|
10 CONTINUE
|
|
if(grav.gt.3.) then
|
|
m2=m2+5
|
|
m1=m1-3
|
|
if(m1.gt.i+6) m1=m1-3
|
|
end if
|
|
if(grav.gt.6.) then
|
|
m2=m2+2
|
|
m1=m1-1
|
|
if(m1.gt.i+6) m1=m1-1
|
|
end if
|
|
IF(M1.LT.I+1) M1=I+1
|
|
c if(m2.gt.30) then
|
|
c m2=m20W(IJ)+8
|
|
c m1=m1-4
|
|
c end if
|
|
IF(M2.GT.40) M2=40
|
|
c if(id.eq.1) write(6,666) i,m1,m2
|
|
c 666 format(/' hydrogen lines contribute - ilow=',i2,', iup from ',i3,
|
|
c * ' to',i3/)
|
|
C
|
|
A=0.
|
|
E=0.
|
|
C
|
|
C loop over lines which contribute at given wavelength region
|
|
C
|
|
DO 100 J=M1,M2
|
|
IF(I.EQ.1.AND.J.LE.5.AND.IOPHLI.LT.0) GO TO 100
|
|
ILINE=0
|
|
JJ=J*J
|
|
XJJ=UN/JJ
|
|
ABTRA=PJ(I)*WNHINT(J,ID)
|
|
EMTRA=PJ(J)*WNHINT(I,ID)*II*XJJ*EXP(CPJ*(XII-XJJ)*T1)
|
|
if(i.le.2.and.j.le.i+2) then
|
|
abtra=pj(i)
|
|
emtra=pj(j)*wnhint(i,id)/wnhint(j,id)*
|
|
* ii*xjj*exp(cpj*(xii-xjj)*t1)
|
|
end if
|
|
IF(I.LE.4.AND.J.LE.22) ILINE=ILIN0(I,J)
|
|
c
|
|
c quasi-molecular opacity for Lyman-alpha and beta satellites
|
|
c
|
|
lquasi=i.eq.1.and.j.eq.2.and.nunalp.gt.0
|
|
lquasi=lquasi.or.i.eq.1.and.j.eq.3.and.nunbet.gt.0
|
|
lquasi=lquasi.or.i.eq.1.and.j.eq.4.and.nungam.gt.0
|
|
lquasi=lquasi.or.i.eq.2.and.j.eq.3.and.nunbal.gt.0
|
|
if(lquasi) then
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
CALL DIVSTR(AD,DIV)
|
|
fr=freq(ij)
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
call allard(wlam(ij),popi,anp,sg,i,j)
|
|
sg=sg+STARKA(BETA,AD,DIV,UN)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
go to 100
|
|
end if
|
|
c
|
|
c lines with special Stark broadening tables
|
|
c
|
|
IF(ILINE.GT.0) THEN
|
|
NWL=NWLHYD(ILINE)
|
|
DO IWL=1,NWL
|
|
PRF0(IWL)=PRFHYD(ILINE,ID,IWL)
|
|
END DO
|
|
FID=CID*OSCH(I,J)
|
|
AL=ABS(WLAM(IJ)-WLINE(I,J))
|
|
IF(AL.LT.1.E-4) AL=1.E-4
|
|
IF(ILEMKE.EQ.1) AL=AL/F00
|
|
AL=LOG10(AL)
|
|
DO 30 IWL=1,NWL-1
|
|
IW0=IWL
|
|
IF(AL.LE.WLHYD(ILINE,IWL+1)) GO TO 40
|
|
30 CONTINUE
|
|
40 IW1=IW0+1
|
|
PRFF=(PRF0(IW0)*(WLHYD(ILINE,IW1)-AL)+PRF0(IW1)*
|
|
* (AL-WLHYD(ILINE,IW0)))/
|
|
* (WLHYD(ILINE,IW1)-WLHYD(ILINE,IW0))
|
|
SG=EXP(PRFF*AL10)*FID
|
|
IF(ILEMKE.EQ.1) SG=SG*WLINE(I,J)**2*CINV/F00
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
c
|
|
c lines without special Stark broadening tables
|
|
c
|
|
ELSE
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
CALL DIVSTR(AD,DIV)
|
|
fr=freq(ij)
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
SG=STARKA(BETA,AD,DIV,TWO)*FID
|
|
if(iophli.eq.2.and.i.eq.1.and.j.eq.2)
|
|
* sg=sg*feautr(fr,id)
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END IF
|
|
100 CONTINUE
|
|
200 CONTINUE
|
|
C
|
|
C ----------------------------
|
|
C total opacity and emissivity
|
|
C ----------------------------
|
|
C
|
|
F=FREQ(IJ)
|
|
F15=F*1.E-15
|
|
XKF=EXP(-4.79928e-11*F*T1)
|
|
XKFB=XKF*1.4743E-2*F15*F15*F15
|
|
if(abso(ij).le.0. .and. lasdel) then
|
|
abso(ij)=0.
|
|
emis(ij)=0.
|
|
endif
|
|
ABSOH(IJ)=ABSO(IJ)-XKF*EMIS(IJ)
|
|
EMISH(IJ)=XKFB*EMIS(IJ)
|
|
300 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE HE2SET
|
|
C =================
|
|
C
|
|
C Initialization procedure for treating the He II line opacity
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
dimension frhe(12)
|
|
DATA FRHE /1.3158153D+16, 3.2895381D+15, 1.4624854D+15,
|
|
* 8.2261878D+14, 5.2647201D+14, 3.6560459D+14,
|
|
* 2.6860713D+14, 2.0565220D+14, 1.6249055D+14,
|
|
* 1.3161730D+14, 1.0877460D+14, 9.1400851D+13/
|
|
C
|
|
C IHE2L=-1 - He II lines are excluded a priori
|
|
C
|
|
IHE2L=-1
|
|
IF(IFHE2.LE.0) RETURN
|
|
IF(FREQ(2).GE.1.315812E16) RETURN
|
|
AL0=2.997925E17/FREQ(1)
|
|
AL1=2.997925E17/FREQ(2)
|
|
c IF(AL0.GT.390.) RETURN
|
|
if(grav.lt.6.) then
|
|
IF(AL0.GT.31..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.26.1.AND.AL1.LT.29.8) RETURN
|
|
IF(AL0.GT.24.8.AND.AL1.LT.25.1) RETURN
|
|
IF(AL0.GT.122.1.AND.AL1.LT.162.9) RETURN
|
|
IF(AL0.GT.165.1.AND.AL1.LT.204.9) RETURN
|
|
IF(AL0.GT.109..AND.AL1.LT.120.9) RETURN
|
|
IF(AL0.GT.103..AND.AL1.LT.107.9) RETURN
|
|
IF(AL0.GT.99.7.AND.AL1.LT.102.) RETURN
|
|
IF(AL0.GT.320.8.AND.AL1.LT.364.4) RETURN
|
|
IF(AL0.GT.273.8.AND.AL1.LT.319.8) RETURN
|
|
IF(AL0.GT.251.6.AND.AL1.LT.272.8) RETURN
|
|
IF(AL0.GT.239.0.AND.AL1.LT.250.6) RETURN
|
|
IF(AL0.GT.231.1.AND.AL1.LT.238.0) RETURN
|
|
IF(AL0.GT.225.8.AND.AL1.LT.230.1) RETURN
|
|
else if(grav.lt.7.) then
|
|
IF(AL0.GT.33..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.124.1.AND.AL1.LT.160.9) RETURN
|
|
IF(AL0.GT.167.1.AND.AL1.LT.202.9) RETURN
|
|
IF(AL0.GT.111..AND.AL1.LT.118.9) RETURN
|
|
IF(AL0.GT.322.8.AND.AL1.LT.364.4) RETURN
|
|
IF(AL0.GT.275.8.AND.AL1.LT.317.8) RETURN
|
|
IF(AL0.GT.253.6.AND.AL1.LT.270.8) RETURN
|
|
IF(AL0.GT.241.0.AND.AL1.LT.248.6) RETURN
|
|
IF(AL0.GT.233.1.AND.AL1.LT.236.0) RETURN
|
|
else
|
|
IF(AL0.GT.39..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.134.1.AND.AL1.LT.150.9) RETURN
|
|
IF(AL0.GT.177.1.AND.AL1.LT.202.9) RETURN
|
|
end if
|
|
C
|
|
C otherwise, He II lines are included
|
|
C
|
|
IHE2L=1
|
|
MHE10=60
|
|
MHE20=60
|
|
IF(AL1.LT.91.) THEN
|
|
ILWHE2=1
|
|
ELSE IF(AL0.LT.204.) THEN
|
|
ILWHE2=2
|
|
ELSE IF(AL0.LT.364.) THEN
|
|
ILWHE2=3
|
|
ELSE IF(AL0.LT.569.) THEN
|
|
ILWHE2=4
|
|
ELSE IF(AL0.LT.819.) THEN
|
|
ILWHE2=5
|
|
ELSE IF(AL0.LT.1116.) THEN
|
|
ILWHE2=6
|
|
ELSE IF(AL0.LT.1457.) THEN
|
|
ILWHE2=7
|
|
ELSE IF(AL0.LT.1844.) THEN
|
|
ILWHE2=8
|
|
ELSE IF(AL0.LT.2277.) THEN
|
|
ILWHE2=9
|
|
ELSE IF(AL0.LT.2756.) THEN
|
|
ILWHE2=10
|
|
ELSE IF(AL0.LT.3279.) THEN
|
|
ILWHE2=11
|
|
ELSE
|
|
ILWHE2=12
|
|
END IF
|
|
FRION=FRHE(ILWHE2)
|
|
FR1=FRION*ILWHE2*ILWHE2
|
|
IF(FRION.GT.FREQ(2)) MHE10=int(SQRT(FR1/(FRION-FREQ(2))))
|
|
IF(FRION.GT.FREQ(1)) MHE20=int(SQRT(FR1/(FRION-FREQ(1))) )
|
|
WRITE(6,601) ILWHE2,MHE20+1
|
|
601 FORMAT(1H0/ ' *** HE II LINES CONTRIBUTE'/
|
|
* ' THE NEAREST LINE ON THE SHORT-WAVELENGTH SIDE IS',
|
|
* I3,' TO ',I3/)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE HE2SEW(IJ)
|
|
C =====================
|
|
C
|
|
C Initialization procedure for treating the He II line opacity
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
dimension frhe(12)
|
|
DATA FRHE /1.3158153D+16, 3.2895381D+15, 1.4624854D+15,
|
|
* 8.2261878D+14, 5.2647201D+14, 3.6560459D+14,
|
|
* 2.6860713D+14, 2.0565220D+14, 1.6249055D+14,
|
|
* 1.3161730D+14, 1.0877460D+14, 9.1400851D+13/
|
|
C
|
|
C IHE2L=-1 - He II lines are excluded a priori
|
|
C
|
|
IHE2LW(IJ)=-1
|
|
IF(IFHE2.LE.0) RETURN
|
|
FR=FREQ(IJ)
|
|
AL0=2.997925E17/FR
|
|
AL1=2.997925E17/FR
|
|
if(grav.lt.6.) then
|
|
IF(AL0.GT.31..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.26.1.AND.AL1.LT.29.8) RETURN
|
|
IF(AL0.GT.24.8.AND.AL1.LT.25.1) RETURN
|
|
IF(AL0.GT.122.1.AND.AL1.LT.162.9) RETURN
|
|
IF(AL0.GT.165.1.AND.AL1.LT.204.9) RETURN
|
|
IF(AL0.GT.109..AND.AL1.LT.120.9) RETURN
|
|
IF(AL0.GT.103..AND.AL1.LT.107.9) RETURN
|
|
IF(AL0.GT.99.7.AND.AL1.LT.102.) RETURN
|
|
IF(AL0.GT.320.8.AND.AL1.LT.364.4) RETURN
|
|
IF(AL0.GT.273.8.AND.AL1.LT.319.8) RETURN
|
|
IF(AL0.GT.251.6.AND.AL1.LT.272.8) RETURN
|
|
IF(AL0.GT.239.0.AND.AL1.LT.250.6) RETURN
|
|
IF(AL0.GT.231.1.AND.AL1.LT.238.0) RETURN
|
|
IF(AL0.GT.225.8.AND.AL1.LT.230.1) RETURN
|
|
else if(grav.lt.7.) then
|
|
IF(AL0.GT.33..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.124.1.AND.AL1.LT.160.9) RETURN
|
|
IF(AL0.GT.167.1.AND.AL1.LT.202.9) RETURN
|
|
IF(AL0.GT.111..AND.AL1.LT.118.9) RETURN
|
|
IF(AL0.GT.322.8.AND.AL1.LT.364.4) RETURN
|
|
IF(AL0.GT.275.8.AND.AL1.LT.317.8) RETURN
|
|
IF(AL0.GT.253.6.AND.AL1.LT.270.8) RETURN
|
|
IF(AL0.GT.241.0.AND.AL1.LT.248.6) RETURN
|
|
IF(AL0.GT.233.1.AND.AL1.LT.236.0) RETURN
|
|
else
|
|
IF(AL0.GT.39..AND.AL1.LT.91.1) RETURN
|
|
IF(AL0.GT.134.1.AND.AL1.LT.150.9) RETURN
|
|
IF(AL0.GT.177.1.AND.AL1.LT.202.9) RETURN
|
|
end if
|
|
C
|
|
C otherwise, He II lines are included
|
|
C
|
|
IHE2LW(IJ)=1
|
|
MHE10W(IJ)=60
|
|
MHE20W(IJ)=60
|
|
IF(AL1.LT.91.) THEN
|
|
ILWHEW(IJ)=1
|
|
ELSE IF(AL0.LT.204.) THEN
|
|
ILWHEW(IJ)=2
|
|
ELSE IF(AL0.LT.364.) THEN
|
|
ILWHEW(IJ)=3
|
|
ELSE IF(AL0.LT.569.) THEN
|
|
ILWHEW(IJ)=4
|
|
ELSE IF(AL0.LT.819.) THEN
|
|
ILWHEW(IJ)=5
|
|
ELSE IF(AL0.LT.1116.) THEN
|
|
ILWHEW(IJ)=6
|
|
ELSE IF(AL0.LT.1457.) THEN
|
|
ILWHEW(IJ)=7
|
|
ELSE IF(AL0.LT.1844.) THEN
|
|
ILWHEW(IJ)=8
|
|
ELSE IF(AL0.LT.2277.) THEN
|
|
ILWHEW(IJ)=9
|
|
ELSE IF(AL0.LT.2756.) THEN
|
|
ILWHEW(IJ)=10
|
|
ELSE IF(AL0.LT.3279.) THEN
|
|
ILWHEW(IJ)=11
|
|
ELSE
|
|
ILWHEW(IJ)=12
|
|
END IF
|
|
FRION=FRHE(ILWHEW(IJ))
|
|
FR1=FRION*ILWHEW(IJ)*ILWHEW(IJ)
|
|
IF(FRION.GT.FR) MHE10W(IJ)=int(SQRT(FR1/(FRION-FR)))
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HE2LIN(ID,I0,I1,ABSOH,EMISH)
|
|
C
|
|
C opacity and emissivity of He II lines (these which are not considered
|
|
C explicitly)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (UN=1.,SIXTH=1./6.)
|
|
PARAMETER (CPP=4.1412E-16,CPJ=631479.)
|
|
PARAMETER (C00=1.25E-9,CDOP=1.284523E12,CID=0.02654,TWO=2.)
|
|
PARAMETER (CPJ4=CPJ/4.,AL10=2.3025851,CINV=UN/2.997925E18)
|
|
PARAMETER (CID1=0.01497)
|
|
DIMENSION PJ(80),FRHE(12),OSCHE2(19),PRF0(36),
|
|
* ABSO(MFREQ),EMIS(MFREQ),ABSOH(MFREQ),EMISH(MFREQ)
|
|
COMMON/HE2PRF/PRFHE2(19,MDEPTH,36),WLHE2(19,36),NWLHE2(19),
|
|
* ILHE2(19),IUHE2(19)
|
|
DATA FRHE /1.3158153D+16, 3.2895381D+15, 1.4624854D+15,
|
|
* 8.2261878D+14, 5.2647201D+14, 3.6560459D+14,
|
|
* 2.6860713D+14, 2.0565220D+14, 1.6249055D+14,
|
|
* 1.3161730D+14, 1.0877460D+14, 9.1400851D+13/
|
|
DATA OSCHE2/6.407E-1, 1.506E-1, 5.584E-2, 2.768E-2,
|
|
* 1.604E-2, 1.023E-2, 6.980E-3,
|
|
* 8.421E-1, 3.230E-2, 1.870E-2, 1.196E-2, 8.187E-3,
|
|
* 5.886E-3, 4.393E-3, 3.375E-3, 2.656E-3,
|
|
* 1.038, 1.793E-1, 6.549E-2/
|
|
C
|
|
I=ILWHE2
|
|
izz=2
|
|
DO IJ=I0,I1
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
ABSOH(IJ)=0.
|
|
EMISH(IJ)=0.
|
|
END DO
|
|
T=TEMP(ID)
|
|
T1=UN/T
|
|
SQT=SQRT(T)
|
|
ANE=ELEC(ID)
|
|
ANES=EXP(SIXTH*LOG(ANE))
|
|
C
|
|
C He III populations (either LTE or NLTE, depending on input model)
|
|
C
|
|
IF(IELHE2.GT.0) THEN
|
|
ANP=POPUL(NNEXT(IELHE2),ID)
|
|
NLHE2=NLAST(IELHE2)-NFIRST(IELHE2)+1
|
|
ELSE
|
|
ANP=RRR(ID,3,2)
|
|
NLHE2=0
|
|
END IF
|
|
C
|
|
C populations of the first 60 levels of He II
|
|
C
|
|
PP=CPP*ANE*ANP*T1/SQT
|
|
DO IL=1,60
|
|
X=IL*IL
|
|
IIL=NFIRST(IELHE2)+IL-1
|
|
IF(IL.LE.NLHE2) PJ(IL)=POPUL(IIL,ID)
|
|
IF(IL.GT.NLHE2) PJ(IL)=PP*EXP(CPJ/X*T1)*X*wnhe2(il,id)
|
|
END DO
|
|
C
|
|
C Frequency- and line-independent parameters for evaluating the
|
|
C asymptotic Stark profile
|
|
C
|
|
F00=3.906e-11*ANES*ANES*ANES*ANES
|
|
DOP0=1.E8*SQRT(4.12E7*T+VTURB(ID))
|
|
C
|
|
C -------------------------------------------------------------------
|
|
C overall loop over spectral series (only in the infrared region)
|
|
C -------------------------------------------------------------------
|
|
C
|
|
ISERU=ILWHE2
|
|
IF(ILWHE2.LE.3) THEN
|
|
ISERL=ILWHE2
|
|
ELSE IF(ILWHE2.LE.5) THEN
|
|
ISERL=ILWHE2-1
|
|
ELSE IF(ILWHE2.LE.7) THEN
|
|
ISERL=ILWHE2-2
|
|
ELSE IF(ILWHE2.LE.9) THEN
|
|
ISERL=ILWHE2-3
|
|
ELSE
|
|
ISERL=ILWHE2-4
|
|
END IF
|
|
C
|
|
DO IJ=I0,I1
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
END DO
|
|
C
|
|
DO 200 I=ISERL,ISERU
|
|
II=I*I
|
|
XII=UN/II
|
|
POPI=PJ(I)
|
|
C
|
|
C determination of which He II lines contribute in a current
|
|
C frequency region
|
|
C
|
|
M1=MHE10
|
|
IF(I.LT.ILWHE2.AND.FRHE(I).GT.FREQ(2)) THEN
|
|
M1=int(SQRT(FRHE(I)*II/(FRHE(I)-FREQ(2))))
|
|
END IF
|
|
M2=M1+1
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(grav.lt.6..and.M1.LE.6.AND.I.EQ.2) GO TO 10
|
|
IF(grav.lt.6..and.M1.LE.4.AND.I.EQ.1) GO TO 10
|
|
M1=M1-1
|
|
M2=MHE20+3
|
|
IF(M2.GT.60) M2=60
|
|
10 CONTINUE
|
|
if(grav.gt.6.) then
|
|
m2=m2+5
|
|
m1=m1-3
|
|
if(m1.gt.i+6) m1=m1-3
|
|
end if
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(M2.GT.60) M2=60
|
|
c A=0.
|
|
c E=0.
|
|
C
|
|
C loop over lines which contribute at given wavelength region
|
|
C
|
|
DO 100 J=M1,M2
|
|
ILINE=0
|
|
JJ=J*J
|
|
XJJ=UN/JJ
|
|
ABTRA=PJ(I)*WNHE2(J,ID)
|
|
EMTRA=PJ(J)*WNHE2(I,ID)*II*XJJ*EXP(CPJ*(XII-XJJ)*T1)
|
|
IF(I.LE.2) THEN
|
|
WLIN=227.838/(XII-1./JJ)
|
|
ELSE
|
|
WLIN=227.7776/(XII-1./JJ)
|
|
END IF
|
|
IF(I.EQ.2) THEN
|
|
IF(J.EQ.3.AND.IHE2PR.GT.0) ILINE=1
|
|
ELSE IF(I.EQ.3) THEN
|
|
IF(J.EQ.4.AND.IHE2PR.GT.0) ILINE=8
|
|
IF(J.GT.5.AND.J.LE.10.AND.IHE2PR.GT.0) ILINE=J-3
|
|
ELSE IF(I.EQ.4) THEN
|
|
IF(J.LE.7.AND.IHE2PR.GT.0) ILINE=J+12
|
|
IF(J.GE.8.AND.J.LE.15.AND.IHE2PR.GT.0) ILINE=J+1
|
|
END IF
|
|
IF(ILINE.GT.0) THEN
|
|
NWL=NWLHE2(ILINE)
|
|
DO IWL=1,NWL
|
|
PRF0(IWL)=PRFHE2(ILINE,ID,IWL)
|
|
END DO
|
|
FID=CID*OSCHE2(ILINE)
|
|
DO 50 IJ=I0,I1
|
|
AL=ABS(WLAM(IJ)-WLIN)
|
|
IF(AL.LT.1.E-4) AL=1.E-4
|
|
AL=LOG10(AL)
|
|
DO IWL=1,NWL-1
|
|
IW0=IWL
|
|
IF(AL.LE.WLHE2(ILINE,IWL+1)) GO TO 40
|
|
END DO
|
|
40 IW1=IW0+1
|
|
PRFF=(PRF0(IW0)*(WLHE2(ILINE,IW1)-AL)+PRF0(IW1)*
|
|
* (AL-WLHE2(ILINE,IW0)))/
|
|
* (WLHE2(ILINE,IW1)-WLHE2(ILINE,IW0))
|
|
SG=EXP(PRFF*AL10)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
50 CONTINUE
|
|
ELSE
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
c FID0=CID1*FIJ0/DOP
|
|
CALL DIVHE2(AD,DIV)
|
|
DO IJ=I0,I1
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
SG=STARKA(BETA,AD,DIV,UN)*FID
|
|
c if(fid0.gt.0.) then
|
|
c xd=beta/betad
|
|
c if(xd.lt.5.) sg=sg+exp(-xd*xd)*fid0
|
|
c end if
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END DO
|
|
END IF
|
|
100 CONTINUE
|
|
200 CONTINUE
|
|
C
|
|
C ----------------------------
|
|
C total opacity and emissivity
|
|
C ----------------------------
|
|
C
|
|
DO IJ=I0,I1
|
|
F=FREQ(IJ)
|
|
F15=F*1.E-15
|
|
XKF=EXP(-4.79928e-11*F*T1)
|
|
XKFB=XKF*1.4743E-2*F15*F15*F15
|
|
ABSOH(IJ)=ABSO(IJ)-XKF*EMIS(IJ)
|
|
EMISH(IJ)=XKFB*EMIS(IJ)
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HE2LIW(ID,ABSOH,EMISH)
|
|
C =================================
|
|
C
|
|
C opacity and emissivity of He II lines (these which are not considered
|
|
C explicitly)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (UN=1.,SIXTH=1./6.)
|
|
PARAMETER (CPP=4.1412E-16,CPJ=631479.)
|
|
PARAMETER (C00=1.25E-9,CDOP=1.284523E12,CID=0.02654,TWO=2.)
|
|
PARAMETER (CPJ4=CPJ/4.,AL10=2.3025851,CINV=UN/2.997925E18)
|
|
PARAMETER (CID1=0.01497)
|
|
DIMENSION PJ(80),FRHE(12),OSCHE2(19),PRF0(36),
|
|
* ABSO(MFREQ),EMIS(MFREQ),ABSOH(MFREQ),EMISH(MFREQ)
|
|
COMMON/HE2PRF/PRFHE2(19,MDEPTH,36),WLHE2(19,36),NWLHE2(19),
|
|
* ILHE2(19),IUHE2(19)
|
|
common/lasers/lasdel
|
|
DATA FRHE /1.3158153D+16, 3.2895381D+15, 1.4624854D+15,
|
|
* 8.2261878D+14, 5.2647201D+14, 3.6560459D+14,
|
|
* 2.6860713D+14, 2.0565220D+14, 1.6249055D+14,
|
|
* 1.3161730D+14, 1.0877460D+14, 9.1400851D+13/
|
|
DATA OSCHE2/6.407E-1, 1.506E-1, 5.584E-2, 2.768E-2,
|
|
* 1.604E-2, 1.023E-2, 6.980E-3,
|
|
* 8.421E-1, 3.230E-2, 1.870E-2, 1.196E-2, 8.187E-3,
|
|
* 5.886E-3, 4.393E-3, 3.375E-3, 2.656E-3,
|
|
* 1.038, 1.793E-1, 6.549E-2/
|
|
C
|
|
I=ILWHE2
|
|
izz=2
|
|
DO IJ=1,NFREQ
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
ABSOH(IJ)=0.
|
|
EMISH(IJ)=0.
|
|
END DO
|
|
IF(IFHE2.LE.0) RETURN
|
|
T=TEMP(ID)
|
|
T1=UN/T
|
|
SQT=SQRT(T)
|
|
ANE=ELEC(ID)
|
|
ANES=EXP(SIXTH*LOG(ANE))
|
|
C
|
|
C He III populations (either LTE or NLTE, depending on input model)
|
|
C
|
|
IF(IELHE2.GT.0) THEN
|
|
ANP=POPUL(NNEXT(IELHE2),ID)
|
|
NLHE2=NLAST(IELHE2)-NFIRST(IELHE2)+1
|
|
ELSE
|
|
ANP=RRR(ID,3,2)
|
|
NLHE2=0
|
|
END IF
|
|
C
|
|
C populations of the first 60 levels of He II
|
|
C
|
|
PP=CPP*ANE*ANP*T1/SQT
|
|
DO IL=1,60
|
|
X=IL*IL
|
|
IIL=NFIRST(IELHE2)+IL-1
|
|
IF(IL.LE.NLHE2) PJ(IL)=POPUL(IIL,ID)
|
|
IF(IL.GT.NLHE2) PJ(IL)=PP*EXP(CPJ/X*T1)*X*wnhe2(il,id)
|
|
END DO
|
|
C
|
|
C Frequency- and line-independent parameters for evaluating the
|
|
C asymptotic Stark profile
|
|
C
|
|
F00=3.906e-11*ANES*ANES*ANES*ANES
|
|
DOP0=1.E8*SQRT(4.12E7*T+VTURB(ID))
|
|
C
|
|
C -------------------------------------------------------------------
|
|
C overall loop over spectral series (only in the infrared region)
|
|
C -------------------------------------------------------------------
|
|
C
|
|
DO 300 IJ=1,NFREQ
|
|
ABSO(IJ)=0.
|
|
EMIS(IJ)=0.
|
|
IF(IHE2LW(IJ).le.0) GO TO 300
|
|
I=ILWHEW(IJ)
|
|
FR=FREQ(IJ)
|
|
ISERU=ILWHEW(IJ)
|
|
IF(ILWHEW(IJ).LE.3) THEN
|
|
ISERL=ILWHEW(IJ)
|
|
ELSE IF(ILWHEW(IJ).LE.5) THEN
|
|
ISERL=ILWHEW(IJ)-1
|
|
ELSE IF(ILWHEW(IJ).LE.7) THEN
|
|
ISERL=ILWHEW(IJ)-2
|
|
ELSE IF(ILWHEW(IJ).LE.9) THEN
|
|
ISERL=ILWHEW(IJ)-3
|
|
ELSE
|
|
ISERL=ILWHEW(IJ)-4
|
|
END IF
|
|
C
|
|
C
|
|
DO 200 I=ISERL,ISERU
|
|
II=I*I
|
|
XII=UN/II
|
|
PLTEI=PP*EXP(CPJ*T1*XII)*II
|
|
POPI=PJ(I)
|
|
C
|
|
C determination of which He II lines contribute in a current
|
|
C frequency region
|
|
C
|
|
M1=MHE10W(IJ)
|
|
IF(I.LT.ILWHEW(IJ).AND.FRHE(I).GT.FR) THEN
|
|
M1=int(SQRT(FRHE(I)*II/(FRHE(I)-FR)))
|
|
END IF
|
|
M2=M1+1
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(grav.lt.6..and.M1.LE.6.AND.I.EQ.2) GO TO 10
|
|
IF(grav.lt.6..and.M1.LE.4.AND.I.EQ.1) GO TO 10
|
|
M1=M1-1
|
|
M2=MHE20W(IJ)+3
|
|
IF(M2.GT.60) M2=60
|
|
10 CONTINUE
|
|
if(grav.gt.6.) then
|
|
m2=m2+5
|
|
m1=m1-3
|
|
if(m1.gt.i+6) m1=m1-3
|
|
end if
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(M2.GT.60) M2=60
|
|
C
|
|
C loop over lines which contribute at given wavelength region
|
|
C
|
|
DO 100 J=M1,M2
|
|
ILINE=0
|
|
JJ=J*J
|
|
XJJ=UN/JJ
|
|
ABTRA=PJ(I)*WNHE2(J,ID)
|
|
EMTRA=PJ(J)*WNHE2(I,ID)*II*XJJ*EXP(CPJ*(XII-XJJ)*T1)
|
|
IF(I.LE.2) THEN
|
|
WLIN=227.838/(XII-1./JJ)
|
|
ELSE
|
|
WLIN=227.7776/(XII-1./JJ)
|
|
END IF
|
|
IF(I.EQ.2) THEN
|
|
IF(J.EQ.3.AND.IHE2PR.GT.0) ILINE=1
|
|
ELSE IF(I.EQ.3) THEN
|
|
IF(J.EQ.4.AND.IHE2PR.GT.0) ILINE=8
|
|
IF(J.GT.5.AND.J.LE.10.AND.IHE2PR.GT.0) ILINE=J-3
|
|
ELSE IF(I.EQ.4) THEN
|
|
IF(J.LE.7.AND.IHE2PR.GT.0) ILINE=J+12
|
|
IF(J.GE.8.AND.J.LE.15.AND.IHE2PR.GT.0) ILINE=J+1
|
|
END IF
|
|
IF(ILINE.GT.0) THEN
|
|
NWL=NWLHE2(ILINE)
|
|
DO IWL=1,NWL
|
|
PRF0(IWL)=PRFHE2(ILINE,ID,IWL)
|
|
END DO
|
|
FID=CID*OSCHE2(ILINE)
|
|
AL=ABS(WLAM(IJ)-WLIN)
|
|
IF(AL.LT.1.E-4) AL=1.E-4
|
|
AL=LOG10(AL)
|
|
DO IWL=1,NWL-1
|
|
IW0=IWL
|
|
IF(AL.LE.WLHE2(ILINE,IWL+1)) GO TO 40
|
|
END DO
|
|
40 IW1=IW0+1
|
|
PRFF=(PRF0(IW0)*(WLHE2(ILINE,IW1)-AL)+PRF0(IW1)*
|
|
* (AL-WLHE2(ILINE,IW0)))/
|
|
* (WLHE2(ILINE,IW1)-WLHE2(ILINE,IW0))
|
|
SG=EXP(PRFF*AL10)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
ELSE
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
FXK=F00*XKIJ
|
|
FXK1=UN/FXK
|
|
DOP=DOP0/WL0
|
|
DBETA=WL0*WL0*CINV*FXK1
|
|
BETAD=DOP*DBETA
|
|
FID=CID*FIJ*DBETA
|
|
CALL DIVHE2(AD,DIV)
|
|
BETA=ABS(WLAM(IJ)-WL0)*FXK1
|
|
SG=STARKA(BETA,AD,DIV,UN)*FID
|
|
ABSO(IJ)=ABSO(IJ)+SG*ABTRA
|
|
EMIS(IJ)=EMIS(IJ)+SG*EMTRA
|
|
END IF
|
|
100 CONTINUE
|
|
200 CONTINUE
|
|
C
|
|
C ----------------------------
|
|
C total opacity and emissivity
|
|
C ----------------------------
|
|
C
|
|
F=FREQ(IJ)
|
|
F15=F*1.E-15
|
|
XKF=EXP(-4.79928e-11*F*T1)
|
|
XKFB=XKF*1.4743E-2*F15*F15*F15
|
|
ABSOH(IJ)=ABSO(IJ)-XKF*EMIS(IJ)
|
|
EMISH(IJ)=XKFB*EMIS(IJ)
|
|
300 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE STARK0(I,J,IZZ,XKIJ,WL0,FIJ,FIJ0)
|
|
C
|
|
C Auxiliary procedure for evaluating the approximate Stark profile
|
|
C of hydrogen lines - sets up necessary frequency independent
|
|
C parameters
|
|
C
|
|
C Input: I - principal quantum number of the lower level
|
|
C J - principal quantum number of the upper level
|
|
C IZZ - ionic charge (IZZ=1 for hydrogen, etc.)
|
|
C Output: XKIJ - coefficients K(i,j) for the Hotzmark profile;
|
|
C exact up to j=6, asymptotic for higher j
|
|
C WL0 - wavelength of the line i-j
|
|
C FIJ - Stark f-value for the line i-j
|
|
C FIJ0 - f-value for the undisplaced component of the line
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (RYD1=911.763811,RYD2=911.495745,CXKIJ=5.5E-5)
|
|
PARAMETER (WI1=911.753578, WI2=227.837832)
|
|
PARAMETER (UN=1.,TEN=10.,TWEN=20.,HUND=100.)
|
|
DIMENSION FSTARK(10,4),XKIJT(5,4),FOSC0(10,4),FADD(5,5)
|
|
DATA XKIJT/3.56E-4,5.23E-4,1.09E-3,1.49E-3,2.25E-3,.0125,.0177,
|
|
* .028,.0348,.0493,.124,.171,.223,.261,.342,.683,.866,1.02,1.19,
|
|
* 1.46/
|
|
DATA FSTARK/ .1387, .0791, .02126, .01394, .00642,
|
|
* 4.814E-3, 2.779E-3, 2.216E-3, 1.443E-3, 1.201E-3,
|
|
* .3921, .1193, .03766, .02209, .01139,
|
|
* 8.036E-3, 5.007E-3, 3.85E-3, 2.658E-3, 2.151E-3,
|
|
* .6103, .1506, .04931, .02768, .01485,
|
|
* .01023, 6.588E-3, 4.996E-3, 3.524E-3, 2.838E-3,
|
|
* .8163, .1788, .05985, .03189, .01762,
|
|
* .01196, 7.825E-3, 5.882E-3, 4.233E-3, 3.375E-3/
|
|
DATA FOSC0 / 0.27746, 0., 0.00773, 0., 0.00134, 0.,
|
|
* 0.000404, 0., 0.000162, 0.,
|
|
* 0.24869, 0., 0.00701, 0., 0.00131, 0.,
|
|
* 0.000422, 0., 0.000177, 0.,
|
|
* 0.23175, 0., 0.00653, 0., 0.00118, 0.,
|
|
* 0.000392, 0., 0.000169, 0.,
|
|
* 0.22148, 0.0005, 0.00563, 0.0004, 0.00108, 0.,
|
|
* 0.000362, 0., 0.000159, 0./
|
|
DATA FADD / 1.231, 0.2069, 7.448E-2, 3.645E-2, 2.104E-2,
|
|
* 1.424, 0.2340, 8.315E-2, 4.038E-2, 2.320E-2,
|
|
* 1.616, 0.2609, 9.163E-2, 4.416E-2, 2.525E-2,
|
|
* 1.807, 0.2876, 1.000E-1, 4.787E-2, 2.724E-2,
|
|
* 1.999, 0.3143, 1.083E-1, 5.152E-2, 2.918E-2/
|
|
C
|
|
II=I*I
|
|
JJ=J*J
|
|
JMIN=J-I
|
|
IF(JMIN.LE.5.and.i.le.4) THEN
|
|
XKIJ=XKIJT(JMIN,I)
|
|
ELSE
|
|
XKIJ=CXKIJ*(II*JJ)*(II*JJ)/(JJ-II)
|
|
END IF
|
|
IF(I.LE.4) THEN
|
|
IF(JMIN.LE.10) THEN
|
|
FIJ=FSTARK(JMIN,I)
|
|
FIJ0=FOSC0(JMIN,I)
|
|
ELSE
|
|
CFIJ=((TWEN*I+HUND)*J/(I+TEN)/(JJ-II))
|
|
FIJ=FSTARK(10,I)*CFIJ*CFIJ*CFIJ
|
|
FIJ0=0.
|
|
END IF
|
|
ELSE IF(I.LE.9) THEN
|
|
IF(JMIN.LE.5) THEN
|
|
FIJ=FADD(JMIN,I-4)
|
|
FIJ0=0.
|
|
ELSE
|
|
CFIJ=((TEN*I+25.)*J/(I+5.)/(JJ-II))
|
|
FIJ=FADD(5,I-4)*CFIJ*CFIJ*CFIJ
|
|
FIJ0=0.
|
|
END IF
|
|
ELSE
|
|
CFIJ=UN*J/(JJ-II)
|
|
FIJ=1.96*I*CFIJ*CFIJ*CFIJ
|
|
FIJ0=0.
|
|
END IF
|
|
C
|
|
C wavelength with an explicit correction to the air wavalength
|
|
C
|
|
w0=wi1
|
|
if(izz.eq.2) w0=wi2
|
|
WL0=W0/(UN/II-UN/JJ)
|
|
IF(WL0.GT.vaclim) THEN
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0/(XN1*1.D-6+UN)
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION STARKA(BETA,A,DIV,FAC)
|
|
C
|
|
C Approximate expressions for the hydrogen Stark profile
|
|
C
|
|
C Input: BETA - delta lambda in beta units,
|
|
C BETAD - Doppler width in beta units
|
|
C A - auxiliary parameter
|
|
C A=1.5*LOG(BETAD)-1.671
|
|
C DIV - only for A > 1; division point between Doppler
|
|
C and asymptotic Stark wing, expressed in units
|
|
C of betad.
|
|
C DIV = solution of equation
|
|
C exp(-(beta/betad)**2)/betad/sqrt(pi)=
|
|
C = 1.5*FAC*beta**-5/2
|
|
C (ie. the point where Doppler profile is equal to
|
|
C the asymptotic Holtsmark)
|
|
C In order to save computer time, the division point
|
|
C DIV is calculated in advance by routine DIVSTR.
|
|
C FAC - factor by which the Holtsmark profile is to be
|
|
C multiplied to get total Stark Profile
|
|
C FAC should be taken to 2 for hydrogen, (and =1
|
|
C for He II)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (F0=-0.5758228,F1=0.4796232,F2=0.07209481/2.,AL=1.26)
|
|
PARAMETER (SD=0.5641895,SLO=-2.5,TRHA=1.5,BL1=1.52,BL2=8.325)
|
|
PARAMETER (SAC=0.07966/2.)
|
|
XD=BETA/BETAD
|
|
C
|
|
C for a > 1 Doppler core + asymptotic Holtzmark wing with division
|
|
C point DIV
|
|
C
|
|
IF(A.GT.AL) THEN
|
|
IF(XD.LE.DIV) THEN
|
|
STARKA=SD*EXP(-XD*XD)/BETAD
|
|
ELSE
|
|
STARKA=TRHA*FAC*EXP(SLO*LOG(BETA))
|
|
END IF
|
|
ELSE
|
|
C
|
|
C empirical formula for a < 1
|
|
C
|
|
IF(BETA.LE.BL1) THEN
|
|
STARKA=SAC*FAC
|
|
ELSE IF(BETA.LT.BL2) THEN
|
|
XL=LOG(BETA)
|
|
FL=(F0*XL+F1)*XL
|
|
STARKA=F2*FAC*EXP(FL)
|
|
ELSE
|
|
STARKA=TRHA*FAC*EXP(SLO*LOG(BETA))
|
|
END IF
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C *******************************************************************
|
|
C *******************************************************************
|
|
C
|
|
FUNCTION STARKIR(II,JJ,T,ANE,BETA)
|
|
C ==================================
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (PI=3.14159265,PI2=2.*PI,
|
|
* OS0=0.026564,RYD=3.28805E15,
|
|
* Y2CON=PI*PI*0.5/OS0/CL)
|
|
C
|
|
DEL=BETA/DBETA
|
|
HKT=HK/T
|
|
XII=II
|
|
XJJ=JJ
|
|
XX=XII/XJJ
|
|
DD=2.*XJJ*RYD/DEL
|
|
Y1=XJJ*DEL*0.5*HKT
|
|
Y2=Y2CON*DEL**2/ANE
|
|
QSTAT=1.5+.5*(Y1**2-1.384)/(Y1**2+1.384)
|
|
QIMPA=0.
|
|
IF(Y1.GT.8..OR.Y1.GE.Y2) GO TO 10
|
|
EXY2=0.
|
|
IF(Y2.LE.8.) EXY2=EXPINT(Y2)
|
|
QIMPA=1.438*SQRT(Y1*(1.-XX))*(.4*EXP(-Y1)+EXPINT(Y1)-.5*EXY2)
|
|
10 IF(BETA.GT.20.) GO TO 20
|
|
PROF=8./(80.+BETA**3)
|
|
RATIO=QSTAT+QIMPA
|
|
GO TO 30
|
|
20 PROF=1.5/BETA/BETA/SQRT(BETA)
|
|
DIOI=PI2*1.48E-25*DD*ANE*(SQRT(DD)*
|
|
* (1.3*QSTAT+.3*QIMPT)-3.9*RYD*HKT)
|
|
RATIO=QSTAT*MIN(1.+DIOI,1.25)+QIMPA
|
|
30 STARKIR=PROF*RATIO
|
|
RETURN
|
|
END
|
|
|
|
|
|
C
|
|
C *******************************************************************
|
|
C *******************************************************************
|
|
C
|
|
SUBROUTINE DIVSTR(A,DIV)
|
|
C ==============================
|
|
C
|
|
C Auxiliary procedure for STARKA - determination of the division
|
|
C point between Doppler and asymptotic Stark profiles
|
|
C
|
|
C Input: BETAD - Doppler width in beta units
|
|
C Output: A - auxiliary parameter
|
|
C A=1.5*LOG(BETAD)-1.671
|
|
C DIV - only for A > 1; division point between Doppler
|
|
C and asymptotic Stark wing, expressed in units
|
|
C of betad.
|
|
C DIV = solution of equation
|
|
C exp(-(beta/betad)**2)/betad/sqrt(pi)=3*beta**-5/2
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (UN=1.,TWO=2.,UNQ=1.25,UNH=1.5,TWH=2.5,FO=4.,FI=5.)
|
|
PARAMETER (CA=1.671,BL=5.821,AL=1.26,CX=0.28,DX=0.0001)
|
|
C
|
|
A=UNH*LOG(BETAD)-CA
|
|
IF(BETAD.LT.BL) RETURN
|
|
IF(A.GE.AL) THEN
|
|
X=SQRT(A)*(UN+UNQ*LOG(A)/(FO*A-FI))
|
|
ELSE
|
|
X=SQRT(CX+A)
|
|
ENDIF
|
|
DO I=1,5
|
|
XN=X*(UN-(X*X-TWH*LOG(X)-A)/(TWO*X*X-TWH))
|
|
IF(ABS(XN-X).LE.DX) GO TO 20
|
|
X=XN
|
|
END DO
|
|
20 DIV=X
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE HYDINI
|
|
C
|
|
C Initializes necessary arrays for evaluating hydrogen line profiles
|
|
C from the Lemke, Tremblay-Bergeron, or Schoening-Butler tables
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
c DIMENSION WLINE(4,22)
|
|
DIMENSION IILW(100),IIUP(100)
|
|
CHARACTER*1 CHAR
|
|
DATA INIT /0/
|
|
C
|
|
IF(INIT.EQ.0) THEN
|
|
DO I=1,4
|
|
DO J=I+1,22
|
|
CALL STARK0(I,J,IZZ,XK,WL0,FIJ,FIJ0)
|
|
WLINE(I,J)=WL0
|
|
c OSCH(I,J)=FIJ+FIJ0
|
|
END DO
|
|
END DO
|
|
INIT=1
|
|
END IF
|
|
DO I=1,4
|
|
DO J=1,22
|
|
ILIN0(I,J)=0
|
|
END DO
|
|
END DO
|
|
C
|
|
C --------------------------------------------
|
|
C Schoening-Butler tables - for IHYDPR < 0
|
|
C --------------------------------------------
|
|
C
|
|
IF(IHYDPR.LT.0) THEN
|
|
IHYDPR=67
|
|
ILEMKE=0
|
|
NLINE=12
|
|
c
|
|
OPEN(UNIT=IHYDPR,FILE='./data/hydprf.dat',STATUS='OLD')
|
|
write(6,*) ' reading Schoening-Butler tables'
|
|
C
|
|
DO I=1,12
|
|
READ(IHYDPR,500)
|
|
END DO
|
|
DO 100 ILINE=1,NLINE
|
|
C
|
|
C read the tables, which have to be stored in file
|
|
C unit IHYDPR (which is the input parameter in the progarm)
|
|
C
|
|
READ(IHYDPR,501) I,J
|
|
IF(ILINE.EQ.12) J=10
|
|
WL0=WLINE(I,J)
|
|
ILIN0(I,J)=ILINE
|
|
READ(IHYDPR,*) CHAR,NWL,(WL(I,ILINE),I=1,NWL)
|
|
READ(IHYDPR,*) CHAR,NT,(XT(I,ILINE),I=1,NT)
|
|
READ(IHYDPR,*) CHAR,NE,(XNE(I,ILINE),I=1,NE)
|
|
READ(IHYDPR,500)
|
|
NWLH(ILINE)=NWL
|
|
NWLHYD(ILINE)=NWL
|
|
NTH(ILINE)=NT
|
|
NEH(ILINE)=NE
|
|
C
|
|
DO I=1,NWL
|
|
IF(WL(I,ILINE).LT.1.E-4) WL(I,ILINE)=1.E-4
|
|
WLHYD(ILINE,I)=LOG10(WL(I,ILINE))
|
|
END DO
|
|
C
|
|
DO IE=1,NE
|
|
DO IT=1,NT
|
|
READ(IHYDPR,500)
|
|
READ(IHYDPR,*) (PRF(IWL,IT,IE,ILINE),IWL=1,NWL)
|
|
END DO
|
|
END DO
|
|
C
|
|
C coefficient for the asymptotic profile is determined from
|
|
C the input data
|
|
C
|
|
XCLOG=PRF(NWL,1,1,ILINE)+2.5*LOG10(WL(NWL,ILINE))+31.5304-
|
|
* XNE(1,ILINE)-2.*LOG10(WL0)
|
|
XKLOG=0.6666667*(XCLOG-0.176)
|
|
XK=EXP(XKLOG*2.3025851)
|
|
C
|
|
DO ID=1,ND
|
|
C
|
|
C temperature is modified in order to account for the
|
|
C effect of turbulent velocity on the Doppler width
|
|
C
|
|
T=TEMP(ID)+6.06E-9*VTURB(ID)
|
|
ANE=ELEC(ID)
|
|
TL=LOG10(T)
|
|
ANEL=LOG10(ANE)
|
|
F00=1.25E-9*ANE**0.666666667
|
|
FXK=F00*XK
|
|
DOP=1.E8/WL0*SQRT(1.65E8*T)
|
|
DBETA=WL0*WL0/2.997925E18/FXK
|
|
BETAD=DBETA*DOP
|
|
C
|
|
C interpolation to the actual values of temperature and electron
|
|
C density. The result is stored at array PRFHYD, having indices
|
|
C ILINE (line number: 1 for L-alpha,..., 4 for H-delta, etc.);
|
|
C 5 for H-alpha,..., 8 for H-delta, etc.)
|
|
C ID - depth index
|
|
C IWL - wavelength index
|
|
C
|
|
DO IWL=1,NWL
|
|
CALL INTHYD(PROF,TL,ANEL,IWL,ILINE)
|
|
PRFHYD(ILINE,ID,IWL)=PROF
|
|
END DO
|
|
END DO
|
|
100 CONTINUE
|
|
CLOSE(IHYDPR)
|
|
C
|
|
500 FORMAT(1X)
|
|
501 FORMAT(12X,I1,9X,I1)
|
|
C
|
|
IHYDPR=-IHYDPR
|
|
RETURN
|
|
END IF
|
|
C
|
|
C ---------------------------------
|
|
C read Lemke or Tremblay tables
|
|
C ---------------------------------
|
|
C
|
|
if(ihydpr.lt.20) ihydpr=ihydpr+20
|
|
if(ihydpr.eq.21) then
|
|
open(unit=ihydpr,file='./data/lemke.dat',status='old')
|
|
write(6,641) ihydpr
|
|
else if(ihydpr.eq.22) then
|
|
open(unit=ihydpr,file='./data/tremblay.dat',status='old')
|
|
write(6,642) ihydpr
|
|
end if
|
|
641 format(' -----------'/
|
|
* ' reading Lemke tables; ihydpr =',i3,/
|
|
* ' -----------')
|
|
642 format(' -----------'/
|
|
* ' reading Tremblay tables; ihydpr =',i3,/
|
|
* ' -----------')
|
|
C
|
|
ILEMKE=1
|
|
READ(IHYDPR,*) NTAB
|
|
write(6,611) ntab
|
|
611 format(' ntab',i4)
|
|
DO ITAB=1,NTAB
|
|
ILINEB=ILINE
|
|
READ(IHYDPR,*) NLLY
|
|
DO ILI=1,NLLY
|
|
ILINE=ILINE+1
|
|
READ(IHYDPR,*) I,J,ALMIN,ANEMIN,TMIN,DLA,DLE,DLT,
|
|
* NWL,NE,NT
|
|
WL0=WLINE(I,J)
|
|
ILIN0(I,J)=ILINE
|
|
NWLH(ILINE)=NWL
|
|
NWLHYD(ILINE)=NWL
|
|
NTH(ILINE)=NT
|
|
NEH(ILINE)=NE
|
|
iilw(iline)=i
|
|
iiup(iline)=j
|
|
DO IWL=1,NWL
|
|
WL(IWL,ILINE)=ALMIN+(IWL-1)*DLA
|
|
WLHYD(ILINE,IWL)=WL(IWL,ILINE)
|
|
WL(IWL,ILINE)=EXP(2.3025851*WL(IWL,ILINE))
|
|
END DO
|
|
DO INE=1,NE
|
|
XNE(INE,ILINE)=ANEMIN+(INE-1)*DLE
|
|
END DO
|
|
DO IT=1,NT
|
|
XT(IT,ILINE)=TMIN+(IT-1)*DLT
|
|
END DO
|
|
END DO
|
|
c
|
|
DO ILI=1,NLLY
|
|
ILNE=ILINEB+ILI
|
|
NWL=NWLH(ILNE)
|
|
READ(IHYDPR,500)
|
|
DO INE=1,NEH(ILNE)
|
|
DO IT=1,NTH(ILNE)
|
|
READ(IHYDPR,*) QLT,(PRF(IWL,IT,INE,ILNE),IWL=1,NWL)
|
|
END DO
|
|
END DO
|
|
C
|
|
i=iilw(ilne)
|
|
j=iiup(ilne)
|
|
DO ID=1,ND
|
|
CALL HYDTAB(I,J,ID)
|
|
END DO
|
|
END DO
|
|
END DO
|
|
NLIHYD=ILNE
|
|
CLOSE(IHYDPR)
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE HYDTAB(I,J,ID)
|
|
C
|
|
C interpolated hydrogen line broadening table for line I->J and
|
|
C for parameters (TEMP, ELEC) at depth ID
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
C
|
|
ILINE=ILIN0(I,J)
|
|
IF(ILINE.EQ.0) RETURN
|
|
WL0=WLINE(I,J)
|
|
NWL=NWLH(ILINE)
|
|
C
|
|
C coefficient for the asymptotic profile is determined from
|
|
C the input data
|
|
C
|
|
if(id.eq.1) then
|
|
XCLOG=PRF(NWL,1,1,ILINE)+2.5*WLHYD(ILINE,NWL)-0.477121
|
|
XKLOG=0.6666667*XCLOG
|
|
XK=EXP(XKLOG*2.3025851)
|
|
end if
|
|
C
|
|
C temperature is modified in order to account for the
|
|
C effect of turbulent velocity on the Doppler width
|
|
C
|
|
T=TEMP(ID)+6.06E-9*VTURB(ID)
|
|
ANE=ELEC(ID)
|
|
TL=LOG10(T)
|
|
ANEL=LOG10(ANE)
|
|
F00=1.25E-9*ANE**0.666666667
|
|
FXK=F00*XK
|
|
DOP=1.E8/WL0*SQRT(1.65E8*T)
|
|
DBETA=WL0*WL0/2.997925E18/FXK
|
|
BETAD=DBETA*DOP
|
|
C
|
|
C interpolation to the actual values of temperature and electron
|
|
C density. The result is stored at array PRFHYD, having indices
|
|
C ILINE - line number
|
|
C ID - depth index
|
|
C IWL - wavelength index
|
|
C
|
|
DO IWL=1,NWL
|
|
CALL INTHYD(PROF,TL,ANEL,IWL,ILINE)
|
|
PRFHYD(ILINE,ID,IWL)=PROF
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE INTHYD(W0,X0,Z0,IWL,ILINE)
|
|
C
|
|
C Interpolation in temperature and electron density from the
|
|
C hydrogen odening tables to the actual valus of
|
|
C temperature and electron density
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (TWO=2.)
|
|
DIMENSION ZZ(3),XX(3),WX(3),WZ(3)
|
|
C
|
|
NX=3
|
|
NZ=3
|
|
NT=NTH(ILINE)
|
|
NE=NEH(ILINE)
|
|
BETA=WL(IWL,ILINE)/FXK
|
|
IF(ILEMKE.EQ.1) THEN
|
|
BETA=WL(IWL,ILINE)/XK
|
|
NX=2
|
|
NZ=2
|
|
END IF
|
|
C
|
|
C for values lower than the lowest grid value of electron density
|
|
C the profiles are determined by the approximate expression
|
|
C (see STARKA); not by an extrapolation in the HYD tables which may
|
|
C be very inaccurate
|
|
C
|
|
IF(Z0.LT.XNE(1,ILINE)*0.99.OR.Z0.GT.XNE(NE,ILINE)*1.01) THEN
|
|
CALL DIVSTR(A,DIV)
|
|
W0=STARKA(BETA,A,DIV,TWO)*DBETA
|
|
W0=LOG10(W0)
|
|
GO TO 500
|
|
END IF
|
|
C
|
|
C Otherwise, one interpolates (or extrapolates for higher than the
|
|
C highes grid value of electron density) in the HYD tables
|
|
C
|
|
DO IZZ=1,NE-1
|
|
IPZ=IZZ
|
|
IF(Z0.LE.XNE(IZZ+1,ILINE)) GO TO 20
|
|
END DO
|
|
20 N0Z=IPZ-NZ/2+1
|
|
IF(N0Z.LT.1) N0Z=1
|
|
IF(N0Z.GT.NE-NZ+1) N0Z=NE-NZ+1
|
|
N1Z=N0Z+NZ-1
|
|
C
|
|
DO 300 IZZ=N0Z,N1Z
|
|
I0Z=IZZ-N0Z+1
|
|
ZZ(I0Z)=XNE(IZZ,ILINE)
|
|
C
|
|
C Likewise, the approximate expression instead of extrapolation
|
|
C is used for higher that the highest grid value of temperature,
|
|
C if the Doppler width expressed in beta units (BETAD) is
|
|
C sufficiently large (> 10)
|
|
C
|
|
IF(X0.GT.1.01*XT(NT,ILINE).AND.BETAD.GT.10.) THEN
|
|
CALL DIVSTR(A,DIV)
|
|
W0=STARKA(BETA,A,DIV,TWO)*DBETA
|
|
W0=LOG10(W0)
|
|
GO TO 500
|
|
END IF
|
|
C
|
|
C Otherwise, normal inter- or extrapolation
|
|
C
|
|
C Both interpolations (in T as well as in electron density) are
|
|
C by default the quadratic interpolations in logarithms
|
|
C
|
|
DO IX=1,NT-1
|
|
IPX=IX
|
|
IF(X0.LE.XT(IX+1,ILINE)) GO TO 40
|
|
END DO
|
|
40 N0X=IPX-NX/2+1
|
|
IF(N0X.LT.1) N0X=1
|
|
IF(N0X.GT.NT-NX+1) N0X=NT-NX+1
|
|
N1X=N0X+NX-1
|
|
DO IX=N0X,N1X
|
|
I0=IX-N0X+1
|
|
XX(I0)=XT(IX,ILINE)
|
|
WX(I0)=PRF(IWL,IX,IZZ,ILINE)
|
|
END DO
|
|
IF(WX(1).LT.-99..OR.WX(2).LT.-99..OR.WX(3).LT.-99.) THEN
|
|
CALL DIVSTR(A,DIV)
|
|
W0=STARKA(BETA,A,DIV,TWO)*DBETA
|
|
W0=LOG10(W0)
|
|
GO TO 500
|
|
ELSE
|
|
WZ(I0Z)=YINT(XX,WX,X0)
|
|
END IF
|
|
300 CONTINUE
|
|
W0=YINT(ZZ,WZ,Z0)
|
|
500 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION YINT(XL,YL,XL0)
|
|
C
|
|
C Quadratic interpolation routine
|
|
C
|
|
C Input: XL - array of x
|
|
C YL - array of f(x)
|
|
C XL0 - the point x(0) to which one interpolates
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION XL(3),YL(3)
|
|
A0=(XL(2)-XL(1))*(XL(3)-XL(2))*(XL(3)-XL(1))
|
|
A1=(XL0-XL(2))*(XL0-XL(3))*(XL(3)-XL(2))
|
|
A2=(XL0-XL(1))*(XL(3)-XL0)*(XL(3)-XL(1))
|
|
A3=(XL0-XL(1))*(XL0-XL(2))*(XL(2)-XL(1))
|
|
YINT=(YL(1)*A1+YL(2)*A2+YL(3)*A3)/A0
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE HE1INI
|
|
C =================
|
|
C
|
|
C Initializes necessary arrays for evaluating the He I line
|
|
C absorption profiles using data calculated by Barnard, Cooper
|
|
C and Smith JQSRT 14, 1025, 1974 (for 4471)
|
|
C or Shamey, unpublished PhD thesis, 1969 (for other lines)
|
|
C
|
|
C This procedure is quite analogous to HYDINI for hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
COMMON/PROHE1/PRFHE1(50,4,8,3),DLMHE1(50,8,3),XNEHE1(8),
|
|
* NWLAM(8,4)
|
|
COMMON/PRO447/PRF447(80,4,7),DLM447(80,7),XNE447(7)
|
|
DATA NT /4/
|
|
C
|
|
IH=67
|
|
OPEN(UNIT=IH,FILE='./data/he1prf.dat',STATUS='OLD')
|
|
C
|
|
C read the Barnard, Cooper, Smith tables for He I 4471 line,
|
|
C which have to be stored in file unit IH
|
|
C
|
|
NE=7
|
|
DO IE=1,NE
|
|
READ(IH,501) IL,WL0,IE1,XXNE,NWL
|
|
NWLAM(IE,1)=NWL
|
|
XNE447(IE)=LOG10(XXNE)
|
|
DO I=1,NWL
|
|
READ(IH,502) DLM447(I,IE),
|
|
* (PRF447(I,IT,IE),IT=1,NT)
|
|
END DO
|
|
END DO
|
|
C
|
|
C read Shamey's tables for He I 4387, 4026, and 4922 lines
|
|
C which have to be stored in file unit IH
|
|
C
|
|
NE=8
|
|
DO ILN=1,3
|
|
DO IE=1,NE
|
|
READ(IH,501) IL,WL0,IE1,XXNE,NWL
|
|
NWLAM(IE,ILN+1)=NWL
|
|
XNEHE1(IE)=LOG10(XXNE)
|
|
DO I=1,NWL
|
|
READ(IH,*) DLMHE1(I,IE,ILN),
|
|
* (PRFHE1(I,IT,IE,ILN),IT=1,NT)
|
|
END DO
|
|
END DO
|
|
END DO
|
|
CLOSE(IH)
|
|
C
|
|
501 FORMAT(/9X,I2,7X,F10.3,13X,I2,6X,E8.1,7X,I3/)
|
|
502 FORMAT(5E10.2)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
FUNCTION WTOT(T,ANE,ID,ILINE)
|
|
C =============================
|
|
C
|
|
C Evaluates the total (electron + ion) impact Stark width
|
|
C for four HeI lines
|
|
C After Griem (1974); and Barnard, Cooper, Smith (1974) JQSRT 14,
|
|
C 1025 for the 4471 line
|
|
C
|
|
C Input: T - temperature
|
|
C ANE - electron density
|
|
C ID - depth index
|
|
C ILINE - index of the line ( = 1 for 4471,
|
|
C = 2 for 4387,
|
|
C = 3 for 4026,
|
|
C = 4 for 4922)
|
|
C Output: WTOT - Stark width in Angstroms
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION ALPH0(4,4),W0(4,4),ALAM0(4)
|
|
DATA ALPH0 / 0.107, 0.119, 0.134, 0.154,
|
|
* 0.206, 0.235, 0.272, 0.317,
|
|
* 0.172, 0.193, 0.218, 0.249,
|
|
* 0.121, 0.136, 0.157, 0.184/
|
|
DATA W0 / 1.460, 1.269, 1.079, 0.898,
|
|
* 6.130, 5.150, 4.240, 3.450,
|
|
* 4.040, 3.490, 2.960, 2.470,
|
|
* 2.312, 1.963, 1.624, 1.315/
|
|
DATA ALAM0 / 4471.50, 4387.93, 4026.20, 4921.93/
|
|
C
|
|
I=JT(ID)
|
|
ALPHA=(TI0(ID)*ALPH0(I,ILINE)+TI1(ID)*ALPH0(I-1,ILINE)+
|
|
* TI2(ID)*ALPH0(I-2,ILINE))*(ANE*1.E-13)**0.25
|
|
WE= (TI0(ID)*W0(I,ILINE)+TI1(ID)*W0(I-1,ILINE)+
|
|
* TI2(ID)*W0(I-2,ILINE))*ANE*1.E-16
|
|
F0=1.884E19/ALAM0(ILINE)/ALAM0(ILINE)
|
|
SIG=(4.32E-5*WE/SQRT(T)*F0/ANE**0.3333)**0.3333
|
|
WTOT=WE*(1.+1.36/SIG*ALPHA**0.8889)
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
FUNCTION EXTPRF(DLAM,IT,ILINE,ANEL,DLAST,PLAST)
|
|
C ===============================================
|
|
C
|
|
C Extrapolation in wavelengths in Shamey, or Barnard, Cooper,
|
|
C Smith tables
|
|
C Special formula suggested by Cooper
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION W0(4,4)
|
|
DATA W0 / 1.460, 1.269, 1.079, 0.898,
|
|
* 6.130, 5.150, 4.240, 3.450,
|
|
* 4.040, 3.490, 2.960, 2.470,
|
|
* 2.312, 1.963, 1.624, 1.315/
|
|
C
|
|
WE=W0(IT,ILINE)*EXP(ANEL*2.3025851)*1.E-16
|
|
DLASTA=ABS(DLAST)
|
|
D52=DLASTA*DLASTA*SQRT(DLASTA)
|
|
F=D52*(PLAST-WE/3.14159/DLAST/DLAST)
|
|
EXTPRF=(WE/3.14159+F/SQRT(ABS(DLAM)))/DLAM/DLAM
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
FUNCTION PHE1(ID,FREQ,ILINE)
|
|
C ============================
|
|
C
|
|
C Absorption profile for four lines of He I, given by
|
|
C Barnard, Cooper, Smith (1974) JQSRT 14, 1025 for the 4471 line;
|
|
C Shamey (1969) PhD thesis, for other lines
|
|
C
|
|
C Input: ID - depth index
|
|
C FREQ - frequency
|
|
C ILINE - index of the line ( = 1 for 4471,
|
|
C = 2 for 4387,
|
|
C = 3 for 4026,
|
|
C = 4 for 4922)
|
|
C
|
|
C Output: PHE1 - profile coefficient in frequency units,
|
|
C normalized to sqrt(pi) [not unity]
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (NT=4)
|
|
COMMON/PROHE1/PRFHE1(50,NT,8,3),DLMHE1(50,8,3),XNEHE1(8),
|
|
* NWLAM(8,NT)
|
|
COMMON/PRO447/PRF447(80,NT,7),DLM447(80,7),XNE447(7)
|
|
DIMENSION WLAM0(4),XT0(NT),XX(3),WX(3),YY(2),PP(2),ZZ(3),WZ(3)
|
|
DATA WLAM0 / 4471.50, 4387.93, 4026.20, 4921.93/
|
|
DATA XT0/ 3.699, 4.000, 4.301, 4.602/
|
|
C
|
|
C temperature is modified in order to account for the
|
|
C effect of turbulent velocity on the Doppler width
|
|
C
|
|
T=TEMP(ID)+2.42E-8*VTURB(ID)
|
|
TL=LOG10(T)
|
|
ANE=ELEC(ID)
|
|
ANEL=LOG10(ANE)
|
|
ALAM=2.997925E18/FREQ
|
|
DLAM=ALAM-WLAM0(ILINE)
|
|
DOPL=SQRT(4.125E7*T)*WLAM0(ILINE)/2.997925E10
|
|
C
|
|
IF(TL.GT.XT0(NT)+0.1) GO TO 5
|
|
IF(ILINE.EQ.1.AND.ANEL.GE.XNE447(1)) GO TO 10
|
|
IF(ILINE.NE.1.AND.ANEL.GE.XNEHE1(1)) GO TO 10
|
|
C
|
|
C isolated line approximation for low electron densities
|
|
C
|
|
5 A=WTOT(T,ANE,ID,ILINE)/DOPL
|
|
V=ABS(DLAM)/DOPL
|
|
V1=ABS(ALAM-4471.682)/DOPL
|
|
PHE1=VOIGTK(A,V)
|
|
IF(ILINE.EQ.1) PHE1=(8.*PHE1+VOIGTK(A,V1))/9.
|
|
RETURN
|
|
C
|
|
C otherwise, interpolation (or extrapolation) in tables
|
|
C
|
|
10 NX=3
|
|
NZ=3
|
|
NY=2
|
|
NE=8
|
|
ILNE=ILINE-1
|
|
IF(ILINE.EQ.1) NE=7
|
|
C
|
|
C Interpolation in electron density
|
|
C
|
|
DO JZ=1,NE-1
|
|
IPZ=JZ
|
|
IF(ILINE.EQ.1.AND.ANEL.LE.XNE447(JZ+1)) GO TO 30
|
|
IF(ILINE.NE.1.AND.ANEL.LE.XNEHE1(JZ+1)) GO TO 30
|
|
END DO
|
|
30 N0Z=IPZ-NZ/2+1
|
|
IF(N0Z.LT.1) N0Z=1
|
|
IF(N0Z.GT.NE-NZ+1) N0Z=NE-NZ+1
|
|
N1Z=N0Z+NZ-1
|
|
DO 300 JZ=N0Z,N1Z
|
|
I0Z=JZ-N0Z+1
|
|
IF(ILINE.EQ.1) ZZ(I0Z)=XNE447(JZ)
|
|
IF(ILINE.NE.1) ZZ(I0Z)=XNEHE1(JZ)
|
|
C
|
|
C Interpolation in temperature
|
|
C
|
|
DO IX=1,NT-1
|
|
IPX=IX
|
|
IF(TL.LE.XT0(IX+1)) GO TO 50
|
|
END DO
|
|
50 N0X=IPX-NX/2+1
|
|
IF(N0X.LT.1) N0X=1
|
|
IF(N0X.GT.NT-NX+1) N0X=NT-NX+1
|
|
N1X=N0X+NX-1
|
|
DO 200 IX=N0X,N1X
|
|
I0X=IX-N0X+1
|
|
XX(I0X)=XT0(IX)
|
|
C
|
|
C Interpolation in wavelength
|
|
C
|
|
C 1. For delta lambda beyond tabulated values - special
|
|
C extrapolation (Cooper's suggestion)
|
|
C
|
|
NLST=NWLAM(JZ,ILINE)
|
|
IF(ILINE.EQ.1) THEN
|
|
D1=DLM447(1,JZ)
|
|
D2=DLM447(NLST,JZ)
|
|
IF(DLAM.LT.D1) THEN
|
|
PRF0=EXTPRF(DLAM,IX,ILINE,ZZ(I0Z),D1,PRF447(1,IX,JZ))
|
|
GO TO 150
|
|
ELSE IF(DLAM.GT.D2) THEN
|
|
PRF0=EXTPRF(DLAM,IX,ILINE,ZZ(I0Z),D2,
|
|
* PRF447(NLST,IX,JZ))
|
|
GO TO 150
|
|
END IF
|
|
ELSE
|
|
D1=DLMHE1(1,JZ,ILNE)
|
|
D2=DLMHE1(NLST,JZ,ILNE)
|
|
IF(DLAM.LT.D1) THEN
|
|
PRF0=EXTPRF(DLAM,IX,ILINE,ZZ(I0Z),D1,
|
|
* PRFHE1(1,IX,JZ,ILNE))
|
|
GO TO 150
|
|
ELSE IF(DLAM.GT.D2) THEN
|
|
PRF0=EXTPRF(DLAM,IX,ILINE,ZZ(I0Z),D2,
|
|
* PRFHE1(NLST,IX,JZ,ILNE))
|
|
GO TO 150
|
|
END IF
|
|
END IF
|
|
C
|
|
C normal linear interpolation in wavelength
|
|
C (for 4471, linear interpolation in logarithms)
|
|
C
|
|
DO IY=1,NLST-1
|
|
IPY=IY
|
|
IF(ILINE.EQ.1.AND.DLAM.LE.DLM447(IY+1,JZ)) GO TO 70
|
|
IF(ILINE.NE.1.AND.DLAM.LE.DLMHE1(IY+1,JZ,ILNE))
|
|
* GO TO 70
|
|
END DO
|
|
70 N0Y=IPY-NY/2+1
|
|
IF(N0Y.LT.1) N0Y=1
|
|
IF(N0Y.GT.NLST-NY+1) N0Y=NLST-NY+1
|
|
N1Y=N0Y+NY-1
|
|
DO IY=N0Y,N1Y
|
|
I0=IY-N0Y+1
|
|
IF(ILINE.EQ.1) YY(I0)=DLM447(IY,JZ)
|
|
IF(ILINE.EQ.1) PP(I0)=LOG(PRF447(IY,IX,JZ))
|
|
IF(ILINE.NE.1) YY(I0)=DLMHE1(IY,JZ,ILNE)
|
|
IF(ILINE.NE.1) PP(I0)=PRFHE1(IY,IX,JZ,ILNE)
|
|
END DO
|
|
IF(ILINE.NE.1) THEN
|
|
WX(I0X)=(PP(2)*(DLAM-YY(1))+PP(1)*(YY(2)-DLAM))/
|
|
* (YY(2)-YY(1))
|
|
ELSE
|
|
WX(I0X)=(PP(2)*(DLAM-YY(1))+PP(1)*(YY(2)-DLAM))/
|
|
* (YY(2)-YY(1))
|
|
WX(I0X)=EXP(WX(I0X))
|
|
END IF
|
|
GO TO 200
|
|
150 WX(I0X)=PRF0
|
|
200 CONTINUE
|
|
WZ(I0Z)=YINT(XX,WX,TL)
|
|
300 CONTINUE
|
|
W0=YINT(ZZ,WZ,ANEL)
|
|
PHE1=W0*DOPL*1.772454
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
SUBROUTINE HE2INI
|
|
C =================
|
|
C
|
|
C Initializes necessary arrays for evaluating the He II line
|
|
C absorption profiles using data calculated by Schoening and
|
|
C Butler
|
|
C
|
|
C This procedure is quite analogous to HYDINI for hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
COMMON/HE2PRF/PRFHE2(19,MDEPTH,36),WLHE2(19,36),NWLHE2(19),
|
|
* ILHE2(19),IUHE2(19)
|
|
COMMON/HE2DAT/WL2(36,19),XT2(6),XNE2(11,19),PRF2(36,6,11),
|
|
* NWL2,NT2,NE2
|
|
DATA NLINE1 /19/
|
|
C
|
|
IH=67
|
|
OPEN(UNIT=IH,FILE='./data/he2prf.dat',STATUS='OLD')
|
|
C
|
|
DO ILINE=1,NLINE1
|
|
C
|
|
C read the Schoening and Butler tables, which have to be stored
|
|
C in file he23prf.dat
|
|
C
|
|
READ(IH,501) ILHE2(ILINE),IUHE2(ILINE)
|
|
IF(ILHE2(ILINE).LE.2) THEN
|
|
WL00=227.838
|
|
ELSE
|
|
WL00=227.7776
|
|
END IF
|
|
WL0=WL00/(1./ILHE2(ILINE)**2-1./IUHE2(ILINE)**2)
|
|
READ(IH,*) NWL2,(WL2(I,ILINE),I=1,NWL2)
|
|
READ(IH,503) NT2,(XT2(I),I=1,NT2)
|
|
READ(IH,504) NE2,(XNE2(I,ILINE),I=1,NE2)
|
|
READ(IH,500)
|
|
NWLHE2(ILINE)=NWL2
|
|
C
|
|
DO I=1,NWL2
|
|
IF(WL2(I,ILINE).LT.1.E-4) WL2(I,ILINE)=1.E-4
|
|
WLHE2(ILINE,I)=LOG10(WL2(I,ILINE))
|
|
END DO
|
|
C
|
|
DO IE=1,NE2
|
|
DO IT=1,NT2
|
|
READ(IH,500)
|
|
READ(IH,505) (PRF2(IWL,IT,IE),IWL=1,NWL2)
|
|
END DO
|
|
END DO
|
|
C
|
|
C coefficient for the asymptotic profile is determined from
|
|
C the input data
|
|
C
|
|
XCLOG=PRF2(NWL2,1,1)+2.5*LOG10(WL2(NWL2,ILINE))+31.831-
|
|
* XNE2(1,ILINE)-2.*LOG10(WL0)
|
|
XKLOG=0.6666667*(XCLOG-0.176)
|
|
XK=EXP(XKLOG*2.3025851)
|
|
DO ID=1,ND
|
|
T=TEMP(ID)+2.42E-8*VTURB(ID)
|
|
ANE=ELEC(ID)
|
|
TL=LOG10(T)
|
|
ANEL=LOG10(ANE)
|
|
F00=1.25E-9*ANE**0.666666667
|
|
FXK=F00*XK
|
|
DOP=1.E8/WL0*SQRT(4.12E7*T)
|
|
DBETA=WL0*WL0/2.997925E18/FXK
|
|
BETAD=DBETA*DOP
|
|
C
|
|
C interpolation to the actual values of temperature and electron
|
|
C density. The result is stored at array PRFHE2, which has indices
|
|
C ILINE - index of line
|
|
C ID - depth index
|
|
C IWL - wavelength index (notice that the wavelength grid may
|
|
C generally be different for different lines
|
|
C
|
|
DO IWL=1,NWL2
|
|
CALL INTHE2(PROF,TL,ANEL,IWL,ILINE)
|
|
PRFHE2(ILINE,ID,IWL)=PROF
|
|
END DO
|
|
END DO
|
|
END DO
|
|
CLOSE(IH)
|
|
C
|
|
500 FORMAT(1X)
|
|
501 FORMAT(//14X,I2,9X,I2/)
|
|
c 502 FORMAT(2X,I4,1P6E10.3,4(/5X,0P6F10.4)/5X,5F10.4)
|
|
503 FORMAT(2X,I4,F10.3,5F12.3)
|
|
504 FORMAT(2X,I4,F10.2,5F12.2/4X,5F12.2)
|
|
505 FORMAT(10F8.3)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INTHE2(W0,X0,Z0,IWL,ILINE)
|
|
C =====================================
|
|
C
|
|
C Interpolation in temperature and electron density from the
|
|
C Schoening and Butler tables for He II lines to the actual
|
|
C actual values of temperature and electron density
|
|
C
|
|
C This procedure is quite analogous to INTHYD for hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (UN=1.)
|
|
COMMON/HE2DAT/WL2(36,19),XT2(6),XNE2(11,19),PRF2(36,6,11),
|
|
* NWL2,NT2,NE2
|
|
DIMENSION ZZ(3),XX(3),WX(3),WZ(3)
|
|
C
|
|
NX=3
|
|
NZ=3
|
|
C
|
|
C for values lower than the lowest grid value of electron density
|
|
C the profiles are determined by the approximate expression
|
|
C (see STARKA); not by an extrapolation in the tables which may
|
|
C be very inaccurate
|
|
C
|
|
IF(Z0.LT.XNE2(1,ILINE)*0.99.OR.Z0.GT.XNE2(NE2,ILINE)*1.01) THEN
|
|
CALL DIVHE2(A,DIV)
|
|
W0=STARKA(WL2(IWL,ILINE)/FXK,A,DIV,UN)*DBETA
|
|
W0=LOG10(W0)
|
|
GO TO 500
|
|
END IF
|
|
C
|
|
C Otherwise, one interpolates (or extrapolates for higher than the
|
|
C highes grid value of electron density) in the Schoening and
|
|
C Butler tables
|
|
C
|
|
DO 10 IZZ=1,NE2-1
|
|
IPZ=IZZ
|
|
IF(Z0.LE.XNE2(IZZ+1,ILINE)) GO TO 20
|
|
10 CONTINUE
|
|
20 N0Z=IPZ-NZ/2+1
|
|
IF(N0Z.LT.1) N0Z=1
|
|
IF(N0Z.GT.NE2-NZ+1) N0Z=NE2-NZ+1
|
|
N1Z=N0Z+NZ-1
|
|
C
|
|
DO 300 IZZ=N0Z,N1Z
|
|
I0Z=IZZ-N0Z+1
|
|
ZZ(I0Z)=XNE2(IZZ,iline)
|
|
C
|
|
C Likewise, the approximate expression instead of extrapolation
|
|
C is used for higher that the highest grid value of temperature,
|
|
C if the Doppler width expressed in beta units (BETAD) is
|
|
C sufficiently large (> 10)
|
|
C
|
|
IF(X0.GT.1.01*XT2(NT2).AND.BETAD.GT.10.) THEN
|
|
W0=STARKA(WL2(IWL,ILINE)/FXK,A,DIV,UN)*DBETA
|
|
W0=LOG10(W0)
|
|
GO TO 500
|
|
END IF
|
|
C
|
|
C Otherwise, normal inter- or extrapolation
|
|
C
|
|
C Both interpolations (in T as well as in electron density) are
|
|
C by default the quadratic interpolations in logarithms
|
|
C
|
|
DO 30 IX=1,NT2-1
|
|
IPX=IX
|
|
IF(X0.LE.XT2(IX+1)) GO TO 40
|
|
30 CONTINUE
|
|
40 N0X=IPX-NX/2+1
|
|
IF(N0X.LT.1) N0X=1
|
|
IF(N0X.GT.NT2-NX+1) N0X=NT2-NX+1
|
|
N1X=N0X+NX-1
|
|
DO 200 IX=N0X,N1X
|
|
I0=IX-N0X+1
|
|
XX(I0)=XT2(IX)
|
|
WX(I0)=PRF2(IWL,IX,IZZ)
|
|
200 CONTINUE
|
|
WZ(I0Z)=YINT(XX,WX,X0)
|
|
300 CONTINUE
|
|
W0=YINT(ZZ,WZ,Z0)
|
|
500 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE DIVHE2(A,DIV)
|
|
C ========================
|
|
C
|
|
C Auxiliary procedure for evaluating approximate Stark profile
|
|
C for He II lines
|
|
C This procedure is quite analogous to DIVSTR for hydrogen;
|
|
C the only difference is a somewhat different definition
|
|
C of the parameter A ,ie. A for He II is equal to A for hydrogen
|
|
C minus ln(2)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (UN=1.,TWO=2.,UNQ=1.25,UNH=1.5,TWH=2.5,FO=4.,FI=5.)
|
|
PARAMETER (CA=0.978,BL=5.821,AL=1.26,CX=0.28,DX=0.0001)
|
|
C
|
|
A=UNH*LOG(BETAD)-CA
|
|
IF(BETAD.LT.BL) RETURN
|
|
IF(A.GE.AL) THEN
|
|
X=SQRT(A)*(UN+UNQ*LOG(A)/(FO*A-FI))
|
|
ELSE
|
|
X=SQRT(CX+A)
|
|
ENDIF
|
|
DO 10 I=1,5
|
|
XN=X*(UN-(X*X-TWH*LOG(X)-A)/(TWO*X*X-TWH))
|
|
IF(ABS(XN-X).LE.DX) GO TO 20
|
|
X=XN
|
|
10 CONTINUE
|
|
20 DIV=X
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE PHE2(ISPEC,ID,ABLIN,EMLIN)
|
|
C =====================================
|
|
C
|
|
C Evaluation of the opacity and emissivity in a given He II line,
|
|
C using profile coefficients calculated by Schoening and Butler.
|
|
C
|
|
C Input: ISPEC - line index, defined in HE2INI
|
|
C ID - depth index
|
|
C Output: ABLIN - absorption coefficient
|
|
C EMLIN - emission coefficient
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
DIMENSION ABLIN(1),EMLIN(1),OSCHE2(19),PRF0(40),WLL(40)
|
|
COMMON/HE2PRF/PRFHE2(19,MDEPTH,36),WLHE2(19,36),NWLHE2(19),
|
|
* ILHE2(19),IUHE2(19)
|
|
common/lasers/lasdel
|
|
DATA OSCHE2/6.407E-1, 1.506E-1, 5.584E-2, 2.768E-2,
|
|
* 1.604E-2, 1.023E-2, 6.980E-3,
|
|
* 8.421E-1, 3.230E-2, 1.870E-2, 1.196E-2, 8.187E-3,
|
|
* 5.886E-3, 4.393E-3, 3.375E-3, 2.656E-3,
|
|
* 1.038, 1.793E-1, 6.549E-2/
|
|
C
|
|
C ILINE - line index
|
|
C
|
|
ILINE=ISPEC-5
|
|
C
|
|
DO 10 IWL=1,NWLHE2(ILINE)
|
|
PRF0(IWL)=PRFHE2(ILINE,ID,IWL)
|
|
WLL(IWL)=WLHE2(ILINE,IWL)
|
|
10 CONTINUE
|
|
C
|
|
I=ILHE2(ILINE)
|
|
J=IUHE2(ILINE)
|
|
II=I*I
|
|
JJ=J*J
|
|
IF(I.LE.2) THEN
|
|
WLIN=227.838/(1./II-1./JJ)
|
|
ELSE
|
|
WLIN=227.7776/(1./II-1./JJ)
|
|
END IF
|
|
T=TEMP(ID)
|
|
C
|
|
C He III population (either LTE or NLTE, depending on input model)
|
|
C
|
|
IF(IELHE2.GT.0.and.inlte.gt.0) THEN
|
|
PP=POPUL(NNEXT(IELHE2),ID)
|
|
NLHE2=NLAST(IELHE2)-NFIRST(IELHE2)+1
|
|
ELSE
|
|
PP=RRR(ID,3,2)
|
|
NLHE2=0
|
|
END IF
|
|
C
|
|
C population of the lower level of the given transition
|
|
C (again either LTE or NLTE)
|
|
C
|
|
PP=PP*ELEC(ID)*4.1412E-16/T/SQRT(T)*II
|
|
IF(I.LE.NLHE2.and.inlte.gt.0) THEN
|
|
POPI=POPUL(NFIRST(IELHE2)+I-1,ID)
|
|
ELSE
|
|
POPI=PP*EXP(631479./T/II)
|
|
END IF
|
|
C
|
|
C population of the upper level of the given transition
|
|
C (again either LTE or NLTE)
|
|
C
|
|
IF(J.LE.NLHE2) THEN
|
|
POPJ=POPUL(NFIRST(IELHE2)+J-1,ID)*II/JJ
|
|
ELSE
|
|
POPJ=PP*EXP(631479./T/JJ)
|
|
END IF
|
|
|
|
C
|
|
C loop over frequency points - opacity and emissivity in the given line
|
|
C absorption coefficent is found by interpolating in previously
|
|
C calculated tables, based on calculations of Schoening and Butler
|
|
C (see procedure HE2INI)
|
|
C
|
|
FID=0.02654*OSCHE2(ILINE)
|
|
DO 50 IJ=3,NFREQ
|
|
AL=ABS(WLAM(IJ)-WLIN)
|
|
IF(AL.LT.1.E-4) AL=1.E-4
|
|
AL=LOG10(AL)
|
|
DO 20 IWL=1,NWLHE2(ILINE)-1
|
|
IW0=IWL
|
|
IF(AL.LE.WLL(IWL+1)) GO TO 30
|
|
20 CONTINUE
|
|
30 IW1=IW0+1
|
|
PRH=(PRF0(IW0)*(WLL(IW1)-AL)+PRF0(IW1)*(AL-WLL(IW0)))/
|
|
* (WLL(IW1)-WLL(IW0))
|
|
SG=EXP(PRH*2.3025851)*FID
|
|
if((popi-popj).le.0. .and. lasdel) goto 50
|
|
ABLIN(IJ)=ABLIN(IJ)+SG*(POPI-POPJ)
|
|
EMLIN(IJ)=EMLIN(IJ)+SG*POPJ*1.4747E-2*(FREQ(IJ)*1.E-15)**3
|
|
50 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION ISPEC(IAT,ION,ALAM)
|
|
C ============================
|
|
C
|
|
C Auxiliary procedure for INISET
|
|
C
|
|
C Input: IAT - atomic number
|
|
C ION - ion (=1 for neutrals, =2 for once ionized, etc.)
|
|
C ALAM - wavelength in nanometers
|
|
C Output: ISPEC - parameter specifying whether the given line
|
|
C is taken with a special (pretabulated) absorption
|
|
C profile - only for hydrogen and helium
|
|
C = 0 - profile is taken as an ordinary Voigt profile
|
|
C > 0 - special profile
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
C
|
|
ISPEC=0
|
|
IF(IAT.GT.2) RETURN
|
|
C
|
|
IF(IAT.EQ.1) THEN
|
|
ISPEC=1
|
|
RETURN
|
|
ELSE
|
|
IF(ION.EQ.1) THEN
|
|
IF(ABS(ALAM-447.1).LT.0.5.AND.IHE1PR.GT.0) ISPEC=2
|
|
IF(ABS(ALAM-438.8).LT.0.2.AND.IHE1PR.GT.0) ISPEC=3
|
|
IF(ABS(ALAM-402.6).LT.0.2.AND.IHE1PR.GT.0) ISPEC=4
|
|
IF(ABS(ALAM-492.2).LT.0.2.AND.IHE1PR.GT.0) ISPEC=5
|
|
ELSE
|
|
C
|
|
IF(ALAM.LT.163..OR.ALAM.GT.1012.7) RETURN
|
|
IF(ALAM.LT.321.) THEN
|
|
IF(ABS(ALAM-164.0).LT.0.2.AND.IHE2PR.GT.0) ISPEC=6
|
|
IF(ABS(ALAM-320.3).LT.0.2.AND.IHE2PR.GT.0) ISPEC=7
|
|
IF(ABS(ALAM-273.3).LT.0.2.AND.IHE2PR.GT.0) ISPEC=8
|
|
IF(ABS(ALAM-251.1).LT.0.2.AND.IHE2PR.GT.0) ISPEC=9
|
|
IF(ABS(ALAM-238.5).LT.0.2.AND.IHE2PR.GT.0) ISPEC=10
|
|
IF(ABS(ALAM-230.6).LT.0.2.AND.IHE2PR.GT.0) ISPEC=11
|
|
IF(ABS(ALAM-225.3).LT.0.2.AND.IHE2PR.GT.0) ISPEC=12
|
|
ELSE IF(ALAM.LT.541.) THEN
|
|
IF(ALAM.LT.392.3) RETURN
|
|
IF(ABS(ALAM-468.6).LT.0.2.AND.IHE2PR.GT.0) ISPEC=13
|
|
IF(ABS(ALAM-485.9).LT.0.2.AND.IHE2PR.GT.0) ISPEC=14
|
|
IF(ABS(ALAM-454.2).LT.0.2.AND.IHE2PR.GT.0) ISPEC=15
|
|
IF(ABS(ALAM-433.9).LT.0.2.AND.IHE2PR.GT.0) ISPEC=16
|
|
IF(ABS(ALAM-420.0).LT.0.2.AND.IHE2PR.GT.0) ISPEC=17
|
|
IF(ABS(ALAM-410.0).LT.0.2.AND.IHE2PR.GT.0) ISPEC=18
|
|
IF(ABS(ALAM-402.6).LT.0.2.AND.IHE2PR.GT.0) ISPEC=19
|
|
IF(ABS(ALAM-396.8).LT.0.2.AND.IHE2PR.GT.0) ISPEC=20
|
|
IF(ABS(ALAM-392.3).LT.0.2.AND.IHE2PR.GT.0) ISPEC=21
|
|
ELSE
|
|
IF(ABS(ALAM-1012.4).LT.0.2.AND.IHE2PR.GT.0) ISPEC=22
|
|
IF(ABS(ALAM-656.0).LT.0.2.AND.IHE2PR.GT.0) ISPEC=23
|
|
IF(ABS(ALAM-541.2).LT.0.2.AND.IHE2PR.GT.0) ISPEC=24
|
|
END IF
|
|
END IF
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ******************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE HESET(IL,ALM,EXCL,EXCU,ION,IPRF0,ILWN,IUPN)
|
|
C ======================================================
|
|
C
|
|
C Auxiliary procedure for INISET - set up quantities:
|
|
C IPRF0 - index for the procedure evaluating standard absorption
|
|
C profile coefficient for He I lines - see GAMHE
|
|
C ILWN,IUPN - only in NLTE option is switched on;
|
|
C indices of the lower and upper level associated with
|
|
C the given line
|
|
C
|
|
C Input: IL - line index
|
|
C ALM - line wavelength in nm
|
|
C EXCL - excitation potential of the lower level (in cm**-1)
|
|
C EXCU - excitation potential of the upper level (in cm**-1)
|
|
C ION - ionisation degree (1=neutrals, 2=once ionized, etc.)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION JU(24),NU(24),IT(24)
|
|
DATA IT/1,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0/
|
|
DATA NU/6,6,9,3,8,4,7,5,6,6,5,4,4,4,3,4,3,3,5,5,7,8,10,2/
|
|
DATA JU/15,3,5,9,5,3,5,3,5,1,1,15,3,5,3,1,15,5,15,5,1,1,1,9/
|
|
C
|
|
C ******* He I ***********
|
|
C
|
|
IF(ION.NE.1) GO TO 20
|
|
C
|
|
C switch IPRF0 - see GAMHE
|
|
C
|
|
IL1=IL
|
|
ALAM=ALM*10.
|
|
IPRF=0
|
|
IF(ABS(ALAM-3819.60).LT.1.) IPRF=1
|
|
IF(ABS(ALAM-3867.50).LT.1.) IPRF=2
|
|
IF(ABS(ALAM-3871.79).LT.1.) IPRF=3
|
|
IF(ABS(ALAM-3888.65).LT.1.) IPRF=4
|
|
IF(ABS(ALAM-3926.53).LT.1.) IPRF=5
|
|
IF(ABS(ALAM-3964.73).LT.1.) IPRF=6
|
|
IF(ABS(ALAM-4009.27).LT.1.) IPRF=7
|
|
IF(ABS(ALAM-4120.80).LT.1.) IPRF=8
|
|
IF(ABS(ALAM-4143.76).LT.1.) IPRF=9
|
|
IF(ABS(ALAM-4168.97).LT.1.) IPRF=10
|
|
IF(ABS(ALAM-4437.55).LT.1.) IPRF=11
|
|
IF(ABS(ALAM-4471.50).LT.1.) IPRF=12
|
|
IF(ABS(ALAM-4713.20).LT.1.) IPRF=13
|
|
IF(ABS(ALAM-4921.93).LT.1.) IPRF=14
|
|
IF(ABS(ALAM-5015.68).LT.1.) IPRF=15
|
|
IF(ABS(ALAM-5047.74).LT.1.) IPRF=16
|
|
IF(ABS(ALAM-5875.70).LT.1.) IPRF=17
|
|
IF(ABS(ALAM-6678.15).LT.1.) IPRF=18
|
|
IF(ABS(ALAM-4026.20).LT.1.) IPRF=19
|
|
IF(ABS(ALAM-4387.93).LT.1.) IPRF=20
|
|
IF(ABS(ALAM-4023.97).LT.1.) IPRF=21
|
|
IF(ABS(ALAM-3935.91).LT.1.) IPRF=22
|
|
IF(ABS(ALAM-3833.55).LT.1.) IPRF=23
|
|
IF(ABS(ALAM-10830.0).LT.1.) IPRF=24
|
|
IF(IPRF.GT.0.AND.IPRF.LE.20) IPRF0=IPRF
|
|
C
|
|
C Indices of NLTE levels associated with the given line
|
|
C
|
|
IF(INLTE.gt.5.OR.IELHE1.EQ.0) RETURN
|
|
N0I=NFIRST(IELHE1)
|
|
N1I=NLAST(IELHE1)
|
|
HC=CL*H
|
|
EION=ENION(N0I)/HC
|
|
ILW=0
|
|
IUN=0
|
|
NQL=0
|
|
IF(IPRF.GT.0) NQL=NU(IPRF)
|
|
DO 10 I=N0I,N1I
|
|
NQ=NQUANT(I)
|
|
EX=EION-ENION(I)/HC
|
|
IF(ABS(EXCL-EX).LT.100.) THEN
|
|
ILW=I
|
|
IGL=INT(G(I)+0.001)
|
|
END IF
|
|
IF(NQ.EQ.NQL) THEN
|
|
IG=INT(G(I)+0.001)
|
|
IF(IT(IPRF).EQ.0) THEN
|
|
IF(NQ.EQ.2.AND.IG.EQ.JU(IPRF)) IUN=I
|
|
IF(NQ.EQ.3) THEN
|
|
IF(IG.EQ.JU(IPRF)) THEN
|
|
IF(IG.EQ.1.OR.IG.EQ.5) IUN=I
|
|
IF(IG.EQ.3.AND.IGL.EQ.1) IUN=I
|
|
ELSE
|
|
IF(IG.EQ.9) IUN=I
|
|
END IF
|
|
END IF
|
|
IF(NQ.EQ.4) THEN
|
|
IF(IG.EQ.JU(IPRF)) THEN
|
|
IF(IG.EQ.1.OR.IG.EQ.5.OR.IG.EQ.7) IUN=I
|
|
IF(IG.EQ.3.AND.IGL.EQ.1) IUN=I
|
|
ELSE
|
|
IF(IG.EQ.16) IUN=I
|
|
END IF
|
|
END IF
|
|
IF(IG.EQ.25.OR.IG.EQ.36) IUN=I
|
|
IF(IG.EQ.49.OR.IG.EQ.64.OR.IG.EQ.81) IUN=I
|
|
IF(IG.EQ.100.OR.IG.EQ.121.OR.IG.EQ.144) IUN=I
|
|
ELSE
|
|
IF(NQ.EQ.3) THEN
|
|
IF(IG.EQ.JU(IPRF)) THEN
|
|
IF(IG.EQ.9.OR.IG.EQ.15) IUN=I
|
|
IF(IG.EQ.3.AND.IGL.EQ.9) IUN=I
|
|
ELSE
|
|
IF(IG.EQ.27) IUN=I
|
|
END IF
|
|
END IF
|
|
IF(NQ.EQ.4) THEN
|
|
IF(IG.EQ.JU(IPRF)) THEN
|
|
IF(IG.EQ.9.OR.IG.EQ.15.OR.IG.EQ.21) IUN=I
|
|
IF(IG.EQ.3.AND.IGL.EQ.9) IUN=I
|
|
ELSE
|
|
IF(IG.EQ.48) IUN=I
|
|
END IF
|
|
END IF
|
|
IF(IG.EQ.75) IUN=I
|
|
IF(IG.EQ.108.OR.IG.EQ.147.OR.IG.EQ.192) IUN=I
|
|
IF(IG.EQ.243.OR.IG.EQ.300.OR.IG.EQ.363) IUN=I
|
|
END IF
|
|
IF(NQ.EQ.2.AND.IG.EQ.16) IUN=I
|
|
IF(NQ.EQ.3.AND.IG.EQ.36) IUN=I
|
|
IF(NQ.EQ.4.AND.IG.EQ.64) IUN=I
|
|
IF(NQ.EQ.5.AND.IG.EQ.100) IUN=I
|
|
IF(NQ.EQ.6.AND.IG.EQ.144) IUN=I
|
|
IF(NQ.EQ.7.AND.IG.EQ.196) IUN=I
|
|
IF(NQ.EQ.8.AND.IG.EQ.256) IUN=I
|
|
IF(NQ.EQ.9.AND.IG.EQ.324) IUN=I
|
|
IF(NQ.EQ.10.AND.IG.EQ.400) IUN=I
|
|
END IF
|
|
10 CONTINUE
|
|
c print *, 'il,iprof,ilw,iupn',il,iprf,ilw,iun
|
|
ILWN=ILW
|
|
IUPN=IUN
|
|
C
|
|
C ******* He II ***********
|
|
C
|
|
20 IF(ION.NE.2.OR.IELHE2.LE.0) RETURN
|
|
N0I=NFIRST(IELHE2)
|
|
NLHE2=NLAST(IELHE2)-N0I+1
|
|
XL=SQRT(1./(1.-EXCL/438916.146))
|
|
ILW=INT(XL)
|
|
IF((FLOAT(ILW)-XL).LT.0.) ILW=ILW+1
|
|
XU=SQRT(1./(1.-EXCU/438916.146))
|
|
IUN=INT(XU)
|
|
IF((FLOAT(IUN)-XU).LT.0.) IUN=IUN+1
|
|
IF(ILW.LE.NLHE2) ILWN=ILW+N0I-1
|
|
IF(IUN.LE.NLHE2) IUPN=IUN+N0I-1
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE INISET
|
|
C =================
|
|
C
|
|
C SELECTION OF LINES THAT MAY CONTRIBUTE,
|
|
C SET UP AUXILIARY FIELDS CONTAINING LINE PARAMETERS,
|
|
C SET UP THE SET OF FREQUENCY POINTS
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/CTRFUN/CINT1(MDEPTH),CINT2(MDEPTH),
|
|
* CTRI(MDEPTH),CTRR(MDEPTH),XKAR(MDEPTH),
|
|
* ABXLI(MFREQ),EMXLI(MFREQ),IJCTR(MFREQ)
|
|
SAVE ILLAST
|
|
C
|
|
DATA CNM,CAS /2.997925D17,2.997925D18/
|
|
c DATA C1,C2,C3 /2.3025851, 4.2014672, 1.4387886/
|
|
C
|
|
DO 10 I=1,MFRQ
|
|
W(I)=0.
|
|
IJCTR(I)=0
|
|
10 CONTINUE
|
|
C
|
|
IL0=0
|
|
IPRSET=0
|
|
NLIN=0
|
|
IREADP=1
|
|
IRLIST=0
|
|
IF(IBLANK.LE.1.OR.IMODE.EQ.1.OR.IMODE.EQ.-1) IREADP=0
|
|
IF(IBLANK.LE.1) APREV=0.
|
|
FRMIN=CNM/ALAM0
|
|
FRM=FRMIN
|
|
if(ifwin.le.0) then
|
|
ij0=3
|
|
else
|
|
ij0=1
|
|
end if
|
|
IJ=IJ0
|
|
FREQ(IJ0)=FRM
|
|
SPACE=SPACE0
|
|
IF(ALAMC.GT.0.) SPACE=SPACE0*ALAM0/ALAMC
|
|
IF(SPACE0.LT.0.) SPACE=-SPACE0
|
|
IF(IMODE.EQ.2) THEN
|
|
NFRP=NFREQS+1
|
|
W0=SPACE
|
|
GO TO 105
|
|
END IF
|
|
C
|
|
ISTR=0
|
|
IJMAX=0
|
|
IMOD1L=0
|
|
if(ifwin.le.0) then
|
|
CUTOFF=CUTOF0
|
|
DOPSTD=1.E7/ALAM0*DSTD
|
|
DISTAN=0.15*DOPSTD
|
|
SPAC=3.E16/ALAM0/ALAM0*SPACE
|
|
DISTA0=0.14*SPAC
|
|
ASTD=1.0
|
|
AVAB=ABSTD(IDSTD)*RELOP
|
|
end if
|
|
FRLI0=FRMIN
|
|
IF(IBLANK.GE.2.AND.IMODE.EQ.-1) IL0=ILLAST
|
|
C
|
|
20 CONTINUE
|
|
C
|
|
C set up indices of lines
|
|
C IL0 - is the current index of line in the numbering of all lines
|
|
C
|
|
IF(IREADP.EQ.1) THEN
|
|
IPRSET=IPRSET+1
|
|
IL0=INDLIP(IPRSET)
|
|
IF(FREQ0(IL0).LT.FRMIN) THEN
|
|
IREADP=0
|
|
IL0=INDLIP(IPRSET-1)+1
|
|
END IF
|
|
ELSE
|
|
IL0=IL0+1
|
|
END IF
|
|
IF(IL0.GT.NLIN0) GO TO 210
|
|
FRLIM=FRLI0
|
|
FR0=FREQ0(IL0)
|
|
ALAM=CNM/FR0
|
|
C
|
|
if(ifwin.gt.0) then
|
|
IF(ALAMC.GT.0.) SPACE=SPACE0*ALAM/ALAMC
|
|
IF(SPACE0.LT.0.) SPACE=-SPACE0
|
|
CUTOFF=CUTOF0*ALAM/ALAMC
|
|
DOPSTD=1.E7/ALAM*DSTD
|
|
DISTAN=0.15*DOPSTD
|
|
SPAC=SPACE
|
|
IF(MOD(IFREQ,10).GT.0) SPAC=3.E16/ALAM/ALAM*SPACE
|
|
DISTA0=0.14*SPAC
|
|
end if
|
|
C
|
|
C set up a different starting wavelength for IMODE=1
|
|
C
|
|
IF(IMODE.NE.1) GO TO 45
|
|
IF(ISTR.EQ.1.OR.IJ.NE.3) GO TO 45
|
|
IF(ALAM.LT.ALAM0+2.*CUTOFF) GO TO 45
|
|
ALAM0=ALAM-CUTOFF+0.0001
|
|
FRMIN=CNM/ALAM0
|
|
FRM=FRMIN
|
|
IJ=IJ0
|
|
FREQ(IJ0)=FRM
|
|
45 CONTINUE
|
|
IF(ALAM.LT.ALAM0-CUTOFF) GO TO 20
|
|
IF(IJ.LT.NFREQS+1) GO TO 50
|
|
IF(ALAM.GT.ALAM1+CUTOFF) GO TO 210
|
|
C
|
|
C SECOND SELECTION : FOR LINE STRENGHTS
|
|
C
|
|
50 CONTINUE
|
|
ISTR=0
|
|
IF(IMODE.GE.1) THEN
|
|
ISTR=1
|
|
ELSE
|
|
EXT=EXTIN(IL0)
|
|
FRLI0=FR0-EXT-SPAC
|
|
IF(FRLI0.GT.FRLIM) FRLI0=FRLIM
|
|
frmiv=frmin
|
|
if(ifwin.gt.0) frmiv=frmiv*(1.+vinf/2.997925e10)
|
|
IF(ALAM.LT.ALAM0.AND.FR0-FRMIv.GT.EXT+SPAC) GO TO 20
|
|
ISTR=1
|
|
frmav=frmax
|
|
if(ifwin.gt.0) frmav=frmav*(1.-vinf/2.997925e10)
|
|
IF(IJ.GE.NFREQS+1.AND.FRMAv-FR0.GT.EXT+SPAC) GO TO 20
|
|
END IF
|
|
|
|
C
|
|
NLIN=NLIN+1
|
|
if(nlin.gt.mlin) call quit(' too many lines in a set')
|
|
INDLIN(NLIN)=IL0
|
|
ALAMCU=ALAM+CUTOFF
|
|
C
|
|
C FREQUENCY POINTS AND WEIGHTS
|
|
C
|
|
IF(IJ.GE.NFREQS+1) GO TO 20
|
|
IF(FR0.GT.FRMIN) GO TO 20
|
|
100 DELT=ABS(FRM-FR0)
|
|
IF(DELT.LT.DISTA0.AND.IMODE.NE.1) GO TO 20
|
|
DFREL=CNM*(1.D0/FR0-1.D0/FRM)/SPACE
|
|
NFRP=int(DFREL)+1
|
|
IF(NFRP.LE.2) NFRP=2
|
|
W0=CNM*(1.D0/FR0-1.D0/FRM)/NFRP
|
|
FRM=FR0
|
|
105 FRACT=FREQ(IJ)
|
|
ALACT=CNM/FRACT
|
|
C
|
|
DO 110 K=1,NFRP
|
|
FRACT=FRACT-W0
|
|
ALACT=ALACT+W0
|
|
IF(IMODE.GE.1.OR.NFRP.EQ.2) GO TO 107
|
|
IF(FRACT.LT.FRLIM.AND.FRACT.GT.FR0+EXT+SPAC) GO TO 110
|
|
107 IJ=IJ+1
|
|
IF(IJ.GT.NFREQS) GO TO 130
|
|
FREQ(IJ)=CNM/ALACT
|
|
W(IJ)=W(IJ)+(FREQ(IJ-1)-FREQ(IJ))*0.5
|
|
W(IJ-1)=W(IJ-1)+(FREQ(IJ-1)-FREQ(IJ))*0.5
|
|
C IF(FREQ(IJ).LT.FRLAST) GO TO 220
|
|
IF(IMODE.EQ.1.AND.ALACT.GT.ALAMCU) GO TO 140
|
|
110 CONTINUE
|
|
IJCTR(IJ)=IL0
|
|
IF(IMOD1L.EQ.1) GO TO 210
|
|
DISTA0=DISTAN
|
|
GO TO 20
|
|
C
|
|
130 FRMAX=FREQ(NFREQS)
|
|
ALAM1=CNM/FRMAX
|
|
NFREQ=NFREQS
|
|
IF(IMODE.EQ.2) GO TO 210
|
|
IF(IMOD1L.EQ.1) GO TO 210
|
|
GO TO 20
|
|
C
|
|
140 IJMAX=IJ
|
|
IJMAX=MIN(IJMAX,NFREQS)
|
|
NFREQ=IJMAX
|
|
IF(IL0.LT.NLIN0) THEN
|
|
NBLANK=IBLANK+1
|
|
ELSE
|
|
NBLANK=IBLANK
|
|
END IF
|
|
GO TO 240
|
|
C
|
|
210 NBLANK=IBLANK+1
|
|
IF(IJ.GE.NFREQS+1) GO TO 230
|
|
IJMAX=IJ
|
|
IJMAX=MIN(IJMAX,NFREQS)
|
|
NFREQ=IJMAX
|
|
IF(IMODE.NE.1) GO TO 240
|
|
IF(IMOD1L.EQ.1) GO TO 240
|
|
C FR0=MAX(CNM/(ALAM+CUTOFF),FRLAST*0.99999999D0)
|
|
FR0=FRLAST*0.99999999D0
|
|
ALAM=CNM/FR0
|
|
IMOD1L=1
|
|
GO TO 100
|
|
C
|
|
230 IJMAX=NFREQS
|
|
NFREQ=NFREQS
|
|
240 IF(FREQ(IJMAX).LE.FRLAST) NBLANK=IBLANK
|
|
if(alm00.gt.0.) then
|
|
if(freq(ijmax).ge.0.999999*cnm/alm00.and.iblank.gt.1)
|
|
* nblank=iblank
|
|
end if
|
|
c
|
|
c correction for molecular lines
|
|
c
|
|
if(nmlist.gt.0.and.ifmol.gt.0) then
|
|
do ilist=1,nmlist
|
|
if(alastm(ilist).gt.0..and.alastm(ilist).le.alact) then
|
|
nblank=iblank
|
|
irlist=1
|
|
c write(*,*) 'iniset mol',ilist,alastm(ilist),alam
|
|
end if
|
|
end do
|
|
end if
|
|
c
|
|
if(ifwin.le.0) then
|
|
FREQ(1)=FREQ(3)
|
|
FREQ(2)=FREQ(IJMAX)
|
|
W(1)=0.5*(FREQ(1)-FREQ(2))
|
|
W(2)=W(1)
|
|
end if
|
|
C
|
|
C truncate the interval if the required end is reached
|
|
C
|
|
ijmx=2
|
|
if(ifwin.gt.0) ijmx=ijmax
|
|
IF(FREQ(ijmx).LT.FRLAST) THEN
|
|
FREQ(ijmx)=FRLAST
|
|
if(ifwin.le.0) then
|
|
W(1)=0.5*(FREQ(1)-FREQ(2))
|
|
W(2)=W(1)
|
|
end if
|
|
DO 245 IJ=IJ0,NFREQ
|
|
IF(FREQ(IJ).LT.FRLAST) GO TO 247
|
|
IJMAX=IJ
|
|
245 CONTINUE
|
|
247 NFREQ=IJMAX+1
|
|
FREQ(NFREQ)=FRLAST
|
|
W(NFREQ)=0.5*(FREQ(NFREQ-1)-FREQ(NFREQ))
|
|
W(NFREQ-1)=W(NFREQ)+0.5*(FREQ(NFREQ-2)-FREQ(NFREQ-1))
|
|
END IF
|
|
C
|
|
C frequency interpolation coefficients
|
|
C
|
|
IF(IMODE.NE.-1) THEN
|
|
if(ifwin.le.0) then
|
|
XX=FREQ(2)-FREQ(1)
|
|
DO IJ=1,NFREQ
|
|
WLAM(IJ)=2.997925E18/FREQ(IJ)
|
|
FRX1(IJ)=(FREQ(IJ)-FREQ(1))/XX
|
|
FRX2(IJ)=(FREQ(2)-FREQ(IJ))/XX
|
|
END DO
|
|
else
|
|
DO IJ=1,NFREQ
|
|
WLAM(IJ)=CAS/FREQ(IJ)
|
|
frqobs(ij)=freq(ij)
|
|
wlobs(ij)=wlam(ij)
|
|
fr=freq(ij)
|
|
BNUE(IJ)=BN*fr*fr*fr
|
|
DO IJCI=1,NFREQC-1
|
|
IF(WLAM(IJ).LE.WLAMC(IJCI)) GO TO 248
|
|
END DO
|
|
248 CONTINUE
|
|
IJC=IJCI
|
|
IJCINT(IJ)=MAX(IJC-1,1)
|
|
IJCI=IJCINT(IJ)
|
|
FRX1(IJ)=(FREQ(IJ)-FREQC(IJCI+1))/
|
|
* (FREQC(IJCI)-FREQC(IJCI+1))
|
|
END DO
|
|
nfrobs=nfreq
|
|
xx=freq(nfreq)-freq(1)
|
|
end if
|
|
c
|
|
c frequency indices of the line centers
|
|
c
|
|
DFRCON=NFREQ-ij0
|
|
DFRCON=-DFRCON/XX
|
|
IFRCON=INT(DFRCON)
|
|
DO 255 IL=1,NLIN
|
|
fr0=freq0(indlin(il))
|
|
XJC=3.+DFRCON*(FREQ(1)-FR0)
|
|
IJC=INT(XJC)
|
|
IJCNTR(IL)=IJC
|
|
if(ijc.le.ij0.or.ijc.ge.nfreq) go to 255
|
|
if(fr0.lt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=freq(ijc0)-fr0
|
|
252 ijc0=ijc0+1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0+1
|
|
dfr0=dfr
|
|
go to 252
|
|
end if
|
|
else if(fr0.gt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=fr0-freq(ijc0)
|
|
254 ijc0=ijc0-1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0-1
|
|
dfr0=dfr
|
|
go to 254
|
|
end if
|
|
end if
|
|
IJCNTR(IL)=IJC
|
|
255 continue
|
|
END IF
|
|
C
|
|
if(ifwin.gt.0) then
|
|
C
|
|
c set up switches for hydrogen and He II line opacity
|
|
c
|
|
DO IJ=1,NFREQ
|
|
call hylsew(ij)
|
|
call he2sew(ij)
|
|
end do
|
|
end if
|
|
C
|
|
NSP=0
|
|
DO 260 IL=1,NLIN
|
|
IL0=INDLIN(IL)
|
|
ISP=ISPRF(IL0)
|
|
IF(ISP.GT.5) THEN
|
|
NSP=NSP+1
|
|
ISP0(NSP)=ISP
|
|
END IF
|
|
INDLIP(IL)=INDLIN(IL)
|
|
260 CONTINUE
|
|
if(ifwin.le.0) then
|
|
ILLAST=INDLIN(NLIN)
|
|
else
|
|
ILLAST=0
|
|
IF(NLIN.GT.0) ILLAST=INDLIN(NLIN)
|
|
end if
|
|
C
|
|
CALL READPH
|
|
C
|
|
IF(ALAM0.LE.APREV+0.001) NBLANK=IBLANK
|
|
APREV=ALAM0
|
|
ALAM0=ALAM1
|
|
ALM00=CNM/FREQ(NFREQ)
|
|
c
|
|
c write(6,611) iblank,nblank,irlist,aprev*10.,alam0*10.
|
|
c 611 format('inis ',2i6,i3,3f10.3)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE READPH
|
|
C =================
|
|
C
|
|
C Auxiliary routine for LINSET - read table of detailed
|
|
C photoinization cross-section from unit IPHT1,
|
|
C and interpolate to the set of current wavelengths (WLAM)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/PHOTCS/PHOT(MFRQ,MPHOT),WPHT0,WPHT1,APHT(MPHOT),
|
|
* EPHT(MPHOT),GPHT(MPHOT),JPHT(MPHOT),
|
|
* NPHT
|
|
DIMENSION PHT0(MPHOT),PHT1(MPHOT),IPHT(MPHOT),IEND(MPHOT),
|
|
* IFILE(MPHOT),NELEM(MPHOT),INDEX(MPHOT,MPHOT)
|
|
PARAMETER (IPHT0=57)
|
|
SAVE IPHT,IEND,NELEM,INDEX,NUMFIL
|
|
C
|
|
C initialization - read basic information about files where the
|
|
C cross-sections are stored,
|
|
C and basic parameters for starting levels
|
|
C
|
|
IF(IBLANK.LE.1) THEN
|
|
NPHT=0
|
|
IPHT1=0
|
|
NUMFIL=0
|
|
DO 10 IJ=1,MFRQ
|
|
DO 10 I=1,MPHOT
|
|
10 PHOT(IJ,I)=0.
|
|
READ(IPHT0,*,END=50,err=50) NPHT
|
|
IF(NPHT.LE.0) RETURN
|
|
npht1=npht
|
|
READ(IPHT0,*,END=50) (IPHT(I),I=1,NPHT)
|
|
READ(IPHT0,*,END=50) (APHT(I),I=1,NPHT)
|
|
READ(IPHT0,*,END=50) (EPHT(I),I=1,NPHT)
|
|
READ(IPHT0,*,END=50) (GPHT(I),I=1,NPHT)
|
|
READ(IPHT0,*,END=50) (JPHT(I),I=1,NPHT)
|
|
C
|
|
C determination of the number of files (NFILE) and the
|
|
C partitioning of the individual cross-section to the corresponding
|
|
C files
|
|
C
|
|
NUMFIL=1
|
|
IFILE(1)=1
|
|
NELEM(1)=1
|
|
INDEX(1,1)=1
|
|
IF(NPHT.GT.1) THEN
|
|
DO 30 I=2,NPHT
|
|
DO 20 J=1,I-1
|
|
IF(IPHT(I).EQ.IPHT(J)) THEN
|
|
IFILE(I)=IFILE(J)
|
|
NELEM(IFILE(I))=NELEM(IFILE(I))+1
|
|
INDEX(IFILE(I),NELEM(IFILE(I)))=I
|
|
GO TO 30
|
|
END IF
|
|
20 CONTINUE
|
|
NUMFIL=NUMFIL+1
|
|
IFILE(I)=NUMFIL
|
|
NELEM(NUMFIL)=1
|
|
INDEX(NUMFIL,1)=I
|
|
30 CONTINUE
|
|
END IF
|
|
DO 40 IFIL=1,NUMFIL
|
|
IEND(IFIL)=0
|
|
40 CONTINUE
|
|
END IF
|
|
50 IF(NUMFIL.LE.0) RETURN
|
|
c
|
|
C loop over individual files containing the photoionization data
|
|
C
|
|
DO 300 IFIL=1,NUMFIL
|
|
IF(IEND(IFIL).EQ.1) GO TO 200
|
|
IF(IEND(IFIL).EQ.2) GO TO 300
|
|
NPHT1=NELEM(IFIL)
|
|
IPHT1=IPHT(INDEX(IFIL,1))
|
|
IF(IBLANK.LE.1) THEN
|
|
110 READ(IPHT1,*,END=200) WPHT1,(PHT1(I),I=1,NPHT1)
|
|
IF(WPHT1.LT.WLAM(1)) GO TO 110
|
|
BACKSPACE(IPHT1)
|
|
BACKSPACE(IPHT1)
|
|
READ(IPHT1,*,END=200) WPHT0,(PHT0(I),I=1,NPHT1)
|
|
ELSE
|
|
BACKSPACE(IPHT1)
|
|
BACKSPACE(IPHT1)
|
|
READ(IPHT1,*,END=200) WPHT0,(PHT0(I),I=1,NPHT1)
|
|
READ(IPHT1,*,END=200) WPHT1,(PHT1(I),I=1,NPHT1)
|
|
END IF
|
|
DW=WPHT1-WPHT0
|
|
A1=(WPHT1-WLAM(3))/DW
|
|
A2=(WLAM(3)-WPHT0)/DW
|
|
DO 130 I=1,NPHT1
|
|
INDX=INDEX(IFIL,I)
|
|
PHOT(1,INDX)=0.
|
|
PHOT(2,INDX)=0.
|
|
PHOT(3,INDX)=(A1*PHT0(I)+A2*PHT1(I))*1.E-18
|
|
DO 130 IJ=4,MFRQ
|
|
PHOT(IJ,INDX)=0.
|
|
130 CONTINUE
|
|
DO 190 IJ=4,MFRQ
|
|
IF(WLAM(IJ).LE.WPHT1) THEN
|
|
A1=(WPHT1-WLAM(IJ))/DW
|
|
A2=(WLAM(IJ)-WPHT0)/DW
|
|
DO 140 I=1,NPHT1
|
|
INDX=INDEX(IFIL,I)
|
|
PHOT(IJ,INDX)=(A1*PHT0(I)+A2*PHT1(I))*1.E-18
|
|
140 CONTINUE
|
|
ELSE
|
|
WPHT0=WPHT1
|
|
DO 150 I=1,NPHT1
|
|
150 PHT0(I)=PHT1(I)
|
|
IFSML=0
|
|
160 READ(IPHT1,*,END=180) WPHT1,(PHT1(I),I=1,NPHT1)
|
|
IF(WPHT1.LT.WLAM(IJ)) THEN
|
|
IFSML=1
|
|
GO TO 160
|
|
END IF
|
|
IF(IFSML.EQ.1) THEN
|
|
BACKSPACE(IPHT1)
|
|
BACKSPACE(IPHT1)
|
|
READ(IPHT1,*,END=180) WPHT0,(PHT0(I),I=1,NPHT1)
|
|
READ(IPHT1,*,END=180) WPHT1,(PHT1(I),I=1,NPHT1)
|
|
END IF
|
|
DW=WPHT1-WPHT0
|
|
A1=(WPHT1-WLAM(IJ))/DW
|
|
A2=(WLAM(IJ)-WPHT0)/DW
|
|
DO 170 I=1,NPHT1
|
|
INDX=INDEX(IFIL,I)
|
|
PHOT(IJ,INDX)=(A1*PHT0(I)+A2*PHT1(I))*1.E-18
|
|
170 CONTINUE
|
|
END IF
|
|
GO TO 190
|
|
180 IEND(IFIL)=1
|
|
DO 185 I=1,NPHT1
|
|
INDX=INDEX(IFIL,I)
|
|
PHOT(IJ,INDX)=0.
|
|
185 CONTINUE
|
|
190 CONTINUE
|
|
PHOT(1,INDX)=PHOT(3,INDX)
|
|
PHOT(2,INDX)=PHOT(MFRQ,INDX)
|
|
GO TO 300
|
|
200 IEND(IFIL)=2
|
|
DO 210 IJ=1,MFREQ
|
|
DO 210 I=1,NELEM(IFIL)
|
|
INDX=INDEX(IFIL,I)
|
|
PHOT(IJ,INDX)=0.
|
|
210 CONTINUE
|
|
300 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INILIN
|
|
C =================
|
|
C
|
|
C read in the input line list,
|
|
C selection of lines that may contribute,
|
|
C set up auxiliary fields containing line parameters,
|
|
C
|
|
C Input of line data - unit 19:
|
|
C
|
|
C For each line, one (or two) records, containing:
|
|
C
|
|
C ALAM - wavelength (in nm)
|
|
C ANUM - code of the element and ion (as in Kurucz-Peytremann)
|
|
C (eg. 2.00 = HeI; 26.00 = FeI; 26.01 = FeII; 6.03 = C IV)
|
|
C GF - log gf
|
|
C EXCL - excitation potential of the lower level (in cm*-1)
|
|
C QL - the J quantum number of the lower level
|
|
C EXCU - excitation potential of the upper level (in cm*-1)
|
|
C QU - the J quantum number of the upper level
|
|
C AGAM = 0. - radiation damping taken classical
|
|
C > 0. - the value of Gamma(rad)
|
|
C
|
|
C There are now two possibilities, called NEW and OLD, of the next
|
|
C parameters:
|
|
C a) NEW, next parameters are:
|
|
C GS = 0. - Stark broadening taken classical
|
|
C > 0. - value of log gamma(Stark)
|
|
C GW = 0. - Van der Waals broadening taken classical
|
|
C > 0. - value of log gamma(VdW)
|
|
C INEXT = 0 - no other record necessary for a given line
|
|
C > 0 - a second record is present, see below
|
|
C
|
|
C The following parameters may or may not be present,
|
|
C in the same line, next to INEXT:
|
|
C ISQL >= 0 - value for the spin quantum number (2S+1) of lower level
|
|
C < 0 - value for the spin number of the lower level unknown
|
|
C ILQL >= 0 - value for the L quantum number of lower level
|
|
C < 0 - value for L of the lower level unknown
|
|
C IPQL >= 0 - value for the parity of lower level
|
|
C < 0 - value for the parity of the lower level unknown
|
|
C ISQU >= 0 - value for the spin quantum number (2S+1) of upper level
|
|
C < 0 - value for the spin number of the upper level unknown
|
|
C ILQU >= 0 - value for the L quantum number of upper level
|
|
C < 0 - value for L of the upper level unknown
|
|
C IPQU >= 0 - value for the parity of upper level
|
|
C < 0 - value for the parity of the upper level unknown
|
|
C (by default, the program finds out whether these quantum numbers
|
|
C are included, but the user can force the program to ignore them
|
|
C if present by setting INLIST=10 or larger
|
|
C
|
|
C If INEXT was set to >0 then the following record includes:
|
|
C WGR1,WGR2,WGR3,WGR4 - Stark broadening values from Griem (in Angst)
|
|
C for T=5000,10000,20000,40000 K, respectively;
|
|
C and n(el)=1e16 for neutrals, =1e17 for ions.
|
|
C ILWN = 0 - line taken in LTE (default)
|
|
C > 0 - line taken in NLTE, ILWN is then index of the
|
|
C lower level
|
|
C =-1 - line taken in approx. NLTE, with Doppler K2 function
|
|
C =-2 - line taken in approx. NLTE, with Lorentz K2 function
|
|
C IUN = 0 - population of the upper level in LTE (default)
|
|
C > 0 - index of the lower level
|
|
C IPRF = 0 - Stark broadening determined by GS
|
|
C < 0 - Stark broadening determined by WGR1 - WGR4
|
|
C > 0 - index for a special evaluation of the Stark
|
|
C broadening (in the present version inly for He I -
|
|
C see procedure GAMHE)
|
|
C b) OLD, next parameters are
|
|
C IPRF,ILWN,IUN - the same meaning as above
|
|
C next record with WGR1-WGR4 - again the same meaning as above
|
|
C (this record is automatically read if IPRF<0
|
|
C
|
|
C The only differences between NEW and OLD is the occurence of
|
|
C GS and GW in NEW, and slightly different format of reading.
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/IPOTLS/IPOTL(mlin0)
|
|
C
|
|
PARAMETER (C1 = 2.3025851,
|
|
* C2 = 4.2014672,
|
|
* C3 = 1.4387886,
|
|
* CNM = 2.997925D17,
|
|
* ANUMIN = 1.9,
|
|
* ANUMAX = 99.31,
|
|
* AHE2 = 2.01,
|
|
* EXT0 = 3.17,
|
|
* UN = 1.0,
|
|
* TEN = 10.,
|
|
* HUND = 1.D2,
|
|
* TENM4 = 1.D-4,
|
|
* TENM8 = 1.D-8,
|
|
* OP4 = 0.4,
|
|
* AGR0=2.4734E-22,
|
|
* XEH=13.595, XET=8067.6, XNF=25.,
|
|
* R02=2.5, R12=45., VW0=4.5E-9)
|
|
PARAMETER (ENHE1=198310.76, ENHE2=438908.85)
|
|
CHARACTER*1000 CADENA
|
|
|
|
DATA INLSET /0/
|
|
C
|
|
if(ibin(0).eq.0) then
|
|
open(unit=19,file=amlist(0),status='old')
|
|
else
|
|
open(unit=19,file=amlist(0),form='unformatted',status='old')
|
|
end if
|
|
if(imode.lt.-2) then
|
|
call inilin_grid
|
|
return
|
|
end if
|
|
c
|
|
if(ndstep.eq.0) then
|
|
write(6,621) idstd,temp(idstd),dens(idstd)
|
|
else
|
|
write(6,622)
|
|
do id=1,nd,ndstep
|
|
write(6,623) id,temp(id),dens(id)
|
|
end do
|
|
end if
|
|
621 format(/' lines are rejected based on opacities at the',
|
|
* ' standard depth:'/
|
|
* ' ID =',i4,' T = ',f10.1,', DENS = ',1pe10.3/)
|
|
622 format(/' lines are rejected based on opacities at depths:'/)
|
|
623 format(' ID =',i4,' T = ',f10.1,', DENS = ',1pe10.3/)
|
|
c
|
|
IL=0
|
|
INNLT0=0
|
|
IGRIE0=0
|
|
IF(NXTSET.EQ.1) THEN
|
|
ALAM0=ALM00
|
|
ALAST=ALST00
|
|
FRLAST=CNM/ALAST
|
|
NXTSET=0
|
|
REWIND 19
|
|
END IF
|
|
ALAM00=ALAM0
|
|
ALAST=CNM/FRLAST
|
|
ALAST0=ALAST
|
|
DOPSTD=1.E7/ALAM0*DSTD
|
|
DOPLAM=ALAM0*ALAM0/CNM*DOPSTD
|
|
AVAB=ABSTD(IDSTD)*RELOP
|
|
ASTD=1.0
|
|
c IF(GRAV.GT.6.) ASTD=0.1
|
|
CUTOFF=CUTOF0
|
|
ALAST=CNM/FRLAST
|
|
IF(INLTE.GE.1.AND.INLSET.EQ.0) THEN
|
|
CALL NLTSET(0,IL,IAT,ION,ALAM0,EXCL,EXCU,QL,QU,
|
|
* ISQL,ILQL,IPQL,ISQU,ILQU,IPQU,IEVEN,INNLT0,ILMATCH)
|
|
INLSET=1
|
|
ILMATCH=0
|
|
ILSEARCH=0
|
|
ILFOUND=0
|
|
ILFAIL=0
|
|
ILMULT=0
|
|
END IF
|
|
c
|
|
C
|
|
C Check whether any ion needs to compare quantum number limits
|
|
C
|
|
MAXILIMITS=0
|
|
DO I=1,NION
|
|
IF (ILIMITS(I).EQ.1) MAXILIMITS=1
|
|
END DO
|
|
IF (MAXILIMITS.EQ.0.and.inlist.gt.0) INLIST=20
|
|
C
|
|
C If INLIST=0 or 10, the program checks for the number of words
|
|
C present in the first line of the file to determine if quantum
|
|
C numbers are included. If INLINST=11, they will be ignored anyway
|
|
|
|
IADQN=0
|
|
IF(ibin(0).eq.0) then
|
|
CADENA=' '
|
|
READ(19,'(1000a)')CADENA
|
|
BACKSPACE(19)
|
|
CALL COUNT_WORDS(CADENA,NOW)
|
|
IF(NOW.LT.12) THEN
|
|
WRITE(11,*) 'INILIN: NO quantum numbers given in linelist'
|
|
ELSE
|
|
IADQN=1
|
|
END IF
|
|
if(inlist.ge.10)
|
|
* write(11,*) 'INILIN: if present, quant. num. limits are ignored'
|
|
ELSE
|
|
read(19,err=4) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW,INEXT,ISQL,ILQL,IPQL,ISQU,ILQU,IPQU
|
|
c BACKSPACE(19)
|
|
IADQN=1
|
|
go to 5
|
|
4 continue
|
|
backspace(19)
|
|
read(19) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW,INEXT
|
|
backspace(19)
|
|
5 continue
|
|
if(iadqn.eq.0)
|
|
* write(11,*) 'INILIN: no quantum numbers in binary linelist'
|
|
IF(INLIST.GE.10) THEN
|
|
write(11,*)
|
|
* 'INILIN: if present, quant. num. limits are ignored'
|
|
END IF
|
|
END IF
|
|
|
|
rstd=1.e4
|
|
if(relop.gt.0.) rstd=1./relop
|
|
afac=10.
|
|
if(iat.gt.15.and.iat.ne.26) afac=1.
|
|
afac=afac*rstd*astd
|
|
C
|
|
C first part of reading line list - read only lambda, and
|
|
C skip all lines with wavelength below ALAM0-CUTOFF
|
|
C
|
|
ALAM=0.
|
|
IJC=2
|
|
7 if(ibin(0).eq.0) then
|
|
READ(19,510) ALAM
|
|
else
|
|
read(19) alam
|
|
end if
|
|
510 FORMAT(F10.4)
|
|
IF(ALAM.LT.ALAM0-CUTOFF) GO TO 7
|
|
BACKSPACE(19)
|
|
GO TO 10
|
|
c
|
|
c read the line list
|
|
c
|
|
8 continue
|
|
10 ILWN=0
|
|
IUN=0
|
|
IPRF=0
|
|
GS=0.
|
|
GW=0.
|
|
IF(IBIN(0).EQ.0) THEN
|
|
IF(IADQN.EQ.0) THEN
|
|
READ(19,*,END=100,err=8) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW,INEXT
|
|
IF(INEXT.NE.0) READ(19,*) WGR1,WGR2,WGR3,WGR4,ILWN,IUN,IPRF
|
|
ELSE
|
|
READ(19,*,END=100,err=8) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW,INEXT,ISQL,ILQL,IPQL,ISQU,ILQU,IPQU
|
|
END IF
|
|
ELSE
|
|
IF(IADQN.EQ.0) THEN
|
|
READ(19,END=100) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,GS,GW
|
|
ELSE
|
|
READ(19,END=100) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,GS,GW,
|
|
* INEXT,ISQL,ILQL,IPQL,ISQU,ILQU,IPQU
|
|
END IF
|
|
END IF
|
|
IF(INLIST.GE.10) THEN
|
|
IF(ISPICK.EQ.0) THEN
|
|
ISQL=-1
|
|
ISQU=-1
|
|
END IF
|
|
IF(ILPICK.EQ.0) THEN
|
|
ILQL=-1
|
|
ILQU=-1
|
|
END IF
|
|
IF(IPPICK.EQ.0) THEN
|
|
IPQL=-1
|
|
IPQU=-1
|
|
END IF
|
|
|
|
IF(INEXT.NE.0) READ(19,*) WGR1,WGR2,WGR3,WGR4,ILWN,IUN,IPRF
|
|
END IF
|
|
C
|
|
c change wavelength to vacuum for lambda > 2000
|
|
c
|
|
if(alam.gt.200..and.vaclim.gt.2000.) then
|
|
wl0=alam*10.
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0*(XN1*1.D-6+UN)
|
|
alam=wl0*0.1
|
|
END IF
|
|
C
|
|
C first selection : for a given interval a atomic number
|
|
C
|
|
IF(ALAM.GT.ALAST+CUTOFF) GO TO 100
|
|
IF(ANUM.LT.ANUMIN.OR.ANUM.GT.ANUMAX) GO TO 10
|
|
IF(ABS(ANUM-AHE2).LT.TENM4.AND.IFHE2.GT.0) GO TO 10
|
|
C
|
|
C second selection : for line strenghts
|
|
C
|
|
FR0=CNM/ALAM
|
|
IAT=INT(ANUM)
|
|
FRA=(ANUM-FLOAT(IAT)+TENM4)*HUND
|
|
ION=INT(FRA)+1
|
|
IF(ION.GT.IONIZ(IAT)) GO TO 10
|
|
IEVEN=1
|
|
EXCL=ABS(EXCL)
|
|
EXCU=ABS(EXCU)
|
|
IF(EXCL.GT.EXCU) THEN
|
|
FRA=EXCL
|
|
EXCL=EXCU
|
|
EXCU=FRA
|
|
FRA=QL
|
|
QL=QU
|
|
QU=FRA
|
|
IEVEN=0
|
|
IF(INLIST.GE.10) THEN
|
|
IFRA=ISQL
|
|
ISQL=ISQU
|
|
ISQU=IFRA
|
|
|
|
IFRA=ILQL
|
|
ILQL=ILQU
|
|
ILQU=IFRA
|
|
|
|
IFRA=IPQL
|
|
IPQL=IPQU
|
|
IPQU=IFRA
|
|
END IF
|
|
END IF
|
|
GFP=C1*GF-C2
|
|
EPP=C3*EXCL
|
|
c
|
|
if(ndstep.eq.0.and.ifwin.eq.0) then
|
|
c
|
|
c old procedure for rejecting lines
|
|
c
|
|
GX=GFP-EPP/TSTD
|
|
AB0=0.
|
|
if(gx.gt.-30)
|
|
* AB0=EXP(GFP-EPP/TSTD)*RRR(IDSTD,ION,IAT)/DOPSTD/AVAB
|
|
IF(AB0.LT.UN) GO TO 10
|
|
C
|
|
else
|
|
c
|
|
c new procedure for rejecting lines
|
|
c
|
|
DOPSTD=1.E7/ALAM*DSTD
|
|
DOPLAM=ALAM*ALAM/CNM*DOPSTD
|
|
do ijcn=ijc,nfreqc
|
|
if(fr0.ge.freqc(ijcn)) go to 12
|
|
end do
|
|
12 continue
|
|
ijc=ijcn
|
|
if(ijc.gt.nfreqc) ijc=nfreqc
|
|
tkm=1.65e8/amas(iat)
|
|
DP0=3.33564E-11*FR0
|
|
do id=1,nd,ndstep
|
|
td=temp(id)
|
|
gx=gfp-epp/td
|
|
ab0=0.
|
|
if(gx.gt.-30) then
|
|
dops=dp0*sqrt(tkm/td+vturb(id))
|
|
AB0=EXP(gx)*RRR(ID,ION,IAT)/(DOPS*abstdw(ijc,id)*relop)
|
|
end if
|
|
if(ab0.ge.un) go to 15
|
|
end do
|
|
GO TO 10
|
|
end if
|
|
C
|
|
C truncate line list if there are more lines than maximum allowable
|
|
C (given by MLIN0 - see include file LINDAT.FOR)
|
|
C
|
|
15 continue
|
|
IL=IL+1
|
|
IF(IL.GT.MLIN0) THEN
|
|
WRITE(6,601) ALAM
|
|
IL=MLIN0
|
|
ALAST=CNM/FREQ0(IL)-CUTOFF
|
|
FRLAST=CNM/ALAST
|
|
NXTSET=1
|
|
GO TO 100
|
|
END IF
|
|
C
|
|
C =============================================
|
|
C line is selected, set up necessary parameters
|
|
C =============================================
|
|
C
|
|
C store parameters for selected lines
|
|
C
|
|
FREQ0(IL)=FR0
|
|
EXCL0(IL)=real(EPP)
|
|
EXCU0(IL)=real(EXCU*C3)
|
|
GF0(IL)=real(GFP)
|
|
INDAT(IL)=100*IAT+ION
|
|
C
|
|
C indices for corresponding excitation temperatures of the lower
|
|
C and upper levels
|
|
C (for winds)
|
|
C
|
|
if(ifwin.gt.0) then
|
|
IJCONT(IL)=IJC
|
|
if(excl.ge.enhe2) then
|
|
ipotl(il)=3
|
|
else if(excl.ge.enhe1) then
|
|
ipotl(il)=2
|
|
else
|
|
ipotl(il)=1
|
|
end if
|
|
end if
|
|
C
|
|
C ****** line broadening parameters *****
|
|
C
|
|
C 1) natural broadening
|
|
C
|
|
IF(AGAM.GT.0.) THEN
|
|
GAMR0(IL)=real(EXP(C1*AGAM))
|
|
ELSE
|
|
GAMR0(IL)=real(AGR0*FR0*FR0)
|
|
END IF
|
|
C
|
|
C if Stark or Van der Waals broadenig assumed classical,
|
|
C evaluate the effective quantum number
|
|
C
|
|
IF(GS.EQ.0..OR.GW.EQ.0) THEN
|
|
Z=FLOAT(ION)
|
|
XNEFF2=Z**2*(XEH/(ENEV(IAT,ION)-EXCU/XET))
|
|
IF(XNEFF2.LE.0..OR.XNEFF2.GT.XNF) XNEFF2=XNF
|
|
END IF
|
|
C
|
|
C 2) Stark broadening
|
|
C
|
|
IF(GS.NE.0.) THEN
|
|
GS0(IL)=real(EXP(C1*GS))
|
|
ELSE
|
|
GS0(IL)=real(TENM8*XNEFF2*XNEFF2*SQRT(XNEFF2))
|
|
END IF
|
|
C
|
|
C 3) Van der Waals broadening
|
|
C
|
|
IF(GW.NE.0.) THEN
|
|
GW0(IL)=real(EXP(C1*GW))
|
|
ELSE
|
|
IF(IAT.LT.21) THEN
|
|
R2=R02*(XNEFF2/Z)**2
|
|
ELSE IF(IAT.LT.45) then
|
|
R2=(R12-FLOAT(IAT))/Z
|
|
ELSE
|
|
R2=0.5
|
|
END IF
|
|
GW0(IL)=real(VW0*R2**OP4)
|
|
END IF
|
|
c
|
|
C evaluation of EXTIN0 - the distance (in delta frequency) where
|
|
C the line is supposed to contribute to the total opacity
|
|
C
|
|
call profil(il,iat,idstd,agam)
|
|
IF(IAT.LE.2) THEN
|
|
EXT=SQRT(10.*AB0)
|
|
ELSE IF(IAT.LE.14) THEN
|
|
EX0=AB0*ASTD*10.
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
ELSE
|
|
EX0=AB0*ASTD
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
END IF
|
|
EXTIN0=EXT*DOPSTD
|
|
EXTIN(IL)=real(EXTIN0)
|
|
C
|
|
C 4) parameters for a special profile evaluation:
|
|
C
|
|
C a) special He I and He II line broadening parameters
|
|
C
|
|
ISPRFF=0
|
|
IF(IAT.LE.2) ISPRFF=ISPEC(IAT,ION,ALAM)
|
|
IF(IAT.EQ.2) CALL HESET(IL,ALAM,EXCL,EXCU,ION,IPRF,ILWN,IUN)
|
|
ISPRF(IL)=ISPRFF
|
|
IPRF0(IL)=IPRF
|
|
C
|
|
C b) parameters for Griem values of Stark broadening
|
|
C
|
|
IF(IPRF.LT.0) THEN
|
|
IGRIE0=IGRIE0+1
|
|
IGRIEM(IL)=IGRIE0
|
|
IF(IGRIE0.GT.MGRIEM) THEN
|
|
WRITE(6,603) ALAM
|
|
GO TO 20
|
|
END IF
|
|
WGR0(1,IGRIE0)=real(WGR1)
|
|
WGR0(2,IGRIE0)=real(WGR2)
|
|
WGR0(3,IGRIE0)=real(WGR3)
|
|
WGR0(4,IGRIE0)=real(WGR4)
|
|
END IF
|
|
20 CONTINUE
|
|
C
|
|
C implied NLTE option
|
|
C
|
|
if(inlte.eq.-2.or.inlte.eq.12) then
|
|
if(iat.le.20.and.excl.le.1000.) qu=-abs(qu)
|
|
else if(inlte.eq.-3) then
|
|
if(excl.le.1000.) qu=-abs(qu)
|
|
else if(inlte.eq.-4) then
|
|
qu=-abs(qu)
|
|
end if
|
|
C
|
|
C NLTE lines initialization
|
|
C
|
|
INDNLT(IL)=0
|
|
IF(QU.LT.0..OR.QL.LT.0.) THEN
|
|
ILWN=-1
|
|
QU=ABS(QU)
|
|
QL=ABS(QL)
|
|
END IF
|
|
IF(ILWN.LT.0.AND.INLTE.NE.0) THEN
|
|
INNLT0=INNLT0+1
|
|
INDNLT(IL)=INNLT0
|
|
IF(INNLT0.GT.MNLT) THEN
|
|
WRITE(6,604) ALAM
|
|
GO TO 100
|
|
END IF
|
|
GI=2.*QL+UN
|
|
GJ=2.*QU+UN
|
|
CALL NLTE(IL,ILWN,IUN,GI,GJ)
|
|
ILOWN(IL)=ILWN
|
|
IUPN(IL)=IUN
|
|
END IF
|
|
IF(ILWN.GT.0.AND.INLTE.NE.0) THEN
|
|
INNLT0=INNLT0+1
|
|
INDNLT(IL)=INNLT0
|
|
IF(INNLT0.GT.MNLT) THEN
|
|
WRITE(6,604) ALAM
|
|
GO TO 100
|
|
END IF
|
|
GI=2.*QL+UN
|
|
GJ=2.*QU+UN
|
|
CALL NLTE(IL,ILWN,IUN,GI,GJ)
|
|
ILOWN(IL)=ILWN
|
|
IUPN(IL)=IUN
|
|
END IF
|
|
IF(ILWN.EQ.0.AND.INLTE.GE.1) THEN
|
|
ILMATCH=-1
|
|
CALL NLTSET(1,IL,IAT,ION,ALAM,EXCL,EXCU,QL,QU,
|
|
* ISQL,ILQL,IPQL,ISQU,ILQU,IPQU,IEVEN,INNLT0,ILMATCH)
|
|
C
|
|
C Success accounting for nlte lines matched with quantum numbers and
|
|
C energy limits
|
|
C
|
|
C nlte lines searched matching energies and quantum numbers
|
|
IF(ILMATCH.GE.0) THEN
|
|
ILSEARCH=ILSEARCH+1
|
|
C nlte lines not found matching
|
|
IF (ILMATCH.EQ.0) THEN
|
|
ILFAIL=ILFAIL+1
|
|
C nlte lines with multiple matches
|
|
ELSE IF (ILMATCH.EQ.2) THEN
|
|
ILMULT=ILMULT+1
|
|
C nlte lines uniquely matched
|
|
ELSE IF (ILMATCH.EQ.1) THEN
|
|
ILFOUND=ILFOUND+1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF(INDNLT(IL).GT.0) THEN
|
|
IF(INDNLT(IL).GT.MNLT) THEN
|
|
WRITE(6,604) ALAM
|
|
GO TO 100
|
|
END IF
|
|
GI=2.*QL+UN
|
|
GJ=2.*QU+UN
|
|
ILWN=ILOWN(IL)
|
|
IUN=IUPN(IL)
|
|
IF(ILWN.EQ.IUN.AND.GI.EQ.GJ) THEN
|
|
INDNLT(IL)=0
|
|
ILOWN(IL)=0
|
|
IUPN(IL)=0
|
|
ELSE
|
|
CALL NLTE(IL,ILWN,IUN,GI,GJ)
|
|
END IF
|
|
END IF
|
|
END IF
|
|
GO TO 10
|
|
C
|
|
100 NLIN0=IL
|
|
NNLT=INNLT0
|
|
NGRIEM=IGRIE0
|
|
ALM1=CNM/FREQ0(1)
|
|
IF(ALAM0.LT.ALM1.AND.IMODE.NE.1) THEN
|
|
ALAM0=ALM1-4.*DOPLAM
|
|
IF(ALAM0.LT.ALAM00) ALAM0=ALAM00
|
|
END IF
|
|
ALM2=CNM/FREQ0(NLIN0)
|
|
IF(NLIN0.GT.1) ALM2=CNM/FREQ0(NLIN0-1)
|
|
IF(ALAST.GT.ALM2.AND.IMODE.NE.1) THEN
|
|
ALAST=ALM2-4.*DOPLAM
|
|
IF(ALAST.GT.ALAST0) ALAST=ALAST0
|
|
FRLAST=CNM/ALAST
|
|
END IF
|
|
IBLANK=0
|
|
C
|
|
WRITE(11,*)'INILIN: NLTE matches using Energies and SLP limits --'
|
|
WRITE(11,*)ILSEARCH,' lines searched'
|
|
WRITE(11,*)ILFAIL,' lines unmatched -- set to LTE'
|
|
WRITE(11,*)ILMULT,' lines with multiple matches'
|
|
WRITE(11,*)ILFOUND,' lines uniquely matched'
|
|
WRITE(11,*)'----------------------------------------------------'
|
|
C
|
|
WRITE(*,*)'----------------------------------------------------'
|
|
WRITE(6,611) NLIN0,NNLT
|
|
611 FORMAT(/' LINES - TOTAL :',I10
|
|
* /' LINES - NLTE :',I10/)
|
|
601 FORMAT(' **** MORE LINES THAN MLIN0, LINE LIST TRUNCATED '/
|
|
*' AT LAMBDA',F15.4,' NM'/)
|
|
603 FORMAT(' **** MORE LINES WITH GRIEM PROFILES THAN MGRIEM'/
|
|
*' FOR LINES WITH LAMBDA GREATER THAN',F15.4,' NM'/)
|
|
604 FORMAT(' **** MORE LINES IN NLTE OPTION THAN MNLT'/
|
|
*' FOR LINES WITH LAMBDA GREATER THAN',F15.4,' NM'/)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INILIN_grid
|
|
C ======================
|
|
C
|
|
C read in the input line list,
|
|
C selection of lines that may contribute,
|
|
C set up auxiliary fields containing line parameters,
|
|
C
|
|
C Input of line data - unit 19:
|
|
C
|
|
C For each line, one (or two) records, containing:
|
|
C
|
|
C ALAM - wavelength (in nm)
|
|
C ANUM - code of the element and ion (as in Kurucz-Peytremann)
|
|
C (eg. 2.00 = HeI; 26.00 = FeI; 26.01 = FeII; 6.03 = C IV)
|
|
C GF - log gf
|
|
C EXCL - excitation potential of the lower level (in cm*-1)
|
|
C QL - the J quantum number of the lower level
|
|
C EXCU - excitation potential of the upper level (in cm*-1)
|
|
C QU - the J quantum number of the upper level
|
|
C AGAM = 0. - radiation damping taken classical
|
|
C > 0. - the value of Gamma(rad)
|
|
C
|
|
C There are now two possibilities, called NEW and OLD, of the next
|
|
C parameters:
|
|
C a) NEW, next parameters are:
|
|
C GS = 0. - Stark broadening taken classical
|
|
C > 0. - value of log gamma(Stark)
|
|
C GW = 0. - Van der Waals broadening taken classical
|
|
C > 0. - value of log gamma(VdW)
|
|
C INEXT = 0 - no other record necessary for a given line
|
|
C > 0 - next record is read, which contains:
|
|
C WGR1,WGR2,WGR3,WGR4 - Stark broadening values from Griem (in Angst)
|
|
C for T=5000,10000,20000,40000 K, respectively;
|
|
C and n(el)=1e16 for neutrals, =1e17 for ions.
|
|
C ILWN = 0 - line taken in LTE (default)
|
|
C > 0 - line taken in NLTE, ILWN is then index of the
|
|
C lower level
|
|
C =-1 - line taken in approx. NLTE, with Doppler K2 function
|
|
C =-2 - line taken in approx. NLTE, with Lorentz K2 function
|
|
C IUN = 0 - population of the upper level in LTE (default)
|
|
C > 0 - index of the lower level
|
|
C IPRF = 0 - Stark broadening determined by GS
|
|
C < 0 - Stark broadening determined by WGR1 - WGR4
|
|
C > 0 - index for a special evaluation of the Stark
|
|
C broadening (in the present version inly for He I -
|
|
C see procedure GAMHE)
|
|
C b) OLD, next parameters are
|
|
C IPRF,ILWN,IUN - the same meaning as above
|
|
C next record with WGR1-WGR4 - again the same meaning as above
|
|
C (this record is automatically read if IPRF<0
|
|
C
|
|
C The only differences between NEW and OLD is the occurence of
|
|
C GS and GW in NEW, and slightly different format of reading.
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/igrddd/igrdd,irelin
|
|
common/plaopa/plalin,plcint,chcint
|
|
common/conabs/absoc(mfreqc),emisc(mfreqc),scatc(mfreqc),
|
|
* plac(mfreqc)
|
|
C
|
|
PARAMETER (C1 = 2.3025851,
|
|
* C2 = 4.2014672,
|
|
* C3 = 1.4387886,
|
|
* CNM = 2.997925D17,
|
|
* ANUMIN = 1.9,
|
|
* ANUMAX = 99.31,
|
|
* AHE2 = 2.01,
|
|
* EXT0 = 3.17,
|
|
* UN = 1.0,
|
|
* TEN = 10.,
|
|
* HUND = 1.D2,
|
|
* TENM4 = 1.D-4,
|
|
* TENM8 = 1.D-8,
|
|
* OP4 = 0.4,
|
|
* AGR0=2.4734E-22,
|
|
* XEH=13.595, XET=8067.6, XNF=25.,
|
|
* R02=2.5, R12=45., VW0=4.5E-9,
|
|
* bnc=1.4743e-2,hkc=4.79928e-11)
|
|
PARAMETER (ENHE1=198310.76, ENHE2=438908.85)
|
|
|
|
DATA INLSET /0/
|
|
C
|
|
if(irelin.eq.0) return
|
|
c
|
|
relop0=relop
|
|
relop=1.e-3*relop
|
|
if(relop.gt.1.e-4) relop=1.e-4
|
|
if(relop.lt.1.e-5) relop=1.e-5
|
|
plalin=0.
|
|
ijcon=2
|
|
IL=0
|
|
INNLT0=0
|
|
IGRIE0=0
|
|
IF(NXTSET.EQ.1) THEN
|
|
ALAM0=ALM00
|
|
ALAST=ALST00
|
|
FRLAST=CNM/ALAST
|
|
NXTSET=0
|
|
REWIND 19
|
|
END IF
|
|
ALAM00=ALAM0
|
|
ALAST=CNM/FRLAST
|
|
ALAST0=ALAST
|
|
DOPSTD=1.E7/ALAM0*DSTD
|
|
DOPLAM=ALAM0*ALAM0/CNM*DOPSTD
|
|
AVAB=ABSTD(IDSTD)*RELOP
|
|
id=idstd
|
|
dstdid=sqrt(1.4e7*temp(idstd))
|
|
ASTD=1.0
|
|
c IF(GRAV.GT.6.) ASTD=0.1
|
|
CUTOFF=CUTOF0
|
|
ALAST=CNM/FRLAST
|
|
absta=absoc(1)
|
|
write(6,630) alam0,alast,abstd(idstd),absta
|
|
630 format(/' read line list with alam0, alast',2f10.3,1p3e11.3/)
|
|
c
|
|
rstd=1.e4
|
|
if(relop.gt.0.) rstd=1./relop
|
|
afac=10.
|
|
if(iat.gt.15.and.iat.ne.26) afac=1.
|
|
afac=afac*rstd*astd
|
|
C
|
|
afac=afac*rstd*astd
|
|
afilin=alast
|
|
C
|
|
C first part of reading line list - read only lambda, and
|
|
C skip all lines with wavelength below ALAM0-CUTOFF
|
|
C
|
|
ALAM=0.
|
|
7 continue
|
|
if(ibin(0).eq.0) then
|
|
read(19,510) alam
|
|
else
|
|
read(19) alam
|
|
end if
|
|
510 FORMAT(F10.4)
|
|
IF(ALAM.LT.ALAM0-CUTOFF) GO TO 7
|
|
BACKSPACE(19)
|
|
GO TO 10
|
|
c
|
|
8 continue
|
|
10 ILWN=0
|
|
IUN=0
|
|
IPRF=0
|
|
GS=0.
|
|
GW=0.
|
|
IF(IBIN(0).EQ.0) THEN
|
|
READ(19,*,END=100,err=8) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW
|
|
else
|
|
read(19,end=100) ALAM,ANUM,GF,EXCL,QL,EXCU,QU,AGAM,
|
|
* GS,GW
|
|
end if
|
|
c
|
|
c change wavelength to vacuum for lambda > 2000
|
|
c
|
|
if(alam.gt.200..and.vaclim.gt.2000.) then
|
|
wl0=alam*10.
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0*(XN1*1.D-6+UN)
|
|
alam=wl0*0.1
|
|
END IF
|
|
C
|
|
C first selection : for a given interval a atomic number
|
|
C
|
|
IF(ALAM.GT.ALAST+CUTOFF) GO TO 100
|
|
C
|
|
C second selection : for line strengths
|
|
C
|
|
FR0=CNM/ALAM
|
|
if(inlist.ge.0) then
|
|
IAT=ifix(real(ANUM,4))
|
|
FRA=(ANUM-FLOAT(IAT)+TENM4)*HUND
|
|
ION=INT(FRA)+1
|
|
IF(ION.GT.IONIZ(IAT)) GO TO 10
|
|
IEVEN=1
|
|
EXCL=ABS(EXCL)
|
|
EXCU=ABS(EXCU)
|
|
IF(EXCL.GT.EXCU) THEN
|
|
FRA=EXCL
|
|
EXCL=EXCU
|
|
EXCU=FRA
|
|
FRA=QL
|
|
QL=QU
|
|
QU=FRA
|
|
IEVEN=0
|
|
END IF
|
|
GFP=C1*GF-C2
|
|
EPP=C3*EXCL
|
|
else
|
|
IF(ION.GT.IONIZ(IAT)) GO TO 10
|
|
end if
|
|
C
|
|
if(fr0.lt.freqc(ijcon)) then
|
|
ijcon=ijcon+1
|
|
absta=0.5*(absoc(ijcon)+scatc(ijcon)+
|
|
* absoc(ijcon-1)+scatc(ijcon-1))
|
|
end if
|
|
abstd(id)=absta
|
|
c
|
|
dop=1.e7/alam*dstdid
|
|
abct=exp(gfp-epp/temp(id))*rrr(id,ion,iat)
|
|
abid=abct/dop/absta
|
|
ext=sqrt(abid*afac)*dop
|
|
c
|
|
c line part of the Planck mean opacity
|
|
c
|
|
c if(alam.ge.alam0.and.alam.le.alast) then
|
|
c if(abid.ge.relop) then
|
|
c xx=exp(-hkc*fr0/temp(id))
|
|
c pln=bnc*(fr0*1.e-15)**3*xx/(un-xx)
|
|
c abct=abct*(un-xx)
|
|
c plalin=plalin+pln*abct
|
|
c write(16,643) iat,ion,alam*10.,abct,dop,absta,abid
|
|
c 643 format(2i4,0pf12.3,1p6e12.4)
|
|
c end if
|
|
c
|
|
ALAX0=12.
|
|
c
|
|
c alax0=0
|
|
c
|
|
if(imode.eq.-6) go to 10
|
|
if(alam.lt.afilin) then
|
|
if(abid.ge.relop) then
|
|
afilin=alam
|
|
else
|
|
if(abid.lt.relop*1.e-6) go to 10
|
|
end if
|
|
else if(alam.lt.9500.) then
|
|
if(abid.lt.relop) go to 10
|
|
else if(alam.lt.9950.) then
|
|
if(abid.lt.relop*1.e-9) go to 10
|
|
else
|
|
if(abid.lt.relop*1.e-19) go to 10
|
|
end if
|
|
c
|
|
c if(abid.lt.relop.and.alam.gt.alax0) go to 10
|
|
c if(abid.lt.1.e-10*relop.and.alam.lt.alax0) go to 10
|
|
IF(ANUM.LT.ANUMIN.OR.ANUM.GT.ANUMAX) GO TO 10
|
|
IF(ANUM.GT.ANUMAX) GO TO 10
|
|
IF(ABS(ANUM-AHE2).LT.TENM4.AND.IFHE2.GT.0) GO TO 10
|
|
c
|
|
extin0=ext
|
|
C
|
|
C truncate line list if there are more lines than maximum allowable
|
|
C (given by MLIN0 - see include file LINDAT.FOR)
|
|
C
|
|
IL=IL+1
|
|
IF(IL.GT.MLIN0) THEN
|
|
WRITE(6,601) ALAM
|
|
IL=MLIN0
|
|
ALAST=CNM/FREQ0(IL)-CUTOFF
|
|
FRLAST=CNM/ALAST
|
|
NXTSET=1
|
|
GO TO 100
|
|
END IF
|
|
C
|
|
C =============================================
|
|
C line is selected, set up necessary parameters
|
|
C =============================================
|
|
C
|
|
C evaluation of EXTIN0 - the distance (in delta frequency) where
|
|
C the line is supposed to contribute to the total opacity
|
|
C
|
|
C store parameters for selected lines
|
|
C
|
|
FREQ0(IL)=FR0
|
|
EXCL0(IL)=real(EPP,4)
|
|
EXCU0(IL)=real(EXCU*C3,4)
|
|
GF0(IL)=real(GFP,4)
|
|
EXTIN(IL)=real(EXTIN0,4)
|
|
INDAT(IL)=100*IAT+ION
|
|
C
|
|
C ****** line broadening parameters *****
|
|
C
|
|
C 1) natural broadening
|
|
C
|
|
IF(AGAM.GT.0.) THEN
|
|
GAMR0(IL)=real(EXP(C1*AGAM),4)
|
|
ELSE
|
|
GAMR0(IL)=real(AGR0*FR0*FR0,4)
|
|
END IF
|
|
C
|
|
C if Stark or Van der Waals broadening assumed classical,
|
|
C evaluate the effective quantum number
|
|
C
|
|
IF(GS.EQ.0..OR.GW.EQ.0) THEN
|
|
Z=FLOAT(ION)
|
|
XNEFF2=Z**2*(XEH/(ENEV(IAT,ION)-EXCU/XET))
|
|
IF(XNEFF2.LE.0..OR.XNEFF2.GT.XNF) XNEFF2=XNF
|
|
END IF
|
|
C
|
|
C 2) Stark broadening
|
|
C
|
|
IF(GS.NE.0.) THEN
|
|
GS0(IL)=real(EXP(C1*GS),4)
|
|
ELSE
|
|
GS0(IL)=real(TENM8*XNEFF2*XNEFF2*SQRT(XNEFF2),4)
|
|
END IF
|
|
C
|
|
C 3) Van der Waals broadening
|
|
C
|
|
IF(GW.NE.0.) THEN
|
|
GW0(IL)=real(EXP(C1*GW),4)
|
|
ELSE
|
|
IF(IAT.LT.21) THEN
|
|
R2=R02*(XNEFF2/Z)**2
|
|
ELSE IF(IAT.LT.45) then
|
|
R2=(R12-FLOAT(IAT))/Z
|
|
ELSE
|
|
R2=0.5
|
|
END IF
|
|
GW0(IL)=real(VW0*R2**OP4,4)
|
|
END IF
|
|
C
|
|
C 4) parameters for a special profile evaluation:
|
|
C
|
|
C a) special He I and He II line broadening parameters
|
|
C
|
|
ISPRFF=0
|
|
IF(IAT.LE.2) ISPRFF=ISPEC(IAT,ION,ALAM)
|
|
IF(IAT.EQ.2) CALL HESET(IL,ALAM,EXCL,EXCU,ION,IPRF,ILWN,IUN)
|
|
ISPRF(IL)=ISPRFF
|
|
IPRF0(IL)=IPRF
|
|
C
|
|
C b) parameters for Griem values of Stark broadening
|
|
C
|
|
IF(IPRF.LT.0) THEN
|
|
IGRIE0=IGRIE0+1
|
|
IGRIEM(IL)=IGRIE0
|
|
IF(IGRIE0.GT.MGRIEM) THEN
|
|
WRITE(6,603) ALAM
|
|
GO TO 20
|
|
END IF
|
|
WGR0(1,IGRIE0)=real(WGR1,4)
|
|
WGR0(2,IGRIE0)=real(WGR2,4)
|
|
WGR0(3,IGRIE0)=real(WGR3,4)
|
|
WGR0(4,IGRIE0)=real(WGR4,4)
|
|
END IF
|
|
20 CONTINUE
|
|
GO TO 10
|
|
C
|
|
100 NLIN0=IL
|
|
NNLT=INNLT0
|
|
NGRIEM=IGRIE0
|
|
ALM1=CNM/FREQ0(1)
|
|
IF(ALAM0.LT.ALM1.AND.IMODE.NE.1) THEN
|
|
ALAM0=ALM1-4.*DOPLAM
|
|
IF(ALAM0.LT.ALAM00) ALAM0=ALAM00
|
|
END IF
|
|
ALM2=CNM/FREQ0(NLIN0)
|
|
IF(NLIN0.GT.1) ALM2=CNM/FREQ0(NLIN0-1)
|
|
IF(ALAST.GT.ALM2.AND.IMODE.NE.1) THEN
|
|
ALAST=ALM2-4.*DOPLAM
|
|
IF(ALAST.GT.ALAST0) ALAST=ALAST0
|
|
FRLAST=CNM/ALAST
|
|
END IF
|
|
IBLANK=0
|
|
relop=relop0
|
|
C
|
|
WRITE(6,611) NLIN0
|
|
611 FORMAT(/' ATOMIC LINES :',I10/)
|
|
c WRITE(6,611) NLIN0,NNLT,NGRIEM
|
|
c 611 FORMAT(/' LINES - TOTAL :',I10
|
|
c * /' LINES - NLTE :',I10
|
|
c * /' LINES - GRIEM :',I10/)
|
|
601 FORMAT('0 **** MORE LINES THAN MLIN0, LINE LIST TRUNCATED '/
|
|
*' AT LAMBDA',F15.4,' NM'/)
|
|
c 602 FORMAT('0 **** MORE LINES WITH SPECIAL PROFILES THAN MPRF'/
|
|
c *' FOR LINES WITH LAMBDA GREATER THAN',F15.4,' NM'/)
|
|
603 FORMAT('0 **** MORE LINES WITH GRIEM PROFILES THAN MGRIEM'/
|
|
*' FOR LINES WITH LAMBDA GREATER THAN',F15.4,' NM'/)
|
|
c 604 FORMAT('0 **** MORE LINES IN NLTE OPTION THAN MNLT'/
|
|
c *' FOR LINES WITH LAMBDA GREATER THAN',F15.4,' NM'/)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INIBLA
|
|
C =================
|
|
C
|
|
C driving procedure for treating a partial line list for the
|
|
C current wavelength region
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
C
|
|
PARAMETER (DP0=3.33564E-11, DP1=1.651E8,
|
|
c * VW1=0.42, VW2=0.3, TENM4=1.E-4)
|
|
* VW1=0.42, VW2=0.45,TENM4=1.E-4)
|
|
PARAMETER (UN=1.)
|
|
C
|
|
IF(NLIN.EQ.0) RETURN
|
|
XX=FREQ(1)
|
|
IF(NFREQ.GE.2) XX=0.5*(FREQ(1)+FREQ(2))
|
|
if(ifwin.gt.0) XX=0.5*(FREQC(1)+FREQC(NFREQC))
|
|
BNU=BN*(XX*1.E-15)**3
|
|
HKF=HK*XX
|
|
if(ifwin.gt.0) XX=un
|
|
DO 20 ID=1,ND
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
EXH=EXP(HKF/T)
|
|
EXHK(ID)=UN/EXH
|
|
PLAN(ID)=BNU/(EXH-UN)
|
|
STIM(ID)=UN-EXHK(ID)
|
|
if(iath.gt.0) then
|
|
ANP=POPUL(NKH,ID)
|
|
AH=DENS(ID)/WMM(ID)/YTOT(ID)-ANP
|
|
else
|
|
ah=rrr(id,1,1)
|
|
end if
|
|
AHE=RRR(ID,1,2)
|
|
VDWC(ID)=(AH+VW1*AHE+0.85*ANH2(ID))*(T*TENM4)**VW2
|
|
DO 10 IAT=1,MATOM
|
|
IF(AMAS(IAT).GT.0.)
|
|
* DOPA1(IAT,ID)=UN/(XX*DP0*SQRT(DP1*T/AMAS(IAT)+VTURB(ID)))
|
|
10 CONTINUE
|
|
20 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE IDTAB
|
|
C ================
|
|
C
|
|
C output of selected line parameters (identification table)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
CHARACTER*4 TYPION(30)
|
|
CHARACTER*4 APB,AP0,AP1,AP2,AP3,AP4,APR
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
COMMON/REFDEP/IREFD(MFRQ)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
C
|
|
PARAMETER (C1=2.3025851, C2=4.2014672, C3=1.4387886)
|
|
DATA TYPION /' I ',' II ',' III',' IV ',' V ',
|
|
* ' VI ',' VII','VIII',' IX ',' X ',
|
|
* ' XI ',' XII','XIII',' XIV',' XV ',
|
|
* ' XVI','XVII',' 18 ',' XIX',' XX ',
|
|
* ' XXI','XXII',' 23 ','XXIV','XXV ',
|
|
* 'XXVI',' 27 ',' 28 ','XXIX',' XXX'/
|
|
DATA APB,AP0,AP1,AP2,AP3,AP4 /' ',' .',' *',' **',' ***',
|
|
* '****'/
|
|
C
|
|
IF(NLIN.EQ.0) GO TO 100
|
|
C
|
|
ALM0=2.997925D18/FREQ(1)
|
|
ALM1=2.997925D18/FREQ(2)
|
|
if(ifwin.gt.0) ALM0=2.997925D18/FRQOBS(1)
|
|
if(ifwin.gt.0) ALM1=2.997925D18/FRQOBS(NFREQ)
|
|
IF(IPRIN.LE.-2) RETURN
|
|
if(iprin.ge.2) then
|
|
c IF(IMODE.GE.0.OR.(IMODE.EQ.-1.AND.IBLANK.EQ.1)) WRITE(6,602)
|
|
end if
|
|
C
|
|
DO IL0=1,NLIN
|
|
IL=INDLIN(IL0)
|
|
ALAM=2.997925D18/FREQ0(IL)
|
|
ID=IDSTD
|
|
IJCN=IJCNTR(IL0)
|
|
ID0=0
|
|
IF(IJCN.GE.1.AND.IJCN.LE.NFREQS) ID0=IREFD(IJCN)
|
|
IF(ID0.GT.0.and.id0.lt.nd) ID=ID0
|
|
IAT=INDAT(IL)/100
|
|
ION=MOD(INDAT(IL),100)
|
|
CALL PROFIL(IL,IAT,ID,AGAM)
|
|
ABCNT=EXP(GF0(IL)-EXCL0(IL)/TEMP(ID))*RRR(ID,ION,IAT)*
|
|
* STIM(ID)
|
|
absta=min(ch(1,idstd),ch(2,idstd))
|
|
if(ifwin.le.0) then
|
|
DOP1=DOPA1(IAT,ID)
|
|
str0=abcnt*dop1/absta
|
|
else
|
|
DOP1=DOPA1(IAT,ID)/FREQ0(IL)
|
|
STR0=ABCNT*DOP1/ABSTDW(IJCONT(IL),ID)
|
|
end if
|
|
GF=(GF0(IL)+C2)/C1
|
|
EXCL=EXCL0(IL)/C3
|
|
IF(STR0.LE.1.2) THEN
|
|
WW1=0.886*STR0*(1.-STR0*(0.707-STR0*0.577))
|
|
ELSE
|
|
WW1=SQRT(LOG(STR0))
|
|
END IF
|
|
IF(STR0.GT.55.) THEN
|
|
WW2=0.5*SQRT(3.14*AGAM*STR0)
|
|
IF(WW2.GT.WW1) WW1=WW2
|
|
END IF
|
|
EQW=ALAM/FREQ0(IL)*1.E3/DOP1*WW1
|
|
STR=EQW*10.
|
|
APR=APB
|
|
IF(STR.GE.1.E0.AND.STR.LT.1.E1) APR=AP0
|
|
IF(STR.GE.1.E1.AND.STR.LT.1.E2) APR=AP1
|
|
IF(STR.GE.1.E2.AND.STR.LT.1.E3) APR=AP2
|
|
IF(STR.GE.1.E3.AND.STR.LT.1.E4) APR=AP3
|
|
IF(STR.GE.1.E4) APR=AP4
|
|
if(alam.ge.alm0.and.alam.lt.alm1) then
|
|
ill=ilown(il)
|
|
ilu=iupn(il)
|
|
if(ill.gt.0) ill=ill-nfirst(iel(ill))+1
|
|
if(ilu.gt.0) ilu=ilu-nfirst(iel(ilu))+1
|
|
|
|
WRITE(12,603) ALAM,TYPAT(IAT),TYPION(ION),GF,EXCL,
|
|
* STR0,EQW,APR,ill,ilu,id
|
|
end if
|
|
END DO
|
|
C
|
|
c 602 FORMAT(/1H ,13X,
|
|
c * 'LAMBDA ATOM LOG GF ELO LINE/CONT',2X,
|
|
c * 'EQ.WIDTH'/)
|
|
603 FORMAT(F11.3,2X,A4,A3,F7.2,F12.3,1PE11.2,0PF8.1,1X,A4,
|
|
* 3i4)
|
|
C
|
|
100 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INIBLH
|
|
C =================
|
|
C
|
|
C output information about hydrogen lines
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
CHARACTER*4 TYPION(30)
|
|
CHARACTER*4 APB,AP0,AP1,AP2,AP3,AP4,APR
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
C
|
|
PARAMETER (C1=2.3025851, C2=4.2014672, C3=1.4387886)
|
|
PARAMETER (DP0=3.33564E-11, DP1=1.651E8,
|
|
* VW1=0.42, VW2=0.45,TENM4=1.E-4)
|
|
PARAMETER (UN=1.)
|
|
|
|
DATA TYPION /' I ',' II ',' III',' IV ',' V ',
|
|
* ' VI ',' VII','VIII',' IX ',' X ',
|
|
* ' XI ',' XII','XIII',' XIV',' XV ',
|
|
* ' XVI','XVII',' 18 ',' XIX',' XX ',
|
|
* ' XXI','XXII',' 23 ','XXIV','XXV ',
|
|
* 'XXVI',' 27 ',' 28 ','XXIX',' XXX'/
|
|
DATA APB,AP0,AP1,AP2,AP3,AP4 /' ',' .',' *',' **',' ***',
|
|
* '****'/
|
|
C
|
|
IF(IPRIN.LE.-2.OR.IHYL.LT.0) RETURN
|
|
ALM0=2.997925D18/FREQ(1)
|
|
ALM1=2.997925D18/FREQ(2)
|
|
XX=FREQ(1)
|
|
IF(NFREQ.GE.2) XX=0.5*(FREQ(1)+FREQ(2))
|
|
BNU=BN*(XX*1.E-15)**3
|
|
HKF=HK*XX
|
|
C
|
|
IAT=1
|
|
ION=1
|
|
IZZ=1
|
|
ID=IDSTD
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
EXH=EXP(HKF/T)
|
|
EXHK(ID)=UN/EXH
|
|
PLAN(ID)=BNU/(EXH-UN)
|
|
STIM(ID)=UN-EXHK(ID)
|
|
DOPA1(IAT,ID)=UN/(XX*DP0*SQRT(DP1*T/AMAS(IAT)+VTURB(ID)))
|
|
ISERL=ILOWH
|
|
ISERU=ILOWH
|
|
IF(alm0.GT.17000..AND.alm1.LT.21000.) THEN
|
|
ISERL=3
|
|
ISERU=4
|
|
ELSE IF(alm0.GT.22700.) THEN
|
|
ISERL=4
|
|
ISERU=5
|
|
IF(alm0.GT.32800.) ISERU=6
|
|
IF(alm0.GT.44660.) ISERU=7
|
|
END IF
|
|
C
|
|
DO I=ISERL,ISERU
|
|
II=I*I
|
|
XII=UN/II
|
|
M1=M10
|
|
IF(I.LT.ILOWH) M1=ILOWH-1
|
|
M2=M1+1
|
|
IF(M1.LT.I+1) M1=I+1
|
|
M1=M1-1
|
|
M2=M20+3
|
|
IF(M1.LT.I+1) M1=I+1
|
|
if(grav.gt.3.) then
|
|
m2=m2+5
|
|
m1=m1-3
|
|
if(m1.gt.i+6) m1=m1-3
|
|
end if
|
|
if(grav.gt.6.) then
|
|
m2=m2+2
|
|
m1=m1-1
|
|
if(m1.gt.i+6) m1=m1-1
|
|
end if
|
|
IF(M1.LT.I+1) M1=I+1
|
|
IF(M2.GT.20) M2=20
|
|
ILINH=0
|
|
DO J=M2,M1,-1
|
|
CALL STARK0(I,J,izz,XKIJ,WL0,FIJ,FIJ0)
|
|
ALAM=WL0
|
|
if(alam.ge.alm0.and.alam.lt.alm1) then
|
|
ILINH=ILINH+1
|
|
GH=2.*II
|
|
GF=LOG10(FIJ*GH)
|
|
EXCL=109679.*(1.-XII)
|
|
EXCL0H=EXCL*C3
|
|
GF0H=GF*C1-C2
|
|
ABCNT=EXP(GF0H-EXCL0H/TEMP(ID))*RRR(ID,ION,IAT)*
|
|
* DOPA1(IAT,ID)*STIM(ID)
|
|
STR0=ABCNT/ABSTD(ID)
|
|
IF(STR0.LE.1.2) THEN
|
|
WW1=0.886*STR0*(1.-STR0*(0.707-STR0*0.577))
|
|
ELSE
|
|
WW1=SQRT(LOG(STR0))
|
|
END IF
|
|
IF(STR0.GT.55.) THEN
|
|
agam=0.01
|
|
WW2=0.5*SQRT(3.14*AGAM*STR0)
|
|
IF(WW2.GT.WW1) WW1=WW2
|
|
END IF
|
|
EQW=ALAM*ALAM/3.E18*1.E3/DOPA1(IAT,ID)*WW1
|
|
STR=EQW*10.
|
|
APR=APB
|
|
IF(STR.GE.1.E0.AND.STR.LT.1.E1) APR=AP0
|
|
IF(STR.GE.1.E1.AND.STR.LT.1.E2) APR=AP1
|
|
IF(STR.GE.1.E2.AND.STR.LT.1.E3) APR=AP2
|
|
IF(STR.GE.1.E3.AND.STR.LT.1.E4) APR=AP3
|
|
IF(STR.GE.1.E4) APR=AP4
|
|
c if(iprin.ge.2)
|
|
c * WRITE(6,601) ALAM,TYPAT(IAT),TYPION(ION),GF,EXCL,
|
|
c * STR0,EQW,APR,i,j
|
|
WRITE(14,601) ALAM,TYPAT(IAT),TYPION(ION),GF,EXCL,
|
|
* STR0,EQW,APR,i,j
|
|
end if
|
|
END DO
|
|
END DO
|
|
C
|
|
601 FORMAT(F10.3,2X,2A4,F7.2,F12.3,1PE11.2,0PF8.1,1X,A4,2i3)
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE NLTSET(MODE,IL,IAT,ION,ALAM0,EXCL,EXCU,QL,QU,
|
|
* ISQL,ILQL,IPQL,ISQU,ILQU,IPQU,IEVEN,INNLT0,ILMATCH)
|
|
C ===============================================================
|
|
C
|
|
C NLTE option - automatic assignement of level indices
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
PARAMETER (MNION = MIOEX,
|
|
* MNLEV = MLEVEL,
|
|
* ECONST= 5.03411142E15)
|
|
PARAMETER (INLLEV = 13)
|
|
COMMON/NL2PAR/ELIMEV(MNION,MNLEV),ELIMOD(MNION,MNLEV),
|
|
* ELIML(MNION,MNLEV),
|
|
* ENREV(MNION,MNLEV),ENROD(MNION,MNLEV),
|
|
* INDEV(MNION,MNLEV),INDOD(MNION,MNLEV),
|
|
C * INDLV(MNION,MNLEV),
|
|
* INDLV(MNION,MNLEV),INDIO(MNION),
|
|
* NEVEN(MNION),NODD(MNION),NODD0,NLEVS(MNION),
|
|
* IATN(MNION),IONN(MNION),NNION
|
|
COMMON/PRINTP/TYPLEV
|
|
CHARACTER*10 TYPLEV(MLEVEL),typ
|
|
character*4 typ1
|
|
character*2 typ2
|
|
character*2 typin(60)
|
|
data typin /' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9','10',
|
|
* '11','12','13','14','15','16','17','18','19','20',
|
|
* '21','22','23','24','25','26','27','28','29','30',
|
|
* '31','32','33','34','35','36','37','38','39','40',
|
|
* '41','42','43','44','45','46','47','48','49','50',
|
|
* '51','52','53','54','55','56','57','58','59','60'/
|
|
C
|
|
C +++++++++++++++++++++++++++
|
|
C MODE = 0 - initialization
|
|
C +++++++++++++++++++++++++++
|
|
C
|
|
IF(MODE.EQ.0) THEN
|
|
NNION=0
|
|
READ(INLLEV,*,END=55,ERR=55) NNION
|
|
IF(NNION.LE.0) GO TO 55
|
|
DO I=1,NNION
|
|
READ(INLLEV,*) IATN(I),IONN(I)
|
|
READ(INLLEV,*) NEVEN(I)
|
|
IF(NEVEN(I).GT.0) THEN
|
|
DO J=1,NEVEN(I)
|
|
READ(INLLEV,*) ELIMEV(I,J)
|
|
END DO
|
|
READ(INLLEV,*) NODD(I)
|
|
NODD0=NODD(I)
|
|
IF(NODD(I).GT.0) THEN
|
|
DO J=1,NODD(I)
|
|
READ(INLLEV,*) ELIMOD(I,J)
|
|
END DO
|
|
ELSE
|
|
NODD(I)=NEVEN(I)
|
|
DO J=1,NODD(I)
|
|
ELIMOD(I,J)=ELIMEV(I,J)
|
|
END DO
|
|
END IF
|
|
INDION=0
|
|
DO IONEX=1,NION
|
|
N0I=NFIRST(IONEX)
|
|
IA=NUMAT(IATM(N0I))
|
|
IF(IA.EQ.IATN(I).AND.IZ(IONEX)-1.EQ.IONN(I)) INDION=IONEX
|
|
END DO
|
|
IF(INDION.LE.0) THEN
|
|
call quit(' INCONSISTENCY IN UNIT 13 INPUT - NLTE')
|
|
END IF
|
|
NOFF=NFIRST(INDION)-1
|
|
c
|
|
ine=1
|
|
ino=1
|
|
do ii=nfirst(indion),nlast(indion)
|
|
TYP=TYPLEV(II)
|
|
typ1=typ(2:5)
|
|
typ2=typ(8:9)
|
|
iev=0
|
|
if(typ1.eq.'even') iev=1
|
|
do k=1,60
|
|
if(typin(k).eq.typ2) ind=k
|
|
end do
|
|
if(iev.eq.1) then
|
|
indev(i,ine)=ii
|
|
write(11,*) 'super-e ',i,ii,ine,elimev(i,ine)
|
|
ine=ine+1
|
|
else
|
|
indod(i,ino)=ii
|
|
write(11,*) 'super-o ',i,ii,ino,elimod(i,ino)
|
|
ino=ino+1
|
|
end if
|
|
end do
|
|
END IF
|
|
END DO
|
|
C
|
|
55 CONTINUE
|
|
C
|
|
INDION=NNION
|
|
DO 90 IONEX=1,NION
|
|
N0I=NFIRST(IONEX)
|
|
IA=NUMAT(IATM(N0I))
|
|
if(isemex(ia).ge.1) go to 90
|
|
IONM1=IZ(IONEX)-1
|
|
IF(IA.EQ.1.OR.IA.EQ.2) GO TO 90
|
|
DO I=1,NNION
|
|
IF(IA.EQ.IATN(I).AND.IONM1.EQ.IONN(I)) GO TO 90
|
|
END DO
|
|
IF(NFIRST(IONEX).EQ.NLAST(IONEX)) GO TO 90
|
|
INDION=INDION+1
|
|
EION=ENION(NFIRST(IONEX))
|
|
NLEVS(INDION)=NLAST(IONEX)-NFIRST(IONEX)+1
|
|
INDIO(INDION)=IONEX
|
|
NEVEN(INDION)=0
|
|
IATN(INDION)=IA
|
|
IONN(INDION)=IONM1
|
|
DELE=0.
|
|
DO II=NFIRST(IONEX),NLAST(IONEX)
|
|
I=II-NFIRST(IONEX)+1
|
|
E=(EION-ENION(II))*ECONST
|
|
IF(II.LT.NLAST(IONEX)) THEN
|
|
E1=(EION-ENION(II+1))*ECONST
|
|
DELE=0.5*(E1-E)
|
|
ELIML(INDION,I)=E+DELE
|
|
ELSE
|
|
IF(INLTE.GE.2) THEN
|
|
ELIML(INDION,I)=E+DELE
|
|
ELSE
|
|
ELIML(INDION,I)=EION*ECONST
|
|
END IF
|
|
END IF
|
|
INDLV(INDION,I)=II
|
|
END DO
|
|
90 CONTINUE
|
|
NNION=INDION
|
|
|
|
C Header for the table with the level assignments
|
|
C
|
|
if(inlte.gt.0.and.iprin.ge.1)
|
|
* WRITE(11,*)'NLTSET: IAT ION LAMBDA EXCL '//
|
|
* ' EXCU ILWN IUN'
|
|
|
|
RETURN
|
|
END IF
|
|
C
|
|
C
|
|
C ++++++++++++++++++++++++++++++++++++++++++
|
|
C MODE > 0 - level indices for the line IL
|
|
C ++++++++++++++++++++++++++++++++++++++++++
|
|
C
|
|
IF(NNION.LE.0) RETURN
|
|
INION=0
|
|
IONM1=ION-1
|
|
DO I=1,NNION
|
|
IF(IAT.EQ.IATN(I).AND.IONM1.EQ.IONN(I)) INION=I
|
|
END DO
|
|
if(isemex(iat).ge.1) RETURN
|
|
IF(INION.LE.0) RETURN
|
|
IF(NEVEN(INION).EQ.0) IEVEN=2
|
|
IF(NEVEN(INION).LT.0) GOTO 400
|
|
C
|
|
IF(IEVEN.EQ.1) THEN
|
|
IND=0
|
|
DO 110 J=1,NEVEN(INION)
|
|
IF(EXCL.LE.ELIMEV(INION,J)) THEN
|
|
IND=J
|
|
GO TO 120
|
|
END IF
|
|
110 CONTINUE
|
|
ILWN=0
|
|
GO TO 145
|
|
120 CONTINUE
|
|
ILWN=INDEV(INION,IND)
|
|
C
|
|
IND=0
|
|
DO 130 J=1,NODD(INION)
|
|
IF(EXCU.LE.ELIMOD(INION,J)) THEN
|
|
IND=J
|
|
GO TO 140
|
|
END IF
|
|
130 CONTINUE
|
|
IUN=0
|
|
GO TO 145
|
|
140 CONTINUE
|
|
IUN=INDOD(INION,IND)
|
|
|
|
145 CONTINUE
|
|
C
|
|
ELSE IF(IEVEN.EQ.0) THEN
|
|
IND=0
|
|
DO 150 J=1,NODD(INION)
|
|
IF(EXCL.LE.ELIMOD(INION,J)) THEN
|
|
IND=J
|
|
GO TO 160
|
|
END IF
|
|
150 CONTINUE
|
|
ILWN=0
|
|
GO TO 200
|
|
160 CONTINUE
|
|
ILWN=INDOD(INION,IND)
|
|
C
|
|
IND=0
|
|
DO 170 J=1,NEVEN(INION)
|
|
IF(EXCU.LE.ELIMEV(INION,J)) THEN
|
|
IND=J
|
|
GO TO 180
|
|
END IF
|
|
170 CONTINUE
|
|
IUN=0
|
|
GO TO 200
|
|
180 CONTINUE
|
|
IUN=INDEV(INION,IND)
|
|
200 CONTINUE
|
|
c
|
|
c transition between levels without a distinction in parity
|
|
c
|
|
ELSE
|
|
|
|
IF (ILIMITS(INDIO(INION)).EQ.0.OR.INLIST.GE.10) THEN
|
|
C level identification: using only energy limits
|
|
C
|
|
IND=0
|
|
DO 210 J=1,NLEVS(INION)
|
|
IF(EXCL.LE.ELIML(INION,J)) THEN
|
|
IND=J
|
|
GO TO 220
|
|
END IF
|
|
210 CONTINUE
|
|
ILWN=0
|
|
IUN=0
|
|
GO TO 300
|
|
220 CONTINUE
|
|
ILWN=INDLV(INION,IND)
|
|
C
|
|
IND=0
|
|
DO 230 J=1,NLEVS(INION)
|
|
IF(EXCU.LE.ELIML(INION,J)) THEN
|
|
IND=J
|
|
GO TO 240
|
|
END IF
|
|
230 CONTINUE
|
|
IUN=0
|
|
GO TO 300
|
|
240 CONTINUE
|
|
IUN=INDLV(INION,IND)
|
|
300 CONTINUE
|
|
|
|
ELSE IF (ILIMITS(INDIO(INION)).EQ.1.and.inlist.lt.10) THEN
|
|
C
|
|
C level identification: using energy limits and quantum numbers
|
|
C
|
|
|
|
IND=0
|
|
INMATCHL=0
|
|
DO 310 J=1,NLEVS(INION)
|
|
|
|
IF(EXCL.GE.ENION1(INDLV(INION,J)) .AND.
|
|
* EXCL.LE.ENION2(INDLV(INION,J)). AND.
|
|
* ((IPQL.GE.PQUANT1(INDLV(INION,J)).AND.
|
|
* IPQL.LE.PQUANT2(INDLV(INION,J))).OR.
|
|
* (IPQL.EQ.-1)) .AND.
|
|
* ((ISQL.GE.SQUANT1(INDLV(INION,J)).AND.
|
|
* ISQL.LE.SQUANT2(INDLV(INION,J))).OR.
|
|
* (ISQL.EQ.-1)) .AND.
|
|
* ((ILQL.GE.LQUANT1(INDLV(INION,J)).AND.
|
|
* ILQL.LE.LQUANT2(INDLV(INION,J))).OR.
|
|
* (ILQL.EQ.-1))
|
|
* ) THEN
|
|
|
|
IND=J
|
|
INMATCHL=INMATCHL+1
|
|
C GO TO 320
|
|
END IF
|
|
310 CONTINUE
|
|
IF (INMATCHL.GT.1)
|
|
* WRITE(11,'(A55,1X,F12.4)')
|
|
* ' NLTSET: WARNING-- multiple matches for lower level of ',
|
|
* ALAM0
|
|
IF (INMATCHL.GT.0) GO TO 320
|
|
ILWN=0
|
|
IUN=0
|
|
GO TO 350
|
|
320 CONTINUE
|
|
ILWN=INDLV(INION,IND)
|
|
C
|
|
C
|
|
IND=0
|
|
INMATCHU=0
|
|
DO 330 J=1,NLEVS(INION)
|
|
|
|
IF(EXCU.GE.ENION1(INDLV(INION,J)) .AND.
|
|
* EXCU.LE.ENION2(INDLV(INION,J)). AND.
|
|
* ((IPQU.GE.PQUANT1(INDLV(INION,J)).AND.
|
|
* IPQU.LE.PQUANT2(INDLV(INION,J))).OR.
|
|
* (IPQU.EQ.-1)) .AND.
|
|
* ((ISQU.GE.SQUANT1(INDLV(INION,J)).AND.
|
|
* ISQU.LE.SQUANT2(INDLV(INION,J))).OR.
|
|
* (ISQU.EQ.-1)) .AND.
|
|
* ((ILQU.GE.LQUANT1(INDLV(INION,J)).AND.
|
|
* ILQU.LE.LQUANT2(INDLV(INION,J))).OR.
|
|
* (ILQU.EQ.-1))
|
|
* ) THEN
|
|
|
|
IND=J
|
|
INMATCHU=INMATCHU+1
|
|
C GO TO 340
|
|
END IF
|
|
330 CONTINUE
|
|
IF (INMATCHU.GT.1)
|
|
* WRITE(11,'(A55,1X,F12.4)')
|
|
* ' NLTSET: WARNING-- multiple matches for upper level of ',
|
|
* ALAM0
|
|
IF (INMATCHU.GT.0) GO TO 340
|
|
IUN=0
|
|
GO TO 350
|
|
340 CONTINUE
|
|
IUN=INDLV(INION,IND)
|
|
350 CONTINUE
|
|
|
|
IF (INMATCHL.EQ.0.or.INMATCHU.EQ.0) THEN
|
|
ILMATCH=0
|
|
ELSE IF (INMATCHL.GT.1.or.INMATCHU.GT.1) THEN
|
|
ILMATCH=2
|
|
ELSE
|
|
ILMATCH=1
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
write(11,*)('ILIMITS is neither 0 or 1')
|
|
|
|
END IF
|
|
|
|
if(inlte.gt.0.and.iprin.ge.1)
|
|
* WRITE(11,'(10x,2(i2,1x),3x,3(F10.3,1x),2(i4,1x))')IAT,ION,
|
|
* ALAM0,EXCL,EXCU,ILWN,IUN
|
|
|
|
END IF
|
|
C
|
|
400 IF(NEVEN(INION).LT.0) THEN
|
|
NEV1=-NEVEN(INION)
|
|
IF(IEVEN.EQ.1) THEN
|
|
ILWN=0
|
|
J=1
|
|
DO WHILE (ILWN.EQ.0 .AND. J.LE.NEV1)
|
|
IF(QL.EQ.ELIMEV(INION,J)) THEN
|
|
DE=ENREV(INION,J)
|
|
IF(EXCL.NE.0.) DE=(EXCL-DE)/EXCL
|
|
IF(ABS(DE).LT.1.D-5) ILWN=INDEV(INION,J)
|
|
END IF
|
|
J=J+1
|
|
END DO
|
|
IUN=0
|
|
J=1
|
|
DO WHILE (IUN.EQ.0 .AND. J.LE.NODD(INION))
|
|
IF(QU.EQ.ELIMOD(INION,J)) THEN
|
|
DE=(EXCU-ENROD(INION,J))/EXCU
|
|
IF(ABS(DE).LT.1.D-5) IUN=INDOD(INION,J)
|
|
END IF
|
|
J=J+1
|
|
END DO
|
|
ELSE IF(IEVEN.EQ.0) THEN
|
|
ILWN=0
|
|
J=1
|
|
DO WHILE (ILWN.EQ.0 .AND. J.LE.NODD(INION))
|
|
IF(QL.EQ.ELIMOD(INION,J)) THEN
|
|
DE=ENROD(INION,J)
|
|
IF(EXCL.NE.0.) DE=(EXCL-DE)/EXCL
|
|
IF(ABS(DE).LT.1.D-5) ILWN=INDOD(INION,J)
|
|
END IF
|
|
J=J+1
|
|
END DO
|
|
IUN=0
|
|
J=1
|
|
DO WHILE (IUN.EQ.0 .AND. J.LE.NEV1)
|
|
IF(QU.EQ.ELIMEV(INION,J)) THEN
|
|
DE=(EXCU-ENREV(INION,J))/EXCU
|
|
IF(ABS(DE).LT.1.D-5) IUN=INDEV(INION,J)
|
|
END IF
|
|
J=J+1
|
|
END DO
|
|
END IF
|
|
END IF
|
|
C
|
|
IF(INLTE.EQ.5) THEN
|
|
INNLT0=INNLT0+1
|
|
INDNLT(IL)=INNLT0
|
|
ELSE IF(INLTE.EQ.4) THEN
|
|
IF(ILWN.GT.0.AND.IUN.GT.0) THEN
|
|
INDNLT(IL)=-1
|
|
END IF
|
|
ELSE IF(INLTE.EQ.3) THEN
|
|
IF(ILWN.GT.0) THEN
|
|
INDNLT(IL)=-1
|
|
END IF
|
|
ELSE
|
|
INDNLT(IL)=-1
|
|
END IF
|
|
BNUL(IL)=real(BN*(FREQ0(IL)*1.E-15)**3)
|
|
ILOWN(IL)=ILWN
|
|
IUPN(IL)=IUN
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE PHTION(ID,ABSO,EMIS,FRE,NFRE)
|
|
C ========================================
|
|
C
|
|
C Opacity due to detailed photoionization (read from tables by
|
|
C routine READPH)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/PHOTCS/PHOT(MFRQ,MPHOT),WPHT0,WPHT1,APHT(MPHOT),
|
|
* EPHT(MPHOT),GPHT(MPHOT),JPHT(MPHOT),
|
|
* NPHT
|
|
DIMENSION ABSO(MFRQ),EMIS(MFRQ),PLANF(MFRQ),STIMU(MFRQ)
|
|
DIMENSION FRE(MFRQ)
|
|
PARAMETER (C3=1.4387886)
|
|
C
|
|
IF(NPHT.LE.0) RETURN
|
|
T=TEMP(ID)
|
|
DO 10 IJ=1,NFRE
|
|
XX=FRE(IJ)
|
|
X15=XX*1.E-15
|
|
BNU=BN*X15*X15*X15
|
|
HKF=HK*XX
|
|
EXH=EXP(HKF/T)
|
|
PLANF(IJ)=BNU/(EXH-1.)
|
|
STIMU(IJ)=1.-1./EXH
|
|
10 CONTINUE
|
|
DO 30 I=1,NPHT
|
|
IF(JPHT(I).LE.0) THEN
|
|
IAT=int(APHT(I))
|
|
X=(APHT(I)-FLOAT(IAT)+1.E-4)*1.E2
|
|
ION=INT(X)+1
|
|
POP=RRR(ID,ION,IAT)*GPHT(I)*EXP(-EPHT(I)*C3/T)
|
|
ELSE
|
|
JJ=JPHT(I)
|
|
POP=POPUL(JJ,ID)
|
|
END IF
|
|
DO 20 IJ=1,NFRE
|
|
AB=PHOT(IJ,I)*POP*STIMU(IJ)
|
|
ABSO(IJ)=ABSO(IJ)+AB
|
|
EMIS(IJ)=EMIS(IJ)+AB*PLANF(IJ)
|
|
20 CONTINUE
|
|
30 CONTINUE
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ********************************************************************
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE NLTE(IL,ILW,IUN,GI,GJ)
|
|
C ===========================================
|
|
C
|
|
C Control procedure for the NLTE option
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/NLTPOP/PNLT(MATOM,MION,MDEPTH)
|
|
PARAMETER (UN = 1.,
|
|
* C3 = 1.4387886,
|
|
* XET = 8067.6,
|
|
* XET3 = XET*C3)
|
|
C
|
|
C CALCULATION OF THE
|
|
C CENTRAL OPACITY (ABCENT) AND THE LINE SOURCE FUNCTION (SLIN)
|
|
C
|
|
if(gi.le.0..or.gj.le.0.) return
|
|
ILNLT=INDNLT(IL)
|
|
IF(ILNLT.LE.0) RETURN
|
|
IAT=INDAT(IL)/100
|
|
ION=MOD(INDAT(IL),100)
|
|
EGF=EXP(GF0(IL))
|
|
BNU=BN*(FREQ0(IL)*1.E-15)**3
|
|
DP0=3.33564E-11*FREQ0(IL)
|
|
DP1=1.651E8/AMAS(IAT)
|
|
IF(ILW.LE.0) GO TO 100
|
|
C
|
|
C line is a transition between explicit levels of the
|
|
C input model
|
|
C
|
|
NKI=NNEXT(IEL(ILW))
|
|
DO 60 ID=1,ND
|
|
T=TEMP(ID)
|
|
COR=1.
|
|
PP=PNLT(IAT,ION,ID)
|
|
IF(ILW.GT.0) THEN
|
|
PI=POPUL(ILW,ID)/G(ILW)
|
|
ELSE
|
|
PI=PP*EXP((ENEV(IAT,ION)*XET3-EXCL0(IL))/T)
|
|
END IF
|
|
IF(IUN.GT.0) THEN
|
|
PJ=POPUL(IUN,ID)/G(IUN)
|
|
cor=(excu0(il)-excl0(il)+
|
|
* (enion(iun)-enion(ilw))/1.38054e-16)/t
|
|
cor=exp(cor)
|
|
ELSE
|
|
PJ=PP*EXP((ENEV(IAT,ION)*XET3-EXCU0(IL))/T)
|
|
END IF
|
|
if(pj.gt.0.) then
|
|
X=PI/PJ*cor
|
|
else
|
|
x=un
|
|
end if
|
|
IF(X.EQ.UN) X=EXP(4.79928E-11*FREQ0(IL)/T)
|
|
DOP=DP0*SQRT(DP1*T+VTURB(ID))
|
|
SLIN(ILNLT,ID)=BNU/(X-UN)
|
|
if(pi.gt.0.) ABCENT(ILNLT,ID)=PI*(UN-UN/X)*EGF/DOP
|
|
60 CONTINUE
|
|
RETURN
|
|
C
|
|
C Approximate NLTE for resonance lines - second order escape
|
|
C probablity theory form of the source function
|
|
C
|
|
C Optical depth scale
|
|
C
|
|
100 CONTINUE
|
|
ALMIL=2.997925E17/FREQ0(IL)
|
|
HKF=HK*FREQ0(IL)
|
|
DO 110 ID=1,ND
|
|
T=TEMP(ID)
|
|
DOP=DP0*SQRT(DP1*T+VTURB(ID))
|
|
X=EXP(HKF/T)
|
|
ABCENT(ILNLT,ID)=EGF*EXP(-EXCL0(IL)/T)*RRR(ID,ION,IAT)/
|
|
* DOP*(1.-1./X)
|
|
AB=ABSTD(ID)+ABCENT(ILNLT,ID)*1.77245
|
|
if(ifwin.gt.0)
|
|
* AB=ABSTDW(IJCONT(IL),ID)+ABCENT(ILNLT,ID)*1.77245
|
|
IF(ID.EQ.1) THEN
|
|
ABM=AB/DENS(1)
|
|
TAU=0.5*DM(1)*ABM
|
|
ELSE
|
|
AB0=AB/DENS(ID)
|
|
TAU=TAU+0.5*(DM(ID)-DM(ID-1))*(AB0+ABM)
|
|
ABM=AB0
|
|
END IF
|
|
C
|
|
C approximate epsilon after Kastner
|
|
C
|
|
E=EPS(T,ELEC(ID),ALMIL,ION,IUN)
|
|
XK2=XK2DOP(TAU)
|
|
SLIN(ILNLT,ID)=SQRT(E/(E+(1.-E)*XK2))*BNU/(X-1.)
|
|
110 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE LINOP(ID,ABLIN,EMLIN,AVAB)
|
|
C =====================================
|
|
C
|
|
C TOTAL LINE OPACITY (ABLIN) AND EMISSIVITY (EMLIN)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
PARAMETER (UN = 1.,
|
|
* EXT0 = 3.17,
|
|
* TEN = 10.,
|
|
* C3 = 1.4387886,
|
|
* XET = 8067.6,
|
|
* XET3 = XET*C3)
|
|
DIMENSION ABLIN(MFREQ),EMLIN(MFREQ),ABLINN(MFREQ)
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
COMMON/NLTPOP/PNLT(MATOM,MION,MDEPTH)
|
|
common/lasers/lasdel
|
|
C
|
|
DO 10 IJ=1,NFREQ
|
|
ABLIN(IJ)=0.
|
|
ABLINN(IJ)=0.
|
|
EMLIN(IJ)=0.
|
|
10 CONTINUE
|
|
C
|
|
IF(NLIN.EQ.0) RETURN
|
|
C
|
|
C overall loop over contributing lines
|
|
C
|
|
TEM1=UN/TEMP(ID)
|
|
DO 100 I=1,NLIN
|
|
IL=INDLIN(I)
|
|
INNLT=INDNLT(IL)
|
|
IAT=INDAT(IL)/100
|
|
ION=MOD(INDAT(IL),100)
|
|
LPR=.TRUE.
|
|
ISP=ISPRF(IL)
|
|
IF(ISP.GT.1.AND.ISP.LE.5) LPR=.FALSE.
|
|
IF (ISP.GE.6) GO TO 100
|
|
CALL PROFIL(IL,IAT,ID,AGAM)
|
|
DOP1=DOPA1(IAT,ID)
|
|
FR0=FREQ0(IL)
|
|
IF(INNLT.EQ.0) THEN
|
|
AB0=EXP(GF0(IL)-EXCL0(IL)*TEM1)*RRR(ID,ION,IAT)*
|
|
* DOP1*STIM(ID)
|
|
ELSE IF(INNLT.GT.0) THEN
|
|
AB0=ABCENT(INNLT,ID)
|
|
SL0=SLIN(INNLT,ID)
|
|
ELSE
|
|
ILW=ILOWN(IL)
|
|
IUN=IUPN(IL)
|
|
COR=1.
|
|
PP=PNLT(IAT,ION,ID)
|
|
IF(ILW.GT.0) THEN
|
|
PI=POPUL(ILW,ID)/G(ILW)
|
|
ELSE
|
|
PI=PP*EXP((ENEV(IAT,ION)*XET3-EXCL0(IL))*TEM1)
|
|
END IF
|
|
IF(IUN.GT.0) THEN
|
|
PJ=POPUL(IUN,ID)/G(IUN)
|
|
cor=(excu0(il)-excl0(il)+
|
|
* (enion(iun)-enion(ilw))/1.38054e-16)*tem1
|
|
cor=exp(cor)
|
|
ELSE
|
|
PJ=PP*EXP((ENEV(IAT,ION)*XET3-EXCU0(IL))*TEM1)
|
|
END IF
|
|
if(pj.gt.0.) then
|
|
X=PI/PJ*cor
|
|
else
|
|
x=un
|
|
end if
|
|
IF(X.EQ.UN) X=EXP(4.79928E-11*FREQ0(IL)*TEM1)
|
|
SL0=BNUL(IL)/(X-UN)
|
|
ab0=0.
|
|
if(pi.gt.0.) AB0=PI*(UN-UN/X)*EXP(GF0(IL))*DOP1
|
|
END IF
|
|
if(ab0.le.0.and.lasdel) go to 100
|
|
C
|
|
C set up limiting frequencies where the line I is supposed to
|
|
C contribute to the opacity
|
|
C
|
|
EX0=AB0/AVAB*AGAM
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
EXT=EXT/DOP1
|
|
XIJEXT=DFRCON*EXT+1.5
|
|
c IJ1=MAX(IJCNTR(I)-IJEXT,3)
|
|
c IJ2=MIN(IJCNTR(I)+IJEXT,NFREQS)
|
|
IJ1=int(MAX(float(IJCNTR(I))-XIJEXT,3.))
|
|
IJ2=int(MIN(float(IJCNTR(I))+XIJEXT,float(NFREQS)))
|
|
IF(IJ1.GE.NFREQ.OR.IJ2.LE.2) GO TO 100
|
|
C
|
|
IF(INNLT.EQ.0) THEN
|
|
C
|
|
C *********
|
|
C LTE lines
|
|
C *********
|
|
C
|
|
IF(LPR) THEN
|
|
C
|
|
DO 40 IJ=IJ1,IJ2
|
|
XF=ABS(FREQ(IJ)-FR0)*DOP1
|
|
ABLIN(IJ)=ABLIN(IJ)+AB0*VOIGTK(AGAM,XF)
|
|
40 CONTINUE
|
|
C
|
|
C special expressions for 4 selected He I lines
|
|
C
|
|
ELSE
|
|
DO 60 IJ=3,NFREQ
|
|
FR=FREQ(IJ)
|
|
ABL=AB0*PHE1(ID,FR,ISP-1)
|
|
ABLIN(IJ)=ABLIN(IJ)+ABL
|
|
60 CONTINUE
|
|
END IF
|
|
C
|
|
C **********
|
|
C NLTE LINES
|
|
C **********
|
|
C
|
|
ELSE
|
|
IF(LPR) THEN
|
|
C
|
|
DO 80 IJ=IJ1,IJ2
|
|
XF=ABS(FREQ(IJ)-FR0)*DOP1
|
|
ABL=AB0*VOIGTK(AGAM,XF)
|
|
ABLINN(IJ)=ABLINN(IJ)+ABL
|
|
EMLIN(IJ)=EMLIN(IJ)+ABL*SL0
|
|
80 CONTINUE
|
|
C
|
|
C again, special expressions for 4 selected He I lines
|
|
C
|
|
ELSE
|
|
DO 90 IJ=3,NFREQ
|
|
FR=FREQ(IJ)
|
|
ABL=AB0*PHE1(ID,FR,ISP-1)
|
|
ABLINN(IJ)=ABLINN(IJ)+ABL
|
|
EMLIN(IJ)=EMLIN(IJ)+ABL*SL0
|
|
90 CONTINUE
|
|
END IF
|
|
END IF
|
|
100 CONTINUE
|
|
C
|
|
DO 110 IJ=3,NFREQ
|
|
EMLIN(IJ)=EMLIN(IJ)+ABLIN(IJ)*PLAN(ID)
|
|
ABLIN(IJ)=ABLIN(IJ)+ABLINN(IJ)
|
|
110 CONTINUE
|
|
C
|
|
C special routine for selected He II lines
|
|
C
|
|
IF(NSP.EQ.0) RETURN
|
|
DO 120 IS=1,NSP
|
|
ISP=ISP0(IS)
|
|
IF(ISP.GE.6.AND.ISP.LE.24) CALL PHE2(ISP,ID,ABLIN,EMLIN)
|
|
120 CONTINUE
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE LINOPW(ID,ABLIN,EMLIN)
|
|
C =================================
|
|
C
|
|
C TOTAL LINE OPACITY (ABLIN) AND EMISSIVITY (EMLIN)
|
|
C (a variant for winds)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
PARAMETER (UN = 1.,
|
|
* EXT0 = 3.17,
|
|
* TEN = 10.,
|
|
* C3 = 1.4387886,
|
|
* XET = 8067.6,
|
|
* XET3 = XET*C3)
|
|
DIMENSION ABLIN(MFREQ),EMLIN(MFREQ),ABLINN(MFREQ)
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
COMMON/NLTPOP/PNLT(MATOM,MION,MDEPTH)
|
|
COMMON/IPOTLS/IPOTL(mlin0)
|
|
common/lasers/lasdel
|
|
common/linrej/ilne(mdepth),ilvi(mdepth)
|
|
common/velaux/velmax,iemoff,nltoff,itrad
|
|
C
|
|
DO 10 IJ=1,NFREQ
|
|
ABLIN(IJ)=0.
|
|
ABLINN(IJ)=0.
|
|
EMLIN(IJ)=0.
|
|
10 CONTINUE
|
|
wdil(id)=1.
|
|
plw=plan(id)*wdil(id)
|
|
c plw=xjcon(id)
|
|
C
|
|
IF(NLIN.EQ.0) RETURN
|
|
C
|
|
C overall loop over contributing lines
|
|
C
|
|
TEM1=UN/TEMP(ID)
|
|
HKT=HK*TEM1
|
|
xx=freq(nopac)-freq(1)
|
|
DFRCON=NOPAC-1
|
|
DFRCON=-DFRCON/XX
|
|
IFRCON=int(DFRCON)
|
|
DO 100 I=1,NLIN
|
|
IL=INDLIN(I)
|
|
INNLT=INDNLT(IL)
|
|
c
|
|
c rejecting lines for v > velmax
|
|
c
|
|
if(ilvi(id).gt.0) then
|
|
if(innlt.eq.0) then
|
|
go to 100
|
|
else
|
|
if(nltoff.ne.0) go to 100
|
|
end if
|
|
end if
|
|
c
|
|
c
|
|
c frequency indices of the line centers
|
|
c
|
|
if (id.eq.1) then
|
|
|
|
fr0=freq0(il)
|
|
XJC=3.+DFRCON*(FREQ(1)-FR0)
|
|
IJC=int(XJC)
|
|
IJCNTR(I)=IJC
|
|
if(ijc.le.1.or.ijc.ge.nopac) go to 255
|
|
if(fr0.lt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=freq(ijc0)-fr0
|
|
252 ijc0=ijc0+1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0+1
|
|
dfr0=dfr
|
|
go to 252
|
|
end if
|
|
else if(fr0.gt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=fr0-freq(ijc0)
|
|
254 ijc0=ijc0-1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0-1
|
|
dfr0=dfr
|
|
go to 254
|
|
end if
|
|
end if
|
|
IJCNTR(I)=IJC
|
|
255 continue
|
|
c write(80,*) i,ijcntr(i),2.997925e18/freq0(il)
|
|
endif
|
|
c
|
|
IAT=INDAT(IL)/100
|
|
ION=MOD(INDAT(IL),100)
|
|
FR0=FREQ0(IL)
|
|
LPR=.TRUE.
|
|
ISP=ISPRF(IL)
|
|
IF(ISP.GT.1.AND.ISP.LE.5) LPR=.FALSE.
|
|
IF (ISP.GE.6) GO TO 100
|
|
CALL PROFIL(IL,IAT,ID,AGAM)
|
|
DOP1=DOPA1(IAT,ID)/FR0
|
|
FR0=FREQ0(IL)
|
|
IF(INNLT.EQ.0) THEN
|
|
if(itrad.le.0) then
|
|
AB0=EXP(GF0(IL)-EXCL0(IL)*TEM1)*RRR(ID,ION,IAT)*
|
|
* DOP1*(1.-exp(-hkt*fr0))
|
|
else
|
|
trl=trad(ipotl(il),id)
|
|
xx=exp(-hkt*fr0)
|
|
AB0=EXP(GF0(IL)-EXCL0(IL)/trl)*RRR(ID,ION,IAT)*
|
|
* DOP1*(1.-xx)
|
|
if(excl0(il).gt.2000.) ab0=ab0*wdil(id)
|
|
pla=1.4743e-2*(fr0*1.e-15)**3*xx/(1.-xx)
|
|
sl0=pla*wdil(id)
|
|
end if
|
|
ELSE IF(INNLT.GT.0) THEN
|
|
AB0=ABCENT(INNLT,ID)
|
|
SL0=SLIN(INNLT,ID)
|
|
ELSE
|
|
ILW=ILOWN(IL)
|
|
IUN=IUPN(IL)
|
|
COR=1.
|
|
PP=PNLT(IAT,ION,ID)
|
|
IF(ILW.GT.0) THEN
|
|
PI=POPUL(ILW,ID)/G(ILW)
|
|
ELSE
|
|
PI=PP*EXP((ENEV(IAT,ION)*XET3-EXCL0(IL))*TEM1)
|
|
END IF
|
|
IF(IUN.GT.0) THEN
|
|
PJ=POPUL(IUN,ID)/G(IUN)
|
|
cor=(excu0(il)-excl0(il)+
|
|
* (enion(iun)-enion(ilw))/1.38054e-16)*tem1
|
|
cor=exp(cor)
|
|
ELSE
|
|
PJ=PP*EXP((ENEV(IAT,ION)*XET3-EXCU0(IL))*TEM1)
|
|
END IF
|
|
if(pj.gt.0.) then
|
|
X=PI/PJ*cor
|
|
else
|
|
x=un
|
|
end if
|
|
IF(X.EQ.UN) X=EXP(4.79928E-11*FREQ0(IL)*TEM1)
|
|
SL0=BNUL(IL)/(X-UN)
|
|
ab0=0.
|
|
if(pi.gt.0.) AB0=PI*(UN-UN/X)*EXP(GF0(IL))*DOP1
|
|
END IF
|
|
if(ab0.le.0.and.lasdel) go to 100
|
|
C
|
|
C set up limiting frequencies where the line I is supposed to
|
|
C contribute to the opacity
|
|
C
|
|
c if(ifwin.le.0) then
|
|
avabw=abstdw(ijcont(il),id)*relop
|
|
EX0=AB0/AVABw*AGAM
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
EXT=EXT/DOP1
|
|
IJEXT=int((DFRCON*EXT)+1.5)
|
|
IJ1=MAX(IJCNTR(I)-IJEXT,1)
|
|
IJ2=MIN(IJCNTR(I)+IJEXT,NFREQ)
|
|
IF(IJ1.GE.NFREQ.OR.IJ2.LE.2) GO TO 100
|
|
c else
|
|
c ij1=3
|
|
c ij2=nfreq
|
|
c end if
|
|
C
|
|
IF(INNLT.EQ.0.and.itrad.le.0) THEN
|
|
C
|
|
C *********
|
|
C LTE lines
|
|
C *********
|
|
C
|
|
IF(LPR) THEN
|
|
C
|
|
DO 40 IJ=IJ1,IJ2
|
|
XF=ABS(FREQ(IJ)-FR0)*DOP1
|
|
ABLIN(IJ)=ABLIN(IJ)+AB0*VOIGTK(AGAM,XF)
|
|
40 CONTINUE
|
|
C
|
|
C special expressions for 4 selected He I lines
|
|
C
|
|
ELSE
|
|
DO 60 IJ=1,NFREQ
|
|
FR=FREQ(IJ)
|
|
ABL=AB0*PHE1(ID,FR,ISP-1)
|
|
ABLIN(IJ)=ABLIN(IJ)+ABL
|
|
60 CONTINUE
|
|
END IF
|
|
C
|
|
C **********
|
|
C NLTE LINES
|
|
C **********
|
|
C
|
|
ELSE
|
|
IF(LPR) THEN
|
|
C
|
|
DO 80 IJ=IJ1,IJ2
|
|
XF=ABS(FREQ(IJ)-FR0)*DOP1
|
|
ABL=AB0*VOIGTK(AGAM,XF)
|
|
ABLINN(IJ)=ABLINN(IJ)+ABL
|
|
if(ilne(id).gt.0) go to 80
|
|
EMLIN(IJ)=EMLIN(IJ)+ABL*SL0
|
|
80 CONTINUE
|
|
C
|
|
C again, special expressions for 4 selected He I lines
|
|
C
|
|
ELSE
|
|
DO 90 IJ=1,NFREQ
|
|
FR=FREQ(IJ)
|
|
ABL=AB0*PHE1(ID,FR,ISP-1)
|
|
ABLINN(IJ)=ABLINN(IJ)+ABL
|
|
if(ilne(id).gt.0) go to 90
|
|
EMLIN(IJ)=EMLIN(IJ)+ABL*SL0
|
|
90 CONTINUE
|
|
END IF
|
|
END IF
|
|
100 CONTINUE
|
|
C
|
|
if(vel(id).le.velmax) then
|
|
DO 110 IJ=1,NFREQ
|
|
PLA=BNUE(IJ)/(EXP(HKT*FREQ(IJ))-1.)
|
|
EMLIN(IJ)=EMLIN(IJ)+ABLIN(IJ)*pla*wdil(id)
|
|
ABLIN(IJ)=ABLIN(IJ)+ABLINN(IJ)
|
|
110 CONTINUE
|
|
end if
|
|
C
|
|
C special routine for selected He II lines
|
|
C
|
|
IF(NSP.EQ.0) RETURN
|
|
DO 120 IS=1,NSP
|
|
ISP=ISP0(IS)
|
|
IF(ISP.GE.6.AND.ISP.LE.24) CALL PHE2(ISP,ID,ABLIN,EMLIN)
|
|
120 CONTINUE
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE PROFIL(IL,IAT,ID,AGAM)
|
|
C =================================
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
DIMENSION WGR(4)
|
|
PARAMETER (PI4=7.95774715E-2)
|
|
C
|
|
IPRF=IPRF0(IL)
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
C
|
|
C radiative broadening (classical)
|
|
C
|
|
AGAM=GAMR0(IL)
|
|
C
|
|
C Stark broadening - standard (given in the line list or classical)
|
|
C
|
|
IF(IPRF.EQ.0) THEN
|
|
AGAM=AGAM+GS0(IL)*ANE
|
|
C
|
|
C Stark broadening - special expressions for He I
|
|
C
|
|
ELSE IF(IPRF.GT.0) THEN
|
|
ANP=POPUL(NKH,ID)
|
|
CALL GAMHE(IPRF,T,ANE,ANP,ID,GAM)
|
|
AGAM=AGAM+GAM
|
|
C
|
|
C Stark broadening - Griem
|
|
C
|
|
ELSE
|
|
DO 10 I=1,4
|
|
10 WGR(I)=WGR0(I,IGRIEM(IL))
|
|
FR=FREQ0(IL)
|
|
ION=MOD(INDAT(IL),100)
|
|
CALL GRIEM(ID,T,ANE,ION,FR,WGR,GAM)
|
|
AGAM=AGAM+GAM
|
|
END IF
|
|
C
|
|
C Van Der Waals broadening
|
|
C
|
|
AGAM=AGAM+GW0(IL)*VDWC(ID)
|
|
C
|
|
C final Voigt parameter a
|
|
C
|
|
DOP1=DOPA1(IAT,ID)
|
|
if(ifwin.gt.0) DOP1=DOP1/FREQ0(IL)
|
|
AGAM=AGAM*DOP1*PI4
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE GRIEM(ID,T,ANE,ION,FR,WGR,GAM)
|
|
C =========================================
|
|
C
|
|
C STARK DAMPING PARAMETER (GAM) CALCULATED FROM INPUT VALUES
|
|
C OF STARK WIDTHS FOR T=5000, 10000, 20000, 40000 K,
|
|
C AND FOR NE=1.E16 (FOR NEUTRALS) OR NE = 1.E17 (FOR IONS)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION WGR(4)
|
|
if(t.le.0.) return
|
|
J=JT(ID)
|
|
GAM=(TI0(ID)*WGR(J)+TI1(ID)*WGR(J-1)+TI2(ID)*WGR(J-2))
|
|
* *ANE*1.E-10*FR*1.E-10*FR*4.2E-14
|
|
IF(ION.GT.1) GAM=GAM*0.1
|
|
IF(GAM.LT.0.) GAM=0.
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE GAMHE(IND,T,ANE,ANP,ID,GAM)
|
|
C ======================================
|
|
C
|
|
C NEUTRAL HELIUM STARK BROADENING PARAMETERS
|
|
C AFTER DIMITRIJEVIC AND SAHAL-BRECHOT, 1984, J.Q.S.R.T. 31, 301
|
|
C OR FREUDENSTEIN AND COOPER, 1978, AP.J. 224, 1079 (FOR C(IND).GT.0)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION W(5,20),V(4,20),C(20)
|
|
C
|
|
C ELECTRONS T= 5000 10000 20000 40000 LAMBDA
|
|
C
|
|
DATA W / 5.990, 6.650, 6.610, 6.210, 3819.60,
|
|
* 2.950, 3.130, 3.230, 3.300, 3867.50,
|
|
* 0.000, 0.000, 0.000, 0.000, 3871.79,
|
|
* 0.142, 0.166, 0.182, 0.190, 3888.65,
|
|
* 0.000, 0.000, 0.000, 0.000, 3926.53,
|
|
* 1.540, 1.480, 1.400, 1.290, 3964.73,
|
|
* 41.600, 50.500, 57.400, 65.800, 4009.27,
|
|
* 1.320, 1.350, 1.380, 1.460, 4120.80,
|
|
* 7.830, 8.750, 8.690, 8.040, 4143.76,
|
|
* 5.830, 6.370, 6.820, 6.990, 4168.97,
|
|
* 0.000, 0.000, 0.000, 0.000, 4437.55,
|
|
* 1.630, 1.610, 1.490, 1.350, 4471.50,
|
|
* 0.588, 0.620, 0.641, 0.659, 4713.20,
|
|
* 2.600, 2.480, 2.240, 1.960, 4921.93,
|
|
* 0.627, 0.597, 0.568, 0.532, 5015.68,
|
|
* 1.050, 1.090, 1.110, 1.140, 5047.74,
|
|
* 0.277, 0.298, 0.296, 0.293, 5875.70,
|
|
* 0.714, 0.666, 0.602, 0.538, 6678.15,
|
|
* 3.490, 3.630, 3.470, 3.190, 4026.20,
|
|
* 4.970, 5.100, 4.810, 4.310, 4387.93/
|
|
C
|
|
C PROTONS T= 5000 10000 20000 40000
|
|
C
|
|
DATA V / 1.520, 4.540, 9.140, 10.200,
|
|
* 0.607, 0.710, 0.802, 0.901,
|
|
* 0.000, 0.000, 0.000, 0.000,
|
|
* 0.0396, 0.0434, 0.0476, 0.0526,
|
|
* 0.000, 0.000, 0.000, 0.000,
|
|
* 0.507, 0.585, 0.665, 0.762,
|
|
* 0.930, 1.710, 13.600, 27.200,
|
|
* 0.288, 0.325, 0.365, 0.410,
|
|
* 1.330, 6.800, 12.900, 14.300,
|
|
* 1.100, 1.370, 1.560, 1.760,
|
|
* 0.000, 0.000, 0.000, 0.000,
|
|
* 1.340, 1.690, 1.820, 1.630,
|
|
* 0.128, 0.143, 0.161, 0.181,
|
|
* 2.040, 2.740, 2.950, 2.740,
|
|
* 0.187, 0.210, 0.237, 0.270,
|
|
* 0.231, 0.260, 0.291, 0.327,
|
|
* 0.0591, 0.0650, 0.0719, 0.0799,
|
|
* 0.231, 0.260, 0.295, 0.339,
|
|
* 2.180, 3.760, 4.790, 4.560,
|
|
* 1.860, 5.320, 7.070, 7.150/
|
|
DATA C /2*0.,1.83E-4,0.,1.13E-4,5*0.,1.6E-4,9*0./
|
|
C
|
|
IF(W(1,IND).EQ.0.) GO TO 10
|
|
J=JT(ID)
|
|
GAM=((TI0(ID)*W(J,IND)+TI1(ID)*W(J-1,IND)+TI2(ID)*W(J-2,IND))
|
|
* *ANE
|
|
* +(TI0(ID)*V(J,IND)+TI1(ID)*V(J-1,IND)+TI2(ID)*V(J-2,IND))
|
|
* *ANP)*1.884E3/W(5,IND)**2
|
|
IF(GAM.LT.0.) GAM=0.
|
|
RETURN
|
|
10 GAM=C(IND)*T**0.16667*ANE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION EPS(T,ANE,ALAM,ION,N)
|
|
C ==============================
|
|
C
|
|
C NLTE PARAMETER EPSILON (COLLISIONAL/SPONTANEOUS DEEXCITATION)
|
|
C AFTER KASTNER, 1981, J.Q.S.R.T. 26, 377
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DATA CK0,CK1 /7.75E-8, 2.58E-8/
|
|
X=1.438E8/ALAM/T
|
|
XKT=12390./ALAM
|
|
TT=0.75*X
|
|
T1=TT+1.
|
|
A=4.36E7*XKT*XKT/(1.-EXP(-X))
|
|
IF(ION.EQ.1) GO TO 10
|
|
B=1.1+LOG(T1/TT)-0.4/T1/T1
|
|
C=X*B*SQRT(T)/XKT/XKT*ANE
|
|
IF(N.EQ.0) C=CK0*C
|
|
IF(N.NE.0) C=CK1*C
|
|
GO TO 20
|
|
10 C=2.16/T/SQRT(T)/X**1.68*ANE
|
|
20 EPS=C/(C+A)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
FUNCTION XK2DOP(TAU)
|
|
C ====================
|
|
C
|
|
C KERNEL FUNCTION K2 (AUXILIARY PROCEDURE TO NLTE)
|
|
C AFTER HUMMER, 1981, J.Q.S.R.T. 26, 187
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DATA PI2SQ,PISQ /2.506628275D0, 1.772453851D0/
|
|
DATA A0,A1,A2,A3,A4 /
|
|
* 1.D0, -1.117897000D-1, -1.249099917D-1, -9.136358767D-3,
|
|
* -3.370280896D-4/
|
|
DATA B0,B1,B2,B3,B4,B5 /
|
|
* 1.D0, 1.566124168D-1, 9.013261660D-3, 1.908481163D-4,
|
|
* -1.547417750D-7, -6.657439727D-9/
|
|
DATA C0,C1,C2,C3,C4 /
|
|
* 1.0D0, 1.915049608D01, 1.007986843D02, 1.295307533D02,
|
|
* -3.143372468D01/
|
|
DATA D0,D1,D2,D3,D4,D5/
|
|
* 1.D0, 1.968910391D01, 1.102576321D02, 1.694911399D02,
|
|
* -1.669969409D01, -3.666448000D01/
|
|
XK2DOP=1.D0
|
|
IF(TAU.LE.0.) RETURN
|
|
IF(TAU.GT.11.) GO TO 10
|
|
P=A0+TAU*(A1+TAU*(A2+TAU*(A3+TAU*A4)))
|
|
Q=B0+TAU*(B1+TAU*(B2+TAU*(B3+TAU*(B4+TAU*B5))))
|
|
XK2DOP=TAU/PI2SQ*LOG(TAU/PISQ)+P/Q
|
|
RETURN
|
|
10 X=1.D0/LOG(TAU/PISQ)
|
|
P=C0+X*(C1+X*(C2+X*(C3+X*C4)))
|
|
Q=D0+X*(D1+X*(D2+X*(D3+X*(D4+X*D5))))
|
|
XK2DOP=P/Q/2.D0/TAU/SQRT(LOG(TAU/PISQ))
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE INKUR
|
|
C ================
|
|
C
|
|
C Input of a Kurucz model atmosphere
|
|
C
|
|
C Input values (extracted from the Kurucz files):
|
|
C TEF, G - effective temperature, log g (appears only in output)
|
|
C ND - number of depth points
|
|
C and for each depth:
|
|
C DM - m, m is the mass depth coordinate
|
|
C T - temperature
|
|
C P - gass pressure
|
|
C ANE - electron density
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION POP(MLEVEL),ES(MLEVEL,MLEVEL),BS(MLEVEL),POPLTE(MLEVEL)
|
|
COMMON POP,ES,BS
|
|
C
|
|
READ(8,501) TEF,GRAV
|
|
READ(8,502) ND
|
|
ND=ND-1
|
|
501 FORMAT(4X,F8.0,9X,F8.5)
|
|
c 502 FORMAT(/////////////////////10X,I3)
|
|
502 FORMAT(/////////////////////10X,I3/)
|
|
WRITE(6,600) TEF,GRAV
|
|
DO 10 ID=1,ND
|
|
READ(8,*) DM(ID),TEMP(ID),P,ELEC(ID)
|
|
AN=P/TEMP(ID)/BOLK
|
|
DENS(ID)=WMM(ID)*(AN-ELEC(ID))
|
|
WRITE(6,601) ID,DM(ID),TEMP(ID),ELEC(ID),DENS(ID)
|
|
T=TEMP(ID)
|
|
IF(IFMOL.GT.0.AND.T.LT.TMOLIM) THEN
|
|
c AN=TOTN(ID)
|
|
AEIN=ELEC(ID)
|
|
CALL MOLEQ(ID,T,AN,AEIN,ANE,1)
|
|
ELSE
|
|
DO IAT=1,NATOM
|
|
ATTOT(IAT,ID)=DENS(ID)/WMM(ID)/YTOT(ID)*ABUND(IAT,ID)
|
|
END DO
|
|
END IF
|
|
c WRITE(6,601) ID,DM(ID),TEMP(ID),ELEC(ID),DENS(ID)
|
|
CALL WNSTOR(ID)
|
|
CALL SABOLF(ID)
|
|
CALL RATMAT(ID,ES,BS)
|
|
CALL LEVSOL(ES,BS,POPLTE,NLEVEL)
|
|
DO J=1,NLEVEL
|
|
POPUL(J,ID)=POPLTE(J)
|
|
END DO
|
|
10 CONTINUE
|
|
c WRITE(77,503) ND, 3
|
|
c WRITE(77,504) (DM(ID),ID=1,ND)
|
|
DO ID=1,ND
|
|
WRITE(77,504) TEMP(ID),ELEC(ID),DENS(ID)
|
|
END DO
|
|
c
|
|
CLOSE(8)
|
|
c
|
|
504 FORMAT(1P6E13.6)
|
|
600 FORMAT(' INPUT KURUCZ MODEL FOR TEFF=',F7.0,' LOG G =',
|
|
* F7.2//1H ,7X,'MASS',9X,'T',9X,'NE',9X,'DENS'/
|
|
* '-----------------------------------------------'/)
|
|
601 FORMAT(1H ,I5,1PE10.3,0PF10.1,1P2E12.3)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
C
|
|
SUBROUTINE INPMOD
|
|
C =================
|
|
C
|
|
C Read an initial model atmosphere from unit 8
|
|
C File 8 contains:
|
|
C 1. NDPTH - number of depth points in which the initial model is
|
|
C given (if not equal to ND, routine interpolates
|
|
C automatically to the set DM by linear interpolation
|
|
C in log(DM)
|
|
C NUMPAR - number of input model parameters in each depth
|
|
C = 3 for LTE model - ie. N, T, N(electron);
|
|
C > 3 for NLTE model)
|
|
C 2. DEPTH(ID),ID=1,NDPTH - mass-depth points for the input model
|
|
C 3. for each depth:
|
|
C T - temperature
|
|
C ANE - electron density
|
|
C RHO - mass density
|
|
C level populations - only for NLTE input model
|
|
C Number of input level populations need not be
|
|
C equal to NLEVEL; in that case the procedure
|
|
C CHANGE is called from START to calculate the
|
|
C remaining level populations
|
|
C
|
|
C Note: The output file 7, which is created by this program
|
|
C (procedure OUTPUT) has the same structure as file 8
|
|
C and may thus be used as input to another run of the
|
|
C program
|
|
C INTRPL - switch indicating whether (and, if so, how) interpolate
|
|
C the initial model if the depth scales for the input model
|
|
C and the present depth scale are different
|
|
C = 0 - no interpolation, i.e. scale DEPTH coincides with DM
|
|
C > 0 - polynomial interpolation of the (INTRPL-1)th order
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (MINPUT=MLEVEL+4)
|
|
DIMENSION ESEMAT(MLEVEL,MLEVEL),BESE(MLEVEL),POPLTE(MLEVEL),
|
|
* TOTN(MDEPTH),PLTE(MLEVEL,MDEPTH)
|
|
COMMON ESEMAT,BESE,POPLTE,POPUL0(MLEVEL,MDEPTH),X(MINPUT),
|
|
* TEMP0(MDEPTH),ELEC0(MDEPTH),DENS0(MDEPTH),PPL0(MDEPTH),
|
|
* PPL(MDEPTH),DEPTH(MDEPTH),DM0(MDEPTH),DP(MDEPTH)
|
|
COMMON/NLTPOP/PNLT(MATOM,MION,MDEPTH)
|
|
common/quasex/iexpl(mlevel),iltot(mlevel)
|
|
C
|
|
NUMLT=3
|
|
IF(INMOD.EQ.2) NUMLT=4
|
|
READ(8,*) NDPTH,NUMPAR
|
|
READ(8,*) (DEPTH(I),I=1,NDPTH)
|
|
ND=NDPTH
|
|
NUMP=ABS(NUMPAR)
|
|
DO 30 ID=1,NDPTH
|
|
READ(8,*) (X(I),I=1,NUMP)
|
|
TEMP(ID)=X(1)
|
|
ELEC(ID)=X(2)
|
|
DENS(ID)=X(3)
|
|
TOTN(ID)=DENS(ID)/WMM(ID)+ELEC(ID)
|
|
CALL WNSTOR(ID)
|
|
CALL SABOLF(ID)
|
|
IP=NUMLT
|
|
IF(NUMPAR.LT.0) THEN
|
|
IP=IP+1
|
|
TOTN(ID)=X(IP)
|
|
END IF
|
|
IF(INMOD.EQ.2) IP=IP+1
|
|
c
|
|
c first compute LTE level populations for all levels,
|
|
c i.e. explicit, semi-explisit, and quasi-explicit
|
|
c
|
|
NLEV0=NLEVEL
|
|
TEMP(ID)=X(1)
|
|
ELEC(ID)=X(2)
|
|
DENS(ID)=X(3)
|
|
t=temp(id)
|
|
if(ifmol.gt.0.and.t.lt.tmolim) then
|
|
ipri=1
|
|
aein=elec(id)
|
|
an=totn(id)
|
|
call moleq(id,t,an,aein,ane,ipri)
|
|
else
|
|
if(imode.gt.-2) then
|
|
DO IAT=1,NATOM
|
|
ATTOT(IAT,ID)=DENS(ID)/WMM(ID)/YTOT(ID)*ABUND(IAT,ID)
|
|
END DO
|
|
else
|
|
DO IAT=1,NATOM
|
|
ATTOT(IAT,ID)=DENS(ID)/WMM(1)/YTOT(1)*ABUND(IAT,1)
|
|
END DO
|
|
end if
|
|
end if
|
|
CALL WNSTOR(ID)
|
|
CALL SABOLF(ID)
|
|
CALL RATMAT(ID,ESEMAT,BESE)
|
|
CALL LEVSOL(ESEMAT,BESE,POPLTE,NLEV0)
|
|
DO I=1,NLEV0
|
|
POPUL(I,ID)=POPLTE(I)
|
|
PLTE(I,ID)=POPLTE(I)
|
|
c if(id.eq.1) write(6,651) i,ip,popul(i,id),plte(i,id)
|
|
END DO
|
|
c
|
|
c if the input file fort.8 contains also NLTE level populations
|
|
c of b-factors, replace the LTE populations by those
|
|
c
|
|
IF(NUMP.GT.IP) THEN
|
|
NLEV0=NUMP-IP
|
|
DO I=1,NLEV0
|
|
j=iltot(i)
|
|
POPUL(J,ID)=X(IP+I)*RELAB(IATM(I),ID)
|
|
c if(id.eq.1) write(6,651) i,j,x(ip+i),popul(i,id)
|
|
c 651 format('in',2i4,1p2e12.4)
|
|
END DO
|
|
c DO I=1,NLEV0
|
|
c j=iltot(i)
|
|
c if(popul(j,id).le.0.) then
|
|
c IE=IEL(I)
|
|
c N0I=NFIRST(IE)
|
|
c NKI=NNEXT(IE)
|
|
c POPUL(J,ID)=ELEC(ID)*POPUL(iltot(NKI),ID)*SBF(I)
|
|
c end if
|
|
c END DO
|
|
c
|
|
c in the case the input "NLTE populations are in fact b-factors,
|
|
c compute the real populations
|
|
c
|
|
if(ibfac.eq.1) then
|
|
do i=1,nlev0
|
|
j=iltot(i)
|
|
popul(j,id)=popul(j,id)*plte(j,id)
|
|
end do
|
|
end if
|
|
END IF
|
|
30 CONTINUE
|
|
C
|
|
close(8)
|
|
c
|
|
write(6,600)
|
|
600 format(/' INPUT TLUSTY MODEL'/
|
|
* ' ------------------'/
|
|
* 1H ,8X,'MASS',9X,'T',9X,'NE',9X,'DENS'//)
|
|
nd=ndpth
|
|
DO 40 ID=1,ND
|
|
DM(ID)=DEPTH(ID)
|
|
write(6,601) id,dm(id),temp(id),elec(id),dens(id),
|
|
* popul(1,id)
|
|
601 format(i6,1pe10.3,0pf10.1,1p4e12.3)
|
|
40 CONTINUE
|
|
C
|
|
DO 100 ID=1,ND
|
|
BCON=ELEC(ID)/TEMP(ID)/SQRT(TEMP(ID))*2.0706E-16
|
|
DO 100 IONE=1,NION
|
|
ION=IZ(IONE)
|
|
IAT=NUMAT(IATM(NFIRST(IONE)))
|
|
NKI=NNEXT(IONE)
|
|
IF(ION.GT.0) PNLT(IAT,ION,ID)=POPUL(NKI,ID)/G(NKI)*BCON
|
|
100 CONTINUE
|
|
c
|
|
c check abundances
|
|
c
|
|
c CALL CHCKAB
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INPBF
|
|
C ================
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (MINPUT=MLEVEL+4)
|
|
DIMENSION DEPTH(MDEPTH),X(MINPUT,MDEPTH),XX(MDEPTH),BF(MDEPTH)
|
|
C
|
|
OPEN(8,FILE='bfactors',STATUS='OLD')
|
|
NUMLT=3
|
|
IF(INMOD.EQ.2) NUMLT=4
|
|
READ(8,*) NDPTH,NUMPAR
|
|
READ(8,*) (DEPTH(I),I=1,NDPTH)
|
|
IF(NUMPAR.LT.0) NUMLT=NUMLT+1
|
|
NUMP=ABS(NUMPAR)
|
|
DO ID=1,NDPTH
|
|
READ(8,*) (X(I,ID),I=1,NUMP)
|
|
END DO
|
|
CLOSE(8)
|
|
c
|
|
c interpolate the input b-factors to the original DM-scale;
|
|
c compute new NLTE populations
|
|
c
|
|
DO I=NUMLT+1,NUMP
|
|
DO ID=1,NDPTH
|
|
XX(ID)=X(I,ID)
|
|
END DO
|
|
CALL INTERP(DEPTH,XX,DM,BF,NDPTH,ND,2,1,1)
|
|
DO ID=1,ND
|
|
POPUL(I-NUMLT,ID)=POPUL(I-NUMLT,ID)*BF(ID)
|
|
END DO
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
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
|
|
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
|
|
SUBROUTINE CHANGE
|
|
C =================
|
|
C
|
|
C This procedure controls an evaluation of initial level
|
|
C populations in case where the system of explicit levels
|
|
C (ie. the choice of explicit level, their numbering, or their
|
|
C total number) is not consistent with that for the input level
|
|
C populations read by procedure INPMOD.
|
|
C Obviously, this procedure need be used only for NLTE input models.
|
|
C
|
|
C Input from unit 5:
|
|
C For each explicit level, II=1,NLEVEL, the following parameters:
|
|
C IOLD - NE.0 - means that population of this level is
|
|
C contained in the set of input populations;
|
|
C IOLD is then its index in the "old" (i.e. input)
|
|
C numbering.
|
|
C All the subsequent parameters have no meaning
|
|
C in this case.
|
|
C - EQ.0 - means that this level has no equivalent in the
|
|
C set of "old" levels. Population of this level
|
|
C has thus to be evaluated.
|
|
C MODE - indicates how the population is evaluated:
|
|
C = 0 - population is equal to the population of the "old"
|
|
C level with index ISIOLD, multiplied by REL;
|
|
C = 1 - population assumed to be LTE, with respect to the
|
|
C first state of the next ionization degree whose
|
|
C population must be contained in the set of "old"
|
|
C (ie. input) populations, with index NXTOLD in the
|
|
C "old" numbering.
|
|
C The population determined of this way may further
|
|
C be multiplied by REL.
|
|
C = 2 - population determined assuming that the b-factor
|
|
C (defined as the ratio between the NLTE and
|
|
C LTE population) is the same as the b-factor of
|
|
C the level ISINEW (in the present numbering). The
|
|
C level ISINEW must have the equivalent in the "old"
|
|
C set; its index in the "old" set is ISIOLD, and the
|
|
C index of the first state of the next ionization
|
|
C degree, in the "old" numbering, is NXTSIO.
|
|
C The population determined of this way may further
|
|
C be multiplied by REL.
|
|
C = 3 - level corresponds to an ion or atom which was not
|
|
C explicit in the old system; population is assumed
|
|
C to be LTE.
|
|
C NXTOLD - see above
|
|
C ISINEW - see above
|
|
C ISIOLD - see above
|
|
C NXTSIO - see above
|
|
C REL - population multiplier - see above
|
|
C if REL=0, the program sets up REL=1
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION ESEMAT(MLEVEL,MLEVEL),BESE(MLEVEL),POPLTE(MLEVEL)
|
|
COMMON ESEMAT,BESE,POPLTE,POPUL0(MLEVEL,MDEPTH),
|
|
* POPULL(MLEVEL,MDEPTH),POPL(MLEVEL)
|
|
C
|
|
PARAMETER (S = 2.0706E-16)
|
|
IFESE=0
|
|
DO 100 II=1,NLEVEL
|
|
READ(ICHANG,*) IOLD,MODE,NXTOLD,ISINEW,ISIOLD,NXTSIO,REL
|
|
IF(MODE.GE.3) IFESE=IFESE+1
|
|
IF(REL.EQ.0.) REL=1.
|
|
DO 90 ID=1,ND
|
|
IF(IOLD.EQ.0) GO TO 10
|
|
POPUL0(II,ID)=POPUL(IOLD,ID)
|
|
GO TO 90
|
|
10 IF(MODE.NE.0) GO TO 20
|
|
POPUL0(II,ID)=POPUL(ISIOLD,ID)*REL
|
|
GO TO 90
|
|
20 T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
IF(MODE.GE.3) GO TO 40
|
|
NXTNEW=NNEXT(IEL(II))
|
|
SB=S/T/SQRT(T)*G(II)/G(NXTNEW)*EXP(ENION(II)/T/BOLK)
|
|
IF(MODE.GT.1) GO TO 30
|
|
POPUL0(II,ID)=SB*ANE*POPUL(NXTOLD,ID)*REL
|
|
GO TO 90
|
|
30 KK=ISINEW
|
|
KNEXT=NNEXT(IEL(KK))
|
|
SBK=S/T/SQRT(T)*G(KK)/G(KNEXT)*EXP(ENION(KK)/T/BOLK)
|
|
POPUL0(II,ID)=SB/SBK*POPUL(NXTOLD,ID)/POPUL(NXTSIO,ID)*
|
|
* POPUL(ISIOLD,ID)*REL
|
|
GO TO 90
|
|
40 IF(IFESE.EQ.1) THEN
|
|
CALL SABOLF(ID)
|
|
CALL RATMAT(ID,ESEMAT,BESE)
|
|
CALL LINEQS(ESEMAT,BESE,POPLTE,NLEVEL,MLEVEL)
|
|
DO 50 III=1,NLEVEL
|
|
50 POPULL(III,ID)=POPLTE(III)
|
|
END IF
|
|
POPUL0(II,ID)=POPULL(II,ID)
|
|
90 CONTINUE
|
|
100 CONTINUE
|
|
DO 110 I=1,NLEVEL
|
|
DO 110 ID=1,ND
|
|
POPUL(I,ID)=POPUL0(I,ID)
|
|
110 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE RATMAT(ID,A,B)
|
|
C
|
|
C LTE RATE MATRIX (SAHA-BOLTZMANN EQS. + CHARGE CONSERVATION EQ.)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
parameter (un=1.)
|
|
DIMENSION A(MLEVEL,MLEVEL),B(MLEVEL)
|
|
C
|
|
ANE=ELEC(ID)
|
|
DO I=1,NLEVEL
|
|
B(I)=0.
|
|
DO J=1,NLEVEL
|
|
A(J,I)=0.
|
|
END DO
|
|
END DO
|
|
C
|
|
DO IAT=1,NATOM
|
|
N0I=N0A(IAT)
|
|
NKI=NKA(IAT)
|
|
N1I=NKI-1
|
|
NREFI=NKI
|
|
DO I=N0I,N1I
|
|
A(I,I)=1.
|
|
N=NNEXT(IEL(I))
|
|
A(I,N)=-ANE*SBF(I)*WOP(I,ID)
|
|
END DO
|
|
DO I=N0I,NKI
|
|
IL=ILK(I)
|
|
A(NREFI,I)=UN
|
|
IF(IL.NE.0) A(NREFI,I)=1.+ANE*USUM(IL)
|
|
END DO
|
|
B(NREFI)=ATTOT(IAT,ID)
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
SUBROUTINE SABOLF(ID)
|
|
C =====================
|
|
C
|
|
C Saha-Boltzmann factors (SBF)
|
|
C and "upper sums" - sum of Saha-Boltzmann factors for upper, LTE,
|
|
C levels which are not included explicitly (USUM), and derivatives
|
|
C wrt. temperature (T) and electron density (DUSUMN)
|
|
C
|
|
C Input: ID - depth index
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (UH=1.5)
|
|
PARAMETER (CMAX=2.154D4,CCON=2.0706D-16,TWO=2.D0)
|
|
C
|
|
C DCHI - approximate lowering of ionization potential for neutrals
|
|
C Actual lowering is DCHI*effective charge, and is considered only
|
|
C if IUPSUM(ION).GT.0
|
|
C
|
|
T=TEMP(ID)
|
|
SQT=SQRT(T)
|
|
ANE=ELEC(ID)
|
|
STANE=SQRT(T/ANE)
|
|
XMAX=CMAX*SQRT(STANE)
|
|
TK=BOLK*T
|
|
CON=CCON/T/SQT
|
|
C
|
|
C Saha-Boltzmann factors
|
|
C
|
|
DO 50 ION=1,NION
|
|
QZ=IZ(ION)
|
|
CFN=CON/G(NNEXT(ION))
|
|
DCH=0.
|
|
IUPS=IUPSUM(ION)
|
|
SSBF=0.
|
|
USUM(ION)=0.
|
|
nlst=nlast(ion)
|
|
if(ifwop(nlst).ge.0) then
|
|
nl1up=nquant(nlst)+1
|
|
else
|
|
nl1up=nquant(nlst)
|
|
end if
|
|
DO 10 II=NFIRST(ION),NLAST(ION)
|
|
if(ifwop(ii).lt.0) then
|
|
E=EH*QZ*QZ/TK
|
|
SUM=0.
|
|
DO 5 J=nl1up,NLMX
|
|
XJ=J
|
|
XI=J*J
|
|
X=E/XI
|
|
FI=XI*EXP(X)*WNHINT(J,ID)
|
|
SUM=SUM+FI
|
|
5 CONTINUE
|
|
g(ii)=sum*two
|
|
gmer(imrg(ii),id)=g(ii)
|
|
end if
|
|
X=ENION(II)/TK
|
|
if(x.gt.110.) x=110.
|
|
SB=CFN*G(II)*EXP(X)
|
|
SBF(II)=SB
|
|
SSBF=SSBF+SB
|
|
10 CONTINUE
|
|
C
|
|
C Upper sums
|
|
C
|
|
if(ifwop(nlst).lt.0) go to 50
|
|
if(iups.eq.0) then
|
|
C
|
|
C 1. More exact approach - using (exact) partition functions
|
|
C
|
|
IAT=NUMAT(IATM(NFIRST(ION)))
|
|
XMX=XMAX*SQRT(QZ)
|
|
CALL PARTF(IAT,IZ(ION),T,ANE,XMX,U)
|
|
EE=ENION(NFIRST(ION))/TK
|
|
if(ee.gt.110.) ee=110.
|
|
CFE=CFN*EXP(EE)
|
|
USUM(ION)=CFE*U-SSBF
|
|
xx=(ssbf-sbf(nfirst(ion)))/sbf(nfirst(ion))
|
|
IF(USUM(ION).LT.0.or.ee.ge.109.or.xx.lt.1.e-7) USUM(ION)=0.
|
|
IF(USUM(ION).LT.0.) USUM(ION)=0.
|
|
C
|
|
C 2. Approximate approach - summation over fixed number of upper
|
|
C levels, assumed hydrogenic (ie. their ionization energy and
|
|
C statistical weight hydrogenic)
|
|
C
|
|
else if(iups.gt.0) then
|
|
SUM=0.
|
|
DSUM=0.
|
|
E=EH*QZ*QZ/TK
|
|
DO 30 J=NQUANT(NLAST(ION))+1,IUPS
|
|
XI=J*J
|
|
X=E/XI
|
|
FI=XI*EXP(X)
|
|
SUM=SUM+FI
|
|
30 CONTINUE
|
|
USUM(ION)=SUM*CON*TWO
|
|
C
|
|
c 3. occupation probability form
|
|
c
|
|
else
|
|
SUM=0.
|
|
DSUM=0.
|
|
E=EH*QZ*QZ/TK
|
|
DO 40 J=NQUANT(NLAST(ION))+1,NLMX
|
|
XJ=J
|
|
XI=J*J
|
|
X=E/XI
|
|
FI=XI*EXP(X)*WNHINT(J,ID)
|
|
SUM=SUM+FI
|
|
40 CONTINUE
|
|
USUM(ION)=SUM*CON*TWO
|
|
end if
|
|
50 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION SBFHMI_old(FR)
|
|
C ===================
|
|
C
|
|
C Bound-free cross-section for H- (negative hydrogen ion)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
SBFHMI=0.
|
|
sbfhmi_old=0.
|
|
FR0=1.8259E14
|
|
IF(FR.LT.FR0) RETURN
|
|
IF(FR.LT.2.111E14) GO TO 10
|
|
X=2.997925E15/FR
|
|
SBFHMI=(6.80133E-3+X*(1.78708E-1+X*(1.6479E-1+X*(-2.04842E-2+X*
|
|
1 5.95244E-4))))*1.E-17
|
|
sbfhmi_old=sbfhmi
|
|
RETURN
|
|
10 X=2.997925E15*(1./FR0-1./FR)
|
|
SBFHMI=(2.69818E-1+X*(2.2019E-1+X*(-4.11288E-2+X*2.73236E-3)))
|
|
1 *X*1.E-17
|
|
sbfhmi_old=sbfhmi
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE OPADD(MODE,ID,FR,ABAD,EMAD,SCAD)
|
|
C ===========================================
|
|
C
|
|
C Additional opacities
|
|
C This is basically user-supplied procedure; here are some more
|
|
C important non-standard opacity sources, namely
|
|
C Rayleigh scattering, H- opacity, H2+ opacity, and additional
|
|
C opacity of He I and He II.
|
|
C Inclusion of these opacities is contolled by switches transmitted
|
|
C by COMMON/OPCPAR - see description in START.
|
|
C
|
|
C Input parameters:
|
|
C MODE - controls the nature and the amount of calculations
|
|
C = -1 - (OPADD called from START) evaluation of relevant
|
|
C depth-dependent quantities (usually photoionization
|
|
C cross-sections, but also possibly other), which are
|
|
C stored in array CROS
|
|
C = 0 - evaluation of an additional opacity, emissivity, and
|
|
C scattering - for procedure OPAC0
|
|
C ID - depth index
|
|
C FR - frequency
|
|
C
|
|
C Output:
|
|
C
|
|
C ABAD - absorption coefficient (at frequency FR and depth ID)
|
|
C EMAD - emission coefficient (at frequency FR and depth ID)
|
|
C SCAD - scattering coefficient (at frequency FR and depth ID)
|
|
C
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (FRAYH = 2.463E15,
|
|
* FRAYHe = 5.150E15,
|
|
* FRAYH2 = 2.922E15,
|
|
* CLS = 2.997925e18)
|
|
C
|
|
AB0=0.
|
|
AB1=0.
|
|
ABAD=0.
|
|
EMAD=0.
|
|
SCAD=0.
|
|
C
|
|
if(iath.gt.0) then
|
|
N0HN=NFIRST(IELH)
|
|
NKH=NKA(IATH)
|
|
C
|
|
IF(MODE.GE.0) THEN
|
|
T=TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
HKT=HK/T
|
|
T32=1./T/SQRT(T)
|
|
END IF
|
|
anh=dens(id)/(wmm(id)*ytot(id))
|
|
anhe=rrr(id,1,2)
|
|
C
|
|
IT=NLEVEL
|
|
C
|
|
C -----------------------
|
|
C HI Rayleigh scattering
|
|
C -----------------------
|
|
C
|
|
IF(IRSCT.NE.0.AND.IOPHLI.NE.1.AND.IOPHLI.NE.2) THEN
|
|
X=1.D0/(CLS/MIN(FR,FRAYH))**2
|
|
SG=(5.799E-13+(1.422E-6+2.784*X)*X)*X*X
|
|
c ABAD=POPUL(N0HN,ID)*SG
|
|
SCAD=POPUL(N0HN,ID)*SG
|
|
scad=anh*sg
|
|
END IF
|
|
IF(IOPHMI.NE.0) THEN
|
|
C
|
|
C ----------------------------
|
|
C H- bound-free and free-free
|
|
C ----------------------------
|
|
C Note: IOPHMI must not by taken non-zero if H- is considered
|
|
C explicitly, because H- opacity would be taken twice
|
|
C
|
|
SG=SBFHMI(FR)
|
|
XHM=8762.9/T
|
|
SB=1.0353E-16*T32*EXP(XHM)*POPUL(N0HN,ID)*ANE*SG
|
|
SF=SFFHMI(POPUL(N0HN,ID),FR,T)*ANE
|
|
AB0=SB+SF
|
|
END IF
|
|
C
|
|
C -----------------------
|
|
C He I Rayleigh scattering
|
|
C -----------------------
|
|
C
|
|
IF(IRSCHE.NE.0.AND.MODE.GE.0) THEN
|
|
X=(CLS/MIN(FR,FRAYHe))**2
|
|
CS=5.484E-14/X/X*(1.+(2.44E5+5.94E10/(X-2.90E5))/X)**2
|
|
sg=anhe*cs
|
|
c abad=abad+sg
|
|
scad=scad+sg
|
|
END IF
|
|
C
|
|
C -----------------------
|
|
C H2 Rayleigh scattering
|
|
C -----------------------
|
|
C
|
|
IF(IRSCH2.NE.0.AND.MODE.GE.0.AND.IFMOL.GT.0) THEN
|
|
X=(CLS/MIN(FR,FRAYH2))**2
|
|
X2=1./X/X
|
|
CS=(8.14E-13+1.28E-6/X+1.61*X2)*X2
|
|
sg=cs*anh2(id)
|
|
c abad=abad+sg
|
|
scad=scad+sg
|
|
END IF
|
|
C
|
|
IF(IOPH2P.GT.0.AND.IFMOL.GT.0.and.
|
|
* t.lt.tmolim.and.fr.lt.3.28e15) THEN
|
|
C
|
|
C -----------------------------
|
|
C H2+ bound-free and free-free
|
|
C -----------------------------
|
|
C
|
|
X=FR*1.E-15
|
|
SG1=(-7.342E-3+(-2.409+(1.028+(-4.23E-1+
|
|
* (1.224E-1-1.351E-2*X)*X)*X)*X)*X)*1.602E-12/BOLK
|
|
IT=IT+1
|
|
X=LOG(FR)
|
|
SG2=-3.0233E3+(3.7797E2+(-1.82496E1+(3.9207E-1-
|
|
* 3.1672E-3*X)*X)*X)*X
|
|
X2=-SG1/T+SG2
|
|
SB=0.
|
|
IF(X2.GT.-150.) SB=POPUL(N0HN,ID)*POPUL(NKH,ID)*EXP(X2)
|
|
AB0=AB0+SB
|
|
END IF
|
|
end if
|
|
C
|
|
C -----------------------------
|
|
C He- free-free
|
|
C -----------------------------
|
|
C
|
|
if(mode.ge.0.and.iophem.gt.0) then
|
|
A=3.397D-46+(-5.216D-31+7.039D-15/FR)/FR
|
|
B=-4.116D-42+(1.067D-26+8.135D-11/FR)/FR
|
|
C=5.081D-37+(-8.724D-23-5.659D-8/FR)/FR
|
|
cs=a*t+b+c/t
|
|
sg=anhe*ane*cs
|
|
ab0=ab0+sg
|
|
end if
|
|
C
|
|
C -----------------------------
|
|
C H2- free-free
|
|
C -----------------------------
|
|
C
|
|
IF(IOPH2M.NE.0.AND.MODE.GE.0.AND.IFMOL.GT.0.AND.T.LT.TMOLIM) THEN
|
|
call h2minus(t,anh2(id),ane,fr,oph2)
|
|
ab1=ab1+oph2
|
|
END IF
|
|
C
|
|
C -----------------------------
|
|
C CH and OH continuuum opacity
|
|
C -----------------------------
|
|
C
|
|
if(mode.ge.0.and.ifmol.gt.0.and.t.lt.tmolim) then
|
|
if(iopch.gt.0) ab0=ab0+sbfch(fr,t)*anch(id)
|
|
if(iopoh.gt.0) ab0=ab0+sbfoh(fr,t)*anoh(id)
|
|
C
|
|
C ---------------------------
|
|
C CIA H2-H2 opacity
|
|
C ---------------------------
|
|
C
|
|
if(ioh2h2.gt.0) then
|
|
call cia_h2h2(t,anh2(id),fr,oph2)
|
|
ab1=ab1+oph2
|
|
end if
|
|
C
|
|
C ---------------------------
|
|
C CIA H2-He opacity
|
|
C ---------------------------
|
|
C
|
|
if(ioh2he.gt.0) then
|
|
call cia_h2he(t,anh2(id),anhe,fr,oph2)
|
|
ab1=ab1+oph2
|
|
end if
|
|
C
|
|
C ---------------------------
|
|
C CIA H2-H opacity
|
|
C ---------------------------
|
|
C
|
|
if(ioh2h1.gt.0) then
|
|
call cia_h2h(t,anh2(id),anh,fr,oph2)
|
|
ab1=ab1+oph2
|
|
end if
|
|
C
|
|
C ---------------------------
|
|
C CIA H-He opacity
|
|
C ---------------------------
|
|
C
|
|
if(iohhe.gt.0) then
|
|
call cia_hhe(t,anh,anhe,fr,oph2)
|
|
ab1=ab1+oph2
|
|
end if
|
|
end if
|
|
C
|
|
C ----------------------------------------------
|
|
C The user may supply more opacity sources here:
|
|
C ----------------------------------------------
|
|
C
|
|
C Finally, actual absorption and emission coefficients
|
|
|
|
IF(MODE.LT.0) RETURN
|
|
X=EXP(-HKT*FR)
|
|
X1=1.-X
|
|
BNX=BN*(FR*1.E-15)**3*X
|
|
ABAD=ABAD+X1*AB0+AB1
|
|
EMAD=EMAD+BNX*(AB0+AB1/X1)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
function wn(xn,a,id,z)
|
|
C ======================
|
|
c
|
|
c evaluation of the occupation probablities for a hydrogenic ion
|
|
c using eqs (4.26), and (4.39) of Hummer,Mihalas Ap.J. 331, 794, 1988.
|
|
c approximate evaluation of Q(beta) - Hummer
|
|
c
|
|
c Input: xn - real number corresponding to quantum number n
|
|
c a - correlation parameter
|
|
c id - depth index
|
|
c z - ionic charge
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
parameter (p1=0.1402,p2=0.1285,p3=1.,p4=3.15,p5=4.,un=1.)
|
|
parameter (tkn=3.01,ckn=5.33333333,cb=8.59e14)
|
|
parameter (f23=-2./3.)
|
|
parameter (a0=0.529177e-8,wa0=-3.1415926538/6.*a0*a0*a0)
|
|
c
|
|
c evaluation of k(n)
|
|
c
|
|
if(xn.le.tkn) then
|
|
xkn=un
|
|
else
|
|
xkn=ckn*xn/(xn+un)/(xn+un)
|
|
end if
|
|
c
|
|
c evaluation of beta
|
|
c
|
|
c beta=cb*bergfc*z*z*z*xkn/(xn*xn*xn*xn)*exp(f23*log(elec(id)))
|
|
beta=cb*z*z*z*xkn/(xn*xn*xn*xn)*exp(f23*log(elec(id)))
|
|
c
|
|
c approximate expression for Q(beta)
|
|
c
|
|
x=exp(p4*log(un+p3*a))
|
|
c c1=p1*(x+p5*z*a*a*a) ! previous expression -ERROR !!!!!!
|
|
c1=p1*(x+p5*(z-un)*a*a*a)
|
|
c2=p2*x
|
|
f=(c1*beta*beta*beta)/(un+c2*beta*sqrt(beta))
|
|
wp=f/(un+f)
|
|
c
|
|
c contribution from neutral particles
|
|
c
|
|
xn2=xn*xn+un
|
|
xnh=0.
|
|
xnhe1=0.
|
|
if(ielh.gt.0) xnh=popul(nfirst(ielh),id)
|
|
if(ielhe1.gt.0) xnhe1=popul(nfirst(ielhe1),id)
|
|
w0=exp(wa0*xn2*xn2*xn2*(xnh+xnhe1))
|
|
W0=1.
|
|
wn=wp*w0
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE WNSTOR(ID)
|
|
C =====================
|
|
C
|
|
C Stores occupation probabilities for hydrogen levels
|
|
C in common WNCOM for further use
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (UN=1.,TWO=2.,SIXTH=1./6.,CCOR=0.09)
|
|
parameter (p1=0.1402,p2=0.1285,p3=1.,p4=3.15,p5=4.)
|
|
parameter (tkn=3.01,ckn=5.33333333,cb=8.59d14,f23=-2./3.)
|
|
C
|
|
ANE=ELEC(ID)
|
|
A=CCOR*EXP(SIXTH*LOG(ANE))/SQRT(TEMP(ID))
|
|
DO 20 I=1,NLMX
|
|
XN=I
|
|
WNHINT(I,ID)=wn(xn,a,id,un)
|
|
WNHE2(I,ID)=wn(xn,a,id,two)
|
|
20 CONTINUE
|
|
C
|
|
C array WOP - occupation probabilities for explicit levels
|
|
C
|
|
do 30 ii=1,nlevel
|
|
wop(ii,id)=un
|
|
if(ifwop(ii).le.0) go to 30
|
|
ie=iel(ii)
|
|
nq=nquant(ii)
|
|
if(iz(ie).eq.1) then
|
|
wop(ii,id)=wnhint(nq,id)
|
|
else if(iz(ie).eq.2) then
|
|
wop(ii,id)=wnhe2(nq,id)
|
|
else
|
|
z=iz(ie)
|
|
xn=nq
|
|
wop(ii,id)=wn(xn,a,id,z)
|
|
end if
|
|
30 continue
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
C
|
|
c SUBROUTINE TIMING(MOD,ITER)
|
|
C ===========================
|
|
C
|
|
C Timing procedure (call machine dependent routine!!)
|
|
C
|
|
C INCLUDE 'PARAMS.FOR'
|
|
c CHARACTER ROUT*20
|
|
c dimension dummy(2)
|
|
c DATA T0/0./
|
|
C
|
|
c TIME=etime(dummy)
|
|
c DT=TIME-T0
|
|
c T0=TIME
|
|
c IF(MOD.EQ.0) THEN
|
|
c IP=0
|
|
c ROUT=' INIT '
|
|
c ELSE IF(MOD.EQ.1) THEN
|
|
c IP=ITER-1
|
|
c ROUT=' OPACITY '
|
|
c ELSE IF(MOD.EQ.2) THEN
|
|
c IP=ITER
|
|
c ROUT=' TRANSFER'
|
|
c ENDIF
|
|
c WRITE(69,600) IP,MOD,TIME,DT,ROUT
|
|
c 600 FORMAT(2I4,2F11.2,2X,A10)
|
|
c RETURN
|
|
c END
|
|
c
|
|
C *******************************************************************
|
|
c
|
|
subroutine quit(text)
|
|
C =====================
|
|
c
|
|
c stops the program and writes a text
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
character*(*) text
|
|
write(6,10) text
|
|
10 format(1x,a)
|
|
stop
|
|
end
|
|
c
|
|
c
|
|
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
|
|
|
|
function voigte(a,vs)
|
|
c =====================
|
|
c
|
|
c computes a voigt function h = h(a,v)
|
|
c a=gamma/(4*pi*dnud) and v=(nu-nu0)/dnud. this is done after
|
|
c traving (landolt-b\rnstein, p. 449).
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension ak(19),a1(5)
|
|
data ak /-1.12470432, -0.15516677, 3.28867591, -2.34357915,
|
|
, 0.42139162, -4.48480194, 9.39456063, -6.61487486, 1.98919585,
|
|
, -0.22041650, 0.554153432, 0.278711796,-0.188325687, 0.042991293,
|
|
,-0.003278278, 0.979895023,-0.962846325, 0.532770573,-0.122727278/
|
|
data sqp/1.772453851/,sq2/1.414213562/
|
|
c
|
|
v = abs(vs)
|
|
u = a + v
|
|
v2 = v*v
|
|
if (a.eq.0.0) go to 140
|
|
if (a.gt.0.2) go to 120
|
|
if (v.ge.5.0) go to 121
|
|
c
|
|
ex=0.
|
|
if(v2.lt.100.)ex = exp(-v2)
|
|
k = 1
|
|
c
|
|
100 quo = 1.
|
|
if (v.lt.2.4) go to 101
|
|
quo = 1./(v2 - 1.5)
|
|
m = 11
|
|
go to 102
|
|
c
|
|
101 m = 6
|
|
if (v.lt.1.3) m = 1
|
|
102 do 103 i=1,5
|
|
a1(i) = ak(m)
|
|
m = m + 1
|
|
103 continue
|
|
h1 = quo*(a1(1) + v*(a1(2) + v*(a1(3) + v*(a1(4) + v*a1(5)))))
|
|
if (k.gt.1) go to 110
|
|
c
|
|
c a le 0.2 and v lt 5.
|
|
c
|
|
hh = h1*a + ex*(1. + a*a*(1. - 2.*v2))
|
|
voigte=hh
|
|
return
|
|
c
|
|
110 pqs = 2./sqp
|
|
h1p = h1 + pqs*ex
|
|
h2p = pqs*h1p - 2.*v2*ex
|
|
h3p = (pqs*(1. - ex*(1. - 2.*v2)) - 2.*v2*h1p)/3. + pqs*h2p
|
|
h4p = (2.*v2*v2*ex - pqs*h1p)/3. + pqs*h3p
|
|
psi = ak(16) + a*(ak(17) + a*(ak(18) + a*ak(19)))
|
|
c
|
|
c 0.2 lt a le 1.4 and a + v le 3.2
|
|
c
|
|
hh = psi*(ex + a*(h1p + a*(h2p + a*(h3p + a*h4p))))
|
|
voigte=hh
|
|
return
|
|
c
|
|
120 if (a.gt.1.4.or.u.gt.3.2) go to 130
|
|
ex=0.
|
|
if(v2.lt.100.)ex = exp(-v2)
|
|
k = 2
|
|
go to 100
|
|
c
|
|
c a le 0.2 and v ge 5.
|
|
c
|
|
121 hh = a*(15. + 6.*v2 + 4.*v2*v2)/(4.*v2*v2*v2*sqp)
|
|
voigte=hh
|
|
return
|
|
c
|
|
130 a2 = a*a
|
|
u = sq2*(a2 + v2)
|
|
u2 = 1./(u*u)
|
|
c
|
|
c a gt 1.4 or a + v gt 3.2
|
|
c
|
|
hh = sq2/sqp*a/u*(1. + u2*(3.*v2 - a2) +
|
|
, u2*u2*(15.*v2*v2 - 30.*v2*a2 + 3.*a2*a2))
|
|
voigte=hh
|
|
return
|
|
c
|
|
c a eq 0.
|
|
c
|
|
140 hh=0.
|
|
if(v2.lt.100.) hh=exp(-v2)
|
|
voigte=hh
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE SIGAVS
|
|
C =================
|
|
C
|
|
C Read bound-free cross-sections for averaged levels
|
|
C from the unit INSA (given by IFANCY), with increasing frequencies
|
|
C It assumes that all continuum transitions for a given ion are
|
|
C given in a successive order in the data (i.e. as in TLUSTY for
|
|
C explicit levels. For other levels, additional input data in
|
|
C unit 54 !!
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (HCCM=H*2.997925D10,BAM=1.D-18)
|
|
DIMENSION CRD(MFCRA),XIFE(8),FRD(MFCRA)
|
|
CHARACTER*40 FIDATA(MION),FIODF1(MION),FIODF2(MION),FIBFCS(MION)
|
|
COMMON/IONFIL/FIDATA,FIODF1,FIODF2,FIBFCS
|
|
C
|
|
DATA XIFE/63480.,130563.,247220.,442000.,605000.,799000.,
|
|
& 1008000.,1218380./
|
|
C
|
|
FR1=FREQ(1)
|
|
FR2=FREQ(2)
|
|
NUNIT=0
|
|
NQHT=0
|
|
IF(IASV.EQ.0) GOTO 100
|
|
c WRITE(6,600)
|
|
c 600 FORMAT(///,' DETAILED PHOTOIONIZATION CROSS-SECTIONS',
|
|
c * ' (EXPLICIT LEVELS)',/,
|
|
c * ' ---------------------------------------',/)
|
|
DO 10 I=1,NION
|
|
N1=NFIRST(I)
|
|
N2=NLAST(I)
|
|
INSA=0
|
|
DO 11 II=N1,N2
|
|
NFCR(II)=2
|
|
FRECR(II,1)=FR1
|
|
FRECR(II,2)=FR2
|
|
CROSR(II,1)=0.
|
|
CROSR(II,2)=0.
|
|
INSB=IBF(II)
|
|
IF(INSB.LT.50.OR.INSB.GT.100) GO TO 11
|
|
IF(INSA.EQ.0) INSA=INSB
|
|
IF(INSA.NE.INSB)
|
|
* call quit(' Incoherent file units in SIGAVS')
|
|
11 CONTINUE
|
|
IF(INSA.EQ.0) GOTO 10
|
|
IF(FIBFCS(I).NE.' ') THEN
|
|
INSA=INBFCS(I)
|
|
OPEN(INSA,FILE=FIBFCS(I),STATUS='OLD')
|
|
END IF
|
|
READ(INSA,*,END=500,ERR=500) IIAT,IIZ,NSUP
|
|
ATI=IIAT+0.01*(IIZ-1)
|
|
NBFI=NSUP
|
|
IF(NSUP.GT.(N2-N1+1)) NBFI=(N2-N1+1)
|
|
c * call quit(' Too many bf-trans. in input file (SIGAVS)')
|
|
c WRITE(6,601) ATI,INSA
|
|
DO 12 II=1,NBFI
|
|
READ(INSA,*,END=500,ERR=500) IILO,EELO,GGLO,NFCRR
|
|
IK=N1+IILO-1
|
|
IF (IK.GT.N2 .OR. IK.LT.N1)
|
|
* call quit(' Inconsistent level numbering in SIGAVS')
|
|
IF(IIAT.NE.26) GOTO 13
|
|
ECMR=XIFE(IIZ)-EELO
|
|
c DE=ABS((ENION(IK)-HCCM*ECMR)/ENION(IK))
|
|
c IF(DE.GT.1.D-4) call quit(' Incorrect energy level in SIGAVS')
|
|
13 READ(INSA,*,END=500,ERR=500) FR0,CR0
|
|
NFD=1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
LUV=.FALSE.
|
|
DO 14 IJ=1,NFCRR-1
|
|
READ(INSA,*,END=500,ERR=500) FRIN,CRIN
|
|
IF(LUV) GOTO 14
|
|
IF(FRIN.GT.FR1) THEN
|
|
IF(FR0.LE.FR2.AND.IJ.GT.1) THEN
|
|
NFD=NFD+1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
ENDIF
|
|
NFD=NFD+1
|
|
FRD(NFD)=FRIN
|
|
CRD(NFD)=CRIN
|
|
LUV=.TRUE.
|
|
ELSE IF(FRIN.GT.FR2) THEN
|
|
IF(FR0.LE.FR2.AND.IJ.GT.1) THEN
|
|
NFD=NFD+1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
ENDIF
|
|
NFD=NFD+1
|
|
FRD(NFD)=FRIN
|
|
CRD(NFD)=CRIN
|
|
FR0=FRIN
|
|
CR0=CRIN
|
|
ELSE
|
|
FR0=FRIN
|
|
CR0=CRIN
|
|
ENDIF
|
|
IF(NFD.GT.MFCRA)
|
|
* call quit(' Too many frequencies in SIGAVS')
|
|
14 CONTINUE
|
|
CRMX(IK)=0.
|
|
DO 15 IJ=1,NFD
|
|
CRMX(IK)=MAX(CRMX(IK),CRD(IJ))
|
|
15 CONTINUE
|
|
IF(CRMX(IK).GT.0.) THEN
|
|
c WRITE(6,601) ATI,IILO,EELO,NFD
|
|
c 601 FORMAT(F7.2,I6,F13.3,I8)
|
|
NFCR(IK)=NFD
|
|
DO 16 IJ=1,NFD
|
|
FRECR(IK,IJ)=FRD(NFD-IJ+1)
|
|
CROSR(IK,IJ)=CRD(NFD-IJ+1)*BAM
|
|
16 CONTINUE
|
|
ENDIF
|
|
12 CONTINUE
|
|
10 CONTINUE
|
|
C
|
|
100 READ(50,*,END=540,ERR=540) NUNIT
|
|
IF(NUNIT.LE.0) RETURN
|
|
WRITE(6,602)
|
|
602 FORMAT(///,' DETAILED PHOTOIONIZATION CROSS-SECTIONS',
|
|
* ' (NON-EXPLICIT LEVELS)',/,
|
|
* ' ---------------------------------------',/)
|
|
DO 110 IN=1,NUNIT
|
|
READ(50,*,END=540,ERR=540) ATIR,INSA,NQHTR
|
|
NQHT=NQHT+NQHTR
|
|
IF(NQHT.GT.MPHOT)
|
|
* call quit(' Too many BF cross-sections in SIGAVS')
|
|
READ(INSA,*,END=501,ERR=501) IIAT,IIZ,NSUP
|
|
C
|
|
c check the total number of superlevels
|
|
c
|
|
IF(NQHTR.GT.NSUP) THEN
|
|
WRITE(6,603) NQHTR,NSUP
|
|
603 FORMAT(' NQHTR=',i4,' in Unit 50 input greater than NSUP=',
|
|
* i4,/' program resets NQHTR to NSUP'/)
|
|
NQHTR=NSUP
|
|
END IF
|
|
c
|
|
C loop over superlevels - read cross-sections
|
|
c
|
|
DO 120 I=1,NQHTR
|
|
IK=NQHT-NQHTR+I
|
|
READ(INSA,*,END=501,ERR=501) IILO,EELO,GGLO,NFCRR
|
|
AQHT(IK)=ATIR
|
|
EQHT(IK)=EELO
|
|
GQHT(IK)=GGLO
|
|
READ(INSA,*) FR0,CR0
|
|
NFD=1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
LUV=.FALSE.
|
|
DO 130 IJ=1,NFCRR-1
|
|
READ(INSA,*) FRIN,CRIN
|
|
IF(LUV) GOTO 130
|
|
IF(FRIN.GT.FR1) THEN
|
|
IF(FR0.LE.FR2.AND.IJ.GT.1) THEN
|
|
NFD=NFD+1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
ENDIF
|
|
NFD=NFD+1
|
|
FRD(NFD)=FRIN
|
|
CRD(NFD)=CRIN
|
|
LUV=.TRUE.
|
|
ELSE IF(FRIN.GT.FR2) THEN
|
|
IF(FR0.LE.FR2.AND.IJ.GT.1) THEN
|
|
NFD=NFD+1
|
|
FRD(NFD)=FR0
|
|
CRD(NFD)=CR0
|
|
ENDIF
|
|
NFD=NFD+1
|
|
FRD(NFD)=FRIN
|
|
CRD(NFD)=CRIN
|
|
FR0=FRIN
|
|
CR0=CRIN
|
|
ELSE
|
|
FR0=FRIN
|
|
CR0=CRIN
|
|
ENDIF
|
|
130 CONTINUE
|
|
CRMY(IK)=0.
|
|
DO 140 IJ=1,NFD
|
|
CRMY(IK)=MAX(CRMY(IK),CRD(IJ))
|
|
140 CONTINUE
|
|
IF(CRMY(IK).GT.0.) THEN
|
|
WRITE(6,611) ATIR,IILO,EELO,NFD
|
|
611 FORMAT(F7.2,I6,F13.3,I8)
|
|
NFQHT(IK)=NFD
|
|
DO 150 IJ=1,NFD
|
|
FRECQ(IK,IJ)=FRD(NFD-IJ+1)
|
|
QHOT(IK,IJ)=CRD(NFD-IJ+1)*BAM
|
|
150 CONTINUE
|
|
ENDIF
|
|
120 CONTINUE
|
|
110 CONTINUE
|
|
540 RETURN
|
|
C
|
|
500 call quit(' ERROR IN DATA FILE FOR BF SIG OF AVERAGED LEVELS (1)')
|
|
501 call quit(' ERROR IN DATA FILE FOR BF SIG OF AVERAGED LEVELS (2)')
|
|
C
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE PHTX(ID,ABSO,EMIS,fre,icon)
|
|
C ======================================
|
|
C
|
|
C Opacity due to detailed photoionization (read from tables by
|
|
C routine SIGAVS)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
DIMENSION ABSO(MFREQ),EMIS(MFREQ),PLANF(MFREQ),STIMU(MFREQ)
|
|
dimension fre(mfreq)
|
|
DIMENSION PHOTI(MCROSS,MFREQ)
|
|
DIMENSION IJP(MLEVEL),IJQ(MPHOT)
|
|
PARAMETER (C3=1.4387886)
|
|
SAVE PHOTI,IJP,IJQ
|
|
C
|
|
IF(IASV.EQ.0 .AND. NQHT.EQ.0) RETURN
|
|
T=TEMP(ID)
|
|
nfre=nfreq
|
|
ij0=3
|
|
if(icon.eq.1) then
|
|
ij0=1
|
|
nfre=nfreqc
|
|
end if
|
|
c
|
|
DO 10 IJ=1,NFRE
|
|
XX=FRE(IJ)
|
|
X15=XX*1.E-15
|
|
BNU=BN*X15*X15*X15
|
|
HKF=HK*XX
|
|
EXH=EXP(HKF/T)
|
|
PLANF(IJ)=BNU/(EXH-1.)
|
|
STIMU(IJ)=1.-1./EXH
|
|
10 CONTINUE
|
|
C
|
|
IF(IASV.EQ.0) GOTO 100
|
|
IF(ID.EQ.1) THEN
|
|
DO 40 I=1,NLEVEL
|
|
IF(CRMX(I).EQ.0.) GOTO 40
|
|
IK1=MAX0(2,IJP(I))
|
|
DO 42 IJ=3,NFRE
|
|
DO 45 IK=IK1,NFCR(I)
|
|
IF(FRECR(I,IK).LT.FRE(IJ)) THEN
|
|
IK2=IK
|
|
GOTO 46
|
|
ENDIF
|
|
45 CONTINUE
|
|
46 IK1=IK2
|
|
IF(IJ.EQ.3) IJP(I)=IK1
|
|
DFR=(FRE(IJ)-FRECR(I,IK1))/(FRECR(I,IK1-1)-FRECR(I,IK1))
|
|
PHOTI(I,IJ)=CROSR(I,IK1)+DFR*(CROSR(I,IK1-1)-CROSR(I,IK1))
|
|
42 CONTINUE
|
|
PHOTI(I,1)=PHOTI(I,3)
|
|
PHOTI(I,2)=PHOTI(I,NFREQ)
|
|
40 CONTINUE
|
|
ENDIF
|
|
DO 30 I=1,NLEVEL
|
|
IF(CRMX(I).EQ.0.) GOTO 30
|
|
POP=POPUL(I,ID)
|
|
DO 20 IJ=1,NFRE
|
|
AB=PHOTI(I,IJ)*POP*STIMU(IJ)
|
|
ABSO(IJ)=ABSO(IJ)+AB
|
|
EMIS(IJ)=EMIS(IJ)+AB*PLANF(IJ)
|
|
20 CONTINUE
|
|
30 CONTINUE
|
|
C
|
|
100 IF(NQHT.EQ.0) RETURN
|
|
IF(ID.EQ.1) THEN
|
|
DO 110 I=1,NQHT
|
|
IF(CRMY(I).EQ.0.) GOTO 110
|
|
IK1=MAX0(2,IJQ(I))
|
|
DO 120 IJ=3,NFRE
|
|
DO 125 IK=IK1,NFQHT(I)
|
|
IF(FRECQ(I,IK).LT.FRE(IJ)) THEN
|
|
IK2=IK
|
|
GOTO 126
|
|
ENDIF
|
|
125 CONTINUE
|
|
126 IK1=IK2
|
|
IF(IJ.EQ.3) IJQ(I)=IK1
|
|
DFR=(FRE(IJ)-FRECQ(I,IK1))/(FRECQ(I,IK1-1)-FRECQ(I,IK1))
|
|
PHOTI(I,IJ)=QHOT(I,IK1)+DFR*(QHOT(I,IK1-1)-QHOT(I,IK1))
|
|
120 CONTINUE
|
|
110 CONTINUE
|
|
ENDIF
|
|
DO 210 I=1,NQHT
|
|
IF(CRMY(I).EQ.0.) GOTO 210
|
|
IAT=int(AQHT(I))
|
|
X=(AQHT(I)-FLOAT(IAT)+1.E-4)*100.
|
|
ION=INT(X)+1
|
|
POP=RRR(ID,ION,IAT)*GQHT(I)*EXP(-EQHT(I)*C3/T)
|
|
DO 220 IJ=3,NFRE
|
|
AB=PHOTI(I,IJ)*POP*STIMU(IJ)
|
|
ABSO(IJ)=ABSO(IJ)+AB
|
|
EMIS(IJ)=EMIS(IJ)+AB*PLANF(IJ)
|
|
220 CONTINUE
|
|
210 CONTINUE
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
subroutine getlal
|
|
c =================
|
|
c
|
|
c getlal reads in the profile functions for Lyman alpha, beta, gamma,
|
|
c and Balmer alpha, including the quasi-molecular satellites;
|
|
c valid for first and second order in neutral and ionized H density
|
|
c modified routine provided originally by D. Koester
|
|
c
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (NXMAX=1400,NNMAX=5)
|
|
common/quasun/nunalp,nunbet,nungam,nunbal
|
|
common /callarda/xlalp(NXMAX),plalp(NXMAX,NNMAX),stnnea,stncha,
|
|
* vneua,vchaa,nxalp,iwarna
|
|
common /callardb/xlbet(NXMAX),plbet(NXMAX,NNMAX),stnneb,stnchb,
|
|
* vneub,vchab,nxbet,iwarnb
|
|
common /callardg/xlgam(NXMAX),plgam(NXMAX,NNMAX),stnneg,stnchg,
|
|
* vneug,vchag,nxgam,iwarng
|
|
common /callardc/xlbal(NXMAX),plbal(NXMAX,NNMAX),stnnec,stnchc,
|
|
* vneuc,vchac,nxbal,iwarnc
|
|
c
|
|
c Lyman alpha
|
|
c
|
|
nxalp=0
|
|
if(nunalp.gt.0) then
|
|
nunalp=67
|
|
open(unit=nunalp,file='./data/laquasi.dat',status='old')
|
|
read(nunalp,*) nxalp,stnnea,stncha,vneua,vchaa
|
|
do i=1,nxalp
|
|
read(nunalp,*) xlalp(i),(plalp(i,j),j=1,NNMAX)
|
|
end do
|
|
close(nunalp)
|
|
stnnea=10.0**stnnea
|
|
stncha=10.0**stncha
|
|
iwarna=0
|
|
close(nunalp)
|
|
write(*,*)
|
|
write(*,*) ' read quasi-molecular data for L alpha'
|
|
end if
|
|
c
|
|
c Lyman beta
|
|
c
|
|
nxbet=0
|
|
if(nunbet.gt.0) then
|
|
nunbet=67
|
|
open(unit=nunbet,file='./data/lbquasi.dat',status='old')
|
|
read(nunbet,*) nxbet,stnneb,stnchb,vneub,vchab
|
|
do i=1,nxbet
|
|
read(nunbet,*) xlbet(i),(plbet(i,j),j=1,NNMAX)
|
|
end do
|
|
close(nunbet)
|
|
stnneb=10.0**stnneb
|
|
stnchb=10.0**stnchb
|
|
iwarnb=0
|
|
write(*,*) ' read quasi-molecular data for L beta'
|
|
end if
|
|
c
|
|
c Lyman gamma
|
|
c
|
|
nxgam=0
|
|
if(nungam.gt.0) then
|
|
nungam=67
|
|
open(unit=nunalp,file='./data/lgquasi.dat',status='old')
|
|
read(nungam,*) nxgam,stnneg,stnchg,vneug,vchag
|
|
do i=1,nxgam
|
|
read(nungam,*) xlgam(i),(plgam(i,j),j=1,NNMAX)
|
|
end do
|
|
close(nungam)
|
|
stnneg=10.0**stnneg
|
|
stnchg=10.0**stnchg
|
|
iwarng=0
|
|
write(*,*) ' read quasi-molecular data for L gamma'
|
|
end if
|
|
c
|
|
c Balmer alpha
|
|
c
|
|
nxbal=0
|
|
if(nunbal.gt.0) then
|
|
nunbal=67
|
|
open(unit=nunalp,file='./data/lhquasi.dat',status='old')
|
|
read(nunbal,*) nxbal,stnnec,stnchc,vneuc,vchac
|
|
do i=1,nxbal
|
|
read(nunbal,*) xlbal(i),(plbal(i,j),j=1,NNMAX)
|
|
end do
|
|
close(nunbal)
|
|
stnnec=10.0**stnnec
|
|
stnchc=10.0**stnchc
|
|
iwarnc=0
|
|
write(*,*) ' read quasi-molecular data for H alpha'
|
|
end if
|
|
write(*,*)
|
|
return
|
|
end
|
|
c
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
subroutine allard(xl,hneutr,hcharg,prof,iq,jq)
|
|
c ==============================================
|
|
c
|
|
c quasi-molecular opacity for Lyman alpha, beta, and Balmer alpha
|
|
c modified routine provided originally by D. Koester
|
|
c
|
|
c Input: xl: wavelength in [A]
|
|
c hneutr: neutral H particle density [cm-3]
|
|
c hcharg: ionized H particle density [cm-3]
|
|
c iq: quantum number of the lower level
|
|
c jq: quantum number of the upper level;
|
|
c =2 - Lyman alpha
|
|
c =3 - Lyman beta
|
|
c Output: prof: Lyman alpha line profile, normalized to 1.0e8
|
|
c if integrated over A;
|
|
c It then renormalized by multiplying by
|
|
c 8.853e-29*lambda_0^2*f_ij
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (NXMAX=1400,NNMAX=5)
|
|
parameter (xnorma=8.8528e-29*1215.6*1215.6*0.41618,
|
|
* xnormb=8.8528e-29*1025.73*1025.7*0.0791,
|
|
* xnormg=8.8528e-29*972.53*972.53*0.0290,
|
|
* xnormc=8.8528e-29*6562.*6562.*0.6407)
|
|
common /callarda/xlalp(NXMAX),plalp(NXMAX,NNMAX),stnnea,stncha,
|
|
* vneua,vchaa,nxalp,iwarna
|
|
common /callardb/xlbet(NXMAX),plbet(NXMAX,NNMAX),stnneb,stnchb,
|
|
* vneub,vchab,nxbet,iwarnb
|
|
common /callardg/xlgam(NXMAX),plgam(NXMAX,NNMAX),stnneg,stnchg,
|
|
* vneug,vchag,nxgam,iwarng
|
|
common /callardc/xlbal(NXMAX),plbal(NXMAX,NNMAX),stnnec,stnchc,
|
|
* vneuc,vchac,nxbal,iwarnc
|
|
c
|
|
prof=0.
|
|
c
|
|
c Lyman alpha
|
|
c
|
|
if(iq.eq.1.and.jq.eq.2) then
|
|
c if(xl.lt.xlalp(1).or.xl.gt.xlalp(nxalp)) return
|
|
if(xl.lt.xlalp(1)) return
|
|
vn1=hneutr/stnnea
|
|
vn2=hcharg/stncha
|
|
vns=vn1*vneua+vn2*vchaa
|
|
if(iwarna.eq.0) then
|
|
if(vn1*vneua.gt.0.3.or.vn2*vchaa.gt.0.3) then
|
|
write(*,*) ' warning: density too high for',
|
|
* ' Lyman alpha expansion'
|
|
iwarna=1
|
|
endif
|
|
endif
|
|
vn11=vn1*vn1
|
|
vn22=vn2*vn2
|
|
vn12=vn1*vn2
|
|
xnorm=1.0/(1.0+vns+0.5*vns*vns)
|
|
c
|
|
if(xl.le.xlalp(nxalp)) then
|
|
jl=0
|
|
ju=nxalp+1
|
|
10 if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((xlalp(nxalp).gt.xlalp(1)).eqv.(xl.gt.xlalp(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
go to 10
|
|
endif
|
|
j=jl
|
|
c
|
|
if(j.eq.0) j=1
|
|
if(j.eq.nxalp) j=j-1
|
|
a1=(xl-xlalp(j))/(xlalp(j+1)-xlalp(j))
|
|
p1= vn1*((1.0-a1)*plalp(j,1)+a1*plalp(j+1,1))
|
|
p11=vn11*((1.0-a1)*plalp(j,2)+a1*plalp(j+1,2))
|
|
p2= vn2*((1.0-a1)*plalp(j,3)+a1*plalp(j+1,3))
|
|
p22=vn22*((1.0-a1)*plalp(j,4)+a1*plalp(j+1,4))
|
|
p12=vn12*((1.0-a1)*plalp(j,5)+a1*plalp(j+1,5))
|
|
prof=(p1+p2+p11+p22+p12)*xnorm*xnorma
|
|
c
|
|
else
|
|
j=nxalp-1
|
|
c a1=(xl-xlalp(j))/(xlalp(j+1)-xlalp(j))
|
|
a1=1.
|
|
p1= vn1*((1.0-a1)*plalp(j,1)+a1*plalp(j+1,1))
|
|
p11=vn11*((1.0-a1)*plalp(j,2)+a1*plalp(j+1,2))
|
|
p2= vn2*((1.0-a1)*plalp(j,3)+a1*plalp(j+1,3))
|
|
p22=vn22*((1.0-a1)*plalp(j,4)+a1*plalp(j+1,4))
|
|
p12=vn12*((1.0-a1)*plalp(j,5)+a1*plalp(j+1,5))
|
|
pro0=(p1+p2+p11+p22+p12)*xnorm*xnorma
|
|
xlas=xlalp(nxalp)
|
|
x0=1215.67
|
|
dxlas=xlalp(nxalp)-x0
|
|
dx=xl-x0
|
|
prof=pro0/(dx/dxlas)**2.5
|
|
c
|
|
end if
|
|
return
|
|
end if
|
|
c
|
|
c Lyman beta
|
|
c
|
|
if(iq.eq.1.and.jq.eq.3) then
|
|
if(nxbet.eq.0) return
|
|
if(xl.lt.xlbet(1).or.xl.gt.xlbet(nxbet)) return
|
|
vn1=hneutr/stnneb
|
|
vn2=hcharg/stnchb
|
|
vns=vn1*vneub+vn2*vchab
|
|
if(iwarnb.eq.0) then
|
|
if(vn1*vneub.gt.0.3.or.vn2*vchab.gt.0.3) then
|
|
write(*,*) ' warning: density too high for',
|
|
* ' Lyman beta expansion'
|
|
iwarnb=1
|
|
endif
|
|
endif
|
|
vn11=vn1*vn1
|
|
vn22=vn2*vn2
|
|
vn12=vn1*vn2
|
|
xnorm=1.0/(1.0+vns+0.5*vns*vns)
|
|
c
|
|
jl=0
|
|
ju=nxbet+1
|
|
20 if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((xlbet(nxbet).gt.xlbet(1)).eqv.(xl.gt.xlbet(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
go to 20
|
|
endif
|
|
j=jl
|
|
c
|
|
if(j.eq.0) j=1
|
|
if(j.eq.nxbet) j=j-1
|
|
a1=(xl-xlbet(j))/(xlbet(j+1)-xlbet(j))
|
|
p1= vn1*((1.0-a1)*plbet(j,1)+a1*plbet(j+1,1))
|
|
p11=vn11*((1.0-a1)*plbet(j,2)+a1*plbet(j+1,2))
|
|
p2= vn2*((1.0-a1)*plbet(j,3)+a1*plbet(j+1,3))
|
|
p22=vn22*((1.0-a1)*plbet(j,4)+a1*plbet(j+1,4))
|
|
p12=vn12*((1.0-a1)*plbet(j,5)+a1*plbet(j+1,5))
|
|
prof=(p1+p2+p11+p22+p12)*xnorm*xnormb
|
|
return
|
|
end if
|
|
c
|
|
c Lyman gamma
|
|
c
|
|
if(iq.eq.1.and.jq.eq.4) then
|
|
if(nxgam.eq.0) return
|
|
if(xl.lt.xlgam(1).or.xl.gt.xlgam(nxgam)) return
|
|
vn1=hneutr/stnneg
|
|
vn2=hcharg/stnchg
|
|
vns=vn1*vneug+vn2*vchag
|
|
if(iwarng.eq.0) then
|
|
if(vn1*vneug.gt.0.3.or.vn2*vchag.gt.0.3) then
|
|
write(*,*) ' warning: density too high for',
|
|
* ' Lyman gamma expansion'
|
|
iwarng=1
|
|
endif
|
|
endif
|
|
vn11=vn1*vn1
|
|
vn22=vn2*vn2
|
|
vn12=vn1*vn2
|
|
xnorm=1.0/(1.0+vns+0.5*vns*vns)
|
|
c
|
|
jl=0
|
|
ju=nxgam+1
|
|
30 if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((xlgam(nxgam).gt.xlgam(1)).eqv.(xl.gt.xlgam(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
go to 30
|
|
endif
|
|
j=jl
|
|
c
|
|
if(j.eq.0) j=1
|
|
if(j.eq.nxgam) j=j-1
|
|
a1=(xl-xlgam(j))/(xlgam(j+1)-xlgam(j))
|
|
p1= vn1*((1.0-a1)*plgam(j,1)+a1*plgam(j+1,1))
|
|
p11=vn11*((1.0-a1)*plgam(j,2)+a1*plgam(j+1,2))
|
|
p2= vn2*((1.0-a1)*plgam(j,3)+a1*plgam(j+1,3))
|
|
p22=vn22*((1.0-a1)*plgam(j,4)+a1*plgam(j+1,4))
|
|
p12=vn12*((1.0-a1)*plgam(j,5)+a1*plgam(j+1,5))
|
|
prof=(p1+p2+p11+p22+p12)*xnorm*xnormg
|
|
return
|
|
end if
|
|
c
|
|
c Balmer alpha
|
|
c
|
|
if(iq.eq.2.and.jq.eq.3) then
|
|
if(xl.lt.xlbal(1).or.xl.gt.xlbal(nxbal)) return
|
|
c vn1=hneutr/stnnec
|
|
vn1=0.
|
|
vn2=hcharg/stnchc
|
|
vns=vn1*vneuc+vn2*vchac
|
|
vn11=vn1*vn1
|
|
vn22=vn2*vn2
|
|
vn12=vn1*vn2
|
|
xnorm=1.0/(1.0+vns+0.5*vns*vns)
|
|
c
|
|
jl=0
|
|
ju=nxbal+1
|
|
40 if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((xlbal(nxbal).gt.xlbal(1)).eqv.(xl.gt.xlbal(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
go to 40
|
|
endif
|
|
j=jl
|
|
c
|
|
if(j.eq.0) j=1
|
|
if(j.eq.nxbal) j=j-1
|
|
a1=(xl-xlbal(j))/(xlbal(j+1)-xlbal(j))
|
|
p1= vn1*((1.0-a1)*plbal(j,1)+a1*plbal(j+1,1))
|
|
p11=vn11*((1.0-a1)*plbal(j,2)+a1*plbal(j+1,2))
|
|
p2= vn2*((1.0-a1)*plbal(j,3)+a1*plbal(j+1,3))
|
|
p22=vn22*((1.0-a1)*plbal(j,4)+a1*plbal(j+1,4))
|
|
p12=vn12*((1.0-a1)*plbal(j,5)+a1*plbal(j+1,5))
|
|
prof=(p1+p2+p11+p22+p12)*xnorm*xnormc
|
|
end if
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C **************************************************************
|
|
C
|
|
C
|
|
subroutine lyahhe(xl,ahe,prof)
|
|
c ==============================
|
|
c
|
|
c Lyman alpha broadening by helium - after N. Allard
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (nxmax=1000)
|
|
c parameter (sthe=1.e21)
|
|
common/hhebrd/sthe,nunhhe
|
|
common/calhhe/xlhhe(nxmax),sighhe(nxmax),nxhhe
|
|
dimension xlhh0(nxmax),sighh0(nxmax)
|
|
data iread/0/
|
|
c
|
|
if(iread.eq.0) then
|
|
c nxhhe=679
|
|
c open(unit=67,
|
|
c * file='siglyhhe_21_T14500.lam',
|
|
c * status='old')
|
|
it=0
|
|
do i=1,nxmax
|
|
read(67,*,err=5,end=5) xl,sig
|
|
it=it+1
|
|
if(nunhhe.eq.1) xl=1./(1.e-8*xl+1./1215.67)
|
|
xlhh0(it)=xl
|
|
sighh0(it)=sig
|
|
end do
|
|
5 nxhhe=it
|
|
do i=1,nxhhe
|
|
xlhhe(i)=xlhh0(nxhhe-i+1)
|
|
sighhe(i)=sighh0(nxhhe-i+1)
|
|
end do
|
|
c do i=1,nxhhe
|
|
c j=nxhhe-i+1
|
|
c read(67,*) xlhhe(j),sighhe(j)
|
|
c end do
|
|
close(67)
|
|
iread=1
|
|
end if
|
|
c
|
|
prof=0.
|
|
if(xl.gt.xlhhe(nxhhe)) return
|
|
jl=0
|
|
ju=nxhhe+1
|
|
10 if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((xlhhe(nxhhe).gt.xlhhe(1)).eqv.(xl.gt.xlhhe(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
go to 10
|
|
endif
|
|
j=jl
|
|
c
|
|
if(j.eq.0) j=1
|
|
if(j.eq.nxhhe) j=j-1
|
|
a1=(xl-xlhhe(j))/(xlhhe(j+1)-xlhhe(j))
|
|
s1=(1.0-a1)*sighhe(j)+a1*sighhe(j+1)
|
|
prof=s1*ahe/sthe*6.2831855
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C **************************************************************
|
|
C
|
|
C
|
|
subroutine readbf
|
|
c =================
|
|
c
|
|
c auxiliary subroutine for enabling reading of input data with
|
|
c comments
|
|
c
|
|
c lines beginning with ! or * are understood as comments
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
character*80 buff
|
|
10 continue
|
|
read(5,501,end=20) buff
|
|
if(buff(1:1).eq.'!'.or.buff(1:1).eq.'*') go to 10
|
|
write(ibuff,501) buff
|
|
go to 10
|
|
501 format(a)
|
|
20 continue
|
|
rewind ibuff
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE PRETAB
|
|
C =================
|
|
C
|
|
C pretabulate expansion coefficients for the Voigt function
|
|
C 200 steps per doppler width - up to 10 Doppler widths
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (VSTEPS=200.,MVOI=2001)
|
|
COMMON/VOITAB/H0TAB(MVOI),H1TAB(MVOI),H2TAB(MVOI)
|
|
DIMENSION TABVI(81),TABH1(81)
|
|
DATA TABVI/0.,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.,1.1,1.2,1.3,1.4,1.5,
|
|
11.6,1.7,1.8,1.9,2.,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.,3.1,3.2,
|
|
2 3.3,3.4,3.5,3.6,3.7,3.8,3.9,4.0,4.2,4.4,4.6,4.8,5.0,5.2,5.4,5.6,
|
|
3 5.8,6.0,6.2,6.4,6.6,6.8,7.0,7.2,7.4,7.6,7.8,8.0,8.2,8.4,8.6,8.8,
|
|
4 9.0,9.2,9.4,9.6,9.8,10.0,10.2,10.4,10.6,10.8,11.0,11.2,11.4,11.6,
|
|
5 11.8,12.0/
|
|
DATA TABH1/-1.12838,-1.10596,-1.04048,-.93703,-.80346,-.64945,
|
|
1-.48552,-.32192,-.16772,-.03012,.08594,.17789,.24537,.28981,
|
|
2.31394,.32130,.31573,.30094,.28027,.25648,.231726,.207528,.184882,
|
|
3.164341,.146128,.130236,.116515,.104739,.094653,.086005,.078565,
|
|
4 .072129,.066526,.061615,.057281,.053430,.049988,.046894,.044098,
|
|
5 .041561,.039250,.035195,.031762,.028824,.026288,.024081,.022146,
|
|
6 .020441,.018929,.017582,.016375,.015291,.014312,.013426,.012620,
|
|
7 .0118860,.0112145,.0105990,.0100332,.0095119,.0090306,.0085852,
|
|
8 .0081722,.0077885,.0074314,.0070985,.0067875,.0064967,.0062243,
|
|
9 .0059688,.0057287,.0055030,.0052903,.0050898,.0049006,.0047217,
|
|
T .0045526,.0043924,.0042405,.0040964,.0039595/
|
|
C
|
|
N=MVOI
|
|
DO 10 I=1,N
|
|
10 H0TAB(I)=FLOAT(I-1)/VSTEPS
|
|
CALL INTERP(TABVI,TABH1,H0TAB,H1TAB,81,N,2,0,0)
|
|
DO 20 I=1,N
|
|
VV=(FLOAT(I-1)/VSTEPS)**2
|
|
H0TAB(I)=EXP(-VV)
|
|
H2TAB(I)=H0TAB(I)-(VV+VV)*H0TAB(I)
|
|
20 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION VOIGTK(A,V)
|
|
C ====================
|
|
C
|
|
C Voigt function after Kurucz (in Computational Astrophysics)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (MVOI=2001)
|
|
PARAMETER (ONE=1., THREE=3., TEN=10., FIFTN=15., TWOH=200.,
|
|
* C14142=1.4142, C11283=1.12838, C15=1.5,C32=3.2,
|
|
* C05642=0.5642,C79788=0.79788,C02=0.2,C14=1.4,
|
|
* C37613=0.37613,C23=2./3.,
|
|
* CV1=-.122727278,CV2=.532770573,CV3=-.96284325,
|
|
* CV4=.979895032)
|
|
COMMON/VOITAB/H0TAB(MVOI),H1TAB(MVOI),H2TAB(MVOI)
|
|
IV=int(V*TWOH+C15)
|
|
IF(A.LT.C02) THEN
|
|
IF(V.LE.TEN) THEN
|
|
VOIGTK=(H2TAB(IV)*A+H1TAB(IV))*A+H0TAB(IV)
|
|
ELSE
|
|
VOIGTK=C05642*A/(V*V)
|
|
END IF
|
|
RETURN
|
|
END IF
|
|
IF(A.GT.C14) GO TO 10
|
|
IF(A+V.GT.C32) GO TO 10
|
|
VV=V*V
|
|
HH1=H1TAB(IV)+H0TAB(IV)*C11283
|
|
HH2=H2TAB(IV)+HH1*C11283-H0TAB(IV)
|
|
HH3=(ONE-H2TAB(IV))*C37613-HH1*C23*VV+HH2*C11283
|
|
HH4=(THREE*HH3-HH1)*C37613+H0TAB(IV)*C23*VV*VV
|
|
VOIGTK=((((HH4*A+HH3)*A+HH2)*A+HH1)*A+H0TAB(IV))*
|
|
* (((CV1*A+CV2)*A+CV3)*A+CV4)
|
|
RETURN
|
|
10 AA=A*A
|
|
VV=V*V
|
|
U=(AA+VV)*C14142
|
|
UU=U*U
|
|
VOIGTK=((((AA-TEN*VV)*AA*THREE+FIFTN*VV*VV)/UU+THREE*VV-AA)/UU+
|
|
* ONE)*A*C79788/U
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE RTECD
|
|
C ================
|
|
C
|
|
C solution of the radiative transfer equation by Feautrier method
|
|
C for two continuum points
|
|
C used when one employs RTEDFE, ie. the DFE method for the
|
|
C transfer equation for the inner frequency points
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
DIMENSION D(3,3,MDEPTH),ANU(3,MDEPTH),AANU(MDEPTH),DDD(MDEPTH),
|
|
* AA(3,3),BB(3,3),CC(3,3),VL(3),AMU(3),WTMU(3),
|
|
* DT(MDEPTH),TAU(MDEPTH),
|
|
* RDD(MDEPTH),FKK(MDEPTH),ST0(MDEPTH),SS0(MDEPTH),
|
|
* RINT(MDEPTH,MMU)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
COMMON/CONSCA/SCC1(mdepth),SCC2(MDEPTH)
|
|
PARAMETER (UN=1.D0, HALF=0.5D0)
|
|
PARAMETER (THIRD=UN/3., QUART=UN/4., SIXTH=UN/6.D0)
|
|
PARAMETER (TAUREF = 0.6666666666667)
|
|
DATA AMU/.887298334620742D0,.5D0,.112701665379258D0/,
|
|
1 WTMU/.277777777777778D0,.444444444444444D0,.277777777777778D0
|
|
1 /
|
|
C
|
|
NMU=3
|
|
ND1=ND-1
|
|
C
|
|
C loop over two continuum frequencies
|
|
C
|
|
DO 100 IJ=1,2
|
|
TAUMIN=CH(IJ,1)/DENS(1)*DM(1)*HALF
|
|
TAU(1)=TAUMIN
|
|
DO I=1,ND1
|
|
DT(I)=(DM(I+1)-DM(I))*(CH(IJ,I+1)/DENS(I+1)+CH(IJ,I)/DENS(I))*
|
|
* HALF
|
|
ST0(I)=ET(IJ,I)/CH(IJ,I)
|
|
SS0(I)=-SC(IJ,I)/CH(IJ,I)
|
|
TAU(I+1)=TAU(I)+DT(I)
|
|
IF(TAU(I).LE.TAUREF.AND.TAU(I+1).GT.TAUREF) IREF=I
|
|
END DO
|
|
ST0(ND)=ET(IJ,ND)/CH(IJ,ND)
|
|
SS0(ND)=-SC(IJ,ND)/CH(IJ,ND)
|
|
FR=FREQ(IJ)
|
|
BNU=BN*(FR*1.E-15)**3
|
|
PLAND=BNU/(EXP(HK*FR/TEMP(ND ))-UN)
|
|
DPLAN=BNU/(EXP(HK*FR/TEMP(ND-1))-UN)
|
|
DPLAN=(PLAND-DPLAN)/DT(ND1)
|
|
C
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C FIRST PART - VARIABLE EDDINGTON FACTORS
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C
|
|
C Allowance for wind blanketing
|
|
C
|
|
ALB1=0.
|
|
DO I=1,NMU
|
|
C
|
|
C ************************
|
|
C UPPER BOUNDARY CONDITION
|
|
C ************************
|
|
C
|
|
ID=1
|
|
DTP1=DT(1)
|
|
Q0=0.
|
|
P0=0.
|
|
C
|
|
C allowance for non-zero optical depth at the first depth point
|
|
C
|
|
TAMM=TAUMIN/AMU(I)
|
|
IF(TAMM.GT.0.01) THEN
|
|
P0=UN-EXP(-TAMM)
|
|
ELSE
|
|
P0=TAMM*(UN-HALF*TAMM*(UN-TAMM*THIRD*(UN-QUART*TAMM)))
|
|
END IF
|
|
EX=UN-P0
|
|
Q0=Q0+P0*AMU(I)*WTMU(I)
|
|
C
|
|
DIV=DTP1/AMU(I)*THIRD
|
|
VL(I)=DIV*(ST0(ID)+HALF*ST0(ID+1))+ST0(ID)*P0
|
|
DO J=1,NMU
|
|
BB(I,J)=SS0(ID)*WTMU(J)*(DIV+P0)-ALB1*WTMU(J)
|
|
CC(I,J)=-HALF*DIV*SS0(ID+1)*WTMU(J)
|
|
END DO
|
|
BB(I,I)=BB(I,I)+AMU(I)/DTP1+UN+DIV
|
|
CC(I,I)=CC(I,I)+AMU(I)/DTP1-HALF*DIV
|
|
ANU(I,ID)=0.
|
|
END DO
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
S=0.
|
|
DO K=1,NMU
|
|
S=S+BB(I,K)*CC(K,J)
|
|
END DO
|
|
D(I,J,ID)=S
|
|
ANU(I,1)=ANU(I,1)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
C
|
|
C *******************
|
|
C NORMAL DEPTH POINTS
|
|
C *******************
|
|
C
|
|
DO ID=2,ND1
|
|
DTM1=DTP1
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTM1+DTP1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
BE=AL+GA
|
|
A=(UN-HALF*AL*DTP1*DTP1)*SIXTH
|
|
C=(UN-HALF*GA*DTM1*DTM1)*SIXTH
|
|
B=UN-A-C
|
|
VL0=A*ST0(ID-1)+B*ST0(ID)+C*ST0(ID+1)
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
AA(I,J)=-A*SS0(ID-1)*WTMU(J)
|
|
CC(I,J)=-C*SS0(ID+1)*WTMU(J)
|
|
BB(I,J)=B*SS0(ID)*WTMU(J)
|
|
END DO
|
|
END DO
|
|
DO I=1,NMU
|
|
DIV=AMU(I)**2
|
|
VL(I)=VL0
|
|
AA(I,I)=AA(I,I)+DIV*AL-A
|
|
CC(I,I)=CC(I,I)+DIV*GA-C
|
|
BB(I,I)=BB(I,I)+DIV*BE+B
|
|
END DO
|
|
DO I=1,NMU
|
|
S1=0.
|
|
DO J=1,NMU
|
|
S=0.
|
|
S1=S1+AA(I,J)*ANU(J,ID-1)
|
|
DO K=1,NMU
|
|
S=S+AA(I,K)*D(K,J,ID-1)
|
|
END DO
|
|
BB(I,J)=BB(I,J)-S
|
|
END DO
|
|
VL(I)=VL(I)+S1
|
|
END DO
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
ANU(I,ID)=0.
|
|
DO J=1,NMU
|
|
S=0.
|
|
DO K=1,NMU
|
|
S=S+BB(I,K)*CC(K,J)
|
|
END DO
|
|
D(I,J,ID)=S
|
|
ANU(I,ID)=ANU(I,ID)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
END DO
|
|
C
|
|
C ************
|
|
C LOWER BOUNDARY CONDITION
|
|
C ************
|
|
C
|
|
ID=ND
|
|
DO I=1,NMU
|
|
AA(I,I)=AMU(I)/DTP1
|
|
VL(I)=PLAND+AMU(I)*DPLAN+AA(I,I)*ANU(I,ID-1)
|
|
DO J=1,NMU
|
|
BB(I,J)=-AA(I,I)*D(I,J,ID-1)
|
|
END DO
|
|
BB(I,I)=BB(I,I)+AA(I,I)+UN
|
|
END DO
|
|
C
|
|
C Matrix inversion: instead of calling MATINV, a very fast inlined
|
|
C routine MINV3 for a specific 3 x 3 matrix inversion
|
|
C
|
|
C CALL MATINV(BB,NMU,3)
|
|
C
|
|
C ******************************
|
|
BB(2,1)=BB(2,1)/BB(1,1)
|
|
BB(2,2)=BB(2,2)-BB(2,1)*BB(1,2)
|
|
BB(2,3)=BB(2,3)-BB(2,1)*BB(1,3)
|
|
BB(3,1)=BB(3,1)/BB(1,1)
|
|
BB(3,2)=(BB(3,2)-BB(3,1)*BB(1,2))/BB(2,2)
|
|
BB(3,3)=BB(3,3)-BB(3,1)*BB(1,3)-BB(3,2)*BB(2,3)
|
|
C
|
|
BB(3,2)=-BB(3,2)
|
|
BB(3,1)=-BB(3,1)-BB(3,2)*BB(2,1)
|
|
BB(2,1)=-BB(2,1)
|
|
C
|
|
BB(3,3)=UN/BB(3,3)
|
|
BB(2,3)=-BB(2,3)*BB(3,3)/BB(2,2)
|
|
BB(2,2)=UN/BB(2,2)
|
|
BB(1,3)=-(BB(1,2)*BB(2,3)+BB(1,3)*BB(3,3))/BB(1,1)
|
|
BB(1,2)=-BB(1,2)*BB(2,2)/BB(1,1)
|
|
BB(1,1)=UN/BB(1,1)
|
|
C
|
|
BB(1,1)=BB(1,1)+BB(1,2)*BB(2,1)+BB(1,3)*BB(3,1)
|
|
BB(1,2)=BB(1,2)+BB(1,3)*BB(3,2)
|
|
BB(2,1)=BB(2,2)*BB(2,1)+BB(2,3)*BB(3,1)
|
|
BB(2,2)=BB(2,2)+BB(2,3)*BB(3,2)
|
|
BB(3,1)=BB(3,3)*BB(3,1)
|
|
BB(3,2)=BB(3,3)*BB(3,2)
|
|
C ******************************
|
|
C
|
|
DO I=1,NMU
|
|
ANU(I,ID)=0.
|
|
DO J=1,NMU
|
|
D(I,J,ID)=0.
|
|
ANU(I,ID)=ANU(I,ID)+BB(I,J)*VL(J)
|
|
END DO
|
|
END DO
|
|
C
|
|
C ************
|
|
C BACKSOLUTION
|
|
C ************
|
|
C
|
|
DO ID=ND-1,1,-1
|
|
DO I=1,NMU
|
|
DO J=1,NMU
|
|
ANU(I,ID)=ANU(I,ID)+D(I,J,ID)*ANU(J,ID+1)
|
|
END DO
|
|
END DO
|
|
AJ=0.
|
|
AK=0.
|
|
DO I=1,NMU
|
|
DIV=WTMU(I)*ANU(I,ID)
|
|
AJ=AJ+DIV
|
|
AK=AK+DIV*AMU(I)**2
|
|
END DO
|
|
FKK(ID)=AK/AJ
|
|
END DO
|
|
C
|
|
C surface Eddington actor
|
|
C
|
|
AH=0.
|
|
DO I=1,NMU
|
|
AH=AH+WTMU(I)*AMU(I)*ANU(I,1)
|
|
END DO
|
|
FH=AH/AJ-HALF*ALB1
|
|
C
|
|
FKK(ND)=THIRD
|
|
C
|
|
C
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C SECOND PART - DETERMINATION OF THE MEAN INTENSITIES
|
|
C RECALCULATION OF THE TRANSFER EQUATION WITH GIVEN EDDINGTON FACTORS
|
|
C +++++++++++++++++++++++++++++++++++++++++
|
|
C
|
|
DTP1=DT(1)
|
|
DIV=DTP1*THIRD
|
|
BBB=FKK(1)/DTP1+FH+DIV+SS0(1)*(DIV+Q0)
|
|
CCC=FKK(2)/DTP1-HALF*DIV*(UN+SS0(2))
|
|
VLL=DIV*(ST0(1)+HALF*ST0(2))+ST0(1)*Q0
|
|
AANU(1)=VLL/BBB
|
|
DDD(1)=CCC/BBB
|
|
DO ID=2,ND1
|
|
DTM1=DTP1
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTP1+DTM1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
A=(UN-HALF*DTP1*DTP1*AL)*SIXTH
|
|
C=(UN-HALF*DTM1*DTM1*GA)*SIXTH
|
|
AAA=AL*FKK(ID-1)-A*(UN+SS0(ID-1))
|
|
CCC=GA*FKK(ID+1)-C*(UN+SS0(ID+1))
|
|
BBB=(AL+GA)*FKK(ID)+(UN-A-C)*(UN+SS0(ID))
|
|
VLL=A*ST0(ID-1)+C*ST0(ID+1)+(UN-A-C)*ST0(ID)
|
|
BBB=BBB-AAA*DDD(ID-1)
|
|
DDD(ID)=CCC/BBB
|
|
AANU(ID)=(VLL+AAA*AANU(ID-1))/BBB
|
|
END DO
|
|
BBB=FKK(ND)/DTP1+HALF
|
|
AAA=FKK(ND1)/DTP1
|
|
BBB=BBB-AAA*DDD(ND1)
|
|
VLL=HALF*PLAND+DPLAN*THIRD
|
|
RDD(ND)=(VLL+AAA*AANU(ND1))/BBB
|
|
DO IID=1,ND1
|
|
ID=ND-IID
|
|
RDD(ID)=AANU(ID)+DDD(ID)*RDD(ID+1)
|
|
END DO
|
|
FLUX(IJ)=FH*RDD(1)
|
|
C
|
|
if(ij.eq.1) then
|
|
do id=1,nd
|
|
scc1(id)=-rdd(id)*ss0(id)*ch(1,id)
|
|
end do
|
|
else
|
|
do id=1,nd
|
|
scc2(id)=-rdd(id)*ss0(id)*ch(2,id)
|
|
end do
|
|
end if
|
|
C
|
|
C if needed (if iprin.ge.3), output of interesting physical
|
|
C quantities at the monochromatic optical depth tau(nu)=2/3
|
|
C
|
|
IF(IPRIN.ge.3) THEN
|
|
T0=LOG(TAU(IREF+1)/TAU(IREF))
|
|
X0=LOG(TAU(IREF+1)/TAUREF)/T0
|
|
X1=LOG(TAUREF/TAU(IREF))/T0
|
|
DMREF=EXP(LOG(DM(IREF))*X0+LOG(DM(IREF+1))*X1)
|
|
TREF=EXP(LOG(TEMP(IREF))*X0+LOG(TEMP(IREF+1))*X1)
|
|
STREF=EXP(LOG(ST0(IREF))*X0+LOG(ST0(IREF+1))*X1)
|
|
SCREF=EXP(LOG(-SS0(IREF))*X0+LOG(-SS0(IREF+1))*X1)
|
|
SSREF=EXP(LOG(-SS0(IREF)*RDD(IREF))*X0+
|
|
* LOG(-SS0(IREF+1)*RDD(IREF+1))*X1)
|
|
SREF=STREF+SSREF
|
|
ALM=2.997925E18/FREQ(IJ)
|
|
WRITE(96,636) IJ,ALM,IREF,DMREF,TREF,SCREF,STREF,SSREF,SREF
|
|
636 FORMAT(1H ,I3,F10.3,I4,1PE10.3,0PF10.1,1X,1P3E10.3,E11.3)
|
|
END IF
|
|
c
|
|
C ********************************************************************
|
|
C
|
|
C THIRD PART - DETERMINATION OF THE SPECIFIC INTENSITIES
|
|
C RECALCULATION OF THE TRANSFER EQUATION WITH GIVEN SOURCE FUNCTION
|
|
C
|
|
if(iflux.eq.0) go to 100
|
|
DO IMU=1,NMU0
|
|
ANX=ANGL(IMU)
|
|
DTP1=DT(1)
|
|
DIV=DTP1*THIRD/ANX
|
|
C
|
|
TAMM=TAUMIN/ANX
|
|
IF(TAMM.LT.0.01) THEN
|
|
P0=TAMM*(UN-HALF*TAMM*(UN-TAMM*THIRD*(UN-QUART*TAMM)))
|
|
ELSE
|
|
P0=UN-EXP(-TAMM)
|
|
END IF
|
|
C
|
|
BBB=ANX/DTP1+UN+DIV
|
|
CCC=ANX/DTP1-HALF*DIV
|
|
VLL=(DIV+P0)*(ST0(1)-SS0(1)*RDD(1))
|
|
* +HALF*DIV*(ST0(2)-SS0(2)*RDD(2))
|
|
AANU(1)=VLL/BBB
|
|
DDD(1)=CCC/BBB
|
|
DIV=ANX*ANX
|
|
DO ID=2,ND1
|
|
DTM1=DT(ID-1)
|
|
DTP1=DT(ID)
|
|
DT0=HALF*(DTP1+DTM1)
|
|
AL=UN/DTM1/DT0
|
|
GA=UN/DTP1/DT0
|
|
A=(UN-HALF*DTP1*DTP1*AL)*SIXTH
|
|
C=(UN-HALF*DTM1*DTM1*GA)*SIXTH
|
|
AAA=DIV*AL-A
|
|
CCC=DIV*GA-C
|
|
BBB=DIV*(AL+GA)+UN-A-C
|
|
VLL=A*(ST0(ID-1)-SS0(ID-1)*RDD(ID-1))+
|
|
* C*(ST0(ID+1)-SS0(ID+1)*RDD(ID+1))+
|
|
* (UN-A-C)*(ST0(ID)-SS0(ID)*RDD(ID))
|
|
BBB=BBB-AAA*DDD(ID-1)
|
|
DDD(ID)=CCC/BBB
|
|
AANU(ID)=(VLL+AAA*AANU(ID-1))/BBB
|
|
END DO
|
|
C
|
|
C Lower boundary condition
|
|
C
|
|
AAA=ANX/DTP1
|
|
BBB=AAA+UN
|
|
VLL=PLAND+ANX*DPLAN
|
|
C
|
|
RINT(ND,IMU)=(VLL+AAA*AANU(ND1))/(BBB-AAA*DDD(ND1))
|
|
DO IID=1,ND1
|
|
ID=ND-IID
|
|
RINT(ID,IMU)=AANU(ID)+DDD(ID)*RINT(ID+1,IMU)
|
|
END DO
|
|
END DO
|
|
c
|
|
FLX=0.
|
|
DO IMU=1,NMU0
|
|
RINT(1,IMU)=RINT(1,IMU)/HALF
|
|
FLX=FLX+ANGL(IMU)*WANGL(IMU)*RINT(1,IMU)
|
|
END DO
|
|
FLX=FLX*HALF
|
|
C
|
|
C output of emergent specific intensities in continuum to Unit 18
|
|
C
|
|
if(iflux.ge.1) then
|
|
WRITE(18,641) WLAM(IJ),FLX,(RINT(1,IMU),IMU=1,NMU0)
|
|
end if
|
|
100 CONTINUE
|
|
641 FORMAT(1H ,f10.3,1pe15.5/(1P5E15.5))
|
|
c
|
|
c call rtedfe for the internal points
|
|
c
|
|
CALL RTEDFE
|
|
c
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE RTEDFE
|
|
C =================
|
|
C
|
|
C Solution of the radiative transfer equation - frequency by
|
|
C frequency - for the known source function.
|
|
C
|
|
C The numerical method used:
|
|
c Discontinuous Finite Element (DFE) method
|
|
c Castor, Dykema, Klein, 1992, ApJ 387, 561.
|
|
C
|
|
C Input through blank COMMON block:
|
|
C CH - two-dimensional array absorption coefficient (frequency,
|
|
C depth)
|
|
C ET - emission coefficient (frequency, depth)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
PARAMETER (ONE=1.,TWO=2.,HALF=0.5)
|
|
PARAMETER (TAUREF = 0.6666666666667)
|
|
DIMENSION DT(MDEPTH),ST0(MDEPTH),AB0(MDEPTH),DELDM(MDEPTH),
|
|
* dtau(mdepth),rip(mdepth),rim(mdepth),riup(mdepth),
|
|
* AMU(3),WTMU(3),RINT1(MMU),
|
|
* AMUI(MMU),AMUW(MMU),TAU(MDEPTH),SS0(MDEPTH)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
COMMON/CONSCA/SCC1(mdepth),SCC2(MDEPTH)
|
|
COMMON/REFDEP/IREFD(MFREQ)
|
|
C
|
|
C angle points (AMU) and angular integration weights (WTMU)
|
|
C
|
|
DATA AMU/.887298334620742D0,.5D0,.112701665379258D0/,
|
|
* WTMU/.277777777777778D0,.444444444444444D0,.277777777777778D0/
|
|
C
|
|
DO I=1,ND-1
|
|
DELDM(I)=HALF*(DM(I+1)-DM(I))
|
|
END DO
|
|
C
|
|
c angle points
|
|
C
|
|
IF(IFLUX.EQ.0) THEN
|
|
NMUS=NMU
|
|
do i=1,nmu
|
|
amui(i)=amu(i)
|
|
amuw(i)=amu(i)*wtmu(i)
|
|
end do
|
|
ELSE IF(IFLUX.EQ.1) THEN
|
|
NMUS=NMU0
|
|
do i=1,nmus
|
|
amui(i)=angl(i)
|
|
amuw(i)=angl(i)*wangl(i)
|
|
end do
|
|
END IF
|
|
C
|
|
C overall loop over frequencies
|
|
C
|
|
DO IJ=1,NFREQ
|
|
FR=FREQ(IJ)
|
|
C
|
|
C total source function
|
|
C
|
|
DO ID=1,ND
|
|
AB0(ID)=CH(IJ,ID)
|
|
SCT=FRX1(IJ)*SCC2(ID)+FRX2(IJ)*SCC1(ID)
|
|
ST0(ID)=(ET(IJ,ID)+SCT)/AB0(ID)
|
|
SS0(ID)=-SCT/AB0(ID)
|
|
END DO
|
|
AH=0.
|
|
C
|
|
C optical depth scale
|
|
C
|
|
TAU(1)=0.
|
|
IREF=1
|
|
DO ID=1,ND-1
|
|
DT(ID)=DELDM(ID)*(AB0(ID+1)/DENS(ID+1)+AB0(ID)/DENS(ID))
|
|
TAU(ID+1)=TAU(ID)+DT(ID)
|
|
IF(TAU(ID).LE.TAUREF.AND.TAU(ID+1).GT.TAUREF) IREF=ID
|
|
END DO
|
|
IREFD(IJ)=IREF
|
|
C
|
|
C quantities for the lower boundary condition
|
|
C
|
|
FR15=FR*1.D-15
|
|
BNU=BN*FR15*FR15*FR15
|
|
PLAND=BNU/(EXP(HK*FR/TEMP(ND))-ONE)
|
|
DPLAN=BNU/(EXP(HK*FR/TEMP(ND-1))-ONE)
|
|
DPLAN=(PLAND-DPLAN)/DT(ND-1)
|
|
c
|
|
c loop over angle poits
|
|
c
|
|
DO I=1,NMUS
|
|
do id=1,nd-1
|
|
dtau(id)=dt(id)/amui(i)
|
|
enddo
|
|
C
|
|
c outgoing intensity
|
|
c
|
|
rip(nd)=PLAND+AMUI(I)*DPLAN
|
|
id=nd-1
|
|
dt0=dtau(id)
|
|
dtaup1=dt0+one
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=dtau2+bb
|
|
rim(id+1)=(aa*rip(id+1)-cc*st0(id+1)+dt0*st0(id))/bb
|
|
do id=nd-1,1,-1
|
|
dt0=dtau(id)
|
|
dtaup1=dt0+one
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=one/(dtau2+bb)
|
|
rim(id)=(two*rim(id+1)+dt0*st0(id+1)+cc*st0(id))*aa
|
|
rip(id+1)=(bb*rim(id+1)+cc*st0(id+1)-dt0*st0(id))*aa
|
|
enddo
|
|
do id=2,nd-1
|
|
riup(id)=(rim(id)*dtau(id-1)+rip(id)*dtau(id))/
|
|
* (dtau(id-1)+dtau(id))
|
|
enddo
|
|
riup(1)=rim(1)
|
|
riup(nd)=rip(nd)
|
|
c
|
|
AH=AH+AMUW(I)*RIUP(1)
|
|
RINT1(I)=RIUP(1)
|
|
rint1(i)=max(rint1(i),1.e-40)
|
|
c
|
|
c end of the loop over angle points
|
|
c
|
|
END DO
|
|
c
|
|
FLUX(IJ)=AH*HALF
|
|
if(iflux.ge.1) then
|
|
C
|
|
C output of emergent specific intensities to Unit 10 (line points)
|
|
C or 18 (two continuum points)
|
|
C
|
|
IF(IJ.GT.2) THEN
|
|
WRITE(10,618) WLAM(IJ),FLUX(IJ),(RINT1(IMU),IMU=1,NMUS)
|
|
ELSE
|
|
WRITE(18,618) WLAM(IJ),FLUX(IJ),(RINT1(IMU),IMU=1,NMUS)
|
|
END IF
|
|
end if
|
|
618 FORMAT(1H ,f10.3,1pe15.5/(1P5E15.5))
|
|
C
|
|
C if needed (if iprin.ge.3), output of interesting physical
|
|
C quantities at the monochromatic optical depth tau(nu)=2/3
|
|
C
|
|
IF(IPRIN.GE.3) THEN
|
|
T0=LOG(TAU(IREF+1)/TAU(IREF))
|
|
X0=LOG(TAU(IREF+1)/TAUREF)/T0
|
|
X1=LOG(TAUREF/TAU(IREF))/T0
|
|
DMREF=EXP(LOG(DM(IREF))*X0+LOG(DM(IREF+1))*X1)
|
|
TREF=EXP(LOG(TEMP(IREF))*X0+LOG(TEMP(IREF+1))*X1)
|
|
STREF=EXP(LOG(ST0(IREF))*X0+LOG(ST0(IREF+1))*X1)
|
|
SSREF=EXP(LOG(-SS0(IREF))*X0+LOG(-SS0(IREF+1))*X1)
|
|
SREF=STREF+SSREF
|
|
ALM=2.997925E18/FREQ(IJ)
|
|
WRITE(96,636) IJ,ALM,IREF,DMREF,TREF,STREF,SSREF,SREF
|
|
636 FORMAT(1H ,I3,F10.3,I4,1PE10.3,0PF10.1,1X,1P3E10.3)
|
|
END IF
|
|
C
|
|
C end of the loop over frequencies
|
|
C
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE PARTF(IAT,IZI,T,ANE,XMAXN,U)
|
|
C =======================================
|
|
C
|
|
C Partition functions
|
|
C The standard evaluation is for hydrogen through zinc, for
|
|
C neutrals and first four ionization degrees.
|
|
C Basically after Traving, Baschek, and Holweger, Abhand. Hamburg.
|
|
C Sternwarte. Band VIII, Nr. 1 (1966)
|
|
C
|
|
C For higher atomic numbers modified Kurucz routine PFSAHA,
|
|
C called PFHEAV here is used. The routine was provided by
|
|
C Charles Proffitt.
|
|
C
|
|
C The routine calls special procedures for Fe and Ni; or
|
|
C the values based on the tabulated Opacity Project ionization
|
|
C fractions
|
|
C
|
|
C Input:
|
|
C IAT - atomic number
|
|
C IZI - ionic charge (=1 for neutrals, =2 for once ionized, etc)
|
|
C T - temperature
|
|
C ANE - electron density
|
|
C XMAXN - principal quantum number of the last bound level
|
|
C
|
|
C Output:
|
|
C U - partition function
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (NIONS=123, NSS=222)
|
|
PARAMETER (UN=1.D0, HALF=0.5D0, TWO=2.D0, TRHA=1.5D0,
|
|
* THIRD=UN/3.D0, SIXTH=UN/6.D0)
|
|
REAL*4 AHH( 6), ALB(12), AB (11), AC (19), AN (30), AO (49),
|
|
* AF (34), ANN(23), ANA(19), AMG(15), AAL(17), ASI(23),
|
|
* AP (19), AS (29), ACL(28), AAR(25), AK (30), ACA(17),
|
|
* ASC(24), ATI(33), AV (33), ACR(29), AMN(28), AFE(35),
|
|
* ACO(29), ANI(23), ACU(20), AZN(18)
|
|
REAL*4 GHH( 6), GLB(12), GB (11), GC (19), GN (30), GO (49),
|
|
* GF (34), GNN(23), GNA(19), GMG(15), GAL(17), GSI(23),
|
|
* GP (19), GS (29), GCL(28), GAR(25), GK (30), GCA(17),
|
|
* GSC(24), GTI(33), GV (33), GCR(29), GMN(28), GFE(35),
|
|
* GCO(29), GNI(23), GCU(20), GZN(18)
|
|
REAL*4 XL1(99), XL2(123), XL(222),
|
|
* CH1(66), CH2(72), CH3(55), CH4(29), CHION(222)
|
|
REAL*4 ALF(678), GAM(678)
|
|
INTEGER II1(5,15),II2(5,15),INDEX0(5,30),
|
|
* IS1(53),IS2(70),IS(123),INDEXS(123),
|
|
* IM1(99),IM2(123),IM(222),INDEXM(222),
|
|
* IGP1(99),IGP2(123),IGPR(222),
|
|
* IG01(53),IG02(70),IG0(123)
|
|
DIMENSION IGLE(28)
|
|
C
|
|
EQUIVALENCE ( AHH(1), ALF( 1)),( ALB(1), ALF( 7)),
|
|
* ( AB (1), ALF( 19)),
|
|
* ( AC (1), ALF( 30)),( AN (1), ALF( 49)),
|
|
* ( AO (1), ALF( 79)),( AF (1), ALF(128)),
|
|
* ( ANN(1), ALF(162)),( ANA(1), ALF(185)),
|
|
* ( AMG(1), ALF(204)),( AAL(1), ALF(219)),
|
|
* ( ASI(1), ALF(236)),( AP (1), ALF(259)),
|
|
* ( AS (1), ALF(278)),( ACL(1), ALF(307)),
|
|
* ( AAR(1), ALF(335)),( AK (1), ALF(360)),
|
|
* ( ACA(1), ALF(390)),( ASC(1), ALF(407)),
|
|
* ( ATI(1), ALF(431)),( AV (1), ALF(464)),
|
|
* ( ACR(1), ALF(497)),( AMN(1), ALF(526)),
|
|
* ( AFE(1), ALF(554)),( ACO(1), ALF(589)),
|
|
* ( ANI(1), ALF(618)),( ACU(1), ALF(641)),
|
|
* ( AZN(1), ALF(661))
|
|
EQUIVALENCE ( GHH(1), GAM( 1)),( GLB(1), GAM( 7)),
|
|
* ( GB (1), GAM( 19)),
|
|
* ( GC (1), GAM( 30)),( GN (1), GAM( 49)),
|
|
* ( GO (1), GAM( 79)),( GF (1), GAM(128)),
|
|
* ( GNN(1), GAM(162)),( GNA(1), GAM(185)),
|
|
* ( GMG(1), GAM(204)),( GAL(1), GAM(219)),
|
|
* ( GSI(1), GAM(236)),( GP (1), GAM(259)),
|
|
* ( GS (1), GAM(278)),( GCL(1), GAM(307)),
|
|
* ( GAR(1), GAM(335)),( GK (1), GAM(360)),
|
|
* ( GCA(1), GAM(390)),( GSC(1), GAM(407)),
|
|
* ( GTI(1), GAM(431)),( GV (1), GAM(464)),
|
|
* ( GCR(1), GAM(497)),( GMN(1), GAM(526)),
|
|
* ( GFE(1), GAM(554)),( GCO(1), GAM(589)),
|
|
* ( GNI(1), GAM(618)),( GCU(1), GAM(641)),
|
|
* ( GZN(1), GAM(661))
|
|
EQUIVALENCE ( CH1(1), CHION( 1)),
|
|
* ( CH2(1), CHION( 67)),
|
|
* ( CH3(1), CHION(139)),
|
|
* ( CH4(1), CHION(194)),
|
|
* ( XL1(1), XL( 1)),
|
|
* ( XL2(1), XL(100))
|
|
EQUIVALENCE ( IS1(1), IS(1)), ( IS2(1), IS( 54)),
|
|
* ( IM1(1), IM(1)), ( IM2(1), IM(100)),
|
|
* (IGP1(1),IGPR(1)), (IGP2(1),IGPR(100)),
|
|
* (IG01(1), IG0(1)), (IG02(1), IG0( 54)),
|
|
* (II1(1,1),INDEX0(1,1)),(II2(1,1),INDEX0(1,16))
|
|
C
|
|
DATA IGLE/2,1,2,1,6,9,4,9,6,1,2,1,6,9,4,9,6,1,
|
|
* 10,21,28,25,6,25,28,21,10,21/
|
|
C
|
|
DATA II1 / 1, -1, 0, 0, 0,
|
|
* 2, 3, -1, 0, 0,
|
|
* 4, 5, -2, -1, 0,
|
|
* 6, 7, -1, -2, -1,
|
|
* 8, 9, 10, -1, -2,
|
|
* 11, 12, 13, 14, -1,
|
|
* 15, 16, 17, 18, 19,
|
|
* 20, 21, 22, 23, 24,
|
|
* 25, 26, 27, 28, -6,
|
|
* 29, 30, 31, 32, -9,
|
|
* 33, 34, 35, 36, -4,
|
|
* 37, 38, 39, 40, -9,
|
|
* 41, 42, 43, 44, -6,
|
|
* 45, 46, 47, 48, -1,
|
|
* 49, 50, 51, 52, 53 /
|
|
DATA II2 / 54, 55, 56, 57, 58,
|
|
* 59, 60, 61, 62, 63,
|
|
* 64, 65, 66, 67, 68,
|
|
* 69, 70, 71, 72, 73,
|
|
* 74, 75, 76, 77, -9,
|
|
* 78, 76, 80, 81, 82,
|
|
* 83, 84, 85, 86, 87,
|
|
* 88, 89, 90, 91, 92,
|
|
* 93, 94, 95, 96, 97,
|
|
* 98, 99, 100, 101, 102,
|
|
* 103, 104, 105, 106, 107,
|
|
* 108, 109, 110, 111, -25,
|
|
* 112, 113, 114, 115, -1,
|
|
* 116, 117, 118, 119, -1,
|
|
* 120, 121, 122, 123, -1 /
|
|
C
|
|
DATA IG01 / 2,
|
|
* 1, 2,
|
|
* 2, 1,
|
|
* 1, 2,
|
|
* 2, 1, 2,
|
|
* 1, 2, 1, 2,
|
|
* 4, 1, 2, 1, 2,
|
|
* 5, 4, 1, 2, 1,
|
|
* 4, 5, 4, 1,
|
|
* 1, 4, 5, 4,
|
|
* 2, 1, 4, 5,
|
|
* 1, 2, 1, 4,
|
|
* 2, 1, 2, 1,
|
|
* 1, 2, 1, 2,
|
|
* 4, 1, 2, 1, 2 /
|
|
DATA IG02 / 5, 4, 1, 2, 1,
|
|
* 4, 5, 4, 1, 2,
|
|
* 1, 4, 5, 4, 1,
|
|
* 2, 1, 4, 5, 4,
|
|
* 1, 2, 1, 4,
|
|
* 4, 3, 4, 1, 4,
|
|
* 5, 4, 5, 4, 1,
|
|
* 4, 1, 4, 5, 4,
|
|
* 7, 6, 1, 4, 5,
|
|
* 6, 7, 6, 1, 4,
|
|
* 9, 10, 9, 6, 1,
|
|
* 10, 9, 10, 20,
|
|
* 9, 6, 9, 28,
|
|
* 2, 1, 6, 21,
|
|
* 1, 2, 1, 10 /
|
|
C
|
|
DATA IS1 / 1,
|
|
* 1, 1,
|
|
* 1, 1,
|
|
* 2, 1,
|
|
* 1, 2, 1,
|
|
* 1, 2, 2, 1,
|
|
* 2, 2, 3, 2, 1,
|
|
* 3, 4, 3, 5, 2,
|
|
* 2, 3, 4, 3,
|
|
* 2, 2, 3, 2,
|
|
* 1, 2, 2, 3,
|
|
* 1, 1, 2, 2,
|
|
* 2, 2, 1, 2,
|
|
* 1, 2, 2, 1,
|
|
* 2, 1, 1, 1, 1 /
|
|
DATA IS2 / 3, 2, 1, 2, 2,
|
|
* 2, 3, 2, 1, 1,
|
|
* 2, 2, 3, 1, 1,
|
|
* 1, 2, 3, 3, 2,
|
|
* 2, 1, 2, 2,
|
|
* 3, 1, 1, 1, 1,
|
|
* 3, 2, 1, 1, 1,
|
|
* 2, 3, 1, 1, 1,
|
|
* 3, 2, 1, 1, 1,
|
|
* 3, 2, 1, 1, 1,
|
|
* 3, 2, 2, 1, 1,
|
|
* 4, 2, 1, 1,
|
|
* 2, 2, 1, 1,
|
|
* 3, 2, 1, 1,
|
|
* 3, 3, 1, 1 /
|
|
C
|
|
DATA IM1 / 2,
|
|
* 2, 2,
|
|
* 2, 2,
|
|
* 3, 2, 3,
|
|
* 3, 3, 2, 3,
|
|
* 4, 3, 3, 3, 3, 3,
|
|
* 3, 3, 4, 3, 3, 4, 2, 3, 2, 3,
|
|
* 4, 2, 2, 4, 2, 3, 3, 4, 4, 2,
|
|
* 3, 4, 2, 2, 2, 3, 3,
|
|
* 3, 3, 4, 2, 2,
|
|
* 4, 2, 3, 2, 5, 2, 2,
|
|
* 2, 2, 3, 2, 4, 2, 2, 4, 2,
|
|
* 2, 2, 2, 3, 2, 4, 2, 2,
|
|
* 3, 3, 2, 2, 3, 2,
|
|
* 3, 2, 3, 2, 3, 2, 2,
|
|
* 5, 4, 4, 4, 3, 3,
|
|
* 3, 2, 4, 4, 3, 3 /
|
|
DATA IM2 / 4, 2, 2, 4, 2, 5, 4, 2, 3, 1,
|
|
* 3, 2, 5, 2, 2, 4, 2, 4, 4,
|
|
* 2, 2, 3, 2, 4, 2, 2, 4, 4,
|
|
* 3, 2, 3, 3, 2, 3,
|
|
* 4, 2, 2, 4, 2,
|
|
* 3, 2, 3, 2, 2, 3, 2,
|
|
* 4, 3, 3, 5, 4, 2, 3,
|
|
* 6, 4, 3, 6, 3, 5, 4, 2,
|
|
* 5, 3, 5, 4, 4, 4, 4, 4,
|
|
* 3, 3, 3, 4, 4, 4, 4, 4,
|
|
* 3, 2, 3, 4, 4, 4, 4, 4,
|
|
* 4, 4, 3, 5, 3, 4, 4, 4, 4,
|
|
* 5, 3, 3, 3, 5, 4, 5, 1,
|
|
* 6, 3, 5, 3, 5, 1,
|
|
* 2, 3, 3, 4, 3, 4, 1,
|
|
* 2, 2, 2, 3, 3, 2, 3, 1 /
|
|
C
|
|
DATA IGP1 / 2,
|
|
* 4, 2,
|
|
* 2, 4,
|
|
* 4, 12, 2,
|
|
* 2, 4, 12, 2,
|
|
* 12, 2, 18, 4, 12, 2,
|
|
* 18, 10, 12, 24, 2, 18, 6, 4, 12, 2,
|
|
* 8, 20, 12, 18, 10, 2, 10, 12, 24, 20,
|
|
* 2, 18, 6, 18, 10, 4, 12,
|
|
* 18, 10, 8, 20, 12,
|
|
* 18, 10, 2, 10, 12, 24, 20,
|
|
* 8, 4, 18, 10, 8, 20, 12, 18, 10,
|
|
* 2, 8, 4, 18, 10, 8, 20, 12,
|
|
* 4, 2, 8, 4, 18, 10,
|
|
* 2, 18, 4, 12, 2, 8, 4,
|
|
* 12, 2, 18, 4, 12, 2,
|
|
* 18, 10, 12, 2, 4, 2 /
|
|
DATA IGP2 / 8, 20, 12, 18, 10, 12, 2, 18, 4, 12,
|
|
* 18, 10, 8, 20, 12, 18, 10, 12, 2,
|
|
* 8, 4, 18, 10, 8, 20, 12, 18, 12,
|
|
* 2, 8, 4, 18, 10, 2,
|
|
* 8, 20, 12, 18, 10,
|
|
* 4, 20, 2, 8, 4, 18, 10,
|
|
* 30, 42, 18, 20, 2, 12, 18,
|
|
* 56, 56, 28, 42, 10, 20, 2, 12,
|
|
* 50, 70, 56, 72, 64, 42, 20, 2,
|
|
* 12, 60, 40, 50, 18, 56, 42, 20,
|
|
* 14, 10, 50, 12, 72, 50, 56, 42,
|
|
* 60, 56, 40, 50, 18, 12, 72, 50, 56,
|
|
* 42, 70, 42, 18, 56, 24, 50, 12,
|
|
* 20, 56, 42, 18, 56, 50,
|
|
* 2, 30, 10, 20, 56, 42, 56,
|
|
* 4, 8, 12, 2, 30, 10, 20, 42 /
|
|
C
|
|
DATA XL1 /11.0,
|
|
* 8.0,12.0,
|
|
* 6.0, 6.0,
|
|
* 6.0, 4.0, 8.0,
|
|
* 9.0, 6.0, 4.0, 6.0,
|
|
* 6.0, 6.0, 5.0, 6.1, 5.0, 6.0,
|
|
* 6.1, 4.0, 5.0, 3.9, 6.0, 5.0, 4.0, 6.0, 6.3, 6.0,
|
|
* 8.0, 6.0, 3.4, 6.0, 5.0, 3.9, 3.9, 6.0, 4.9, 4.0,
|
|
* 5.9, 5.0, 4.9, 4.0, 4.0, 6.0, 6.0,
|
|
* 4.0, 4.0, 5.0, 4.0, 4.0,
|
|
* 5.0, 4.0, 3.9, 4.0, 5.0, 5.0, 4.0,
|
|
* 6.0, 6.0, 5.0, 4.0, 3.9, 4.0, 4.0, 5.0, 5.0,
|
|
* 7.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0,
|
|
* 7.0, 7.0, 5.0, 5.0, 5.0, 5.0,
|
|
* 7.0, 4.0, 7.0, 4.0, 7.0, 5.0, 5.0,
|
|
* 6.1, 5.9, 5.0, 5.0, 5.0, 7.0,
|
|
* 5.0, 5.0, 5.0, 7.0, 8.6, 8.0 /
|
|
DATA XL2 / 6.0, 5.0, 5.0, 5.0, 5.0, 3.5, 5.0,14.4, 5.0, 4.0,
|
|
* 6.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.2,
|
|
* 6.0, 6.0, 5.1, 5.0, 5.0, 5.0, 5.0, 5.0, 4.0,
|
|
* 7.0, 5.0, 5.0, 6.0, 6.0, 5.0,
|
|
* 6.0, 5.0, 5.0, 3.6, 4.0,
|
|
* 5.9, 6.0, 7.0, 5.0, 4.9, 5.0, 4.3,
|
|
* 4.9, 4.9, 5.0, 5.0, 6.0, 4.6, 3.8,
|
|
* 5.0, 4.7, 5.0, 5.0, 5.0, 5.0, 6.0, 4.8,
|
|
* 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0,11.2,
|
|
* 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.2,
|
|
* 6.0, 5.0, 6.0, 7.0, 5.0, 5.0, 5.0, 5.0,
|
|
* 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 5.0, 3.6, 3.8,
|
|
* 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 3.0,
|
|
* 5.4, 5.0, 9.0, 5.0, 5.0, 3.0,
|
|
* 8.0, 6.0, 5.0, 7.0, 5.0, 5.0, 2.9,
|
|
* 8.0, 5.0, 5.0, 8.0, 5.0, 5.0, 5.0, 2.8 /
|
|
C
|
|
C
|
|
DATA CH1 / 13.595 ,
|
|
* 24.580 , 54.403 ,
|
|
* 5.390 , 75.619 ,
|
|
* 9.320 , 13.278 , 18.206 ,
|
|
* 8.296 , 25.149 , 31.146 , 37.920 ,
|
|
* 11.256 , 24.376 , 30.868 , 47.871 , 55.873 ,
|
|
* 64.476 ,
|
|
* 14.529 , 16.428 , 29.593 , 36.693 ,
|
|
* 47.426 , 55.765 , 63.626 , 77.450 , 87.445 ,
|
|
* 97.863 ,
|
|
* 13.614 , 16.938 , 18.630 ,
|
|
* 35.108 , 37.621 , 40.461 , 42.584 ,
|
|
* 54.886 , 63.733 , 70.556 ,
|
|
* 77.394 , 87.609 , 97.077 , 103.911 , 106.116 ,
|
|
* 113.873 , 125.863 ,
|
|
* 17.418 , 20.009 , 34.977 , 39.204 , 41.368 ,
|
|
* 62.646 , 65.774 , 69.282 , 71.882 ,
|
|
* 87.139 , 97.852 , 106.089 ,
|
|
* 21.559 , 21.656 , 41.071 , 44.274 ,
|
|
* 63.729 , 68.806 , 71.434 , 97.162 , 100.917 /
|
|
DATA CH2 / 5.138 , 47.290 , 47.459 , 71.647 , 75.504 ,
|
|
* 98.880 , 104.778 , 107.864 ,
|
|
* 7.644 , 15.031 , 80.117 , 80.393 ,
|
|
* 109.294 , 113.799 ,
|
|
* 5.984 , 10.634 , 18.823 , 25.496 ,
|
|
* 28.441 , 119.957 , 120.383 ,
|
|
* 8.149 , 16.339 , 22.894 ,
|
|
* 33.459 , 42.333 , 45.130 ,
|
|
* 10.474 , 11.585 , 19.720 ,
|
|
* 30.156 , 51.354 , 65.007 ,
|
|
* 10.357 , 12.200 , 13.401 , 23.405 , 24.807 ,
|
|
* 35.047 , 47.292 , 57.681 , 72.474 , 85.701 ,
|
|
* 13.014 , 14.458 , 23.798 , 26.041 , 27.501 ,
|
|
* 39.904 , 41.610 , 53.450 , 67.801 ,
|
|
* 15.755 , 15.933 , 27.619 , 29.355 ,
|
|
* 40.899 , 42.407 , 45.234 , 59.793 , 75.002 ,
|
|
* 4.339 , 31.810 , 32.079 ,
|
|
* 45.738 , 47.768 , 50.515 ,
|
|
* 60.897 , 63.890 , 65.849 , 82.799 , 85.150 /
|
|
DATA CH3 / 6.111 , 7.808 , 11.868 ,
|
|
* 51.207 , 51.596 , 67.181 , 69.536 ,
|
|
* 6.538 , 7.147 , 8.042 ,
|
|
* 12.891 , 24.752 , 74.090 , 91.847 ,
|
|
* 6.818 , 6.953 , 7.411 ,
|
|
* 13.635 , 14.685 , 28.137 , 43.236 , 100.083 ,
|
|
* 6.738 , 7.101 , 14.205 , 15.670 , 16.277 ,
|
|
* 29.748 , 48.464 , 65.198 ,
|
|
* 6.763 , 8.285 , 9.221 ,
|
|
* 16.493 , 18.662 , 30.950 , 49.580 , 73.093 ,
|
|
* 7.432 , 8.606 , 9.240 , 15.636 , 18.963 ,
|
|
* 33.690 , 53.001 , 76.006 ,
|
|
* 7.896 , 8.195 , 8.927 , 16.178 , 18.662 ,
|
|
* 30.640 , 34.607 , 56.001 , 79.001 /
|
|
DATA CH4 / 7.863 , 8.378 , 9.160 , 9.519 ,
|
|
* 17.052 , 18.958 , 33.491 , 53.001 ,
|
|
* 7.633 , 8.793 , 18.147 , 20.233 , 35.161 ,
|
|
* 56.025 ,
|
|
* 7.724 , 10.532 , 10.980 ,
|
|
* 20.286 , 27.985 , 36.826 , 61.975 ,
|
|
* 9.391 , 17.503 , 17.166 ,
|
|
* 17.959 , 27.757 , 28.310 , 39.701 , 65.074 /
|
|
C
|
|
DATA AHH / 20.4976, 747.5023,
|
|
* 28.1703, 527.8296, 22.2809, 987.7189 /
|
|
DATA GHH / 10.853 , 13.342 ,
|
|
* 21.170 , 24.125 , 43.708 , 53.542 /
|
|
C
|
|
DATA ALB / 8.4915, 97.5015, 23.3299, 192.6701,
|
|
* 9.1849, 32.9263, 183.8887, 19.9563, 88.0437,
|
|
* 6.0478, 35.9723, 233.9798 /
|
|
DATA GLB / 2.022 , 4.604 , 62.032 , 72.624 ,
|
|
* 2.735 , 6.774 , 8.569 , 10.750 , 11.672 ,
|
|
* 3.967 , 12.758 , 16.692 /
|
|
C
|
|
DATA AB / 4.0086, 19.6741, 402.3110,
|
|
* 9.7257, 30.9262, 186.3466, 44.1629, 60.8371,
|
|
* 6.0084, 23.5767, 76.4149 /
|
|
DATA GB / 0.002 , 3.971 , 7.882 ,
|
|
* 4.720 , 13.477 , 22.103 , 23.056 , 24.734 ,
|
|
* 6.000 , 24.540 , 32.300 /
|
|
C
|
|
DATA AC / 8.0158, 5.8833, 33.7521, 595.3432,
|
|
* 4.0003, 17.0841, 82.9154,
|
|
* 15.9808, 48.2044, 435.8093,
|
|
* 10.0281, 15.7574, 186.2109,
|
|
* 15.4127, 55.9559, 243.6311,
|
|
* 6.0057, 23.5757, 76.4185 /
|
|
DATA GC / 0.004 , 1.359 , 6.454 , 10.376 ,
|
|
* 0.008 , 16.546 , 21.614 ,
|
|
* 5.688 , 15.801 , 26.269 ,
|
|
* 6.691 , 25.034 , 40.975 ,
|
|
* 17.604 , 36.180 , 47.133 ,
|
|
* 8.005 , 40.804 , 54.492 /
|
|
C
|
|
DATA AN / 14.0499, 30.8008, 883.1443,
|
|
* 10.0000, 16.0000, 64.0000,
|
|
* 8.0462, 6.2669, 17.8696, 282.8084,
|
|
* 7.3751, 33.1390, 215.4829,
|
|
* 4.0003, 19.3533, 80.6462,
|
|
* 13.0998, 19.6425, 94.3035, 370.9539,
|
|
* 16.0000, 38.0000,
|
|
* 10.3289, 14.5021, 187.1624, 108.1615, 191.8383,
|
|
* 6.0044, 23.5612, 76.4344 /
|
|
DATA GN / 2.554 , 9.169 , 13.651 ,
|
|
* 12.353 , 13.784 , 14.874 ,
|
|
* 0.014 , 2.131 , 15.745 , 24.949 ,
|
|
* 6.376 , 14.246 , 29.465 ,
|
|
* 0.022 , 31.259 , 41.428 ,
|
|
* 7.212 , 15.228 , 34.387 , 46.708 ,
|
|
* 46.475 , 49.468 ,
|
|
* 8.693 , 37.650 , 65.479 , 61.155 , 79.196 ,
|
|
* 9.999 , 60.991 , 82.262 /
|
|
C
|
|
DATA AO / 4.0029, 5.3656, 36.2853,1044.3447,
|
|
* 131.0217, 868.9779, 14.8533, 93.1466,
|
|
* 12.7843, 5.6828, 98.0919, 829.4396,
|
|
* 50.9878, 199.0120, 2.0000, 6.0000, 10.0000,
|
|
* 10.0000, 30.0000, 50.0000,
|
|
* 8.0703, 5.7144, 84.1156, 529.0927,
|
|
* 5.6609, 28.9355, 111.3620, 494.0413,
|
|
* 45.5249, 134.4751,
|
|
* 4.0003, 21.2937, 78.7058,
|
|
* 12.8293, 16.2730, 123.6578, 327.2396,
|
|
* 48.7883, 102.2117, 20.0060, 161.9903,
|
|
* 28.4184, 61.5816,
|
|
* 10.5563, 13.2950, 188.1390,
|
|
* 14.6560, 129.4922, 470.8512 /
|
|
DATA GO / 0.022 , 2.019 , 9.812 , 13.087 ,
|
|
* 13.804 , 16.061 , 14.293 , 16.114 ,
|
|
* 3.472 , 7.437 , 22.579 , 32.035 ,
|
|
* 27.774 , 33.678 , 28.118 , 31.019 , 34.204 ,
|
|
* 30.892 , 33.189 , 36.181 ,
|
|
* 0.032 , 2.760 , 35.328 , 48.277 ,
|
|
* 7.662 , 16.786 , 42.657 , 54.522 ,
|
|
* 50.204 , 56.044 ,
|
|
* 0.048 , 50.089 , 66.604 ,
|
|
* 8.954 , 18.031 , 57.755 , 72.594 ,
|
|
* 68.388 , 82.397 , 31.960 , 76.876 ,
|
|
* 75.686 , 80.388 ,
|
|
* 10.747 , 52.323 , 94.976 ,
|
|
* 27.405 , 86.350 , 109.917 /
|
|
C
|
|
DATA AF / 2.0001, 39.9012, 122.0986,
|
|
* 10.0000, 30.0000, 50.0000,
|
|
* 4.0199, 5.5741, 22.1839, 190.2179,
|
|
* 53.0383, 126.9616, 31.6894, 75.3105,
|
|
* 13.5014, 7.9936, 55.7981, 298.7039,
|
|
* 26.2496, 63.7503, 2.0000, 6.0000, 10.0000,
|
|
* 28.7150, 71.2850,
|
|
* 8.0153, 6.1931, 21.7287, 48.7780, 278.2782,
|
|
* 178.5560, 421.4435, 51.7632, 95.2368 /
|
|
DATA GF / 0.050 , 13.317 , 15.692 ,
|
|
* 15.361 , 17.128 , 18.498 ,
|
|
* 0.048 , 2.735 , 20.079 , 30.277 ,
|
|
* 27.548 , 32.532 , 30.391 , 34.707 ,
|
|
* 4.479 , 12.072 , 31.662 , 51.432 ,
|
|
* 44.283 , 50.964 , 46.193 , 50.436 , 54.880 ,
|
|
* 50.816 , 57.479 ,
|
|
* 0.058 , 3.434 , 14.892 , 37.472 , 69.883 ,
|
|
* 67.810 , 83.105 , 72.435 , 79.747 /
|
|
C
|
|
DATA ANN / 34.5080, 365.4919, 16.5768, 183.4231,
|
|
* 2.0007, 89.5607, 380.4381, 26.4473, 63.5527,
|
|
* 4.0342, 5.6162, 11.5176, 72.8273,
|
|
* 48.5684, 131.4315, 31.1710, 76.8290,
|
|
* 14.0482, 13.3077, 52.7897, 467.8487,
|
|
* 54.2196, 195.7800 /
|
|
DATA GNN / 17.796 , 20.730 , 17.879 , 20.855 ,
|
|
* 0.097 , 29.878 , 37.221 , 31.913 , 37.551 ,
|
|
* 0.092 , 3.424 , 24.806 , 46.616 ,
|
|
* 45.643 , 54.147 , 48.359 , 57.420 ,
|
|
* 5.453 , 18.560 , 46.583 , 80.101 ,
|
|
* 70.337 , 85.789 /
|
|
C
|
|
DATA ANA / 11.6348, 158.3593,
|
|
* 21.0453, 50.9546, 10.1389, 25.8611,
|
|
* 2.0019, 38.0569, 137.9398, 28.3106, 61.6893,
|
|
* 4.0334, 5.8560, 18.1786, 208.9142,
|
|
* 93.6895, 406.3095, 60.4276, 239.5719 /
|
|
DATA GNA / 2.400 , 4.552 ,
|
|
* 34.367 , 40.566 , 34.676 , 40.764 ,
|
|
* 0.170 , 44.554 , 57.142 , 51.689 , 60.576 ,
|
|
* 0.152 , 4.260 , 36.635 , 83.254 ,
|
|
* 72.561 , 89.475 , 75.839 , 92.582 /
|
|
C
|
|
DATA AMG / 10.7445, 291.5057, 53.7488,
|
|
* 6.2270, 31.1291, 132.6438,
|
|
* 40.4379, 159.5618, 20.3845, 79.6154,
|
|
* 2.0007, 106.8977, 343.1010, 10.1326, 237.8581/
|
|
DATA GMG / 2.805 , 6.777 , 9.254 ,
|
|
* 4.459 , 9.789 , 13.137 ,
|
|
* 57.413 , 71.252 , 58.010 , 71.660 ,
|
|
* 0.276 , 74.440 , 94.447 , 54.472 , 95.858 /
|
|
C
|
|
DATA AAL / 4.0009, 11.7804, 142.2179, 13.6585, 96.3371,
|
|
* 10.0807, 49.5843, 285.3343, 14.6872, 59.3122,
|
|
* 6.3277, 29.5086, 134.1634,
|
|
* 46.3164, 153.6833, 22.9896, 77.0103 /
|
|
DATA GAL / 0.014 , 3.841 , 5.420 , 3.727 , 8.833 ,
|
|
* 4.749 , 11.902 , 16.719 , 11.310 , 18.268 ,
|
|
* 6.751 , 16.681 , 24.151 ,
|
|
* 83.551 , 104.787 , 84.293 , 105.171 /
|
|
C
|
|
DATA ASI / 7.9658, 4.6762, 1.3512, 123.2267, 443.7797,
|
|
* 4.0000, 7.4186, 24.1754, 60.4060,
|
|
* 14.4695, 11.9721, 26.5062, 269.0521,
|
|
* 9.1793, 4.8766, 29.1442, 52.7998,
|
|
* 13.2674, 36.0417, 180.6910,
|
|
* 6.4839, 27.6851, 135.8301 /
|
|
DATA GSI / 0.020 , 0.752 , 1.614 , 5.831 , 7.431 ,
|
|
* 0.036 , 8.795 , 11.208 , 13.835 ,
|
|
* 5.418 , 7.825 , 14.440 , 19.412 ,
|
|
* 6.572 , 11.449 , 18.424 , 25.457 ,
|
|
* 15.682 , 27.010 , 34.599 ,
|
|
* 9.042 , 24.101 , 37.445 /
|
|
C
|
|
DATA AP / 13.5211, 22.2130, 353.2583, 10.0000, 150.0000,
|
|
* 8.0241, 5.8085, 51.7542, 252.4002,
|
|
* 4.0021, 20.7985, 62.4194, 200.7786,
|
|
* 11.7414, 63.5124, 179.7420,
|
|
* 6.8835, 32.7777, 228.3366 /
|
|
DATA GP / 1.514 , 5.575 , 9.247 , 8.076 , 10.735 ,
|
|
* 0.043 , 1.212 , 8.545 , 15.525 ,
|
|
* 0.074 , 7.674 , 16.639 , 25.118 ,
|
|
* 8.992 , 24.473 , 40.704 ,
|
|
* 11.464 , 33.732 , 55.455 /
|
|
C
|
|
DATA AS / 3.9615, 5.0780, 15.0944, 362.8588,
|
|
* 51.5995, 268.4002, 12.0000, 276.0000,
|
|
* 11.4377, 5.5126, 141.0009, 254.0478,
|
|
* 33.0518, 126.9479,
|
|
* 4.0707, 4.0637, 5.7245, 144.6376, 106.4909,
|
|
* 4.0011, 19.2813, 27.5990, 35.1179,
|
|
* 94.7454, 283.2486,
|
|
* 10.5474, 28.7137, 65.7378, 24.0000 /
|
|
DATA GS / 0.053 , 1.121 , 5.812 , 9.425 ,
|
|
* 8.936 , 11.277 , 9.600 , 12.551 ,
|
|
* 1.892 , 3.646 , 13.550 , 19.376 ,
|
|
* 16.253 , 21.062 ,
|
|
* 0.043 , 0.123 , 1.590 , 13.712 , 22.050 ,
|
|
* 0.118 , 9.545 , 18.179 , 31.441 ,
|
|
* 30.664 , 56.150 ,
|
|
* 10.704 , 27.075 , 50.599 , 43.034 /
|
|
C
|
|
DATA ACL / 2.0007, 62.5048, 669.4942, 29.0259, 130.9740,
|
|
* 3.9064, 0.3993, 5.3570, 60.3424, 119.9913,
|
|
* 138.1567, 278.8418, 102.3681, 158.6314,
|
|
* 12.6089, 5.9527, 110.5635, 262.8715,
|
|
* 69.2035, 100.7960,
|
|
* 7.3458, 5.6638, 44.1256, 202.7846,
|
|
* 4.0037, 21.8663, 40.5363, 57.5919 /
|
|
DATA GCL / 0.110 , 9.919 , 12.280 , 11.017 , 13.532 ,
|
|
* 0.092 , 0.581 , 1.620 , 13.121 , 19.787 ,
|
|
* 16.365 , 21.988 , 18.065 , 23.594 ,
|
|
* 2.358 , 5.708 , 19.084 , 30.683 ,
|
|
* 24.880 , 33.229 ,
|
|
* 0.102 , 1.391 , 14.709 , 36.968 ,
|
|
* 0.185 , 11.783 , 25.653 , 44.698 /
|
|
C
|
|
DATA AAR / 43.6623, 324.3375, 20.8298, 163.1701,
|
|
* 2.0026, 137.4515, 258.5445, 62.8129, 149.1867,
|
|
* 4.0495, 14.4466, 46.8234, 124.6651,
|
|
* 151.9828, 268.0157, 101.1302, 150.8691,
|
|
* 13.3718, 8.6528, 60.4614, 285.5072,
|
|
* 6.7655, 4.7684, 12.8631, 54.5260 /
|
|
DATA GAR / 12.638 , 14.958 , 12.833 , 15.139 ,
|
|
* 0.178 , 17.522 , 23.584 , 20.464 , 25.150 ,
|
|
* 0.151 , 1.561 , 17.399 , 30.871 ,
|
|
* 24.684 , 33.978 , 27.091 , 36.481 ,
|
|
* 2.810 , 8.877 , 24.351 , 44.489 ,
|
|
* 0.144 , 1.160 , 10.210 , 27.178 /
|
|
C
|
|
DATA AK / 12.9782, 148.6673, 6.3493,
|
|
* 66.3444, 101.6553, 4.0001, 13.4465, 46.5534,
|
|
* 2.0171, 116.4767, 713.4965, 63.5907, 396.4079,
|
|
* 2.0000, 10.0000, 30.0000,
|
|
* 4.0702, 5.7791, 52.6795, 327.4539,
|
|
* 62.8604, 357.1331, 55.9337, 196.0646,
|
|
* 10.9275, 5.5398, 43.2761, 76.2560,
|
|
* 42.0000, 18.0000 /
|
|
DATA GK / 1.871 , 3.713 , 18.172 ,
|
|
* 21.185 , 27.705 , 2.059 , 23.709 , 28.542 ,
|
|
* 0.273 , 26.709 , 39.640 , 31.220 , 41.865 ,
|
|
* 29.955 , 37.557 , 42.862 ,
|
|
* 0.228 , 2.274 , 21.703 , 50.191 ,
|
|
* 32.145 , 49.262 , 34.155 , 51.718 ,
|
|
* 3.043 , 5.479 , 20.547 , 30.680 ,
|
|
* 36.275 , 47.345 /
|
|
C
|
|
DATA ACA / 18.2366, 27.5012, 149.2617, 94.5242, 705.4711,
|
|
* 11.8706, 14.0710, 106.0547,
|
|
* 57.2414, 110.7567, 29.8121, 54.1874,
|
|
* 2.0184, 97.5784, 282.3939, 209.1871, 252.8129/
|
|
DATA GCA / 2.050 , 3.349 , 5.321 , 4.873 , 7.017 ,
|
|
* 1.769 , 5.109 , 9.524 ,
|
|
* 27.271 , 41.561 , 29.172 , 42.140 ,
|
|
* 0.394 , 28.930 , 52.618 , 38.593 , 49.646 /
|
|
C
|
|
DATA ASC / 6.0014, 83.1958, 67.3666, 329.4354,
|
|
* 44.0793, 169.9969, 533.9195,
|
|
* 34.1642, 124.8475, 228.9879,
|
|
* 11.9979, 16.9280, 28.4778, 82.0418, 234.5360,
|
|
* 6.0042, 2.7101, 13.9801, 65.3039,
|
|
* 12.0000, 12.0000,
|
|
* 2.0051, 2.9621, 29.0306 /
|
|
DATA GSC / 0.021 , 2.056 , 3.551 , 5.465 ,
|
|
* 1.535 , 3.797 , 6.203 ,
|
|
* 2.389 , 4.858 , 7.141 ,
|
|
* 0.011 , 0.430 , 1.156 , 3.711 , 8.863 ,
|
|
* 0.025 , 3.499 , 10.463 , 18.606 ,
|
|
* 41.779 , 57.217 ,
|
|
* 0.539 , 24.442 , 51.079 /
|
|
C
|
|
DATA ATI / 7.0887, 8.9186, 17.5633, 206.6832, 438.5735,
|
|
* 654.1721,
|
|
* 38.0462, 69.6271, 364.2845, 832.0408,
|
|
* 98.8562, 57.9934, 442.1498,
|
|
* 19.7843, 32.0637, 37.0895, 110.6682, 288.4946,
|
|
* 521.8837,
|
|
* 10.0000, 34.0000, 120.0000,
|
|
* 16.1691, 22.3550, 24.1646, 83.5128, 222.7963,
|
|
* 6.0020, 4.6177, 25.2636, 52.1162,
|
|
* 12.0000, 8.0000 /
|
|
DATA GTI / 0.021 , 0.048 , 1.029 , 2.183 , 4.109 ,
|
|
* 5.785 ,
|
|
* 0.846 , 1.792 , 3.836 , 5.787 ,
|
|
* 2.561 , 4.869 , 6.340 ,
|
|
* 0.023 , 0.124 , 0.774 , 1.810 , 4.980 ,
|
|
* 9.585 ,
|
|
* 1.082 , 4.928 , 11.279 ,
|
|
* 0.041 , 1.375 , 4.768 , 10.985 , 19.769 ,
|
|
* 0.048 , 11.577 , 24.531 , 36.489 ,
|
|
* 54.436 , 75.373 /
|
|
C
|
|
DATA AV / 15.2627, 23.9869, 51.3053, 570.3384,1650.9417,
|
|
* 162.2829, 298.8303, 908.8852,
|
|
* 23.6736, 37.1624, 86.8011, 300.7440, 864.5880,
|
|
* 57.8961, 79.4605, 214.9007, 864.7425,
|
|
* 61.8508, 64.0845, 192.8298, 718.2349,
|
|
* 23.8116, 68.2495, 135.0613, 536.7632,
|
|
* 15.9543, 22.5542, 71.4921, 248.9544,
|
|
* 6.0006, 5.8785, 50.5077, 97.6129 /
|
|
DATA GV / 0.026 , 0.145 , 0.718 , 2.586 , 5.458 ,
|
|
* 2.171 , 4.153 , 6.097 ,
|
|
* 0.009 , 0.366 , 1.504 , 5.294 , 10.126 ,
|
|
* 1.796 , 2.353 , 6.068 , 12.269 ,
|
|
* 2.560 , 3.674 , 6.593 , 12.880 ,
|
|
* 0.045 , 1.684 , 8.162 , 21.262 ,
|
|
* 0.065 , 1.746 , 15.158 , 33.141 ,
|
|
* 0.077 , 21.229 , 44.134 , 60.203 /
|
|
C
|
|
DATA ACR / 30.1842, 79.2847, 149.5293,
|
|
* 215.3696, 119.1974, 741.4321,
|
|
* 184.9946,1352.5038, 784.4937,
|
|
* 46.6191, 160.1361, 488.0449, 657.1928,
|
|
* 47.1742, 267.0275, 441.1324, 150.6650,
|
|
* 24.3768, 122.8359, 285.5092, 794.1654,
|
|
* 24.2296, 75.0258, 172.9452, 543.6511,
|
|
* 15.9819, 17.6800, 95.2003, 225.0947 /
|
|
DATA GCR / 0.993 , 3.070 , 5.673 ,
|
|
* 3.339 , 4.801 , 7.198 ,
|
|
* 2.829 , 4.990 , 7.643 ,
|
|
* 1.645 , 3.727 , 7.181 , 12.299 ,
|
|
* 2.902 , 4.273 , 8.569 , 14.912 ,
|
|
* 0.047 , 2.566 , 9.441 , 21.198 ,
|
|
* 0.078 , 2.242 , 15.638 , 32.725 ,
|
|
* 0.103 , 2.146 , 26.153 , 49.381 /
|
|
C
|
|
DATA AMN / 53.9107, 81.3931, 546.6945 ,
|
|
* 144.1893, 407.8029, 45.6177, 298.4423,2410.9335,
|
|
* 22.6382, 93.8419, 183.9367, 907.5765,
|
|
* 137.0409, 168.6783, 329.0287, 773.2513,
|
|
* 70.1925, 72.3372, 213.9512, 539.5165,
|
|
* 24.2373, 93.5415, 456.6167, 506.5484,
|
|
* 24.7687, 66.9896, 264.1853, 484.0161 /
|
|
DATA GMN / 2.527 , 4.204 , 6.602 ,
|
|
* 4.155 , 7.321 , 2.285 , 5.631 , 8.448 ,
|
|
* 1.496 , 3.839 , 7.751 , 13.484 ,
|
|
* 3.681 , 6.054 , 9.934 , 14.936 ,
|
|
* 3.531 , 6.967 , 15.222 , 25.069 ,
|
|
* 0.071 , 2.896 , 20.725 , 37.383 ,
|
|
* 0.126 , 2.660 , 28.528 , 53.413 /
|
|
C
|
|
DATA AFE / 14.4102, 2.7050, 421.6612, 940.1484,
|
|
* 36.2187, 22.8883, 239.5997, 825.2919,
|
|
* 110.0242, 992.3040, 640.6715,
|
|
* 17.0494, 32.3783, 34.3184, 420.9626,1067.2064,
|
|
* 154.0059, 462.1117, 329.8618,
|
|
* 15.7906, 47.1186, 279.9292, 692.1005,
|
|
* 91.0206, 206.3082, 706.9927, 836.6689,
|
|
* 40.0790, 27.6965, 28.2243, 18.0001,
|
|
* 24.0899, 89.6340, 51.5756, 241.6980 /
|
|
DATA GFE / 0.066 , 0.339 , 2.897 , 6.585 ,
|
|
* 0.923 , 1.679 , 4.620 , 7.053 ,
|
|
* 4.249 , 5.875 , 7.781 ,
|
|
* 0.062 , 0.283 , 1.504 , 5.430 , 11.210 ,
|
|
* 2.792 , 7.627 , 13.623 ,
|
|
* 0.077 , 3.723 , 12.137 , 23.700 ,
|
|
* 2.688 , 7.595 , 15.444 , 25.587 ,
|
|
* 3.982 , 4.677 , 6.453 , 23.561 ,
|
|
* 0.102 , 3.354 , 22.954 , 33.796 /
|
|
C
|
|
DATA ACO / 11.9120, 20.4424, 28.3863, 132.5038, 600.7461,
|
|
* 33.3092, 237.4331, 977.2502,
|
|
* 55.5396, 318.8169, 619.6366,
|
|
* 32.6900, 83.8694, 107.4378,
|
|
* 11.2593, 38.2239, 22.9964, 261.3486, 637.1485,
|
|
* 23.0233, 41.6599, 264.6460, 181.6699,
|
|
* 16.0356, 7.8633, 70.3158, 423.3512, 742.3553,
|
|
* 0. /
|
|
DATA GCO / 0.112 , 0.341 , 0.809 , 3.808 , 6.723 ,
|
|
* 2.057 , 3.484 , 7.210 ,
|
|
* 2.405 , 5.133 , 8.097 ,
|
|
* 2.084 , 5.291 , 8.426 ,
|
|
* 0.135 , 0.517 , 1.606 , 6.772 , 12.622 ,
|
|
* 2.512 , 4.348 , 8.253 , 15.377 ,
|
|
* 0.132 , 0.863 , 3.086 , 11.789 , 23.263 ,
|
|
* 0. /
|
|
C
|
|
DATA ANI / 7.1268, 12.4486, 11.9953, 10.0546, 114.1658,
|
|
* 391.2064,
|
|
* 26.3908, 213.8081, 938.7927,
|
|
* 4.1421, 37.3781, 25.9712, 333.3397, 311.1633,
|
|
* 33.1031, 184.1854, 136.7072,
|
|
* 11.1915, 5.4174, 53.6793, 460.6781, 380.0056,
|
|
* 0. /
|
|
DATA GNI / 0.026 , 0.137 , 0.315 , 1.778 , 4.029 ,
|
|
* 6.621 ,
|
|
* 2.249 , 4.042 , 7.621 ,
|
|
* 0.191 , 1.235 , 3.358 , 8.429 , 17.096 ,
|
|
* 3.472 , 9.065 , 16.556 ,
|
|
* 0.194 , 1.305 , 5.813 , 14.172 , 26.169 ,
|
|
* 0. /
|
|
C
|
|
DATA ACU / 11.0549, 238.9423, 10.3077, 126.2990,1073.3876,
|
|
* 30.0000, 50.0000, 60.0000,
|
|
* 19.2984, 50.5974, 240.2021,1216.9016,
|
|
* 48.3048, 583.2011, 320.4931,
|
|
* 4.0155, 70.3264, 313.1213, 536.5331,
|
|
* 0. /
|
|
DATA GCU / 4.212 , 7.227 , 1.493 , 5.859 , 9.709 ,
|
|
* 7.081 , 9.362 , 10.130 ,
|
|
* 2.865 , 8.260 , 14.431 , 18.292 ,
|
|
* 9.650 , 14.640 , 24.320 ,
|
|
* 0.337 , 8.520 , 16.925 , 28.342 ,
|
|
* 0. /
|
|
C
|
|
DATA AZN / 15.9880, 484.0042, 18.5863, 123.4134,
|
|
* 3.0000, 189.0000,
|
|
* 6.1902, 38.9317, 204.8780,
|
|
* 10.2588, 89.3771, 370.3640, 30.0000, 128.0000,
|
|
* 24.6904, 106.7491, 439.5586,
|
|
* 0. /
|
|
DATA GZN / 4.546 , 8.840 , 10.247 , 16.620 ,
|
|
* 11.175 , 16.321 ,
|
|
* 6.113 , 12.964 , 16.444 ,
|
|
* 7.926 , 13.633 , 24.353 , 16.286 , 24.910 ,
|
|
* 10.291 , 20.689 , 32.077 ,
|
|
* 0. /
|
|
C
|
|
DATA ICOMP /0/
|
|
C
|
|
c save indexs, indexm, index0, is, im, ig0, igpr,
|
|
c * xl, chion, alf, gam
|
|
C
|
|
IF(ICOMP.NE.0) GO TO 5
|
|
IND=1
|
|
DO 1 K=1,NIONS
|
|
INDEXS(K)=IND
|
|
IND=IND+IS(K)
|
|
1 CONTINUE
|
|
IND=1
|
|
DO 2 K=1,NSS
|
|
INDEXM(K)=IND
|
|
IND=IND+IM(K)
|
|
2 CONTINUE
|
|
ICOMP=1
|
|
5 CONTINUE
|
|
c
|
|
IF((IAT.EQ.26.or.iat.eq.28)
|
|
* .AND.IZI.GE.4.AND.IZI.LE.9) GO TO 70
|
|
IF(IAT.GT.30.AND.IZI.LE.3) GO TO 80
|
|
IF(IAT.GT.8 .AND. IZI.GT.5) then
|
|
u=igle(iat-izi+1)
|
|
return
|
|
end if
|
|
c
|
|
c Irwin partition functions by default
|
|
c
|
|
if(iirwin.gt.0.and.t.lt.16000.) then
|
|
if(izi.le.2) then
|
|
call irwpf(iat,izi,0,t,u0)
|
|
u=u0
|
|
return
|
|
end if
|
|
else if(iat.gt.30.and.izi.le.3) then
|
|
go to 80
|
|
end if
|
|
c
|
|
IF(IZI.LE.0.OR.IZI.GT.9.OR.IAT.LE.0.OR.IAT.GT.30) GO TO 50
|
|
MODE=MODPF(IAT)
|
|
IF(MODE.LT.0) GO TO 50
|
|
IF(MODE.GT.0) GO TO 60
|
|
I0=INDEX0(IZI,IAT)
|
|
IF(I0) 40,50,10
|
|
10 QZ=IZI
|
|
C MAX=XMAXN*SQRT(QZ)
|
|
XMAX=XMAXN
|
|
THET=5040.4/T
|
|
A=31.321*QZ*QZ*THET
|
|
XMAX2=XMAX*XMAX
|
|
QAS1=XMAX*THIRD*(XMAX2+TRHA*XMAX+HALF)
|
|
IS0=INDEXS(I0)
|
|
ISS=IS0+IS(I0)-1
|
|
SU1=0.
|
|
SQA=0.
|
|
DO 30 K=IS0,ISS
|
|
XXL=XL(K)
|
|
GPR=IGPR(K)
|
|
X=CHION(K)*THET
|
|
EX=0.
|
|
IF(X.LT.30) EX=EXP(-X*2.30258029299405)
|
|
QAS=(QAS1-XXL*THIRD*(XXL*XXL+TRHA*XXL+HALF)+(XMAX-XXL)*
|
|
* (UN+A*HALF/XXL/XMAX)*A)*GPR*EX
|
|
SQA=SQA+QAS
|
|
M0=INDEXM(K)
|
|
M1=M0+IM(K)-1
|
|
AL1=0.
|
|
DO 20 M=M0,M1
|
|
XG=GAM(M)*THET
|
|
IF(XG.GT.20.) GO TO 20
|
|
XM=EXP(-XG*2.30258029299405)*ALF(M)
|
|
AL1=AL1+XM
|
|
20 CONTINUE
|
|
SU1=SU1+AL1
|
|
30 CONTINUE
|
|
U=IG0(I0)
|
|
U=U+SU1+SQA
|
|
IF(U.LT.0.) U=IG0(I0)
|
|
RETURN
|
|
40 U=FLOAT(-I0)
|
|
RETURN
|
|
50 CALL PFSPEC(IAT,IZI,T,ANE,U)
|
|
RETURN
|
|
60 u=igle(iat-izi+1)
|
|
C U=PFSTD(IZI,IAT)
|
|
RETURN
|
|
70 if(iat.eq.26) call pffe(IZI,T,ANE,U)
|
|
if(iat.eq.28) call pfni(izi,t,u,dut,dun)
|
|
RETURN
|
|
80 CALL PFHEAV(IAT,IZI,3,T,ANE,U)
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
subroutine pffe(ion,t,ane,pf)
|
|
c =============================
|
|
c
|
|
c partition functions for Fe IV to Fe IX
|
|
c after Fischel and Sparks, 1971, NASA SP-3066
|
|
c
|
|
c Output: PF partition function
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension tt(50),pn(10),nca(9)
|
|
dimension p4a(22),p4b(10,28),
|
|
* p5a(30),p5b(10,20),
|
|
* p6a(37),p6b(10,13),
|
|
* p7a(40),p7b(10,10),
|
|
* p8a(41),p8b(10,9),
|
|
* p9a(45),p9b(10,5)
|
|
c
|
|
parameter (xen=2.302585093,xmil=0.001,xmilen=xmil*xen)
|
|
parameter (xbtz=1.38054d-16)
|
|
c
|
|
data nca /3*0,22,30,37,40,41,45/
|
|
* nne /10/
|
|
c
|
|
data tt /
|
|
* 3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,
|
|
* 20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,
|
|
* 32.,34.,36.,38.,40.,42.,44.,46.,48.,
|
|
* 50.,55.,60.,65.,70.,75.,80.,85.,90.,95.,100.,125.,150./
|
|
c
|
|
data pn /-2.,-1.,0.,1.,2.,3.,4.,5.,6.,7./
|
|
c
|
|
data p4a /
|
|
* 0.778, 0.778, 0.778, 0.779, 0.783, 0.789, 0.801, 0.818,
|
|
* 0.842, 0.871, 0.906, 0.945, 0.987, 1.030, 1.074, 1.117,
|
|
* 1.160, 1.201, 1.242, 1.280, 1.317, 1.353/
|
|
c
|
|
data p4b /
|
|
* 1.406,1.393,1.389,7*1.387,
|
|
* 1.464,1.434,1.424,1.421,1.420,5*1.419,
|
|
* 1.546,1.483,1.461,1.454,1.451,1.451,4*1.450,
|
|
* 1.665,1.547,1.503,1.488,1.482,1.481,4*1.480,
|
|
* 1.826,1.636,1.553,1.524,1.514,1.510,4*1.509,
|
|
* 2.024,1.755,1.618,1.564,1.546,1.540,1.538,3*1.537,
|
|
* 2.480,2.087,1.814,1.674,1.619,1.599,1.593,1.591,1.590,1.590,
|
|
* 2.945,2.489,2.105,1.846,1.717,1.667,1.649,1.643,1.641,1.640,
|
|
* 3.379,2.897,2.452,2.089,1.859,1.751,1.710,1.696,1.691,1.689,
|
|
* 3.774,3.283,2.808,2.381,2.054,1.864,1.782,1.751,1.741,1.738,
|
|
* 4.133,3.637,3.150,2.688,2.292,2.015,1.871,1.814,1.793,1.786,
|
|
* 4.460,3.962,3.468,2.989,2.549,2.199,1.984,1.886,1.848,1.835,
|
|
* 4.757,4.258,3.762,3.274,2.809,2.406,2.121,1.972,1.908,1.886,
|
|
* 5.029,4.530,4.032,3.539,3.061,2.624,2.279,2.073,1.976,1.939,
|
|
* 5.279,4.780,4.281,3.785,3.299,2.840,2.450,2.189,2.051,1.996,
|
|
* 5.510,5.010,4.511,4.013,3.522,3.050,2.628,2.318,2.136,2.057,
|
|
* 6.014,5.514,5.014,4.515,4.018,3.530,3.065,2.666,2.381,2.228,
|
|
* 6.435,5.935,5.435,4.936,4.437,3.943,3.460,3.022,2.658,2.422,
|
|
* 6.794,6.294,5.794,5.294,4.794,4.297,3.807,3.343,2.939,2.631,
|
|
* 7.102,6.602,6.102,5.602,5.102,4.604,4.110,3.638,3.194,2.845,
|
|
* 7.370,6.870,6.370,5.870,5.370,4.871,4.375,3.892,3.439,3.052,
|
|
* 7.606,7.106,6.606,6.106,5.605,5.106,4.608,4.125,3.661,3.249,
|
|
* 7.815,7.315,6.814,6.314,5.814,5.314,4.816,4.333,3.851,3.418,
|
|
* 8.001,7.501,7.001,6.500,6.000,5.500,5.001,4.511,4.032,3.586,
|
|
* 8.168,7.668,7.168,6.668,6.168,5.667,5.168,4.680,4.197,3.741,
|
|
* 8.319,7.819,7.319,6.819,6.319,5.818,5.319,4.832,4.347,3.884,
|
|
* 8.900,8.399,7.899,7.399,6.899,6.398,5.898,5.405,4.917,4.431,
|
|
* 9.294,8.794,8.294,7.793,7.293,6.793,6.292,5.799,5.306,4.824/
|
|
c
|
|
data p5a /
|
|
* 1.235, 1.276, 1.301, 1.321, 1.339, 1.359, 1.381, 1.405,
|
|
* 1.432, 1.460, 1.489, 1.518, 1.546, 1.574, 1.601, 1.627,
|
|
* 1.652, 1.675, 1.697, 1.718, 1.738, 1.757, 1.775, 1.792,
|
|
* 1.808, 1.823, 1.838, 1.851, 1.877, 1.900/
|
|
c
|
|
data p5b /
|
|
* 1.943,1.928,1.923,7*1.921,
|
|
* 2.011,1.964,1.947,1.942,1.941,5*1.940,
|
|
* 2.144,2.025,1.980,1.965,1.960,1.958,4*1.957,
|
|
* 2.361,2.137,2.032,1.993,1.980,1.976,1.975,3*1.974,
|
|
* 2.646,2.315,2.121,2.035,2.004,1.994,1.991,1.990,1.989,1.989,
|
|
* 2.960,2.553,2.260,2.102,2.037,2.015,2.007,2.005,2.004,2.004,
|
|
* 3.274,2.823,2.450,2.205,2.086,2.040,2.025,2.020,2.018,2.018,
|
|
* 3.575,3.101,2.674,2.348,2.158,2.075,2.045,2.036,2.032,2.031,
|
|
* 4.251,3.757,3.275,2.829,2.466,2.234,2.124,2.083,2.069,2.064,
|
|
* 4.822,4.324,3.829,3.346,2.895,2.522,2.278,2.161,2.116,2.100,
|
|
* 5.308,4.808,4.310,3.816,3.334,2.888,2.525,2.297,2.187,2.145,
|
|
* 5.725,5.225,4.726,4.228,3.736,3.260,2.828,2.496,2.294,2.206,
|
|
* 6.088,5.589,5.089,4.590,4.093,3.604,3.139,2.733,2.447,2.291,
|
|
* 6.407,5.907,5.407,4.908,4.409,3.915,3.433,2.988,2.629,2.399,
|
|
* 6.689,6.189,5.689,5.189,4.690,4.193,3.704,3.236,2.832,2.535,
|
|
* 6.940,6.440,5.940,5.440,4.941,4.443,3.949,3.469,3.038,2.687,
|
|
* 7.166,6.666,6.166,5.666,5.166,4.667,4.171,3.684,3.237,2.847,
|
|
* 7.370,6.870,6.369,5.869,5.369,4.870,4.373,3.882,3.417,3.008,
|
|
* 8.150,7.649,7.149,6.649,6.149,5.649,5.149,4.651,4.167,3.700,
|
|
* 8.677,8.177,7.676,7.176,6.676,6.176,5.676,5.176,4.687,4.203/
|
|
c
|
|
data p6a /
|
|
* 1.218, 1.273, 1.309, 1.335, 1.358, 1.379, 1.400, 1.421,
|
|
* 1.442, 1.463, 1.484, 1.504, 1.523, 1.542, 1.560, 1.577,
|
|
* 1.594, 1.609, 1.624, 1.638, 1.652, 1.664, 1.677, 1.688,
|
|
* 1.699, 1.709, 1.719, 1.729, 1.746, 1.762, 1.777, 1.790,
|
|
* 1.803, 1.814, 1.825, 1.834, 1.843/
|
|
c
|
|
data p6b /
|
|
* 1.862,1.855,1.853,7*1.852,
|
|
* 1.958,1.900,1.880,1.874,1.872,5*1.871,
|
|
* 2.264,2.045,1.944,1.906,1.894,1.890,4*1.888,
|
|
* 2.776,2.386,2.119,1.984,1.930,1.912,1.906,1.904,2*1.903,
|
|
* 3.321,2.856,2.453,2.165,2.012,1.949,1.927,1.920,1.918,1.917,
|
|
* 3.821,3.333,2.868,2.465,2.178,2.025,1.963,1.941,1.934,1.932,
|
|
* 4.266,3.771,3.285,2.825,2.434,2.164,2.027,1.972,1.953,1.947,
|
|
* 4.662,4.164,3.670,3.187,2.739,2.372,2.135,2.022,1.980,1.965,
|
|
* 5.015,4.516,4.019,3.527,3.052,2.624,2.295,2.102,2.019,1.988,
|
|
* 5.332,4.832,4.344,3.838,3.351,2.889,2.493,2.217,2.075,2.017,
|
|
* 5.618,5.118,4.619,4.121,3.628,3.149,2.711,2.364,2.155,2.058,
|
|
* 6.710,6.210,5.710,5.210,4.711,4.213,3.719,3.241,2.807,2.462,
|
|
* 7.446,6.946,6.446,5.946,5.446,4.946,4.447,3.952,3.474,3.022/
|
|
c
|
|
data p7a /
|
|
* 1.074,1.130,1.167,1.194,1.215,1.234,1.250,1.266,1.280,1.293,
|
|
* 1.306,1.318,1.329,1.340,1.350,1.360,1.369,1.378,1.386,1.394,
|
|
* 1.401,1.408,1.415,1.421,1.427,1.433,1.439,1.444,1.454,1.463,
|
|
* 1.471,1.479,1.486,1.492,1.498,1.504,1.509,1.514,1.525,1.534/
|
|
c
|
|
data p7b /
|
|
* 1.555,1.546,1.544,1.543,6*1.542,
|
|
* 1.617,1.572,1.557,1.552,1.550,1.550,4*1.549,
|
|
* 1.798,1.648,1.587,1.566,1.559,1.557,4*1.556,
|
|
* 2.134,1.832,1.666,1.597,1.573,1.565,1.563,1.562,2*1.561,
|
|
* 2.550,2.138,1.836,1.671,1.602,1.578,1.570,1.568,2*1.567,
|
|
* 2.968,2.504,2.102,1.816,1.665,1.603,1.582,1.575,2*1.572,
|
|
* 3.359,2.875,2.419,2.037,1.779,1.651,1.601,1.584,1.579,1.577,
|
|
* 3.718,3.224,2.745,2.305,1.953,1.736,1.636,1.599,1.586,1.582,
|
|
* 5.097,4.598,4.098,3.601,3.110,2.638,2.217,1.899,1.719,1.643,
|
|
* 6.026,5.526,5.026,4.527,4.028,3.531,3.042,2.576,2.170,1.885/
|
|
c
|
|
data p8a /
|
|
* 0.809,0.849,0.875,0.894,0.908,0.918,0.927,0.934,0.939,0.944,
|
|
* 0.948,0.952,0.955,0.958,0.960,0.962,0.964,0.966,0.967,0.969,
|
|
* 0.970,0.971,0.973,0.974,0.975,0.975,0.976,0.977,0.978,0.980,
|
|
* 0.981,0.982,0.983,0.984,0.984,0.985,0.986,0.986,0.987,0.988,
|
|
* 0.989/
|
|
c
|
|
data p8b /
|
|
* 0.992,0.991,8*0.990,
|
|
* 1.000,0.994,0.992,7*0.991,
|
|
* 1.032,1.005,0.996,0.993,0.992,5*0.991,
|
|
* 1.129,1.040,1.008,0.997,0.993,5*0.992,
|
|
* 1.335,1.132,1.042,1.009,0.998,0.994,0.993,0.993,2*0.992,
|
|
* 1.640,1.312,1.121,1.038,1.007,0.998,0.994,3*0.993,
|
|
* 1.987,1.573,1.269,1.101,1.030,1.005,0.997,2*0.994,0.993,
|
|
* 3.514,3.017,2.526,2.053,1.628,1.305,1.119,1.039,1.010,1.000,
|
|
* 4.569,4.069,3.569,3.072,2.580,2.103,1.671,1.336,1.136,1.048/
|
|
c
|
|
data p9a /39*0.000,0.001,0.002,0.005,0.008,0.014,0.021/
|
|
c
|
|
data p9b /
|
|
* 2*0.032,8*0.031,
|
|
* 0.048,0.045,8*0.044,
|
|
* 0.076,0.065,0.061,0.060,6*0.059,
|
|
* 1.128,0.722,0.429,0.271,0.207,0.184,0.177,0.174,2*0.173,
|
|
* 2.696,2.200,1.712,1.249,0.848,0.564,0.415,0.354,0.333,0.327/
|
|
c
|
|
na=nca(ion)
|
|
nb=50-na
|
|
pne=log10(ane*xbtz*t)
|
|
t0=xmil*t
|
|
j=1
|
|
if(pne.lt.pn(1)) go to 15
|
|
if(pne.gt.pn(nne)) then
|
|
j1=nne
|
|
j2=nne
|
|
goto 16
|
|
endif
|
|
do 10 j=1,nne-1
|
|
if(pne.ge.pn(j).and.pne.lt.pn(j+1)) go to 15
|
|
10 continue
|
|
15 j1=j
|
|
j2=j1+1
|
|
if(pne.lt.pn(1)) j2=1
|
|
16 do 20 i=1,49
|
|
if(t0.ge.tt(i).and.t0.lt.tt(i+1)) go to 25
|
|
20 continue
|
|
25 i1=i
|
|
i2=i+1
|
|
if(t0.gt.tt(50)) then
|
|
i1=50
|
|
i2=50
|
|
endif
|
|
if(i2.le.na) then
|
|
if(ion.eq.4) then
|
|
px1=p4a(i1)
|
|
px2=p4a(i1)
|
|
py1=p4a(i2)
|
|
py2=p4a(i2)
|
|
else if(ion.eq.5) then
|
|
px1=p5a(i1)
|
|
px2=p5a(i1)
|
|
py1=p5a(i2)
|
|
py2=p5a(i2)
|
|
else if(ion.eq.6) then
|
|
px1=p6a(i1)
|
|
px2=p6a(i1)
|
|
py1=p6a(i2)
|
|
py2=p6a(i2)
|
|
else if(ion.eq.7) then
|
|
px1=p7a(i1)
|
|
px2=p7a(i1)
|
|
py1=p7a(i2)
|
|
py2=p7a(i2)
|
|
else if(ion.eq.8) then
|
|
px1=p8a(i1)
|
|
px2=p8a(i1)
|
|
py1=p8a(i2)
|
|
py2=p8a(i2)
|
|
else if(ion.eq.9) then
|
|
px1=p9a(i1)
|
|
px2=p9a(i1)
|
|
py1=p9a(i2)
|
|
py2=p9a(i2)
|
|
endif
|
|
else if(i1.eq.na) then
|
|
if(ion.eq.4) then
|
|
px1=p4a(i1)
|
|
px2=p4a(i1)
|
|
py1=p4b(j1,i2-na)
|
|
py2=p4b(j2,i2-na)
|
|
else if(ion.eq.5) then
|
|
px1=p5a(i1)
|
|
px2=p5a(i1)
|
|
py1=p5b(j1,i2-na)
|
|
py2=p5b(j2,i2-na)
|
|
else if(ion.eq.6) then
|
|
px1=p6a(i1)
|
|
px2=p6a(i1)
|
|
py1=p6b(j1,i2-na)
|
|
py2=p6b(j2,i2-na)
|
|
else if(ion.eq.7) then
|
|
px1=p7a(i1)
|
|
px2=p7a(i1)
|
|
py1=p7b(j1,i2-na)
|
|
py2=p7b(j2,i2-na)
|
|
else if(ion.eq.8) then
|
|
px1=p8a(i1)
|
|
px2=p8a(i1)
|
|
py1=p8b(j1,i2-na)
|
|
py2=p8b(j2,i2-na)
|
|
else if(ion.eq.9) then
|
|
px1=p9a(i1)
|
|
px2=p9a(i1)
|
|
py1=p9b(j1,i2-na)
|
|
py2=p9b(j2,i2-na)
|
|
endif
|
|
else
|
|
if(ion.eq.4) then
|
|
px1=p4b(j1,i1-na)
|
|
px2=p4b(j2,i1-na)
|
|
py1=p4b(j1,i2-na)
|
|
py2=p4b(j2,i2-na)
|
|
else if(ion.eq.5) then
|
|
px1=p5b(j1,i1-na)
|
|
px2=p5b(j2,i1-na)
|
|
py1=p5b(j1,i2-na)
|
|
py2=p5b(j2,i2-na)
|
|
else if(ion.eq.6) then
|
|
px1=p6b(j1,i1-na)
|
|
px2=p6b(j2,i1-na)
|
|
py1=p6b(j1,i2-na)
|
|
py2=p6b(j2,i2-na)
|
|
else if(ion.eq.7) then
|
|
px1=p7b(j1,i1-na)
|
|
px2=p7b(j2,i1-na)
|
|
py1=p7b(j1,i2-na)
|
|
py2=p7b(j2,i2-na)
|
|
else if(ion.eq.8) then
|
|
px1=p8b(j1,i1-na)
|
|
px2=p8b(j2,i1-na)
|
|
py1=p8b(j1,i2-na)
|
|
py2=p8b(j2,i2-na)
|
|
else if(ion.eq.9) then
|
|
px1=p9b(j1,i1-na)
|
|
px2=p9b(j2,i1-na)
|
|
py1=p9b(j1,i2-na)
|
|
py2=p9b(j2,i2-na)
|
|
endif
|
|
end if
|
|
dlgunx=px2-px1
|
|
px=px1+(pne-pn(j1))*dlgunx
|
|
dlguny=py2-py1
|
|
py=py1+(pne-pn(j1))*dlguny
|
|
delt=tt(i2)-tt(i1)
|
|
if(delt.ne.0.) then
|
|
dlgut=(py-px)/delt
|
|
pf=px+(t0-tt(i1))*dlgut
|
|
else
|
|
pf=px
|
|
endif
|
|
pf=exp(xen*pf)
|
|
return
|
|
end
|
|
|
|
C
|
|
C ********************************************************************
|
|
C ********************************************************************
|
|
C
|
|
|
|
SUBROUTINE MATINV(A,N,NR)
|
|
C =========================
|
|
C
|
|
C Matrix inversion
|
|
C by LU decomposition
|
|
C
|
|
C A - matrix of actual size (N x N) and maximum size (NR x NR)
|
|
C to be inverted;
|
|
C Inversion is accomplished in place and the original matrix is
|
|
C replaced by its inverse
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION A(NR,NR)
|
|
IF(N.EQ.1) GO TO 250
|
|
DO 50 I=2,N
|
|
IM1=I-1
|
|
DO 20 J=1,IM1
|
|
JM1=J-1
|
|
DIV=A(J,J)
|
|
SUM=0.
|
|
IF(JM1.LT.1) GO TO 20
|
|
DO 10 K=1,JM1
|
|
10 SUM=SUM+A(I,K)*A(K,J)
|
|
20 A(I,J)=(A(I,J)-SUM)/DIV
|
|
DO 40 J=I,N
|
|
SUM=0.
|
|
DO 30 K=1,IM1
|
|
30 SUM=SUM+A(I,K)*A(K,J)
|
|
40 A(I,J)=A(I,J)-SUM
|
|
50 CONTINUE
|
|
DO 80 II=2,N
|
|
I=N+2-II
|
|
IM1=I-1
|
|
IF(IM1.LT.1) GO TO 80
|
|
DO 70 JJ=1,IM1
|
|
J=I-JJ
|
|
JP1=J+1
|
|
SUM=0.
|
|
IF(JP1.GT.IM1) GO TO 70
|
|
DO 60 K=JP1,IM1
|
|
60 SUM=SUM+A(I,K)*A(K,J)
|
|
70 A(I,J)=-A(I,J)-SUM
|
|
80 CONTINUE
|
|
DO 110 II=1,N
|
|
I=N+1-II
|
|
DIV=A(I,I)
|
|
IP1=I+1
|
|
IF(IP1.GT.N) GO TO 110
|
|
DO 100 JJ=IP1,N
|
|
J=N+IP1-JJ
|
|
SUM=0.
|
|
DO 90 K=IP1,J
|
|
90 SUM=SUM+A(I,K)*A(K,J)
|
|
A(I,J)=-SUM/DIV
|
|
100 CONTINUE
|
|
110 A(I,I)=1.0D0/A(I,I)
|
|
C
|
|
DO 240 I=1,N
|
|
DO 230 J=1,N
|
|
K0=I
|
|
IF(J.GE.I) GO TO 220
|
|
SUM=0.
|
|
200 DO 210 K=K0,N
|
|
210 SUM=SUM+A(I,K)*A(K,J)
|
|
GO TO 230
|
|
220 K0=J
|
|
SUM=A(I,K0)
|
|
IF(K0.EQ.N) GO TO 230
|
|
K0=K0+1
|
|
GO TO 200
|
|
230 A(I,J)=SUM
|
|
240 CONTINUE
|
|
RETURN
|
|
250 A(1,1)=1.0D0/A(1,1)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE LINEQS(A,B,X,N,NR)
|
|
C =============================
|
|
C
|
|
C Solution of the linear system A*X=B
|
|
C by Gaussian elimination with partial pivoting
|
|
C
|
|
C Input: A - matrix of the linear system, with actual size (N x N),
|
|
C and maximum size (NR x NR)
|
|
C B - the rhs vector
|
|
C Output: X - solution vector
|
|
C Note that matrix A and vector B are destroyed here !
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION A(NR,NR),B(NR),X(NR),D(MLEVEL)
|
|
DIMENSION IP(MLEVEL)
|
|
DO 70 I=1,N
|
|
DO 10 J=1,N
|
|
10 D(J)=A(J,I)
|
|
IM1=I-1
|
|
IF(IM1.LT.1) GO TO 40
|
|
DO 30 J=1,IM1
|
|
IT=IP(J)
|
|
A(J,I)=D(IT)
|
|
D(IT)=D(J)
|
|
JP1=J+1
|
|
DO 20 K=JP1,N
|
|
20 D(K)=D(K)-A(K,J)*A(J,I)
|
|
30 CONTINUE
|
|
40 AM=ABS(D(I))
|
|
IP(I)=I
|
|
DO 50 K=I,N
|
|
IF(AM.GE.ABS(D(K))) GO TO 50
|
|
IP(I)=K
|
|
AM=ABS(D(K))
|
|
50 CONTINUE
|
|
IT=IP(I)
|
|
A(I,I)=D(IT)
|
|
D(IT)=D(I)
|
|
IP1=I+1
|
|
IF(IP1.GT.N) GO TO 80
|
|
DO 60 K=IP1,N
|
|
60 A(K,I)=D(K)/A(I,I)
|
|
70 CONTINUE
|
|
80 DO 100 I=1,N
|
|
IT=IP(I)
|
|
X(I)=B(IT)
|
|
B(IT)=B(I)
|
|
IP1=I+1
|
|
IF(IP1.GT.N) GO TO 110
|
|
DO 90 J=IP1,N
|
|
90 B(J)=B(J)-A(J,I)*X(I)
|
|
100 CONTINUE
|
|
110 DO 140 I=1,N
|
|
K=N-I+1
|
|
SUM=0.
|
|
KP1=K+1
|
|
IF(KP1.GT.N) GO TO 130
|
|
DO 120 J=KP1,N
|
|
120 SUM=SUM+A(K,J)*X(J)
|
|
130 X(K)=(X(K)-SUM)/A(K,K)
|
|
140 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION EXPINT(X)
|
|
C ==================
|
|
C
|
|
C First exponential integral function E1(X)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
C
|
|
IF(X.LE.1.0) THEN
|
|
EXPINT=-LOG(X)-0.57721566+X*(0.99999193+X*(-0.24991055
|
|
* +X*(0.05519968+X*(-0.00976004+X*0.00107857))))
|
|
ELSE
|
|
EXPINT=EXP(-X)*((0.2677734343+X*(8.6347608925+X*
|
|
* (18.059016973+X*(8.5733287401+X))))/
|
|
* (3.9584969228+X*(21.0996530827+X*
|
|
* (25.6329561486+X*(9.5733223454+X)))))/X
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INTERP(X,Y,XX,YY,NX,NXX,NPOL,ILOGX,ILOGY)
|
|
C ====================================================
|
|
C
|
|
C General interpolation procedure of the (NPOL-1)-th order
|
|
C
|
|
C for ILOGX = 1 logarithmic interpolation in X
|
|
C for ILOGY = 1 logarithmic interpolation in Y
|
|
C
|
|
C Input:
|
|
C X - array of original x-coordinates
|
|
C Y - array of corresponding functional values Y=y(X)
|
|
C NX - number of elements in arrays X or Y
|
|
C XX - array of new x-coordinates (to which is to be
|
|
C interpolated
|
|
C NXX - number of elements in array XX
|
|
C Output:
|
|
C YY - interpolated functional values YY=y(XX)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION X(1),Y(1),XX(1),YY(1)
|
|
EXP10(X0)=EXP(X0*2.30258509299405D0)
|
|
IF(NPOL.LE.0.OR.NX.LE.0) GO TO 200
|
|
IF(ILOGX.NE.0) THEN
|
|
DO I=1,NX
|
|
X(I)=LOG10(X(I))
|
|
END DO
|
|
DO I=1,NXX
|
|
XX(I)=LOG10(XX(I))
|
|
END DO
|
|
END IF
|
|
IF(ILOGY.NE.0) THEN
|
|
DO I=1,NX
|
|
Y(I)=LOG10(Y(I))
|
|
END DO
|
|
END IF
|
|
NM=(NPOL+1)/2
|
|
NM1=NM+1
|
|
NUP=NX+NM1-NPOL
|
|
DO ID=1,NXX
|
|
XXX=XX(ID)
|
|
DO I=NM1,NUP
|
|
IF(XXX.LE.X(I)) GO TO 70
|
|
END DO
|
|
I=NUP
|
|
70 J=I-NM
|
|
JJ=J+NPOL-1
|
|
YYY=0.
|
|
DO K=J,JJ
|
|
T=1.
|
|
DO 80 M=J,JJ
|
|
IF(K.EQ.M) GO TO 80
|
|
T=T*(XXX-X(M))/(X(K)-X(M))
|
|
80 CONTINUE
|
|
YYY=Y(K)*T+YYY
|
|
END DO
|
|
YY(ID)=YYY
|
|
END DO
|
|
IF(ILOGX.NE.0) THEN
|
|
DO I=1,NX
|
|
X(I)=EXP10(X(I))
|
|
END DO
|
|
DO I=1,NXX
|
|
XX(I)=EXP10(XX(I))
|
|
END DO
|
|
END IF
|
|
IF(ILOGY.NE.0) THEN
|
|
DO I=1,NX
|
|
Y(I)=EXP10(Y(I))
|
|
END DO
|
|
DO I=1,NXX
|
|
YY(I)=EXP10(YY(I))
|
|
END DO
|
|
END IF
|
|
RETURN
|
|
200 N=NX
|
|
IF(NXX.GE.NX) N=NXX
|
|
DO I=1,N
|
|
XX(I)=X(I)
|
|
YY(I)=Y(I)
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
subroutine intrp(wltab,absop,wlgrid,abgrd,nfr,nfgrid)
|
|
c =====================================================
|
|
c
|
|
c a more efficient interpolation routine - using bisection
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension wltab(1),absop(1),wlgrid(1),abgrd(1)
|
|
dimension yint(mfgrid),jint(mfgrid)
|
|
c
|
|
c set up interpolation coefficients for an interpolation
|
|
c by bisection
|
|
c
|
|
fr1=wltab(1)
|
|
fr2=wltab(nfr)
|
|
do ij=1,nfgrid
|
|
xint=wlgrid(ij)
|
|
jl=0
|
|
ju=nfr+1
|
|
10 continue
|
|
if(ju-jl.gt.1) then
|
|
jm=(ju+jl)/2
|
|
if((fr2.gt.fr1).eqv.(xint.gt.wltab(jm))) then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
end if
|
|
go to 10
|
|
end if
|
|
j=jl
|
|
if(j.eq.nfr) j=j-1
|
|
if(j.eq.0) j=j+1
|
|
jint(ij)=j
|
|
c yint(ij)=un/log10(wltab(j+1)/wltab(j))
|
|
yint(ij)=1./(wltab(j+1)-wltab(j))
|
|
end do
|
|
c
|
|
do ij=1,nfgrid
|
|
j=jint(ij)
|
|
rc=(absop(j+1)-absop(j))*yint(ij)
|
|
c abgrd(ij)=rc*log10(wlgrid(ij)/wltab(j))+absop(j)
|
|
abgrd(ij)=rc*(wlgrid(ij)-wltab(j))+absop(j)
|
|
end do
|
|
return
|
|
end
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
SUBROUTINE PFSPEC(IAT,IZI,T,ANE,U)
|
|
C ==================================
|
|
|
|
C Non-standard evaluation of the partition function
|
|
C user supplied procedure
|
|
C
|
|
C Input:
|
|
C IAT - atomic number
|
|
C IZI - ionic charge (=1 for neutrals, =1 for once ionized, etc)
|
|
C T - temperature
|
|
C ANE - electron density
|
|
C XMAX - principal quantum number of the last bound level
|
|
C
|
|
C Output:
|
|
C U - partition function
|
|
C
|
|
*
|
|
* Modified from the ATMOS related programme 5-April-1990
|
|
* as an addition to TLUSTY to allow high ionisation states
|
|
* of C, N and O
|
|
*
|
|
* M.A.Barstow - University of Leicester, Dept of Physics & Astronomy
|
|
*
|
|
INCLUDE 'PARAMS.FOR'
|
|
real nvii
|
|
PARAMETER (MH=100,MHEI=100,MHEII=100,MCI=135,
|
|
+ MCII=157,MCIII=156,MCIV=55,MCV=15,MCVI=100,MNI=228,MNII=122,
|
|
+ MNIII=133,MNIV=73,MNV=51,MNVI=8,MNVII=100,MOI=174,MOII=191,
|
|
+ MOIII=168,MOIV=166,MOV=115,MOVI=52,MOVII=16,MOVIII=100)
|
|
DIMENSION GHYD(MH),SHYD(MH),ENHYD(MH),
|
|
+ GHEL(MH),ENHEL(MH),SHEL(MH),
|
|
+ GCI(MCI),ENCI(MCI),SCI(MCI),
|
|
+ GCII(MCII),ENCII(MCII),SCII(MCII),
|
|
+ GCIII(MCIII),ENCIII(MCIII),SCIII(MCIII),
|
|
+ GCIV(MCIV),ENCIV(MCIV),SCIV(MCIV),
|
|
+ GCV(MCV),ENCV(MCV),SCV(MCV),
|
|
+ GNI(MNI),ENNI(MNI),SNI(MNI),
|
|
+ GNII(MNII),ENNII(MNII),SNII(MNII),
|
|
+ GNIII(MNIII),ENNIII(MNIII),SNIII(MNIII),
|
|
+ GNIV(MNIV),ENNIV(MNIV),SNIV(MNIV),
|
|
+ GNV(MNV),ENNV(MNV),SNV(MNV),
|
|
+ GNVI(MNVI),ENNVI(MNVI),SNVI(MNVI),
|
|
+ GOI(MOI),ENOI(MOI),SOI(MOI),
|
|
+ GOII(MOII),ENOII(MOII),SOII(MOII),
|
|
+ GOIII(MOIII),ENOIII(MOIII),SOIII(MOIII),
|
|
+ GOIV(MOIV),ENOIV(MOIV),SOIV(MOIV),
|
|
+ GOV(MOV),ENOV(MOV),SOV(MOV),
|
|
+ GOVI(MOVI),ENOVI(MOVI),SOVI(MOVI),
|
|
+ GOVII(MOVII),ENOVII(MOVII),SOVII(MOVII)
|
|
INTEGER NHYD(MH),NHEL(MHEI),NCI(MCI),NCII(MCII),
|
|
+ NCIII(MCIII),NCIV(MCIV),NCV(MCV),NNI(MNI),NNII(MNII),
|
|
+ NNIII(MNIII),NNIV(MNIV),NNV(MNV),NNVI(MNVI),NOI(MOI),
|
|
+ NOII(MOII),NOIII(MOIII),NOIV(MOIV),NOV(MOV),NOVI(MOVI),
|
|
+ NOVII(MOVII)
|
|
PARAMETER (HI=13.5878,HEI=24.587,HEII=54.416,CVI=489.84,
|
|
+ NVII=666.83,OVIII=871.12)
|
|
PARAMETER (ZH=1.0,ZHE=2.0,ZC=6.0,ZN=7.0,ZO=8.0)
|
|
C N***=QUANTUM NO. OF LEVEL
|
|
C DATA FOR IONS G***=STATISTICAL WEIGHT OF LEVEL
|
|
C EN***=ENERGY OF LEVEL
|
|
C S*=SCREENING NO. OF LEVEL
|
|
DATA NHYD/ 1, 2, 3, 4, 5, 6,
|
|
+ 7, 8, 9,10,11,12,
|
|
+ 13,14,15,16,17,18,
|
|
+ 19,20,21,22,23,24,
|
|
+ 25,26,27,28,29,30,
|
|
+ 31,32,33,34,35,36,
|
|
+ 37,38,39,40,41,42,
|
|
+ 43,44,45,46,47,48,
|
|
+ 49,50,51,52,53,54,
|
|
+ 55,56,57,58,59,60,
|
|
+ 61,62,63,64,65,66,
|
|
+ 67,68,69,70,71,72,
|
|
+ 73,74,75,76,77,78,
|
|
+ 79,80,81,82,83,84,
|
|
+ 85,86,87,88,89,90,
|
|
+ 91,92,93,94,95,96,
|
|
+ 97,98,99, 100 /
|
|
DATA GHYD/ 2.000000, 8.000000, 18.00000,
|
|
+ 32.00000, 50.00000, 72.00000,
|
|
+ 98.00000, 128.0000, 162.0000,
|
|
+ 200.0000, 242.0000, 288.0000,
|
|
+ 338.0000, 392.0000, 450.0000,
|
|
+ 512.0000, 578.0000, 648.0000,
|
|
+ 722.0000, 800.0000, 882.0000,
|
|
+ 968.0000, 1058.000, 1152.000,
|
|
+ 1250.000, 1352.000, 1458.000,
|
|
+ 1568.000, 1682.000, 1800.000,
|
|
+ 1922.000, 2048.000, 2178.000,
|
|
+ 2312.000, 2450.000, 2592.000,
|
|
+ 2738.000, 2888.000, 3042.000,
|
|
+ 3200.000, 3362.000, 3528.000,
|
|
+ 3698.000, 3872.000, 4050.000,
|
|
+ 4232.000, 4418.000, 4608.000,
|
|
+ 4802.000, 5000.000, 5202.000,
|
|
+ 5408.000, 5618.000, 5832.000,
|
|
+ 6050.000, 6272.000, 6498.000,
|
|
+ 6728.000, 6962.000, 7200.000,
|
|
+ 7442.000, 7688.000, 7938.000,
|
|
+ 8192.000, 8450.000, 8712.000,
|
|
+ 8978.000, 9248.000, 9522.000,
|
|
+ 9800.000, 10082.00, 10368.00,
|
|
+ 10658.00, 10952.00, 11250.00,
|
|
+ 11552.00, 11858.00, 12168.00,
|
|
+ 12482.00, 12800.00, 13122.00,
|
|
+ 13448.00, 13778.00, 14112.00,
|
|
+ 14450.00, 14792.00, 15138.00,
|
|
+ 15488.00, 15842.00, 16200.00,
|
|
+ 16562.00, 16928.00, 17298.00,
|
|
+ 17672.00, 18050.00, 18432.00,
|
|
+ 18818.00, 19208.00, 19602.00,
|
|
+ 20000.00/
|
|
DATA ENHYD /0.0000000E+00,10.19085000000000,12.07804444444444,
|
|
+ 12.73856250000000,13.04428800000000,13.21036111111111,
|
|
+ 13.31049795918367,13.37549062500000,13.42004938271605,
|
|
+ 13.45192200000000,13.47550413223140,13.49344027777778,
|
|
+ 13.50739881656805,13.51847448979592,13.52740977777778,
|
|
+ 13.53472265625000,13.54078339100346,13.54586234567901,
|
|
+ 13.55016066481994,13.55383050000000,13.55698866213152,
|
|
+ 13.55972603305785,13.56211417769376,13.56421006944444,
|
|
+ 13.56605952000000,13.56769970414201,13.56916104252401,
|
|
+ 13.57046862244898,13.57164328180737,13.57270244444444,
|
|
+ 13.57366077003122,13.57453066406250,13.57532268135905,
|
|
+ 13.57604584775087,13.57670791836735,13.57731558641975,
|
|
+ 13.57787465303141,13.57839016620499,13.57886653517423,
|
|
+ 13.57930762500000,13.57971683521713,13.58009716553288,
|
|
+ 13.58045127095727,13.58078150826446,13.58108997530864,
|
|
+ 13.58137854442344,13.58164889090086,13.58190251736111,
|
|
+ 13.58214077467722,13.58236488000000,13.58257593233372,
|
|
+ 13.58277492603550,13.58296276254895,13.58314026063100,
|
|
+ 13.58330816528926,13.58346715561225,13.58361785164666,
|
|
+ 13.58376082045184,13.58389658144211,13.58402561111111,
|
|
+ 13.58414834721849,13.58426519250780,13.58437651801461,
|
|
+ 13.58448266601563,13.58458395266272,13.58468067033976,
|
|
+ 13.58477308977501,13.58486146193772,13.58494601974375,
|
|
+ 13.58502697959184,13.58510454274945,13.58517889660494,
|
|
+ 13.58525021580034,13.58531866325785,13.58538439111111,
|
|
+ 13.58544754155125,13.58550824759656,13.58556663379356,
|
|
+ 13.58562281685627,13.58567690625000,13.58572900472489,
|
|
+ 13.58577920880428,13.58582760923211,13.58587429138322,
|
|
+ 13.58591933564014,13.58596281773932,13.58600480908971,
|
|
+ 13.58604537706612,13.58608458527964,13.58612249382716,
|
|
+ 13.58615915952180,13.58619463610586,13.58622897444791,
|
|
+ 13.58626222272522,13.58629442659280,13.58632562934028,
|
|
+ 13.58635587203741,13.58638519366930,13.58641363126212,
|
|
+ 13.58644122000000/
|
|
DATA SHYD/100*0.0D0/
|
|
DATA NHEL/1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,
|
|
+ 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
|
|
+ 23,24,25,26,27,
|
|
+ 28,29,30,31,32,33,
|
|
+ 34,35,36,37,38,39,
|
|
+ 40,41,42,43,44,45,
|
|
+ 46,47,48,49,50,51,
|
|
+ 52,53,54,55,56,57,
|
|
+ 58,59,60,61,62,63,
|
|
+ 64,65,66,67,68,69,
|
|
+ 70,71,72,73,74,75,
|
|
+ 76,77,78,79,80,81/
|
|
DATA GHEL/1.0D0,3.0D0,1.0D0,5.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,15.0D0,5.0D0,3.0D0,3.0D0,1.0D0,9.0D0,
|
|
+ 15.0D0,5.0D0,21.0D0,7.0D0,
|
|
+ 3.0D0,100.0D0,144.0D0,196.0D0,256.0D0,324.0D0,
|
|
+ 400.0D0,484.0D0,
|
|
+ 576.0D0,676.0D0,784.0D0,900.0D0,1024.0D0,1156.0D0,
|
|
+ 1296.0D0,1444.0D0,1600.0D0,1764.0D0,1936.0D0,
|
|
+ 2116.0D0,2304.0D0,2500.0D0,2704.0D0,3136.0D0,
|
|
+ 3136.000000000000,3364.000000000000,3600.000000000000,
|
|
+ 3844.000000000000,4096.000000000000,4356.000000000000,
|
|
+ 4624.000000000000,4900.000000000000,5184.000000000000,
|
|
+ 5476.000000000000,5776.000000000000,6084.000000000000,
|
|
+ 6400.000000000000,6724.000000000000,7056.000000000000,
|
|
+ 7396.000000000000,7744.000000000000,8100.000000000000,
|
|
+ 8464.000000000000,8836.000000000000,9216.000000000000,
|
|
+ 9604.000000000000,10000.00000000000,10404.00000000000,
|
|
+ 10816.00000000000,11236.00000000000,11664.00000000000,
|
|
+ 12100.00000000000,12544.00000000000,12996.00000000000,
|
|
+ 13456.00000000000,13924.00000000000,14400.00000000000,
|
|
+ 14884.00000000000,15376.00000000000,15876.00000000000,
|
|
+ 16384.00000000000,16900.00000000000,17424.00000000000,
|
|
+ 17956.00000000000,18496.00000000000,19044.00000000000,
|
|
+ 19600.00000000000,20164.00000000000,20736.00000000000,
|
|
+ 21316.00000000000,21904.00000000000,22500.00000000000,
|
|
+ 23104.00000000000,23716.00000000000,24336.00000000000,
|
|
+ 24964.00000000000,25600.00000000000,26244.00000000000/
|
|
DATA ENHEL/0.0D0,19.819D0,20.615D0,20.964D0,
|
|
+ 20.964D0,20.964D0,21.218D0,
|
|
+ 22.718D0,22.920D0,23.007D0,23.007D0,
|
|
+ 23.007D0,23.073D0,23.074D0,
|
|
+ 23.087D0,23.593D0,23.673D0,23.707D0,
|
|
+ 23.736D0,23.736D0,23.737D0,
|
|
+ 23.737D0,23.742D0,24.028D0,24.201D0,
|
|
+ 24.304D0,24.371D0,24.417D0,
|
|
+ 24.449D0,24.473D0,24.491D0,24.506D0,
|
|
+ 24.517D0,24.526D0,24.534D0,
|
|
+ 24.540D0,24.545D0,24.549D0,24.553D0,
|
|
+ 24.556D0,24.559D0,24.562D0,
|
|
+ 24.564D0,24.566D0,24.568D0,24.570D0,
|
|
+ 24.57131951530612,24.57238228299643,24.57334055555556,
|
|
+ 24.57420759625390,24.57499462890625,24.57571120293848,
|
|
+ 24.57636548442907,24.57696448979592,24.57751427469136,
|
|
+ 24.57802008765522,24.57848649584488,24.57891748849441,
|
|
+ 24.57931656250000,24.57968679357525,24.58003089569161,
|
|
+ 24.58035127095727,24.58065005165289,24.58092913580247,
|
|
+ 24.58119021739130,24.58143481213219,24.58166427951389,
|
|
+ 24.58187984173261,24.58208260000000,24.58227354863514,
|
|
+ 24.58245358727811,24.58262353150587,24.58278412208505,
|
|
+ 24.58293603305785,24.58307987882653,24.58321622037550,
|
|
+ 24.58334557074911,24.58346839988509,24.58358513888889,
|
|
+ 24.58369618382155,24.58380189906348,24.58390262030738,
|
|
+ 24.58399865722656,24.58409029585799,24.58417780073462,
|
|
+ 24.58426141679661,24.58434137110727,24.58441787439614,
|
|
+ 24.58449112244898,24.58456129736163,24.58462856867284,
|
|
+ 24.58469309438919,24.58475502191381,24.58481448888889,
|
|
+ 24.58487162396122,24.58492654747850,24.58497937212360,
|
|
+ 24.58503020349303,24.58507914062500,24.58512627648224/
|
|
DATA SHEL/0.375D0,0.622D0,0.622D0,0.842D0,
|
|
+ 0.842D0,0.842D0,0.842D0,0.747D0,
|
|
+ 0.747D0,0.912D0,0.912D0,0.912D0,
|
|
+ 0.993D0,0.993D0,0.912D0,0.810D0,
|
|
+ 0.810D0,0.937D0,0.995D0,0.995D0,
|
|
+ 1.000D0,1.000D0,0.937D0,0.949D0,
|
|
+ 0.958D0,75*1.000D0/
|
|
DATA NCI/2,2,2,2,2,2,3,3,3,3,2,2,2,3,3,3,3,3,
|
|
+ 3,3,3,3,3,2,3,4,4,4,3,3,3,3,3,3,4,3,
|
|
+ 3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
|
|
+ 5,5,5,5,6,5,5,5,5,5,6,6,6,6,6,6,6,7,
|
|
+ 6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,
|
|
+ 8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10,
|
|
+ 10,11,11,11,2,3,3,3,2,2/
|
|
DATA GCI/1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 5.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,5.0D0,1.0D0,9.0D0,5.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,3.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,3.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 5.0D0,5.0D0,7.0D0,9.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,7.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,1.0D0,5.0D0,
|
|
+ 5.0D0,7.0D0,9.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,7.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,3.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,9.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,7.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,9.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,9.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,3.0D0,3.0D0/
|
|
DATA ENCI/0.0D0,2.0333605D-03,5.3933649D-03,1.263870,2.684086,
|
|
+ 4.182672,7.480511,7.482891,7.487915,7.684888,
|
|
+ 7.946046,7.946620,7.946474,8.537387,8.640516,
|
|
+ 8.643146,8.647287,8.771255,8.846707,8.848247,
|
|
+ 8.850785,9.002712,9.171972,9.330682,9.631248,
|
|
+ 9.683908,9.685375,9.689256,9.695577,9.697620,
|
|
+ 9.701885,9.708156,9.708925,9.710041,9.712769,
|
|
+ 9.714380,9.761111,9.833419,9.834406,9.834934,
|
|
+ 9.940317,9.942698,9.946449,9.988707,10.05592,
|
|
+ 10.08144,10.08328,10.08553,10.13833,10.19809,
|
|
+ 10.35278,10.38514,10.38514,10.38514,10.39370,
|
|
+ 10.39456,10.39580,10.40021,10.40845,10.41874,
|
|
+ 10.42750,10.42990,10.42990,10.52043,10.52041,
|
|
+ 10.52041,10.53705,10.58840,10.61635,10.67973,
|
|
+ 10.70230,10.70328,10.70328,10.70878,10.70878,
|
|
+ 10.71184,10.71407,10.71854,10.72362,10.72523,
|
|
+ 10.72684,10.72684,10.86509,10.87426,10.87513,
|
|
+ 10.87513,10.87997,10.87997,10.88257,10.88533,
|
|
+ 10.88679,10.88964,10.89075,10.89075,10.88980,
|
|
+ 10.97789,10.97854,10.97854,10.98597,10.98597,
|
|
+ 10.98597,10.98808,10.98913,10.98994,10.98994,
|
|
+ 10.98994,11.04474,11.04474,11.04487,11.05280,
|
|
+ 11.05280,11.05280,11.05392,11.05429,11.05429,
|
|
+ 11.05429,11.09049,11.09049,11.09049,11.09843,
|
|
+ 11.09843,11.09843,11.09880,11.13129,11.13129,
|
|
+ 11.13129,11.15477,11.15477,11.15477,12.13544,
|
|
+ 12.83767,12.84024,12.84331,13.11772,14.86312/
|
|
DATA NCII/2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,2,4,4,4,3,3,3,
|
|
+ 4,4,2,2,4,4,5,5,5,3,3,5,5,5,5,6,3,3,3,3,3,3,6,6,
|
|
+ 6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
|
+ 5,5,5,5,5,5,6,6,6,6,6,6,6/
|
|
DATA GCII/2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,4.0D0,4.0D0,
|
|
+ 6.0D0,6.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 4.0D0,6.0D0,6.0D0,8.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 10.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,6.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,6.0D0,8.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,12.0D0,8.0D0,
|
|
+ 10.0D0,8.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,4.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,6.0D0,4.0D0,
|
|
+ 2.0D0,6.0D0,8.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,10.0D0,6.0D0,8.0D0,10.0D0,
|
|
+ 12.0D0,8.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0/
|
|
DATA ENCII/0.0D0,7.9350658D-03,5.331397,5.334075,5.337658,
|
|
+ 9.290338,9.290624,11.96386,13.71590,13.72101,
|
|
+ 14.44900,16.33194,16.33332,17.60895,18.04607,
|
|
+ 18.04625,18.65519,18.65582,19.49478,20.14995,
|
|
+ 20.15068,20.70119,20.70413,20.70971,20.84491,
|
|
+ 20.84496,20.92025,20.92256,20.95094,20.95094,
|
|
+ 21.49265,21.73314,21.73405,22.09347,22.13075,
|
|
+ 22.13075,22.13075,22.18799,22.18799,22.47211,
|
|
+ 22.52747,22.52929,22.53239,22.53689,22.56844,
|
|
+ 22.57086,22.82136,22.82136,22.85996,22.85996,
|
|
+ 22.89870,23.11398,23.11600,23.11878,23.38108,
|
|
+ 23.38522,24.12408,24.27024,24.27201,24.27444,
|
|
+ 24.27787,24.37010,24.37079,24.37187,24.37315,
|
|
+ 24.60198,24.60332,24.65351,24.65617,24.65793,
|
|
+ 24.78982,24.79512,25.06741,25.07039,25.98117,
|
|
+ 25.98415,25.98986,26.58329,26.58615,26.62689,
|
|
+ 26.62867,26.63139,26.63554,26.75178,26.82771,
|
|
+ 26.82771,26.83016,26.89454,26.89578,27.22147,
|
|
+ 27.22329,27.22585,27.22930,27.29263,27.29263,
|
|
+ 27.29378,27.29509,27.35131,27.35294,27.37703,
|
|
+ 27.37957,27.38104,27.41188,27.41302,27.41395,
|
|
+ 27.41395,27.41395,27.41409,27.46301,27.46301,
|
|
+ 27.46810,27.46936,27.47200,27.47561,27.47330,
|
|
+ 27.47864,27.48713,27.49096,27.49330,27.49330,
|
|
+ 27.48854,27.49412,27.55688,27.56022,27.99752,
|
|
+ 27.99752,27.99752,28.25640,28.25640,28.61124,
|
|
+ 28.61124,28.61124,28.61124,28.64683,28.64683,
|
|
+ 28.64683,28.66803,26.43629,28.66875,28.66875,
|
|
+ 28.66875,28.66875,28.70253,28.70253,28.70253,
|
|
+ 28.70253,28.70515,28.70515,28.70515,28.70515,
|
|
+ 29.31561,29.31561,29.31561,29.31561,29.33557,
|
|
+ 29.33557,29.33557/
|
|
DATA NCIII/2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,
|
|
+ 3,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,5,3,3,3,3,5,5,5,5,3,5,5,5,5,5,5,5,5,
|
|
+ 5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,
|
|
+ 7,8,8,8,8,9,9,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
|
|
+ 6,6,6,6,6,6,7,7,7,7,7,7/
|
|
DATA GCIII/1.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 1.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,3.0D0,7.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,5.0D0,5.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,3.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,7.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,9.0D0,11.0D0,
|
|
+ 9.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,7.0D0,3.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,9.0D0,11.0D0,
|
|
+ 9.0D0,5.0D0,5.0D0,7.0D0,9.0D0,
|
|
+ 7.0D0,3.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,5.0D0,7.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,1.0D0,3.0D0,5.0D0,5.0D0,
|
|
+ 5.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 5.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,1.0D0,3.0D0,5.0D0/
|
|
DATA ENCIII/0.0D0,6.486296,6.489148,6.496191,12.69008,
|
|
+ 17.03237,17.03602,17.04185,18.08638,22.62984,
|
|
+ 29.52845,30.64541,32.10371,32.19328,32.19396,
|
|
+ 32.19555,33.47080,33.45866,33.47146,34.27982,
|
|
+ 38.20770,38.21183,38.22034,38.36164,38.43612,
|
|
+ 38.64882,39.39549,39.39549,39.39611,39.64054,
|
|
+ 39.84380,39.84582,39.84874,39.91699,39.91782,
|
|
+ 39.91892,39.97328,40.01022,40.05026,40.05341,
|
|
+ 40.05822,40.19756,40.57121,40.86969,40.87231,
|
|
+ 40.87686,41.24874,41.30157,41.32848,41.33158,
|
|
+ 41.33611,41.85783,41.80309,41.86202,42.14028,
|
|
+ 42.16117,42.16444,42.16623,42.32471,42.55869,
|
|
+ 42.67342,42.67342,42.67342,42.78661,42.83001,
|
|
+ 42.83001,42.83001,42.96405,42.96405,42.96416,
|
|
+ 42.96405,42.98029,42.98736,43.03527,43.03550,
|
|
+ 43.03579,43.25349,43.98952,44.27370,44.39248,
|
|
+ 44.39248,44.39248,44.46592,44.46592,44.46600,
|
|
+ 44.47219,44.47673,44.48596,44.48596,44.48596,
|
|
+ 44.52591,45.07626,45.24178,45.32720,45.32720,
|
|
+ 45.32720,45.38200,45.86543,45.92891,45.92891,
|
|
+ 45.92891,46.33929,46.33929,46.33929,46.69749,
|
|
+ 46.69749,46.69749,47.25143,47.35238,47.35238,
|
|
+ 47.35722,47.64920,47.64920,47.65379,47.81342,
|
|
+ 47.83558,48.06245,48.06245,48.06245,48.16114,
|
|
+ 48.16114,48.16114,48.20208,50.51542,50.55803,
|
|
+ 50.55803,50.55803,50.69428,50.69428,50.69428,
|
|
+ 50.77264,50.79460,50.90022,50.90022,50.90022,
|
|
+ 50.93829,50.93829,50.93829,52.24497,52.24497,
|
|
+ 52.24497,52.31775,52.31775,52.31775,52.43107,
|
|
+ 52.43107,52.43107,52.45302,52.45302,52.45302,
|
|
+ 53.23251,53.23251,53.23251,53.27802,53.27802,
|
|
+ 53.27802/
|
|
DATA NCIV/2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
|
|
+ 6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,
|
|
+ 8,8,8,8,8,8,8/
|
|
DATA GCIV/2.0D0,2.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,8.0D0,8.0D0,10.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,8.0D0,10.0D0,10.0D0,12.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,8.0D0,8.0D0,10.0D0,10.0D0,
|
|
+ 12.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 8.0D0,10.0D0,12.0D0,14.0D0,16.0D0/
|
|
DATA ENCIV/0.0D0,7.995100,8.008378,37.54872,39.68134,
|
|
+ 39.68525,40.28040,40.28173,49.76113,50.62434,
|
|
+ 50.62599,50.87540,50.87595,50.88784,50.88784,
|
|
+ 55.21889,55.65134,55.65221,55.77947,55.77947,
|
|
+ 55.78577,55.78578,55.78703,55.78703,58.12002,
|
|
+ 58.36774,58.36774,58.44275,58.44275,58.44709,
|
|
+ 58.44709,58.44764,58.44764,58.44770,58.44770,
|
|
+ 59.84267,60.00038,60.00038,60.04725,60.04725,
|
|
+ 60.05156,60.05156,60.05191,60.05191,60.05194,
|
|
+ 60.05194,61.05946,61.05946,61.09294,61.09294,
|
|
+ 61.09319,61.09319,61.09319,61.09319,61.09319/
|
|
DATA NCV/1,2,2,2,2,2,3,3,3,3,4,5,6,7,8/
|
|
DATA GCV/1.0D0,3.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,3.0D0,3.0D0,3.0D0,3.0D0/
|
|
DATA ENCV/0.0D0,298.9618,304.4046,304.4030,304.4199,
|
|
+ 307.8855,354.2645,354.2645,354.2645,354.5177,
|
|
+ 370.9247,378.5349,382.6710,385.1917,386.6807/
|
|
DATA NNI/2,2,2,2,2,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,4,4,3,3,3,3,6,6,6,6,6,5,5,5,5,5,5,
|
|
+ 5,5,5,5,5,5,5,5,5,5,5,7,7,7,7,7,6,6,6,6,6,6,6,6,
|
|
+ 6,6,6,6,6,6,6,6,6,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,
|
|
+ 7,7,7,9,9,9,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,
|
|
+ 10,10,9,9,9,9,9,9,9,9,9,9,9,9,9,11,11,11,11,11,10,
|
|
+ 10,10,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,
|
|
+ 11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,12,12,
|
|
+ 12,12,12,12,12/
|
|
DATA GNI/4.0D0,6.0D0,4.0D0,4.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,10.0D0,6.0D0,
|
|
+ 8.0D0,2.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,2.0D0,6.0D0,
|
|
+ 8.0D0,2.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,10.0D0,4.0D0,
|
|
+ 2.0D0,6.0D0,8.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 10.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,2.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,2.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 2.0D0,6.0D0,8.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,2.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,6.0D0/
|
|
DATA ENNI/0.0D0,2.383371,2.384363,3.575739,3.575739,
|
|
+ 10.32619,10.33038,10.33617,10.67904,10.69042,
|
|
+ 10.92429,10.92973,10.93217,11.60284,11.75037,
|
|
+ 11.75317,11.75780,11.76412,11.83769,11.83997,
|
|
+ 11.84472,11.99580,12.00032,12.00975,12.12207,
|
|
+ 12.12649,12.35701,12.35614,12.84713,12.85333,
|
|
+ 12.86185,12.91211,12.92268,12.97078,12.97568,
|
|
+ 12.97693,12.97929,12.98350,12.98958,12.99502,
|
|
+ 13.00392,13.00161,13.00483,13.00074,13.01686,
|
|
+ 13.01822,13.01983,13.02095,13.03344,13.03636,
|
|
+ 13.20179,13.23674,13.23917,13.24364,13.25041,
|
|
+ 13.26429,13.26623,13.27127,13.32189,13.61527,
|
|
+ 13.62076,13.62945,13.64202,13.65185,13.66270,
|
|
+ 13.66493,13.66914,13.67609,13.66580,13.67249,
|
|
+ 13.67410,13.68043,13.66588,13.66872,13.67695,
|
|
+ 13.68464,13.67869,13.68191,13.68836,13.69398,
|
|
+ 13.69673,13.70310,13.70607,13.92292,13.92614,
|
|
+ 13.95653,13.96207,13.97100,13.97749,13.98841,
|
|
+ 13.97948,13.98097,13.98543,13.99324,13.98568,
|
|
+ 13.98754,13.98803,13.99674,13.98865,13.98865,
|
|
+ 13.98865,13.99696,13.99237,13.99473,13.99944,
|
|
+ 14.00155,14.00384,14.13620,14.14326,14.15244,
|
|
+ 14.15045,14.15455,14.15417,14.15417,14.15417,
|
|
+ 14.15417,14.15690,14.15690,14.15690,14.16508,
|
|
+ 14.15827,14.16025,14.15864,14.16843,14.16313,
|
|
+ 14.17035,14.16645,14.16645,14.16831,14.23464,
|
|
+ 14.24468,14.25113,14.25212,14.25212,14.25683,
|
|
+ 14.25683,14.25683,14.25683,14.25882,14.25882,
|
|
+ 14.26043,14.26043,14.26545,14.27073,14.27109,
|
|
+ 14.27109,14.27109,14.36247,14.36247,14.31821,
|
|
+ 14.31821,14.31821,14.32329,14.32329,14.32329,
|
|
+ 14.32329,14.32403,14.32403,14.32465,14.32465,
|
|
+ 14.33234,14.33544,14.33494,14.33494,14.33494,
|
|
+ 14.36272,14.36272,14.36433,14.36433,14.36433,
|
|
+ 14.36830,14.36830,14.36830,14.36830,14.36854,
|
|
+ 14.36854,14.37016,14.37016,14.37896,14.38119,
|
|
+ 14.38107,14.38107,14.38107,14.39557,14.39557,
|
|
+ 14.39768,14.39768,14.39768,14.40152,14.40152,
|
|
+ 14.40202,14.40202,14.40264,14.40264,14.40264,
|
|
+ 14.40264,14.41206,14.41206,14.41442,14.41442,
|
|
+ 14.41442,14.42012,14.42012,14.42099,14.42099,
|
|
+ 14.42099,14.42583,14.42583,14.42682,14.42682,
|
|
+ 14.42781,14.42781,14.42781,14.42781,14.43636,
|
|
+ 14.43636,14.43698,14.43698,14.43698,14.46253,
|
|
+ 14.44021,14.44455,14.44455,14.45434,14.45434,
|
|
+ 14.45434,14.45980,14.45980/
|
|
DATA NNII/2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,2,3,
|
|
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,
|
|
+ 4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,4,4,4,3,3,3,5,5,5,5,5,5,5,5,5,5,5,
|
|
+ 5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3/
|
|
DATA GNII/1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,3.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,5.0D0,1.0D0,5.0D0,
|
|
+ 7.0D0,9.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,1.0D0,7.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,7.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,1.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,7.0D0,5.0D0,
|
|
+ 7.0D0,9.0D0,7.0D0,7.0D0,9.0D0,
|
|
+ 11.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,5.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,7.0D0,9.0D0,
|
|
+ 7.0D0,7.0D0,9.0D0,11.0D0,9.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,7.0D0,9.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,9.0D0,11.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,9.0D0/
|
|
DATA ENNII/0.0D0,6.0876831D-03,1.6279284D-02,1.898923,4.052723,
|
|
+ 5.848106,11.43604,11.43781,11.43801,13.54146,
|
|
+ 13.54146,13.54228,17.87734,18.46259,18.46651,
|
|
+ 18.48341,18.49722,19.23384,20.40944,20.64636,
|
|
+ 20.65389,20.66582,20.67651,20.94027,21.14861,
|
|
+ 21.15298,21.16022,21.59986,22.10340,23.12481,
|
|
+ 23.13218,23.14229,23.19670,23.23962,23.24260,
|
|
+ 23.24636,23.41565,23.42207,23.42555,23.47490,
|
|
+ 23.57225,24.36823,24.37465,24.38944,24.53166,
|
|
+ 25.06612,25.13369,25.14001,25.15193,25.18946,
|
|
+ 25.19245,25.20124,25.23510,25.46049,25.53877,
|
|
+ 25.54572,25.55447,25.58160,25.99668,26.00464,
|
|
+ 26.01527,26.02787,26.06667,26.06994,26.07548,
|
|
+ 26.12440,26.13011,26.13327,26.16475,26.16510,
|
|
+ 26.16800,26.16849,26.17391,26.19663,26.19758,
|
|
+ 26.20937,26.20252,26.21087,26.21191,26.21252,
|
|
+ 26.22134,26.22182,26.25393,26.25770,26.26368,
|
|
+ 26.55921,26.56489,26.58065,26.63554,27.36569,
|
|
+ 27.36569,27.36569,27.40948,27.40948,27.40999,
|
|
+ 27.41783,27.42901,27.42963,27.43824,27.43947,
|
|
+ 27.77609,27.77805,27.78169,27.78704,27.79372,
|
|
+ 28.01910,28.02209,28.02755,28.54429,30.17253,
|
|
+ 30.17448,30.17763,30.18179,30.18682,30.34387,
|
|
+ 30.34864,30.35188,30.41607,30.41652,30.41750,
|
|
+ 30.41894,30.42068/
|
|
DATA NNIII/2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,
|
|
+ 3,4,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,4,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,5,3,3,3,3,3,3,3,5,5,3,3,5,5,5,5,6,6,6,
|
|
+ 6,6,6,4,4,4,3,3,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,3,3,5,5,5,5/
|
|
DATA GNIII/2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,2.0D0,4.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,4.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,10.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,6.0D0,4.0D0,2.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,8.0D0,8.0D0,10.0D0,4.0D0,
|
|
+ 6.0D0,6.0D0,8.0D0,8.0D0,10.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,6.0D0,8.0D0,
|
|
+ 6.0D0,8.0D0,10.0D0,12.0D0,8.0D0,
|
|
+ 10.0D0,8.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,4.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0/
|
|
DATA ENNIII/0.0D0,2.1635452D-02,7.180255,7.098413,7.108480,
|
|
+ 12.52548,12.52643,16.24252,18.08651,18.10019,
|
|
+ 23.16076,25.17799,25.18006,27.43827,28.56680,
|
|
+ 28.56730,30.45896,30.46342,33.13367,33.13441,
|
|
+ 35.65022,35.65797,35.67233,36.84229,36.85629,
|
|
+ 38.44641,38.32793,38.33453,38.39367,38.39807,
|
|
+ 38.40689,38.41771,38.64517,38.64825,38.95919,
|
|
+ 39.34056,39.34595,39.35325,39.39646,39.40031,
|
|
+ 39.71098,39.71098,39.79651,39.80747,40.55027,
|
|
+ 40.94474,40.94909,40.95552,40.96437,41.26192,
|
|
+ 41.26358,41.26631,41.26982,41.37555,41.47835,
|
|
+ 41.48166,41.68555,41.69232,41.69667,42.12335,
|
|
+ 42.13715,42.39634,42.39655,42.48893,42.49769,
|
|
+ 42.49625,42.49625,42.54757,42.54757,43.95493,
|
|
+ 43.95493,44.00932,44.00932,44.04135,44.04135,
|
|
+ 45.69180,45.69957,45.71402,46.28896,46.29317,
|
|
+ 46.46321,46.47039,46.71232,46.71811,46.72555,
|
|
+ 46.73671,46.81577,46.81788,46.85206,46.86286,
|
|
+ 46.92110,47.02857,47.03412,47.04068,47.61238,
|
|
+ 47.61238,47.61845,47.62763,47.75000,47.75000,
|
|
+ 47.77108,47.77108,49.01428,47.77802,47.88887,
|
|
+ 47.88887,47.88887,47.97657,47.97913,47.98245,
|
|
+ 47.98245,47.98363,47.98760,48.07270,48.08297,
|
|
+ 48.11119,48.11662,48.12305,48.13089,48.12993,
|
|
+ 48.14229,48.14024,48.14488,48.15087,48.15427,
|
|
+ 48.15307,48.16119,49.16950,49.17073,50.71214,
|
|
+ 50.71214,50.71214,50.71214/
|
|
DATA NNIV/2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,3,3,3,3,4,4,4,4,3,
|
|
+ 3,3,4,4,4,4,3,4,5,5,5,5,5,5,5,6,6,6,4,4,4,4,5,5,4/
|
|
DATA GNIV/1.0D0,1.0D0,3.0D0,7.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 3.0D0,1.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,5.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,3.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,5.0D0,5.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 5.0D0,5.0D0,7.0D0,9.0D0,3.0D0,
|
|
+ 7.0D0,3.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 7.0D0,9.0D0,11.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0/
|
|
DATA ENNIV/0.0D0,8.323934,8.331770,8.349648,16.20427,
|
|
+ 21.75491,21.76399,21.77946,23.41898,29.18244,
|
|
+ 46.76804,50.15470,50.32483,50.32679,50.33118,
|
|
+ 52.06988,52.07031,52.07132,53.20933,57.68086,
|
|
+ 57.69048,57.71067,58.64906,59.62210,60.05779,
|
|
+ 60.05779,60.07403,60.44809,61.27855,61.27855,
|
|
+ 61.29070,61.78379,61.95650,61.97423,61.97423,
|
|
+ 61.97423,62.44215,62.44215,62.44215,62.67301,
|
|
+ 62.67685,62.68218,62.77282,62.86333,63.40415,
|
|
+ 63.40415,63.40415,63.41109,63.41767,63.41767,
|
|
+ 63.80760,64.05482,64.05569,64.05706,64.39976,
|
|
+ 64.70402,68.21900,68.53058,68.53058,68.53058,
|
|
+ 68.73986,68.73986,68.73986,71.28416,71.28416,
|
|
+ 71.28416,73.28070,73.60580,73.60580,73.61063,
|
|
+ 78.63129,78.63129,78.63129/
|
|
DATA NNV/2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,
|
|
+ 6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8/
|
|
DATA GNV/2.0D0,2.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 8.0D0,10.0D0,12.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 8.0D0,10.0D0,12.0D0,14.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,8.0D0,10.0D0,12.0D0,14.0D0,16.0D0/
|
|
DATA ENNV/0.0D0,9.976473,10.00851,56.55396,59.23740,
|
|
+ 59.24660,60.05890,60.06188,75.17694,76.26962,
|
|
+ 76.26962,76.61120,76.61120,83.55153,84.09893,
|
|
+ 84.09893,84.27598,84.27598,88.02306,88.33514,
|
|
+ 88.33514,88.43854,88.43742,88.44214,88.44214,
|
|
+ 88.44313,88.44313,88.44313,90.68689,90.88043,
|
|
+ 90.88043,90.94527,90.94527,90.94912,90.94912,
|
|
+ 90.94974,90.94974,90.94974,90.94974,92.40136,
|
|
+ 92.53167,92.53167,92.57358,92.57358,92.57618,
|
|
+ 92.57618,92.57668,92.57668,92.57668,92.57668,
|
|
+ 92.57668/
|
|
DATA NNVI/1,2,2,2,2,2,3,4/
|
|
DATA GNVI/1.0D0,3.0D0,1.0D0,3.0D0,5.0D0,3.0D0,3.0D0,3.0D0/
|
|
DATA ENNVI/0.0D0,419.8009,426.2953,426.2965,426.3325,
|
|
+ 425.7398,497.9737,521.5830/
|
|
DATA NOI/2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,
|
|
+ 4,4,4,4,4,4,3,3,3,5,5,3,4,4,4,4,4,4,4,4,5,5,5,6,
|
|
+ 6,5,5,5,5,5,5,5,5,6,6,6,7,7,6,6,6,6,6,6,6,6,8,8,
|
|
+ 7,7,7,7,7,7,7,7,9,9,8,8,8,8,8,8,8,8,10,10,9,9,9,9,
|
|
+ 9,9,9,9,11,11,10,10,10,10,10,10,10,10,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,2,2,2,3,
|
|
+ 3,3,3,3,5,4,4,4,4,4,4,4,4,4,4,4,3,6,5,5,5,5,5,5,5,
|
|
+ 5,5,5,7,6,6,6,2/
|
|
DATA GOI/5.0D0,3.0D0,1.0D0,5.0D0,1.0D0,
|
|
+ 5.0D0,3.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,5.0D0,3.0D0,
|
|
+ 9.0D0,7.0D0,5.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,7.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,9.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,7.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,3.0D0,9.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,1.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 5.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,9.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,9.0D0,7.0D0,
|
|
+ 5.0D0,5.0D0,3.0D0,1.0D0,7.0D0,
|
|
+ 3.0D0,5.0D0,5.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,9.0D0,7.0D0,5.0D0,9.0D0,
|
|
+ 11.0D0,9.0D0,7.0D0,7.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,5.0D0,3.0D0,1.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 5.0D0,9.0D0,7.0D0,5.0D0,9.0D0,
|
|
+ 11.0D0,9.0D0,7.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,1.0D0,5.0D0,9.0D0,
|
|
+ 7.0D0,5.0D0,9.0D0,11.0D0,9.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,1.0D0,5.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,3.0D0/
|
|
DATA ENOI/0.0D0,01.9651687D-02,2.8082693D-02,1.967363,0.4206081,
|
|
+ 9.146132,9.521420,10.74028,10.74053,10.74098,
|
|
+ 10.98893,10.98886,10.98895,11.83768,11.93056,
|
|
+ 12.07869,12.07870,12.07870,12.07872,12.07872,
|
|
+ 12.07872,12.08711,12.08711,12.08711,12.28604,
|
|
+ 12.28612,12.28627,12.35891,12.35891,12.35891,
|
|
+ 12.53927,12.54078,12.54176,12.66092,12.69755,
|
|
+ 12.72854,12.75377,12.75377,12.75377,12.75377,
|
|
+ 12.75377,12.75911,12.75911,12.75911,12.87829,
|
|
+ 12.87829,12.87829,13.02082,13.03891,13.06624,
|
|
+ 13.06624,13.06624,13.06624,13.06624,13.06913,
|
|
+ 13.06913,13.06913,13.13145,13.13145,13.13145,
|
|
+ 13.21004,13.22030,13.23559,13.23559,13.23559,
|
|
+ 13.23559,13.23559,13.23740,13.23740,13.23740,
|
|
+ 13.32166,13.32807,13.33749,13.33749,13.33749,
|
|
+ 13.33749,13.33749,13.33869,13.33869,13.33869,
|
|
+ 13.39308,13.39756,13.40353,385.3597,13.40353,
|
|
+ 13.40353,13.40353,13.40488,13.40488,13.40488,
|
|
+ 13.44262,13.44449,13.44872,13.44872,13.44872,
|
|
+ 13.44872,13.44872,13.44966,13.44966,13.44966,
|
|
+ 13.47577,13.47812,13.48112,13.48112,13.48112,
|
|
+ 13.48112,13.48112,13.48148,13.48148,13.48148,
|
|
+ 14.04685,14.04687,14.04730,14.09888,14.09975,
|
|
+ 14.10046,14.12320,14.12450,14.12526,14.13382,
|
|
+ 14.37218,14.46048,15.22525,15.28698,15.29424,
|
|
+ 15.29817,15.40062,15.40062,15.40062,15.40372,
|
|
+ 15.40390,15.40622,15.40550,15.41465,15.59420,
|
|
+ 15.59514,15.59577,15.65520,15.66431,15.66970,
|
|
+ 15.78109,15.78181,15.78222,15.82895,15.94391,
|
|
+ 16.01073,16.07676,16.07676,16.07676,16.07836,
|
|
+ 16.07844,16.08080,16.08005,16.08545,16.11433,
|
|
+ 16.11550,16.11614,16.23505,16.35702,16.35702,
|
|
+ 16.35702,16.35702,16.39057,16.39063,16.39308,
|
|
+ 16.39308,16.40451,16.40451,16.40451,16.54127,
|
|
+ 16.56668,16.56668,16.56668,23.53702/
|
|
DATA NOII/2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,
|
|
+ 3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,
|
|
+ 4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,
|
|
+ 5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
|
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,4,4,4,4,
|
|
+ 4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,3,3,3,3,3,4/
|
|
DATA GOII/4.0D0,6.0D0,4.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,6.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,6.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,6.0D0,4.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,2.0D0,6.0D0,
|
|
+ 8.0D0,6.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,10.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 8.0D0,6.0D0,8.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,8.0D0,6.0D0,
|
|
+ 10.0D0,8.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,8.0D0,10.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,6.0D0,4.0D0,
|
|
+ 8.0D0,5.80D0,4.0D0,2.0D0,6.0D0,
|
|
+ 8.0D0,10.0D0,12.0D0,8.0D0,10.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 10.0D0,6.0D0,8.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,6.0D0,4.0D0,
|
|
+ 2.0D0,6.0D0,8.0D0,8.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,6.0D0,8.0D0,10.0D0,
|
|
+ 12.0D0,8.0D0,10.0D0,4.0D0,6.0D0,
|
|
+ 4.0D0,6.0D0,8.0D0,10.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,6.0D0,8.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 8.0D0,10.0D0,6.0D0,8.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,10.0D0,
|
|
+ 12.0D0,2.0D0,4.0D0,4.0D0,6.20D0,
|
|
+ 10.0D0,8.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0/
|
|
DATA ENOII/0.0D0,3.323850,3.326454,5.017305,5.017491,
|
|
+ 14.85813,14.87838,14.88860,20.58005,20.57736,
|
|
+ 22.96648,22.97954,23.001876,23.41940,23.44172,
|
|
+ 24.26523,25.28586,25.63160,25.63849,25.64984,
|
|
+ 25.66529,25.66142,25.66154,25.83188,25.83760,
|
|
+ 25.84900,26.22564,26.24928,26.30498,26.35845,
|
|
+ 26.37943,26.55392,26.56133,28.12621,28.35835,
|
|
+ 28.36128,28.51330,28.51270,28.67733,28.68403,
|
|
+ 28.69369,28.70637,28.82200,28.83108,28.83932,
|
|
+ 28.82414,28.82992,28.85285,28.85711,28.85729,
|
|
+ 28.85808,28.86334,28.88355,28.94193,28.95606,
|
|
+ 29.06249,29.06893,29.58618,29.59923,29.61924,
|
|
+ 29.79726,29.82051,30.42546,30.47162,30.47763,
|
|
+ 30.48836,30.50400,30.74951,30.77135,30.80112,
|
|
+ 30.81214,31.02747,31.02747,31.14773,31.14812,
|
|
+ 31.31967,31.31982,31.37404,31.37430,31.46620,
|
|
+ 31.46649,31.55199,31.55199,31.55199,31.56553,
|
|
+ 31.61407,31.61407,31.61407,31.61407,31.61407,
|
|
+ 31.62925,31.63375,31.63644,31.63766,31.65117,
|
|
+ 31.65364,31.67396,31.69345,31.70178,31.71699,
|
|
+ 31.70200,31.71709,31.72948,31.72935,31.70999,
|
|
+ 31.71043,31.71889,31.73747,31.71911,31.73823,
|
|
+ 31.72081,31.72752,31.75062,31.75112,31.75553,
|
|
+ 31.75715,31.75586,31.75803,31.95026,31.96318,
|
|
+ 31.98375,32.03889,32.06284,32.14771,32.14780,
|
|
+ 32.35511,32.35511,32.36540,32.38251,32.39264,
|
|
+ 32.39264,32.40412,32.44667,32.46798,32.88345,
|
|
+ 32.88345,32.88345,32.88345,32.90963,32.91418,
|
|
+ 32.91418,32.92780,32.92780,32.93536,32.94354,
|
|
+ 32.95061,32.96264,32.93858,32.94181,32.95049,
|
|
+ 32.97082,32.95073,32.97146,32.96227,32.96227,
|
|
+ 32.97119,32.97528,32.97826,32.97999,32.97863,
|
|
+ 32.97999,33.19875,33.19968,33.20123,34.06365,
|
|
+ 34.06901,34.08607,34.08607,34.17174,34.17174,
|
|
+ 34.20029,34.20029,34.20504,34.20504,34.21390,
|
|
+ 34.21390,34.21960,34.22819,34.22819,34.23350,
|
|
+ 34.23350,34.25269,34.25269,34.48530,34.48530,
|
|
+ 36.19083,36.18759,36.19109,36.19123,36.19131,37.05294/
|
|
DATA NOIII/2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2,3,3,
|
|
+ 3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 2,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,3,3,3,4,4,
|
|
+ 4,4,4,3,3,3,3,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,5,5,
|
|
+ 5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 5,5,5,5,5,5,5,5,5,3,3,3,6,6,6,6,7,3,3,4,4,4,3,4,
|
|
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,5/
|
|
DATA GOIII/1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,5.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,5.0D0,1.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,1.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,3.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,9.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,5.0D0,5.0D0,
|
|
+ 7.0D0,9.0D0,5.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,7.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,5.0D0,7.0D0,9.0D0,
|
|
+ 11.0D0,1.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,7.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,5.0D0,7.0D0,9.0D0,
|
|
+ 5.0D0,7.0D0,9.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,7.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,7.0D0,7.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,9.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 7.0D0,5.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 9.0D0,3.0D0,5.0D0,7.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,3.0D0/
|
|
DATA ENOIII/0.0D0,1.4059945D-02,3.8038719D-02,2.513308,5.354124,
|
|
+ 7.477820,14.88140,14.88477,14.88550,17.65325,
|
|
+ 17.65339,17.65514,23.19140,24.43587,26.09378,
|
|
+ 33.13600,33.15068,33.18253,33.85794,35.18196,
|
|
+ 35.20895,35.22094,36.07438,36.43500,36.45190,
|
|
+ 36.47919,36.89279,36.98353,37.22392,37.23410,
|
|
+ 37.25028,38.01204,38.90675,40.22861,40.25288,
|
|
+ 40.27497,40.26230,40.57149,40.57759,40.58673,
|
|
+ 40.84922,40.86335,40.87098,41.14086,41.25951,
|
|
+ 41.97723,41.99266,42.14902,42.56451,43.39812,
|
|
+ 43.41013,43.43237,44.22956,44.24270,44.27655,
|
|
+ 44.46952,45.03978,45.31862,45.32294,45.33144,
|
|
+ 45.34384,45.35962,45.34443,45.43903,45.45230,
|
|
+ 45.47797,45.62070,45.69189,45.69899,45.71153,
|
|
+ 45.91510,45.92614,45.93959,45.98626,46.25228,
|
|
+ 46.44183,45.21283,46.46955,46.62690,46.78899,
|
|
+ 46.78899,46.78899,46.82767,46.91713,46.91867,
|
|
+ 46.92080,47.01923,47.02679,47.03461,47.20199,
|
|
+ 47.20199,47.20199,47.21141,47.24910,48.62968,
|
|
+ 48.62968,48.62968,48.69874,48.86141,48.86587,
|
|
+ 48.87442,48.91428,48.91908,48.92621,48.93560,
|
|
+ 48.94701,49.36293,49.36248,49.36198,49.36323,
|
|
+ 49.37332,49.40500,49.41368,49.41845,49.63815,
|
|
+ 49.65178,49.65844,49.76514,49.77709,49.79367,
|
|
+ 49.78386,49.78386,49.78386,49.81572,49.78386,
|
|
+ 49.78386,49.78386,50.01249,50.03133,50.31391,
|
|
+ 50.31750,50.32357,51.41365,51.47638,51.47638,
|
|
+ 51.47638,52.44297,52.69355,52.85969,53.12613,
|
|
+ 53.14089,53.16110,53.31682,54.18348,54.33549,
|
|
+ 54.33549,54.34320,54.35460,54.36977,54.46407,
|
|
+ 54.47044,54.48261,54.88958,54.88958,54.88958,
|
|
+ 55.81414,55.82281,55.82951,56.14741,56.14741,
|
|
+ 56.14741,56.31095,56.31095,56.31095,56.73994,
|
|
+ 56.73994,56.73994,58.73808/
|
|
DATA NOIV/2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,4,4,3,3,3,3,3,3,5,3,3,3,3,5,5,5,5,3,4,4,4,3,
|
|
+ 3,4,4,6,6,4,4,3,3,3,3,3,3,3,4,4,7,7,4,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,4,4,4,4,3,8,8,4,4,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,5,5,3,3,5,5,3,3,5,5,5,5,5,5,5,5,5,5,5,
|
|
+ 3,3,3,3,3,3,3,3,3,6,6,6,6,4,4,3,4,4,7,7,7,7/
|
|
DATA GOIV/2.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,2.0D0,6.0D0,
|
|
+ 4.0D0,6.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 10.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 4.0D0,6.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,6.0D0,8.0D0,2.0D0,4.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,4.0D0,
|
|
+ 6.0D0,2.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 6.0D0,4.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,2.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,2.0D0,4.0D0,6.0D0,
|
|
+ 6.0D0,4.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,4.0D0,6.0D0,8.0D0,4.0D0,
|
|
+ 6.0D0,6.0D0,4.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,6.0D0,4.0D0,2.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,2.0D0,6.0D0,
|
|
+ 4.0D0,2.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,4.0D0,2.0D0,2.0D0,4.0D0,
|
|
+ 6.0D0,8.0D0,4.0D0,6.0D0,2.0D0,
|
|
+ 4.0D0,6.0D0,2.0D0,4.0D0,6.0D0,8.0D0/
|
|
DATA ENOIV/0.0D0,4.7920357D-02,8.824909,8.841201,8.864076,
|
|
+ 15.73825,15.73998,20.37910,22.37705,22.40721,
|
|
+ 28.67474,31.63571,31.63934,35.83378,35.83476,
|
|
+ 44.33902,48.37428,48.38508,54.37857,54.39532,
|
|
+ 54.42593,56.14158,56.17444,57.92984,57.94415,
|
|
+ 58.03452,58.04428,58.06108,58.08709,58.79609,
|
|
+ 59.33789,59.34961,59.36561,59.84372,59.87542,
|
|
+ 60.23497,61.10992,61.36131,61.37108,61.38501,
|
|
+ 61.40412,61.93150,61.93509,61.94088,61.94888,
|
|
+ 62.18008,62.18691,62.46812,62.48219,62.49133,
|
|
+ 63.30199,63.30286,63.32506,63.35387,63.75540,
|
|
+ 63.77412,64.30924,64.30999,66.87376,67.85857,
|
|
+ 67.86167,68.16618,68.17400,68.44416,68.44416,
|
|
+ 68.50069,68.50069,68.74507,70.50282,70.51955,
|
|
+ 70.55017,70.76975,70.76975,71.12993,71.15609,
|
|
+ 71.21387,71.21387,71.31690,71.33785,71.39315,
|
|
+ 71.39737,71.48887,71.50672,71.53300,72.12492,
|
|
+ 72.12764,72.47591,72.50269,72.88482,72.88482,
|
|
+ 73.16019,73.37047,73.37047,73.37047,73.37047,
|
|
+ 73.52322,73.52322,73.52322,73.60108,73.61112,
|
|
+ 73.64819,73.65725,73.68911,73.71453,73.93237,
|
|
+ 73.95444,74.05078,74.06293,74.06293,74.10930,
|
|
+ 74.12628,74.40265,74.40438,74.76035,74.76035,
|
|
+ 74.76035,74.76035,75.18896,75.18896,75.18896,
|
|
+ 76.30446,76.30806,76.44791,77.47625,77.47625,
|
|
+ 77.92433,77.92433,78.12258,78.12258,78.19797,
|
|
+ 78.21979,78.41159,78.43242,78.59385,78.59385,
|
|
+ 78.59385,78.59385,78.63718,78.63718,78.63718,
|
|
+ 78.85769,78.88398,78.91572,78.91572,78.96023,
|
|
+ 78.97250,78.98019,80.20107,80.20107,80.72665,
|
|
+ 80.72900,81.00314,81.01343,81.37509,81.37509,
|
|
+ 81.37509,81.37509,81.42716,81.42716,81.83012,
|
|
+ 82.88895,82.88895,83.03365,83.03365,83.03365,83.03365/
|
|
DATA NOV/2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
|
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,
|
|
+ 4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,6,
|
|
+ 6,6,6,6,4,4,4,6,4,4,4,4,4,7,7,7,7,7,8,8,8,8,5,5,
|
|
+ 5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6/
|
|
DATA GOV/1.0D0,1.0D0,3.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,5.0D0,1.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,3.0D0,1.0D0,
|
|
+ 3.0D0,5.0D0,5.0D0,5.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,1.0D0,5.0D0,3.0D0,
|
|
+ 1.0D0,7.0D0,3.0D0,3.0D0,1.0D0,
|
|
+ 1.0D0,3.0D0,5.0D0,3.0D0,3.0D0,
|
|
+ 5.0D0,7.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,3.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,5.0D0,5.0D0,
|
|
+ 5.0D0,3.0D0,7.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 5.0D0,3.0D0,1.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,7.0D0,5.0D0,
|
|
+ 3.0D0,3.0D0,5.0D0,7.0D0,3.0D0,
|
|
+ 3.0D0,5.0D0,7.0D0,1.0D0,3.0D0,
|
|
+ 5.0D0,5.0D0,5.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,7.0D0,3.0D0,3.0D0,5.0D0,
|
|
+ 7.0D0,1.0D0,3.0D0,5.0D0,5.0D0/
|
|
DATA ENOV/0.0D0,10.18183,10.19878,10.23674,19.68863,
|
|
+ 26.48845,26.50776,26.54108,28.73015,35.69651,
|
|
+ 67.83862,69.59028,72.01395,72.28146,72.28596,
|
|
+ 72.29554,74.50599,74.50733,74.50979,75.95557,
|
|
+ 80.97483,80.99497,81.03748,82.38657,83.40436,
|
|
+ 83.97941,84.00407,84.04314,84.82139,85.49855,
|
|
+ 85.51269,85.53633,86.12596,86.43890,87.33036,
|
|
+ 87.33829,87.35107,87.73579,87.80076,87.81837,
|
|
+ 87.82866,88.39750,89.17985,89.60004,90.71603,
|
|
+ 91.26665,91.26665,91.26888,91.48672,92.04689,
|
|
+ 92.04763,92.04937,92.59937,92.97132,98.72523,
|
|
+ 99.49233,106.7049,106.7049,106.7049,100.2237,
|
|
+ 102.1987,102.8568,103.0377,103.0583,103.0944,
|
|
+ 103.1870,103.5465,103.5465,103.5676,103.8792,
|
|
+ 103.8829,104.1001,104.2509,104.2990,104.2990,
|
|
+ 104.2990,104.3064,104.3181,104.3333,104.4087,
|
|
+ 104.5556,104.5689,104.5754,105.0316,105.0733,
|
|
+ 106.7358,106.9963,106.9963,106.9963,106.9274,
|
|
+ 108.4187,108.5325,108.5325,108.5325,111.4108,
|
|
+ 111.5461,111.5461,111.5461,111.7535,111.7535,
|
|
+ 111.7535,111.8898,111.9082,112.1444,112.1444,
|
|
+ 112.1444,112.3809,115.9379,116.0435,116.0435,
|
|
+ 116.0435,116.1501,116.1501,116.1501,116.2166/
|
|
DATA NOVI/2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,
|
|
+ 6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8/
|
|
DATA GOVI/2.0D0,2.0D0,4.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,2.0D0,2.0D0,
|
|
+ 4.0D0,4.0D0,6.0D0,6.0D0,8.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,4.0D0,6.0D0,
|
|
+ 2.0D0,4.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,8.0D0,10.0D0,12.0D0,2.0D0,
|
|
+ 2.0D0,4.0D0,4.0D0,6.0D0,6.0D0,
|
|
+ 8.0D0,8.0D0,10.0D0,12.0D0,14.0D0,
|
|
+ 2.0D0,2.0D0,4.0D0,6.0D0,8.0D0,
|
|
+ 8.0D0,10.0D0,12.0D0,14.0D0,16.0D0,4.0D0,6.0D0/
|
|
DATA ENOVI/0.0D0,11.94909,12.01505,79.35559,82.58831,
|
|
+ 82.60773,83.64374,83.65008,105.7219,107.0408,
|
|
+ 107.0487,107.4805,107.4831,107.5050,107.5062,
|
|
+ 117.6237,118.2920,118.2920,118.5122,118.5122,
|
|
+ 124.3735,124.3735,124.5034,124.5034,124.5142,
|
|
+ 124.5142,124.5156,124.5156,124.5156,127.8017,
|
|
+ 128.0311,128.0311,128.1171,128.1171,128.1243,
|
|
+ 128.1243,128.1252,128.1252,128.1252,128.1252,
|
|
+ 130.2520,130.3984,130.3984,130.4674,130.4674,
|
|
+ 130.4680,130.4680,130.4680,130.4680,130.4680,
|
|
+ 130.4693,130.4693/
|
|
DATA NOVII/1,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6/
|
|
DATA GOVII/1.0D0,3.0D0,1.0D0,3.0D0,5.0D0,
|
|
+ 3.0D0,1.0D0,3.0D0,5.0D0,7.0D0,
|
|
+ 5.0D0,3.0D0,3.0D0,3.0D0,3.0D0,3.0D0/
|
|
DATA ENOVII/0.0D0,561.0761,568.6182,568.6255,568.6938,
|
|
+ 573.9532,664.1129,664.1129,664.1129,665.1804,
|
|
+ 665.1804,665.1804,665.6218,697.8022,712.7239,720.8449/
|
|
DATA SCI/4.179704,4.179868,4.180140,4.284864,4.411317,
|
|
+ 4.556712,4.417538,4.418036,4.419087,4.460873,
|
|
+ 5.012059,5.012145,5.012123,4.656621,4.682271,
|
|
+ 4.682931,4.683973,4.715525,4.735114,4.735517,
|
|
+ 4.736181,4.776610,4.823287,5.245868,4.960446,
|
|
+ 4.636463,4.637096,4.638772,4.981131,4.981795,
|
|
+ 4.983181,4.985224,4.985476,4.985839,4.648973,
|
|
+ 4.987257,5.002644,5.026932,5.027268,5.027448,
|
|
+ 4.751991,4.753114,4.754886,4.775015,4.807735,
|
|
+ 4.820394,4.821310,4.822433,4.849118,4.880081,
|
|
+ 4.964531,4.983084,4.983084,4.983084,4.988046,
|
|
+ 4.988550,4.989272,4.739796,4.996660,5.002712,
|
|
+ 5.007890,5.009317,5.009317,4.830776,4.830763,
|
|
+ 4.830763,4.843919,4.885500,4.908801,4.963564,
|
|
+ 4.983777,4.984663,4.984663,4.989659,4.989659,
|
|
+ 4.992449,4.793379,4.998577,5.003253,5.004741,
|
|
+ 5.006231,5.006231,4.972326,4.984214,4.985345,
|
|
+ 4.985345,4.991673,4.991673,4.995098,4.831870,
|
|
+ 5.000666,5.004451,5.005935,5.005935,5.004665,
|
|
+ 4.984616,4.985763,4.985763,4.999064,4.999064,
|
|
+ 4.999064,5.002865,5.004758,5.006233,5.006233,
|
|
+ 5.006233,4.984145,4.984145,4.984432,5.002990,
|
|
+ 5.002990,5.002990,5.005628,5.006508,5.006508,
|
|
+ 5.006508,4.983365,4.983365,4.983365,5.006886,
|
|
+ 5.006886,5.006886,5.008002,5.012074,5.012074,
|
|
+ 5.012074,5.014099,5.014099,5.014099,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000/
|
|
DATA SCII/3.322208,3.322644,3.633090,3.633257,3.633480,
|
|
+ 3.893420,3.893440,4.089184,4.229172,4.229597,
|
|
+ 3.436720,3.692591,3.692789,4.589103,3.953149,
|
|
+ 3.953178,4.702748,4.702820,3.603431,3.770060,
|
|
+ 3.770254,4.440431,4.441056,4.442240,3.961645,
|
|
+ 3.961659,4.991754,4.992091,3.992479,3.992479,
|
|
+ 3.697579,3.795690,3.796068,4.770876,4.780956,
|
|
+ 3.968260,3.968260,3.994325,3.994325,3.754887,
|
|
+ 4.893884,4.894430,4.895358,4.896706,4.906213,
|
|
+ 4.906944,3.971236,3.971236,3.996578,3.996578,
|
|
+ 5.011171,5.086056,5.086787,5.087796,5.188515,
|
|
+ 5.190205,5.591661,5.735427,5.737656,5.740739,
|
|
+ 5.745144,5.937513,5.941305,5.947732,5.956571,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000/
|
|
DATA SCIII/2.247678,2.511178,2.511298,2.511595,2.783334,
|
|
+ 2.988424,2.988601,2.988887,3.040348,3.275480,
|
|
+ 2.516355,2.624130,2.770250,2.779440,2.779510,
|
|
+ 2.779673,2.913505,2.912204,2.913576,3.001503,
|
|
+ 3.471912,3.472452,3.473566,2.656192,3.501991,
|
|
+ 2.707107,2.843331,2.843331,2.843447,3.667003,
|
|
+ 2.928022,2.928408,2.928967,2.942070,2.942230,
|
|
+ 2.942442,2.952919,2.960061,3.725865,3.726323,
|
|
+ 3.727023,2.996535,3.802981,3.848412,3.848814,
|
|
+ 3.849514,3.907525,3.915897,3.920174,3.920667,
|
|
+ 3.921389,4.006182,3.997117,4.006877,2.756046,
|
|
+ 4.057183,4.057739,4.058045,4.085242,2.876864,
|
|
+ 2.910818,2.910818,2.910818,4.166811,2.957773,
|
|
+ 2.957773,2.957773,2.998549,2.998549,2.998583,
|
|
+ 2.998549,3.003525,3.005696,3.020441,3.020510,
|
|
+ 3.020601,3.088544,2.797248,2.916939,2.968366,
|
|
+ 2.968366,2.968366,3.000603,3.000603,3.000640,
|
|
+ 3.003372,3.005378,3.009464,3.009464,3.009464,
|
|
+ 3.027199,2.830505,2.926040,2.976524,2.976524,
|
|
+ 2.976524,3.009360,2.932986,2.982088,2.982088,
|
|
+ 2.982088,2.986294,2.986294,2.986294,4.828427,
|
|
+ 4.828427,4.828427,5.151012,5.224114,5.224114,
|
|
+ 5.227788,5.497263,5.497263,5.502663,5.756044,
|
|
+ 5.817122,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000,6.000000,6.000000,6.000000,6.000000,
|
|
+ 6.000000/
|
|
DATA SCIV/1.644934,1.923884,1.924364,1.778341,1.948965,
|
|
+ 1.949284,1.998202,1.998312,1.838941,1.962835,
|
|
+ 1.963075,1.999589,1.999669,2.001418,2.001418,
|
|
+ 1.874532,1.972046,1.972243,2.001394,2.001394,
|
|
+ 2.002842,2.002845,2.003133,2.003133,1.897882,
|
|
+ 1.978616,1.978616,2.003384,2.003384,2.004821,
|
|
+ 2.004821,2.005002,2.005002,2.005023,2.005023,
|
|
+ 1.913888,1.984033,1.984033,2.005113,2.005113,
|
|
+ 2.007061,2.007061,2.007217,2.007217,2.007234,
|
|
+ 2.007234,1.989961,1.989961,2.009654,2.009654,
|
|
+ 2.009800,2.009800,2.009800,2.009800,2.009800/
|
|
DATASCV/0.6309066,0.7688928,0.9242349,0.9241881,0.9246764,
|
|
+ 1.026124,1.003322,1.003322,1.003322,1.020118,
|
|
+ 1.021842,1.027042,1.033988,1.051912,1.003001/
|
|
DATA SNI/4.931870,5.108953,5.109031,5.204087,5.204087,
|
|
+ 5.329969,5.330800,5.331948,5.401419,5.403777,
|
|
+ 5.968683,5.969459,5.969806,5.605717,5.641185,
|
|
+ 5.641868,5.642995,5.644538,5.662621,5.663186,
|
|
+ 5.664362,5.702335,5.703489,5.705897,5.734946,
|
|
+ 5.736104,5.797976,5.797737,5.588642,5.591228,
|
|
+ 5.594790,5.615995,5.620492,5.980873,5.982464,
|
|
+ 5.982872,5.983638,5.985012,5.986994,5.988774,
|
|
+ 5.991692,5.990931,5.991989,5.990646,5.995945,
|
|
+ 5.996395,5.996926,5.997295,6.001428,6.002394,
|
|
+ 5.745163,5.761658,5.762813,5.764937,5.768167,
|
|
+ 5.774817,5.775745,5.778173,5.802792,5.696104,
|
|
+ 5.699982,5.706142,5.715098,5.722151,5.983984,
|
|
+ 5.985277,5.987724,5.991767,5.985780,5.989671,
|
|
+ 5.990610,5.994303,5.985830,5.987479,5.992273,
|
|
+ 5.996771,5.993288,5.995173,5.998955,6.002261,
|
|
+ 6.003886,6.255743,6.257061,6.360914,6.362586,
|
|
+ 5.757127,5.763044,5.772635,5.779661,5.791555,
|
|
+ 5.984846,5.986194,5.990250,5.997386,5.990476,
|
|
+ 5.992170,5.992623,6.000597,5.993189,5.993189,
|
|
+ 5.993189,6.000802,5.996590,5.998751,6.003087,
|
|
+ 6.005032,6.007153,5.793718,5.804320,5.818227,
|
|
+ 5.815205,5.821445,5.989322,5.989322,5.989322,
|
|
+ 5.989322,5.992901,5.992901,5.992901,6.003714,
|
|
+ 5.994695,5.997311,5.995185,6.008173,6.001116,
|
|
+ 6.010741,6.005529,6.005529,6.008008,5.801159,
|
|
+ 5.821038,5.833978,5.835981,5.835981,5.989852,
|
|
+ 5.989852,5.989852,5.989852,5.993398,5.993398,
|
|
+ 5.996287,5.996287,6.005342,6.014956,6.015613,
|
|
+ 6.015613,6.015613,5.971639,5.971639,5.850568,
|
|
+ 5.850568,5.850568,5.990061,5.990061,5.990061,
|
|
+ 5.990061,5.991796,5.991796,5.993244,5.993244,
|
|
+ 6.011374,6.018783,6.017594,6.017594,6.017594,
|
|
+ 5.858175,5.858175,5.863377,5.863377,5.863377,
|
|
+ 5.988659,5.988659,5.988659,5.988659,5.989390,
|
|
+ 5.989390,5.994151,5.994151,6.020563,6.027375,
|
|
+ 6.026996,6.026996,6.026996,5.866343,5.866343,
|
|
+ 5.874646,5.874646,5.874646,5.990859,5.990859,
|
|
+ 5.992667,5.992667,5.994933,5.994933,5.994933,
|
|
+ 5.994933,6.030020,6.030020,6.038991,6.038991,
|
|
+ 6.038991,5.873279,5.873279,5.877365,5.877365,
|
|
+ 5.877365,5.992039,5.992039,5.996431,5.996431,
|
|
+ 6.000838,6.000838,6.000838,6.000838,6.039686,
|
|
+ 6.039686,6.042562,6.042562,6.042562,6.018730,
|
|
+ 5.886326,5.994597,5.994597,6.047575,6.047575,
|
|
+ 6.047575,6.078406,6.078406/
|
|
DATA SNII/4.048939,4.049242,4.049750,4.145151,4.258360,
|
|
+ 4.356432,4.688145,4.688257,4.688270,4.826217,
|
|
+ 4.826217,4.826272,5.142618,4.284333,4.284811,
|
|
+ 4.286872,4.288557,5.253337,4.532960,4.564950,
|
|
+ 4.565974,4.567596,5.379367,4.605227,4.634192,
|
|
+ 4.634804,4.635817,4.698180,4.771750,4.928997,
|
|
+ 4.930175,4.931792,4.940517,4.947424,4.947905,
|
|
+ 4.948512,4.976005,4.977055,4.977624,4.985716,
|
|
+ 5.001774,4.517682,4.519204,4.522714,5.167543,
|
|
+ 4.688999,4.706267,4.707887,4.710950,4.720615,
|
|
+ 4.721386,4.723658,4.732426,4.791679,5.359476,
|
|
+ 5.360877,5.362645,4.824183,4.939473,4.941747,
|
|
+ 4.944790,4.948400,4.959554,4.960499,4.962098,
|
|
+ 4.976268,4.977930,4.978850,4.988034,4.988136,
|
|
+ 4.988983,4.989127,4.990716,4.997378,4.997656,
|
|
+ 5.001124,4.999108,5.001566,5.001872,5.002052,
|
|
+ 5.004650,5.004791,5.510713,5.511550,5.512880,
|
|
+ 4.633615,4.635821,4.641956,4.663452,4.970949,
|
|
+ 4.970949,4.970949,4.990886,4.990886,4.991119,
|
|
+ 4.994713,4.999842,5.000126,5.004091,5.004655,
|
|
+ 5.899771,5.900361,5.901458,5.903069,5.905087,
|
|
+ 5.975470,5.976437,5.978201,6.162114,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000/
|
|
DATA SNIII/3.264886,3.265738,3.559230,3.555733,3.556163,
|
|
+ 3.795859,3.795903,3.971288,4.062202,4.062887,
|
|
+ 4.328298,4.441761,4.441879,3.362787,4.644640,
|
|
+ 4.644671,3.648880,3.649321,3.924340,3.924418,
|
|
+ 4.208216,4.209135,4.210838,4.353292,4.355043,
|
|
+ 3.749472,4.546074,4.546964,4.554955,4.555551,
|
|
+ 4.556746,4.558211,3.785649,3.786211,4.632736,
|
|
+ 4.686664,4.687436,4.688480,3.926233,3.926969,
|
|
+ 3.987034,3.987034,4.752837,4.754452,4.866728,
|
|
+ 4.928826,4.929522,4.930549,4.931964,4.980142,
|
|
+ 4.980413,4.980860,4.981436,3.664742,5.015918,
|
|
+ 5.016470,5.050785,5.051935,5.052674,5.126587,
|
|
+ 5.129026,3.959079,3.959144,5.192320,5.193925,
|
|
+ 3.989434,3.989434,4.005147,4.005147,3.968565,
|
|
+ 3.968565,3.992409,3.992409,4.006539,4.006539,
|
|
+ 5.571515,5.574721,5.580696,6.132490,6.134099,
|
|
+ 5.935632,5.939608,6.083616,6.087341,6.092149,
|
|
+ 6.099411,6.364476,6.365573,6.178216,6.185985,
|
|
+ 6.229222,6.316157,6.320952,6.326658,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000,7.000000,7.000000,
|
|
+ 7.000000,7.000000,7.000000/
|
|
DATA SNIV/2.226836,2.490623,2.490878,2.491461,2.755431,
|
|
+ 2.952339,2.952669,2.953231,3.013266,3.231892,
|
|
+ 2.493613,2.749589,2.762857,2.763010,2.763353,
|
|
+ 2.901417,2.901452,2.901533,2.994477,3.382731,
|
|
+ 3.383611,3.385459,3.472422,3.564919,3.607152,
|
|
+ 3.607152,3.608737,3.645438,3.728391,3.728391,
|
|
+ 2.639493,3.779903,3.797702,3.799535,3.799535,
|
|
+ 3.799535,2.797721,2.797721,2.797721,3.872625,
|
|
+ 3.873032,3.873596,3.883205,2.857107,2.934635,
|
|
+ 2.934635,2.934635,3.951730,3.952443,3.952443,
|
|
+ 2.993446,3.029914,3.030044,3.030246,4.061023,
|
|
+ 3.127314,2.880353,2.950477,2.950477,2.950477,
|
|
+ 2.998267,2.998267,2.998267,2.959708,2.959708,
|
|
+ 2.959708,4.785085,4.873190,4.873190,4.874527,
|
|
+ 7.000000,7.000000,7.000000/
|
|
DATA SNV/1.634565,1.915400,1.916327,1.771111,1.943796,
|
|
+ 1.944398,1.997854,1.998051,1.833396,1.959357,
|
|
+ 1.959357,1.999384,1.999384,1.870467,1.969524,
|
|
+ 1.969524,2.001982,2.001982,1.895972,1.977561,
|
|
+ 1.977561,2.004889,2.004593,2.005843,2.005843,
|
|
+ 2.006106,2.006106,2.006106,1.914798,1.983841,
|
|
+ 1.983841,2.007186,2.007186,2.008574,2.008574,
|
|
+ 2.008797,2.008797,2.008797,2.008797,1.929893,
|
|
+ 1.990742,1.990742,2.010469,2.010469,2.011696,
|
|
+ 2.011696,2.011930,2.011930,2.011930,2.011930,
|
|
+ 2.011930/
|
|
DATA SNVI/0.6290283,0.7657156,0.9208641,0.9208946,0.9217644,
|
|
+ 0.9074407,1.024314,1.024867/
|
|
DATA SOI/5.998809,6.000254,6.000874,6.149045,6.029965,
|
|
+ 6.280362,6.354168,6.620857,6.620917,6.621027,
|
|
+ 6.681873,6.681856,6.681878,6.554275,6.592577,
|
|
+ 6.991942,6.991948,6.991948,6.991953,6.991953,
|
|
+ 6.991953,6.994710,6.994710,6.994710,6.749977,
|
|
+ 6.750016,6.750087,6.784759,6.784759,6.784759,
|
|
+ 7.156593,7.157186,7.157570,6.676266,6.701954,
|
|
+ 7.234456,6.993919,6.993919,6.993919,6.993919,
|
|
+ 6.993919,6.997045,6.997045,6.997045,6.836974,
|
|
+ 6.836974,6.836974,6.746833,6.766088,6.996467,
|
|
+ 6.996467,6.996467,6.996467,6.996467,6.999115,
|
|
+ 6.999115,6.999115,6.869720,6.869720,6.869720,
|
|
+ 6.793480,6.808908,6.999084,6.999084,6.999084,
|
|
+ 6.999084,6.999084,7.001479,7.001479,7.001479,
|
|
+ 6.826997,6.839929,7.001803,7.001803,7.001803,
|
|
+ 7.001803,7.001803,7.003955,7.003955,7.003955,
|
|
+ 6.852827,6.864539,7.004705,8.000000,7.004705,
|
|
+ 7.004705,7.004705,7.007905,7.007905,7.007905,
|
|
+ 6.877349,6.883498,7.007761,7.007761,7.007761,
|
|
+ 7.007761,7.007761,7.010591,7.010591,7.010591,
|
|
+ 6.890946,6.900387,7.011453,7.011453,7.011453,
|
|
+ 7.011453,7.011453,7.012788,7.012788,7.012788,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000/
|
|
DATA SOII/4.784610,4.940430,4.940555,5.022952,5.022962,
|
|
+ 5.557054,5.558274,5.558889,5.930025,5.929834,
|
|
+ 5.160761,5.162283,5.164577,5.214052,5.216705,
|
|
+ 6.210938,5.445367,5.490556,5.491464,5.492962,
|
|
+ 5.495002,5.494491,5.494507,5.517109,5.517870,
|
|
+ 5.519391,5.570158,5.573380,5.580988,6.392210,
|
|
+ 6.394130,5.615287,5.616316,5.844496,5.880436,
|
|
+ 5.880893,5.904250,5.904674,5.930839,5.931911,
|
|
+ 5.933457,5.935489,5.954107,5.955576,5.956912,
|
|
+ 5.954453,5.955388,5.959104,5.959794,5.959825,
|
|
+ 5.959952,5.960805,5.964087,5.973599,5.975908,
|
|
+ 5.993385,5.994448,5.442262,5.445265,5.449878,
|
|
+ 5.491284,5.496742,6.232405,5.654758,5.656267,
|
|
+ 5.658962,5.662895,5.725537,5.731195,5.738926,
|
|
+ 5.741796,6.348958,6.348958,6.373241,6.373322,
|
|
+ 6.408604,6.408635,6.419951,6.420006,6.439373,
|
|
+ 6.439435,5.943564,5.943564,5.943564,5.947441,
|
|
+ 5.961402,5.961402,5.961402,5.961402,6.471051,
|
|
+ 5.965786,5.967088,5.967867,5.968222,5.972136,
|
|
+ 5.972852,5.978758,6.488330,5.986873,5.991322,
|
|
+ 5.986938,5.991353,5.994984,5.994948,5.989273,
|
|
+ 5.989404,5.991879,5.997332,5.991945,5.997554,
|
|
+ 5.992443,5.994410,6.001196,6.001346,6.002642,
|
|
+ 6.003121,6.002740,6.003380,5.576062,5.580966,
|
|
+ 5.588796,5.609913,5.619139,6.121709,6.121740,
|
|
+ 5.734796,5.734796,5.738977,5.745944,5.750079,
|
|
+ 5.750079,5.754774,5.772264,5.781077,5.960446,
|
|
+ 5.960446,5.960446,5.960446,5.972282,5.974347,
|
|
+ 5.974347,5.980535,5.980535,5.983981,5.987715,
|
|
+ 5.990945,5.996456,5.985451,5.986923,5.990890,
|
|
+ 6.000214,5.991003,6.000511,5.996286,5.996286,
|
|
+ 6.000386,6.002267,6.003636,6.004436,6.003808,
|
|
+ 6.004436,6.864734,6.865004,6.865458,6.871479,
|
|
+ 6.874276,6.883227,6.883227,6.929313,6.929313,
|
|
+ 6.945119,6.945119,6.947771,6.947771,7.214550,
|
|
+ 7.214550,6.955942,6.960794,6.960794,6.963802,
|
|
+ 6.963802,6.974759,6.974759,6.897856,6.897856,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000/
|
|
DATA SOIII/3.980091,3.980605,3.981483,4.073126,4.181011,
|
|
+ 4.263698,4.567496,2.851461,2.851508,4.688399,
|
|
+ 4.688406,4.688483,4.944256,5.004756,5.087306,
|
|
+ 4.201648,4.202927,4.205704,4.265077,5.589531,
|
|
+ 5.591178,5.591910,4.466920,4.500863,4.502461,
|
|
+ 4.505044,4.544430,5.702087,4.576288,4.577272,
|
|
+ 4.578837,4.653335,4.743010,4.880211,4.882788,
|
|
+ 4.885133,4.883788,4.916797,4.917453,4.918434,
|
|
+ 4.946753,4.948285,4.949112,4.978528,4.991553,
|
|
+ 5.071567,5.073311,5.091046,6.092469,5.236801,
|
|
+ 5.238239,5.240906,4.450987,4.453166,4.458786,
|
|
+ 4.490992,5.440957,5.477274,5.477840,5.478956,
|
|
+ 5.480584,5.482658,4.640882,4.657492,4.659830,
|
|
+ 4.664354,4.689624,5.526725,5.527675,5.529354,
|
|
+ 4.742366,4.744359,4.746791,4.755242,4.803841,
|
|
+ 5.629193,5.463434,5.633066,5.655169,4.904211,
|
|
+ 4.904211,4.904211,4.911571,5.696494,5.696715,
|
|
+ 5.697021,4.948280,4.949739,4.951245,4.983719,
|
|
+ 4.983719,4.983719,4.985557,4.992922,4.595488,
|
|
+ 4.595488,4.595488,4.614187,5.995187,5.995924,
|
|
+ 5.997336,6.003933,6.004729,6.005913,6.007472,
|
|
+ 6.009368,6.079757,6.079680,6.079593,6.079808,
|
|
+ 6.081549,6.087021,6.088523,6.089349,6.127790,
|
|
+ 6.130199,6.131379,6.150372,6.152512,6.155484,
|
|
+ 4.922875,4.922875,4.922875,4.932409,4.922875,
|
|
+ 4.922875,4.922875,4.991952,4.997716,6.251313,
|
|
+ 6.251994,6.253141,4.947119,4.974443,4.974443,
|
|
+ 4.974443,5.003925,6.782259,6.828280,6.541492,
|
|
+ 6.547457,6.555665,6.965416,7.060263,7.160808,
|
|
+ 7.160808,7.166230,7.174317,7.185196,7.256399,
|
|
+ 7.261456,7.271212,7.771374,7.771374,7.771374,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000/
|
|
DATA SOIV/3.228562,3.230039,3.508826,3.509360,3.510109,
|
|
+ 3.741247,3.741307,3.904661,3.977057,3.978160,
|
|
+ 4.214302,4.331145,4.331291,4.503491,4.503533,
|
|
+ 3.322590,3.617383,3.618198,4.097019,4.098440,
|
|
+ 4.101037,4.249484,4.252384,4.410741,4.412061,
|
|
+ 4.420406,4.421309,4.422863,4.425270,4.491520,
|
|
+ 4.543003,4.544125,4.545658,4.591770,4.594849,
|
|
+ 3.506632,4.717019,4.742457,4.743450,4.744866,
|
|
+ 4.746809,4.800908,4.801279,4.801878,4.802707,
|
|
+ 4.826727,4.827440,4.856910,4.858391,4.859354,
|
|
+ 3.927959,3.928085,4.948471,4.951597,4.995503,
|
|
+ 4.997566,5.057139,5.057223,3.602068,5.487784,
|
|
+ 5.488193,5.528638,5.529685,3.943577,3.943577,
|
|
+ 3.956409,3.956409,5.607411,5.152442,5.155901,
|
|
+ 5.162243,5.906104,5.906104,5.285100,5.290775,
|
|
+ 3.955026,3.955026,5.325924,5.330538,6.007065,
|
|
+ 6.007765,6.023023,6.026014,6.030425,6.132527,
|
|
+ 6.133009,5.594399,5.600957,3.969004,3.969004,
|
|
+ 5.768017,5.824149,5.824149,5.824149,5.824149,
|
|
+ 5.865850,5.865850,5.865850,5.887424,5.890223,
|
|
+ 5.900586,5.903125,5.912084,5.919259,5.981793,
|
|
+ 5.988238,6.512458,4.040435,4.040435,6.034046,
|
|
+ 6.039135,6.592915,6.593322,6.679720,6.679720,
|
|
+ 6.679720,6.679720,6.791924,6.791924,6.791924,
|
|
+ 7.150804,7.152208,7.208681,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000,
|
|
+ 8.000000/
|
|
DATA SOV/2.212299,2.477108,2.477559,2.478570,2.736373,
|
|
+ 2.929941,2.930501,2.931468,2.995396,3.204502,
|
|
+ 2.480139,2.586177,2.736415,2.753261,2.753545,
|
|
+ 2.754149,2.895501,2.895588,2.895747,2.990361,
|
|
+ 3.333698,3.335127,3.338143,3.434917,3.509306,
|
|
+ 3.551885,3.553720,3.556629,3.614975,3.666382,
|
|
+ 3.667461,3.669268,3.714561,3.738797,3.808601,
|
|
+ 3.809227,3.810236,3.840735,3.845908,3.847311,
|
|
+ 3.848131,3.893723,3.957266,2.655746,2.780047,
|
|
+ 2.842480,2.842480,2.842734,2.867645,2.932266,
|
|
+ 2.932352,2.932553,2.996815,3.040747,2.722722,
|
|
+ 2.858081,4.369750,4.369750,4.369750,2.990545,
|
|
+ 4.293693,4.399677,4.429359,4.432752,4.438707,
|
|
+ 4.454041,4.514207,4.514207,4.517767,4.570812,
|
|
+ 4.571450,2.913395,2.952782,2.965416,2.965416,
|
|
+ 2.965416,4.644915,4.646958,4.649636,2.994349,
|
|
+ 4.688903,4.691261,4.692408,4.774586,4.782194,
|
|
+ 2.928606,3.022013,3.022013,3.022013,2.997125,
|
|
+ 2.933282,2.986425,2.986425,2.986425,5.872365,
|
|
+ 5.931636,5.931636,5.931636,6.025977,6.025977,
|
|
+ 6.025977,6.090481,6.099398,6.217293,6.217293,
|
|
+ 6.217293,6.343698,8.000000,8.000000,8.000000,
|
|
+ 8.000000,8.000000,8.000000,8.000000,8.000000/
|
|
DATA SOVI/1.626749,1.908750,1.910343,1.765577,1.939605,
|
|
+ 1.940666,1.997515,1.997865,1.829541,1.956604,
|
|
+ 1.957376,1.999562,1.999822,2.001964,2.002083,
|
|
+ 1.867336,1.968342,1.968342,2.001995,2.001995,
|
|
+ 1.976059,1.976059,2.004681,2.004681,2.007063,
|
|
+ 2.007063,2.007365,2.007365,2.007365,1.914098,
|
|
+ 1.982390,1.982390,2.008208,2.008208,2.010369,
|
|
+ 2.010369,2.010631,2.010631,2.010631,2.010631,
|
|
+ 1.930105,1.987143,1.987143,2.014184,2.014184,
|
|
+ 2.014431,2.014431,2.014431,2.014431,2.014431,
|
|
+ 2.014965,2.014965/
|
|
DATA SOVII/0.6273875,0.7631111,0.9180546,0.9182081,0.9196253,
|
|
+ 1.029738,0.9543552,0.9543552,0.9543552,1.004676,
|
|
+ 1.004676,1.004676,1.025589,1.027917,1.034432,
|
|
+ 1.045346/
|
|
*
|
|
* Find index for atom and ion, 10*IAT+IZI
|
|
*
|
|
c IF(IAT.EQ.26.AND.IZI.GE.6.AND.IZI.LE.9) GO TO 260
|
|
IF(IAT.GT.2.AND.IAT.LT.6)GO TO 9999
|
|
IF(IAT.LT.1.OR.IAT.GT.8)GO TO 9999
|
|
IND=10*IAT+IZI
|
|
IF(IND.EQ.11) GO TO 11
|
|
IF(IND.EQ.21) GO TO 21
|
|
IF(IND.EQ.22) GO TO 22
|
|
IF(IND.EQ.61) GO TO 61
|
|
IF(IND.EQ.61) GO TO 62
|
|
IF(IND.EQ.63) GO TO 63
|
|
IF(IND.EQ.64) GO TO 64
|
|
IF(IND.EQ.65) GO TO 65
|
|
IF(IND.EQ.66) GO TO 66
|
|
IF(IND.EQ.71) GO TO 71
|
|
IF(IND.EQ.72) GO TO 72
|
|
IF(IND.EQ.73) GO TO 73
|
|
IF(IND.EQ.74) GO TO 74
|
|
IF(IND.EQ.75) GO TO 75
|
|
IF(IND.EQ.76) GO TO 76
|
|
IF(IND.EQ.77) GO TO 77
|
|
IF(IND.EQ.81) GO TO 81
|
|
IF(IND.EQ.82) GO TO 82
|
|
IF(IND.EQ.83) GO TO 83
|
|
IF(IND.EQ.84) GO TO 84
|
|
IF(IND.EQ.85) GO TO 85
|
|
IF(IND.EQ.86) GO TO 86
|
|
IF(IND.EQ.87) GO TO 87
|
|
IF(IND.EQ.88) GO TO 88
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR HYDROGEN
|
|
*
|
|
11 CALL PARTDV(T,ANE,ZH,MH,NHYD,GHYD,ENHYD,SHYD,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR HEI
|
|
*
|
|
21 CALL PARTDV(T,ANE,ZHE,MHEI,NHEL,GHEL,ENHEL,SHEL,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR HEII
|
|
*
|
|
22 CALL PARTDV(T,ANE,ZHE,MHEII,NHYD,GHYD,ENHYD,SHYD,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CI
|
|
*
|
|
61 CALL PARTDV(T,ANE,ZC,MCI,NCI,GCI,ENCI,SCI,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CII
|
|
*
|
|
62 CALL PARTDV(T,ANE,ZC,MCII,NCII,GCII,ENCII,SCII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CIII
|
|
*
|
|
63 CALL PARTDV(T,ANE,ZC,MCIII,NCIII,GCIII,ENCIII,SCIII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CIV
|
|
*
|
|
64 CALL PARTDV(T,ANE,ZC,MCIV,NCIV,GCIV,ENCIV,SCIV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CV
|
|
*
|
|
65 CALL PARTDV(T,ANE,ZC,MCV,NCV,GCV,ENCV,SCV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR CVI
|
|
*
|
|
66 CALL PARTDV(T,ANE,ZC,MH,NHYD,GHYD,ENHYD,SHYD,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NI
|
|
*
|
|
71 CALL PARTDV(T,ANE,ZN,MNI,NNI,GNI,ENNI,SNI,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NII
|
|
*
|
|
72 CALL PARTDV(T,ANE,ZN,MNII,NNII,GNII,ENNII,SNII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NIII
|
|
*
|
|
73 CALL PARTDV(T,ANE,ZN,MNIII,NNIII,GNIII,ENNIII,SNIII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NIV
|
|
*
|
|
74 CALL PARTDV(T,ANE,ZN,MNIV,NNIV,GNIV,ENNIV,SNIV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NV
|
|
*
|
|
75 CALL PARTDV(T,ANE,ZN,MNV,NNV,GNV,ENNV,SNV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NVI
|
|
*
|
|
76 CALL PARTDV(T,ANE,ZN,MNVI,NNVI,GNVI,ENNVI,SNVI,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR NVII
|
|
*
|
|
77 CALL PARTDV(T,ANE,ZN,MH,NHYD,GHYD,ENHYD,SHYD,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OI
|
|
*
|
|
81 CALL PARTDV(T,ANE,ZO,MOI,NOI,GOI,ENOI,SOI,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OII
|
|
*
|
|
82 CALL PARTDV(T,ANE,ZO,MOII,NOII,GOII,ENOII,SOII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OIII
|
|
*
|
|
83 CALL PARTDV(T,ANE,ZO,MOIII,NOIII,GOIII,ENOIII,SOIII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OIV
|
|
*
|
|
84 CALL PARTDV(T,ANE,ZO,MOIV,NOIV,GOIV,ENOIV,SOIV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OV
|
|
*
|
|
85 CALL PARTDV(T,ANE,ZO,MOV,NOV,GOV,ENOV,SOV,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OVI
|
|
*
|
|
86 CALL PARTDV(T,ANE,ZO,MOVI,NOVI,GOVI,ENOVI,SOVI,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OVII
|
|
*
|
|
87 CALL PARTDV(T,ANE,ZO,MOVII,NOVII,GOVII,ENOVII,SOVII,U)
|
|
GO TO 8888
|
|
*
|
|
* CALCULATING PARTITION FUNCTIONS FOR OVIII
|
|
*
|
|
88 CALL PARTDV(T,ANE,ZO,MH,NHYD,GHYD,ENHYD,SHYD,U)
|
|
GO TO 8888
|
|
C
|
|
C
|
|
C CALCULATING PARTITION FUNCTIONS FOR FE VI - FE IX
|
|
C
|
|
C260 CALL PFFE(IZI,T,ANE,U)
|
|
8888 CONTINUE
|
|
RETURN
|
|
9999 U=0
|
|
WRITE(*,*)!! INVALID ATOM IN USER SUPPLIED ROUTINE PARTFUN !!
|
|
STOP
|
|
END
|
|
C
|
|
C **************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE PARTDV(TEMP,DNE,Z,NLEV,NE,GEE,ENRGY,S,U)
|
|
C ===================================================
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION GEE(*),ENRGY(*),S(*)
|
|
INTEGER NE(*)
|
|
U=0.0
|
|
ET=TEMP/11604.8
|
|
P=(14.69D0-0.20-0.6667*LOG10(DNE))
|
|
C
|
|
DO 10 I=1,NLEV
|
|
U1=FLOAT(NE(I))
|
|
ZSTAR=Z-S(I)
|
|
IF (ZSTAR.GT.0)THEN
|
|
W=P+4.*LOG10(ZSTAR)-4.*LOG10(U1)
|
|
ELSE
|
|
W=0.0
|
|
ENDIF
|
|
IF (W.GT.1.) W=1.
|
|
C
|
|
IF ((ENRGY(I)/ET).LT.65.0) THEN
|
|
U1=GEE(I)*W*EXP(-ENRGY(I)/ET)
|
|
ELSE
|
|
U1=0.0
|
|
ENDIF
|
|
U=U+U1
|
|
10 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C **************************************************************
|
|
C
|
|
subroutine pfni(ion,t,pf,dut,dun)
|
|
c =================================
|
|
c
|
|
c partition functions for Ni IV to Ni IX
|
|
c
|
|
c this routine interpolates within a grid
|
|
c calculated from all levels predicted by
|
|
c Kurucz (1992), i.e. over 12,000 levels per ion.
|
|
c the partition functions depend only on T !
|
|
c (i.e. no level dissolution with increasing density)
|
|
c TL 27-DEC-1994, 23-JAN-1995
|
|
c
|
|
c Output: PF partition function
|
|
c DUT d(PF)/dT
|
|
c DUN d(PF)/d(ANE) (=0 in this version)
|
|
c
|
|
implicit double precision (a-h,o-z)
|
|
c
|
|
dimension g0(6)
|
|
dimension p4a(190),p4b(170)
|
|
dimension p5a(190),p5b(170)
|
|
dimension p6a(190),p6b(170)
|
|
dimension p7a(190),p7b(170)
|
|
dimension p8a(190),p8b(170)
|
|
dimension p9a(190),p9b(170)
|
|
parameter (xen=2.302585093,xmil=0.001)
|
|
c
|
|
data g0/28.,25.,6.,25.,28.,21./
|
|
c
|
|
data p4a/
|
|
. 1.447,1.464,1.482,1.501,1.518,1.535,1.551,1.567,1.582,1.596,
|
|
. 1.610,1.623,1.636,1.648,1.659,1.671,1.681,1.692,1.702,1.711,
|
|
. 1.721,1.730,1.739,1.748,1.757,1.765,1.774,1.782,1.791,1.799,
|
|
. 1.808,1.816,1.824,1.833,1.841,1.850,1.859,1.868,1.877,1.886,
|
|
. 1.895,1.905,1.914,1.924,1.934,1.945,1.955,1.966,1.977,1.989,
|
|
. 2.000,2.012,2.025,2.037,2.050,2.063,2.077,2.091,2.105,2.119,
|
|
. 2.134,2.149,2.164,2.179,2.195,2.211,2.227,2.243,2.260,2.276,
|
|
. 2.293,2.310,2.327,2.344,2.362,2.379,2.397,2.414,2.432,2.449,
|
|
. 2.467,2.484,2.502,2.519,2.537,2.554,2.571,2.588,2.606,2.623,
|
|
. 2.640,2.657,2.674,2.690,2.707,2.723,2.740,2.756,2.772,2.788,
|
|
. 2.804,2.819,2.835,2.850,2.866,2.881,2.896,2.911,2.925,2.940,
|
|
. 2.954,2.969,2.983,2.997,3.010,3.024,3.038,3.051,3.064,3.077,
|
|
. 3.090,3.103,3.116,3.128,3.141,3.153,3.165,3.177,3.189,3.201,
|
|
. 3.213,3.224,3.235,3.247,3.258,3.269,3.280,3.291,3.301,3.312,
|
|
. 3.322,3.332,3.343,3.353,3.363,3.373,3.382,3.392,3.402,3.411,
|
|
. 3.421,3.430,3.439,3.448,3.457,3.466,3.475,3.484,3.492,3.501,
|
|
. 3.509,3.518,3.526,3.534,3.542,3.550,3.558,3.566,3.574,3.582,
|
|
. 3.589,3.597,3.604,3.612,3.619,3.626,3.634,3.641,3.648,3.655,
|
|
. 3.662,3.669,3.676,3.682,3.689,3.696,3.702,3.709,3.715,3.722/
|
|
data p4b/
|
|
. 3.589,3.597,3.604,3.612,3.619,3.626,3.634,3.641,3.648,3.655,
|
|
. 3.662,3.669,3.676,3.682,3.689,3.696,3.702,3.709,3.715,3.722,
|
|
. 3.728,3.734,3.740,3.747,3.753,3.759,3.765,3.771,3.777,3.782,
|
|
. 3.788,3.794,3.800,3.805,3.811,3.816,3.822,3.827,3.833,3.838,
|
|
. 3.843,3.849,3.854,3.859,3.864,3.869,3.874,3.879,3.884,3.889,
|
|
. 3.894,3.899,3.904,3.909,3.913,3.918,3.923,3.927,3.932,3.936,
|
|
. 3.941,3.945,3.950,3.954,3.959,3.963,3.967,3.972,3.976,3.980,
|
|
. 3.984,3.988,3.993,3.997,4.001,4.005,4.009,4.013,4.017,4.021,
|
|
. 4.024,4.028,4.032,4.036,4.040,4.043,4.047,4.051,4.055,4.058,
|
|
. 4.062,4.065,4.069,4.072,4.076,4.079,4.083,4.086,4.090,4.093,
|
|
. 4.097,4.100,4.103,4.107,4.110,4.113,4.116,4.120,4.123,4.126,
|
|
. 4.129,4.132,4.135,4.138,4.141,4.144,4.148,4.151,4.154,4.157,
|
|
. 4.159,4.162,4.165,4.168,4.171,4.174,4.177,4.180,4.182,4.185,
|
|
. 4.188,4.191,4.193,4.196,4.199,4.202,4.204,4.207,4.210,4.212,
|
|
. 4.215,4.217,4.220,4.223,4.225,4.228,4.230,4.233,4.235,4.238,
|
|
. 4.240,4.243,4.245,4.247,4.250,4.252,4.255,4.257,4.259,4.262,
|
|
. 4.264,4.266,4.268,4.271,4.273,4.275,4.278,4.280,4.282,4.284/
|
|
data p5a/
|
|
. 1.398,1.408,1.427,1.446,1.466,1.486,1.506,1.526,1.545,1.564,
|
|
. 1.583,1.601,1.619,1.636,1.652,1.668,1.683,1.698,1.712,1.725,
|
|
. 1.738,1.751,1.763,1.775,1.786,1.797,1.808,1.818,1.828,1.837,
|
|
. 1.846,1.855,1.864,1.873,1.881,1.889,1.897,1.904,1.912,1.919,
|
|
. 1.926,1.933,1.940,1.946,1.953,1.960,1.966,1.972,1.979,1.985,
|
|
. 1.991,1.997,2.003,2.009,2.016,2.022,2.028,2.034,2.040,2.046,
|
|
. 2.052,2.058,2.065,2.071,2.077,2.084,2.090,2.097,2.103,2.110,
|
|
. 2.117,2.124,2.131,2.138,2.145,2.152,2.160,2.167,2.175,2.183,
|
|
. 2.191,2.199,2.207,2.216,2.224,2.233,2.241,2.250,2.259,2.268,
|
|
. 2.278,2.287,2.297,2.306,2.316,2.326,2.336,2.346,2.356,2.367,
|
|
. 2.377,2.387,2.398,2.409,2.419,2.430,2.441,2.452,2.463,2.474,
|
|
. 2.485,2.497,2.508,2.519,2.530,2.542,2.553,2.564,2.576,2.587,
|
|
. 2.599,2.610,2.621,2.633,2.644,2.655,2.667,2.678,2.689,2.701,
|
|
. 2.712,2.723,2.734,2.745,2.757,2.768,2.779,2.790,2.801,2.812,
|
|
. 2.822,2.833,2.844,2.855,2.865,2.876,2.886,2.897,2.907,2.918,
|
|
. 2.928,2.938,2.948,2.958,2.968,2.978,2.988,2.998,3.008,3.018,
|
|
. 3.027,3.037,3.046,3.056,3.065,3.075,3.084,3.093,3.102,3.111,
|
|
. 3.120,3.129,3.138,3.147,3.156,3.164,3.173,3.182,3.190,3.198,
|
|
. 3.207,3.215,3.223,3.232,3.240,3.248,3.256,3.264,3.272,3.279/
|
|
data p5b/
|
|
. 3.120,3.129,3.138,3.147,3.156,3.164,3.173,3.182,3.190,3.198,
|
|
. 3.207,3.215,3.223,3.232,3.240,3.248,3.256,3.264,3.272,3.279,
|
|
. 3.287,3.295,3.303,3.310,3.318,3.325,3.333,3.340,3.347,3.355,
|
|
. 3.362,3.369,3.376,3.383,3.390,3.397,3.404,3.411,3.417,3.424,
|
|
. 3.431,3.438,3.444,3.451,3.457,3.464,3.470,3.476,3.483,3.489,
|
|
. 3.495,3.501,3.507,3.514,3.520,3.526,3.531,3.537,3.543,3.549,
|
|
. 3.555,3.561,3.566,3.572,3.578,3.583,3.589,3.594,3.600,3.605,
|
|
. 3.610,3.616,3.621,3.626,3.632,3.637,3.642,3.647,3.652,3.657,
|
|
. 3.662,3.667,3.672,3.677,3.682,3.687,3.692,3.697,3.701,3.706,
|
|
. 3.711,3.716,3.720,3.725,3.729,3.734,3.738,3.743,3.747,3.752,
|
|
. 3.756,3.761,3.765,3.769,3.774,3.778,3.782,3.786,3.790,3.795,
|
|
. 3.799,3.803,3.807,3.811,3.815,3.819,3.823,3.827,3.831,3.835,
|
|
. 3.839,3.843,3.846,3.850,3.854,3.858,3.862,3.865,3.869,3.873,
|
|
. 3.876,3.880,3.884,3.887,3.891,3.894,3.898,3.901,3.905,3.908,
|
|
. 3.912,3.915,3.918,3.922,3.925,3.929,3.932,3.935,3.939,3.942,
|
|
. 3.945,3.948,3.951,3.955,3.958,3.961,3.964,3.967,3.970,3.974,
|
|
. 3.977,3.980,3.983,3.986,3.989,3.992,3.995,3.998,4.001,4.004/
|
|
data p6a/
|
|
. 0.778,0.804,0.817,0.834,0.854,0.876,0.901,0.928,0.957,0.987,
|
|
. 1.017,1.048,1.079,1.109,1.139,1.169,1.197,1.225,1.253,1.279,
|
|
. 1.304,1.329,1.353,1.376,1.398,1.419,1.440,1.459,1.478,1.497,
|
|
. 1.515,1.532,1.548,1.564,1.580,1.594,1.609,1.623,1.636,1.649,
|
|
. 1.662,1.674,1.686,1.698,1.709,1.720,1.730,1.740,1.750,1.760,
|
|
. 1.769,1.779,1.788,1.796,1.805,1.813,1.821,1.829,1.837,1.845,
|
|
. 1.852,1.860,1.867,1.874,1.881,1.888,1.894,1.901,1.907,1.914,
|
|
. 1.920,1.926,1.932,1.938,1.944,1.950,1.956,1.962,1.968,1.974,
|
|
. 1.979,1.985,1.991,1.996,2.002,2.007,2.013,2.018,2.024,2.029,
|
|
. 2.035,2.041,2.046,2.052,2.057,2.063,2.068,2.074,2.080,2.086,
|
|
. 2.091,2.097,2.103,2.109,2.115,2.121,2.127,2.133,2.139,2.145,
|
|
. 2.152,2.158,2.164,2.171,2.177,2.184,2.190,2.197,2.204,2.211,
|
|
. 2.218,2.225,2.232,2.239,2.246,2.253,2.261,2.268,2.276,2.283,
|
|
. 2.291,2.298,2.306,2.314,2.322,2.330,2.338,2.346,2.354,2.362,
|
|
. 2.370,2.379,2.387,2.395,2.404,2.412,2.420,2.429,2.438,2.446,
|
|
. 2.455,2.463,2.472,2.481,2.489,2.498,2.507,2.516,2.524,2.533,
|
|
. 2.542,2.551,2.560,2.569,2.577,2.586,2.595,2.604,2.613,2.622,
|
|
. 2.631,2.639,2.648,2.657,2.666,2.675,2.683,2.692,2.701,2.710,
|
|
. 2.718,2.727,2.736,2.744,2.753,2.761,2.770,2.779,2.787,2.796/
|
|
data p6b/
|
|
. 2.631,2.639,2.648,2.657,2.666,2.675,2.683,2.692,2.701,2.710,
|
|
. 2.718,2.727,2.736,2.744,2.753,2.761,2.770,2.779,2.787,2.796,
|
|
. 2.804,2.812,2.821,2.829,2.838,2.846,2.854,2.862,2.871,2.879,
|
|
. 2.887,2.895,2.903,2.911,2.919,2.927,2.935,2.943,2.951,2.958,
|
|
. 2.966,2.974,2.982,2.989,2.997,3.005,3.012,3.020,3.027,3.035,
|
|
. 3.042,3.049,3.057,3.064,3.071,3.078,3.086,3.093,3.100,3.107,
|
|
. 3.114,3.121,3.128,3.135,3.141,3.148,3.155,3.162,3.169,3.175,
|
|
. 3.182,3.188,3.195,3.202,3.208,3.214,3.221,3.227,3.234,3.240,
|
|
. 3.246,3.252,3.259,3.265,3.271,3.277,3.283,3.289,3.295,3.301,
|
|
. 3.307,3.313,3.319,3.325,3.330,3.336,3.342,3.348,3.353,3.359,
|
|
. 3.364,3.370,3.376,3.381,3.386,3.392,3.397,3.403,3.408,3.413,
|
|
. 3.419,3.424,3.429,3.434,3.440,3.445,3.450,3.455,3.460,3.465,
|
|
. 3.470,3.475,3.480,3.485,3.490,3.495,3.499,3.504,3.509,3.514,
|
|
. 3.518,3.523,3.528,3.533,3.537,3.542,3.546,3.551,3.555,3.560,
|
|
. 3.564,3.569,3.573,3.578,3.582,3.586,3.591,3.595,3.599,3.604,
|
|
. 3.608,3.612,3.616,3.621,3.625,3.629,3.633,3.637,3.641,3.645,
|
|
. 3.649,3.653,3.657,3.661,3.665,3.669,3.673,3.677,3.681,3.685/
|
|
data p7a/
|
|
. 1.398,1.398,1.398,1.398,1.406,1.425,1.443,1.461,1.480,1.498,
|
|
. 1.516,1.534,1.551,1.568,1.585,1.601,1.616,1.631,1.646,1.660,
|
|
. 1.674,1.687,1.700,1.712,1.724,1.736,1.747,1.758,1.768,1.778,
|
|
. 1.788,1.797,1.806,1.815,1.824,1.832,1.840,1.848,1.855,1.863,
|
|
. 1.870,1.877,1.883,1.890,1.896,1.902,1.908,1.914,1.920,1.925,
|
|
. 1.931,1.936,1.941,1.946,1.951,1.956,1.960,1.965,1.969,1.974,
|
|
. 1.978,1.982,1.986,1.990,1.994,1.998,2.001,2.005,2.009,2.012,
|
|
. 2.016,2.019,2.022,2.026,2.029,2.032,2.035,2.038,2.041,2.044,
|
|
. 2.047,2.050,2.053,2.056,2.059,2.061,2.064,2.067,2.069,2.072,
|
|
. 2.075,2.077,2.080,2.082,2.085,2.088,2.090,2.093,2.095,2.098,
|
|
. 2.100,2.103,2.105,2.107,2.110,2.112,2.115,2.117,2.120,2.122,
|
|
. 2.125,2.127,2.130,2.132,2.135,2.137,2.140,2.142,2.145,2.148,
|
|
. 2.150,2.153,2.155,2.158,2.161,2.163,2.166,2.169,2.172,2.175,
|
|
. 2.178,2.180,2.183,2.186,2.189,2.192,2.195,2.198,2.202,2.205,
|
|
. 2.208,2.211,2.215,2.218,2.221,2.225,2.228,2.232,2.235,2.239,
|
|
. 2.243,2.246,2.250,2.254,2.258,2.261,2.265,2.269,2.273,2.277,
|
|
. 2.282,2.286,2.290,2.294,2.299,2.303,2.307,2.312,2.316,2.321,
|
|
. 2.325,2.330,2.335,2.339,2.344,2.349,2.354,2.359,2.364,2.369,
|
|
. 2.374,2.379,2.384,2.389,2.394,2.399,2.405,2.410,2.415,2.420/
|
|
data p7b/
|
|
. 2.325,2.330,2.335,2.339,2.344,2.349,2.354,2.359,2.364,2.369,
|
|
. 2.374,2.379,2.384,2.389,2.394,2.399,2.405,2.410,2.415,2.420,
|
|
. 2.426,2.431,2.437,2.442,2.448,2.453,2.459,2.464,2.470,2.476,
|
|
. 2.481,2.487,2.493,2.498,2.504,2.510,2.516,2.521,2.527,2.533,
|
|
. 2.539,2.545,2.551,2.556,2.562,2.568,2.574,2.580,2.586,2.592,
|
|
. 2.598,2.604,2.610,2.616,2.622,2.628,2.634,2.640,2.646,2.652,
|
|
. 2.658,2.664,2.670,2.676,2.682,2.687,2.693,2.699,2.705,2.711,
|
|
. 2.717,2.723,2.729,2.735,2.741,2.747,2.753,2.759,2.764,2.770,
|
|
. 2.776,2.782,2.788,2.794,2.799,2.805,2.811,2.817,2.823,2.828,
|
|
. 2.834,2.840,2.846,2.851,2.857,2.863,2.868,2.874,2.879,2.885,
|
|
. 2.891,2.896,2.902,2.907,2.913,2.918,2.924,2.929,2.935,2.940,
|
|
. 2.945,2.951,2.956,2.962,2.967,2.972,2.978,2.983,2.988,2.993,
|
|
. 2.999,3.004,3.009,3.014,3.019,3.025,3.030,3.035,3.040,3.045,
|
|
. 3.050,3.055,3.060,3.065,3.070,3.075,3.080,3.085,3.090,3.095,
|
|
. 3.099,3.104,3.109,3.114,3.119,3.123,3.128,3.133,3.138,3.142,
|
|
. 3.147,3.152,3.156,3.161,3.165,3.170,3.175,3.179,3.184,3.188,
|
|
. 3.193,3.197,3.202,3.206,3.210,3.215,3.219,3.224,3.228,3.232/
|
|
data p8a/
|
|
. 1.447,1.447,1.447,1.447,1.447,1.447,1.459,1.475,1.489,1.504,
|
|
. 1.518,1.531,1.544,1.556,1.568,1.580,1.591,1.602,1.612,1.622,
|
|
. 1.631,1.640,1.649,1.658,1.666,1.674,1.682,1.689,1.696,1.703,
|
|
. 1.710,1.716,1.722,1.728,1.734,1.740,1.745,1.751,1.756,1.761,
|
|
. 1.766,1.770,1.775,1.779,1.784,1.788,1.792,1.796,1.800,1.804,
|
|
. 1.807,1.811,1.814,1.818,1.821,1.824,1.827,1.831,1.834,1.836,
|
|
. 1.839,1.842,1.845,1.848,1.850,1.853,1.855,1.858,1.860,1.863,
|
|
. 1.865,1.867,1.870,1.872,1.874,1.876,1.878,1.880,1.882,1.884,
|
|
. 1.886,1.888,1.890,1.892,1.894,1.896,1.898,1.900,1.902,1.903,
|
|
. 1.905,1.907,1.909,1.911,1.912,1.914,1.916,1.917,1.919,1.921,
|
|
. 1.923,1.924,1.926,1.928,1.929,1.931,1.933,1.934,1.936,1.938,
|
|
. 1.939,1.941,1.943,1.945,1.946,1.948,1.950,1.951,1.953,1.955,
|
|
. 1.957,1.959,1.960,1.962,1.964,1.966,1.968,1.970,1.971,1.973,
|
|
. 1.975,1.977,1.979,1.981,1.983,1.985,1.987,1.989,1.991,1.993,
|
|
. 1.995,1.998,2.000,2.002,2.004,2.006,2.009,2.011,2.013,2.015,
|
|
. 2.018,2.020,2.023,2.025,2.027,2.030,2.032,2.035,2.037,2.040,
|
|
. 2.043,2.045,2.048,2.051,2.053,2.056,2.059,2.062,2.064,2.067,
|
|
. 2.070,2.073,2.076,2.079,2.082,2.085,2.088,2.091,2.094,2.097,
|
|
. 2.100,2.103,2.107,2.110,2.113,2.116,2.120,2.123,2.126,2.130/
|
|
data p8b/
|
|
. 2.070,2.073,2.076,2.079,2.082,2.085,2.088,2.091,2.094,2.097,
|
|
. 2.100,2.103,2.107,2.110,2.113,2.116,2.120,2.123,2.126,2.130,
|
|
. 2.133,2.137,2.140,2.143,2.147,2.151,2.154,2.158,2.161,2.165,
|
|
. 2.168,2.172,2.176,2.180,2.183,2.187,2.191,2.195,2.198,2.202,
|
|
. 2.206,2.210,2.214,2.218,2.222,2.226,2.230,2.233,2.237,2.241,
|
|
. 2.245,2.250,2.254,2.258,2.262,2.266,2.270,2.274,2.278,2.282,
|
|
. 2.286,2.291,2.295,2.299,2.303,2.307,2.312,2.316,2.320,2.324,
|
|
. 2.329,2.333,2.337,2.341,2.346,2.350,2.354,2.359,2.363,2.367,
|
|
. 2.371,2.376,2.380,2.384,2.389,2.393,2.397,2.402,2.406,2.410,
|
|
. 2.415,2.419,2.423,2.428,2.432,2.436,2.441,2.445,2.449,2.454,
|
|
. 2.458,2.462,2.467,2.471,2.475,2.480,2.484,2.488,2.493,2.497,
|
|
. 2.501,2.506,2.510,2.514,2.519,2.523,2.527,2.531,2.536,2.540,
|
|
. 2.544,2.548,2.553,2.557,2.561,2.565,2.570,2.574,2.578,2.582,
|
|
. 2.586,2.591,2.595,2.599,2.603,2.607,2.611,2.616,2.620,2.624,
|
|
. 2.628,2.632,2.636,2.640,2.644,2.648,2.652,2.656,2.661,2.665,
|
|
. 2.669,2.673,2.677,2.681,2.685,2.689,2.693,2.696,2.700,2.704,
|
|
. 2.708,2.712,2.716,2.720,2.724,2.728,2.732,2.736,2.739,2.743/
|
|
data p9a/
|
|
. 1.322,1.322,1.322,1.322,1.322,1.322,1.322,1.322,1.322,1.325,
|
|
. 1.334,1.342,1.351,1.358,1.366,1.373,1.380,1.386,1.392,1.398,
|
|
. 1.404,1.409,1.415,1.420,1.425,1.429,1.434,1.438,1.442,1.446,
|
|
. 1.450,1.454,1.457,1.461,1.464,1.467,1.470,1.473,1.476,1.479,
|
|
. 1.482,1.485,1.487,1.490,1.492,1.495,1.497,1.499,1.501,1.503,
|
|
. 1.505,1.507,1.509,1.511,1.513,1.515,1.517,1.519,1.520,1.522,
|
|
. 1.524,1.525,1.527,1.528,1.530,1.531,1.533,1.534,1.535,1.537,
|
|
. 1.538,1.539,1.541,1.542,1.543,1.545,1.546,1.547,1.548,1.549,
|
|
. 1.551,1.552,1.553,1.554,1.555,1.556,1.558,1.559,1.560,1.561,
|
|
. 1.562,1.563,1.565,1.566,1.567,1.568,1.569,1.570,1.571,1.573,
|
|
. 1.574,1.575,1.576,1.577,1.579,1.580,1.581,1.582,1.584,1.585,
|
|
. 1.586,1.588,1.589,1.590,1.592,1.593,1.594,1.596,1.597,1.599,
|
|
. 1.600,1.602,1.603,1.605,1.606,1.608,1.609,1.611,1.612,1.614,
|
|
. 1.616,1.617,1.619,1.621,1.622,1.624,1.626,1.628,1.630,1.631,
|
|
. 1.633,1.635,1.637,1.639,1.641,1.643,1.645,1.647,1.649,1.651,
|
|
. 1.653,1.655,1.657,1.659,1.661,1.664,1.666,1.668,1.670,1.673,
|
|
. 1.675,1.677,1.679,1.682,1.684,1.686,1.689,1.691,1.694,1.696,
|
|
. 1.699,1.701,1.704,1.706,1.709,1.711,1.714,1.716,1.719,1.722,
|
|
. 1.724,1.727,1.729,1.732,1.735,1.738,1.740,1.743,1.746,1.749/
|
|
data p9b/
|
|
. 1.699,1.701,1.704,1.706,1.709,1.711,1.714,1.716,1.719,1.722,
|
|
. 1.724,1.727,1.729,1.732,1.735,1.738,1.740,1.743,1.746,1.749,
|
|
. 1.751,1.754,1.757,1.760,1.763,1.765,1.768,1.771,1.774,1.777,
|
|
. 1.780,1.783,1.786,1.789,1.792,1.795,1.798,1.801,1.804,1.807,
|
|
. 1.810,1.813,1.816,1.819,1.822,1.825,1.828,1.831,1.834,1.837,
|
|
. 1.840,1.843,1.847,1.850,1.853,1.856,1.859,1.862,1.865,1.869,
|
|
. 1.872,1.875,1.878,1.881,1.884,1.888,1.891,1.894,1.897,1.901,
|
|
. 1.904,1.907,1.910,1.913,1.917,1.920,1.923,1.926,1.930,1.933,
|
|
. 1.936,1.939,1.943,1.946,1.949,1.952,1.956,1.959,1.962,1.965,
|
|
. 1.969,1.972,1.975,1.978,1.982,1.985,1.988,1.992,1.995,1.998,
|
|
. 2.001,2.005,2.008,2.011,2.014,2.018,2.021,2.024,2.027,2.031,
|
|
. 2.034,2.037,2.040,2.044,2.047,2.050,2.053,2.057,2.060,2.063,
|
|
. 2.066,2.070,2.073,2.076,2.079,2.083,2.086,2.089,2.092,2.095,
|
|
. 2.099,2.102,2.105,2.108,2.111,2.115,2.118,2.121,2.124,2.127,
|
|
. 2.131,2.134,2.137,2.140,2.143,2.146,2.149,2.153,2.156,2.159,
|
|
. 2.162,2.165,2.168,2.171,2.175,2.178,2.181,2.184,2.187,2.190,
|
|
. 2.193,2.196,2.199,2.202,2.205,2.208,2.212,2.215,2.218,2.221/
|
|
c
|
|
if(t.lt.12000.) then
|
|
pf=g0(ion-3)
|
|
dut=0.
|
|
dun=0.
|
|
return
|
|
endif
|
|
c
|
|
it=int(t/1000)
|
|
if(it.ge.350) it=349
|
|
t1=1000.*it
|
|
t2=t1+1000.
|
|
if(ion.eq.4) then
|
|
if(t.le.200000.) then
|
|
xu1=p4a(it-10)
|
|
xu2=p4a(it-9)
|
|
else
|
|
xu1=p4b(it-180)
|
|
xu2=p4b(it-179)
|
|
endif
|
|
else if(ion.eq.5) then
|
|
if(t.le.200000.) then
|
|
xu1=p5a(it-10)
|
|
xu2=p5a(it-9)
|
|
else
|
|
xu1=p5b(it-180)
|
|
xu2=p5b(it-179)
|
|
endif
|
|
else if(ion.eq.6) then
|
|
if(t.le.200000.) then
|
|
xu1=p6a(it-10)
|
|
xu2=p6a(it-9)
|
|
else
|
|
xu1=p6b(it-180)
|
|
xu2=p6b(it-179)
|
|
endif
|
|
else if(ion.eq.7) then
|
|
if(t.le.200000.) then
|
|
xu1=p7a(it-10)
|
|
xu2=p7a(it-9)
|
|
else
|
|
xu1=p7b(it-180)
|
|
xu2=p7b(it-179)
|
|
endif
|
|
else if(ion.eq.8) then
|
|
if(t.le.200000.) then
|
|
xu1=p8a(it-10)
|
|
xu2=p8a(it-9)
|
|
else
|
|
xu1=p8b(it-180)
|
|
xu2=p8b(it-179)
|
|
endif
|
|
else if(ion.eq.9) then
|
|
if(t.le.200000.) then
|
|
xu1=p9a(it-10)
|
|
xu2=p9a(it-9)
|
|
else
|
|
xu1=p9b(it-180)
|
|
xu2=p9b(it-179)
|
|
endif
|
|
endif
|
|
c
|
|
dxt=xmil*(xu2-xu1)
|
|
xu=xu1+(t-t1)*dxt
|
|
pf=exp(xen*xu)
|
|
dut=xen*pf*dxt
|
|
dun=0.
|
|
return
|
|
end
|
|
c
|
|
c ******************************************************************
|
|
c
|
|
C
|
|
SUBROUTINE PFHEAV(IIZ,JNION,MODE,t,ane,u)
|
|
C =========================================
|
|
C
|
|
c subset of kurucz's pfsaha for Z>28.
|
|
c removed code for Z<28; crp- 28 aug, 1995
|
|
C EDITED 27 JULY 1994 BY GMW - REPLACED PT III PF COEFF. AND IP
|
|
C MODE 3 RETURNS PARTITION FUNCTION
|
|
C
|
|
C IMPLICIT REAL*8 (A-H,O-Z)
|
|
INCLUDE 'PARAMS.FOR'
|
|
REAL*8 IP
|
|
PARAMETER (DEBCON=1./2.8965E-18,
|
|
* TVCON=8.6171E-5,
|
|
* HIONEV=13.595,
|
|
* ONE=1.,
|
|
* HALF=0.5,
|
|
* THIRD=1./3.,
|
|
* X18=1./18.,
|
|
* X120=1./120.,
|
|
* T211=2000./11.)
|
|
c
|
|
C DIMENSION F(6),
|
|
DIMENSION IP(6),PART(6),POTLO(6)
|
|
C DIMENSION FSAVE(6)
|
|
DIMENSION SCALE(4)
|
|
DIMENSION NNN(6*218)
|
|
DIMENSION NNN16(54),NNN17(54),NNN18(54),NNN19(54),NNN20(54)
|
|
DIMENSION NNN21(54),NNN22(54),NNN23(54),NNN24(54),NNN25(54)
|
|
DIMENSION NNN26(54),NNN27(54),NNN28(54),NNN29(54),NNN30(54)
|
|
DIMENSION NNN31(54),NNN32(54),NNN33(54),NNN34(54),NNN35(54)
|
|
DIMENSION NNN36(54),NNN37(54),NNN38(54),NNN39(54),NNN40(12)
|
|
EQUIVALENCE (NNN( 811-810),NNN16(1))
|
|
EQUIVALENCE (NNN( 865-810),NNN17(1)),(NNN( 919-810),NNN18(1))
|
|
EQUIVALENCE (NNN( 973-810),NNN19(1)),(NNN(1027-810),NNN20(1))
|
|
EQUIVALENCE (NNN(1081-810),NNN21(1)),(NNN(1135-810),NNN22(1))
|
|
EQUIVALENCE (NNN(1189-810),NNN23(1)),(NNN(1243-810),NNN24(1))
|
|
EQUIVALENCE (NNN(1297-810),NNN25(1)),(NNN(1351-810),NNN26(1))
|
|
EQUIVALENCE (NNN(1405-810),NNN27(1)),(NNN(1459-810),NNN28(1))
|
|
EQUIVALENCE (NNN(1513-810),NNN29(1)),(NNN(1567-810),NNN30(1))
|
|
EQUIVALENCE (NNN(1621-810),NNN31(1)),(NNN(1675-810),NNN32(1))
|
|
EQUIVALENCE (NNN(1729-810),NNN33(1)),(NNN(1783-810),NNN34(1))
|
|
EQUIVALENCE (NNN(1837-810),NNN35(1)),(NNN(1891-810),NNN36(1))
|
|
EQUIVALENCE (NNN(1945-810),NNN37(1)),(NNN(1999-810),NNN38(1))
|
|
EQUIVALENCE (NNN(2053-810),NNN39(1)),(NNN(2107-810),NNN40(1))
|
|
C ( 1)( 2) ( 3)( 4) ( 5)( 6) ( 7)( 8) ( 9)(10) ( IP ) G
|
|
DATA NNN16/
|
|
1 227027622, 306233052, 356839222, 446052912, 652382292, 763314,
|
|
2 108416342, 222428472, 353944332, 577378932, 110314303, 1814900,
|
|
3 198724282, 293236452, 468362702, 86511123, 136016073, 3516000,
|
|
4 279836622, 461857562, 720693022, 124915873, 192522633, 5600000,
|
|
5 262136422, 501167232, 87911303, 138916483, 190721673, 7900000,
|
|
6 201620781, 231026761, 314737361, 450555381, 692386911, 772301,
|
|
7 109415761, 247938311, 58910042, 190937022, 68311693, 2028903,
|
|
8 897195961, 107212972, 165021182, 260230862, 356940532, 3682900,
|
|
9 100010001, 100410231, 108712611, 167124841, 388460411, 939102/
|
|
DATA NNN17/
|
|
1 200020021, 201620761, 223726341, 351352061, 80812472, 1796001,
|
|
2 100610471, 122617301, 300566361, 149924112, 332342352, 3970000,
|
|
3 403245601, 493151431, 529654331, 559358091, 611065171, 600000,
|
|
4 99710051, 104511541, 135016501, 208226431, 321837921, 2050900,
|
|
5 199820071, 204521391, 229124761, 266028451, 302932131, 3070000,
|
|
6 502665261, 755183501, 901496201, 102410942, 117912812, 787900,
|
|
7 422848161, 512153401, 557458941, 636270361, 794489061, 1593000,
|
|
8 100010261, 114613921, 175221251, 249828711, 324436181, 3421000,
|
|
9 403143241, 491856701, 649173781, 840396751, 113013392, 981000/
|
|
DATA NNN18/
|
|
1 593676641, 884697521, 105911572, 129515012, 180322212, 1858700,
|
|
2 484470541, 91510972, 125614082, 157017612, 199722912, 2829900,
|
|
3 630172361, 799686381, 919797221, 102810942, 117712832, 975000,
|
|
4 438055511, 691582151, 94510732, 121413672, 152016732, 2150000,
|
|
5 651982921, 94610382, 113212492, 139515462, 169718482, 3200000,
|
|
6 437347431, 498951671, 538559501, 74710812, 169126672, 1183910,
|
|
7 705183611, 93510092, 111614162, 222932532, 427652992, 2160000,
|
|
8 510869921, 87410312, 123116552, 236530712, 377744832, 3590000,
|
|
9 100010001, 100010051, 105012781, 198535971, 65911422, 1399507/
|
|
DATA NNN19/
|
|
1 461049811, 522254261, 609088131, 168935052, 68612253, 2455908,
|
|
2 759990901, 101911142, 129017782, 302856642, 99414333, 3690000,
|
|
3 200020011, 200720361, 211523021, 269434141, 459163351, 417502,
|
|
4 100010001, 100110321, 129524961, 61014202, 291753192, 2750004,
|
|
5 473650891, 533156051, 66810932, 232950852, 99915303, 4000000,
|
|
6 100110041, 104111741, 146019721, 281941411, 607785251, 569202,
|
|
7 202621931, 255331271, 384347931, 624085761, 122417632, 1102600,
|
|
8 100010001, 100110321, 129524961, 61014202, 291753192, 4300000,
|
|
9 791587851, 100012192, 155119942, 254031782, 389946932, 637900/
|
|
DATA NNN20/
|
|
1 118217102, 220827002, 319036792, 416646512, 513256072, 1223000,
|
|
2 92510012, 104710862, 112311612, 120212472, 132814282, 2050000,
|
|
3 141320802, 291439702, 531170262, 92712273, 162521053, 684000,
|
|
4 354454352, 724689652, 107212643, 148517093, 193321573, 1312900,
|
|
5 209727032, 324537052, 415446282, 510255752, 604965222, 2298000,
|
|
6 256636022, 465759302, 749693962, 116514243, 171520333, 687900,
|
|
7 335157222, 84511463, 147718363, 221826083, 299933893, 1431900,
|
|
8 223725352, 280830972, 340937362, 406844002, 473150632, 2503900,
|
|
9 703972941, 82610822, 154822682, 327244912, 571469372, 709900/
|
|
DATA NNN21/
|
|
1 75714552, 274347322, 718897632, 123414913, 174920063, 1614900,
|
|
2 267645462, 669890262, 115514323, 173620673, 242528083, 2714900,
|
|
3 90613732, 184823562, 291735332, 419949102, 565764332, 728000,
|
|
4 131318312, 227126932, 311735452, 397644072, 483852692, 1525900,
|
|
5 204721673, 234725733, 284031463, 348738613, 426546943, 3000000,
|
|
6 176824122, 318941082, 515263202, 761790472, 106112303, 736400,
|
|
7 221934642, 501968372, 88911173, 136316243, 189221613, 1675900,
|
|
8 210622722, 241025422, 267928262, 297731272, 327834282, 2846000,
|
|
9 148520202, 255230902, 364942462, 489656082, 638872352, 746000/
|
|
DATA NNN22/
|
|
1 153421292, 288137912, 484660322, 720187062, 101011483, 1807000,
|
|
2 254537212, 492362292, 770592182, 107312243, 137615273, 3104900,
|
|
3 115919651, 320746011, 607576761, 95011642, 141817172, 832900,
|
|
4 755087211, 105913442, 173122222, 282034722, 412247732, 1941900,
|
|
5 180223462, 289735212, 414247632, 538460052, 662672472, 3292000,
|
|
6 200020001, 200220141, 206422141, 257633021, 455164681, 757403,
|
|
7 100810581, 125817401, 260641031, 66210072, 135316982, 2148000,
|
|
8 795887491, 97711762, 156620252, 248329422, 340038582, 3481900,
|
|
9 100010001, 100410241, 109212891, 176827421, 444268771, 899003/
|
|
DATA NNN23/
|
|
1 200020021, 201720921, 233329881, 451475371, 127520782, 1690301,
|
|
2 100310281, 114815371, 246138311, 519265531, 791492761, 3747000,
|
|
3 252431921, 368440461, 433746521, 512259221, 723389021, 578400,
|
|
4 100110071, 104611651, 146118581, 225426511, 304734431, 1886000,
|
|
5 200120111, 205021611, 243628031, 317035371, 390442701, 2802900,
|
|
6 232637101, 488058571, 669074381, 816189091, 97210632, 734200,
|
|
7 286335941, 408144471, 479351961, 571862901, 686274341, 1462700,
|
|
8 100010251, 114013811, 175321601, 256829751, 338337901, 3049000,
|
|
9 404043481, 494656811, 646772781, 813490751, 101411372, 863900/
|
|
DATA NNN24/
|
|
1 303147981, 618472951, 827392621, 103711702, 131214532, 1650000,
|
|
2 313037601, 429347901, 536260591, 689477591, 862494881, 2529900,
|
|
3 526258801, 657372351, 784284071, 897095741, 102711082, 900900,
|
|
4 440855541, 686481251, 93810792, 125414792, 176321132, 1860000,
|
|
5 349054751, 699883081, 96611302, 134216202, 197724212, 2800000,
|
|
6 405342041, 438645621, 475751071, 587974491, 102214572, 1045404,
|
|
7 568567471, 773485861, 94510362, 112712182, 130914002, 1909000,
|
|
8 514269581, 86910562, 130716652, 215327742, 351843662, 3200000,
|
|
9 100010001, 100010091, 109515351, 291060661, 119621482, 1212716/
|
|
DATA NNN25/
|
|
1 414844131, 465649111, 538464651, 87112232, 158019362, 2120000,
|
|
2 615475101, 867797531, 112213462, 157618062, 203622662, 3209900,
|
|
3 200020001, 201020501, 215623871, 283536181, 462756261, 389300,
|
|
4 100010001, 100310371, 119016501, 269146361, 77912412, 2510000,
|
|
5 424445601, 481750061, 516953311, 549356551, 581759791, 3500000,
|
|
6 101210791, 135119351, 282340571, 574580391, 111015062, 521002,
|
|
7 262638611, 504160621, 698579371, 91010692, 129115952, 1000000,
|
|
8 100010001, 100310351, 118416321, 264945521, 76512182, 3700000,
|
|
9 71111992, 172323592, 312540402, 510763182, 765791012, 558000/
|
|
DATA NNN26/
|
|
1 204529582, 383647882, 582469262, 807992692, 104911723, 1106000,
|
|
2 94712552, 148416582, 179819212, 203621522, 227424042, 1916900,
|
|
3 295959132, 103515693, 215527593, 335939413, 449650223, 565000,
|
|
4 79718153, 289639443, 495159253, 686877533, 863794813, 1085000,
|
|
5 298640242, 475053692, 596965912, 725379692, 872094692, 2008000,
|
|
6 460693672, 158523823, 327242303, 519661563, 709379783, 541900,
|
|
7 455480232, 114014653, 178521013, 240927073, 299232633, 1055000,
|
|
8 46410533, 183826893, 354443773, 518459633, 674375243, 2320000,
|
|
9 139623042, 364860002, 96114603, 209828633, 373446973, 549000/
|
|
DATA NNN27/
|
|
1 460493692, 158523823, 327142303, 519661563, 709279783, 1073000,
|
|
2 455480232, 114014653, 178521013, 240927073, 299232633, 2000000,
|
|
3 131720482, 280535692, 441254492, 676583972, 103412583, 555000,
|
|
4 139623042, 364860002, 96114603, 209828633, 373446973, 1089900,
|
|
5 460493682, 158523823, 327142303, 519661563, 709279783, 2000000,
|
|
6 92915672, 222431062, 444763802, 89612173, 159520253, 562900,
|
|
7 315059662, 97114563, 204627093, 342541693, 490556383, 1106900,
|
|
8 269037812, 520270372, 91111273, 133915483, 172719093, 2000000,
|
|
9 800080571, 851699301, 127617362, 240433032, 444958442, 568000/
|
|
DATA NNN28/
|
|
1 125416052, 211828182, 375549622, 644381732, 101112213, 1125000,
|
|
2 800080571, 851699301, 127617362, 240433032, 444958442, 2000000,
|
|
3 240432982, 427555202, 708489962, 112613853, 167319843, 615900,
|
|
4 534793262, 139219123, 247730843, 371043333, 495055893, 1210000,
|
|
5 364145232, 514756362, 604864112, 673870372, 732276072, 2000000,
|
|
6 480767202, 89011393, 144118243, 230028753, 354142883, 584900,
|
|
7 480767192, 89011393, 144118243, 230028753, 354142883, 1151900,
|
|
8 480767202, 89011393, 144118243, 230028753, 354142883, 2000000,
|
|
9 343147532, 645887152, 115314793, 183322063, 257729373, 593000/
|
|
DATA NNN29/
|
|
1 343147532, 645887142, 115314793, 183322063, 257729373, 1167000,
|
|
2 343147532, 645887142, 115314793, 183322063, 257729373, 2000000,
|
|
3 222635002, 542276772, 100312353, 145716713, 187020703, 602000,
|
|
4 222635002, 542276772, 100312353, 145716713, 187020703, 1180000,
|
|
5 222635002, 542276772, 100312353, 145716713, 187020703, 2000000,
|
|
6 133715382, 209130152, 429859382, 79410293, 129815983, 609900,
|
|
7 265934782, 497877532, 120517733, 245032063, 400448073, 1193000,
|
|
8 265934782, 497877532, 120517733, 245032063, 400448073, 2000000,
|
|
9 800381111, 87510702, 147621462, 310343462, 585475982, 618000/
|
|
DATA NNN30/
|
|
1 156718872, 279244452, 678196342, 128316243, 197823443, 1205000,
|
|
2 93517192, 364666132, 103414613, 192624193, 293334613, 2370000,
|
|
3 100010011, 101310651, 118613951, 169120661, 250629971, 625000,
|
|
4 200120901, 270345231, 81714042, 223533112, 461959862, 1217000,
|
|
5 100312561, 250851931, 91914182, 198626022, 323638692, 2000000,
|
|
6 514664441, 759086851, 99211442, 133315612, 182721252, 609900,
|
|
7 125924831, 438667801, 98714112, 199727872, 380850742, 1389900,
|
|
8 323948621, 661297271, 158626482, 426865032, 93712843, 1900000,
|
|
9 659294081, 128016962, 222528952, 372047062, 585171462, 700000/
|
|
DATA NNN31/
|
|
1 99117882, 274638812, 520867322, 84410313, 123314453, 1489900,
|
|
2 187427702, 343739872, 448049452, 539358282, 625266642, 2329900,
|
|
3 65210892, 171325762, 373552252, 705192012, 116414343, 787900,
|
|
4 192837842, 600784802, 111113823, 165419233, 218524383, 1620000,
|
|
5 99117872, 274638812, 520867312, 84410313, 123314453, 2400000,
|
|
6 398981651, 130019172, 273438022, 516168382, 88411163, 797900,
|
|
7 131429482, 523279952, 111414623, 183422233, 262130233, 1770000,
|
|
8 192837842, 600784792, 111113823, 165419233, 218524383, 2500000,
|
|
9 600963001, 75910412, 150121572, 301940972, 539168952, 787000/
|
|
DATA NNN32/
|
|
1 73710852, 190731262, 464964142, 83810503, 127315053, 1660000,
|
|
2 131429482, 523279952, 111414623, 183422233, 262130233, 2600000,
|
|
3 110815502, 216829732, 398752322, 672484682, 104612673, 850000,
|
|
4 168225972, 362046562, 566766422, 757484612, 93010103, 1700000,
|
|
5 73710852, 190731262, 464964142, 83810503, 127315053, 2700000,
|
|
6 129117892, 239430882, 388748292, 596173252, 89510843, 910000,
|
|
7 110815502, 216829732, 398752322, 672484682, 104612673, 2000000,
|
|
8 168225972, 362046562, 566766422, 757484612, 93010103, 2800000,
|
|
9 158918512, 207523002, 254328242, 316335762, 407246582, 900000/
|
|
DATA NNN33/
|
|
1 98115462, 224930742, 401150612, 623475412, 89910583, 1855900,
|
|
C 2 110815502, 216829732, 398752322, 672484682, 104612673, 2900000,
|
|
2 146323292, 354651802, 74810923, 161723953, 348749363, 3322700,
|
|
3 203222611, 265731251, 364042301, 494958601, 702084731, 922000,
|
|
4 120521331, 357753801, 75310062, 130516572, 206925452, 2050000,
|
|
5 651780821, 108814772, 195925252, 316338622, 460853882, 3000000,
|
|
6 100010001, 100110111, 105211851, 152122101, 341552811, 1043002,
|
|
7 200320211, 210023021, 268834231, 480472341, 111416912, 1875000,
|
|
8 104012871, 186129471, 458664151, 82410072, 119013732, 3420000,
|
|
9 200420711, 222424271, 265429161, 325637371, 442853911, 610500/
|
|
DATA NNN34/
|
|
1 100010021, 101910801, 121414641, 189525811, 358949721, 2041900,
|
|
2 200020311, 216624611, 296337451, 489064791, 85711212, 2979900,
|
|
3 103411711, 147819101, 244331781, 434862751, 93113762, 741404,
|
|
4 204122231, 248227841, 311535621, 429153941, 651976431, 1502800,
|
|
5 100210131, 106812201, 154522671, 381665951, 95512512, 3192900,
|
|
6 400140351, 416944121, 474851591, 564362181, 690477231, 728700,
|
|
7 106814451, 204427341, 350744811, 586879131, 108314772, 1667900,
|
|
8 205523051, 264830231, 345439921, 469156001, 675281671, 2555900,
|
|
9 500950661, 518153561, 559058941, 628968071, 748483501, 843000/
|
|
DATA NNN35/
|
|
1 443756241, 696282451, 95411012, 128615262, 182922012, 1900000,
|
|
2 336953201, 682481011, 93810882, 127915272, 184622442, 2700000,
|
|
3 402841621, 431544771, 463148311, 520059491, 734896851, 930000,
|
|
4 576168741, 788387631, 96910642, 116012552, 135014462, 2000000,
|
|
5 490265341, 812797201, 116614322, 179622692, 285035302, 2900000,
|
|
6 100010001, 100010031, 102311051, 133018071, 264539391, 1074500,
|
|
7 402841621, 431544771, 463148311, 520059491, 734996851, 2000000,
|
|
8 576168741, 788387631, 96910642, 116012552, 135014462, 3000000,
|
|
9 200020011, 201220591, 218124481, 296538611, 488859141, 400000/
|
|
DATA NNN36/
|
|
1 100010001, 100010031, 102311051, 133018071, 264539401, 2200000,
|
|
2 421645151, 477449611, 511852711, 542455761, 572958821, 3300000,
|
|
3 100010041, 105212131, 153220271, 270435641, 460258111, 527600,
|
|
4 201221791, 258131471, 381645781, 546365131, 777592781, 1014400,
|
|
5 100010001, 100010031, 102311051, 133018071, 264539391, 3400000,
|
|
6 510064491, 82710872, 142718412, 232328712, 348341572, 690000,
|
|
7 228951571, 88513232, 183324132, 305537492, 448152402, 1210000,
|
|
8 723989131, 103511752, 130814352, 155416652, 177018682, 2000000,
|
|
9 620099241, 162725772, 391457072, 80110833, 141818023, 600000/
|
|
DATA NNN37/
|
|
1 620099241, 162725772, 391457072, 80110833, 141818023, 1200000,
|
|
2 620099251, 162725772, 391457072, 80110833, 141818023, 2000000,
|
|
3 347877992, 129318323, 240730533, 380546863, 570368573, 600000,
|
|
4 347877992, 129318323, 240730533, 380546863, 570368573, 1200000,
|
|
5 347777992, 129318323, 240730533, 380546863, 570368573, 2000000,
|
|
6 209530092, 450866762, 96613623, 186524763, 318839893, 600000,
|
|
7 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
8 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
9 209530092, 450866762, 96613623, 186524763, 318839893, 600000/
|
|
DATA NNN38/
|
|
1 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
2 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
3 209530092, 450866762, 96613623, 186524763, 318839893, 600000,
|
|
4 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
5 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
6 209530092, 450866762, 96613623, 186524763, 318839893, 600000,
|
|
7 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
8 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
9 209530092, 450866762, 96613623, 186524763, 318839893, 600000/
|
|
DATA NNN39/
|
|
1 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
2 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
3 209530092, 450866762, 96613623, 186524763, 318839893, 600000,
|
|
4 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
5 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
6 209530092, 450866762, 96613623, 186524763, 318839893, 600000,
|
|
7 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
8 209530092, 450866762, 96613623, 186524763, 318839893, 2000000,
|
|
9 209530092, 450866762, 96613623, 186524763, 318839893, 600000/
|
|
DATA NNN40/
|
|
1 209530092, 450866762, 96613623, 186524763, 318839893, 1200000,
|
|
2 209530092, 450866762, 96613623, 186524763, 318839893, 2000000/
|
|
DATA SCALE/.001,.01,.1,1./
|
|
C
|
|
if(mode.lt.0) return
|
|
tk=1.38054d-16*t
|
|
tv=8.6171d-5*t
|
|
C LOWERING OF THE IONIZATION POTENTIAL IN VOLTS FOR UNIT ZEFF
|
|
CHARGE=ANE*2.
|
|
DEBYE=SQRT(TK*DEBCON/CHARGE)
|
|
C DEBYE=SQRT(TK/12.5664/4.801E-10**2/CHARGE)
|
|
POTLOW=MIN(1.D0,1.44E-7/DEBYE)
|
|
IF(IIZ.LE.28)then
|
|
write(6,*) 'Error, routine PFHEAV for Z.GE.28 only'
|
|
stop23
|
|
endif
|
|
c removed elements with z<28
|
|
if(iiz.eq.28) n=1
|
|
IF(IIZ.GT.28) N=3*IIZ+54-135
|
|
IF(IIZ.eq.28) NIONS=4
|
|
IF(IIZ.GT.28) NIONS=3
|
|
NION2=MIN0(JNION+2,NIONS)
|
|
N=N-1
|
|
C
|
|
DO 18 ION=1,NION2
|
|
Z=ION
|
|
POTLO(ION)=POTLOW*Z
|
|
N=N+1
|
|
nnn6n=nnn(6+6*(N-1))
|
|
c nnn6n=nnn(6,n)
|
|
NNN100=NNN6N/100
|
|
XN1= NNN100
|
|
IP(ION)=XN1*1.e-3
|
|
IG=NNN6N-NNN100*100
|
|
GGG=IG
|
|
T2000=IP(ION)*T211
|
|
IT=MAX0(1,MIN0(9, INT(T/T2000-HALF)))
|
|
XIT=IT
|
|
DT=T/T2000-XIT-HALF
|
|
PMIN=ONE
|
|
I=(IT+1)/2
|
|
nnnin=nnn(i+6*(N-1))
|
|
c nnnin=nnn(i,n)
|
|
K1=NNNIN/100000
|
|
K2=NNNIN-K1*100000
|
|
K3=K2/10
|
|
xk1=k1
|
|
xk3=k3
|
|
KSCALE=K2-K3*10
|
|
IF(MOD(IT,2).EQ.0)GO TO 12
|
|
P1=XK1*SCALE(KSCALE)
|
|
P2=XK3*SCALE(KSCALE)
|
|
IF(DT.GE.0.)GO TO 13
|
|
IF(KSCALE.GT.1)GO TO 13
|
|
KP1=int(P1)
|
|
IF(KP1.NE. INT(P2+.5))GO TO 13
|
|
PMIN=KP1
|
|
GO TO 13
|
|
12 continue
|
|
xk3=k3
|
|
P1=XK3*SCALE(KSCALE)
|
|
nnni1n=nnn(i+1+6*(N-1))
|
|
c nnni1n=nnn(i+1,n)
|
|
K1=NNNI1N/100000
|
|
KSCALE=MOD(NNNI1N,10)
|
|
xk1=k1
|
|
P2=XK1*SCALE(KSCALE)
|
|
13 PART(ION)= MAX (PMIN,P1+(P2-P1)*DT)
|
|
IF(GGG.EQ.0..OR.POTLO(ION).LT..1.OR.T.LT.T2000*4.)GO TO 18
|
|
IF(T.GT.(T2000*11.)) TV=(T2000*11.)*TVCON
|
|
D1=.1/TV
|
|
D2=POTLO(ION)/TV
|
|
DX=SQRT(HIONEV*Z*Z/TV/D2)**3
|
|
PART(ION)=PART(ION)+GGG*EXP(-IP(ION)/TV)*
|
|
* (DX*(THIRD+(ONE-(HALF+(X18+D2*X120)*D2)*D2)*D2)-
|
|
* DX*(THIRD+(ONE-(HALF+(X18+D1*X120)*D1)*D1)*D1))
|
|
18 CONTINUE
|
|
u=part(jnion)
|
|
RETURN
|
|
END
|
|
c
|
|
c ******************************************************************
|
|
c
|
|
subroutine frac1
|
|
c ================
|
|
c
|
|
include 'PARAMS.FOR'
|
|
include 'MODELP.FOR'
|
|
parameter (mtemp=100,melec=60,mion1=30)
|
|
dimension xxt(mdepth),xxe(mdepth)
|
|
dimension kt0(mdepth),kn0(mdepth)
|
|
common/fracop/frac(mtemp,melec,mion1),fracm(mtemp,melec),
|
|
* itemp(mtemp),ntt
|
|
c
|
|
do id=1,nd
|
|
xxt(id)=dlog10(temp(id))
|
|
kt0(id)=2*int(20.*xxt(id))
|
|
xxe(id)=dlog10(elec(id))
|
|
kn0(id)=int(2.*xxe(id))
|
|
end do
|
|
c
|
|
DO 20 IAT=1,30
|
|
iatnum=iat
|
|
call fractn(iatnum)
|
|
if(iatnum.le.0) goto 20
|
|
do id=1,nd
|
|
if(kt0(id).lt.itemp(1)) then
|
|
kt1=1
|
|
write(6,611) id,temp(id)
|
|
611 format(' (FRACOP) Extrapol. in T (low)',i4,f7.0)
|
|
goto 41
|
|
endif
|
|
if(kt0(id).ge.itemp(ntt)) then
|
|
kt1=ntt-1
|
|
write(6,612) id,temp(id)
|
|
612 format(' (FRACOP) Extrapol. in T (high)',i4,f12.0)
|
|
goto 41
|
|
endif
|
|
do 40 it=1,ntt
|
|
if(kt0(id).eq.itemp(it)) then
|
|
kt1=it
|
|
goto 41
|
|
endif
|
|
40 continue
|
|
41 continue
|
|
if(kn0(id).lt.1) then
|
|
kn1=1
|
|
goto 49
|
|
endif
|
|
if(kn0(id).ge.60) then
|
|
kn1=59
|
|
write(6,614) id,xxe(id)
|
|
614 format(' (FRACOP) Extrapol. in Ne (high)',i4,f9.4)
|
|
goto 49
|
|
endif
|
|
kn1=kn0(id)
|
|
49 continue
|
|
xt1=0.025*itemp(kt1)
|
|
dxt=0.05
|
|
at1=(xxt(id)-xt1)/dxt
|
|
xn1=0.5*kn1
|
|
dxn=0.5
|
|
an1=(xxe(id)-xn1)/dxn
|
|
do ion=1,mion1
|
|
x11=frac(kt1,kn1,ion)
|
|
x21=frac(kt1+1,kn1,ion)
|
|
x12=frac(kt1,kn1+1,ion)
|
|
x22=frac(kt1+1,kn1+1,ion)
|
|
x1221=x11*x21*x12*x22
|
|
if(x1221.eq.0.) then
|
|
xx1=x11+at1*(x21-x11)
|
|
xx2=x12+at1*(x22-x12)
|
|
rrx=xx1+an1*(xx2-xx1)
|
|
else
|
|
x11=dlog10(x11)
|
|
x21=dlog10(x21)
|
|
x12=dlog10(x12)
|
|
x22=dlog10(x22)
|
|
xx1=x11+at1*(x21-x11)
|
|
xx2=x12+at1*(x22-x12)
|
|
rrx=xx1+an1*(xx2-xx1)
|
|
rrx=exp(2.3025851*rrx)
|
|
endif
|
|
rrr(id,ion,iat)=rrx*abndd(iat,id)*
|
|
* dens(id)/wmm(id)/ytot(id)
|
|
end do
|
|
end do
|
|
20 CONTINUE
|
|
c
|
|
return
|
|
end
|
|
c
|
|
c ******************************************************************
|
|
c
|
|
subroutine fractn(iatnum)
|
|
c =========================
|
|
c
|
|
implicit double precision (a-h,o-z)
|
|
parameter (mtemp=100,
|
|
* melec= 60,
|
|
* mion1=30,
|
|
* mdat = 17)
|
|
parameter (inp=71)
|
|
dimension frac0(-1:mion1),ioo(-1:mion1),idat(mion1)
|
|
dimension gg(mion1,mdat),g0(mion1),z0(-1:mion1)
|
|
dimension uu(mion1,mdat),u0(mion1)
|
|
dimension u6(6),u7(7),u8(8),u10(10),u11(11)
|
|
dimension u12(12),u13(13),u14(14),u16(16),u18(18),u20(20)
|
|
dimension u24(24),u25(25),u26(26),u28(28)
|
|
equivalence (u6(1),uu(1,3)),(u7(1),uu(1,4)),(u8(1),uu(1,5))
|
|
equivalence (u10(1),uu(1,6)),(u11(1),uu(1,7)),(u12(1),uu(1,8))
|
|
equivalence (u13(1),uu(1,9)),(u14(1),uu(1,10)),(u16(1),uu(1,11))
|
|
equivalence (u18(1),uu(1,12)),(u20(1),uu(1,13)),(u24(1),uu(1,14))
|
|
equivalence (u25(1),uu(1,15)),(u26(1),uu(1,16)),(u28(1),uu(1,17))
|
|
common/fracop/frac(mtemp,melec,mion1),fracm(mtemp,melec),
|
|
* itemp(mtemp),ntt
|
|
data idat / 1, 2, 0, 0, 0, 3, 4, 5, 0, 6,
|
|
* 7, 8, 9,10, 0,11, 0,12, 0,13,
|
|
* 0, 0, 0,14,15,16, 0,17, 0, 0/
|
|
data gg/2.,29*0.,2.,1.,28*0.,
|
|
* 2.,1.,2.,1.,6.,9.,24*0.,2.,1.,2.,1.,6.,9.,4.,23*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,22*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,20*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,19*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,18*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,17*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,16*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,14*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,6.,1.,
|
|
* 12*0.,2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,
|
|
* 6.,1.,2.,1.,10*0.,2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,
|
|
* 6.,9.,4.,9.,6.,1.,10.,21.,28.,25.,6.,7.,6*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,
|
|
* 6.,1.,10.,21.,28.,25.,6.,7.,6.,5*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,
|
|
* 6.,1.,10.,21.,28.,25.,6.,25.,30.,25.,4*0.,
|
|
* 2.,1.,2.,1.,6.,9.,4.,9.,6.,1.,2.,1.,6.,9.,4.,9.,
|
|
* 6.,1.,10.,21.,28.,25.,6.,25.,28.,21.,10.,21.,0.,0./
|
|
data uu(1,1)/109.6787/
|
|
data uu(1,2)/198.3108/
|
|
data uu(2,2)/438.9089/
|
|
data u6/90.82,196.665,386.241,520.178,3162.395,3952.061/
|
|
data u7/117.225,238.751,382.704,624.866,789.537,4452.758,5380.089/
|
|
data u8/109.837,283.24,443.086,624.384,918.657,1114.008,5963.135,
|
|
* 7028.393/
|
|
data u10/173.93,330.391,511.8,783.3,1018.,1273.8,1671.792,
|
|
* 1928.462,9645.005,10986.876/
|
|
data u11/41.449,381.395,577.8,797.8,1116.2,1388.5,1681.5,2130.8,
|
|
* 2418.7,11817.061,13297.676/
|
|
data u12/61.671,121.268,646.41,881.1,1139.4,1504.3,1814.3,2144.7,
|
|
* 2645.2,2964.4,14210.261,15829.951/
|
|
data u13/48.278,151.86,229.446,967.8,1239.8,1536.3,1947.3,2295.4,
|
|
* 2663.4,3214.8,3565.6,16825.022,18584.138/
|
|
data u14/65.748,131.838,270.139,364.093,1345.1,1653.9,1988.4,
|
|
* 2445.3,2831.9,3237.8,3839.8,4222.4,19661.693,21560.63/
|
|
data u16/83.558,188.2,280.9,381.541,586.2,710.184,2265.9,2647.4,
|
|
* 3057.7,3606.1,4071.4,4554.3,5255.9,5703.6,26002.663,
|
|
* 28182.535/
|
|
data u18/127.11,222.848,328.6,482.4,605.1,734.04,1002.73,1157.08,
|
|
* 3407.3,3860.9,4347.,4986.6,5533.8,6095.5,6894.2,7404.4,
|
|
* 33237.173,35699.936/
|
|
data u20/49.306,95.752,410.642,542.6,681.6,877.4,1026.,1187.6,
|
|
* 1520.64,1704.047,4774.,5301.,5861.,6595.,7215.,7860.,
|
|
* 8770.,9338.,41366.,44177.41/
|
|
data u24/54.576,132.966,249.7,396.5,560.2,731.02,1291.9,1490.,
|
|
* 1688.,1971.,2184.,2404.,2862.,3098.52,8151.,8850.,
|
|
* 9560.,10480.,11260.,12070.,13180.,13882.,60344.,63675.9/
|
|
data u25/59.959,126.145,271.55,413.,584.,771.1,961.44,1569.,
|
|
* 1789.,2003.,2307.,2536.,2771.,3250.,3509.82,9152.,
|
|
* 9872.,10620.,11590.,12410.,13260.,14420.,15162.,
|
|
* 65660.,69137.4/
|
|
data u26/63.737,130.563,247.22,442.,605.,799.,1008.,1218.38,
|
|
* 1884.,2114.,2341.,2668.,2912.,3163.,3686.,3946.82,
|
|
* 10180.,10985.,11850.,12708.,13620.,14510.,15797.,
|
|
* 16500.,71203.,74829.6/
|
|
data u28/61.6,146.542,283.8,443.,613.5,870.,1070.,1310.,1560.,
|
|
* 1812.,2589.,2840.,3100.,3470.,3740.,4020.,4606.,
|
|
* 4896.2,12430.,13290.,14160.,15280.,16220.,17190.,
|
|
* 18510.,19351.,82984.,86909.4/
|
|
c
|
|
if(idat(iatnum).eq.0) then
|
|
write(6,600) iatnum
|
|
600 format(' OP data for element no. ',i3,' do not exist')
|
|
iatnum=-1
|
|
return
|
|
end if
|
|
c
|
|
g0(iatnum+1)=1.
|
|
do i=1,iatnum
|
|
ig0=iatnum-i+1
|
|
g0(ig0)=gg(i,idat(iatnum))
|
|
u0(i)=uu(i,idat(iatnum))*1000.
|
|
enddo
|
|
c
|
|
if(iatnum.eq.1) open(inp,file='ioniz.dat',status='old')
|
|
do 10 it=1,mtemp
|
|
do 10 ie=1,melec
|
|
fracm(it,ie)=0.
|
|
do 10 ion=1,mion1
|
|
frac(it,ie,ion)=0.
|
|
10 continue
|
|
c
|
|
read(inp,*)
|
|
read(inp,*) it0,it1,itstp
|
|
ntt=(it1-it0)/itstp+1
|
|
c
|
|
do it=1,ntt
|
|
read(inp,*) itt,ie0,ie1,iestp
|
|
itemp(it)=itt
|
|
net=(ie1-ie0)/iestp+1
|
|
t=exp(2.3025851*0.025*itt)
|
|
safac0=sqrt(t)*t/2.07d-16
|
|
tkcm=0.69496*t
|
|
do ie=1,net
|
|
read(inp,601) iee,ion0,ion1,
|
|
* (ioo(i),frac0(i),i=ion0,min(ion1,ion0+3))
|
|
ane=exp(2.3025851*0.25*iee)
|
|
safac=safac0/ane
|
|
nio=ion1-ion0
|
|
if(nio.ge.3) then
|
|
nlin=nio/4
|
|
do ilin=1,nlin
|
|
read(inp,602) (ioo(i),frac0(i),
|
|
* i=ion0+4*ilin,min(ion1,ion0+4*ilin+3))
|
|
end do
|
|
end if
|
|
ieind=iee/2
|
|
do ion=ion0,ion1
|
|
if(ion.lt.iatnum) then
|
|
if(ion.eq.ion0) then
|
|
z0(ion)=g0(iatnum-ion)
|
|
else
|
|
z0(ion)=frac0(ion)/frac0(ion-1)*safac*z0(ion-1)
|
|
z0(ion)=z0(ion)*exp(-u0(iatnum-ion)/tkcm)
|
|
endif
|
|
frac(it,ieind,iatnum-ion)=frac0(ion)/z0(ion)
|
|
else
|
|
u0hm=6090.5
|
|
z0hm=frac0(ion)/frac0(ion-1)*safac
|
|
z0hm=z0hm*exp(-u0hm/tkcm)
|
|
fracm(it,ieind)=frac0(ion)/z0hm
|
|
end if
|
|
end do
|
|
end do
|
|
end do
|
|
601 format(3i4,2x,4(i4,1x,e9.3))
|
|
602 format(14x,4(i4,1x,e9.3))
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE DWNFR0(ID)
|
|
C =====================
|
|
C
|
|
C Auxiliary quantities for dissolved fractions
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (UN=1.,SIXTH=UN/6.,CCOR=0.09)
|
|
parameter (p1=0.1402,p2=0.1285,p3=un,p4=3.15,p5=4.)
|
|
parameter (f23=-2./3.)
|
|
C
|
|
ANE=ELEC(ID)
|
|
ELEC23(ID)=EXP(F23*LOG(ANE))
|
|
ANES=EXP(SIXTH*LOG(ANE))
|
|
ACOR=CCOR*ANES/SQRT(TEMP(ID))
|
|
X=EXP(P4*LOG(UN+P3*ACOR))
|
|
DWC2(ID)=P2*X
|
|
A3=ACOR*ACOR*ACOR
|
|
DO 10 IZZ=1,MZZ
|
|
Z3(IZZ)=IZZ*IZZ*IZZ
|
|
DWC1(IZZ,ID)=P1*(X+P5*(IZZ-1.)*A3)
|
|
10 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE DWNFR1(FR,FR0,ID,IZZ,DW1)
|
|
C ====================================
|
|
C
|
|
C dissolved fraction for frequency FR
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
PARAMETER (UN=1.,TKN=3.01,CKN=5.33333333,CB=8.59d14)
|
|
PARAMETER (SQFRH=5.734152D7)
|
|
parameter (a0=0.529177e-8,wa0=-3.1415926538/6.*a0*a0*a0)
|
|
C
|
|
IF(FR.LT.FR0) THEN
|
|
XN=SQFRH*IZZ/SQRT(FR0-FR)
|
|
if(xn.le.tkn) then
|
|
xkn=un
|
|
else
|
|
xn1=un/(xn+un)
|
|
xkn=ckn*xn*xn1*xn1
|
|
end if
|
|
BETA=CB*Z3(IZZ)*XKN/(XN*XN*XN*XN)*ELEC23(ID)
|
|
beta=beta*bergfc
|
|
BETA3=BETA*BETA*BETA
|
|
BETA32=SQRT(BETA3)
|
|
F=(DWC1(IZZ,ID)*BETA3)/(UN+DWC2(ID)*BETA32)
|
|
c
|
|
c contribution from neutral particles
|
|
c
|
|
xn2=xn*xn+un
|
|
xnh=0.
|
|
xnhe1=0.
|
|
if(ielh.gt.0) xnh=popul(nfirst(ielh),id)
|
|
if(ielhe1.gt.0) xnhe1=popul(nfirst(ielhe1),id)
|
|
w0=exp(wa0*xn2*xn2*xn2*(xnh+xnhe1))
|
|
W0=1.
|
|
c
|
|
DW1=UN-F/(UN+F)*w0
|
|
ELSE
|
|
DW1=UN
|
|
END IF
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE CHCKAB
|
|
C
|
|
C check input abumdances of explicit atoms (unit 5) and those
|
|
C which follow from the models atmosphere (unit 7) obtained by
|
|
C summing all populations and upper sums
|
|
C The program stops if it finds discrepancy more than 10 %
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
dimension sumpop(matom),sumiat(matom)
|
|
c
|
|
IST=0
|
|
DO ID1=1,3
|
|
IF(ID1.EQ.1) ID=1
|
|
IF(ID1.EQ.2) ID=46
|
|
IF(ID1.EQ.3) ID=ND
|
|
CALL WNSTOR(ID)
|
|
ANE=ELEC(ID)
|
|
CALL SABOLF(ID)
|
|
DO IAT=1,NATOM
|
|
SUM=0.
|
|
sump=0.
|
|
DO I=N0A(IAT),NKA(IAT)
|
|
IL=ILK(I)
|
|
A=1.
|
|
IF(IL.GT.0) A=1.+ANE*USUM(IL)
|
|
SUM=SUM+A*POPUL(I,ID)
|
|
SUMP=SUMP+POPUL(I,ID)
|
|
END DO
|
|
SUMIAT(IAT)=SUM
|
|
SUMPOP(IAT)=SUMP
|
|
END DO
|
|
WRITE(6,600) ID
|
|
DO IAT=1,NATOM
|
|
X=SUMIAT(IAT)/SUMIAT(IATREF)
|
|
WRITE(6,601) IAT,X,abund(iat,id),SUMPOP(IAT)/SUMPOP(IATREF)
|
|
IF(X/abund(iat,id).GT.1.1.OR.X/abund(iat,id).LT.0.9) ist=ist+1
|
|
END DO
|
|
END DO
|
|
IF(IST.GT.0) THEN
|
|
WRITE(6,602)
|
|
STOP
|
|
END IF
|
|
600 FORMAT(' check of abundances (id =',i3/
|
|
* ' computed from model atmosphere - input abundances'/)
|
|
601 format(i5,1p3e20.3)
|
|
602 format(' ERROR !!! - inconsistent abundances'/)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
subroutine molini
|
|
c =================
|
|
c
|
|
c Initialization of the molecular equilibrium
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
common/moltst/pfmol(600,mdepth),anmol(600,mdepth),
|
|
* pfato(100,mdepth),anato(100,mdepth),
|
|
* pfion(100,mdepth),anion(100,mdepth)
|
|
dimension hpo(mdepth)
|
|
c
|
|
aeinit=1.0
|
|
c
|
|
do 10 id=1,nd
|
|
t=temp(id)
|
|
tln=log(t)*1.5
|
|
thl=11605./t
|
|
t32=exp(tln)
|
|
|
|
do i=1,MMOLEC
|
|
rrmol(i,id)=0.
|
|
end do
|
|
|
|
hpo(id)=DENS(ID)/WMM(ID)/YTOT(ID)
|
|
|
|
if(t.gt.tmolim) go to 10
|
|
HPOP=DENS(ID)/WMM(ID)/YTOT(ID)
|
|
|
|
an=dens(id)/wmm(id)+elec(id)
|
|
aeinit=0.1*an
|
|
if(t.lt.4000.) aeinit=0.01*an
|
|
call moleq(id,t,an,aeinit,ane,0)
|
|
|
|
|
|
c next initial guess will be the last ane determined for
|
|
c previous depth point
|
|
|
|
aeinit=ane
|
|
c
|
|
if (id.eq.idstd) then
|
|
write(6,600)
|
|
nmol=nmolec
|
|
if(id.eq.1) nmol=32
|
|
do i=1,nmol
|
|
write(6,601) i, cmol(i), rrmol(i,id), rrmol(i,id)/hpop
|
|
end do
|
|
end if
|
|
600 format(/ 'Molecular number densities at the standard depth'/)
|
|
601 format(i4,1x,A8,1x,1pe12.2,1x,e12.2)
|
|
|
|
10 continue
|
|
|
|
|
|
c update atomic populations once molecular densities are calculated
|
|
|
|
if(imode.lt.-4) then
|
|
do i=1,nlevel
|
|
iat=numat(iatm(i))
|
|
ion=iz(iel(i))
|
|
ii=nfirst(iel(i))
|
|
ener=(enion(ii)-enion(i))/bolk
|
|
if((enion(i).eq.0).and.(ilk(i).gt.0)) then
|
|
ener=0.
|
|
ion=ion+1
|
|
end if
|
|
if(ifwop(i).ge.0) then
|
|
do id=1,nd
|
|
popul(i,id)=rrr(id,ion,iat)*g(i)
|
|
* *exp(-ener/temp(id))
|
|
if(iat.eq.1.and.ion.eq.0) popul(i,id)=anhm(id)
|
|
end do
|
|
endif
|
|
end do
|
|
end if
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INMOLI(ILIST)
|
|
C ========================
|
|
C
|
|
C read in the input molecular line list,
|
|
C selection of lines that may contribute,
|
|
C set up auxiliary fields containing line parameters,
|
|
C
|
|
C Input of line data - unit 20:
|
|
C
|
|
C For each line, one (or two) records, containing:
|
|
C
|
|
C ALAM - wavelength (in nm)
|
|
C ANUM - code of the modelcule (as in Kurucz)
|
|
C (eg. 101.00 = H2; 607.00 = CN)
|
|
C GF - log gf
|
|
C EXCL - excitation potential of the lower level (in cm*-1)
|
|
C GR - gamma(rad)
|
|
C GS - gamma(Stark)
|
|
C GW - gamma(VdW)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/NXTINM/ALMM00,ALSM00
|
|
common/alendm/alend(mmlist)
|
|
common/brdstd/gsstd,gwstd
|
|
character*80 dum
|
|
dimension x(9)
|
|
PARAMETER (PI4=7.95774715E-2)
|
|
PARAMETER (C1 = 2.3025851,
|
|
* C2 = 4.2014672,
|
|
* C3 = 1.4387886,
|
|
* CNM = 2.997925D17,
|
|
* EXT0 = 3.17,
|
|
* UN = 1.0,
|
|
* TEN = 10.,
|
|
* HUND = 1.D2,
|
|
* TENM4 = 1.D-4,
|
|
* TENM8 = 1.D-8,
|
|
* OP4 = 0.4,
|
|
* AGR0=2.4734E-22,
|
|
* XEH=13.595, XET=8067.6, XNF=25.,
|
|
* R02=2.5, R12=45., VW0=4.5E-9)
|
|
C
|
|
c DATA INLSET /0/
|
|
C
|
|
if(imode.ne.-3.and.temp(idstd).gt.tmolim) return
|
|
IUNIT=IUNITM(ILIST)
|
|
|
|
if(ibin(ilist).eq.0) then
|
|
open(unit=iunit,file=amlist(ilist),status='old')
|
|
else
|
|
open(unit=iunit,file=amlist(ilist),form='unformatted',
|
|
* status='old')
|
|
end if
|
|
C
|
|
c define a conversion table between Kurucz notation and Tsuji table
|
|
c through array MOLIND
|
|
C
|
|
do i=1,11000
|
|
molind(i)=0
|
|
end do
|
|
molind(101)=2
|
|
molind(106)=5
|
|
molind(107)=12
|
|
molind(108)=4
|
|
molind(111)=122
|
|
molind(112)=32
|
|
molind(114)=17
|
|
molind(116)=16
|
|
molind(120)=34
|
|
molind(124)=198
|
|
molind(126)=214
|
|
molind(606)=8
|
|
molind(607)=7
|
|
molind(608)=6
|
|
molind(614)=21
|
|
molind(616)=20
|
|
molind(707)=9
|
|
molind(708)=11
|
|
molind(714)=24
|
|
molind(716)=23
|
|
molind(808)=10
|
|
molind(812)=126
|
|
molind(813)=134
|
|
molind(814)=25
|
|
molind(816)=26
|
|
molind(820)=179
|
|
molind(822)=29
|
|
molind(823)=30
|
|
molind(10108)=3
|
|
c
|
|
c iunit=19+ilist
|
|
C
|
|
c ================================
|
|
c detect the type of the line list
|
|
c
|
|
ivdwli(ilist)=0
|
|
ibroad=1
|
|
c
|
|
c text list
|
|
c
|
|
if(ibin(ilist).eq.0) then
|
|
read(iunit,'(a80)') dum
|
|
read(dum,*,iostat=kst1) (x(i),i=1,9)
|
|
np=9
|
|
if(kst1.ne.0) then
|
|
read(dum,*,iostat=kst2) (x(i),i=1,7)
|
|
np=7
|
|
if(kst2.ne.0) then
|
|
read(dum,*,iostat=kst3) (x(i),i=1,4)
|
|
ibroad=0
|
|
np=4
|
|
if(kst3.ne.0) then
|
|
write(*,*) 'no applicable format of line list',ilist
|
|
end if
|
|
end if
|
|
end if
|
|
if(np.eq.9) ivdwli(ilist)=1
|
|
else
|
|
c
|
|
c binary list
|
|
c
|
|
read(iunit,err=110) (x(i),i=1,9)
|
|
np=9
|
|
go to 150
|
|
110 continue
|
|
read(iunit,err=120) (x(i),i=1,7)
|
|
np=7
|
|
go to 150
|
|
120 continue
|
|
read(iunit,err=130) (x(i),i=1,4)
|
|
ibroad=0
|
|
np=4
|
|
go to 150
|
|
130 continue
|
|
150 continue
|
|
if(np.eq.9) ivdwli(ilist)=1
|
|
if(np.eq.9) ivdwli(ilist)=1
|
|
end if
|
|
c =========================
|
|
c
|
|
ALAST=CNM/FRLAST
|
|
ALASTM(ILIST)=ALAST
|
|
IL=0
|
|
IF(NXTSEM(ILIST).EQ.1) THEN
|
|
ALAM0=ALM00
|
|
ALASTM(ILIST)=ALST00
|
|
FRLASM(ILIST)=CNM/ALASTM(ILIST)
|
|
NXTSEM(ILIST)=0
|
|
REWIND IUNIT
|
|
END IF
|
|
ALMM00=ALAM0
|
|
c ALASTM(ILIST)=CNM/FRLAST
|
|
c FRLASM(ILIST)=CNM/ALASTM(ILIST)
|
|
DOPSTD=1.E7/ALAM0*DSTD
|
|
DOPLAM=ALAM0*ALAM0/CNM*DOPSTD
|
|
AVAB=ABSTD(IDSTD)*RELOP
|
|
ASTD=1.0
|
|
c IF(GRAV.GT.6.) ASTD=0.1
|
|
CUTOFF=CUTOF0
|
|
ALAST=CNM/FRLAST
|
|
C
|
|
C first part of reading line list - read only lambda, and
|
|
C skip all lines with wavelength below ALAM0-CUTOFF
|
|
C
|
|
REWIND IUNIT
|
|
ALAM=0.
|
|
IJC=2
|
|
c
|
|
7 if(ibin(ilist).eq.0) then
|
|
READ(IUNIT,510) ALAM
|
|
else
|
|
read(iunit) alam
|
|
end if
|
|
510 FORMAT(F10.4)
|
|
IF(ALAM.LT.ALAM0-CUTOFF) GO TO 7
|
|
BACKSPACE(IUNIT)
|
|
GO TO 10
|
|
c
|
|
c read the line list
|
|
c
|
|
ill=0
|
|
8 continue
|
|
10 continue
|
|
ill=ill+1
|
|
c ivdwli(ilist)=1
|
|
if(ibin(ilist).eq.0) then
|
|
c if(ivdwli(ilist).ne.0) then
|
|
if(np.eq.9) then
|
|
read(iunit,*,end=100) alam,anum,gf,excl,gr,gh2,xnh2,ghe,xnhe
|
|
else if(np.eq.7) then
|
|
READ(IUNIT,*,END=100,err=8) ALAM,ANUM,GF,EXCL,GR,GS,GW
|
|
else
|
|
read(iunit,*,end=100,err=8) alam,anum,gf,excl
|
|
gr=2.4e13/alam**2
|
|
gs=gsstd
|
|
gw=gwstd
|
|
end if
|
|
else
|
|
c if(ivdwli(ilist).ne.0) then
|
|
if(np.eq.9) then
|
|
read(iunit,end=100) alam,anum,gf,excl,gr,gh2,xnh2,ghe,xnhe
|
|
else if(np.eq.7) then
|
|
READ(IUNIT,END=100) ALAM,ANUM,GF,EXCL,GR,GS,GW
|
|
else
|
|
read(iunit,end=100) alam,anum,gf,excl
|
|
gr=2.4e13/alam**2
|
|
gs=gsstd
|
|
gw=gwstd
|
|
end if
|
|
end if
|
|
C
|
|
c change wavelength to vacuum for lambda > 2000
|
|
c
|
|
if(alam.gt.200..and.vaclim.gt.2000.) then
|
|
wl0=alam*10.
|
|
ALM=1.E8/(WL0*WL0)
|
|
XN1=64.328+29498.1/(146.-ALM)+255.4/(41.-ALM)
|
|
WL0=WL0*(XN1*1.D-6+UN)
|
|
alam=wl0*0.1
|
|
END IF
|
|
C
|
|
C first selection : for a given interval
|
|
C
|
|
IF(ALAM.GT.ALASTM(ILIST)+CUTOFF) GO TO 100
|
|
C
|
|
C second selection : for line strengths
|
|
C
|
|
FR0=CNM/ALAM
|
|
icod=int(anum+tenm4)
|
|
|
|
c IF(ICOD.EQ.823) go to 10
|
|
|
|
imol=molind(icod)
|
|
if(imol.le.0.or.imol.gt.nmolec) go to 10
|
|
EXCL=ABS(EXCL)
|
|
GFP=C1*GF-C2
|
|
EPP=C3*EXCL
|
|
gx=gfp-epp/tstd
|
|
ab0=0.
|
|
c
|
|
if(ndstep.eq.0.and.ifwin.eq.0) then
|
|
c
|
|
c old procedure for line rejection
|
|
c
|
|
if(gx.gt.-30)
|
|
* AB0=EXP(GFP-EPP/TSTD)*RRMOL(IMOL,IDSTD)/DOPSTD/AVAB
|
|
IF(AB0.LT.UN) GO TO 10
|
|
else
|
|
c
|
|
c new procedure for line rejection
|
|
c
|
|
do ijcn=ijc,nfreqc
|
|
if(fr0.ge.freqc(ijcn)) go to 12
|
|
end do
|
|
12 continue
|
|
ijc=ijcn
|
|
if(ijc.gt.nfreqc) ijc=nfreqc
|
|
c
|
|
tkm=1.65e8/ammol(imol)
|
|
DP0=3.33564E-11*FR0
|
|
do id=1,nd,ndstep
|
|
td=temp(id)
|
|
gx=gfp-epp/td
|
|
ab0=0.
|
|
if(gx.gt.-30) then
|
|
dops=dp0*sqrt(tkm*td+vturb(id))
|
|
AB0=EXP(gx)*RRMOL(IMOL,ID)/(DOPS*abstdw(ijc,id)*relop)
|
|
end if
|
|
if(ab0.ge.un) go to 15
|
|
end do
|
|
GO TO 10
|
|
end if
|
|
c
|
|
C truncate line list if there are more lines than maximum allowable
|
|
C (given by MLIN0 - see include file LINDAT.FOR)
|
|
C
|
|
15 CONTINUE
|
|
IL=IL+1
|
|
IF(IL.GT.MLINM0) THEN
|
|
WRITE(6,601) ALAM
|
|
IL=MLINM0
|
|
ALASTM(ILIST)=CNM/FREQM(IL,ILIST)-CUTOFF
|
|
FRLASM(ILIST)=CNM/ALASTM(ILIST)
|
|
NXTSEM(ILIST)=1
|
|
GO TO 100
|
|
END IF
|
|
C
|
|
C =============================================
|
|
C line is selected, set up necessary parameters
|
|
C =============================================
|
|
C
|
|
C evaluation of EXTIN0 - the distance (in delta frequency) where
|
|
C the line is supposed to contribute to the total opacity
|
|
C
|
|
EX0=AB0*ASTD*10.
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
EXTIN0=EXT*DOPSTD
|
|
C
|
|
C store parameters for selected lines
|
|
C
|
|
FREQM(IL,ILIST)=FR0
|
|
EXCLM(IL,ILIST)=real(EPP)
|
|
GFM(IL,ILIST)=real(GFP)
|
|
EXTINM(IL,ILIST)=real(EXTIN0)
|
|
INDATM(IL,ILIST)=imol
|
|
C
|
|
C ****** line broadening parameters *****
|
|
C assuming for Stark 1.e-8*effnsq**5/2, with effnsq=25
|
|
C
|
|
GRM(IL,ILIST)=real(GR*PI4)
|
|
GSM(IL,ILIST)=real(GS*PI4*3.125e-5)
|
|
GWM(IL,ILIST)=real(GW*PI4)
|
|
|
|
c IF(imol.eq.30) gwm(il,ilist)=0.
|
|
|
|
|
|
if(ivdwli(ilist).ne.0) then
|
|
gvdwh2(il,ilist)=real(gh2)
|
|
gexph2(il,ilist)=real(xnh2)
|
|
gvdwhe(il,ilist)=real(ghe)
|
|
gexphe(il,ilist)=real(xnhe)
|
|
gsm(il,ilist)=0.
|
|
gwm(il,ilist)=0.
|
|
end if
|
|
C
|
|
GO TO 10
|
|
100 NLINM0(ILIST)=IL
|
|
nlinmt(ilist)=nlinmt(ilist)+nlinm0(ilist)
|
|
alend(ilist)=cnm/fr0
|
|
C
|
|
xln=float(il)*1.e-6
|
|
WRITE(6,611) IUNIT,trim(amlist(ilist)),XLN
|
|
611 FORMAT(/' --------------------------------------------'/
|
|
*' MOLECULAR LINES - FROM UNIT ',i3,
|
|
*', FILE ',a,':',f8.3,' M'/
|
|
*' --------------------------------------------'/)
|
|
601 FORMAT('0 **** MORE LINES THAN MLINM0, LINE LIST TRUNCATED '/
|
|
*' AT LAMBDA',F15.4,' NM'/)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE MOLSET(ILIST)
|
|
C ========================
|
|
C
|
|
C Selection of molecular lines that may contribute,
|
|
C set up auxiliary fields containing line parameters.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
common/alendm/alend(mmlist)
|
|
SAVE IMLAST
|
|
C
|
|
DATA CNM /2.997925D17/
|
|
C
|
|
if(inactm(ilist).ne.0) return
|
|
IL0=0
|
|
IPRSEM(ILIST)=0
|
|
NLINM=0
|
|
IREADM(ILIST)=1
|
|
IF(IBLANK.LE.1.OR.IMODE.EQ.1.OR.IMODE.EQ.-1) IREADM(ILIST)=0
|
|
IF(IBLANK.LE.1) APREV=0.
|
|
ALA0=CNM/FREQ(1)
|
|
ALA1=CNM/FREQ(2)
|
|
c
|
|
c skip if current wavelength larger than the largest wavelngth in the
|
|
c line list
|
|
c
|
|
if(ala0.gt.alend(ilist)) then
|
|
inactm(ilist)=1
|
|
return
|
|
end if
|
|
c
|
|
FRMINM=CNM/ALA0
|
|
FRM=FRMINM
|
|
SPACE=SPACE0
|
|
IF(ALAMC.GT.0.) SPACE=SPACE0*ALA0/ALAMC
|
|
IF(SPACE0.LT.0.) SPACE=-SPACE0
|
|
|
|
CUTOFF=CUTOF0*0.2
|
|
DOPSTD=1.E7/ALA0*DSTD
|
|
DISTAN=0.15*DOPSTD
|
|
SPAC=3.E16/ALA0/ALA0*SPACE
|
|
DISTA0=0.14*SPAC
|
|
IF(IBLANK.GE.2.AND.IMODE.EQ.-1) IL0=IMLAST
|
|
FRLI0=FRMINM
|
|
ASTD=1.0
|
|
AVAB=ABSTD(IDSTD)*RELOP
|
|
C
|
|
20 CONTINUE
|
|
C
|
|
C set up indices of lines
|
|
C IL0 - is the current index of line in the numbering of all lines
|
|
C
|
|
IF(IREADM(ILIST).EQ.1) THEN
|
|
IPRSEM(ILIST)=IPRSEM(ILIST)+1
|
|
IL0=INMLIP(IPRSEM(ILIST),ILIST)
|
|
IF(FREQM(IL0,ILIST).LT.FRMINM) THEN
|
|
IREADM(ILIST)=0
|
|
IL0=INMLIP(IPRSEM(ILIST)-1,ILIST)+1
|
|
END IF
|
|
ELSE
|
|
IL0=IL0+1
|
|
END IF
|
|
IF(IL0.GT.NLINM0(ILIST)) GO TO 210
|
|
FRLIM=FRLI0
|
|
FR0=FREQM(IL0,ILIST)
|
|
ALAM=CNM/FR0
|
|
C
|
|
IF(ALAM.LT.ALA0-CUTOFF) GO TO 20
|
|
IF(ALAM.GT.ALA1+CUTOFF) GO TO 210
|
|
C
|
|
C SECOND SELECTION : FOR LINE STRENGHTS
|
|
C
|
|
EXT=EXTINM(IL0,ILIST)
|
|
FRLI0=FR0-EXT-SPAC
|
|
IF(FRLI0.GT.FRLIM) FRLI0=FRLIM
|
|
IF(ALAM.LT.ALA0.AND.FR0-FRMINM.GT.EXT+SPAC) GO TO 20
|
|
IF(FREQ(NFREQS)-FR0.GT.EXT+SPAC) GO TO 20
|
|
C
|
|
NLINM=NLINM+1
|
|
if(nlinm.gt.mlinm) then
|
|
write(*,*) 'nlinm,mlinm',nlinm,mlinm
|
|
call quit('too many molecular lines in a set')
|
|
end if
|
|
INMLIN(NLINM,ILIST)=IL0
|
|
GO TO 20
|
|
c
|
|
c frequency indices of the line centers
|
|
c
|
|
210 CONTINUE
|
|
XX=FREQ(2)-FREQ(1)
|
|
DFRCON=NFREQ-3
|
|
DFRCON=-DFRCON/XX
|
|
IFRCON=INT(DFRCON)
|
|
DO 255 IL=1,NLINM
|
|
fr0=freqm(inmlin(il,ilist),ILIST)
|
|
XJC=3.+DFRCON*(FREQ(1)-FR0)
|
|
IJC=INT(XJC)
|
|
IJCMTR(IL,ILIST)=IJC
|
|
if(ijc.le.3.or.ijc.ge.nfreq) go to 255
|
|
if(fr0.lt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=freq(ijc0)-fr0
|
|
252 ijc0=ijc0+1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0+1
|
|
dfr0=dfr
|
|
go to 252
|
|
end if
|
|
else if(fr0.gt.freq(ijc)) then
|
|
ijc0=ijc
|
|
dfr0=fr0-freq(ijc0)
|
|
254 ijc0=ijc0-1
|
|
dfr=abs(freq(ijc0)-fr0)
|
|
if(dfr.lt.dfr0) then
|
|
ijc=ijc0
|
|
ijc0=ijc0-1
|
|
dfr0=dfr
|
|
go to 254
|
|
end if
|
|
end if
|
|
IJCMTR(IL,ILIST)=IJC
|
|
255 continue
|
|
C
|
|
DO IL=1,NLINM
|
|
INMLIP(IL,ILIST)=INMLIN(IL,ILIST)
|
|
END DO
|
|
NLINML(ILIST)=NLINM
|
|
IMLAST=INMLIN(NLINML(ILIST),ILIST)
|
|
C
|
|
CALL INIBLM
|
|
C
|
|
c write(6,611) inmlin(1,ilist),inmlin(nlinm,ilist),
|
|
c * 2.997925e18/freqm(inmlin(1,ilist),ILIST),
|
|
c * 2.997925e18/freqm(inmlin(nlinm,ilist),ILIST)
|
|
c 611 format('mols',2i7,2f10.3)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE INIBLM
|
|
C =================
|
|
C
|
|
C driving procedure for treating a partial molecular line list for the
|
|
C current wavelength region
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
C
|
|
PARAMETER (DP0=3.33564E-11, DP1=1.651E8, UN=1.)
|
|
C
|
|
XX=FREQ(1)
|
|
IF(NFREQ.GE.2) XX=0.5*(FREQ(1)+FREQ(2))
|
|
BNU=BN*(XX*1.E-15)**3
|
|
HKF=HK*XX
|
|
DO ID=1,ND
|
|
T=TEMP(ID)
|
|
EXH=EXP(HKF/T)
|
|
EXHK(ID)=UN/EXH
|
|
PLAN(ID)=BNU/(EXH-UN)
|
|
STIM(ID)=UN-EXHK(ID)
|
|
DO IMOL=1,NMOLEC
|
|
IF(AMMOL(IMOL).GT.0.)
|
|
* DOPMOL(IMOL,ID)=UN/(XX*DP0*SQRT(DP1*T/AMMOL(IMOL)+
|
|
* VTURB(ID)))
|
|
END DO
|
|
END DO
|
|
RETURN
|
|
END
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE IDMTAB
|
|
C =================
|
|
C
|
|
C output of selected molecular line parameters (identification table)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
|
|
COMMON/REFDEP/IREFD(MFREQ)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
|
|
CHARACTER*4 APB,AP0,AP1,AP2,AP3,AP4,APR
|
|
C
|
|
|
|
PARAMETER (C1=2.3025851, C2=4.2014672, C3=1.4387886)
|
|
DATA APB,AP0,AP1,AP2,AP3,AP4 /' ',' .',' *',' **',' ***',
|
|
* '****'/
|
|
C
|
|
ALM0=2.997925D18/FREQ(1)
|
|
ALM1=2.997925D18/FREQ(2)
|
|
if(ifwin.gt.0) ALM1=2.997925D18/FREQ(NFREQ)
|
|
IF(IPRIN.LE.-2) RETURN
|
|
if(iprin.ge.3) then
|
|
IF(IMODE.GE.0) WRITE(6,601) IBLANK,ALM0,ALM1
|
|
IF(IMODE.GE.0.OR.(IMODE.EQ.-1.AND.IBLANK.EQ.1)) WRITE(6,602)
|
|
end if
|
|
C
|
|
ID=IDSTD
|
|
DO 100 ILIST=1,NMLIST
|
|
IF(NLINML(ILIST).EQ.0) GO TO 100
|
|
DO IL0=1,NLINML(ILIST)
|
|
IL=INMLIN(IL0,ILIST)
|
|
ALAM=2.997925D18/FREQM(IL,ILIST)
|
|
c ID=IDSTD
|
|
IJCN=IJCMTR(IL0,ILIST)
|
|
c IF(IJCN.GE.1.AND.IJCN.LE.NFREQS) ID=IREFD(IJCN)
|
|
IMOL=INDATM(IL,ILIST)
|
|
DOP1=DOPMOL(IMOL,ID)
|
|
ANE=ELEC(ID)
|
|
AGAM=(GRM(IL,ILIST)+GSM(IL,ILIST)*ANE+
|
|
* GVDW(IL,ILIST,ID))*DOP1
|
|
ABCNT=EXP(GFM(IL,ILIST)-EXCLM(IL,ILIST)/TEMP(ID))*
|
|
* RRMOL(IMOL,ID)*DOP1*STIM(ID)
|
|
absta=min(ch(1,id),ch(2,id))
|
|
str0=abcnt/absta
|
|
if(ifwin.gt.0) STR0=ABCNT/ABSTDW(IJCONT(IL),ID)
|
|
GF=(GFM(IL,ILIST)+C2)/C1
|
|
EXCL=EXCLM(IL,ILIST)/C3
|
|
IF(STR0.LE.1.2) THEN
|
|
WW1=0.886*STR0*(1.-STR0*(0.707-STR0*0.577))
|
|
ELSE
|
|
WW1=SQRT(LOG(STR0))
|
|
END IF
|
|
IF(STR0.GT.55.) THEN
|
|
WW2=0.5*SQRT(3.14*AGAM*STR0)
|
|
IF(WW2.GT.WW1) WW1=WW2
|
|
END IF
|
|
EQW=ALAM/FREQM(IL,ILIST)*1.E3/DOP1*WW1
|
|
STR=EQW*10.
|
|
APR=APB
|
|
IF(STR.GE.1.E0.AND.STR.LT.1.E1) APR=AP0
|
|
IF(STR.GE.1.E1.AND.STR.LT.1.E2) APR=AP1
|
|
IF(STR.GE.1.E2.AND.STR.LT.1.E3) APR=AP2
|
|
IF(STR.GE.1.E3.AND.STR.LT.1.E4) APR=AP3
|
|
IF(STR.GE.1.E4) APR=AP4
|
|
if(alam.ge.alm0.and.alam.lt.alm1) then
|
|
WRITE(15,603) ALAM,CMOL(IMOL),GF,EXCL,
|
|
* STR0,EQW,APR,id,AGAM
|
|
end if
|
|
END DO
|
|
C
|
|
601 FORMAT(/' ',I4,'. SET (MOLECULAR LINES):',
|
|
* ' INTERVAL ',F9.3,' -',F9.3,' ANGSTROMS'/
|
|
* ' ------------')
|
|
602 FORMAT(/1H ,13X,
|
|
* 'LAMBDA MOLECULE LOG GF ELO LINE/CONT',2X,
|
|
* 'EQ.WIDTH',8x,'AGAM'/)
|
|
603 FORMAT(F11.3,2X,A4,4X,F7.2,F12.3,1PE11.2,0PF8.1,1X,A4,
|
|
* i4,1PE10.2)
|
|
C
|
|
100 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE MOLOP(ID,ABLIN,EMLIN,AVAB,ILIST)
|
|
C ===========================================
|
|
C
|
|
C Total molecular line opacity (ABLIN) and emissivity (EMLIN)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
PARAMETER (UN = 1.,
|
|
* EXT0 = 3.17,
|
|
* TEN = 10.)
|
|
DIMENSION ABLIN(MFREQ),EMLIN(MFREQ)
|
|
C
|
|
DO IJ=1,NFREQ
|
|
ABLIN(IJ)=0.
|
|
EMLIN(IJ)=0.
|
|
END DO
|
|
C
|
|
if(temp(id).gt.tmolim) return
|
|
IF(NLINML(ILIST).EQ.0) RETURN
|
|
if(inactm(ilist).ne.0) return
|
|
C
|
|
C overall loop over contributing lines
|
|
C
|
|
TEM1=UN/TEMP(ID)
|
|
ANE=ELEC(ID)
|
|
DO I=1,NLINML(ILIST)
|
|
IL=INMLIN(I,ILIST)
|
|
IMOL=INDATM(IL,ILIST)
|
|
DOP1=DOPMOL(IMOL,ID)
|
|
AGAM=(GRM(IL,ILIST)+GSM(IL,ILIST)*ANE+
|
|
* GVDW(IL,ILIST,ID))*DOP1
|
|
FR0=FREQM(IL,ILIST)
|
|
AB0=EXP(GFM(IL,ILIST)-EXCLM(IL,ILIST)*TEM1)*RRMOL(IMOL,ID)*
|
|
* DOP1*STIM(ID)
|
|
C
|
|
C set up limiting frequencies where the line I is supposed to
|
|
C contribute to the opacity
|
|
C
|
|
EX0=AB0/AVAB*AGAM
|
|
EXT=EXT0
|
|
IF(EX0.GT.TEN) EXT=SQRT(EX0)
|
|
EXT=EXT/DOP1
|
|
XIJEXT=DFRCON*EXT+1.5
|
|
IJ1=int(MAX(float(IJCMTR(I,ILIST))-XIJEXT,3.))
|
|
IJ2=int(MIN(float(IJCMTR(I,ILIST))+XIJEXT,float(NFREQS)))
|
|
IF(IJ1.LT.NFREQ.AND.IJ2.GT.2) THEN
|
|
DO IJ=IJ1,IJ2
|
|
XF=ABS(FREQ(IJ)-FR0)*DOP1
|
|
ABLIN(IJ)=ABLIN(IJ)+AB0*VOIGTK(AGAM,XF)
|
|
END DO
|
|
END IF
|
|
END DO
|
|
C
|
|
DO IJ=3,NFREQ
|
|
EMLIN(IJ)=EMLIN(IJ)+ABLIN(IJ)*PLAN(ID)
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
FUNCTION SBFHMI(FR)
|
|
C ===================
|
|
C
|
|
C Bound-free cross-section for H- (negative hydrogen ion)
|
|
C Taken from Kurucz ATLAS9
|
|
C
|
|
C FROM MATHISEN (1984), AFTER WISHART(1979) AND BROAD AND REINHARDT (1976)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
DIMENSION WBF(85),BF(85)
|
|
DATA WBF/ 18.00, 19.60, 21.40, 23.60, 26.40, 29.80, 34.30,
|
|
1 40.40, 49.10, 62.60, 111.30, 112.10, 112.67, 112.95, 113.05,
|
|
2 113.10, 113.20, 113.23, 113.50, 114.40, 121.00, 139.00, 164.00,
|
|
3 175.00, 200.00, 225.00, 250.00, 275.00, 300.00, 325.00, 350.00,
|
|
4 375.00, 400.00, 425.00, 450.00, 475.00, 500.00, 525.00, 550.00,
|
|
5 575.00, 600.00, 625.00, 650.00, 675.00, 700.00, 725.00, 750.00,
|
|
6 775.00, 800.00, 825.00, 850.00, 875.00, 900.00, 925.00, 950.00,
|
|
7 975.00,1000.00,1025.00,1050.00,1075.00,1100.00,1125.00,1150.00,
|
|
8 1175.00,1200.00,1225.00,1250.00,1275.00,1300.00,1325.00,1350.00,
|
|
9 1375.00,1400.00,1425.00,1450.00,1475.00,1500.00,1525.00,1550.00,
|
|
A 1575.00,1600.00,1610.00,1620.00,1630.00,1643.91/
|
|
DATA BF/ 0.067, 0.088, 0.117, 0.155, 0.206, 0.283, 0.414,
|
|
1 0.703, 1.24, 2.33, 11.60, 13.90, 24.30, 66.70, 95.00,
|
|
2 56.60, 20.00, 14.60, 8.50, 7.10, 5.43, 5.91, 7.29,
|
|
3 7.918, 9.453, 11.08, 12.75, 14.46, 16.19, 17.92, 19.65,
|
|
4 21.35, 23.02, 24.65, 26.24, 27.77, 29.23, 30.62, 31.94,
|
|
5 33.17, 34.32, 35.37, 36.32, 37.17, 37.91, 38.54, 39.07,
|
|
6 39.48, 39.77, 39.95, 40.01, 39.95, 39.77, 39.48, 39.06,
|
|
7 38.53, 37.89, 37.13, 36.25, 35.28, 34.19, 33.01, 31.72,
|
|
8 30.34, 28.87, 27.33, 25.71, 24.02, 22.26, 20.46, 18.62,
|
|
9 16.74, 14.85, 12.95, 11.07, 9.211, 7.407, 5.677, 4.052,
|
|
A 2.575, 1.302, 0.8697, 0.4974, 0.1989, 0. /
|
|
C Bell and Berrington J.Phys.B,vol. 20, 801-806,1987.
|
|
c
|
|
HMINBF=0.
|
|
IF(FR.GT.1.82365E14) THEN
|
|
WAVE=2.99792458E17/FR
|
|
HMINBF=YLINTP(WAVE,WBF,BF,85,85)*1.E-18
|
|
END IF
|
|
SBFHMI=HMINBF
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION SFFHMI(POPI,FR,T)
|
|
C ==========================
|
|
C
|
|
C Free-free cross-section for H- (negative hydrogen ion)
|
|
C Taken from Kurucz ATLAS9
|
|
C
|
|
C From Bell and Berrington J.Phys.B,vol. 20, 801-806,1987.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
PARAMETER (CONFF=5040.*1.380658E-16, CONTH=5040.)
|
|
DIMENSION FFLOG(22,11),FFCS(11,22),FFLOG2(22)
|
|
DIMENSION FFBEG(11,11),FFEND(11,11),FFTT(11),WFFLOG(22)
|
|
DIMENSION THETAFF(11),WAVEK(22)
|
|
EQUIVALENCE (FFCS(1,1),FFBEG(1,1)),(FFCS(1,12),FFEND(1,1))
|
|
C
|
|
DATA WAVEK/.50,.40,.35,.30,.25,.20,.18,.16,.14,.12,.10,.09,.08,
|
|
1 .07,.06,.05,.04,.03,.02,.01,.008,.006/
|
|
DATA THETAFF/
|
|
1 0.5, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.8, 3.6/
|
|
DATA FFBEG/
|
|
1.0178,.0222,.0308,.0402,.0498,.0596,.0695,.0795,.0896, .131, .172,
|
|
2.0228,.0280,.0388,.0499,.0614,.0732,.0851,.0972, .110, .160, .211,
|
|
3.0277,.0342,.0476,.0615,.0760,.0908, .105, .121, .136, .199, .262,
|
|
4.0364,.0447,.0616,.0789,.0966, .114, .132, .150, .169, .243, .318,
|
|
5.0520,.0633,.0859, .108, .131, .154, .178, .201, .225, .321, .418,
|
|
6.0791,.0959, .129, .161, .194, .227, .260, .293, .327, .463, .602,
|
|
7.0965, .117, .157, .195, .234, .272, .311, .351, .390, .549, .711,
|
|
8 .121, .146, .195, .241, .288, .334, .381, .428, .475, .667, .861,
|
|
9 .154, .188, .249, .309, .367, .424, .482, .539, .597, .830, 1.07,
|
|
A .208, .250, .332, .409, .484, .557, .630, .702, .774, 1.06, 1.36,
|
|
B .293, .354, .468, .576, .677, .777, .874, .969, 1.06, 1.45, 1.83/
|
|
DATA FFEND/
|
|
1 .358, .432, .572, .702, .825, .943, 1.06, 1.17, 1.28, 1.73, 2.17,
|
|
2 .448, .539, .711, .871, 1.02, 1.16, 1.29, 1.43, 1.57, 2.09, 2.60,
|
|
3 .579, .699, .924, 1.13, 1.33, 1.51, 1.69, 1.86, 2.02, 2.67, 3.31,
|
|
4 .781, .940, 1.24, 1.52, 1.78, 2.02, 2.26, 2.48, 2.69, 3.52, 4.31,
|
|
5 1.11, 1.34, 1.77, 2.17, 2.53, 2.87, 3.20, 3.51, 3.80, 4.92, 5.97,
|
|
6 1.73, 2.08, 2.74, 3.37, 3.90, 4.50, 5.01, 5.50, 5.95, 7.59, 9.06,
|
|
7 3.04, 3.65, 4.80, 5.86, 6.86, 7.79, 8.67, 9.50, 10.3, 13.2, 15.6,
|
|
8 6.79, 8.16, 10.7, 13.1, 15.3, 17.4, 19.4, 21.2, 23.0, 29.5, 35.0,
|
|
9 27.0, 32.4, 42.6, 51.9, 60.7, 68.9, 76.8, 84.2, 91.4, 117., 140.,
|
|
A 42.3, 50.6, 66.4, 80.8, 94.5, 107., 120., 131., 142., 183., 219.,
|
|
B 75.1, 90.0, 118., 144., 168., 191., 212., 234., 253., 325., 388./
|
|
DATA ISTART/0/
|
|
C
|
|
IF(ISTART.EQ.0) THEN
|
|
ISTART=1
|
|
DO 2 IWAVE=1,22
|
|
WFFLOG(IWAVE)=LOG(91.134D0/WAVEK(IWAVE))
|
|
DO 2 ITHETA=1,11
|
|
FFLOG(IWAVE,ITHETA)=LOG(FFCS(ITHETA,IWAVE)*1.E-26)
|
|
2 CONTINUE
|
|
ENDIF
|
|
C
|
|
WAVE=2.99792458E17/FR
|
|
WAVELOG=LOG(WAVE)
|
|
C
|
|
DO 21 ITHETA=1,11
|
|
DO IWAVE=1,22
|
|
FFLOG2(IWAVE)=FFLOG(IWAVE,ITHETA)
|
|
END DO
|
|
FFTLOG=YLINTP(WAVELOG,WFFLOG,FFLOG2,22,22)
|
|
FFTT(ITHETA)=EXP(FFTLOG)/THETAFF(ITHETA)*CONFF
|
|
21 CONTINUE
|
|
c
|
|
THETA=CONTH/T
|
|
FFTH=YLINTP(THETA,THETAFF,FFTT,11,11)
|
|
SFFHMI=FFTH*POPI/(1.-exp(-hk*fr/t))
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C
|
|
C ******************************************************************
|
|
C
|
|
C
|
|
C =========================================================================
|
|
C *************************************************************************
|
|
C *************************************************************************
|
|
C
|
|
subroutine mpartf(jatom,ion,indmol,t,u)
|
|
c =======================================
|
|
c
|
|
c yields partition functions with polynomial data from
|
|
c ref. Irwin, A.W., 1981, ApJ Suppl. 45, 621.
|
|
c ln u(temp)=sum(a(i)*(ln(temp))**(i-1)) 1<=a<=6
|
|
c
|
|
c Input:
|
|
c jatom = element number in periodic table
|
|
c ion = 1 for neutral, 2 for once ionized and 3 for twice ionized
|
|
c indmol= index of a molecular specie (Tsuji index)
|
|
c temp = temperature
|
|
c Output:
|
|
c u = partf.(linear scale) for iat,ion, or indmol, and temperature t
|
|
c
|
|
c
|
|
implicit real*8 (a-h,o-z)
|
|
real*8 a(6,3,92),aa(6),am(6,500)
|
|
dimension indtsu(324),irw(500)
|
|
save iread,a,am
|
|
c data indtsu / 2, 5, 12, 4, 8, 7, 6,
|
|
c * 9, 11, 10, 29, 50, 59, 46, 132, 52, 19,
|
|
c * 13, 42, 38, 39, 37, 44, 36, 14, 118, 33,
|
|
c * 3, 16, 57, 32, 49, 60, 54, 41, 107, 0,
|
|
c * 148, 152, 153, 155, 0, 17, 24, 25, 28, 51,
|
|
c * 112, 119, 0, 0,21, 15, 43, 56, 0, 64,
|
|
c * 47, 65, 0, 61, 0, 62,118, 40, 66/
|
|
c data indtsu / 2, 5, 12, 4, 8, 7, 6,
|
|
c * 9, 11, 10, 29, 50, 59, 46, 132, 52, 19,
|
|
c * 13, 42, 38, 39, 37, 44, 36, 14, 117, 33,
|
|
c * 3, 16, 57, 32, 49, 60, 54, 41, 106,303,
|
|
c * 147, 151, 152, 154, 302, 17, 24, 25, 28, 51,
|
|
c * 111, 118, 102, 0, 21, 15, 43, 56,478, 64,
|
|
c * 47, 65, 413, 61, 190, 62 ,108, 40, 66,214,
|
|
c * 257*0./
|
|
data indtsu / 2, 5, 12, 4, 8, 7, 6,
|
|
* 9, 11, 10, 29, 50, 59, 46, 133, 52, 19,
|
|
* 13, 42, 38, 39, 37, 44, 36, 14, 118, 33,
|
|
* 3, 16, 57, 32, 49, 60, 54, 41, 107,304,
|
|
* 148, 152, 153, 155, 303, 17, 24, 25, 28, 51,
|
|
* 112, 119, 102, 0, 21, 15, 43, 22,478, 64,
|
|
* 47, 65, 414, 61, 191, 62 ,109, 40, 66,214,
|
|
* 120*0, 30, 136*0/
|
|
|
|
data iread /0/
|
|
c
|
|
c read data if first call:
|
|
c
|
|
if(iread.ne.1) then
|
|
if(irwtab.eq.0) then
|
|
open(67,file= './data/irwin_orig.dat',status='old')
|
|
nummol=66
|
|
else
|
|
open(67,file= './data/irwin_bc.dat',status='old')
|
|
nummol=324
|
|
end if
|
|
read(67,*)
|
|
read(67,*)
|
|
do j=1,92
|
|
do i=1,3
|
|
if(j.eq.1.and.i.eq.3) goto 10
|
|
sp=float(j)+float(i-1)/100.
|
|
read(67,*) spec,aa
|
|
do k=1,6
|
|
a(k,i,j)=aa(k)
|
|
end do
|
|
10 continue
|
|
end do
|
|
end do
|
|
c
|
|
read(67,*)
|
|
read(67,*)
|
|
read(67,*)
|
|
do i=1,500
|
|
irw(i)=0
|
|
end do
|
|
do i=1,nummol
|
|
read(67,*,end=15) spec,aa
|
|
indm=indtsu(i)
|
|
if(indm.gt.0) then
|
|
irw(indm)=i
|
|
do j=1,6
|
|
am(j,indm)=aa(j)
|
|
end do
|
|
end if
|
|
end do
|
|
15 continue
|
|
close(67)
|
|
iread=1
|
|
endif
|
|
c
|
|
c evaluation of the partition function
|
|
c stop if T is out of limits of Irwin's tables
|
|
c
|
|
if(t.lt.1000.) then
|
|
stop 'partf; temp<1000 K'
|
|
else if(t.gt.16000.) then
|
|
stop 'partf; temp>16000 K'
|
|
endif
|
|
tl=log(t)
|
|
u=0.
|
|
c
|
|
c atomic species
|
|
c
|
|
if(jatom.gt.0.and.ion.gt.0) then
|
|
ulog= a(1,ion,jatom)+
|
|
* tl*(a(2,ion,jatom)+
|
|
* tl*(a(3,ion,jatom)+
|
|
* tl*(a(4,ion,jatom)+
|
|
* tl*(a(5,ion,jatom)+
|
|
* tl*(a(6,ion,jatom))))))
|
|
if(jatom.eq.5.and.ion.eq.3) ulog=1.
|
|
u=exp(ulog)
|
|
end if
|
|
c
|
|
c molecular species
|
|
c
|
|
if(indmol.gt.0) then
|
|
indm=indmol
|
|
if(irw(indm).gt.0) then
|
|
ulog= am(1,indm)+
|
|
* tl*(am(2,indm)+
|
|
* tl*(am(3,indm)+
|
|
* tl*(am(4,indm)+
|
|
* tl*(am(5,indm)+
|
|
* tl*(am(6,indm))))))
|
|
u=exp(ulog)
|
|
c if(t.gt.5128..and.t.lt.5129)
|
|
c * write(6,631) t,indmol,indm,u
|
|
c 631 format('mpartf',f10.1,2i5,f16.3)
|
|
end if
|
|
end if
|
|
return
|
|
end
|
|
|
|
C
|
|
C =========================================================================
|
|
C *************************************************************************
|
|
C *************************************************************************
|
|
C
|
|
C
|
|
subroutine moleq(id,tt,an,aein,ane,ipri)
|
|
c ========================================
|
|
c
|
|
c calculation of the equilibrium state of atoms and molecules
|
|
c
|
|
c Input: id - depth point
|
|
c tt - temperature [K]
|
|
c an - number density
|
|
c aein - initial estimate of the electron density
|
|
c
|
|
c Output: ane - electron density
|
|
c
|
|
C Output through common/atomol:
|
|
c rrr(id,j,i) - N/U for the atom with atomic number i and
|
|
c ion j (j=1 for neutral, and j=2 for 1st ions)
|
|
c rrmol(imol,id) - N/U for the molecule with index imol
|
|
c (the index is given by the ordering of
|
|
c in the input file tsuji.molec
|
|
c
|
|
c
|
|
c Input data for molecules iven in the file
|
|
c tsuji.molec
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
character*128 MOLEC
|
|
COMMON/COMFH1/C(600,5),PPMOL(600),APMLOG(600),P(100),
|
|
* XIP(100),XI2(100),CCOMP(100),UIIDUI(100),
|
|
* FP(100),XKP(100),XK2(100),EPS,SWITER,
|
|
* NELEM(5,600),NATO(5,600),MMAX(600),
|
|
* NELEMX(100),NMETAL,NIMAX
|
|
common/moltst/pfmol(600,mdepth),anmol(600,mdepth),
|
|
* pfato(100,mdepth),anato(100,mdepth),
|
|
* pfion(100,mdepth),anion(100,mdepth)
|
|
common/ioniz2/anion2(30,mdepth)
|
|
DIMENSION NATOMM(5),NELEMM(5),
|
|
* emass(100),uelem(100),ull(100),anden(800),
|
|
* aelem(100)
|
|
dimension denso(mdepth),eleco(mdepth),wmmo(mdepth)
|
|
c
|
|
data nmetal/92/
|
|
c
|
|
data iread/1/
|
|
c
|
|
MOLEC ='data/tsuji.molec_bc2'
|
|
if(moltab.eq.0) MOLEC='data/tsuji.molec_orig'
|
|
c
|
|
ECONST=4.342945E-1
|
|
AVO=0.602217E+24
|
|
SPA=0.196E-01
|
|
GRA=0.275423E+05
|
|
AHE=0.100E+00
|
|
tk=1./(tt*1.38054e-16)
|
|
pgas=an/tk
|
|
sahcon=1.87840e20*tt*sqrt(tt)
|
|
nimax=3000
|
|
eps=1.e-5
|
|
switer=0.0
|
|
C
|
|
C---- data for atoms ----------------
|
|
C
|
|
if(iread.eq.1) then
|
|
c
|
|
do i=1,nmetal
|
|
ia=i
|
|
nelemx(i)=ia
|
|
ccomp(ia)=abndd(ia,id)
|
|
xip(ia)=enev(ia,1)
|
|
xi2(ia)=enev(ia,2)
|
|
emass(ia)=amas(ia)
|
|
end do
|
|
c
|
|
c---- read molecular data from a table ----------------------
|
|
c
|
|
J=0
|
|
OPEN(UNIT=26,FILE=MOLEC,STATUS='OLD')
|
|
10 J=J+1
|
|
IF(MOLTAB.GE.1)
|
|
* READ (26,510,end=20) CMOL(J),(C(J,K),K=1,5),MMAX(J),
|
|
* (NELEMM(M),NATOMM(M),M=1,4)
|
|
IF(MOLTAB.EQ.0)
|
|
* READ (26,511,end=20) CMOL(J),(C(J,K),K=1,5),MMAX(J),
|
|
* (NELEMM(M),NATOMM(M),M=1,4)
|
|
510 format(a8,5e13.5,9i3)
|
|
511 FORMAT (A8,E11.5,4E12.5,I1,(I2,I3),3(I2,I2))
|
|
c
|
|
c for now, exclude all molecules with 4 or more C atoms
|
|
c
|
|
do m=1,4
|
|
if(nelemm(m).eq.6.and.natomm(m).ge.5) then
|
|
j=j-1
|
|
go to 10
|
|
end if
|
|
end do
|
|
c
|
|
MMAXJ=MMAX(J)
|
|
IF(MMAXJ.EQ.0) GO TO 20
|
|
DO M=1,MMAXJ
|
|
NELEM(M,J)=NELEMM(M)
|
|
NATO(M,J)=NATOMM(M)
|
|
END DO
|
|
c write(6,680) j,cmol(j)
|
|
c 680 format(i5,a10)
|
|
GO TO 10
|
|
20 NMOLEC=J-1
|
|
close(26)
|
|
c
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
P(NELEMI)=1.D-70
|
|
END DO
|
|
iread=0
|
|
endif
|
|
c
|
|
c---- end of reading atomic and molecular data ----------------------
|
|
c
|
|
p(99)= aein/tk
|
|
pesave=p(99)
|
|
p(99)=pesave
|
|
c
|
|
THETA=5040./tt
|
|
TEM=tt
|
|
PGLOG=log10(Pgas)
|
|
PG=Pgas
|
|
c
|
|
CALL RUSSEL(TEM,PG)
|
|
c
|
|
PE=P(99)
|
|
ane=pe*tk
|
|
PELOG=log10(PE)
|
|
emass(99)=5.486e-4
|
|
uelem(99)=2.
|
|
aelem(99)=pe*tk/(2.*sahcon*emass(nelemi)**1.5)
|
|
ull(99)=log10(aelem(99))
|
|
c
|
|
c----atoms-----------------------------------------------------------------
|
|
c
|
|
tmass=0.
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
FPLOG=log10(FP(NELEMI))
|
|
anden(i)=(p(nelemi)+1.D-70)*tk
|
|
tmass=tmass+anden(i)*emass(nelemi)
|
|
call irwpf(nelemi,1,0,tt,u0)
|
|
uelem(nelemi)=u0
|
|
aelem(nelemi)=anden(i)/(u0*sahcon*emass(nelemi)**1.5)
|
|
ull(nelemi)=log10(aelem(nelemi))
|
|
rrr(id,1,nelemi)=anden(i)/u0
|
|
anato(nelemi,id)=anden(i)
|
|
pfato(nelemi,id)=u0
|
|
END DO
|
|
an1=anden(1)
|
|
c
|
|
c---- positive ions ---------------------------------------------------------
|
|
c
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
PLOG= log10(P(NELEMI)+1.0D-70)
|
|
XKPLOG=log10(XKP(NELEMI)+1.0D-70)
|
|
PIONL=PLOG+XKPLOG-PELOG
|
|
anden(i+nmetal)=exp(pionl/econst)*tk
|
|
tmass=tmass+anden(i+nmetal)*emass(nelemi)
|
|
call irwpf(nelemi,2,0,tt,u1)
|
|
anion(nelemi,id)=anden(i+nmetal)
|
|
pfion(nelemi,id)=u1
|
|
rrr(id,2,nelemi)=anden(i+nmetal)/u1
|
|
if(nelemi.ge.2.and.nelemi.le.30) then
|
|
x2log=log10(XK2(NELEMI)+1.0D-70)
|
|
pion2=pionl+x2log-pelog
|
|
anion2(nelemi,id)=exp(pion2/econst)*tk
|
|
end if
|
|
END DO
|
|
anion2(1,id)=0.
|
|
c
|
|
c---- molecules-------------------------------------------------------------
|
|
c
|
|
DO J=1,NMOLEC
|
|
jm=j+2*nmetal
|
|
PMOLL=log10(PPMOL(J)+1.0D-70)
|
|
anden(jm)=exp(pmoll/econst)*tk
|
|
rrmol(j,id)=0.
|
|
umoll=1.
|
|
if(pmoll.gt.-30.) then
|
|
umoll=log10(anden(jm))+c(j,2)*theta
|
|
amasm=0.
|
|
do jjj=1,mmax(j)
|
|
i=nelem(jjj,j)
|
|
amasm=amasm+NATO(jjj,j)*emass(i)
|
|
umoll=umoll-NATO(jjj,j)*ull(i)
|
|
end do
|
|
ammol(j)=amasm
|
|
tmass=tmass+anden(jm)*amasm
|
|
umoll=exp(umoll/econst)/(sahcon*amasm**1.5)
|
|
c
|
|
c replace with EXOMOL data whenever available
|
|
c
|
|
um=0.
|
|
if(ipfexo.gt.0.and.tt.le.9000.)
|
|
* call exopf(j,tt,um)
|
|
if(um.gt.0.) then
|
|
umoll=um
|
|
else
|
|
c
|
|
c or with modified Irwin (Barklem & Collet) data whenever available
|
|
c
|
|
call irwpf(0,0,j,tt,um)
|
|
if(um.gt.0.) umoll=um
|
|
end if
|
|
|
|
c H-
|
|
c
|
|
if(j.eq.1) umoll=1.
|
|
c
|
|
c set up array RRR = number density/partition function
|
|
c
|
|
rrmol(j,id)=anden(jm)/umoll
|
|
end if
|
|
c
|
|
anmol(j,id)=anden(jm)
|
|
pfmol(j,id)=umoll
|
|
END DO
|
|
|
|
jm=2*nmetal
|
|
anhm(id)=anden(1+jm)
|
|
anh2(id)=anden(2+jm)
|
|
anch(id)=anden(5+jm)
|
|
anoh(id)=anden(4+jm)
|
|
C
|
|
C
|
|
C save new density, molecular weight, and abundances of
|
|
c atomic species
|
|
c
|
|
ipri1=ipri
|
|
denso(id)=dens(id)
|
|
eleco(id)=elec(id)
|
|
wmmo(id)=wmm(id)
|
|
dens(id)=tmass*hmass
|
|
elec(id)=pe*tk
|
|
wmm(id)=dens(id)/(an-elec(id))
|
|
ane=elec(id)
|
|
c
|
|
do i=1,nmetal
|
|
NELEMI=NELEMX(I)
|
|
ia=iatex(nelemi)
|
|
if(ia.gt.0) then
|
|
attot(ia,id)=(anato(nelemi,id)+anion(nelemi,id))
|
|
end if
|
|
end do
|
|
c
|
|
if(id.eq.nd) then
|
|
write(86,610)
|
|
do iid=1,nd
|
|
write(86,611) iid,dm(iid),temp(iid),elec(iid),eleco(iid),
|
|
* dens(iid),denso(iid),wmm(iid),wmmo(iid)
|
|
end do
|
|
end if
|
|
610 format(/' id m T ne(old) ne(new)',
|
|
* ' dens(old) dens(new) wmm(old) wmm(new)'/)
|
|
611 format(i4,1p8e10.2)
|
|
C
|
|
RETURN
|
|
END
|
|
|
|
|
|
C
|
|
C =========================================================================
|
|
C *************************************************************************
|
|
C *************************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE RUSSEL(TEM,PG)
|
|
c =========================
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
|
|
COMMON/COMFH1/C(600,5),PPMOL(600),APMLOG(600),P(100),
|
|
* XIP(100),XI2(100),CCOMP(100),UIIDUI(100),
|
|
* FP(100),XKP(100),XK2(100),EPS,SWITER,
|
|
* NELEM(5,600),NATO(5,600),MMAX(600),
|
|
* NELEMX(100),NMETAL,NIMAX
|
|
DIMENSION FX(100),DFX(100),Z(100),PREV(100),WA(100),
|
|
* UIIDU2(100)
|
|
C
|
|
c ECONST=4.342945E-1
|
|
ECONST=4.3426E-1
|
|
XKCON=6.667343E-1
|
|
EPSDIE=5.0E-5
|
|
T=5040.4/TEM
|
|
PGLOG=log10(PG)
|
|
tk=1./(tem*1.38054e-16)
|
|
C
|
|
C HEH=helium/hydrogen ratio by number
|
|
C
|
|
HEH=CCOMP(2)/CCOMP(1)
|
|
c HEH=YTOT(1)-UN
|
|
C
|
|
C evaluation of log XKP(MOL)
|
|
C
|
|
DO J=1,NMOLEC
|
|
APLOGJ=C(J,5)
|
|
DO K=1,4
|
|
KM5=5-K
|
|
APLOGJ=APLOGJ*T + C(J,KM5)
|
|
END DO
|
|
APMLOG(J)=APLOGJ
|
|
END DO
|
|
apmlog(1)=-log10(1.0353e-16/tem/sqrt(tem)*tk*exp(8762.9/tem))
|
|
DHH=(((0.1196952E-02*T-0.2125713E-01)*T+0.1545253E+00)*T
|
|
* -0.5161452E+01)*T+0.1277356E+02
|
|
DHH=EXP(DHH/ECONST)
|
|
C
|
|
C evaluation of the ionization constants
|
|
C
|
|
TEM25=TEM**2*SQRT(TEM)
|
|
DO I=1,NMETAL
|
|
NELEMI = NELEMX(I)
|
|
*
|
|
* calculation of the partition functions following Irwin (1981)
|
|
C
|
|
call irwpf(nelemi,1,0,tem,g0)
|
|
call irwpf(nelemi,2,0,tem,g1)
|
|
call irwpf(nelemi,3,0,tem,g2)
|
|
c uiidui(nelemi)=g1/g0*0.6665
|
|
uiidui(nelemi)=g1/g0*xkcon
|
|
uiidu2(nelemi)=g2/g1*xkcon
|
|
c
|
|
XKP(NELEMI)=UIIDUI(NELEMI)*TEM25*
|
|
* EXP(-XIP(NELEMI)*T/ECONST)
|
|
XK2(NELEMI)=UIIDU2(NELEMI)*TEM25*
|
|
* EXP(-XI2(NELEMI)*T/ECONST)
|
|
xk2(nelemi)=max(xk2(nelemi),1.d-70)
|
|
END DO
|
|
HKP=XKP(1)
|
|
XK2(1)=0.
|
|
C
|
|
C preliminary value of PH at high temperatures
|
|
C
|
|
HKP=XKP(1)
|
|
IF(T.LT.0.6) THEN
|
|
PPH=SQRT(HKP*(PG/(1.0+HEH)+HKP))-HKP
|
|
PH=PPH**2/HKP
|
|
ELSE
|
|
IF(PG/DHH.LE.0.1) THEN
|
|
PH=PG/(1.0+HEH)
|
|
ELSE
|
|
PH=0.5 * (SQRT(DHH*(DHH+4.0 *PG/(1.0+HEH)))-DHH)
|
|
END IF
|
|
END IF
|
|
C
|
|
C evaluation of the fictitious pressures of hydrogen
|
|
C PG=PH+PHH+2.0*PPH+HEH*(PH+2.0*PHH+PPH)
|
|
C
|
|
U=(1.0+2.0*HEH)/DHH
|
|
Q=1.0+HEH
|
|
R=(2.0+HEH)*SQRT(HKP)
|
|
S=-1.0*PG
|
|
X=SQRT(PH)
|
|
C
|
|
C Russell iterations
|
|
C
|
|
ITERAT=0
|
|
10 CONTINUE
|
|
F=((U*X**2+Q)*X+R)*X+S
|
|
DF=2.0*(2.0*U*X**2+Q)*X+R
|
|
XR=X-F/DF
|
|
C
|
|
IF(ABS((X-XR)/XR).GT.EPSDIE) THEN
|
|
ITERAT=ITERAT+1
|
|
IF(ITERAT.GT.50) THEN
|
|
WRITE(6,710) TEM,PG,X,XR,PH
|
|
710 FORMAT(1H1, ' NOT CONVERGE IN RUSSEL '/// 'TEM=',F9.2,5X,'PG=',
|
|
* E12.5,5X,'X1=',E12.5,5X,'X2=',E12.5,5X,'PH=',E12.5/////)
|
|
ELSE
|
|
X=XR
|
|
GO TO 10
|
|
END IF
|
|
END IF
|
|
PH=XR**2
|
|
PHH=PH**2/DHH
|
|
PPH=SQRT(HKP*PH)
|
|
FPH=PH+2.0*PHH+PPH
|
|
P(100)=PPH
|
|
C
|
|
C evaluation of the fictitious pressure of each element
|
|
C
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
FP(NELEMI)=CCOMP(NELEMI)*FPH
|
|
END DO
|
|
C
|
|
PE=P(99)
|
|
C
|
|
C Russell equations
|
|
C
|
|
NITERR = 0
|
|
20 CONTINUE
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
c FX(NELEMI)=-FP(NELEMI)+P(NELEMI)*(1.0+XKP(NELEMI)/PE)
|
|
DFX(NELEMI)=1.0+XKP(NELEMI)/PE*(1.0+XK2(NELEMI)/PE)
|
|
FX(NELEMI)=-FP(NELEMI)+P(NELEMI)*DFX(NELEMI)
|
|
END DO
|
|
C
|
|
SPNION=0.0
|
|
spnplu=0.
|
|
DO J=1,NMOLEC
|
|
MMAXJ=MMAX(J)
|
|
PMOLJL=-APMLOG(J)
|
|
DO M=1,MMAXJ
|
|
NELEMJ=NELEM(M,J)
|
|
NATOMJ=NATO(M,J)
|
|
PMOLJL=PMOLJL+DFLOAT(NATOMJ)*log10(P(NELEMJ))
|
|
END DO
|
|
C
|
|
PMOLJ=EXP(PMOLJL/ECONST)
|
|
DO M=1,MMAXJ
|
|
NELEMJ=NELEM(M,J)
|
|
NATOMJ=NATO(M,J)
|
|
ATOMJ=DFLOAT(NATOMJ)
|
|
IF(NELEMJ.EQ.99) then
|
|
if(natomj.ge.0) then
|
|
SPNION=SPNION+PMOLJ*NATOMJ
|
|
else
|
|
SPNPLU=SPNPLU-PMOLJ*NATOMJ
|
|
end if
|
|
end if
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
IF(NELEMJ.EQ.NELEMI) THEN
|
|
FX(NELEMI)=FX(NELEMI)+ATOMJ*PMOLJ
|
|
DFX(NELEMI)=DFX(NELEMI)+ATOMJ**2*
|
|
* PMOLJ/P(NELEMI)
|
|
END IF
|
|
END DO
|
|
END DO
|
|
PPMOL(J)=PMOLJ
|
|
END DO
|
|
C
|
|
C solution of the Russell equations by Newton-Raphson method
|
|
C
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
WA(I)=log10(P(NELEMI)+1.0D-70)
|
|
END DO
|
|
IMAXP1=NMETAL+1
|
|
WA(IMAXP1)=log10(PE+1.0D-70)
|
|
DELTRS = 0.0
|
|
DO I=1,NMETAL
|
|
NELEMI=NELEMX(I)
|
|
PREV(NELEMI)=P(NELEMI)-FX(NELEMI)/DFX(NELEMI)
|
|
PREV(NELEMI)=ABS(PREV(NELEMI))
|
|
IF(PREV(NELEMI).LT.1.0D-70) PREV(NELEMI)=1.0D-70
|
|
Z(NELEMI)=PREV(NELEMI)/P(NELEMI)
|
|
DELTRS=DELTRS+ABS(Z(NELEMI)-1.0)
|
|
IF(SWITER.GT.0.0) THEN
|
|
P(NELEMI)=(PREV(NELEMI)+P(NELEMI))*0.5
|
|
ELSE
|
|
P(NELEMI)=PREV(NELEMI)
|
|
END IF
|
|
END DO
|
|
C
|
|
C ionization equilibrium
|
|
C
|
|
PEREV = spnplu
|
|
DO I=1,NMETAL
|
|
NELEMI = NELEMX(I)
|
|
PEREV=PEREV+XKP(NELEMI)*P(NELEMI)*(1.+xk2(nelemi)/pe)
|
|
c write(6,631) i,nelemi,p(nelemi),XKP(NELEMI)*P(NELEMI),
|
|
c * xkp(nelemi),xk2(nelemi),1.+xk2(nelemi)/pe,
|
|
c * XKP(NELEMI)*P(NELEMI)*(1.+xk2(nelemi)/pe),perev
|
|
c 631 format(2i4,1p7e11.3)
|
|
END DO
|
|
C
|
|
PEREV=SQRT(PEREV/(1.0+SPNION/PE))
|
|
DELTRS=DELTRS+ABS((PE-PEREV)/PE)
|
|
if(iprin.gt.4)
|
|
* write(6,601) niterr,tem,pg*tk,fph*tk,pe*tk,perev*tk,
|
|
* (perev+pe)*0.5*tk,deltrs
|
|
PE=(PEREV+PE)*0.5
|
|
P(99)=PE
|
|
IF(DELTRS.GT.EPS) THEN
|
|
NITERR=NITERR+1
|
|
IF(NITERR.LE.NIMAX) THEN
|
|
GO TO 20
|
|
ELSE
|
|
WRITE(6,605) NIMAX
|
|
END IF
|
|
END IF
|
|
605 FORMAT(1H0,'*DOES NOT CONVERGE AFTER ',I4,' ITERATIONS')
|
|
C
|
|
if(iprin.gt.4) then
|
|
write(6,601) niterr,tem,pg*tk,fph*tk,pe*tk,perev*tk,
|
|
* (perev+pe)*0.5*tk,deltrs
|
|
601 format('russel iterations ',i4,1p7e13.4)
|
|
write(*,*) ' '
|
|
end if
|
|
c
|
|
RETURN
|
|
END
|
|
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
c
|
|
SUBROUTINE SETWIN
|
|
C =================
|
|
C
|
|
C Initialisation of an extended radial structure
|
|
C (spherical symmetry is assumed)
|
|
C with a continuous connection between the lower quasi-hydrostatic
|
|
C layers and the upper, supersonic layers. The velocity structure
|
|
C in the upper layers is a beta-type law (v=vinf*(1-r0/r)^beta).
|
|
C
|
|
C Additional input are read at the end of Unit 8:
|
|
C RCORE : Core radius (deepest layer, in solar radii or in cm)
|
|
C NDRAD : Number of layers
|
|
C NRCORE: Number of core rays
|
|
C INRV : Switch indicating the data to be read:
|
|
C = 0 : Read an hydrostatic, plane-parallel model only; the
|
|
C routine builds the radial points, density and
|
|
C velocity structure;
|
|
C < 0 : Read also an hydrostatic, plane-parallel model, but
|
|
C an empirical velocity law V(r) is read at each
|
|
C radial point (r(id) is read);
|
|
C > 0 : Input from an extended model atmosphere; the velocity
|
|
C law is read; the density structure is recomputed for
|
|
C a possibly different mass-loss rate.
|
|
C XMDOT : Mass loss rate (in solar mass/yr)
|
|
C BETAV, VINF : Parameters of the velocity law (VINF in km/s)
|
|
C RD, VEL: Radial points, expansion velocity
|
|
C
|
|
C Synspec version
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (RSUN=6.96D10)
|
|
common/velaux/velmax,iemoff,nltoff,itrad
|
|
C
|
|
C Read data for spherical atmosphere and velocity law
|
|
C
|
|
READ(8,*,END=9,ERR=9) RCORE,NDRAD,NRCORE,INRV,NFIRY,NDF
|
|
IF(RCORE.LT.1.E5) RCORE=RCORE*RSUN
|
|
IF(NDRAD.GT.MDEPTH) CALL quit('NDRAD too large')
|
|
READ(8,*) XMDOT,BETAV,VINF
|
|
XMDOT=6.30289D25*XMDOT
|
|
VINF=1.D5*VINF
|
|
ND=NDRAD
|
|
DO ID=1,ND
|
|
READ(8,*) RD(ID),VEL(ID),VTURB(ID),DENSCON(ID)
|
|
if(denscon(id).eq.0.) denscon(id)=1.
|
|
vturb(id)=vturb(id)*vturb(id)
|
|
END DO
|
|
C
|
|
C Apply density contrast for clumping
|
|
C
|
|
DO ID=1,ND
|
|
ELEC(ID) = ELEC(ID) * DENSCON(ID)
|
|
DENS(ID) = DENS(ID) * DENSCON(ID)
|
|
DO I=1,NLEVEL
|
|
POPUL(I,ID) = POPUL(I,ID) * DENSCON(ID)
|
|
END DO
|
|
END DO
|
|
C
|
|
C Set up rays and weights
|
|
C
|
|
itrad=1
|
|
call radtem
|
|
CALL SETRAY
|
|
CALL WGTJH1
|
|
C
|
|
9 continue
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE SETRAY
|
|
C =================
|
|
C
|
|
C Setup impact rays and angles
|
|
C (assumes one impact ray tangent to every depth layer)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (PI4=4.*3.141592654)
|
|
PARAMETER (UN=1., TWO=2., HALF=0.5)
|
|
DIMENSION RS(MDEPF ),RDX(MDEPF )
|
|
DIMENSION ZIU(MDEPTH),VIU(MDEPTH),ZIUF(MDEPF ),VIUF(MDEPF )
|
|
C
|
|
C Fine radial grid
|
|
C
|
|
if(ndf.eq.0.or.ndf.eq.nd) then
|
|
ndf=nd
|
|
DO ID=1,NDF
|
|
DENSF(ID)=DENS(ID)
|
|
END DO
|
|
else
|
|
XR1=LOG(DENS(1))
|
|
XR2=LOG(DENS(ND))
|
|
DXR=(XR2-XR1)/FLOAT(NDF-1)
|
|
DO ID=1,NDF
|
|
DENSF(ID)=EXP(XR1+FLOAT(ID-1)*DXR)
|
|
END DO
|
|
end if
|
|
C
|
|
C
|
|
C Impact rays
|
|
C
|
|
NREXT=ND
|
|
DO ID=1,NREXT
|
|
PIM(ID)=RD(ID)
|
|
NUD(ID)=ID
|
|
END DO
|
|
DO IU=1,NRCORE
|
|
PIM(NREXT+IU)=FLOAT(NRCORE-IU)/FLOAT(NRCORE)*RCORE
|
|
NUD(NREXT+IU)=ND
|
|
END DO
|
|
KMU=NREXT+NRCORE
|
|
C
|
|
C Angles
|
|
C
|
|
DO ID=1,ND
|
|
RD1=UN/RD(ID)
|
|
DO IU=ID,KMU
|
|
PRR=PIM(IU)*RD1
|
|
BMU(IU,ID)=SQRT(UN-PRR*PRR)
|
|
END DO
|
|
END DO
|
|
C
|
|
C Depth increments along each ray
|
|
C
|
|
DELZ(1,1)=0.
|
|
DFRQ(1,1)=0.
|
|
DO IU=2,KMU
|
|
NUDF(IU)=NUD(IU)
|
|
IU1=IU
|
|
IF(IU.GT.ND) IU1=ND
|
|
DO ID=1,IU1-1
|
|
DELZ(IU,ID)=BMU(IU,ID)*RD(ID)-BMU(IU,ID+1)*RD(ID+1)
|
|
DFRQ(IU,ID)=BMU(IU,ID)*VEL(ID)/CL
|
|
JD=2*NUD(IU)-ID
|
|
DFRQ(IU,JD)=-DFRQ(IU,ID)
|
|
END DO
|
|
DELZ(IU,IU1)=DELZ(IU,IU1-1)
|
|
DFRQ(IU,IU1)=0.
|
|
IF(IU.GT.NREXT) DFRQ(IU,ND)=BMU(IU,ND)*VEL(ND)/CL
|
|
END DO
|
|
C
|
|
C Finer grid along the NFIRY most external rays
|
|
C velocity steps DVD(ID)
|
|
C
|
|
XMD4=XMDOT/PI4
|
|
CLV=UN/CL
|
|
DO ID=1,ND
|
|
DVD(ID)=SQRT(1.6D7*TEMP(ID)+VTURB(ID)) * 0.3
|
|
c DVD(ID)=SQRT(1.6D7*TEMP(ID))
|
|
END DO
|
|
NUDX=ND
|
|
DO IU=2,NFIRY
|
|
IF(PIM(IU).GT.0.) THEN
|
|
DO ID=1,NUD(IU)
|
|
IID=NUD(IU)-ID+1
|
|
ZIU(ID)=VEL(IID)
|
|
VIU(ID)=DFRQ(IU,IID)*CL
|
|
ENDDO
|
|
ELSE
|
|
DO ID=1,NUD(IU)
|
|
IID=NUD(IU)-ID+1
|
|
ZIU(ID)=RD(IID)
|
|
VIU(ID)=DFRQ(IU,IID)*CL
|
|
ENDDO
|
|
ENDIF
|
|
NUDF(IU)=1
|
|
VIUF(1)=DFRQ(IU,1)*CL
|
|
DO ID=1,NUD(IU)-1
|
|
VZ1=DFRQ(IU,ID)*CL
|
|
VZ2=DFRQ(IU,ID+1)*CL
|
|
NFG=int((VZ1-VZ2)/DVD(ID))+1
|
|
XFG=(VZ1-VZ2)/DFLOAT(NFG)
|
|
IV0=NUDF(IU)
|
|
DO IV=1,NFG
|
|
VIUF(IV0+IV)=VZ1-DFLOAT(IV)*XFG
|
|
ENDDO
|
|
NUDF(IU)=NUDF(IU)+NFG
|
|
IF(NUDF(IU).GT.MDEPF )
|
|
+ CALL quit('Too many points in fine grid - SETRAY')
|
|
END DO
|
|
IF(NUDF(IU).GT.NUDX) NUDX=NUDF(IU)
|
|
INRP=2
|
|
IF(IU.GT.8) INRP=4
|
|
CALL INTERP(VIU,ZIU,VIUF,ZIUF,NUD(IU),NUDF(IU),INRP,0,0)
|
|
IF(PIM(IU).GT.0.) THEN
|
|
DO ID=1,NUDF(IU)
|
|
DMU=VIUF(ID)/ZIUF(ID)
|
|
RS(ID)=PIM(IU)/SQRT(UN-DMU*DMU)
|
|
DFRQF(IU,ID)=VIUF(ID)*CLV
|
|
VELF(IU,ID)=ZIUF(ID)
|
|
RDX(ID)=XMD4/(RS(ID)*RS(ID)*VELF(IU,ID))
|
|
ZIUF(ID)=DMU*RS(ID)
|
|
END DO
|
|
ELSE
|
|
DO ID=1,NUDF(IU)
|
|
RS(ID)=ZIUF(ID)
|
|
DFRQF(IU,ID)=VIUF(ID)*CLV
|
|
VELF(IU,ID)=VIUF(ID)
|
|
RDX(ID)=XMD4/(RS(ID)*RS(ID)*VELF(IU,ID))
|
|
END DO
|
|
END IF
|
|
IF(IU.LE.NREXT) THEN
|
|
DO ID=1,NUDF(IU)
|
|
JD=2*NUDF(IU)-ID
|
|
DFRQF(IU,JD)=-DFRQF(IU,ID)
|
|
END DO
|
|
END IF
|
|
DO ID=1,NUDF(IU)-1
|
|
DELZF(IU,ID)=ZIUF(ID)-ZIUF(ID+1)
|
|
END DO
|
|
DELZF(IU,NUDF(IU))=DELZF(IU,NUDF(IU)-1)
|
|
C
|
|
C Assign depth index
|
|
C
|
|
KRAY(IU,1)=2
|
|
DRAY(IU,1)=0.
|
|
IDK=1
|
|
DO ID=2,NUDF(IU)
|
|
DO WHILE (RDX(ID).GE.DENSF(IDK).and.idk.le.ndf)
|
|
IDK=IDK+1
|
|
END DO
|
|
c IDK=IDK+1
|
|
IF(IDK.GT.NDF) IDK=NDF
|
|
KRAY(IU,ID)=IDK
|
|
DRAY(IU,ID)=(RDX(ID)-DENSF(IDK-1))/(DENSF(IDK)-DENSF(IDK-1))
|
|
END DO
|
|
IF(IU.LE.NREXT) THEN
|
|
DO ID=1,NUDF(IU)
|
|
JD=2*NUDF(IU)-ID
|
|
KRAY(IU,JD)=KRAY(IU,ID)
|
|
DRAY(IU,JD)=DRAY(IU,ID)
|
|
END DO
|
|
END IF
|
|
END DO
|
|
C
|
|
C remaining rays (without finer grid)
|
|
C
|
|
IF(NFIRY.LT.KMU) THEN
|
|
IU=KMU
|
|
KRAY(IU,1)=2
|
|
DRAY(IU,1)=0.
|
|
IDK=1
|
|
DO ID=2,NUDF(IU)
|
|
DO WHILE (DENS(ID).GE.DENSF(IDK).and.idk.le.ndf)
|
|
IDK=IDK+1
|
|
END DO
|
|
c IDK=IDK+1
|
|
IF(IDK.GT.NDF) IDK=NDF
|
|
KRAY(IU,ID)=IDK
|
|
DRAY(IU,ID)=(DENS(ID)-DENSF(IDK-1))/(DENSF(IDK)-DENSF(IDK-1))
|
|
END DO
|
|
DO IU=NFIRY+1,KMU
|
|
DO ID=1,NUDF(IU)
|
|
KRAY(IU,ID)=KRAY(KMU,ID)
|
|
DRAY(IU,ID)=DRAY(KMU,ID)
|
|
DFRQF(IU,ID)=DFRQ(IU,ID)
|
|
DELZF(IU,ID)=DELZ(IU,ID)
|
|
ENDDO
|
|
IF(IU.LE.NREXT) THEN
|
|
DO ID=1,NUDF(IU)
|
|
JD=2*NUDF(IU)-ID
|
|
KRAY(IU,JD)=KRAY(IU,ID)
|
|
DRAY(IU,JD)=DRAY(IU,ID)
|
|
DFRQF(IU,JD)=-DFRQF(IU,ID)
|
|
END DO
|
|
END IF
|
|
END DO
|
|
END IF
|
|
C
|
|
NFTOT=0
|
|
DO IU=2,KMU
|
|
IUD=NUDF(IU)
|
|
IF(IU.LE.NREXT) IUD=2*NUDF(IU)-1
|
|
NFTOT=NFTOT+IUD
|
|
ENDDO
|
|
write(10,*) 'NFTOT=',NFTOT
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE WGTJH1
|
|
C =================
|
|
C
|
|
C Angle quadrature weights
|
|
C from Hummer, Kunasz, & Kunasz, 1973, Comp. Phys. Comm. 6, 38
|
|
C
|
|
C The present version of this routine assumes that there are
|
|
C impact rays tangent to every depth layers (i.e. NREXT=ND)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (UN=1., TWO=2., HALF=0.5)
|
|
PARAMETER (SIX=6.)
|
|
PARAMETER (C03=UN/3.,D03=2./3.,C04=UN/4.,C06=UN/6.)
|
|
PARAMETER (C24=UN/24.,C45=UN/45.,D45=2./45.,C72=UN/72.)
|
|
DIMENSION WAJ(MKU),WBJ(MKU),AHH(MKU,4)
|
|
DIMENSION BMUH(MKU),BMUHP(MKU),WAH(MKU),WBH(MKU)
|
|
DIMENSION WSD(MKU),WSU(MKU),WSL(MKU),WUU(MKU)
|
|
DIMENSION WTD(MKU),WTU(MKU),WTL(MKU)
|
|
C
|
|
DO 100 ID=1,ND
|
|
DO IU=ID+1,KMU
|
|
AHH(IU,1)=BMU(IU,ID)-BMU(IU-1,ID)
|
|
AHH(IU,2)=AHH(IU,1)*AHH(IU,1)
|
|
AHH(IU,3)=AHH(IU,2)*AHH(IU,1)
|
|
AHH(IU,4)=AHH(IU,3)*AHH(IU,1)
|
|
BMUH(IU)=BMU(IU,ID)*AHH(IU,1)
|
|
BMUHP(IU)=BMU(IU-1,ID)*AHH(IU,1)
|
|
END DO
|
|
C
|
|
C Weights for J
|
|
C
|
|
WAJ(ID)=HALF*AHH(ID+1,1)
|
|
WAJ(KMU)=HALF*AHH(KMU,1)
|
|
WBJ(ID)=-C24*AHH(ID+1,3)
|
|
WBJ(KMU)=-C24*AHH(KMU,3)
|
|
WSL(ID+1)=C06*AHH(ID+1,1)
|
|
WSU(KMU-1)=0.
|
|
WSD(ID)=C03*AHH(ID+1,1)
|
|
WSD(KMU)=UN
|
|
WTL(ID+1)=UN/AHH(ID+1,1)
|
|
WTU(KMU-1)=0.
|
|
WTD(ID)=-WTL(ID+1)
|
|
WTD(KMU)=0.
|
|
DO IU=ID+1,KMU-1
|
|
WAJ(IU)=HALF*(AHH(IU,1)+AHH(IU+1,1))
|
|
WBJ(IU)=-C24*(AHH(IU+1,3)+AHH(IU,3))
|
|
AH1=SIX/(AHH(IU,1)+AHH(IU+1,1))
|
|
WSL(IU+1)=C06*AH1*AHH(IU+1,1)
|
|
WSU(IU-1)=UN-WSL(IU+1)
|
|
WSD(IU)=TWO
|
|
WTL(IU+1)=AH1/AHH(IU+1,1)
|
|
WTU(IU-1)=AH1/AHH(IU,1)
|
|
WTD(IU)=-SIX/AHH(IU,1)/AHH(IU+1,1)
|
|
END DO
|
|
NMUD=KMU-ID+1
|
|
CALL TRIDAG(WSL,WSD,WSU,WBJ,WUU,NMUD)
|
|
WMUJ(ID,ID)=WAJ(ID)+WTD(ID)*WUU(ID)+WTU(ID)*WUU(ID+1)
|
|
WMUJ(KMU,ID)=WAJ(KMU)+WTL(KMU)*WUU(KMU-1)+WTD(KMU)*WUU(KMU)
|
|
DO IU=ID+1,KMU-1
|
|
WMUJ(IU,ID)=WAJ(IU)+WTL(IU)*WUU(IU-1)+
|
|
* WTD(IU)*WUU(IU)+WTU(IU)*WUU(IU+1)
|
|
END DO
|
|
C
|
|
C Weights for emergent flux H
|
|
C
|
|
IF(ID.GT.1) GO TO 100
|
|
WAH(ID)=HALF*BMUH(ID+1)-C03*AHH(ID+1,2)
|
|
WAH(KMU)=HALF*BMUHP(KMU)+C03*AHH(KMU,2)
|
|
WBH(ID)=AHH(ID+1,3)*(C45*AHH(ID+1,1)-C24*BMU(ID+1,ID))
|
|
WBH(KMU)=-AHH(KMU,3)*(C45*AHH(KMU,1)+C24*BMU(KMU-1,ID))
|
|
WSL(ID+1)=0.
|
|
WSD(ID)=UN
|
|
WTL(ID+1)=0.
|
|
WTD(ID)=0.
|
|
DO IU=ID+1,KMU-1
|
|
WAH(IU)=HALF*(BMUH(IU+1)+BMUHP(IU))-
|
|
* C03*(AHH(IU+1,2)-AHH(IU,2))
|
|
WBH(IU)=-C24*(BMUH(IU+1)*AHH(IU+1,2)+BMUHP(IU)*AHH(IU,2))+
|
|
* C45*(AHH(IU+1,4)-AHH(IU,4))
|
|
END DO
|
|
CALL TRIDAG(WSL,WSD,WSU,WBH,WUU,NMUD)
|
|
WMUH(ID)=WAH(ID)+WTD(ID)*WUU(ID)+WTU(ID)*WUU(ID+1)
|
|
WMUH(KMU)=WAH(KMU)+WTL(KMU)*WUU(KMU-1)+WTD(KMU)*WUU(KMU)
|
|
DO IU=ID+1,KMU-1
|
|
WMUH(IU)=WAH(IU)+WTL(IU)*WUU(IU-1)+
|
|
* WTD(IU)*WUU(IU)+WTU(IU)*WUU(IU+1)
|
|
END DO
|
|
C
|
|
100 CONTINUE
|
|
C
|
|
C Weights for H are overwritten by trapezoidal weigths
|
|
C
|
|
id=1
|
|
wmuh(1)=bmu(1,id)*(bmu(2,id)-bmu(1,id))*half
|
|
wmuh(kmu)=bmu(kmu,id)*(bmu(kmu,id)-bmu(kmu-1,id))*half
|
|
do iu=2,kmu-1
|
|
wmuh(iu)=bmu(iu,id)*(bmu(iu+1,id)-bmu(iu-1,id))*half
|
|
end do
|
|
c
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE TRIDAG(A,B,C,R,U,N)
|
|
C ==============================
|
|
C
|
|
C Solve tridiagonal system of equations
|
|
C from Numerical Recipes (standard Gaussian elimination)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
DIMENSION A(N),B(N),C(N),R(N),U(N)
|
|
DIMENSION GTRID(MKU)
|
|
C
|
|
BTRID=B(1)
|
|
U(1)=R(1)/BTRID
|
|
DO J=2,N
|
|
GTRID(J)=C(J-1)/BTRID
|
|
BTRID=B(J)-A(J)*GTRID(J)
|
|
U(J)=(R(J)-A(J)*U(J-1))/BTRID
|
|
ENDDO
|
|
DO J=N-1,1,-1
|
|
U(J)=U(J)-GTRID(J+1)*U(J+1)
|
|
ENDDO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE RESOLW
|
|
C =================
|
|
C
|
|
C driver for evaluating opacities and emissivities which then
|
|
C enter the solution of the radiative transfer equation (RTEWIN)
|
|
C Setup opacities for a given frequency set
|
|
C Oversample in radial and frequency space for later interpolation
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (UN=1., TWO=2., HALF=0.5)
|
|
DIMENSION CROSS(MCROSS,MOPAC),
|
|
* ABSO(MOPAC),EMIS(MOPAC),
|
|
* ABSOC(MFREQC),EMISC(MFREQC),SCATC(MFREQC)
|
|
DIMENSION ABSD(MDEPTH),ASF(MDEPF),XDS(MDEPTH),XDSF(MDEPF)
|
|
COMMON/CONOPA/CHC(MFREQC,MDEPTH),ETC(MFREQC,MDEPTH),
|
|
* SCC(MFREQC,MDEPTH)
|
|
COMMON/HPOPST/HPOP
|
|
COMMON/COPAC/AB(MOPAC,MDEPF),STH(MOPAC,MDEPF),SCH(MFREQC,MDEPF)
|
|
COMMON/LIMPAR/ALAM0,ALAM1,FRMIN,FRLAST,FRLI0,FRLIM
|
|
COMMON/BLAPAR/RELOP,SPACE0,CUTOF0,TSTD,DSTD,ALAMC
|
|
COMMON/FRQSET/IFRS,NFRS
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
C
|
|
C set up the partial line list for the current interval
|
|
C
|
|
CALL INISET
|
|
C
|
|
C output of information about selected lines
|
|
C
|
|
IF(IMODE.LT.2) CALL INIBLA
|
|
C
|
|
C Setup fine grid of frequencies
|
|
C
|
|
CLV=UN/2.997925E10
|
|
FQ1=FREQ(1)*(UN+VINF*CLV)
|
|
FQ2=FREQ(NFREQ)*(UN-VINF*CLV)
|
|
VXD=SQRT(0.3e7*TSTD)*FREQ(1)*CLV
|
|
VXS=SPACE0*FREQ(1)*FREQ(1)*CLV*1.e-7
|
|
c DVX=MAX(VXD,VXS)
|
|
DVX=VXS
|
|
NOPAC=int((FQ1-FQ2)/DVX)+1
|
|
DVX=(FQ1-FQ2)/DFLOAT(NOPAC)
|
|
NOPAC=NOPAC+3
|
|
nopac=nfreq
|
|
WRITE(6,600) NOPAC,NDF
|
|
IF(NOPAC.GT.MOPAC) CALL quit('Too many freqs in fine grid')
|
|
DO IJ=1,NOPAC
|
|
FFQ(ij)=FQ1-DFLOAT(ij-1)*DVX
|
|
c freq(ij)=ffq(ij)
|
|
c wlam(ij)=2.997925e18/freq(ij)
|
|
fr=freq(ij)*1.d-15
|
|
BNUE(IJ)=BN*fr*fr*fr
|
|
DO IJCI=IJC,NFREQC-1
|
|
IF(WLAM(IJ).LE.WLAMC(IJCI)) GO TO 248
|
|
END DO
|
|
248 CONTINUE
|
|
IJC=IJCI
|
|
IJCINT(IJ)=MAX(IJC-1,1)
|
|
IJCI=IJCINT(IJ)
|
|
FRX1(IJ)=(FREQ(IJ)-FREQC(IJCI+1))/
|
|
* (FREQC(IJCI)-FREQC(IJCI+1))
|
|
c write(80,681) ij,ijci,wlam(ij),wlamc(ijci),freq(ij),frx1(ij)
|
|
c 681 format(2i5,2f10.3,1p2e11.3)
|
|
END DO
|
|
nfreq=nopac
|
|
DO JI=1,NOPAC-1
|
|
FFQV(JI)=UN/(FFQ(JI)-FFQ(JI+1))
|
|
END DO
|
|
FFQV(NOPAC)=UN
|
|
c
|
|
c the continuum opacities and radiation field - done only once
|
|
c
|
|
c -----------------------------------
|
|
if(iblank.le.1) then
|
|
C
|
|
c determine the "core" radius and the factor that multiplies
|
|
c H_nu at ID=1 to get physical flux there (R2F)
|
|
c
|
|
ID0=ND
|
|
DO WHILE(TEMP(ID0).GT.TEFF .AND. ID0.GT.1)
|
|
ID0=ID0-1
|
|
END DO
|
|
ID0=ID0+1
|
|
R2F=RD(1)*RD(1)/RD(ID0)/RD(ID0)
|
|
c
|
|
C photoinization cross-sections
|
|
C
|
|
CALL CROSEW(CROSS)
|
|
C
|
|
C store opacity and emissivity in continuum
|
|
C
|
|
DO ID=1,ND
|
|
CALL OPACW(ID,CROSS,ABSO,EMIS,ABSOC,EMISC,SCATC,0)
|
|
DO IJ=1,NFREQC
|
|
CHC(IJ,ID)=ABSOC(IJ) / DENSCON(ID)
|
|
ETC(IJ,ID)=EMISC(IJ) / DENSCON(ID)
|
|
SCC(IJ,ID)=(SCATC(IJ)+ELEC(ID)*SIGE) / DENSCON(ID)
|
|
END DO
|
|
END DO
|
|
C
|
|
c radiation field in the continuum
|
|
c
|
|
call rtesca
|
|
do ij=1,nfreqc
|
|
write(17,640) wlamc(ij),fluxc(ij)*r2f
|
|
end do
|
|
640 FORMAT(1H ,F10.4,1PE15.5)
|
|
c
|
|
end if
|
|
c -----------------------------------
|
|
C
|
|
C Store opacity and thermal source function in all frequencies
|
|
C and depths
|
|
C
|
|
DO ID=1,ND
|
|
CALL OPACW(ID,CROSS,ABSO,EMIS,ABSOC,EMISC,SCATC,1)
|
|
DO IJ=1,NOPAC
|
|
AB(IJ,ID)=ABSO(IJ) / DENSCON(ID)
|
|
STH(IJ,ID)=EMIS(IJ)/ABSO(IJ)
|
|
END DO
|
|
END DO
|
|
C
|
|
c do id=1,nd
|
|
c do ij=1,nopac
|
|
c write(92,693) id,ij,wlam(ij),ab(ij,id),sth(ij,id)
|
|
c end do
|
|
c end do
|
|
c 693 format(2i5,f10.3,1p2e10.3)
|
|
C
|
|
C Interpolate to a finer radial (density) grid
|
|
C
|
|
if(ndf.ne.nd) then
|
|
DO ID=1,ND
|
|
XDS(ID)=LOG10(DENS(ID))
|
|
END DO
|
|
DO ID=1,NDF
|
|
XDSF(ID)=LOG10(DENSF(ID))
|
|
END DO
|
|
DO IJ=1,NOPAC
|
|
DO ID=1,ND
|
|
ABSD(ID)=AB(IJ,ID)
|
|
END DO
|
|
CALL INTERP(XDS ,ABSD,XDSF ,ASF,ND,NDF,2,0,1)
|
|
DO ID=1,NDF
|
|
AB(IJ,ID)=ASF(ID)
|
|
END DO
|
|
DO ID=1,ND
|
|
ABSD(ID)=STH(IJ,ID)
|
|
END DO
|
|
CALL INTERP(XDS ,ABSD,XDSF ,ASF,ND,NDF,2,0,1)
|
|
DO ID=1,NDF
|
|
STH(IJ,ID)=ASF(ID)
|
|
END DO
|
|
END DO
|
|
DO IJ=1,NFREQC
|
|
DO ID=1,ND
|
|
ABSD(ID)=SCC(IJ,ID)
|
|
END DO
|
|
CALL INTERP(XDS ,ABSD,XDSF ,ASF,ND,NDF,2,0,1)
|
|
DO ID=1,NDF
|
|
SCH(IJ,ID)=ASF(ID)
|
|
END DO
|
|
END DO
|
|
end if
|
|
WRITE(6,601)
|
|
600 FORMAT(/,' Opacity table for',i5,' frequencies and',/,
|
|
* ' ',i5,' radial (density) points')
|
|
601 FORMAT(' Done'/)
|
|
C
|
|
C
|
|
C Loop on rays, solving radiative transfer equation
|
|
C
|
|
DO IJ=1,NFREQ
|
|
FLUX(IJ)=0.
|
|
END DO
|
|
DO IU=2,KMU
|
|
CALL RTEWIN(IU)
|
|
END DO
|
|
DO IJ=1,NFREQ
|
|
FLUX(IJ)=FLUX(IJ)*R2F
|
|
END DO
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ****************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE RTESCA
|
|
C =================
|
|
C
|
|
C Solution of the radiative transfer equation
|
|
C for deriving the scattering in continuum
|
|
C
|
|
C Solution along every rays, for the spherically-symmetric case
|
|
C
|
|
C Solution in the optical depth scale
|
|
C
|
|
C The numerical method used:
|
|
C Discontinuous Finite Element method
|
|
C Castor, Dykema, Klein, 1992, ApJ 387, 561.
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (UN=1., TWO=2., HALF=0.5)
|
|
PARAMETER (NTRALI=10,DJMAX=1.D-3)
|
|
COMMON/RTEOPA/CH(MFREQ,MDEPTH),ET(MFREQ,MDEPTH),
|
|
* SC(MFREQ,MDEPTH)
|
|
COMMON/CONOPA/CHC(MFREQC,MDEPTH),ETC(MFREQC,MDEPTH),
|
|
* SCC(MFREQC,MDEPTH)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
COMMON/CONSCV/SCCF(MFREQC,mdepf)
|
|
DIMENSION ST0(mdepf ),RAD00(mdepf ),AB0(mdepf ),ALI1(mdepf ),
|
|
* rip(mdepf ),rim(mdepf ),riin(mdepf ),riup(mdepf ),
|
|
* aip(mdepf ),aim(mdepf ),aiin(mdepf ),aiup(mdepf )
|
|
dimension dt(mdepf ),dtau(mdepf ),RDX(mdepf ),PTX(mdepf )
|
|
dimension uf(mdepf ),af(mdepf ),ss0(mdepf ),scx(mdepth)
|
|
dimension densr(mdepf),rdy(mdepf),
|
|
* abc0(mdepf),abc1(mdepf),stc0(mdepf),stc1(mdepf),
|
|
* scc0(mdepf),scc01(mdepf)
|
|
COMMON/COPAC/AB(MOPAC,MDEPF),STH(MOPAC,MDEPF),SCH(MFREQC,MDEPF)
|
|
C
|
|
C overall loop over continuum frequencies
|
|
C
|
|
DO 500 IJ=1,NFREQC
|
|
FR=FREQC(IJ)
|
|
C
|
|
C Initialisation of J=B
|
|
C
|
|
if(ij.eq.1) then
|
|
FR15=FR*1.D-15
|
|
BNU=BN*FR15*FR15*FR15
|
|
HKFR=HK*FR
|
|
DO ID=1,ND
|
|
RAD00(ID)=BNU/(EXP(HKFR/TEMP(ID))-UN)
|
|
END DO
|
|
end if
|
|
C
|
|
C Loop over electron scattering
|
|
C
|
|
itrali=0
|
|
10 itrali=itrali+1
|
|
fluxc(ij)=0.
|
|
C
|
|
DO ID=1,ND
|
|
RAD1(ID)=0.
|
|
ALI1(ID)=0.
|
|
END DO
|
|
C
|
|
C Loop over impact rays
|
|
C
|
|
if(nd.eq.ndf) then
|
|
do id=1,nd
|
|
densf(id)=dens(id)
|
|
rdx(id)=rad00(id)
|
|
abc0(id)=chc(ij,id)
|
|
stc0(id)=etc(ij,id)/chc(ij,id)
|
|
scc0(id)=scc(ij,id)
|
|
end do
|
|
else
|
|
CALL INTERP(DENS,RAD00,DENSF,RDX,ND,NDF,4,1,0)
|
|
do id=1,nd
|
|
abc1(id)=chc(ij,id)
|
|
stc1(id)=etc(ij,id)/chc(ij,id)
|
|
scc01(ij)=scc(ij,id)
|
|
end do
|
|
CALL INTERP(DENS,abc1,DENSF,abc0,ND,NDF,4,1,0)
|
|
CALL INTERP(DENS,stc1,DENSF,stc0,ND,NDF,4,1,0)
|
|
CALL INTERP(DENS,scc01,DENSF,scc0,ND,NDF,4,1,0)
|
|
end if
|
|
DO 100 IU=1,KMU
|
|
iud=nud(iu)
|
|
IF(IU.LE.NFIRY) IUD=NUDF(IU)
|
|
if(iud.le.1) goto 100
|
|
DO ID=1,IUD
|
|
KY=KRAY(IU,ID)
|
|
YDR=DRAY(IU,ID)
|
|
YDR1=UN-DRAY(IU,ID)
|
|
DENSR(ID)=YDR1*DENSF(KY-1)+YDR*DENSF(KY)
|
|
AB0(ID)=YDR1*abc0(KY-1)+YDR*abc0(KY)
|
|
ST0(ID)=YDR1*stc0(KY-1)+YDR*stc0(KY)
|
|
SC0=YDR1*scc0(KY-1)+YDR*scc0(KY)
|
|
RDY(id)=YDR1*RDX(KY-1)+YDR*RDX(KY)
|
|
SS0(ID)=SC0/AB0(ID)
|
|
ST0(ID)=ST0(ID)+SS0(ID)*RDY(ID)
|
|
END DO
|
|
IF(IU.LE.NFIRY) THEN
|
|
DO ID=1,IUD-1
|
|
DTAU(ID)=HALF*(AB0(ID)+AB0(ID+1))*DELZF(IU,ID)
|
|
END DO
|
|
ELSE
|
|
DO ID=1,IUD-1
|
|
DT(ID)=HALF*(AB0(ID)+AB0(ID+1))
|
|
DTAU(ID)=DT(ID)*DELZ(IU,ID)
|
|
END DO
|
|
END IF
|
|
C
|
|
C incoming intensity (TAUMIN=0.)
|
|
C
|
|
rim(1)=0.
|
|
aim(1)=0.
|
|
do id=1,iud-1
|
|
dt0=dtau(id)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=un/(dtau2+bb)
|
|
rip(id)=(bb*rim(id)+cc*st0(id)-dt0*st0(id+1))*aa
|
|
rim(id+1)=(two*rim(id)+dt0*st0(id)+cc*st0(id+1))*aa
|
|
aip(id)=(cc+bb*aim(id))*aa
|
|
aim(id+1)=cc*aa
|
|
enddo
|
|
do id=2,iud-1
|
|
dtt=un/(dtau(id-1)+dtau(id))
|
|
riin(id)=(rim(id)*dtau(id)+rip(id)*dtau(id-1))*dtt
|
|
aiin(id)=(aim(id)*dtau(id)+aip(id)*dtau(id-1))*dtt
|
|
enddo
|
|
riin(1)=rim(1)
|
|
riin(iud)=rim(iud)
|
|
aiin(1)=aim(1)
|
|
aiin(iud)=aim(iud)
|
|
rip(iud)=rim(iud)
|
|
C
|
|
C Outgoing intensity
|
|
C symmetric boundary condition (rim(iud)=riin(iud))
|
|
C or diffusion approx. for core rays
|
|
C
|
|
IF(IU.GT.NREXT) THEN
|
|
PLAND=BNU/(EXP(HKFR/TEMP(ND))-UN)
|
|
DPLAN=PLAND-BNU/(EXP(HKFR/TEMP(ND-1))-UN)
|
|
c rim(iud)=PLAND+dplan/dtau(iud-1)
|
|
rip(iud)=PLAND+dplan/dtau(iud-1)
|
|
dt0=dtau(iud-1)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=dtau2+bb
|
|
rim(iud)=(aa*rip(iud)-cc*st0(iud)+dt0*st0(iud-1))/bb
|
|
ENDIF
|
|
do id=iud-1,1,-1
|
|
dt0=dtau(id)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=un/(dtau2+bb)
|
|
rip(id+1)=(bb*rim(id+1)+cc*st0(id+1)-dt0*st0(id))*aa
|
|
rim(id)=(two*rim(id+1)+dt0*st0(id+1)+cc*st0(id))*aa
|
|
aip(id+1)=(cc+bb*aim(id+1))*aa
|
|
aim(id)=cc*aa
|
|
enddo
|
|
do id=2,iud-1
|
|
dtt=un/(dtau(id-1)+dtau(id))
|
|
riup(id)=(rim(id)*dtau(id-1)+rip(id)*dtau(id))*dtt
|
|
aiup(id)=(aim(id)*dtau(id-1)+aip(id)*dtau(id))*dtt
|
|
enddo
|
|
riup(1)=rim(1)
|
|
riup(iud)=rim(iud)
|
|
aiup(1)=aim(1)
|
|
aiup(iud)=aim(iud)
|
|
C
|
|
C symmetrized (Feautrier) intensity -- (riin+riup)/2 --
|
|
C and interpolation in original radial grid
|
|
C
|
|
do id=1,iud
|
|
uf(id)=(riup(id)+riin(id))
|
|
af(id)=(aiup(id)+aiin(id))
|
|
end do
|
|
if(iu.le.nfiry) then
|
|
inrp=min(nud(iu),4)
|
|
call interp(densr,uf,dens,ptx,iud,nud(iu),inrp,1,0)
|
|
do id=1,nud(iu)
|
|
uf(id)=ptx(id)
|
|
end do
|
|
call interp(densr,af,dens,ptx,iud,nud(iu),inrp,1,0)
|
|
do id=1,nud(iu)
|
|
af(id)=ptx(id)
|
|
end do
|
|
iud=nud(iu)
|
|
end if
|
|
C
|
|
C Contribution to J
|
|
C
|
|
do id=1,nud(iu)
|
|
rad1(id)=rad1(id)+wmuj(iu,id)*uf(id)
|
|
ali1(id)=ali1(id)+wmuj(iu,id)*af(id)
|
|
end do
|
|
FLUXc(IJ)=FLUXc(IJ)+WMUH(IU)*RIM(1)
|
|
C
|
|
C End loop over impact rays
|
|
C
|
|
100 CONTINUE
|
|
C
|
|
C solution of the transfer equation
|
|
C Variables:
|
|
C RAD1 - mean intensity
|
|
C
|
|
NDX=NUDF(KMU)
|
|
CALL INTERP(DENSR,SS0,DENS,SCX,NDX,ND,4,1,1)
|
|
DJTOT=0.
|
|
DO ID=1,ND
|
|
RAD1(ID)=RAD1(ID)*HALF
|
|
ALI1(ID)=ALI1(ID)*HALF
|
|
SSS=SCX(ID)
|
|
c DELTAJ=(UN+SSS*ALI1(ID))*(RAD1(ID)-RAD00(ID))
|
|
DELTAJ=(RAD1(ID)-RAD00(ID))/(UN-SSS*ALI1(ID))
|
|
c DELTAJ=RAD1(ID)-RAD00(ID)
|
|
RAD00(ID)=RAD00(ID)+DELTAJ
|
|
DJTOT=MAX(DJTOT,ABS(DELTAJ/RAD00(ID)))
|
|
END DO
|
|
write(6,1600) ij,2.997925e18/fr,itrali,djtot,djmax
|
|
IF(DJTOT.GT.DJMAX.AND.ITRALI.LE.NTRALI) GO TO 10
|
|
1600 format(' IJ,LAM,ITRALI,DJ',i5,f10.2,i5,1p2e12.3)
|
|
C
|
|
C end loop for electron scattering
|
|
C
|
|
CALL INTERP(DENS,RAD00,DENSF,RDX,ND,NDF,4,1,0)
|
|
do id=1,ndf
|
|
sccf(ij,id)=scc0(ID)*RDX(ID)
|
|
enddo
|
|
fluxc(ij)=fluxc(ij)*2.997925e18/wlamc(ij)**2*0.5
|
|
C
|
|
500 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE RTEWIN(IU)
|
|
C =====================
|
|
C
|
|
C Solution of the radiative transfer equation - frequency by
|
|
C frequency - for the known source function.
|
|
C
|
|
C The numerical method used:
|
|
c Discontinuous Finite Element (DFE) method
|
|
c Castor, Dykema, Klein, 1992, ApJ 387, 561.
|
|
C
|
|
C Input through blank COMMON block:
|
|
C AB - two-dimensional array absorption coefficient (frequency,
|
|
C depth)
|
|
C STH - Thermal source function
|
|
C
|
|
C Version including velocity field and extension
|
|
C radiative transfer along ray IU
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
PARAMETER (UN=1., TWO=2., HALF=0.5)
|
|
PARAMETER (TAUREF = 0.6666666666667)
|
|
DIMENSION ST0(2*MDEPF ),TAU(2*MDEPF ),AB0(2*MDEPF ),
|
|
* rip(2*MDEPF ),rim(2*MDEPF )
|
|
c dimension sc0(2*mdepf)
|
|
dimension sctd(2*mdepf)
|
|
COMMON/COPAC/AB(MOPAC,MDEPF),STH(MOPAC,MDEPF),SCH(MFREQC,MDEPF)
|
|
COMMON/EMFLUX/FLUX(MFREQ),FLUXC(MFREQC)
|
|
COMMON/CONSCV/SCCF(MFREQC,mdepf)
|
|
COMMON/REFDEP/IREFD(MFREQ)
|
|
C
|
|
IUD=NUDF(IU)
|
|
IF(IU.LE.NREXT) IUD=2*NUDF(IU)-1
|
|
IF(IUD.EQ.1) RETURN
|
|
IF(NFREQ.GT.1) dlama0=(wlobs(nfrobs)-wlobs(1))/(nfrobs-1)
|
|
C
|
|
C overall loop over frequencies (observer's frame)
|
|
C
|
|
DO 500 IJ=1,NFROBS
|
|
FR=FRQOBS(IJ)
|
|
wl0=wlobs(ij)
|
|
C
|
|
C Opacity and total source function
|
|
c interpolation in opacity table
|
|
C
|
|
IVK=NOPAC-2
|
|
DO ID=1,IUD
|
|
KY=KRAY(IU,ID)
|
|
YDR=DRAY(IU,ID)
|
|
YDR1=UN-YDR
|
|
dwlcom=wl0*DFRQF(IU,ID)
|
|
wlcom=wl0+dwlcom
|
|
if(wlcom.le.wlam(3)) then
|
|
abd1=ab(1,ky-1)
|
|
std1=sth(1,ky-1)
|
|
abd0=ab(1,ky)
|
|
std0=sth(1,ky)
|
|
ij1=1
|
|
else if(wlcom.ge.wlam(nfreq)) then
|
|
abd1=ab(nfreq,ky-1)
|
|
std1=sth(nfreq,ky-1)
|
|
abd0=ab(nfreq,ky)
|
|
std0=sth(nfreq,ky)
|
|
ij1=nfreq
|
|
else
|
|
xijap=(wlcom-wlam(3))/dlama0
|
|
ijap=int(xijap)
|
|
ijap=max(ijap,1)
|
|
ijap=min(ijap,nfreq)
|
|
wlap=wlam(ijap)
|
|
if(wlcom.lt.wlap) then
|
|
ij1=ijap-1
|
|
do iji=ijap-1,1,-1
|
|
if(wlcom.ge.wlam(iji)) go to 20
|
|
end do
|
|
20 continue
|
|
ij1=iji
|
|
else
|
|
ij1=ijap+1
|
|
do iji=ijap+1,nfreq
|
|
if(wlcom.lt.wlam(iji)) go to 30
|
|
end do
|
|
30 continue
|
|
ij1=iji-1
|
|
end if
|
|
xfa=(wlam(ij1+1)-wlcom)/(wlam(ij1+1)-wlam(ij1))
|
|
abd1=xfa*ab(ij1,ky-1)+(1.-xfa)*ab(ij1+1,ky-1)
|
|
std1=xfa*sth(ij1,ky-1)+(1.-xfa)*sth(ij1+1,ky-1)
|
|
abd0=xfa*ab(ij1,ky)+(1.-xfa)*ab(ij1+1,ky)
|
|
std0=xfa*sth(ij1,ky)+(1.-xfa)*sth(ij1+1,ky)
|
|
end if
|
|
AB0(ID)=YDR1*Abd1+YDR*abd0
|
|
ST0(ID)=YDR1*Std1+YDR*Std0
|
|
C
|
|
C Add scattering
|
|
C
|
|
IJC=IJCINT(IJ1)
|
|
IF(IFREQ.NE.17) THEN
|
|
SC1=YDR1*SCCF(ijc,KY-1)+YDR*SCCF(ijc,KY)
|
|
SC2=YDR1*SCCF(ijc+1,KY-1)+YDR*SCCF(ijc+1,KY)
|
|
SCT=FRX1(ij1)*SC1+(1.-FRX1(ij1))*SC2
|
|
sctd(id)=sct/ab0(id)
|
|
ST0(ID)=ST0(ID)+SCT/AB0(ID)
|
|
END IF
|
|
ENDDO
|
|
C
|
|
C Optical depth scale
|
|
C
|
|
TAU(1)=0.
|
|
IREF=1
|
|
IF(IU.LE.NFIRY) THEN
|
|
DO ID=1,IUD-1
|
|
JD=ID
|
|
IF(ID.GT.NUDF(IU)) JD=2*NUDF(IU)-ID-1
|
|
DT=HALF*(AB0(ID+1)+AB0(ID))*DELZF(IU,JD)
|
|
TAU(ID+1)=TAU(ID)+DT
|
|
END DO
|
|
ELSE
|
|
DO ID=1,IUD-1
|
|
JD=ID
|
|
IF(ID.GT.NUD(IU)) JD=2*NUD(IU)-ID-1
|
|
DT=HALF*(AB0(ID+1)+AB0(ID))*DELZ(IU,JD)
|
|
TAU(ID+1)=TAU(ID)+DT
|
|
END DO
|
|
END IF
|
|
if(iu.eq.kmu) then
|
|
DO ID=1,IUD-1
|
|
IF(TAU(ID).LE.TAUREF.AND.TAU(ID+1).GT.TAUREF) IREF=ID
|
|
END DO
|
|
irefd(ij)=iref
|
|
end if
|
|
C
|
|
C Outgoing intensity
|
|
C
|
|
IF(IU.LE.NREXT) THEN
|
|
C
|
|
C 1. External rays
|
|
C
|
|
ndt=iud
|
|
rip(ndt)=0.
|
|
dt0=tau(ndt)-tau(ndt-1)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=dtau2+bb
|
|
rim(ndt)=(aa*rip(ndt)-cc*st0(ndt)+dt0*st0(ndt-1))/bb
|
|
do id=1,iud-1
|
|
jd=iud-id
|
|
dt0=tau(jd+1)-tau(jd)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=un/(dtau2+bb)
|
|
rim(jd)=(two*rim(jd+1)+dt0*st0(jd+1)+cc*st0(jd))*aa
|
|
enddo
|
|
ELSE
|
|
C
|
|
C 2. core rays
|
|
C
|
|
NDT=IUD
|
|
FR15=FR*1.D-15
|
|
BNU=BN*FR15*FR15*FR15
|
|
PLAND=BNU/(EXP(HK*FR/TEMP(ND))-UN)
|
|
DPLAN=BNU/(EXP(HK*FR/TEMP(ND-1))-UN)
|
|
DPLAN=(PLAND-DPLAN)/(TAU(IUD)-TAU(IUD-1))
|
|
RIP(NDT)=PLAND+DPLAN
|
|
dt0=tau(ndt)-tau(ndt-1)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=dtau2+bb
|
|
rim(ndt)=(aa*rip(ndt)-cc*st0(ndt)+dt0*st0(ndt-1))/bb
|
|
do id=iud-1,1,-1
|
|
dt0=tau(id+1)-tau(id)
|
|
dtaup1=dt0+un
|
|
dtau2=dt0*dt0
|
|
bb=two*dtaup1
|
|
cc=dt0*dtaup1
|
|
aa=un/(dtau2+bb)
|
|
rim(id)=(two*rim(id+1)+dt0*st0(id+1)+cc*st0(id))*aa
|
|
enddo
|
|
ENDIF
|
|
FLUX(IJ)=FLUX(IJ)+WMUH(IU)*RIM(1)
|
|
c
|
|
c if(ij.eq.1.or.ij.eq.3.or.ij.eq.5.or.ij.eq.9.or.ij.eq.83) then
|
|
c if(iu.eq.2.or.iu.eq.20.or.iu.eq.60.or.iu.eq.80) then
|
|
c do id=1,iud
|
|
c write(79,679) ij,iu,id,ab0(id),st0(id),sctd(id),
|
|
c * tau(id),rim(id),
|
|
c * flux(ij)
|
|
c end do
|
|
c end if
|
|
c end if
|
|
c 679 format(3i5,1p6e12.4)
|
|
C
|
|
c CFX=WMUH(IU)*RIM(1)
|
|
c write(78,780) ij,iu,wlobs(ij),cfx,RIM(1)
|
|
c 780 format(2i4,f10.3,1p2e16.8)
|
|
C
|
|
c if(iflux.ge.1) then
|
|
C
|
|
C output of emergent specific intensities to Unit 10 (line points)
|
|
C or 18 (two continuum points)
|
|
C
|
|
c IF(IJ.GT.2) THEN
|
|
c WRITE(10,618) WLAM(IJ),FLUX(IJ),RIM(1),IU
|
|
c ELSE
|
|
c WRITE(18,618) WLAM(IJ),FLUX(IJ),RIM(1),IU
|
|
c END IF
|
|
c end if
|
|
c 618 FORMAT(1H ,f10.3,2pe15.5,i5)
|
|
C
|
|
C if needed (if iprin.ge.3), output of interesting physical
|
|
C quantities at the monochromatic optical depth tau(nu)=2/3
|
|
C
|
|
c IF(IPRIN.GE.3) THEN
|
|
c T0=LOG(TAU(IREF+1)/TAU(IREF))
|
|
c X0=LOG(TAU(IREF+1)/TAUREF)/T0
|
|
c X1=LOG(TAUREF/TAU(IREF))/T0
|
|
c DMREF=EXP(LOG(DM(IREF))*X0+LOG(DM(IREF+1))*X1)
|
|
c TREF=EXP(LOG(TEMP(IREF))*X0+LOG(TEMP(IREF+1))*X1)
|
|
c STREF=EXP(LOG(ST0(IREF))*X0+LOG(ST0(IREF+1))*X1)
|
|
c SSREF=EXP(LOG(-SS0(IREF))*X0+LOG(-SS0(IREF+1))*X1)
|
|
c SREF=STREF+SSREF
|
|
c ALM=2.997925E18/FREQ(IJ)
|
|
c WRITE(36,636) IJ,ALM,IREF,DMREF,TREF,STREF,SSREF,SREF
|
|
c 636 FORMAT(1H ,I3,F10.3,I4,1PE10.3,0PF10.1,1X,1P3E10.3)
|
|
c END IF
|
|
C
|
|
C Contribution to J and H
|
|
C
|
|
c do id=1,nud(iu)
|
|
c rad1(id)=rad1(id)+wmuj(iu,id)*uf(id)
|
|
c ali1(id)=ali1(id)+wmuj(iu,id)*af(id)
|
|
c end do
|
|
c FLUXc(IJ)=FLUXc(IJ)+WMUH(IU)*RIM(1)
|
|
C
|
|
C
|
|
C end of the loop over frequencies
|
|
C
|
|
500 CONTINUE
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE VELSET
|
|
C =================
|
|
C
|
|
C Determination of the macroscopic velocity as a function of depth
|
|
C
|
|
C Input:
|
|
C
|
|
C RSTAR - stellar radius (in solar radii or in cm)
|
|
C RMAX - maximum radial extent (in stellar radii)
|
|
C AMLOSS - mass loss rate ( in solar masses per year)
|
|
C VELMAX - maximum velocity (= V_infinity) - in km/s
|
|
C BETA - beta exponent in the beta-law for velocity
|
|
C NDRAD - Number of layers
|
|
C NRCORE - Number of core rays
|
|
C
|
|
C
|
|
c parameter (un=1.,two=2.)
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
dimension zz(mdepth),vel0(mdepth),rrel(mdepth),
|
|
c * dvel0(mdepth),vel1(mdepth),hstt(mdepth),
|
|
* den0(mdepth),vel00(mdepth),ind(mdepth),
|
|
* densa(mdepth),eleca(mdepth),tempa(mdepth),
|
|
* rda(mdepth),rrela(mdepth),vel0a(mdepth)
|
|
c
|
|
un=1
|
|
two=2.
|
|
read(55,*,err=100,end=100) rstar,rmax,amloss,vinf,beta,
|
|
* ndrad,nrcore,nfiry,ndf,nda
|
|
rstr=rstar
|
|
if(rstar.lt.1.e5) rstr=rstar*6.9598e10
|
|
amdot=amloss*6.3029e25
|
|
RCORE=RSTR
|
|
XMDOT=amdot
|
|
BETAV=beta
|
|
con=amdot/12.566e5
|
|
conr=con/rstr/rstr
|
|
nrext0=ndrad-nd
|
|
zz(nd+nrext0)=0.
|
|
rd(nd+nrext0)=rstr
|
|
rrel(nd+nrext0)=1.
|
|
do iid=1,nd-1
|
|
id=nd-iid
|
|
zz(id+nrext0)=zz(id+1+nrext0)+2.*(dm(id+1)-dm(id))/
|
|
* (dens(id+1)+dens(id))
|
|
rd(id+nrext0)=rstr+zz(id+nrext0)
|
|
rrel(id+nrext0)=rd(id+nrext0)/rstr
|
|
end do
|
|
C
|
|
do id=1+nrext0,nd+nrext0
|
|
vel0(id)=con/rd(id)**2/dens(id-nrext0)
|
|
vel00(id)=vel0(id)
|
|
if(vel00(id).gt.vinf) vel00(id)=vinf
|
|
end do
|
|
vin=vel0(nrext0+1)
|
|
r1=rrel(nrext0+1)
|
|
C
|
|
if(rrel(1+nrext0).lt.rmax.and.nd.lt.ndrad) then
|
|
rl1=1.-1./rrel(1+nrext0)
|
|
rl2=1.-1./rmax
|
|
drl=(rl2-rl1)/nrext0
|
|
do id=1,nrext0
|
|
rlo=rl2-(id-1)*drl
|
|
rrel(id)=1./(1.-rlo)
|
|
rd(id)=rrel(id)*rstr
|
|
end do
|
|
end if
|
|
c
|
|
do id=nd+nrext0-1,nrext0+1,-1
|
|
r0=rrel(id)
|
|
numid=0
|
|
do id1=nd+nrext0-1,nrext0+1,-1
|
|
x=un-r0/rrel(id1)
|
|
if(x.lt.1.e-6) x=1.e-6
|
|
v2=vinf*x**beta
|
|
ind(id1)=0
|
|
if(v2.ge.vel0(id1)) then
|
|
ind(id1)=id1
|
|
numid=numid+1
|
|
end if
|
|
end do
|
|
if(numid.eq.0) go to 10
|
|
rsum=0.
|
|
isum=0
|
|
do id1=nd+nrext0-1,nrext0+1,-1
|
|
if(ind(id1).gt.0) then
|
|
rsum=rsum+rrel(id1)
|
|
isum=isum+id1
|
|
endif
|
|
end do
|
|
rc=rsum/numid
|
|
idc=isum/numid
|
|
numid0=numid
|
|
r00=r0
|
|
end do
|
|
10 continue
|
|
v1=vel0(idc)
|
|
r0=(r0+r00)*0.5
|
|
if(r0.lt.rc) v2=vinf*(un-r0/rc)**beta
|
|
write(6,602) numid0,idc,rc,r0,v1,v2
|
|
602 format('numid,idc,rc,r0,v1,v2 ',2i4,4f10.5)
|
|
c
|
|
do id=nd+nrext0-1,1,-1
|
|
if(rrel(id).gt.rc.and.rrel(id).gt.r0)
|
|
* vel0(id)=vinf*(1.-r0/rrel(id))**beta
|
|
end do
|
|
c
|
|
t1=temp(1)
|
|
erel=elec(1)/dens(1)
|
|
do id=nd,1,-1
|
|
temp(id+nrext0)=temp(id)
|
|
den0(id+nrext0)=dens(id)
|
|
elec(id+nrext0)=elec(id)
|
|
do i=1,nlevel
|
|
popul(i,id+nrext0)=popul(i,id)
|
|
end do
|
|
WMM(ID+nrext0)=WMM(id)
|
|
WMY(ID+nrext0)=WMY(id)
|
|
YTOT(ID+nrext0)=YTOT(id)
|
|
do i=1,natom
|
|
relab(i,id+nrext0)=relab(i,id)
|
|
abund(i,id+nrext0)=abund(i,id)
|
|
end do
|
|
do i=1,matom
|
|
abndd(i,id+nrext0)=abndd(i,id)
|
|
end do
|
|
end do
|
|
C
|
|
do id=1,nrext0
|
|
TEMP(ID)=T1
|
|
WMM(ID)=WMM(NREXT0+1)
|
|
WMY(ID)=WMY(NREXT0+1)
|
|
YTOT(ID)=YTOT(NREXT0+1)
|
|
do i=1,natom
|
|
relab(i,id)=relab(i,nrext0+1)
|
|
abund(i,id)=abund(i,nrext0+1)
|
|
end do
|
|
do i=1,matom
|
|
abndd(i,id)=abndd(i,nrext0+1)
|
|
end do
|
|
end do
|
|
idstd=idstd+nrext0
|
|
c
|
|
VINF=vinf*1.e5
|
|
write(6,600)
|
|
do id=1,nd+nrext0
|
|
if(vel0(id).gt.0.) dens(id)=con/rd(id)**2/vel0(id)
|
|
VEL(ID)=vel0(id)*1.e5
|
|
c velc(id)=vel0(id)/2.997925e5
|
|
end do
|
|
c
|
|
do id=nd,1,-1
|
|
id1=id+nrext0
|
|
elec(id1)=elec(id1)*dens(id1)/den0(id1)
|
|
do i=1,nlevel
|
|
popul(i,id1)=popul(i,id1)*dens(id1)/den0(id1)
|
|
end do
|
|
end do
|
|
c
|
|
do id=1,nrext0
|
|
elec(id)=elec(nrext0+1)*dens(id)/dens(nrext0+1)
|
|
do i=1,nlevel
|
|
popul(i,id)=popul(i,nrext0+1)*dens(id)/dens(nrext0+1)
|
|
end do
|
|
end do
|
|
C
|
|
ND=NDRAD
|
|
if(ndf.eq.0) ndf=nd
|
|
do id=1,nd
|
|
write(6,601) id,dm(id),temp(id),elec(id),dens(id),rd(id),
|
|
* rrel(id),vel0(id)
|
|
write(96,601) id,dm(id),temp(id),elec(id),dens(id),rd(id),
|
|
* rrel(id),vel0(id),vel00(id)
|
|
end do
|
|
600 format(' ID M TEMP ELEC DENS ',
|
|
* 'R Rrel VEL'/)
|
|
601 format(1h ,i3,1pe10.3,0pf8.0,1p3e12.3,0pf10.4,0p2f8.2)
|
|
C
|
|
C
|
|
if(nda.gt.0) then
|
|
XR1=LOG(DENS(1))
|
|
XR2=LOG(DENS(ND))
|
|
DXR=(XR2-XR1)/FLOAT(NDA-1)
|
|
DO ID=1,NDA
|
|
DENSA(ID)=EXP(XR1+FLOAT(ID-1)*DXR)
|
|
END DO
|
|
CALL INTERP(DENS,TEMP,DENSA,TEMPA,ND,NDA,3,1,1)
|
|
CALL INTERP(DENS,ELEC,DENSA,ELECA,ND,NDA,3,1,1)
|
|
CALL INTERP(DENS,RD,DENSA,RDA,ND,NDA,3,1,1)
|
|
CALL INTERP(DENS,RREl,DENSA,RRELA,ND,NDA,3,1,1)
|
|
CALL INTERP(DENS,VEL0,DENSA,VEL0A,ND,NDA,3,1,1)
|
|
do id=1,nda
|
|
write(6,603) id,tempa(id),eleca(id),densa(id),rda(id),
|
|
* rrela(id),vel0a(id)
|
|
write(96,603) id,tempa(id),eleca(id),densa(id),rda(id),
|
|
* rrela(id),vel0a(id)
|
|
end do
|
|
end if
|
|
603 format(1h ,i3,0pf8.0,1p3e12.3,0pf10.4,0p2f8.2)
|
|
C
|
|
100 continue
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE RADTEM
|
|
C =================
|
|
C
|
|
C determination of the radiation temperatures
|
|
C after Schmutz (1991); inversion done by Newton-Raphson
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'WINCOM.FOR'
|
|
common/velaux/velmax,iemoff,nltoff,itrad
|
|
PARAMETER (CON=2.0706D-16, un=1.)
|
|
parameter (nterad=3)
|
|
C
|
|
DO ID=1,ND
|
|
rx=RD(ND)/RD(ID)
|
|
c WDIL(ID)=0.5*(1.-sqrt(1.-rx*rx))
|
|
wdil(id)=un-sqrt(un-rx*rx)
|
|
END DO
|
|
DO ITRD=1,NTERAD
|
|
if(itrad.eq.0) then
|
|
do id=1,nd
|
|
trad(itrd,id)=temp(id)
|
|
end do
|
|
else
|
|
II=0
|
|
JJ=0
|
|
IF(ITRD.LE.NION) II=NFIRST(ITRD)
|
|
IF(ITRD.LE.NION) JJ=NNEXT(ITRD)
|
|
DO ID=1,ND
|
|
TRAD(ITRD,ID)=TEMP(ID)
|
|
IF(II.GT.0) THEN
|
|
c IF(II.GT.100000) THEN
|
|
AA=POPUL(JJ,ID)/POPUL(II,ID)*ELEC(ID)*CON
|
|
AA=AA*G(II)/G(JJ)/WDIL(ID)/SQRT(TEMP(ID))
|
|
TR=TEMP(ID)
|
|
ITER=0
|
|
10 ITER=ITER+1
|
|
XX=ENION(II)/BOLK/TR
|
|
DTR=(AA*EXP(XX)-TR)/(1.+XX)
|
|
DTRR=DTR/TR
|
|
TR=TR+DTR
|
|
IF(ABS(DTRR).GT.1.E-3.AND.ITER.LT.100) GO TO 10
|
|
TRAD(ITRD,ID)=TR
|
|
END IF
|
|
END DO
|
|
end if
|
|
END DO
|
|
write(6,600)
|
|
do id=1,nd
|
|
write(6,601) id,temp(id),trad(1,id),trad(2,id),trad(3,id)
|
|
end do
|
|
600 format(/' radiation temperatures/')
|
|
601 format(i5,4f10.1)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
C
|
|
FUNCTION SBFCH(FR,T)
|
|
C ====================
|
|
C
|
|
C cross-section times partition function for CH
|
|
C
|
|
C from Kurucz ATLAS9
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (fihu=500.,fihui=1./fihu,
|
|
* twhu=200.,twhui=1./twhu,
|
|
* tenl=2.30258509299405E0)
|
|
c
|
|
DIMENSION CROSSCH(15,105),PARTCH(41),CROSSCHT(15)
|
|
DIMENSION C1(150),C2(150),C3(150),C4(150),C5(150)
|
|
DIMENSION C6(150),C7(150),C8(150),C9(150),C10(150)
|
|
DIMENSION C11(75)
|
|
C
|
|
EQUIVALENCE (CROSSCH(1, 1),C1(1)),(CROSSCH(1,11),C2(1))
|
|
EQUIVALENCE (CROSSCH(1,21),C3(1)),(CROSSCH(1,31),C4(1))
|
|
EQUIVALENCE (CROSSCH(1,41),C5(1)),(CROSSCH(1,51),C6(1))
|
|
EQUIVALENCE (CROSSCH(1,61),C7(1)),(CROSSCH(1,71),C8(1))
|
|
EQUIVALENCE (CROSSCH(1,81),C9(1)),(CROSSCH(1,91),C10(1))
|
|
EQUIVALENCE (CROSSCH(1,101),C11(1))
|
|
C
|
|
DATA C1/-38.000,-38.000,-38.000,-38.000,-38.000,-38.000,-38.000,
|
|
1-38.000,-38.000,-38.000,-38.000,-38.000,-38.000,-38.000,-38.000,
|
|
2 -32.727,-31.151,-30.133,-29.432,-28.925,-28.547,-28.257,
|
|
2-28.030,-27.848,-27.701,-27.580,-27.479,-27.395,-27.322,-27.261,
|
|
3 -31.588,-30.011,-28.993,-28.290,-27.784,-27.405,-27.115,
|
|
3-26.887,-26.705,-26.558,-26.437,-26.336,-26.251,-26.179,-26.117,
|
|
4 -30.407,-28.830,-27.811,-27.108,-26.601,-26.223,-25.932,
|
|
4-25.705,-25.523,-25.376,-25.255,-25.154,-25.069,-24.997,-24.935,
|
|
5 -29.513,-27.937,-26.920,-26.218,-25.712,-25.334,-25.043,
|
|
5-24.816,-24.635,-24.487,-24.366,-24.266,-24.181,-24.109,-24.047,
|
|
6 -28.910,-27.341,-26.327,-25.628,-25.123,-24.746,-24.457,
|
|
6-24.230,-24.049,-23.902,-23.782,-23.681,-23.597,-23.525,-23.464,
|
|
7 -28.517,-26.961,-25.955,-25.261,-24.760,-24.385,-24.098,
|
|
7-23.873,-23.694,-23.548,-23.429,-23.329,-23.245,-23.174,-23.113,
|
|
8 -28.213,-26.675,-25.680,-24.993,-24.497,-24.127,-23.843,
|
|
8-23.620,-23.443,-23.299,-23.181,-23.082,-22.999,-22.929,-22.869,
|
|
9 -27.942,-26.427,-25.446,-24.769,-24.280,-23.915,-23.635,
|
|
9-23.416,-23.241,-23.100,-22.983,-22.887,-22.805,-22.736,-22.677,
|
|
A -27.706,-26.210,-25.241,-24.572,-24.088,-23.728,-23.451,
|
|
A-23.235,-23.063,-22.923,-22.808,-22.713,-22.633,-22.565,-22.507/
|
|
DATA C2/-27.475,-26.000,-25.043,-24.382,-23.905,-23.548,-23.275,
|
|
1-23.062,-22.891,-22.753,-22.640,-22.546,-22.467,-22.400,-22.343,
|
|
2 -27.221,-25.783,-24.844,-24.193,-23.723,-23.372,-23.102,
|
|
2-22.892,-22.724,-22.588,-22.476,-22.384,-22.306,-22.240,-22.184,
|
|
3 -26.863,-25.506,-24.607,-23.979,-23.523,-23.182,-22.919,
|
|
3-22.714,-22.550,-22.417,-22.309,-22.218,-22.142,-22.078,-22.023,
|
|
4 -26.685,-25.347,-24.457,-23.835,-23.382,-23.044,-22.784,
|
|
4-22.580,-22.418,-22.286,-22.178,-22.089,-22.014,-21.950,-21.896,
|
|
5 -26.085,-24.903,-24.105,-23.538,-23.120,-22.805,-22.561,
|
|
5-22.370,-22.217,-22.093,-21.991,-21.906,-21.835,-21.775,-21.723,
|
|
6 -25.902,-24.727,-23.936,-23.376,-22.964,-22.654,-22.415,
|
|
6-22.227,-22.076,-21.955,-21.855,-21.772,-21.702,-21.644,-21.593,
|
|
7 -25.215,-24.196,-23.510,-23.019,-22.655,-22.378,-22.163,
|
|
7-21.992,-21.855,-21.744,-21.653,-21.577,-21.513,-21.459,-21.412,
|
|
8 -24.914,-23.937,-23.284,-22.820,-22.475,-22.212,-22.007,
|
|
8-21.845,-21.715,-21.609,-21.522,-21.449,-21.388,-21.336,-21.292,
|
|
9 -24.519,-23.637,-23.039,-22.606,-22.281,-22.030,-21.834,
|
|
9-21.678,-21.552,-21.450,-21.365,-21.295,-21.236,-21.185,-21.142,
|
|
A -24.086,-23.222,-22.650,-22.246,-21.948,-21.722,-21.546,
|
|
A-21.407,-21.296,-21.205,-21.131,-21.070,-21.018,-20.974,-20.937/
|
|
DATA C3/-23.850,-23.018,-22.472,-22.088,-21.805,-21.590,-21.422,
|
|
1-21.289,-21.182,-21.095,-21.024,-20.964,-20.914,-20.872,-20.835,
|
|
2 -23.136,-22.445,-21.994,-21.676,-21.440,-21.259,-21.117,
|
|
2-21.004,-20.912,-20.837,-20.775,-20.723,-20.679,-20.642,-20.611,
|
|
3 -23.199,-22.433,-21.927,-21.573,-21.314,-21.119,-20.969,
|
|
3-20.851,-20.758,-20.682,-20.621,-20.571,-20.529,-20.493,-20.463,
|
|
4 -22.696,-22.020,-21.585,-21.286,-21.071,-20.912,-20.791,
|
|
4-20.697,-20.622,-20.563,-20.514,-20.475,-20.442,-20.414,-20.391,
|
|
5 -22.119,-21.557,-21.194,-20.943,-20.761,-20.624,-20.518,
|
|
5-20.434,-20.367,-20.313,-20.268,-20.231,-20.201,-20.175,-20.153,
|
|
6 -21.855,-21.300,-20.931,-20.673,-20.485,-20.344,-20.235,
|
|
6-20.151,-20.084,-20.031,-19.988,-19.953,-19.924,-19.900,-19.880,
|
|
7 -21.126,-20.673,-20.382,-20.184,-20.044,-19.943,-19.868,
|
|
7-19.811,-19.769,-19.736,-19.710,-19.690,-19.674,-19.662,-19.652,
|
|
8 -20.502,-20.150,-19.922,-19.766,-19.657,-19.578,-19.520,
|
|
8-19.478,-19.446,-19.422,-19.404,-19.390,-19.379,-19.371,-19.365,
|
|
9 -20.030,-19.724,-19.530,-19.399,-19.309,-19.245,-19.199,
|
|
9-19.166,-19.142,-19.125,-19.112,-19.103,-19.096,-19.091,-19.088,
|
|
A -19.640,-19.364,-19.189,-19.074,-18.996,-18.943,-18.906,
|
|
A-18.881,-18.863,-18.852,-18.844,-18.839,-18.837,-18.836,-18.836/
|
|
DATA C4/-19.333,-19.092,-18.939,-18.838,-18.770,-18.725,-18.695,
|
|
1-18.675,-18.662,-18.655,-18.651,-18.649,-18.649,-18.651,-18.653,
|
|
2 -19.070,-18.880,-18.756,-18.674,-18.621,-18.585,-18.562,
|
|
2-18.548,-18.540,-18.536,-18.536,-18.537,-18.539,-18.542,-18.546,
|
|
3 -18.851,-18.708,-18.617,-18.558,-18.521,-18.498,-18.484,
|
|
3-18.477,-18.475,-18.476,-18.478,-18.482,-18.487,-18.493,-18.498,
|
|
4 -18.709,-18.599,-18.533,-18.494,-18.471,-18.459,-18.454,
|
|
4-18.454,-18.457,-18.462,-18.469,-18.476,-18.483,-18.490,-18.498,
|
|
5 -18.656,-18.572,-18.524,-18.497,-18.485,-18.480,-18.482,
|
|
5-18.486,-18.493,-18.501,-18.510,-18.519,-18.527,-18.536,-18.544,
|
|
6 -18.670,-18.613,-18.582,-18.566,-18.561,-18.562,-18.568,
|
|
6-18.575,-18.583,-18.592,-18.601,-18.610,-18.619,-18.627,-18.635,
|
|
7 -18.728,-18.700,-18.687,-18.683,-18.685,-18.691,-18.698,
|
|
7-18.706,-18.715,-18.723,-18.731,-18.739,-18.745,-18.752,-18.758,
|
|
8 -18.839,-18.835,-18.836,-18.842,-18.849,-18.857,-18.865,
|
|
8-18.872,-18.878,-18.883,-18.888,-18.892,-18.895,-18.898,-18.900,
|
|
9 -19.034,-19.041,-19.049,-19.057,-19.064,-19.069,-19.071,
|
|
9-19.071,-19.070,-19.068,-19.065,-19.061,-19.058,-19.054,-19.051,
|
|
A -19.372,-19.378,-19.382,-19.380,-19.372,-19.359,-19.341,
|
|
A-19.321,-19.300,-19.280,-19.261,-19.243,-19.227,-19.212,-19.199/
|
|
DATA C5/-19.780,-19.777,-19.763,-19.732,-19.686,-19.631,-19.573,
|
|
1-19.517,-19.465,-19.419,-19.379,-19.344,-19.314,-19.288,-19.265,
|
|
2 -20.151,-20.133,-20.087,-20.009,-19.911,-19.810,-19.715,
|
|
2-19.631,-19.559,-19.497,-19.446,-19.402,-19.365,-19.333,-19.306,
|
|
3 -20.525,-20.454,-20.312,-20.138,-19.970,-19.825,-19.705,
|
|
3-19.607,-19.528,-19.464,-19.411,-19.367,-19.330,-19.300,-19.274,
|
|
4 -20.869,-20.655,-20.366,-20.104,-19.894,-19.731,-19.604,
|
|
4-19.505,-19.426,-19.363,-19.312,-19.271,-19.236,-19.208,-19.184,
|
|
5 -21.179,-20.768,-20.380,-20.081,-19.856,-19.686,-19.556,
|
|
5-19.454,-19.375,-19.311,-19.260,-19.218,-19.184,-19.155,-19.131,
|
|
6 -21.167,-20.601,-20.206,-19.925,-19.719,-19.565,-19.447,
|
|
6-19.355,-19.283,-19.226,-19.180,-19.143,-19.112,-19.087,-19.066,
|
|
7 -20.918,-20.348,-19.976,-19.720,-19.536,-19.401,-19.299,
|
|
7-19.220,-19.159,-19.112,-19.073,-19.043,-19.018,-18.998,-18.981,
|
|
8 -20.753,-20.204,-19.847,-19.602,-19.427,-19.299,-19.203,
|
|
8-19.129,-19.072,-19.028,-18.993,-18.965,-18.942,-18.924,-18.909,
|
|
9 -20.456,-19.987,-19.677,-19.460,-19.302,-19.186,-19.098,
|
|
9-19.030,-18.978,-18.937,-18.904,-18.878,-18.857,-18.841,-18.827,
|
|
A -20.154,-19.734,-19.461,-19.272,-19.136,-19.035,-18.960,
|
|
A-18.902,-18.858,-18.824,-18.797,-18.775,-18.759,-18.745,-18.735/
|
|
DATA C6/-19.941,-19.544,-19.288,-19.114,-18.992,-18.903,-18.837,
|
|
1-18.788,-18.751,-18.723,-18.701,-18.684,-18.671,-18.661,-18.654,
|
|
2 -19.657,-19.321,-19.104,-18.956,-18.853,-18.779,-18.724,
|
|
2-18.684,-18.655,-18.632,-18.615,-18.602,-18.592,-18.585,-18.579,
|
|
3 -19.388,-19.109,-18.930,-18.810,-18.725,-18.664,-18.620,
|
|
3-18.586,-18.562,-18.543,-18.529,-18.518,-18.510,-18.503,-18.498,
|
|
4 -19.201,-18.953,-18.794,-18.686,-18.611,-18.556,-18.515,
|
|
4-18.485,-18.462,-18.446,-18.433,-18.423,-18.416,-18.410,-18.406,
|
|
5 -18.923,-18.719,-18.588,-18.500,-18.439,-18.396,-18.365,
|
|
5-18.344,-18.328,-18.318,-18.311,-18.307,-18.304,-18.303,-18.302,
|
|
6 -18.614,-18.458,-18.361,-18.298,-18.258,-18.232,-18.216,
|
|
6-18.206,-18.202,-18.201,-18.202,-18.205,-18.208,-18.213,-18.218,
|
|
7 -18.419,-18.295,-18.222,-18.178,-18.153,-18.139,-18.132,
|
|
7-18.131,-18.133,-18.138,-18.143,-18.150,-18.157,-18.164,-18.172,
|
|
8 -18.296,-18.201,-18.148,-18.118,-18.101,-18.094,-18.091,
|
|
8-18.093,-18.096,-18.101,-18.107,-18.113,-18.120,-18.126,-18.132,
|
|
9 -18.021,-17.992,-17.977,-17.970,-17.967,-17.968,-17.970,
|
|
9-17.974,-17.978,-17.983,-17.989,-17.994,-18.000,-18.005,-18.011,
|
|
A -17.694,-17.686,-17.686,-17.691,-17.698,-17.708,-17.718,
|
|
A-17.729,-17.740,-17.750,-17.761,-17.771,-17.781,-17.790,-17.798/
|
|
DATA C7/-17.374,-17.384,-17.400,-17.420,-17.440,-17.462,-17.483,
|
|
1-17.503,-17.523,-17.541,-17.558,-17.575,-17.590,-17.603,-17.616,
|
|
2 -17.169,-17.199,-17.230,-17.262,-17.293,-17.323,-17.351,
|
|
2-17.378,-17.404,-17.427,-17.449,-17.469,-17.488,-17.505,-17.520,
|
|
3 -17.151,-17.184,-17.217,-17.250,-17.282,-17.313,-17.342,
|
|
3-17.369,-17.395,-17.418,-17.440,-17.461,-17.480,-17.497,-17.513,
|
|
4 -17.230,-17.260,-17.290,-17.320,-17.348,-17.375,-17.401,
|
|
4-17.425,-17.448,-17.469,-17.489,-17.508,-17.525,-17.541,-17.556,
|
|
5 -17.379,-17.403,-17.425,-17.446,-17.467,-17.486,-17.505,
|
|
5-17.524,-17.541,-17.558,-17.574,-17.588,-17.602,-17.615,-17.627,
|
|
6 -17.596,-17.604,-17.609,-17.612,-17.616,-17.622,-17.628,
|
|
6-17.636,-17.644,-17.652,-17.661,-17.670,-17.679,-17.687,-17.695,
|
|
7 -17.846,-17.823,-17.795,-17.770,-17.750,-17.735,-17.725,
|
|
7-17.719,-17.716,-17.715,-17.716,-17.719,-17.722,-17.726,-17.730,
|
|
8 -18.089,-18.015,-17.942,-17.882,-17.836,-17.802,-17.777,
|
|
8-17.760,-17.748,-17.740,-17.736,-17.734,-17.733,-17.734,-17.736,
|
|
9 -18.299,-18.156,-18.038,-17.947,-17.881,-17.833,-17.798,
|
|
9-17.774,-17.757,-17.745,-17.738,-17.733,-17.730,-17.729,-17.729,
|
|
A -18.441,-18.243,-18.096,-17.991,-17.915,-17.860,-17.821,
|
|
A-17.792,-17.772,-17.757,-17.746,-17.738,-17.733,-17.730,-17.728/
|
|
DATA C8/-18.474,-18.262,-18.111,-18.004,-17.926,-17.869,-17.826,
|
|
1-17.795,-17.771,-17.753,-17.740,-17.730,-17.722,-17.717,-17.713,
|
|
2 -18.387,-18.191,-18.053,-17.952,-17.878,-17.823,-17.782,
|
|
2-17.752,-17.729,-17.711,-17.698,-17.689,-17.681,-17.676,-17.672,
|
|
3 -18.161,-17.990,-17.874,-17.793,-17.736,-17.696,-17.668,
|
|
3-17.648,-17.634,-17.625,-17.619,-17.616,-17.614,-17.614,-17.615,
|
|
4 -17.908,-17.774,-17.690,-17.637,-17.604,-17.583,-17.572,
|
|
4-17.567,-17.566,-17.568,-17.571,-17.576,-17.581,-17.587,-17.593,
|
|
5 -17.681,-17.589,-17.540,-17.515,-17.506,-17.505,-17.511,
|
|
5-17.520,-17.530,-17.542,-17.554,-17.566,-17.578,-17.589,-17.600,
|
|
6 -17.647,-17.606,-17.584,-17.575,-17.573,-17.576,-17.582,
|
|
6-17.589,-17.597,-17.605,-17.614,-17.623,-17.631,-17.639,-17.646,
|
|
7 -17.300,-17.291,-17.291,-17.297,-17.307,-17.319,-17.333,
|
|
7-17.347,-17.361,-17.375,-17.389,-17.402,-17.415,-17.427,-17.438,
|
|
8 -16.786,-16.802,-16.825,-16.853,-16.883,-16.914,-16.944,
|
|
8-16.974,-17.003,-17.030,-17.055,-17.079,-17.101,-17.122,-17.141,
|
|
9 -16.489,-16.533,-16.579,-16.625,-16.670,-16.713,-16.754,
|
|
9-16.793,-16.830,-16.864,-16.896,-16.925,-16.952,-16.977,-17.000,
|
|
A -16.694,-16.724,-16.756,-16.789,-16.823,-16.856,-16.888,
|
|
A-16.919,-16.949,-16.976,-17.002,-17.026,-17.048,-17.069,-17.088/
|
|
DATA C9/-16.935,-16.951,-16.971,-16.993,-17.016,-17.040,-17.064,
|
|
1-17.088,-17.111,-17.132,-17.153,-17.172,-17.190,-17.206,-17.222,
|
|
2 -17.200,-17.208,-17.220,-17.235,-17.251,-17.269,-17.286,
|
|
2-17.304,-17.322,-17.338,-17.354,-17.369,-17.384,-17.397,-17.409,
|
|
3 -17.597,-17.591,-17.589,-17.590,-17.594,-17.600,-17.608,
|
|
3-17.617,-17.626,-17.635,-17.645,-17.654,-17.662,-17.671,-17.679,
|
|
4 -18.166,-18.134,-18.107,-18.085,-18.068,-18.056,-18.047,
|
|
4-18.041,-18.038,-18.036,-18.035,-18.035,-18.036,-18.038,-18.039,
|
|
5 -19.000,-18.917,-18.838,-18.770,-18.714,-18.669,-18.632,
|
|
5-18.603,-18.579,-18.560,-18.545,-18.532,-18.522,-18.514,-18.507,
|
|
6 -20.313,-19.982,-19.754,-19.592,-19.472,-19.380,-19.309,
|
|
6-19.253,-19.208,-19.172,-19.143,-19.119,-19.099,-19.083,-19.069,
|
|
7 -19.751,-19.611,-19.520,-19.461,-19.423,-19.398,-19.382,
|
|
7-19.372,-19.366,-19.364,-19.363,-19.364,-19.366,-19.368,-19.371,
|
|
8 -19.581,-19.431,-19.337,-19.277,-19.240,-19.218,-19.207,
|
|
8-19.202,-19.203,-19.207,-19.212,-19.220,-19.228,-19.236,-19.245,
|
|
9 -19.685,-19.506,-19.389,-19.311,-19.258,-19.222,-19.199,
|
|
9-19.184,-19.175,-19.170,-19.168,-19.169,-19.171,-19.174,-19.177,
|
|
A -19.977,-19.756,-19.606,-19.501,-19.425,-19.370,-19.330,
|
|
A-19.300,-19.278,-19.262,-19.250,-19.241,-19.235,-19.230,-19.227/
|
|
DATAC10/-20.445,-20.158,-19.958,-19.815,-19.711,-19.633,-19.574,
|
|
1-19.528,-19.493,-19.465,-19.442,-19.425,-19.410,-19.398,-19.389,
|
|
2 -20.980,-20.625,-20.391,-20.229,-20.110,-20.020,-19.949,
|
|
2-19.892,-19.846,-19.807,-19.775,-19.748,-19.724,-19.704,-19.687,
|
|
3 -21.404,-21.023,-20.771,-20.594,-20.461,-20.358,-20.274,
|
|
3-20.205,-20.148,-20.099,-20.058,-20.022,-19.991,-19.965,-19.942,
|
|
4 -21.309,-20.970,-20.753,-20.603,-20.495,-20.412,-20.348,
|
|
4-20.295,-20.252,-20.215,-20.185,-20.158,-20.135,-20.115,-20.098,
|
|
5 -21.221,-20.906,-20.707,-20.574,-20.480,-20.412,-20.361,
|
|
5-20.322,-20.292,-20.268,-20.249,-20.233,-20.221,-20.210,-20.201,
|
|
6 -21.441,-21.097,-20.878,-20.728,-20.623,-20.546,-20.489,
|
|
6-20.446,-20.413,-20.387,-20.368,-20.352,-20.340,-20.330,-20.322,
|
|
7 -21.668,-21.305,-21.071,-20.911,-20.797,-20.713,-20.650,
|
|
7-20.602,-20.565,-20.536,-20.514,-20.496,-20.481,-20.470,-20.460,
|
|
8 -21.926,-21.556,-21.316,-21.150,-21.031,-20.942,-20.874,
|
|
8-20.822,-20.782,-20.750,-20.724,-20.704,-20.687,-20.674,-20.663,
|
|
9 -22.319,-21.937,-21.686,-21.510,-21.380,-21.282,-21.206,
|
|
9-21.147,-21.099,-21.061,-21.031,-21.006,-20.985,-20.968,-20.954,
|
|
A -22.969,-22.561,-22.288,-22.092,-21.945,-21.832,-21.743,
|
|
A-21.672,-21.616,-21.570,-21.533,-21.503,-21.477,-21.457,-21.439/
|
|
DATAC11/-24.001,-23.527,-23.199,-22.957,-22.772,-22.629,-22.516,
|
|
1-22.427,-22.355,-22.297,-22.250,-22.212,-22.180,-22.153,-22.131,
|
|
2 -24.233,-23.774,-23.477,-23.273,-23.128,-23.022,-22.943,
|
|
2-22.883,-22.837,-22.802,-22.774,-22.752,-22.735,-22.721,-22.710,
|
|
3 -24.550,-23.913,-23.521,-23.266,-23.094,-22.976,-22.893,
|
|
3-22.836,-22.796,-22.768,-22.750,-22.737,-22.730,-22.726,-22.725,
|
|
4 -24.301,-23.665,-23.274,-23.019,-22.848,-22.730,-22.648,
|
|
4-22.591,-22.552,-22.525,-22.507,-22.495,-22.489,-22.485,-22.485,
|
|
5 -24.519,-23.883,-23.491,-23.237,-23.065,-22.948,-22.866,
|
|
5-22.809,-22.770,-22.743,-22.724,-22.713,-22.706,-22.703,-22.702/
|
|
DATA PARTCH/
|
|
1 203.741, 249.643, 299.341, 353.477, 412.607, 477.237,
|
|
2 547.817, 624.786, 708.543, 799.463, 897.912, 1004.227,
|
|
3 1118.738, 1241.761, 1373.588, 1514.481, 1664.677, 1824.394,
|
|
4 1993.801, 2173.050, 2362.234, 2561.424, 2770.674, 2989.930,
|
|
5 3219.204, 3458.378, 3707.355, 3966.005, 4234.155, 4511.604,
|
|
6 4798.135, 5093.554, 5397.593, 5709.948, 6030.401, 6358.646,
|
|
7 6694.379, 7037.313, 7387.147, 7743.579, 8106.313/
|
|
DATA FREQ1/0./
|
|
C
|
|
SBFCH=0.
|
|
IF(FR.EQ.FREQ1) GO TO 30
|
|
FREQ1=FR
|
|
WAVENO=FR/2.99792458E10
|
|
EVOLT=WAVENO/8065.479
|
|
N=int(EVOLT*10.)
|
|
EN=FLOAT(N)*.1
|
|
IF(N.LT.20) RETURN
|
|
IF(N.GE.105) RETURN
|
|
c
|
|
DO IT=1,15
|
|
CROSSCHT(IT)=(CROSSCH(IT,N)+(CROSSCH(IT,N+1)-CROSSCH(IT,N))*
|
|
* (EVOLT-EN)*10.)
|
|
END DO
|
|
c
|
|
c interpolate to obtain partition function
|
|
c
|
|
30 IF(T.GE.9000.) RETURN
|
|
IF(N.LT.20) RETURN
|
|
IF(N.GE.105) RETURN
|
|
IT=int((T-1000.)*twhui+1.)
|
|
IF(IT.LT.1) IT=1
|
|
TN=FLOAT(IT)*twhu+800.
|
|
PART=PARTCH(IT)+(PARTCH(IT+1)-PARTCH(IT))*(T-TN)*twhui
|
|
c
|
|
c interpolate to obtain cross-section
|
|
c
|
|
IT=int((T-2000.)*fihui+1.)
|
|
IF(IT.LT.1) IT=1
|
|
TN=FLOAT(IT)*fihu+1500.
|
|
SBFCH=EXP((CROSSCHT(IT)+(CROSSCHT(IT+1)-CROSSCHT(IT))*
|
|
c * (T-TN)*fihui)*tenl)*PART
|
|
* (T-TN)*fihui)*tenl)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
C
|
|
|
|
FUNCTION SBFOH(FR,T)
|
|
C ====================
|
|
C
|
|
C cross-section times partition function for OH
|
|
C
|
|
C from Kurucz ATLAS9
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (fihu=500.,fihui=1./fihu,
|
|
* twhu=200.,twhui=1./twhu,
|
|
* tenl=2.30258509299405E0)
|
|
DIMENSION CROSSOH(15,130),PARTOH(41),CROSSOHT(15)
|
|
DIMENSION C1(150),C2(150),C3(150),C4(150),C5(150)
|
|
DIMENSION C6(150),C7(150),C8(150),C9(150),C10(150)
|
|
DIMENSION C11(150),C12(150),C13(150)
|
|
EQUIVALENCE (CROSSOH(1, 1),C1(1)),(CROSSOH(1,11),C2(1))
|
|
EQUIVALENCE (CROSSOH(1,21),C3(1)),(CROSSOH(1,31),C4(1))
|
|
EQUIVALENCE (CROSSOH(1,41),C5(1)),(CROSSOH(1,51),C6(1))
|
|
EQUIVALENCE (CROSSOH(1,61),C7(1)),(CROSSOH(1,71),C8(1))
|
|
EQUIVALENCE (CROSSOH(1,81),C9(1)),(CROSSOH(1,91),C10(1))
|
|
EQUIVALENCE (CROSSOH(1,101),C11(1))
|
|
EQUIVALENCE (CROSSOH(1,111),C12(1))
|
|
EQUIVALENCE (CROSSOH(1,121),C13(1))
|
|
C
|
|
DATA C1/-30.855,-29.121,-27.976,-27.166,-26.566,-26.106,-25.742,
|
|
1-25.448,-25.207,-25.006,-24.836,-24.691,-24.566,-24.457,-24.363,
|
|
2 -30.494,-28.760,-27.615,-26.806,-26.206,-25.745,-25.381,
|
|
2-25.088,-24.846,-24.645,-24.475,-24.330,-24.205,-24.097,-24.002,
|
|
3 -30.157,-28.425,-27.280,-26.472,-25.872,-25.411,-25.048,
|
|
3-24.754,-24.513,-24.312,-24.142,-23.997,-23.872,-23.764,-23.669,
|
|
4 -29.848,-28.117,-26.974,-26.165,-25.566,-25.105,-24.742,
|
|
4-24.448,-24.207,-24.006,-23.836,-23.692,-23.567,-23.458,-23.364,
|
|
5 -29.567,-27.837,-26.693,-25.885,-25.286,-24.826,-24.462,
|
|
5-24.169,-23.928,-23.727,-23.557,-23.412,-23.287,-23.179,-23.084,
|
|
6 -29.307,-27.578,-26.436,-25.628,-25.029,-24.569,-24.205,
|
|
6-23.912,-23.671,-23.470,-23.300,-23.155,-23.031,-22.922,-22.828,
|
|
7 -29.068,-27.341,-26.199,-25.391,-24.792,-24.332,-23.969,
|
|
7-23.676,-23.435,-23.234,-23.064,-22.920,-22.795,-22.687,-22.592,
|
|
8 -28.820,-27.115,-25.978,-25.172,-24.574,-24.115,-23.752,
|
|
8-23.459,-23.218,-23.017,-22.848,-22.703,-22.579,-22.470,-22.376,
|
|
9 -28.540,-26.891,-25.768,-24.968,-24.372,-23.914,-23.552,
|
|
9-23.259,-23.019,-22.818,-22.649,-22.504,-22.380,-22.272,-22.177,
|
|
A -28.275,-26.681,-25.574,-24.779,-24.186,-23.729,-23.368,
|
|
A-23.076,-22.836,-22.636,-22.467,-22.322,-22.198,-22.090,-21.996/
|
|
DATA C2/-27.993,-26.470,-25.388,-24.602,-24.014,-23.560,-23.200,
|
|
1-22.909,-22.669,-22.470,-22.301,-22.157,-22.033,-21.925,-21.831,
|
|
2 -27.698,-26.252,-25.204,-24.433,-23.851,-23.401,-23.043,
|
|
2-22.754,-22.515,-22.316,-22.148,-22.005,-21.881,-21.773,-21.679,
|
|
3 -27.398,-26.026,-25.019,-24.267,-23.696,-23.251,-22.896,
|
|
3-22.609,-22.372,-22.174,-22.007,-21.864,-21.741,-21.634,-21.540,
|
|
4 -27.100,-25.791,-24.828,-24.102,-23.543,-23.106,-22.756,
|
|
4-22.472,-22.238,-22.041,-21.875,-21.733,-21.611,-21.504,-21.411,
|
|
5 -26.807,-25.549,-24.631,-23.933,-23.391,-22.964,-22.621,
|
|
5-22.341,-22.109,-21.915,-21.751,-21.610,-21.488,-21.383,-21.290,
|
|
6 -26.531,-25.310,-24.431,-23.761,-23.238,-22.823,-22.488,
|
|
6-22.214,-21.986,-21.795,-21.633,-21.494,-21.374,-21.269,-21.178,
|
|
7 -26.239,-25.066,-24.225,-23.585,-23.082,-22.681,-22.356,
|
|
7-22.089,-21.866,-21.679,-21.520,-21.383,-21.265,-21.162,-21.072,
|
|
8 -25.945,-24.824,-24.017,-23.405,-22.923,-22.538,-22.223,
|
|
8-21.964,-21.748,-21.565,-21.410,-21.276,-21.160,-21.059,-20.970,
|
|
9 -25.663,-24.587,-23.810,-23.222,-22.761,-22.391,-22.088,
|
|
9-21.838,-21.629,-21.452,-21.300,-21.170,-21.057,-20.958,-20.872,
|
|
A -25.372,-24.350,-23.603,-23.038,-22.596,-22.241,-21.950,
|
|
A-21.710,-21.508,-21.337,-21.190,-21.064,-20.954,-20.858,-20.774/
|
|
DATA C3/-25.076,-24.111,-23.396,-22.853,-22.429,-22.088,-21.809,
|
|
1-21.578,-21.384,-21.220,-21.078,-20.957,-20.851,-20.758,-20.676,
|
|
2 -24.779,-23.870,-23.189,-22.669,-22.261,-21.934,-21.667,
|
|
2-21.445,-21.259,-21.101,-20.965,-20.848,-20.746,-20.656,-20.578,
|
|
3 -24.486,-23.629,-22.983,-22.486,-22.095,-21.781,-21.524,
|
|
3-21.311,-21.132,-20.980,-20.850,-20.737,-20.639,-20.553,-20.478,
|
|
4 -24.183,-23.382,-22.774,-22.302,-21.928,-21.627,-21.381,
|
|
4-21.177,-21.005,-20.859,-20.734,-20.625,-20.531,-20.449,-20.376,
|
|
5 -23.867,-23.127,-22.561,-22.116,-21.761,-21.474,-21.238,
|
|
5-21.043,-20.878,-20.738,-20.617,-20.513,-20.423,-20.344,-20.274,
|
|
6 -23.538,-22.862,-22.340,-21.926,-21.592,-21.320,-21.096,
|
|
6-20.909,-20.751,-20.617,-20.502,-20.402,-20.315,-20.239,-20.172,
|
|
7 -23.234,-22.604,-22.120,-21.734,-21.422,-21.166,-20.953,
|
|
7-20.776,-20.625,-20.497,-20.387,-20.291,-20.208,-20.135,-20.071,
|
|
8 -22.934,-22.347,-21.898,-21.541,-21.250,-21.010,-20.811,
|
|
8-20.643,-20.500,-20.378,-20.273,-20.182,-20.102,-20.033,-19.971,
|
|
9 -22.637,-22.092,-21.676,-21.345,-21.075,-20.853,-20.666,
|
|
9-20.508,-20.374,-20.259,-20.159,-20.073,-19.997,-19.931,-19.872,
|
|
A -22.337,-21.835,-21.452,-21.147,-20.899,-20.693,-20.520,
|
|
A-20.373,-20.247,-20.139,-20.046,-19.964,-19.892,-19.830,-19.774/
|
|
DATA C4/-22.049,-21.584,-21.230,-20.950,-20.721,-20.531,-20.372,
|
|
1-20.236,-20.119,-20.019,-19.931,-19.855,-19.788,-19.729,-19.676,
|
|
2 -21.768,-21.337,-21.011,-20.754,-20.544,-20.370,-20.223,
|
|
2-20.098,-19.991,-19.898,-19.817,-19.746,-19.683,-19.628,-19.579,
|
|
3 -21.494,-21.096,-20.796,-20.559,-20.367,-20.208,-20.074,
|
|
3-19.960,-19.861,-19.776,-19.701,-19.636,-19.578,-19.527,-19.482,
|
|
4 -21.233,-20.861,-20.585,-20.368,-20.193,-20.048,-19.926,
|
|
4-19.821,-19.732,-19.654,-19.586,-19.526,-19.473,-19.426,-19.384,
|
|
5 -20.983,-20.635,-20.380,-20.181,-20.021,-19.889,-19.778,
|
|
5-19.683,-19.602,-19.531,-19.469,-19.415,-19.367,-19.324,-19.286,
|
|
6 -20.743,-20.418,-20.182,-19.999,-19.853,-19.733,-19.633,
|
|
6-19.547,-19.474,-19.410,-19.354,-19.305,-19.261,-19.223,-19.189,
|
|
7 -20.515,-20.210,-19.991,-19.824,-19.690,-19.581,-19.490,
|
|
7-19.413,-19.347,-19.290,-19.240,-19.196,-19.157,-19.122,-19.092,
|
|
8 -20.297,-20.011,-19.808,-19.654,-19.532,-19.434,-19.352,
|
|
8-19.282,-19.223,-19.172,-19.127,-19.088,-19.054,-19.023,-18.996,
|
|
9 -20.090,-19.822,-19.633,-19.491,-19.381,-19.291,-19.218,
|
|
9-19.156,-19.103,-19.057,-19.018,-18.983,-18.952,-18.925,-18.901,
|
|
A -19.893,-19.642,-19.467,-19.337,-19.236,-19.155,-19.089,
|
|
A-19.034,-18.987,-18.946,-18.912,-18.881,-18.854,-18.831,-18.810/
|
|
DATA C5/-19.705,-19.472,-19.309,-19.190,-19.098,-19.025,-18.966,
|
|
1-18.917,-18.876,-18.840,-18.810,-18.783,-18.760,-18.739,-18.721,
|
|
2 -19.527,-19.310,-19.161,-19.051,-18.968,-18.903,-18.851,
|
|
2-18.807,-18.771,-18.740,-18.713,-18.690,-18.670,-18.653,-18.637,
|
|
3 -19.357,-19.159,-19.022,-18.922,-18.847,-18.789,-18.743,
|
|
3-18.704,-18.673,-18.646,-18.623,-18.603,-18.586,-18.571,-18.558,
|
|
4 -19.195,-19.016,-18.892,-18.803,-18.736,-18.684,-18.643,
|
|
4-18.610,-18.583,-18.560,-18.540,-18.523,-18.509,-18.496,-18.485,
|
|
5 -19.042,-18.883,-18.772,-18.693,-18.634,-18.589,-18.553,
|
|
5-18.525,-18.501,-18.481,-18.465,-18.451,-18.438,-18.428,-18.419,
|
|
6 -18.894,-18.758,-18.662,-18.593,-18.542,-18.503,-18.473,
|
|
6-18.448,-18.428,-18.412,-18.398,-18.386,-18.376,-18.367,-18.359,
|
|
7 -18.752,-18.639,-18.559,-18.501,-18.458,-18.426,-18.400,
|
|
7-18.380,-18.363,-18.350,-18.338,-18.328,-18.320,-18.313,-18.306,
|
|
8 -18.611,-18.523,-18.460,-18.415,-18.381,-18.355,-18.334,
|
|
8-18.318,-18.304,-18.293,-18.284,-18.276,-18.269,-18.263,-18.258,
|
|
9 -18.471,-18.408,-18.362,-18.329,-18.304,-18.285,-18.269,
|
|
9-18.257,-18.247,-18.238,-18.231,-18.224,-18.219,-18.214,-18.210,
|
|
A -18.330,-18.290,-18.261,-18.239,-18.223,-18.211,-18.201,
|
|
A-18.192,-18.185,-18.179,-18.174,-18.169,-18.165,-18.162,-18.159/
|
|
DATA C6/-18.190,-18.168,-18.154,-18.143,-18.135,-18.129,-18.124,
|
|
1-18.120,-18.116,-18.112,-18.109,-18.106,-18.104,-18.102,-18.100,
|
|
2 -18.055,-18.047,-18.043,-18.042,-18.040,-18.039,-18.039,
|
|
2-18.038,-18.037,-18.036,-18.035,-18.034,-18.033,-18.033,-18.032,
|
|
3 -17.929,-17.931,-17.935,-17.939,-17.943,-17.946,-17.948,
|
|
3-17.950,-17.952,-17.953,-17.955,-17.956,-17.957,-17.958,-17.959,
|
|
4 -17.818,-17.826,-17.834,-17.842,-17.849,-17.855,-17.860,
|
|
4-17.865,-17.869,-17.872,-17.875,-17.878,-17.881,-17.883,-17.886,
|
|
5 -17.724,-17.736,-17.747,-17.758,-17.767,-17.775,-17.782,
|
|
5-17.788,-17.793,-17.798,-17.803,-17.807,-17.811,-17.815,-17.819,
|
|
6 -17.651,-17.665,-17.678,-17.690,-17.701,-17.710,-17.718,
|
|
6-17.725,-17.732,-17.738,-17.744,-17.749,-17.755,-17.760,-17.765,
|
|
7 -17.601,-17.615,-17.629,-17.642,-17.653,-17.663,-17.672,
|
|
7-17.680,-17.688,-17.695,-17.701,-17.708,-17.714,-17.720,-17.726,
|
|
8 -17.572,-17.587,-17.602,-17.614,-17.626,-17.636,-17.645,
|
|
8-17.654,-17.662,-17.670,-17.677,-17.684,-17.691,-17.698,-17.704,
|
|
9 -17.565,-17.581,-17.595,-17.607,-17.619,-17.629,-17.638,
|
|
9-17.647,-17.656,-17.664,-17.671,-17.679,-17.686,-17.693,-17.700,
|
|
A -17.580,-17.594,-17.608,-17.620,-17.630,-17.640,-17.650,
|
|
A-17.658,-17.667,-17.675,-17.682,-17.690,-17.697,-17.704,-17.711/
|
|
DATA C7/-17.613,-17.626,-17.639,-17.649,-17.659,-17.669,-17.677,
|
|
1-17.686,-17.694,-17.701,-17.709,-17.716,-17.723,-17.730,-17.737,
|
|
2 -17.663,-17.675,-17.685,-17.695,-17.703,-17.711,-17.719,
|
|
2-17.727,-17.734,-17.741,-17.748,-17.755,-17.761,-17.768,-17.774,
|
|
3 -17.728,-17.737,-17.745,-17.752,-17.759,-17.766,-17.772,
|
|
3-17.778,-17.785,-17.791,-17.797,-17.803,-17.808,-17.814,-17.820,
|
|
4 -17.803,-17.809,-17.814,-17.818,-17.823,-17.828,-17.832,
|
|
4-17.837,-17.842,-17.847,-17.852,-17.856,-17.861,-17.866,-17.871,
|
|
5 -17.884,-17.886,-17.888,-17.889,-17.891,-17.893,-17.896,
|
|
5-17.899,-17.902,-17.905,-17.908,-17.912,-17.915,-17.919,-17.922,
|
|
6 -17.966,-17.964,-17.961,-17.959,-17.958,-17.958,-17.958,
|
|
6-17.959,-17.960,-17.961,-17.963,-17.964,-17.966,-17.968,-17.970,
|
|
7 -18.040,-18.034,-18.028,-18.023,-18.019,-18.016,-18.013,
|
|
7-18.012,-18.010,-18.010,-18.009,-18.009,-18.009,-18.009,-18.010,
|
|
8 -18.096,-18.087,-18.078,-18.071,-18.065,-18.059,-18.055,
|
|
8-18.051,-18.047,-18.045,-18.042,-18.040,-18.039,-18.037,-18.036,
|
|
9 -18.125,-18.115,-18.105,-18.097,-18.089,-18.082,-18.076,
|
|
9-18.070,-18.065,-18.061,-18.057,-18.053,-18.051,-18.048,-18.046,
|
|
A -18.120,-18.112,-18.103,-18.095,-18.087,-18.079,-18.072,
|
|
A-18.066,-18.060,-18.055,-18.050,-18.046,-18.042,-18.039,-18.036/
|
|
DATA C8/-18.083,-18.078,-18.071,-18.064,-18.057,-18.050,-18.044,
|
|
1-18.037,-18.032,-18.026,-18.022,-18.017,-18.014,-18.010,-18.007,
|
|
2 -18.025,-18.022,-18.017,-18.012,-18.006,-18.000,-17.994,
|
|
2-17.989,-17.984,-17.979,-17.975,-17.971,-17.968,-17.965,-17.963,
|
|
3 -17.957,-17.955,-17.952,-17.948,-17.943,-17.938,-17.934,
|
|
3-17.929,-17.925,-17.922,-17.918,-17.916,-17.913,-17.911,-17.910,
|
|
4 -17.890,-17.889,-17.886,-17.882,-17.879,-17.875,-17.871,
|
|
4-17.867,-17.864,-17.862,-17.860,-17.858,-17.857,-17.856,-17.855,
|
|
5 -17.831,-17.829,-17.826,-17.822,-17.819,-17.815,-17.812,
|
|
5-17.810,-17.807,-17.806,-17.804,-17.803,-17.803,-17.803,-17.803,
|
|
6 -17.786,-17.782,-17.777,-17.773,-17.769,-17.766,-17.763,
|
|
6-17.761,-17.759,-17.758,-17.757,-17.757,-17.757,-17.758,-17.759,
|
|
7 -17.753,-17.747,-17.741,-17.735,-17.731,-17.727,-17.724,
|
|
7-17.722,-17.721,-17.720,-17.720,-17.720,-17.721,-17.722,-17.724,
|
|
8 -17.733,-17.724,-17.716,-17.709,-17.703,-17.699,-17.696,
|
|
8-17.694,-17.693,-17.692,-17.692,-17.693,-17.694,-17.695,-17.697,
|
|
9 -17.723,-17.711,-17.700,-17.691,-17.685,-17.680,-17.676,
|
|
9-17.674,-17.673,-17.672,-17.673,-17.673,-17.675,-17.676,-17.678,
|
|
A -17.718,-17.702,-17.689,-17.679,-17.672,-17.667,-17.663,
|
|
A-17.660,-17.659,-17.659,-17.659,-17.660,-17.661,-17.663,-17.665/
|
|
DATA C9/-17.713,-17.695,-17.681,-17.670,-17.662,-17.656,-17.653,
|
|
1-17.650,-17.649,-17.649,-17.649,-17.650,-17.651,-17.653,-17.655,
|
|
2 -17.705,-17.686,-17.671,-17.660,-17.652,-17.647,-17.643,
|
|
2-17.641,-17.640,-17.640,-17.640,-17.641,-17.643,-17.645,-17.647,
|
|
3 -17.690,-17.671,-17.657,-17.647,-17.640,-17.635,-17.632,
|
|
3-17.630,-17.630,-17.630,-17.631,-17.632,-17.634,-17.636,-17.639,
|
|
4 -17.667,-17.649,-17.637,-17.629,-17.623,-17.619,-17.618,
|
|
4-17.617,-17.617,-17.618,-17.619,-17.621,-17.623,-17.626,-17.628,
|
|
5 -17.635,-17.621,-17.611,-17.605,-17.601,-17.600,-17.599,
|
|
5-17.599,-17.601,-17.602,-17.604,-17.607,-17.609,-17.612,-17.615,
|
|
6 -17.596,-17.585,-17.579,-17.576,-17.575,-17.575,-17.576,
|
|
6-17.578,-17.580,-17.582,-17.585,-17.588,-17.591,-17.595,-17.598,
|
|
7 -17.550,-17.544,-17.542,-17.542,-17.544,-17.546,-17.548,
|
|
7-17.552,-17.555,-17.558,-17.562,-17.566,-17.570,-17.573,-17.577,
|
|
8 -17.501,-17.500,-17.501,-17.504,-17.508,-17.513,-17.517,
|
|
8-17.521,-17.526,-17.530,-17.535,-17.539,-17.544,-17.548,-17.553,
|
|
9 -17.449,-17.452,-17.457,-17.463,-17.470,-17.476,-17.482,
|
|
9-17.488,-17.493,-17.499,-17.504,-17.509,-17.514,-17.519,-17.524,
|
|
A -17.396,-17.403,-17.412,-17.420,-17.429,-17.437,-17.444,
|
|
A-17.451,-17.458,-17.464,-17.470,-17.476,-17.481,-17.487,-17.492/
|
|
DATAC10/-17.344,-17.355,-17.366,-17.377,-17.387,-17.396,-17.405,
|
|
1-17.413,-17.420,-17.427,-17.434,-17.440,-17.446,-17.452,-17.458,
|
|
2 -17.295,-17.307,-17.321,-17.333,-17.345,-17.355,-17.365,
|
|
2-17.373,-17.382,-17.389,-17.397,-17.404,-17.410,-17.417,-17.423,
|
|
3 -17.249,-17.264,-17.278,-17.292,-17.304,-17.316,-17.326,
|
|
3-17.335,-17.344,-17.352,-17.360,-17.368,-17.375,-17.382,-17.389,
|
|
4 -17.209,-17.225,-17.241,-17.255,-17.268,-17.280,-17.291,
|
|
4-17.301,-17.310,-17.319,-17.327,-17.335,-17.343,-17.350,-17.357,
|
|
5 -17.177,-17.194,-17.210,-17.225,-17.239,-17.251,-17.262,
|
|
5-17.272,-17.282,-17.291,-17.300,-17.308,-17.316,-17.324,-17.331,
|
|
6 -17.154,-17.172,-17.189,-17.204,-17.218,-17.230,-17.242,
|
|
6-17.252,-17.262,-17.272,-17.280,-17.289,-17.298,-17.306,-17.314,
|
|
7 -17.144,-17.162,-17.179,-17.194,-17.208,-17.220,-17.232,
|
|
7-17.242,-17.253,-17.262,-17.271,-17.280,-17.289,-17.297,-17.306,
|
|
8 -17.146,-17.164,-17.181,-17.196,-17.210,-17.222,-17.234,
|
|
8-17.245,-17.255,-17.265,-17.274,-17.283,-17.292,-17.301,-17.309,
|
|
9 -17.163,-17.180,-17.197,-17.212,-17.225,-17.237,-17.249,
|
|
9-17.260,-17.270,-17.280,-17.289,-17.298,-17.307,-17.316,-17.325,
|
|
A -17.193,-17.211,-17.227,-17.241,-17.254,-17.266,-17.277,
|
|
A-17.288,-17.298,-17.308,-17.317,-17.327,-17.336,-17.345,-17.353/
|
|
DATAC11/-17.239,-17.256,-17.271,-17.284,-17.297,-17.309,-17.320,
|
|
1-17.330,-17.340,-17.350,-17.359,-17.369,-17.378,-17.387,-17.395,
|
|
2 -17.299,-17.315,-17.329,-17.342,-17.354,-17.365,-17.376,
|
|
2-17.386,-17.396,-17.405,-17.415,-17.424,-17.433,-17.442,-17.451,
|
|
3 -17.373,-17.388,-17.402,-17.414,-17.425,-17.436,-17.446,
|
|
3-17.456,-17.466,-17.475,-17.484,-17.493,-17.502,-17.511,-17.520,
|
|
4 -17.462,-17.476,-17.489,-17.500,-17.511,-17.521,-17.531,
|
|
4-17.541,-17.550,-17.559,-17.569,-17.578,-17.587,-17.595,-17.604,
|
|
5 -17.567,-17.581,-17.592,-17.603,-17.613,-17.623,-17.632,
|
|
5-17.641,-17.651,-17.660,-17.669,-17.678,-17.686,-17.695,-17.704,
|
|
6 -17.689,-17.701,-17.712,-17.722,-17.732,-17.741,-17.750,
|
|
6-17.759,-17.768,-17.777,-17.786,-17.795,-17.803,-17.812,-17.821,
|
|
7 -17.829,-17.840,-17.851,-17.860,-17.869,-17.878,-17.887,
|
|
7-17.896,-17.904,-17.913,-17.922,-17.930,-17.939,-17.948,-17.956,
|
|
8 -17.988,-18.000,-18.010,-18.019,-18.028,-18.036,-18.045,
|
|
8-18.053,-18.062,-18.070,-18.079,-18.087,-18.096,-18.104,-18.112,
|
|
9 -18.171,-18.183,-18.192,-18.201,-18.210,-18.218,-18.227,
|
|
9-18.235,-18.243,-18.252,-18.260,-18.268,-18.277,-18.285,-18.293,
|
|
A -18.381,-18.393,-18.403,-18.413,-18.422,-18.430,-18.438,
|
|
A-18.447,-18.455,-18.463,-18.471,-18.479,-18.487,-18.495,-18.503/
|
|
DATAC12/-18.625,-18.638,-18.650,-18.660,-18.669,-18.678,-18.687,
|
|
1-18.695,-18.703,-18.711,-18.719,-18.726,-18.734,-18.742,-18.750,
|
|
2 -18.912,-18.929,-18.943,-18.955,-18.966,-18.975,-18.984,
|
|
2-18.993,-19.001,-19.008,-19.016,-19.023,-19.031,-19.038,-19.045,
|
|
3 -19.260,-19.283,-19.303,-19.320,-19.333,-19.345,-19.355,
|
|
3-19.364,-19.372,-19.380,-19.387,-19.394,-19.400,-19.407,-19.413,
|
|
4 -19.704,-19.740,-19.771,-19.796,-19.816,-19.832,-19.845,
|
|
4-19.855,-19.863,-19.870,-19.876,-19.882,-19.887,-19.892,-19.897,
|
|
5 -20.339,-20.386,-20.424,-20.454,-20.476,-20.492,-20.502,
|
|
5-20.509,-20.513,-20.516,-20.518,-20.520,-20.521,-20.523,-20.524,
|
|
6 -21.052,-21.075,-21.093,-21.105,-21.114,-21.120,-21.123,
|
|
6-21.125,-21.126,-21.127,-21.128,-21.130,-21.131,-21.133,-21.135,
|
|
7 -21.174,-21.203,-21.230,-21.255,-21.278,-21.299,-21.320,
|
|
7-21.339,-21.357,-21.375,-21.392,-21.408,-21.424,-21.439,-21.454,
|
|
8 -21.285,-21.317,-21.346,-21.372,-21.395,-21.416,-21.435,
|
|
8-21.452,-21.468,-21.483,-21.497,-21.511,-21.524,-21.536,-21.548,
|
|
9 -21.396,-21.429,-21.459,-21.486,-21.511,-21.532,-21.551,
|
|
9-21.569,-21.585,-21.600,-21.614,-21.627,-21.640,-21.652,-21.663,
|
|
A -21.516,-21.549,-21.580,-21.609,-21.635,-21.658,-21.678,
|
|
A-21.696,-21.713,-21.728,-21.742,-21.755,-21.767,-21.779,-21.790/
|
|
DATAC13/-21.651,-21.681,-21.711,-21.738,-21.763,-21.785,-21.804,
|
|
1-21.821,-21.837,-21.851,-21.864,-21.876,-21.887,-21.898,-21.908,
|
|
2 -21.810,-21.831,-21.853,-21.874,-21.893,-21.910,-21.925,
|
|
2-21.938,-21.950,-21.961,-21.971,-21.980,-21.989,-21.998,-22.006,
|
|
3 -22.009,-22.016,-22.026,-22.037,-22.048,-22.058,-22.066,
|
|
3-22.074,-22.081,-22.088,-22.094,-22.099,-22.105,-22.111,-22.117,
|
|
4 -22.353,-22.317,-22.296,-22.284,-22.276,-22.270,-22.266,
|
|
4-22.262,-22.260,-22.258,-22.257,-22.257,-22.257,-22.258,-22.259,
|
|
5 -22.705,-22.609,-22.552,-22.515,-22.488,-22.468,-22.451,
|
|
5-22.438,-22.427,-22.418,-22.410,-22.405,-22.400,-22.397,-22.395,
|
|
6 -22.889,-22.791,-22.731,-22.690,-22.659,-22.634,-22.612,
|
|
6-22.594,-22.579,-22.566,-22.555,-22.546,-22.539,-22.533,-22.528,
|
|
7 -23.211,-23.109,-23.041,-22.989,-22.945,-22.906,-22.872,
|
|
7-22.842,-22.816,-22.793,-22.774,-22.757,-22.743,-22.732,-22.722,
|
|
8 -25.312,-24.669,-24.250,-23.959,-23.746,-23.587,-23.463,
|
|
8-23.366,-23.288,-23.225,-23.173,-23.131,-23.095,-23.066,-23.041,
|
|
9 -25.394,-24.752,-24.333,-24.041,-23.829,-23.669,-23.546,
|
|
9-23.449,-23.371,-23.308,-23.256,-23.214,-23.178,-23.149,-23.124,
|
|
A -25.430,-24.787,-24.369,-24.077,-23.865,-23.705,-23.582,
|
|
A-23.484,-23.407,-23.344,-23.292,-23.249,-23.214,-23.185,-23.160/
|
|
DATA PARTOH/
|
|
1 145.979, 178.033, 211.618, 247.053, 284.584, 324.398,
|
|
2 366.639, 411.425, 458.854, 509.012, 561.976, 617.823,
|
|
3 676.626, 738.448, 803.363, 871.437, 942.735, 1017.330,
|
|
4 1095.284, 1176.654, 1261.510, 1349.898, 1441.875, 1537.483,
|
|
5 1636.753, 1739.733, 1846.434, 1956.883, 2071.080, 2189.029,
|
|
6 2310.724, 2436.155, 2565.283, 2698.103, 2834.571, 2974.627,
|
|
7 3118.242, 3265.366, 3415.912, 3569.837, 3727.077/
|
|
DATA FREQ1/0./
|
|
C
|
|
SBFOH=0.
|
|
IF(FR.EQ.FREQ1) GO TO 30
|
|
FREQ1=FR
|
|
WAVENO=FR/2.99792458E10
|
|
EVOLT=WAVENO/8065.479
|
|
N=int(EVOLT*10.-20.)
|
|
EN=FLOAT(N)*.1+2.
|
|
IF(N.LE.0) RETURN
|
|
IF(N.GE.130) RETURN
|
|
DO IT=1,15
|
|
CROSSOHT(IT)=(CROSSOH(IT,N)+(CROSSOH(IT,N+1)-CROSSOH(IT,N))*
|
|
* (EVOLT-EN)*10.)
|
|
END DO
|
|
c
|
|
c interpolate to obtain partition function
|
|
c
|
|
30 IF(T.GE.9000.) RETURN
|
|
IF(N.LE.0) RETURN
|
|
IF(N.GE.130) RETURN
|
|
IT=int((T-1000.)*twhui+1.)
|
|
IF(IT.LT.1) IT=1
|
|
TN=FLOAT(IT)*twhu+800.
|
|
PART=PARTOH(IT)+(PARTOH(IT+1)-PARTOH(IT))*(T-TN)*twhui
|
|
c
|
|
c interpolate to obtain cross-section
|
|
c
|
|
IT=int((T-2000.)*fihui+1.)
|
|
IF(IT.LT.1) IT=1
|
|
TN=FLOAT(IT)*fihu+1500.
|
|
SBFOH=EXP((CROSSOHT(IT)+(CROSSOHT(IT+1)-CROSSOHT(IT))*
|
|
c * (T-TN)*fihui)*tenl)*PART
|
|
* (T-TN)*fihui)*tenl)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE XENINI
|
|
C =================
|
|
C
|
|
C Initializes necessary arrays for evaluating hydrogen line profiles
|
|
C from the XENOMORPH tables
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
C
|
|
DO I=1,4
|
|
DO J=1,22
|
|
ILXEN(I,J)=0
|
|
END DO
|
|
END DO
|
|
if(ihxenb.gt.0) then
|
|
ihxenb=23
|
|
ihxenr=ihxenb+1
|
|
open(unit=ihxenb,file='xenomorph.blue.dat',status='old')
|
|
open(unit=ihxenr,file='xenomorph.red.dat',status='old')
|
|
write(6,641) ihxenb,ihxenr
|
|
else
|
|
return
|
|
end if
|
|
c
|
|
641 format(' -----------'/
|
|
* ' reading XENOMORPH tables; ihxen =',2i3,/
|
|
* ' -----------')
|
|
C
|
|
C ---------------------------------
|
|
C read tables - blue wing
|
|
C ---------------------------------
|
|
C
|
|
ILINE=0
|
|
READ(IHXENB,*) NTAB
|
|
DO ITAB=1,NTAB
|
|
ILINEB=ILINE
|
|
READ(IHXENB,*) NLXEN
|
|
DO ILI=1,NLXEN
|
|
ILINE=ILINE+1
|
|
READ(IHXENB,*) I,J,ALMIN,ANEMIN,TMIN,DLA,DLE,DLT,
|
|
* NWL,NE,NT
|
|
XNEMIN=ANEMIN
|
|
ILXEN(I,J)=ILINE
|
|
NWLXEN(ILINE)=NWL
|
|
NTHXEN(ILINE)=NT
|
|
NEHXEN(ILINE)=NE
|
|
DO IWL=1,NWL
|
|
ALXEN(ILINE,IWL)=ALMIN+(IWL-1)*DLA
|
|
END DO
|
|
DO INE=1,NE
|
|
XNEXEN(INE,ILINE)=ANEMIN+(INE-1)*DLE
|
|
END DO
|
|
DO IT=1,NT
|
|
XTXEN(IT,ILINE)=TMIN+(IT-1)*DLT
|
|
END DO
|
|
END DO
|
|
c
|
|
DO ILI=1,NLXEN
|
|
ILNE=ILINEB+ILI
|
|
NWL=NWLXEN(ILNE)
|
|
READ(IHXENB,500)
|
|
DO INE=1,NEHXEN(ILNE)
|
|
DO IT=1,NTHXEN(ILNE)
|
|
READ(IHXENB,*) QLT,(PRFXB(ILNE,IWL,IT,INE),IWL=1,NWL)
|
|
END DO
|
|
END DO
|
|
C
|
|
END DO
|
|
END DO
|
|
500 FORMAT(1X)
|
|
CLOSE(IHXENB)
|
|
C
|
|
C ---------------------------------
|
|
C read tables - red wing
|
|
C ---------------------------------
|
|
C
|
|
ILINE=0
|
|
READ(IHXENR,*) NTAB
|
|
DO ITAB=1,NTAB
|
|
ILINEB=ILINE
|
|
READ(IHXENR,*) NLXEN
|
|
DO ILI=1,NLXEN
|
|
ILINE=ILINE+1
|
|
READ(IHXENR,*) I,J,ALMIN,ANEMIN,TMIN,DLA,DLE,DLT,
|
|
* NWL,NE,NT
|
|
END DO
|
|
c
|
|
DO ILI=1,NLXEN
|
|
ILNE=ILINEB+ILI
|
|
NWL=NWLXEN(ILNE)
|
|
READ(IHXENR,500)
|
|
DO INE=1,NEHXEN(ILNE)
|
|
DO IT=1,NTHXEN(ILNE)
|
|
READ(IHXENR,*) QLT,(PRFXR(ILNE,IWL,IT,INE),IWL=1,NWL)
|
|
END DO
|
|
END DO
|
|
C
|
|
END DO
|
|
END DO
|
|
C
|
|
C interpolation to the actual values of temperature and electron
|
|
C density
|
|
C
|
|
do id =1,nd
|
|
tl=log10(temp(id))
|
|
anel=log10(elec(id))
|
|
do ili=1,nlxen
|
|
iline=ilineb+ili
|
|
nwl=nwlxen(iline)
|
|
do iwl=1,nwl
|
|
call intxen(prfb0,prfr0,tl,anel,iwl,iline)
|
|
prfb(iline,id,iwl)=prfb0
|
|
prfr(iline,id,iwl)=prfb0
|
|
end do
|
|
end do
|
|
end do
|
|
CLOSE(IHXENR)
|
|
c
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE INTXEN(W0B,W0R,X0,Z0,IWL,ILINE)
|
|
C ==========================================
|
|
C
|
|
C Interpolation in temperature and electron density from the
|
|
C Xenomorph tables for hydrogen lines to the actual valus of
|
|
C temperature and electron density
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION ZZ(3),XX(3),WXB(3),WZB(3),WXR(3),WZR(3)
|
|
C
|
|
NX=2
|
|
NZ=2
|
|
NT=NTHXEN(ILINE)
|
|
NE=NEHXEN(ILINE)
|
|
C
|
|
DO 10 IZZ=1,NE-1
|
|
IPZ=IZZ
|
|
IF(Z0.LE.XNEXEN(IZZ+1,ILINE)) GO TO 20
|
|
10 CONTINUE
|
|
20 N0Z=IPZ-NZ/2+1
|
|
IF(N0Z.LT.1) N0Z=1
|
|
IF(N0Z.GT.NE-NZ+1) N0Z=NE-NZ+1
|
|
N1Z=N0Z+NZ-1
|
|
C
|
|
DO IZZ=N0Z,N1Z
|
|
I0Z=IZZ-N0Z+1
|
|
ZZ(I0Z)=XNEXEN(IZZ,ILINE)
|
|
DO 30 IX=1,NT-1
|
|
IPX=IX
|
|
IF(X0.LE.XTXEN(IX+1,ILINE)) GO TO 40
|
|
30 CONTINUE
|
|
40 N0X=IPX-NX/2+1
|
|
IF(N0X.LT.1) N0X=1
|
|
IF(N0X.GT.NT-NX+1) N0X=NT-NX+1
|
|
N1X=N0X+NX-1
|
|
DO IX=N0X,N1X
|
|
I0=IX-N0X+1
|
|
XX(I0)=XTXEN(IX,ILINE)
|
|
WXB(I0)=PRFXB(ILINE,IWL,IX,IZZ)
|
|
WXR(I0)=PRFXR(ILINE,IWL,IX,IZZ)
|
|
END DO
|
|
WZB(I0Z)=YINT(XX,WXB,X0)
|
|
WZR(I0Z)=YINT(XX,WXR,X0)
|
|
END DO
|
|
W0B=YINT(ZZ,WZB,Z0)
|
|
W0R=YINT(ZZ,WZR,Z0)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ******************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE GOMINI
|
|
C =================
|
|
C
|
|
C Initialization and reading of the opacity table for thermal processe
|
|
C and Rayleigh scattering
|
|
c raytab: scattering opacities in cm^2/gm at 5.0872638d14 Hz (sodium D)
|
|
c (NOTE: Quantities in rayleigh.tab are in log_e)
|
|
C
|
|
c tempvec: array of temperatures
|
|
c rhovec: array of densities (gm/cm^3)
|
|
c nu: array of frequencies
|
|
c table: absorptive opacities in cm^2/gm
|
|
c (NOTE: Quantities in absorption.tab are in log_e)
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
COMMON/GOMOPA/frgtab(mfhtab),wlgtab(mfhtab),hydopg(mfhtab,mdepth),
|
|
* nugfreq
|
|
common/gompar/hglim,ihgom
|
|
dimension temvec(mtabth),elevec(mtabeh),
|
|
* hydcrs(mtabth,mtabeh,mfhtab)
|
|
c
|
|
if(ihgom.eq.0) return
|
|
C
|
|
open(53,file='gomhyd.dat',status='old')
|
|
c
|
|
read(53,*) nugfreq,nugtemp,nugele
|
|
read(53,*)
|
|
read(53,*) (temvec(i),i=1,nugtemp)
|
|
read(53,*)
|
|
read(53,*) (elevec(j),j=1,nugele)
|
|
do it=1,nugtemp
|
|
temvec(it)=log(temvec(it)*1.161e4)
|
|
end do
|
|
c write(6,600) ihgom,nugfreq,nugtemp,nugele
|
|
c 600 format(' ihgom,nugfr,nugt,nuge ',4i4)
|
|
c
|
|
EGTAB1 = elevec(1)
|
|
EGTAB2 = elevec(nugele)
|
|
TGTAB1 = temvec(1)
|
|
TGTAB2 = temvec(nugtemp)
|
|
c
|
|
do k = 1, nugfreq
|
|
read(53,501) eneev
|
|
frgtab(k)=3.28805e15/13.595*eneev
|
|
wlgtab(k)=2.997925e18/frgtab(k)
|
|
do i = 1, nugtemp
|
|
read(53,*) (hydcrs(i,j,k),j=1,nugele)
|
|
end do
|
|
end do
|
|
frg1=frgtab(1)
|
|
frg2=frgtab(nugfreq)
|
|
c
|
|
501 format(40x,f17.14)
|
|
close(53)
|
|
C
|
|
c Interpolate to the actual temperature and electron density
|
|
c at the individual depth points
|
|
C
|
|
do 10 id=1,nd
|
|
if(elec(id).lt.HGLIM) go to 10
|
|
rl=log(elec(id))
|
|
tl=log(temp(id))
|
|
c
|
|
DELTAR=(RL-EGTAB1)/(EGTAB2-EGTAB1)*FLOAT(nugele-1)
|
|
JR = 1 + IDINT(DELTAR)
|
|
IF(JR.LT.1) JR = 1
|
|
IF(JR.GT.(nugele-1)) JR = nugele-1
|
|
r1i=elevec(jr)
|
|
r2i=elevec(jr+1)
|
|
dri=(RL-R1i)/(R2i-R1i)
|
|
if(JR .eq. 1) dri = 0.d0
|
|
C
|
|
DELTAT=(TL-TGTAB1)/(TGTAB2-TGTAB1)*FLOAT(nugtemp-1)
|
|
JP = 1 + IDINT(DELTAT)
|
|
IF(JP.LT.1) JP = 1
|
|
IF(JP.GT.nugtemp-1) JP = nugtemp-1
|
|
t1i=temvec(jp)
|
|
t2i=temvec(jp+1)
|
|
dti=(TL-T1i)/(T2i-T1i)
|
|
if(JP .eq. 1) dti = 0.d0
|
|
C
|
|
c loop over tabular frequencies
|
|
c
|
|
do jf=1,nugfreq
|
|
opr1=hydcrs(jp,jr,jf)+dti*
|
|
* (hydcrs(jp+1,jr,jf)-hydcrs(jp,jr,jf))
|
|
opr2=hydcrs(jp,jr+1,jf)+dti*
|
|
* (hydcrs(jp+1,jr+1,jf)-hydcrs(jp,jr+1,jf))
|
|
opac=opr1+dri*(opr2-opr1)
|
|
hydopg(jf,id)=opac+log(0.02654*4.1347e-15)
|
|
end do
|
|
10 continue
|
|
return
|
|
end
|
|
C
|
|
C ****************************************************\
|
|
C
|
|
C
|
|
subroutine ghydop(id,i0,i1,pj,absoh,emish)
|
|
c ==========================================
|
|
c
|
|
c hydrogen opacity -- lines + pseudocontinuum from Gomez tables
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
COMMON/GOMOPA/frgtab(mfhtab),wlgtab(mfhtab),hydopg(mfhtab,mdepth),
|
|
* nugfreq
|
|
dimension absoh(mfreq),emish(mfreq),pj(40)
|
|
c
|
|
frg1=frgtab(1)
|
|
frg2=frgtab(nugfreq)
|
|
do 20 ij=i0,i1
|
|
fr=freq(ij)
|
|
if(fr.lt.frg1.or.fr.gt.frg2) go to 20
|
|
wla=2.997925e18/fr
|
|
frl=log10(fr)
|
|
c
|
|
if(ij.eq.i0) igf=nugfreq
|
|
10 continue
|
|
if(wla.gt.wlgtab(igf)) then
|
|
igf=igf-1
|
|
go to 10
|
|
end if
|
|
ig0=igf
|
|
if(ig0.le.2) ig0=2
|
|
ig1=igf-1
|
|
abl=(hydopg(ig1,id)-hydopg(ig0,id))*(wla-wlgtab(ig0))/
|
|
* (wlgtab(ig1)-wlgtab(ig0))+hydopg(ig0,id)
|
|
c
|
|
ii=1
|
|
if(freq(ij).gt.8.22013e14) then
|
|
pp=pj(1)*2.
|
|
else
|
|
pp=pj(2)*8.
|
|
end if
|
|
c
|
|
F15=FR*1.E-15
|
|
XKF=EXP(-4.79928e-11*FR/TEMP(ID))
|
|
XKFB=XKF*1.4743E-2*F15*F15*F15
|
|
|
|
oph=exp(abl)*pp
|
|
absoh(ij)=absoh(ij)+oph
|
|
emish(ij)=emish(ij)+oph*xkfb/(1.-xkf)
|
|
20 continue
|
|
c
|
|
return
|
|
end
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
subroutine ingrid(mode,inext,igrd)
|
|
C ==================================
|
|
C
|
|
c setting state parameters for the opacity grid calculations
|
|
c
|
|
c input:
|
|
c temp1 - lowest value of T
|
|
c temp2 - largest value of T
|
|
c ntemp - number of temperature values
|
|
c dens1 - lowest value of the density parameter
|
|
c dens2 - largest value of the density parameter
|
|
c ndens - number of the density parameter values
|
|
c
|
|
c isdens = 0 - density parameter is electron density
|
|
c > 0 - density parameter is mass density
|
|
c < 0 - density parameter is gas pressure
|
|
c
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
parameter (un=1.,ten15=1.e-15,c18=2.997925e18)
|
|
real*4 absgrd(mttab,mrtab,mfgrid),dtim
|
|
common/alsave/ALAM0s,ALASTs,CUTOF0s,CUTOFSs,RELOPs,SPACEs
|
|
common/gridp0/tempg(mttab),densg(mttab,mrtab),elecgr(mttab,mrtab),
|
|
* densg0(mttab),temp1,ntemp,ndens,nden(mttab)
|
|
common/gridf0/wlgrid(mfgrid),nfgrid
|
|
common/fintab/absgrd
|
|
common/prfrgr/ipfreq,indext,indexn
|
|
common/igrddd/igrdd,irelin
|
|
common/initab/absop(msftab),wltab(msftab),
|
|
* nfrtab(mttab,mrtab),inttab
|
|
common/elecm0/elecm(mdepth)
|
|
common/timeta/dtim
|
|
common/relabu/relabn(matom),popul0(mlevel,1)
|
|
dimension abgrd(mfgrid),xli(3)
|
|
character*(80) tabname
|
|
common/tabout/tabname,ibingr,idens
|
|
dimension templ(mttab)
|
|
c
|
|
c --------------
|
|
c initialization
|
|
c --------------
|
|
c
|
|
igrdd=igrd
|
|
if(mode.eq.0) then
|
|
c
|
|
read(2,*) ntemp,temp1,temp2
|
|
read(2,*) idens
|
|
if(idens.lt.10) then
|
|
read(2,*) ndens,dens1,dens2
|
|
else if(idens.lt.20) then
|
|
read(2,*) ndens,densl1,densl2,densu1,densu2
|
|
else
|
|
do it=1,ntemp
|
|
read(2,*) ndens,densl,densu
|
|
densg(it,1)=densl
|
|
densg(it,ndens)=densu
|
|
nden(it)=ndens
|
|
end do
|
|
end if
|
|
if(idens.lt.20) then
|
|
do it=1,ntemp
|
|
nden(it)=ndens
|
|
end do
|
|
end if
|
|
if(ifeos.le.0) then
|
|
read(2,*) nfgrid,inttab,wlam1,wlam2
|
|
read(2,*) tabname,ibingr
|
|
end if
|
|
c
|
|
irsct=0
|
|
irsche=0
|
|
irsch2=0
|
|
c
|
|
wl1=log(wlam1)
|
|
wl2=log(wlam2)
|
|
dwl=(wl2-wl1)/(nfgrid-1)
|
|
do i=1,nfgrid
|
|
wlgrid(i)=exp(wl1+(i-1)*dwl)
|
|
end do
|
|
c
|
|
if(temp1.gt.0.) then
|
|
at1=log(temp1)
|
|
at2=log(temp2)
|
|
dt=0.
|
|
if(ntemp.gt.1) dt=(at2-at1)/(ntemp-1)
|
|
do i=1,ntemp
|
|
templ(i)=at1+(i-1)*dt
|
|
tempg(i)=exp(templ(i))
|
|
end do
|
|
if(idens.lt.10) then
|
|
at1=log(dens1)
|
|
at2=log(dens2)
|
|
dr=0.
|
|
ndens=nden(1)
|
|
if(ndens.gt.0) dr=(at2-at1)/(ndens-1)
|
|
do i=1,ntemp
|
|
do j=1,ndens
|
|
densg(i,j)=exp(at1+(j-1)*dr)
|
|
end do
|
|
end do
|
|
else if(idens.lt.20) then
|
|
rhol1=log(densl1)
|
|
rhol2=log(densl2)
|
|
rhou1=log(densu1)
|
|
rhou2=log(densu2)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
dens1=rhol1+(rhou1-rhol1)/(at2-at1)*(templ(i)-at1)
|
|
dens2=rhol2+(rhou2-rhol2)/(at2-at1)*(templ(i)-at1)
|
|
dr=0.
|
|
if(ndens.gt.1) dr=(dens2-dens1)/(ndens-1)
|
|
do j=1,ndens
|
|
densg(i,j)=exp(dens1+(j-1)*dr)
|
|
end do
|
|
end do
|
|
else
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
at1=log(densg(i,1))
|
|
at2=log(densg(i,ndens))
|
|
dr=0.
|
|
if(ndens.gt.0) dr=(at2-at1)/(ndens-1)
|
|
do j=2,ndens-1
|
|
densg(i,j)=exp(at1+(j-1)*dr)
|
|
end do
|
|
end do
|
|
end if
|
|
c
|
|
write(6,621) ntemp,nden(1)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(6,622) tempg(i),(log10(densg(i,j)),j=1,ndens)
|
|
end do
|
|
621 format(/' COMPUTING AN OPACITY TABLE WITH GRID PARAMETERS:'/
|
|
* ' ===== ntemp, ndens ',2i4)
|
|
622 format(f10.1,20f8.2)
|
|
else
|
|
call inpmod
|
|
ntemp=nd
|
|
ndens=1
|
|
do it=1,ntemp
|
|
tempg(it)=temp(it)
|
|
densg0(it)=dens(it)
|
|
densg(it,1)=dens(it)
|
|
elecm(it)=elec(it)
|
|
end do
|
|
if(ifeos.le.0) then
|
|
write(6,621) ntemp,ndens
|
|
do i=1,ntemp
|
|
write(6,622) tempg(i),densg0(i)
|
|
end do
|
|
end if
|
|
ndens=1
|
|
idens=2
|
|
end if
|
|
c
|
|
nd=1
|
|
idstd=1
|
|
inext=1
|
|
frmx=0.
|
|
frmn=1.e20
|
|
idens0=mod(idens,10)
|
|
c
|
|
indext=1
|
|
indexn=1
|
|
ipfreq=0
|
|
irelin=1
|
|
temp(1)=tempg(indext)
|
|
c
|
|
write(6,646) indext,temp(1),
|
|
* indexn,densg(indext,indexn)
|
|
646 format(/' ************************************',
|
|
* /' GRID POINT OF THE OPACITY TABLE WITH:'/
|
|
* ' INDEX TEMP, T ',i4,f10.1/
|
|
* ' INDEX DENS, DENS',I4,1PE10.1,
|
|
* /' ************************************'/)
|
|
c
|
|
if(temp1.le.0.) elec(1)=elecm(indext)
|
|
call densit(densg(indext,indexn),idens0)
|
|
if(ntemp.eq.1.and.ndens.eq.1) inext=0
|
|
|
|
elecgr(indext,indexn)=elec(1)
|
|
|
|
call abnchn(0)
|
|
|
|
return
|
|
c
|
|
c ---------------------------------------------
|
|
c after computing the table for one T-rho pair:
|
|
c ---------------------------------------------
|
|
c
|
|
else if(mode.eq.1) then
|
|
if(ifeos.le.0) then
|
|
c
|
|
call timing(1,igrd+1)
|
|
c
|
|
do i=1,3
|
|
xli(i)=0.
|
|
end do
|
|
do i=1,nmlist
|
|
xli(i)=float(nlinmt(i))*1.e-3
|
|
end do
|
|
c
|
|
if(imode.ge.-5) then
|
|
if(indext.eq.1.and.indexn.eq.1)
|
|
* write(29,625)
|
|
write(29,626) indext,indexn,temp(1),dens(1),elec(1),
|
|
* float(nlin0)*1.e-3,
|
|
* (xli(i),i=1,3),dtim
|
|
625 format(' it ir t rho elec',6x,
|
|
* ' atomic molec1 molec2 molec3 time'/)
|
|
626 format(2i4,f9.2,1p2e10.2,2x,0pf8.1,2x,3f8.1,2x,f8.2)
|
|
else
|
|
alam0=alam0s
|
|
if(alam0s.eq.0.) alam0=5.e7/temp(1)/10.
|
|
if(alam0s.lt.0.) alam0=-5.e7/temp(1)/alam0s
|
|
alast=alasts
|
|
if(alasts.eq.0.) alast=5.e7/temp(1)*20.
|
|
if(alasts.lt.0.) alast=-5.e7/temp(1)*alasts
|
|
if(alast.gt.1.e5) alast=1.e5
|
|
write(29,629) temp(1),elec(1),dens(1),
|
|
* alam0,alast
|
|
end if
|
|
629 format(1p3e11.3,0pf9.3,0pf12.3)
|
|
c
|
|
c ------------------------------------------------
|
|
c interpolate and store previously computed table
|
|
c ------------------------------------------------
|
|
c
|
|
nfr=ipfreq
|
|
nfrtab(indext,indexn)=ipfreq
|
|
write(*,*) 'indext,indexn,nfreq',indext,indexn,ipfreq
|
|
write(*,*) 'nfr,nfgrid',nfr,nfgrid
|
|
c
|
|
if(inttab.eq.1) then
|
|
c call interp(wltab,absop,wlgrid,abgrd,nfr,nfgrid,2,0,0)
|
|
call intrp(wltab,absop,wlgrid,abgrd,nfr,nfgrid)
|
|
else
|
|
ij=0
|
|
ijgrd=0
|
|
30 continue
|
|
ijgrd=ijgrd+1
|
|
wlgr=0.5*(wlgrid(ijgrd)+wlgrid(ijgrd+1))
|
|
isum=0
|
|
sum=0.
|
|
40 continue
|
|
ij=ij+1
|
|
if(ij.gt.nfr) go to 50
|
|
wlt=wltab(ij)
|
|
abl=absop(ij)
|
|
if(wlt.le.wlgr) then
|
|
sum=sum+exp(abl)
|
|
isum=isum+1
|
|
go to 40
|
|
end if
|
|
if(isum.gt.0) then
|
|
abgrd(ijgrd)=log(sum/float(isum))
|
|
else
|
|
abg=abl+(absop(ij+1)-abl)/(wltab(ij+1)-wlt)*(wlgr-wlt)
|
|
abgrd(ijgrd)=abg
|
|
c write(*,*) 'grd',ij,absop(ij+1),abl,wltab(ij+1),
|
|
c * wlt,wlgr,abg,abgrd(ijgrd),ijgrd
|
|
end if
|
|
if(ijgrd.lt.nfgrid) then
|
|
ij=ij-1
|
|
go to 30
|
|
else if(ijgrd.eq.nfgrid) then
|
|
wlgr=wlgrid(nfgrid)
|
|
sum=0.
|
|
isum=0
|
|
if(ij.lt.nfr) ij=ij-1
|
|
go to 40
|
|
end if
|
|
end if
|
|
50 continue
|
|
c
|
|
do ij=1,nfgrid
|
|
absgrd(indext,indexn,ij)=real(abgrd(ij))
|
|
end do
|
|
absgrd(indext,indexn,nfgrid)=absgrd(indext,indexn,nfgrid-1)
|
|
end if
|
|
c
|
|
c ------------------------------
|
|
c prepare values for a new table
|
|
c ------------------------------
|
|
c
|
|
ipfreq=0
|
|
ndens=nden(indext)
|
|
if(indexn.lt.ndens) then
|
|
indexn=indexn+1
|
|
rho=densg(indext,indexn)
|
|
write(6,646) indext,tempg(indext),
|
|
* indexn,densg(indext,indexn)
|
|
call densit(rho,idens0)
|
|
inext=1
|
|
else
|
|
indexn=1
|
|
irelin=1
|
|
if(indext.lt.ntemp) then
|
|
indext=indext+1
|
|
temp(1)=tempg(indext)
|
|
if(temp1.le.0.) then
|
|
densg(indext,indexn)=densg0(indext)
|
|
elec(1)=elecm(indext)
|
|
end if
|
|
rho=densg(indext,indexn)
|
|
write(6,646) indext,tempg(indext),
|
|
* indexn,densg(indext,indexn)
|
|
call densit(rho,idens0)
|
|
inext=1
|
|
else
|
|
inext=0
|
|
end if
|
|
end if
|
|
if(inext.eq.1) then
|
|
rewind(19)
|
|
if(inlist.lt.0) rewind(19)
|
|
end if
|
|
c
|
|
elecgr(indext,indexn)=elec(1)
|
|
c
|
|
call abnchn(0)
|
|
id=1
|
|
do i=1,4
|
|
do j=i+1,22
|
|
call hydtab(i,j,id)
|
|
end do
|
|
end do
|
|
end if
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
subroutine ougrid(abso)
|
|
C =======================
|
|
C
|
|
C output of grid opacities
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
common/prfrgr/ipfreq,indext,indexn
|
|
common/gridf0/wlgrid(mfgrid),nfgrid
|
|
common/initab/absop(msftab),wltab(msftab),
|
|
* nfrtab(mttab,mrtab),inttab
|
|
parameter (un=1.,ten15=1.e-15,c18=2.997925e18)
|
|
DIMENSION ABSO(MFREQ)
|
|
c
|
|
d1=un/dens(1)
|
|
if (nfreq.le.3) return
|
|
c
|
|
if(iprin.lt.4) then
|
|
do ij=3,nfreq-1
|
|
abl=log(abso(ij)*d1)
|
|
ipfreq=ipfreq+1
|
|
absop(ipfreq)=abl
|
|
wltab(ipfreq)=2.997925e18/freq(ij)
|
|
end do
|
|
else
|
|
do ij=3,nfreq-1
|
|
abl=log(abso(ij)*d1)
|
|
ipfreq=ipfreq+1
|
|
write(27,637) ipfreq,c18/freq(ij),abl
|
|
absop(ipfreq)=abl
|
|
wltab(ipfreq)=2.997925e18/freq(ij)
|
|
end do
|
|
end if
|
|
637 format(i10,f14.5,0pf12.5)
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
subroutine fingrd
|
|
c =================
|
|
c
|
|
c storing the complete, interpolated, opacity table
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'SYNTHP.FOR'
|
|
real*4 absgrd(mttab,mrtab,mfgrid)
|
|
common/gridp0/tempg(mttab),densg(mttab,mrtab),elecgr(mttab,mrtab),
|
|
* densg0(mttab),temp1,ntemp,ndens,nden(mttab)
|
|
common/gridf0/wlgrid(mfgrid),nfgrid
|
|
common/fintab/absgrd
|
|
common/relabu/relabn(matom),popul0(mlevel,1)
|
|
character*(80) tabname
|
|
common/tabout/tabname,ibingr,idens
|
|
c
|
|
if(ifeos.gt.0) return
|
|
c
|
|
close(53)
|
|
iophmp=iophmi
|
|
if(ielhm.gt.0.and.relabn(1).gt.0.) iophmp=1
|
|
if(ibingr.eq.0) then
|
|
open(53,file=tabname,status='unknown')
|
|
write(53,600)
|
|
do iat=1,92
|
|
write(53,601) typat(iat),abnd(iat),abnd(iat)*relabn(iat)
|
|
end do
|
|
write(53,602) ifmol,tmolim
|
|
write(53,603) iophmp,ioph2p,iophem,iopch,iopoh,ioph2m,
|
|
* ioh2h2,ioh2he,ioh2h1,iohhe
|
|
if(idens.lt.10) then
|
|
ndens=nden(1)
|
|
write(53,611) nfgrid,ntemp,nden(1)
|
|
write(53,612) (log(tempg(i)),i=1,ntemp)
|
|
write(53,613) (log(densg(1,j)),j=1,nden(1))
|
|
write(53,614) ((log(elecgr(i,j)),j=1,nden(1)),i=1,ntemp)
|
|
do k = 1, nfgrid
|
|
write(53,615) k,wlgrid(k),2.997925e18/wlgrid(k)
|
|
do j = 1,ndens
|
|
write(53,616) (absgrd(i,j,k),i=1,ntemp)
|
|
end do
|
|
end do
|
|
else
|
|
write(53,611) nfgrid,ntemp,-nden(1)
|
|
write(53,610) (nden(i),i=1,ntemp)
|
|
write(53,612) (log(tempg(i)),i=1,ntemp)
|
|
write(53,622)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(53,623) (log(densg(i,j)),j=1,ndens)
|
|
end do
|
|
write(53,624)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(53,623) (log(elecgr(i,j)),j=1,ndens)
|
|
end do
|
|
do k = 1,nfgrid
|
|
write(53,615) k,wlgrid(k),2.997925e18/wlgrid(k)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(53,616) (absgrd(i,j,k),j=1,ndens)
|
|
end do
|
|
end do
|
|
end if
|
|
600 format('opacity table with element abundances:'/
|
|
* 'element for EOS for opacities')
|
|
601 format(' ',a4,1p2e12.3)
|
|
602 format(/'molecules - ifmol,tmolim:'/,i4,f10.1)
|
|
603 format('additional opacities'/
|
|
* ' H- H2+ He- CH OH H2- CIA: H2H2 H2He H2H HHe'/
|
|
* 6i4,4x,4i4)
|
|
610 format(30i3)
|
|
611 format(/'number of frequencies, temperatures, densities:'
|
|
* /10x,3i10)
|
|
612 format('log temperatures'/(6F11.6))
|
|
613 format('log densities'/(6F11.6))
|
|
614 format('log electron densities from EOS'/(6f11.6))
|
|
615 format(/' *** frequency # : ',i8,f15.5/1pe20.8)
|
|
616 format((1p6e14.6))
|
|
c 621 format('log temperatures')
|
|
622 format('log densities')
|
|
623 format(6f14.6)
|
|
624 format('log electron densities from EOS')
|
|
end if
|
|
do iat=1,92
|
|
write(63) typat(iat),abnd(iat),abnd(iat)*relabn(iat)
|
|
end do
|
|
write(63) ifmol,tmolim
|
|
write(63) iophmp,ioph2p,iophem,iopch,iopoh,ioph2m,
|
|
* ioh2h2,ioh2he,ioh2h1,iohhe
|
|
|
|
if(idens.lt.10) then
|
|
ndens=nden(1)
|
|
write(63) nfgrid,ntemp,nden(1)
|
|
write(63) (log(tempg(i)),i=1,ntemp)
|
|
write(63) (log(densg(1,j)),j=1,nden(1))
|
|
write(63) ((log(elecgr(i,j)),j=1,nden(1)),i=1,ntemp)
|
|
do k = 1, nfgrid
|
|
write(63) 2.997925e18/wlgrid(k)
|
|
do j = 1,ndens
|
|
write(63) (absgrd(i,j,k),i=1,ntemp)
|
|
end do
|
|
end do
|
|
else
|
|
write(63) nfgrid,ntemp,-nden(1)
|
|
write(63) (nden(i),i=1,ntemp)
|
|
write(63) (log(tempg(i)),i=1,ntemp)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(63) (log(densg(i,j)),j=1,ndens)
|
|
end do
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(63) (log(elecgr(i,j)),j=1,ndens)
|
|
end do
|
|
do k = 1,nfgrid
|
|
write(63) 2.997925e18/wlgrid(k)
|
|
do i=1,ntemp
|
|
ndens=nden(i)
|
|
write(63) (absgrd(i,j,k),j=1,ndens)
|
|
if(k.le.100) write(*,*) 'abs(1)',i,ndens,
|
|
* (absgrd(i,j,k),j=1,ndens)
|
|
end do
|
|
end do
|
|
end if
|
|
c end if
|
|
c
|
|
close(63)
|
|
return
|
|
end
|
|
c
|
|
c
|
|
c *************************************************************
|
|
c
|
|
c
|
|
subroutine abnchn(mode)
|
|
c =======================
|
|
c
|
|
c changing abundances (eliminating) species for an
|
|
c evaluating an opacity table
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
common/relabu/relabn(matom),popul0(mlevel,1)
|
|
data iread/1/
|
|
c
|
|
if(iread.eq.1) then
|
|
do ia=1,matom
|
|
relabn(ia)=1.
|
|
end do
|
|
10 continue
|
|
read(2,*,err=20,end=20) iatom,rela
|
|
relabn(iatom)=rela
|
|
write(*,*) 'ABUNDANCES CHANGED (AT.NUMBER, ABUND):',iatom,rela
|
|
go to 10
|
|
20 continue
|
|
if(relabn(1).eq.0.) then
|
|
iophmi=0
|
|
ioph2p=0
|
|
end if
|
|
iread=0
|
|
end if
|
|
c
|
|
if(mode.eq.0) then
|
|
do iat=1,natom
|
|
do ii=n0a(iat),nka(iat)
|
|
popul0(ii,1)=popul(ii,1)
|
|
end do
|
|
end do
|
|
return
|
|
end if
|
|
c
|
|
do iat=1,natom
|
|
ia=numat(iat)
|
|
do ii=n0a(iat),nka(iat)
|
|
popul(ii,1)=popul0(ii,1)*relabn(ia)
|
|
end do
|
|
end do
|
|
c
|
|
do ia=1,matom
|
|
do io=1,mion0
|
|
rrr(1,io,ia)=rrr(1,io,ia)*relabn(ia)
|
|
end do
|
|
end do
|
|
c
|
|
return
|
|
end
|
|
c
|
|
c
|
|
c *************************************************************
|
|
c
|
|
c
|
|
|
|
subroutine densit(rho,idens)
|
|
C ============================
|
|
C
|
|
C determining the state parameters for the opacity grid
|
|
C calculations
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
DIMENSION ES(MLEVEL,MLEVEL),BS(MLEVEL),POPLTE(MLEVEL)
|
|
c
|
|
id=1
|
|
dm(id)=0.
|
|
IF(IFMOL.EQ.0.OR.TEMP(ID).GT.TMOLIM)
|
|
* WMM(ID)=WMY(ID)*HMASS/YTOT(ID)
|
|
if(idens.eq.0) then
|
|
ELEC(ID)=rho
|
|
ane=elec(id)
|
|
call todens(id,temp(id),an,ane)
|
|
DENS(ID)=(an-ane)*wmm(id)
|
|
p=an*bolk*temp(id)
|
|
c WRITE(6,602) ID,TEMP(ID),DENS(ID),ELEC(ID)
|
|
else if(idens.lt.0) then
|
|
AN=rho/TEMP(ID)/BOLK
|
|
CALL ELDENS(ID,TEMP(ID),AN,ANE)
|
|
ELEC(ID)=ANE
|
|
DENS(ID)=WMM(ID)*(AN-ELEC(ID))
|
|
c WRITE(6,601) ID,TEMP(ID),DENS(ID),ELEC(ID),ane0,an
|
|
else if(idens.eq.1) then
|
|
DENS(ID)=RHO
|
|
CALL RHONEN(ID,TEMP(ID),RHO,AN,ANE)
|
|
ELEC(ID)=ANE
|
|
DENS(ID)=RHO
|
|
rho0=WMM(ID)*(AN-ANE)
|
|
c WRITE(6,601) IDens,TEMP(ID),DENS(ID),ane,rho0,an
|
|
else if(idens.eq.2) then
|
|
CALL RHONEN(ID,TEMP(ID),RHO,AN,ANE)
|
|
DENS(ID)=RHO
|
|
ANE=ELEC(ID)
|
|
rho0=WMM(ID)*(AN-ANE)
|
|
c WRITE(6,601) idens,TEMP(ID),DENS(ID),ane,rho0,an
|
|
end if
|
|
c 601 FORMAT(' **densit** t,rho,ne,rho0,an',I3,0PF10.1,1P5D11.3)
|
|
c 602 FORMAT(' **densit** t,rho,ne',I3,0PF10.1,1P5D11.3)
|
|
|
|
|
|
CALL INIMOD
|
|
c
|
|
CALL WNSTOR(ID)
|
|
CALL SABOLF(ID)
|
|
CALL RATMAT(ID,ES,BS)
|
|
CALL LEVSOL(ES,BS,POPLTE,NLEVEL)
|
|
DO J=1,NLEVEL
|
|
POPUL(J,ID)=POPLTE(J)
|
|
END DO
|
|
c
|
|
return
|
|
end
|
|
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
SUBROUTINE TODENS(ID,T,AN,ANE)
|
|
C ==============================
|
|
C
|
|
C determines AN (and ANP, AHTOT, and AHMOL) from T and ANE
|
|
C
|
|
C Input parameters:
|
|
C T - temperature
|
|
C ANE - electron number density
|
|
C
|
|
C Output:
|
|
C AN - total particle density
|
|
C ANP - proton number density
|
|
C AHTOT - total hydrogen number density
|
|
C AHMOL - relative number of hydrogen molecules with respect to the
|
|
C total number of hydrogens
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
common/hydmol/anhmi,ahmol
|
|
parameter (un=1.d0,two=2.d0,half=0.5d0)
|
|
C
|
|
QM=0.
|
|
Q2=0.
|
|
QP=0.
|
|
Q=0.
|
|
DQN=0.
|
|
TK=BOLK*T
|
|
THET=5.0404D3/T
|
|
C
|
|
C Coefficients entering ionization (dissociation) balance of:
|
|
C atomic hydrogen - QH;
|
|
C negative hydrogen ion - QM
|
|
C hydrogen molecule - QP
|
|
C ion of hydrogen molecule - Q2
|
|
C
|
|
QM=1.0353D-16/T/SQRT(T)*EXP(8762.9/T)
|
|
QH=EXP((15.38287+1.5*LOG10(T)-13.595*THET)*2.30258509299405)
|
|
c
|
|
if(t.gt.16000.) then
|
|
ih2=0
|
|
ih2p=0
|
|
else
|
|
QP=TK*EXP((-11.206998+THET*(2.7942767+THET*
|
|
* (0.079196803-0.024790744*THET)))*2.30258509299405)
|
|
Q2=TK*EXP((-12.533505+THET*(4.9251644+THET*
|
|
* (-0.056191273+0.0032687661*THET)))*2.30258509299405)
|
|
ih2=1
|
|
end if
|
|
|
|
C
|
|
C procedure STATE determines Q (and DQN) - the total charge (and its
|
|
C derivative wrt temperature) due to ionization of all atoms which
|
|
C are considered (both explicit and non-explicit), by solving the set
|
|
C of Saha equations for the current values of T and ANE
|
|
C
|
|
CALL STATE(ID,T,ANE,Q)
|
|
C
|
|
C Auxiliary parameters for evaluating the elements of matrix of
|
|
C linearized equations.
|
|
C Note that complexity of the matrix depends on whether the hydrogen
|
|
C molecule is taken into account
|
|
C Treatment of hydrogen ionization-dissociation is based on
|
|
C Mihalas, in Methods in Comput. Phys. 7, p.10 (1967)
|
|
C
|
|
G2=QH/ANE
|
|
G3=0.
|
|
G4=0.
|
|
G5=0.
|
|
D=0.
|
|
E=0.
|
|
G3=QM*ANE
|
|
A=UN+G2+G3
|
|
D=G2-G3
|
|
IF(IT.LE.1) THEN
|
|
IF(IH2.EQ.0) THEN
|
|
F1=UN/A
|
|
FE=D/A+Q
|
|
ELSE
|
|
E=G2*QP/Q2
|
|
B=TWO*(UN+E)
|
|
GG=ANE*Q2
|
|
C1=B*(GG*B+A*D)-E*A*A
|
|
C2=A*(TWO*E+B*Q)-D*B
|
|
C3=-E-B*Q
|
|
F1=(SQRT(C2*C2-4.*C1*C3)-C2)*HALF/C1
|
|
FE=F1*D+E*(UN-A*F1)/B+Q
|
|
END IF
|
|
AH=ANE/FE
|
|
ANH=AH*F1
|
|
END IF
|
|
AE=ANH/ANE
|
|
GG=AE*QP
|
|
E=ANH*Q2
|
|
B=ANH*QM
|
|
C
|
|
c S(1)=AN-ANE-YTOT(ID)*AH
|
|
c S(2)=ANH*(D+GG)+Q*AH-ANE
|
|
c S(3)=AH-ANH*(A+TWO*(E+GG))
|
|
c
|
|
hhn=A+TWO*(E+GG)
|
|
anh=ane/(d+gg+q*hhn)
|
|
ah=anh*hhn
|
|
an=ane+ytot(id)*ah
|
|
C
|
|
AHTOT=AH
|
|
AHMOL=TWO*ANH*(ANH*Q2+ANH/ANE*QP)/AH
|
|
ANP=ANH/ANE*QH
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ***********************************************************************
|
|
C
|
|
|
|
subroutine rhonen(id,t,rho,an,ane)
|
|
c ==================================
|
|
c
|
|
c iterative determination of N and Ne from given T and RHO
|
|
c
|
|
C
|
|
C Input: T - temperature
|
|
C RHO - mass density
|
|
C Output: AN - total particle density
|
|
C ANE - elctron density
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
common/nerela/anerel
|
|
c
|
|
it=0
|
|
if(id.eq.1.and.anerel.eq.0.) then
|
|
anerel=0.5
|
|
if(t.lt.9000.) anerel=0.4
|
|
if(t.lt.8000.) anerel=0.1
|
|
if(t.lt.7000.) anerel=0.01
|
|
if(t.lt.6000.) anerel=0.001
|
|
if(t.lt.5500.) anerel=0.0001
|
|
c if(t.lt.5000.) anerel=1.e-5
|
|
c if(t.lt.4000.) anerel=1.e-6
|
|
end if
|
|
10 continue
|
|
it=it+1
|
|
an=rho/wmm(id)/(1.d0-anerel)
|
|
ane0=anerel*an
|
|
call eldens(id,t,an,ane)
|
|
anerel=ane/an
|
|
write(6,602) it,id,t,rho,an,ane,wmm(id),anerel
|
|
602 format(/' **** rhonen it,id,t,r,N,Ne,wmm,ner',2i4,f7.0,1p5e11.4)
|
|
if(abs((ane-ane0)/ane0).lt.1.e-5) go to 20
|
|
if(it.lt.50) go to 10
|
|
c write(6,601) an,ane,ane0
|
|
c 601 format(/' slow convergence of RHONEN - N,Ne,Nep=',1p3e11.3)
|
|
20 continue
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
|
|
SUBROUTINE ELDENS(ID,T,AN,ANE)
|
|
C ==============================
|
|
C
|
|
C Evaluation of the electron density and the total hydrogen
|
|
C number density for a given total particle number density
|
|
C and temperature;
|
|
C by solving the set of Saha equations, charge conservation and
|
|
C particle conservation equations (by a Newton-Raphson method)
|
|
C
|
|
C Input parameters:
|
|
C T - temperature
|
|
C AN - total particle number density
|
|
C
|
|
C Output:
|
|
C ANE - electron density
|
|
C ANP - proton number density
|
|
C AHTOT - total hydrogen number density
|
|
C AHMOL - relativer number of hydrogen molecules with respect to the
|
|
C total number of hydrogens
|
|
C ENERG - part of the internal energy: excitation and ionization
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
common/hydmol/anhmi,ahmol
|
|
common/hydato/ah,anh,anp
|
|
common/nerela/anerel
|
|
parameter (un=1.d0,two=2.d0,half=0.5d0)
|
|
DIMENSION R(3,3),S(3),P(3)
|
|
C
|
|
TK=BOLK*T
|
|
if(ifmol.gt.0.and.t.lt.tmolim) then
|
|
aein=an*anerel
|
|
call moleq(id,t,an,aein,ane,0)
|
|
anerel=ane/an
|
|
return
|
|
end if
|
|
c
|
|
QM=0.
|
|
Q2=0.
|
|
QP=0.
|
|
Q=0.
|
|
DQN=0.
|
|
TK=BOLK*T
|
|
THET=5.0404D3/T
|
|
C
|
|
C Coefficients entering ionization (dissociation) balance of:
|
|
C atomic hydrogen - QH;
|
|
C negative hydrogen ion - QM
|
|
C hydrogen molecule - Q2
|
|
C ion of hydrogen molecule - QP
|
|
C
|
|
IF(IATREF.EQ.IATH) THEN
|
|
QM=1.0353D-16/T/SQRT(T)*EXP(8762.9/T)
|
|
QH0=EXP((15.38287+1.5*LOG10(T)-13.595*THET)*2.30258509299405)
|
|
c
|
|
if(t.gt.16000.) then
|
|
ih2=0
|
|
else
|
|
ih2=1
|
|
QP=TK*EXP((-11.206998+THET*(2.7942767+THET*
|
|
* (0.079196803-0.024790744*THET)))*2.30258509299405)
|
|
Q2=TK*EXP((-12.533505+THET*(4.9251644+THET*
|
|
* (-0.056191273+0.0032687661*THET)))*2.30258509299405)
|
|
end if
|
|
END IF
|
|
C
|
|
C Initial estimate of the electron density
|
|
C
|
|
if(anerel.le.0.) then
|
|
if(t.gt.1.e4) then
|
|
anerel=0.5
|
|
else
|
|
if(elec(id).gt.0..and.dens(id).gt.0.) then
|
|
anerel=elec(id)/(elec(id)+dens(id)/wmm(id))
|
|
else
|
|
anerel=0.1
|
|
end if
|
|
end if
|
|
end if
|
|
c
|
|
ANE=AN*ANEREL
|
|
IT=0
|
|
C
|
|
C Basic Newton-Raphson loop - solution of the non-linear set
|
|
C for the unknown vector P, consistiong of AH, ANH (neutral
|
|
C hydrogen number density) and ANE.
|
|
C
|
|
10 IT=IT+1
|
|
C
|
|
C procedure STATE determines Q (and DQN) - the total charge (and its
|
|
C derivative wrt temperature) due to ionization of all atoms which
|
|
C are considered (both explicit and non-explicit), by solving the set
|
|
C of Saha equations for the current values of T and ANE
|
|
C
|
|
CALL STATE(ID,T,ANE,Q)
|
|
QH=QH0*2./PFSTD(1,1)
|
|
C
|
|
C Auxiliary parameters for evaluating the elements of matrix of
|
|
C linearized equations.
|
|
C Note that complexity of the matrix depends on whether the hydrogen
|
|
C molecule is taken into account
|
|
C Treatment of hydrogen ionization-dissociation is based on
|
|
C Mihalas, in Methods in Comput. Phys. 7, p.10 (1967)
|
|
C
|
|
IF(IATREF.EQ.IATH) THEN
|
|
G2=QH/ANE
|
|
G3=0.
|
|
G4=0.
|
|
G5=0.
|
|
D=0.
|
|
E=0.
|
|
G3=QM*ANE
|
|
A=UN+G2+G3
|
|
D=G2-G3
|
|
IF(IT.LE.1) THEN
|
|
IF(IH2.EQ.0) THEN
|
|
F1=UN/A
|
|
FE=D/A+Q
|
|
ELSE
|
|
E=G2*QP/Q2
|
|
B=TWO*(UN+E)
|
|
GG=ANE*Q2
|
|
C1=B*(GG*B+A*D)-E*A*A
|
|
C2=A*(TWO*E+B*Q)-D*B
|
|
C3=-E-B*Q
|
|
F1=(SQRT(C2*C2-4.*C1*C3)-C2)*HALF/C1
|
|
FE=F1*D+E*(UN-A*F1)/B+Q
|
|
END IF
|
|
AH=ANE/FE
|
|
ANH=AH*F1
|
|
END IF
|
|
AE=ANH/ANE
|
|
GG=AE*QP
|
|
E=ANH*Q2
|
|
B=ANH*QM
|
|
C
|
|
C Matrix of the linearized system R, and the rhs vector S
|
|
C
|
|
R(1,1)=YTOT(ID)
|
|
c R(1,2)=0.
|
|
r(1,2)=-two*(anh*q2+gg)
|
|
R(1,3)=UN
|
|
R(2,1)=-Q
|
|
R(2,2)=-D-TWO*GG
|
|
R(2,3)=UN+B+AE*(G2+GG)-DQN*AH
|
|
R(3,1)=-UN
|
|
R(3,2)=A+4.*(anh*q2+GG)
|
|
R(3,3)=B-AE*(G2+TWO*GG)
|
|
S(1)=AN-ANE-YTOT(ID)*AH+anh*(anh*q2+gg)
|
|
S(2)=ANH*(D+GG)+Q*AH-ANE
|
|
S(3)=AH-ANH*(A+TWO*(anh*q2+GG))
|
|
C
|
|
C Solution of the linearized equations for the correction vector P
|
|
C
|
|
CALL LINEQS(R,S,P,3,3)
|
|
C
|
|
C New values of AH, ANH, and ANE
|
|
C
|
|
AH=AH+P(1)
|
|
ANH=ANH+P(2)
|
|
DELNE=P(3)
|
|
ANE=ANE+DELNE
|
|
C
|
|
C hydrogen is not the reference atom
|
|
C
|
|
ELSE
|
|
C
|
|
C Matrix of the linearized system R, and the rhs vector S
|
|
C
|
|
IF(IT.EQ.1) THEN
|
|
ANE=AN*HALF
|
|
AH=ANE/YTOT(ID)
|
|
END IF
|
|
R(1,1)=YTOT(ID)
|
|
R(1,2)=UN
|
|
R(2,1)=-Q-QREF
|
|
R(2,2)=UN-(DQN+DQNR)*AH
|
|
S(1)=AN-ANE-YTOT(ID)*AH
|
|
S(2)=(Q+QREF)*AH-ANE
|
|
C
|
|
C Solution of the linearized equations for the correction vector P
|
|
C
|
|
CALL LINEQS(R,S,P,2,3)
|
|
AH=AH+P(1)
|
|
DELNE=P(2)
|
|
ANE=ANE+DELNE
|
|
END IF
|
|
C
|
|
C Convergence criterion
|
|
C
|
|
IF(ANE.LE.0.) ANE=1.D-7*AN
|
|
IF(ABS(DELNE/ANE).GT.1.D-6.AND.IT.LE.20) GO TO 10
|
|
C
|
|
C ANEREL is the exact ratio betwen electron density and total
|
|
C particle density, which is going to be used in the subseguent
|
|
C call of ELDENS
|
|
C
|
|
ANEREL=ANE/AN
|
|
AHTOT=AH
|
|
IF(IATREF.EQ.IATH) THEN
|
|
c AHMOL=TWO*ANH*(ANH*Q2+ANH/ANE*QP)/AH
|
|
AHMOL=ANH*ANH*Q2
|
|
ANP=ANH/ANE*QH
|
|
ANHMI=ANH*ANE*QM
|
|
anhn=anh+anp+anhmi+2.*ahmol
|
|
wmm(id)=wmy(id)/(ytot(id)-ahmol/anhn)*hmass
|
|
END IF
|
|
C
|
|
RETURN
|
|
END
|
|
C
|
|
|
|
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
SUBROUTINE TIMING(MOD,ITER)
|
|
C ===========================
|
|
C
|
|
C Timing procedure (call machine dependent routine!!)
|
|
C
|
|
CHARACTER ROUT*6
|
|
dimension dummy(2)
|
|
common/timeta/dtim
|
|
DATA T0/0./
|
|
SAVE T0
|
|
C
|
|
TIME=etime(dummy)
|
|
DT=TIME-T0
|
|
T0=TIME
|
|
IP=ITER
|
|
IF(MOD.EQ.1) THEN
|
|
ROUT=' TABLE'
|
|
ELSE IF(MOD.EQ.2) THEN
|
|
ROUT=' FINAL'
|
|
ENDIF
|
|
WRITE(69,600) IP,TIME,DT,ROUT
|
|
dtim=dt
|
|
600 FORMAT(I6,2F11.2,2X,A6)
|
|
RETURN
|
|
END
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
subroutine eospri
|
|
c =================
|
|
c
|
|
c Outprint of Equation of State parameters
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
common/moltst/pfmol(600,mdepth),anmol(600,mdepth),
|
|
* pfato(100,mdepth),anato(100,mdepth),
|
|
* pfion(100,mdepth),anion(100,mdepth)
|
|
common/hydmol/anhmi,ahmol
|
|
common/hydato/ah,anh,anp
|
|
common/ioniz2/anion2(30,mdepth)
|
|
dimension nelemx(38)
|
|
dimension amh2(5),xml(20),insm(20)
|
|
data nelemx/ 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
|
* 11,12,13,14,15,16,17,19,20,
|
|
* 21,22,23,24,25,26,28,29,32,
|
|
* 35,37,38,39,40,41,53,56,57,58,60/
|
|
data amh2/1.13390E+01,-2.97499E+00,4.10842E-02,-3.58550E-03,
|
|
* 1.31844E-04/
|
|
data insm/2,3,4,5,6,7,8,12,17,25,29,30,32,34,122,126,134,
|
|
* 179,198,214/
|
|
data init/1/
|
|
c
|
|
c id=idstd
|
|
istp=1
|
|
if(ifeos.lt.0) istp=-ifeos
|
|
c
|
|
do id=1,nd,istp
|
|
t=temp(id)
|
|
ane=elec(id)
|
|
rho=dens(id)
|
|
ann = dens(id)/wmm(id)+elec(id)
|
|
c
|
|
if(ifmol.eq.0.or.t.gt.tmolim) then
|
|
it=0
|
|
10 continue
|
|
ann0=ann
|
|
it=it+1
|
|
call eldens(id,t,ann,ane)
|
|
anmol(1,id)=anhmi
|
|
anmol(2,id)=ahmol
|
|
anato(1,id)=anh
|
|
anion(1,id)=anp
|
|
hpop=dens(id)/wmy(id)/hmass
|
|
do i=1,nmetal
|
|
j=nelemx(i)
|
|
anato(j,id)=anato(j,id)*hpop
|
|
anion(j,id)=anion(j,id)*hpop
|
|
if(j.ge.2.and.j.le.30) anion2(j,id)=anion2(j,id)*hpop
|
|
end do
|
|
anato(1,id)=anh
|
|
anion(1,id)=anp
|
|
c wmm(id)=(wmy(id)+2.*anmol(2,id)/hpop)/ytot(id)*hmass
|
|
wmm(id)=wmy(id)/(ytot(id)-anmol(2,id)/hpop)*hmass
|
|
ann=dens(id)/wmm(id)+ane
|
|
if((ann-ann0)/ann0.gt.1.e-5) go to 10
|
|
end if
|
|
c
|
|
nmetal=38
|
|
write(*,*) ''
|
|
write(*,*) 'atomic number densities and partition functions'
|
|
write(*,*) ''
|
|
atot=0.
|
|
do i=1,nmetal
|
|
j=nelemx(i)
|
|
if(j.le.28)
|
|
* write(6,621) j,typat(j),anato(j,id),pfato(j,id)
|
|
atot=atot+anato(j,id)
|
|
end do
|
|
write(*,*) ''
|
|
write(*,*) 'ionic number densities and partition functions'
|
|
write(*,*) ''
|
|
ctot=0.
|
|
do i=1,nmetal
|
|
j=nelemx(i)
|
|
if(j.le.28)
|
|
* write(6,622) j,typat(j),anion(j,id),pfion(j,id)
|
|
atot=atot+anion(j,id)
|
|
ctot=ctot+anion(j,id)
|
|
end do
|
|
621 format(i4,a3,3x,1p2e12.4)
|
|
622 format(i4,a3,'+',2x,1p2e12.4)
|
|
c
|
|
if(ifmol.gt.0.and.t.le.tmolim) then
|
|
write(6,600)
|
|
do i=1,nmolec
|
|
if(anmol(i,id).gt.ann*1.e-15)
|
|
* write(6,601) i, cmol(i), anmol(i,id), pfmol(i,id)
|
|
atot=atot+anmol(i,id)
|
|
end do
|
|
end if
|
|
600 format(/ 'Molecular number densities and partition functions'/)
|
|
601 format(i4,1x,A8,1x,1pe12.4,1x,e12.4)
|
|
c
|
|
ahmi=1.0353e-16/t/sqrt(t)*exp(8762.9/t)*
|
|
* anato(1,id)*ane
|
|
c
|
|
c original B&C H2+
|
|
c
|
|
APLOGJ=amh2(5)
|
|
te=5040./t
|
|
DO K=1,4
|
|
KM5=5-K
|
|
APLOGJ=APLOGJ*TE + amh2(KM5)
|
|
END DO
|
|
tk=1.38054e-16*t
|
|
ph2=-aplogj+log10(anato(1,id)*anion(1,id))+2.*log10(tk)
|
|
anh2b=(10.**ph2)/tk
|
|
|
|
htot=anato(1,id)+anion(1,id)+anmol(1,id)+
|
|
* 2.*(anmol(2,id)+anmol(3,id))+anmol(4,id)+anmol(5,id)+
|
|
* anmol(12,id)+2.*anmol(13,id)+anmol(14,id)+
|
|
* anmol(15,id)+
|
|
* anmol(16,id)+anmol(17,id)+anmol(32,id)+anmol(34,id)+
|
|
* 4.*anmol(37,id)+2.*anmol(38,id)+3.*anmol(39,id)+
|
|
* 2.*anmol(40,id)+3.*anmol(41,id)+2.*anmol(57,id)+
|
|
* anmol(118,id)+anmol(133,id)+
|
|
* 2.*anmol(140,id)+3.*anmol(141,id)+4.*anmol(142,id)+
|
|
* anmol(148,id)+2.*anmol(149,id)+anmol(222,id)
|
|
ahe= (anato(2,id)+anion(2,id)+anion2(2,id))/htot
|
|
aca= (anato(6,id)+anion(6,id)+anion2(6,id))/htot
|
|
acm= (anmol(5,id)+anmol(6,id)+
|
|
* anmol(7,id)+2.*(anmol(8,id)+2.*anmol(13,id))+
|
|
* anmol(14,id)+2.*anmol(15,id)+anmol(20,id)+
|
|
* anmol(37,id)+anmol(38,id)+anmol(39,id)+
|
|
* anmol(44,id)+anmol(118,id)+anmol(119,id)+
|
|
* anmol(437,id)+anmol(453,id)
|
|
* )/htot
|
|
ana= (anato(7,id)+anion(7,id)+anion2(7,id))/htot
|
|
anm= (anmol(7,id)+2.*anmol(9,id)+anmol(11,id)+
|
|
* anmol(12,id)+anmol(14,id)+anmol(23,id)+
|
|
* anmol(24,id)+anmol(40,id)+anmol(41,id)+
|
|
* anmol(109,id)+anmol(152,id)+anmol(347,id)+
|
|
* anmol(438,id)+anmol(452,id)+anmol(454,id)
|
|
* )/htot
|
|
aoa= (anato(8,id)+anion(8,id)+anion2(8,id))/htot
|
|
aom= (anmol(3,id)+anmol(4,id)+
|
|
* anmol(6,id)+2.*anmol(10,id)+anmol(11,id)+anmol(25,id)+
|
|
* anmol(26,id)+anmol(29,id)+anmol(30,id)+anmol(31,id)+
|
|
* anmol(35,id)+2.*anmol(44,id)+anmol(49,id)+anmol(51,id)+
|
|
* anmol(54,id)+2.*anmol(56,id)+anmol(65,id)+
|
|
* 2.*anmol(66,id)+anmol(84,id)+anmol(109,id)+
|
|
* anmol(113,id)+anmol(115,id)+anmol(118,id)+
|
|
* anmol(119,id)+anmol(126,id)+anmol(134,id)+
|
|
* anmol(153,id)+anmol(179,id)+anmol(184,id)+
|
|
* 2.*anmol(185,id)+anmol(200,id)+anmol(216,id)+
|
|
* anmol(221,id)+2.*anmol(247,id)+anmol(292,id)+
|
|
* anmol(439,id)+anmol(453,id)+anmol(454,id)
|
|
* )/htot
|
|
ac=aca+acm
|
|
an=ana+anm
|
|
ao=aoa+aom
|
|
write(6,623) t,dens(id),ann,atot+ane,ane,ctot-anmol(1,id),
|
|
* anato(1,id),anion(1,id),
|
|
* anmol(1,id),anmol(2,id),
|
|
* anmol(312,id),anmol(426,id),anh2b,
|
|
* htot,
|
|
* anmol(1,id),ahmi,anmol(1,id)/ahmi,
|
|
* anato(6,id),anion(6,id),anmol(6,id),anmol(37,id),
|
|
* anato(7,id),anion(7,id),anmol(9,id),anmol(41,id),
|
|
* anato(8,id),anion(8,id),anmol(3,id),anmol(6,id),
|
|
* ahe,ahe/abndd(2,id),
|
|
* ac,ac/abndd(6,id),
|
|
* an,an/abndd(7,id),
|
|
* ao,ao/abndd(8,id)
|
|
act=ac*htot
|
|
ant=an*htot
|
|
aot=ao*htot
|
|
623 format(/'EOS useful quantities - summary'//
|
|
* 'T,rho ',f13.2,1pe13.5/
|
|
* 'N ',1p2e13.5/
|
|
* 'n_e ',1p2e13.5/
|
|
* 'H,H+,H-,H2 ',1p4e13.5/
|
|
* 'H2-,H2+,H2+b',1p3e13.5/
|
|
* 'Htot ',1pe13.5/
|
|
* 'H- ',1p3e13.5/
|
|
* 'C,C+,CO,CH4 ',1p4e13.5/
|
|
* 'N,N+,N2,NH3 ',1p4e13.5/
|
|
* 'O,O+,H2O,CO ',1p4e13.5/
|
|
* 'He/H ',1p2e13.5/
|
|
* 'C/H ',1p2e13.5/
|
|
* 'N/H ',1p2e13.5/
|
|
* 'O/H ',1p2e13.5/)
|
|
c
|
|
if(init.eq.1) then
|
|
write(52,625)
|
|
write(51,626)
|
|
write(53,653) (cmol(insm(i)),i=1,20)
|
|
write(54,654) (cmol(insm(i)),i=1,20)
|
|
c
|
|
625 format(' T rho w_mol Ne/Ntot N(Htot) '
|
|
* 'n(H) n(H2)',6x,
|
|
* 'a(He) a(C) a(N) a(O) molfr(C) molfr(N) molfr(O)'/)
|
|
c * 'a(He) a(C) a(N) a(O) n(C) n(CO) n(CH4)',5x,
|
|
c * 'n(N) n(N2) n(NH3) n(O) n(H2O) n(CO)'/)
|
|
init=0
|
|
end if
|
|
c
|
|
c write(51,624) t,dens(id),wmm(id)/hmass,ane/ann,
|
|
c * htot,anato(1,id)/htot,2.*anmol(2,id)/htot,
|
|
c * ahe/abndd(2,id),ac/abndd(6,id),an/abndd(7,id),ao/abndd(8,id),
|
|
c * anato(6,id)/act,anmol(6,id)/act,anmol(37,id)/act,
|
|
c * anato(7,id)/ant,2.*anmol(9,id)/ant,anmol(41,id)/ant,
|
|
c * anato(8,id)/aot,anmol(3,id)/aot,anmol(6,id)/aot
|
|
write(52,624) t,dens(id),wmm(id)/hmass,ane/ann,
|
|
* htot,anato(1,id),2.*anmol(2,id),
|
|
* ahe/abndd(2,id),ac/abndd(6,id),an/abndd(7,id),ao/abndd(8,id),
|
|
* acm/ac,anm/an,aom/ao
|
|
c * anato(6,id),anmol(6,id),anmol(37,id),
|
|
c * anato(7,id),anmol(9,id),anmol(41,id),
|
|
c * anato(8,id),anmol(3,id),anmol(6,id)
|
|
624 format(f8.1,1pe9.2,0pf8.5,1x,1p4e9.2,1x,0p4f8.5,1x,1p3e9.2,1x,
|
|
* 3e9.2,1x,3e9.2)
|
|
c
|
|
write(51,627) t,dens(id),wmm(id)/hmass,ann,ane,htot,
|
|
* anato(1,id),anion(1,id),anmol(1,id),anmol(2,id),anmol(312,id),
|
|
* anmol(426,id)
|
|
c * anmol(426,id),anh2b
|
|
626 format(' T rho w_mol N Ne N(Htot) ',
|
|
* 'N(H) N(H+) N(H-) N(H2) N(H2-) N(H2+)'/)
|
|
c * 'N(H) N(H+) N(H-) N(H2) N(H2-) N(H2+) N(H2+b)'/)
|
|
627 format(f8.1,1pe9.2,0pf8.5,1x,1p10e9.2)
|
|
c
|
|
if(ifmol.gt.0.and.t.le.tmolim) then
|
|
do i=1,20
|
|
im=insm(i)
|
|
xml(i)=log10(anmol(im,id)/pfmol(im,id))
|
|
end do
|
|
write(53,655) t,log10(dens(id)),(xml(i),i=1,20)
|
|
do i=1,20
|
|
im=insm(i)
|
|
xml(i)=log10(anmol(im,id)/htot)
|
|
c xml(i)=log10(anmol(im,id))
|
|
end do
|
|
write(54,655) t,log10(dens(id)),(xml(i),i=1,20)
|
|
end if
|
|
c
|
|
653 format(' log10(N/U)'/' T rho ',20a6/)
|
|
654 format(' log10[N/n(H)]'/' T rho ',20a6/)
|
|
655 format(2f6.1,1x,20f6.1)
|
|
c
|
|
end do
|
|
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
subroutine cia_h2h2(t,ah2,ff,opac)
|
|
c ===================--=============
|
|
c
|
|
c CIA H2-H2 opacity
|
|
c data from Borysow A., Jorgensen U.G., Fu Y. 2001, JQSRT 68, 235
|
|
c
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
parameter (nlines=1000)
|
|
dimension freq(nlines),temp(7),alpha(nlines,7)
|
|
parameter (amagat=2.6867774d+19,fac=1./amagat**2)
|
|
data temp / 1000. , 2000. , 3000. , 4000. , 5000. , 6000. ,
|
|
* 7000. /
|
|
data ntemp /7/
|
|
data ifirst /0/
|
|
PARAMETER (CAS=2.997925D10)
|
|
c input frequency in Hz but needed wave numbers in cm^-1
|
|
f=ff/cas
|
|
c read in CIA tables if this is the first call
|
|
if (ifirst.eq.0) then
|
|
write(*,'(a)') 'Reading in H2-H2 CIA opacity tables...'
|
|
open(10,file="./data/CIA_H2H2.dat",status='old')
|
|
do i=1,3
|
|
read (10,*)
|
|
enddo
|
|
do i=1,nlines
|
|
read (10,*) freq(i),(alpha(i,j),j=1,ntemp)
|
|
enddo
|
|
close(10)
|
|
|
|
c take logarithm of tables prior to doing linear interpolations
|
|
|
|
do i=1,nlines
|
|
do j=1,ntemp
|
|
alpha(i,j)=log(alpha(i,j))
|
|
enddo
|
|
enddo
|
|
|
|
ifirst=1
|
|
endif
|
|
|
|
c locate position in temperature array
|
|
call locate(temp,ntemp,t,j,ntemp)
|
|
|
|
if (j.eq.0) then
|
|
write(*,*)
|
|
write(*,'(a,f6.0,a)')
|
|
* 'Warning: requested temperature is below',temp(1),' K'
|
|
write(*,'(a)') 'CIA H2-H2 opacity set to 0'
|
|
write(*,*)
|
|
opac=0.
|
|
return
|
|
endif
|
|
|
|
c locate position in frequency array
|
|
call locate(freq,nlines,f,i,nlines)
|
|
|
|
c linearly interpolate in frequency and temperature
|
|
|
|
if (j.eq.ntemp) then
|
|
c hold values constant if off high temperature end of table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
alp=(1.-tt)*y1 + tt*y2
|
|
else if (i.eq.0 .or. i.eq.nlines) then
|
|
c set values to a very small number if off frequency table
|
|
alp=-50.
|
|
else
|
|
c interpolate linearly within table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
y3=alpha(i+1,j+1)
|
|
y4=alpha(i,j+1)
|
|
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
uu=(t-temp(j))/(temp(j+1)-temp(j))
|
|
|
|
alp=(1.-tt)*(1.-uu)*y1 + tt*(1.-uu)*y2 + tt*uu*y3 +
|
|
* (1.-tt)*uu*y4
|
|
endif
|
|
|
|
alp=exp(alp)
|
|
|
|
c final opacity
|
|
|
|
opac=fac*ah2*ah2*alp
|
|
c
|
|
return
|
|
end
|
|
|
|
C
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
SUBROUTINE locate(xx,n,x,j,nxdim)
|
|
c =================================
|
|
c
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
dimension xx(nxdim)
|
|
c
|
|
jl=0
|
|
ju=n+1
|
|
10 if(ju-jl.gt.1)then
|
|
jm=(ju+jl)/2
|
|
if((xx(n).ge.xx(1)).eqv.(x.ge.xx(jm)))then
|
|
jl=jm
|
|
else
|
|
ju=jm
|
|
endif
|
|
goto 10
|
|
endif
|
|
if(x.eq.xx(1)) then
|
|
j=1
|
|
else if(x.eq.xx(n)) then
|
|
j=n-1
|
|
else
|
|
j=jl
|
|
endif
|
|
return
|
|
END
|
|
|
|
C
|
|
C
|
|
C ********************************************************************
|
|
C
|
|
C
|
|
|
|
subroutine cia_h2he(t,ah2,ahe,ff,opac)
|
|
c ======================================
|
|
c
|
|
c CIA H2-He opacity
|
|
c data from Jorgensen U.G., Hammer D., Borysow A., Falkesgaard J., 2000,
|
|
c Astronomy & Astrophysics 361, 283
|
|
c
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
parameter (nlines=242)
|
|
dimension freq(nlines),temp(7),alpha(nlines,7)
|
|
parameter (amagat=2.6867774d+19,fac=1./amagat**2)
|
|
data temp / 1000. , 2000. , 3000. , 4000. , 5000. , 6000. ,
|
|
* 7000. /
|
|
data ntemp /7/
|
|
data ifirst /0/
|
|
PARAMETER (CAS=2.997925D10)
|
|
c input frequency in Hz but needed wave numbers in cm^-1
|
|
f=ff/cas
|
|
c read in CIA tables if this is the first call
|
|
if (ifirst.eq.0) then
|
|
write(*,'(a)') 'Reading in H2-He CIA opacity tables...'
|
|
open(10,file="./data/CIA_H2He.dat",status='old')
|
|
do i=1,3
|
|
read (10,*)
|
|
enddo
|
|
do i=1,nlines
|
|
read (10,*) freq(i),(alpha(i,j),j=1,ntemp)
|
|
enddo
|
|
close(10)
|
|
|
|
c take logarithm of tables prior to doing linear interpolations
|
|
|
|
do i=1,nlines
|
|
do j=1,ntemp
|
|
alpha(i,j)=log(alpha(i,j))
|
|
enddo
|
|
enddo
|
|
|
|
ifirst=1
|
|
endif
|
|
|
|
c locate position in temperature array
|
|
call locate(temp,ntemp,t,j,ntemp)
|
|
|
|
if (j.eq.0) then
|
|
write(*,*)
|
|
write(*,'(a,f6.0,a)')
|
|
* 'Warning: requested temperature is below',temp(1),' K'
|
|
write(*,'(a)') 'CIA H2-He opacity set to 0'
|
|
write(*,*)
|
|
opac=0.
|
|
return
|
|
endif
|
|
|
|
c locate position in frequency array
|
|
call locate(freq,nlines,f,i,nlines)
|
|
|
|
c linearly interpolate in frequency and temperature
|
|
|
|
if (j.eq.ntemp) then
|
|
c hold values constant if off high temperature end of table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
alp=(1.-tt)*y1 + tt*y2
|
|
else if (i.eq.0 .or. i.eq.nlines) then
|
|
c set values to a very small number if off frequency table
|
|
alp=-50.
|
|
else
|
|
c interpolate linearly within table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
y3=alpha(i+1,j+1)
|
|
y4=alpha(i,j+1)
|
|
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
uu=(t-temp(j))/(temp(j+1)-temp(j))
|
|
|
|
alp=(1.-tt)*(1.-uu)*y1 + tt*(1.-uu)*y2 + tt*uu*y3 +
|
|
* (1.-tt)*uu*y4
|
|
endif
|
|
|
|
alp=exp(alp)
|
|
|
|
c final opacity
|
|
|
|
opac=fac*ah2*ahe*alp
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
subroutine cia_h2h(t,ah2,ah,ff,opac)
|
|
c ====================================
|
|
c
|
|
c CIA H2-H opacity - data taken from TURBOSPEC
|
|
c
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
parameter (nlines=67)
|
|
dimension freq(nlines),temp(4),alpha(nlines,4)
|
|
parameter (amagat=2.6867774d+19,fac=1./amagat**2)
|
|
data temp / 1000. , 1500., 2000. , 2500. /
|
|
data ntemp /4/
|
|
data ifirst /0/
|
|
PARAMETER (CAS=2.997925D10)
|
|
c input frequency in Hz but needed wave numbers in cm^-1
|
|
f=ff/cas
|
|
c read in CIA tables if this is the first call
|
|
if (ifirst.eq.0) then
|
|
write(*,'(a)') 'Reading in H2-H CIA opacity tables...'
|
|
open(10,file="./data/CIA_H2H.dat",status='old')
|
|
do i=1,3
|
|
read (10,*)
|
|
enddo
|
|
do i=1,nlines
|
|
read (10,*) freq(i),(alpha(i,j),j=1,ntemp)
|
|
enddo
|
|
close(10)
|
|
|
|
c take logarithm of tables prior to doing linear interpolations
|
|
|
|
do i=1,nlines
|
|
do j=1,ntemp
|
|
alpha(i,j)=log(alpha(i,j))
|
|
enddo
|
|
enddo
|
|
|
|
ifirst=1
|
|
endif
|
|
|
|
c locate position in temperature array
|
|
call locate(temp,ntemp,t,j,ntemp)
|
|
|
|
if (j.eq.0) then
|
|
write(*,*)
|
|
write(*,'(a,f6.0,a)')
|
|
* 'Warning: requested temperature is below',temp(1),' K'
|
|
write(*,'(a)') 'CIA H2-H opacity set to 0'
|
|
write(*,*)
|
|
opac=0.
|
|
return
|
|
endif
|
|
|
|
c locate position in frequency array
|
|
call locate(freq,nlines,f,i,nlines)
|
|
|
|
c linearly interpolate in frequency and temperature
|
|
|
|
if (j.eq.ntemp) then
|
|
c hold values constant if off high temperature end of table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
alp=(1.-tt)*y1 + tt*y2
|
|
else if (i.eq.0 .or. i.eq.nlines) then
|
|
c set values to a very small number if off frequency table
|
|
alp=-50.
|
|
else
|
|
c interpolate linearly within table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
y3=alpha(i+1,j+1)
|
|
y4=alpha(i,j+1)
|
|
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
uu=(t-temp(j))/(temp(j+1)-temp(j))
|
|
|
|
alp=(1.-tt)*(1.-uu)*y1 + tt*(1.-uu)*y2 + tt*uu*y3 +
|
|
* (1.-tt)*uu*y4
|
|
endif
|
|
|
|
alp=exp(alp)
|
|
|
|
c final opacity
|
|
|
|
opac=fac*ah2*ah*alp
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
subroutine cia_hhe(t,ah,ahe,ff,opac)
|
|
c ====================================
|
|
c
|
|
c CIA H-He opacity
|
|
c data from Gustafsson M., Frommhold, L. 2001, ApJ 546, 1168
|
|
c
|
|
IMPLICIT REAL*8(A-H,O-Z)
|
|
parameter (nlines=43)
|
|
dimension freq(nlines),temp(11),alpha(nlines,11)
|
|
parameter (amagat=2.6867774d+19,fac=1./amagat**2)
|
|
data temp / 1000., 1500., 2250., 3000., 4000., 5000.,
|
|
* 6000., 7000., 8000., 9000., 10000./
|
|
data ntemp /11/
|
|
data ifirst /0/
|
|
PARAMETER (CAS=2.997925D10)
|
|
c input frequency in Hz but needed wave numbers in cm^-1
|
|
f=ff/cas
|
|
c read in CIA tables if this is the first call
|
|
if (ifirst.eq.0) then
|
|
write(*,'(a)') 'Reading in H-He CIA opacity tables...'
|
|
open(10,file="./data/CIA_HHe.dat",status='old')
|
|
do i=1,3
|
|
read (10,*)
|
|
enddo
|
|
do i=1,nlines
|
|
read (10,*) freq(i),(alpha(i,j),j=1,ntemp)
|
|
enddo
|
|
close(10)
|
|
|
|
c take logarithm of tables prior to doing linear interpolations
|
|
|
|
do i=1,nlines
|
|
do j=1,ntemp
|
|
alpha(i,j)=log(alpha(i,j))
|
|
enddo
|
|
enddo
|
|
|
|
ifirst=1
|
|
endif
|
|
|
|
c locate position in temperature array
|
|
call locate(temp,ntemp,t,j,ntemp)
|
|
|
|
if (j.eq.0) then
|
|
write(*,*)
|
|
write(*,'(a,f6.0,a)')
|
|
* 'Warning: requested temperature is below',temp(1),' K'
|
|
write(*,'(a)') 'CIA H-He opacity set to 0'
|
|
write(*,*)
|
|
opac=0.
|
|
return
|
|
endif
|
|
|
|
c locate position in frequency array
|
|
call locate(freq,nlines,f,i,nlines)
|
|
|
|
c linearly interpolate in frequency and temperature
|
|
|
|
if (j.eq.ntemp) then
|
|
c hold values constant if off high temperature end of table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
alp=(1.-tt)*y1 + tt*y2
|
|
else if (i.eq.0 .or. i.eq.nlines) then
|
|
c set values to a very small number if off frequency table
|
|
alp=-50.
|
|
else
|
|
c interpolate linearly within table
|
|
y1=alpha(i,j)
|
|
y2=alpha(i+1,j)
|
|
y3=alpha(i+1,j+1)
|
|
y4=alpha(i,j+1)
|
|
|
|
tt=(f-freq(i))/(freq(i+1)-freq(i))
|
|
uu=(t-temp(j))/(temp(j+1)-temp(j))
|
|
|
|
alp=(1.-tt)*(1.-uu)*y1 + tt*(1.-uu)*y2 + tt*uu*y3 +
|
|
* (1.-tt)*uu*y4
|
|
endif
|
|
|
|
alp=exp(alp)
|
|
|
|
c final opacity
|
|
|
|
opac=fac*ah*ahe*alp
|
|
c
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
subroutine h2minus(t,anh2,ane,fr,oph2m)
|
|
C =======================================
|
|
C
|
|
C H- free-free opacity
|
|
C
|
|
C data from K L Bell 1980 J. Phys. B: At. Mol. Phys. 13 1859, Table 1
|
|
C The first column is theta=5040/T(K)
|
|
C The first row are names for each row corresponding to lambda (angstroms)
|
|
C The last row for 10.0 is linearly extrapolated
|
|
C The units of everything else is 10^26 cm4/dyn-1
|
|
C
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension FFthet(9),FFlamb(18),FFkapp(18,9)
|
|
data FFthet / 0.5, 0.8, 1.0, 1.2, 1.6, 2.0,
|
|
* 2.8, 3.6, 10.0 /
|
|
data nthet /9/
|
|
data FFlamb /151883., 113913., 91130., 60753.,
|
|
* 45565., 36452., 30377., 22783.,
|
|
* 18226., 15188., 11391., 9113., 7594.,
|
|
* 6509., 5696., 5063., 4142., 3505./
|
|
data nlamb /18/
|
|
data FFkapp /
|
|
* 7.16e+01,4.03e+01,2.58e+01,1.15e+01,6.47e+00,
|
|
* 4.15e+00,2.89e+00,1.63e+00,1.05e+00,7.36e-01,
|
|
* 4.20e-01,2.73e-01,1.92e-01,1.43e-01,1.10e-01,
|
|
* 8.70e-02,5.84e-02,4.17e-02,9.23e+01,5.20e+01,
|
|
* 3.33e+01,1.48e+01,8.37e+00,5.38e+00,3.76e+00,
|
|
* 2.14e+00,1.39e+00,9.75e-01,5.64e-01,3.71e-01,
|
|
* 2.64e-01,1.98e-01,1.54e-01,1.24e-01,8.43e-02,
|
|
* 6.10e-02,1.01e+02,5.70e+01,3.65e+01,1.63e+01,
|
|
* 9.20e+00,5.92e+00,4.14e+00,2.36e+00,1.54e+00,
|
|
* 1.09e+00,6.35e-01,4.22e-01,3.03e-01,2.30e-01,
|
|
* 1.80e-01,1.46e-01,1.01e-01,7.34e-02,1.08e+02,
|
|
* 6.08e+01,3.90e+01,1.74e+01,9.84e+00,6.35e+00,
|
|
* 4.44e+00,2.55e+00,1.66e+00,1.18e+00,6.97e-01,
|
|
* 4.67e-01,3.39e-01,2.59e-01,2.06e-01,1.67e-01,
|
|
* 1.17e-01,8.59e-02,1.18e+02,6.65e+01,4.27e+01,
|
|
* 1.91e+01,1.08e+01,6.99e+00,4.91e+00,2.84e+00,
|
|
* 1.87e+00,1.34e+00,8.06e-01,5.52e-01,4.08e-01,
|
|
* 3.17e-01,2.55e-01,2.10e-01,1.49e-01,1.11e-01,
|
|
* 1.26e+02,7.08e+01,4.54e+01,2.04e+01,1.16e+01,
|
|
* 7.50e+00,5.28e+00,3.07e+00,2.04e+00,1.48e+00,
|
|
* 9.09e-01,6.33e-01,4.76e-01,3.75e-01,3.05e-01,
|
|
* 2.53e-01,1.82e-01,1.37e-01,1.38e+02,7.76e+01,
|
|
* 4.98e+01,2.24e+01,1.28e+01,8.32e+00,5.90e+00,
|
|
* 3.49e+00,2.36e+00,1.74e+00,1.11e+00,7.97e-01,
|
|
* 6.13e-01,4.92e-01,4.06e-01,3.39e-01,2.49e-01,
|
|
* 1.87e-01,1.47e+02,8.30e+01,5.33e+01,2.40e+01,
|
|
* 1.38e+01,9.02e+00,6.44e+00,3.90e+00,2.68e+00,
|
|
* 2.01e+00,1.32e+00,9.63e-01,7.51e-01,6.09e-01,
|
|
* 5.07e-01,4.27e-01,3.16e-01,2.40e-01,2.19e+02,
|
|
* 1.26e+02,8.13e+01,3.68e+01,2.18e+01,1.46e+01,
|
|
* 1.08e+01,7.18e+00,5.24e+00,4.17e+00,3.00e+00,
|
|
* 2.29e+00,1.86e+00,1.55e+00,1.32e+00,1.13e+00,
|
|
* 8.52e-01,6.64e-01/
|
|
|
|
c locate position in temperature array
|
|
theta=5040./t
|
|
|
|
call locate(FFthet,nthet,theta,j,nthet)
|
|
if (j.eq.0) then
|
|
write(*,*)
|
|
write(*,'(a,f6.0,a)')
|
|
* 'Error: requested temperature is outside the ranges'
|
|
write(*,'(a)') 'h2minus:Stop'
|
|
write(*,*)
|
|
stop
|
|
endif
|
|
flamb=CL*1.D8/fr
|
|
c locate position in wavelength array
|
|
call locate(FFlamb,nlamb,flamb,i,nlamb)
|
|
|
|
c linearly interpolate in frequency and temperature
|
|
if (j.eq.nthet) then
|
|
c hold values constant if off high temperature end of table
|
|
y1=FFkapp(i,j)
|
|
y2=FFkapp(i+1,j)
|
|
tt=(flamb-FFlamb(i))/(FFlamb(i+1)-FFlamb(i))
|
|
Fkappa=(1.-tt)*y1 + tt*y2
|
|
else if (i.eq.0 .or. i.eq.nlines) then
|
|
c set values to 0 if off frequency table
|
|
Fkappa=0.0
|
|
else
|
|
c interpolate linearly within table
|
|
y1=FFkapp(i,j)
|
|
y2=FFkapp(i+1,j)
|
|
y3=FFkapp(i+1,j+1)
|
|
y4=FFkapp(i,j+1)
|
|
|
|
tt=(flamb-FFlamb(i))/(FFlamb(i+1)-FFlamb(i))
|
|
uu=(theta-FFthet(j))/(FFthet(j+1)-FFthet(j))
|
|
|
|
Fkappa=(1.-tt)*(1.-uu)*y1 + tt*(1.-uu)*y2 + tt*uu*y3 +
|
|
* (1.-tt)*uu*y4
|
|
endif
|
|
pe=ane*BOLK*t
|
|
oph2m= anh2 * 1.0E-26 *pe * Fkappa
|
|
return
|
|
end
|
|
c
|
|
c
|
|
c **********************************************************************
|
|
c
|
|
c
|
|
subroutine h2opf(t,pf)
|
|
c
|
|
c partition function for H2Ofrom EXOMOILA data
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension ttab(10000),pftab(10000)
|
|
c
|
|
data init /1/
|
|
c
|
|
if(init.eq.1) then
|
|
open(67,file='./data/h2o_exomol.pf',status='old')
|
|
do i=1,10000
|
|
read(67,*) ttab(i),pftab(i)
|
|
end do
|
|
close(67)
|
|
init=0
|
|
end if
|
|
c
|
|
itab=ifix(real(t))
|
|
pf=pftab(itab)+(t-ttab(itab))*(pftab(itab+1)-pftab(itab))
|
|
return
|
|
end
|
|
|
|
c
|
|
c
|
|
c **********************************************************************
|
|
c
|
|
c
|
|
subroutine vopf(t,pf)
|
|
c
|
|
c partition function for VO from EXOMOILA data
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
dimension ttab(10000),pftab(10000)
|
|
c
|
|
data init /1/
|
|
c
|
|
if(init.eq.1) then
|
|
open(67,file='./data/vo_exomol.pf',status='old')
|
|
do i=1,8000
|
|
read(67,*) ttab(i),pftab(i)
|
|
end do
|
|
close(67)
|
|
init=0
|
|
end if
|
|
c
|
|
itab=ifix(real(t))
|
|
pf=pftab(itab)+(t-ttab(itab))*(pftab(itab+1)-pftab(itab))
|
|
return
|
|
end
|
|
|
|
C
|
|
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
function gvdw(il,ilist,id)
|
|
c ==========================
|
|
c
|
|
c evaluation of the Van der Waals broadening parameter
|
|
c
|
|
c currently, two possibilities, determined by the value of the parameter
|
|
c ivdwli(ilist) - the mode of evaluation is the same for the whole line list
|
|
c = 0 - standard expression
|
|
c > 0 - evaluation using EXOMOL data, assuming breadening by H2 and He
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
INCLUDE 'MODELP.FOR'
|
|
INCLUDE 'LINDAT.FOR'
|
|
COMMON/PRFQUA/DOPA1(MATOM,MDEPTH),VDWC(MDEPTH)
|
|
c
|
|
c clasical, original expression
|
|
c
|
|
if(ivdwli(ilist).eq.0) then
|
|
gvdw=gwm(il,ilist)*vdwc(id)
|
|
return
|
|
end if
|
|
c
|
|
c EXOMOL form - broadening by H2 and He
|
|
c
|
|
c con= 1.e-6*c*k
|
|
con=4.1388e-12
|
|
t=temp(id)
|
|
anhe=rrr(id,1,2)
|
|
gvdw=con*t*((296./t)**gexph2(il,ilist)*gvdwh2(il,ilist)*anh2(id)+
|
|
* (296./t)**gexphe(il,ilist)*gvdwhe(il,ilist)*anhe)
|
|
return
|
|
end
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
subroutine exopf(indmol,t,u)
|
|
c ============================
|
|
c
|
|
c oartition functions from EXOMOL for 32 molewcular species
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
parameter (nmol=32)
|
|
character*4 filpf(nmol)
|
|
character*7 fil
|
|
character*6 fil1
|
|
character*1 fil0
|
|
character*17 fil5
|
|
character*18 fil6
|
|
dimension indtsu(nmol),ntemp(nmol),pf(nmol,10000)
|
|
c
|
|
data filpf/
|
|
* ' AlO',' C2',' CH',' CN',' CO',
|
|
* ' CS',' CaH',' CaO',' CrH',' FeH',
|
|
* ' H2',' HCl',' HF',' MgH',' MgO',
|
|
* ' N2',' NH',' NO',' NS',' NaH',
|
|
* ' OH',' PH',' SH',' SiH',' SiO',
|
|
* ' SiS',' TiH',' TiO',' VO',
|
|
^ ' H2O',' H2S',' CO2'/
|
|
data ntemp/
|
|
* 9, 10, 8, 3, 9, 3, 3, 8, 3, 10,
|
|
* 10, 5, 5, 3, 5, 9, 5, 5, 5, 5,
|
|
* 5, 4, 5, 5, 9, 5, 48, 8, 8, 10,
|
|
* 3, 5/
|
|
data indtsu/
|
|
* 134, 8, 5, 7, 6, 20, 34, 179, 198, 214,
|
|
* 2, 36, 33, 32, 126, 9, 12, 11, 23, 122,
|
|
* 4, 148, 16, 17, 25, 28, 315, 29, 30, 3,
|
|
* 57, 44/
|
|
data iread /1/
|
|
c
|
|
if(iread.eq.1) then
|
|
do i=1,nmol
|
|
ntemp(i)=ntemp(i)*1000
|
|
end do
|
|
ntemp(27)=ntemp(27)/10
|
|
do i=1,nmol
|
|
fil=filpf(i)//'.pf'
|
|
fil1=fil(2:)
|
|
fil0=fil1(:1)
|
|
if(fil0.eq.' ') then
|
|
fil5='data/EXOMOL/'//fil1(2:)
|
|
open(unit=67,file=fil5,status='old')
|
|
else
|
|
fil6=fil1
|
|
open(unit=67,file='data/EXOMOL/'//fil6,status='old')
|
|
end if
|
|
do j=1,ntemp(i)
|
|
read(67,*) tt,pf(i,j)
|
|
end do
|
|
close(67)
|
|
end do
|
|
iread=0
|
|
end if
|
|
c
|
|
ie=0
|
|
u=0.
|
|
do i=1,nmol
|
|
if(indtsu(i).eq.indmol) ie=i
|
|
end do
|
|
if(ie.eq.0) return
|
|
c
|
|
tmax=float(ntemp(ie))
|
|
if(t.le.tmax) then
|
|
j=int(t)
|
|
u=pf(ie,j)
|
|
else
|
|
call irwpf(0,0,indmol,tmax,umx)
|
|
call irwpf(0,0,indmol,t,uirw)
|
|
u=pf(ie,ntemp(ie))/umx*uirw
|
|
end if
|
|
c
|
|
return
|
|
end
|
|
|
|
C
|
|
C
|
|
C *******************************************************************
|
|
C
|
|
C
|
|
|
|
subroutine irwpf(jatom,ion,indmol,t,u)
|
|
c ======================================
|
|
c
|
|
c partition functions adter Irwin (1981), ApJS. 45, 621.
|
|
c updated with the data of Barklem & Collet (2016)
|
|
C set to the Irwin format by Y. Ossorio
|
|
c
|
|
c Input: jatom - atomic number; if =0 - molecules
|
|
c ion - ionization degree
|
|
c indmol - index of a molecule in the new Tsuji-type
|
|
c indexing (from file tsuji.molec_bc2)
|
|
c t - temperature
|
|
c Output: u - partition function
|
|
c
|
|
c array IRWIND(I) - the Irwin index corresponding to Tsuji
|
|
c index I
|
|
c if =0 - molecule I has no data in the Irwin table
|
|
c
|
|
INCLUDE 'PARAMS.FOR'
|
|
real*8 a(6,3,92),aa(6),am(6,500),spec(500)
|
|
dimension irwind(478)
|
|
save iread,a,am
|
|
c
|
|
data irwind/
|
|
* 0, 1, 28, 4, 2, 7, 6, 5, 8, 10,
|
|
* 9, 3, 18, 25, 53, 29, 43, 0, 17, 153,
|
|
* 52, 55, 167, 44, 45, 182, 74, 46, 11, 187,
|
|
* 201, 31, 27, 99, 209, 24, 22, 20, 21, 65,
|
|
* 35, 19, 54, 23, 0, 14, 58, 0, 32, 12,
|
|
* 47, 16, 0, 34, 0, 0, 30, 0, 13, 33,
|
|
* 61, 63, 292, 57, 59, 66, 272, 0, 94, 175,
|
|
* 226, 286, 0, 0, 0, 176, 227, 287, 0, 0,
|
|
* 0, 96, 0, 177, 0, 267, 228, 288, 0, 0,
|
|
* 0, 0, 93, 147, 162, 5*0,
|
|
* 0, 50, 0, 0, 0, 0, 36, 0, 64, 0,
|
|
* 0, 48, 0, 0, 148, 0, 0, 26, 49, 70,
|
|
* 178, 97, 170, 229, 0, 180, 268, 230, 0, 289,
|
|
* 0, 0, 15, 181, 0, 269, 4*0,
|
|
* 0, 0, 0, 231, 0, 290, 0, 38, 0, 0,
|
|
* 152, 39, 40, 0, 41, 232, 0, 291, 0, 0,
|
|
* 0, 0, 0, 75, 154, 0, 0, 0, 183, 0,
|
|
* 0, 0, 0, 0, 0, 98, 184, 234, 185, 270,
|
|
* 0, 0, 0, 186, 0, 0, 271, 235, 0, 0,
|
|
* 62, 0, 0, 0, 0, 0, 0, 101, 0, 188,
|
|
* 0, 0, 0, 0, 0, 102, 189, 3*0,
|
|
* 236, 0, 294, 67, 0, 190, 0, 0, 0, 295,
|
|
* 0, 0, 104, 191, 237, 0, 105, 192, 274, 238,
|
|
* 296, 112, 245, 303, 113, 199, 0, 278, 246, 0,
|
|
* 304, 0, 0, 0, 0, 200, 0, 0, 279, 247,
|
|
* 0, 305, 0, 0, 172, 5*0,
|
|
* 0, 120, 122, 208, 0, 282, 255, 0, 312, 0,
|
|
* 7*0, 283, 256, 0,
|
|
* 10*0,
|
|
* 275, 194, 108, 241, 299, 202, 0, 68, 69, 71,
|
|
* 72, 73, 42, 37, 76, 77, 78, 79, 80, 81,
|
|
* 82, 83, 92, 95, 100, 103, 106, 107, 109, 110,
|
|
* 111, 114, 115, 116, 117, 118, 119, 121, 123, 124,
|
|
* 125, 126, 127, 128, 129, 149, 150, 151, 155, 156,
|
|
* 157, 158, 159, 163, 164, 165, 166, 168, 169, 170,
|
|
* 171, 193, 195, 196, 197, 198, 203, 204, 205, 206,
|
|
* 207, 210, 211, 212, 213, 214, 215, 216, 217, 218,
|
|
* 225, 233, 239, 240, 242, 243, 244, 248, 249, 250,
|
|
* 251, 252, 253, 254, 257, 258, 259, 260, 262, 262,
|
|
* 263, 264, 265, 266, 273, 276, 277, 280, 282, 284,
|
|
* 285, 293, 297, 298, 300, 301, 302, 306, 307, 308,
|
|
* 309, 310, 311, 60, 313, 314, 315, 316, 317, 318,
|
|
* 319, 320, 321, 322, 323, 324, 84, 85, 86, 87,
|
|
* 88, 89, 90, 91, 130, 131, 132, 133, 134, 135,
|
|
* 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
|
|
* 146, 160, 161, 173, 174, 210, 220, 221, 222, 223,
|
|
* 224,16*0, 56/
|
|
c
|
|
data iread /0/
|
|
c
|
|
c call old Irwin routine MPARTF if desired
|
|
c
|
|
if(irwtab.eq.0) then
|
|
call mpartf(jatom,ion,indmol,t,u)
|
|
return
|
|
end if
|
|
c
|
|
c read data if first call:
|
|
c
|
|
if(iread.ne.1) then
|
|
if(irwtab.eq.0) then
|
|
open(67,file= './data/irwin_orig.dat',status='old')
|
|
else
|
|
open(67,file= './data/irwin_bc.dat',status='old')
|
|
end if
|
|
read(67,*)
|
|
read(67,*)
|
|
do j=1,92
|
|
do i=1,3
|
|
if(j.eq.1.and.i.eq.3) goto 10
|
|
sp=float(j)+float(i-1)/100.
|
|
read(67,*) spc,aa
|
|
do k=1,6
|
|
a(k,i,j)=aa(k)
|
|
end do
|
|
10 continue
|
|
end do
|
|
end do
|
|
c
|
|
read(67,*)
|
|
read(67,*)
|
|
read(67,*)
|
|
do i=1,324
|
|
read(67,*,end=15) spec(i),aa
|
|
do j=1,6
|
|
am(j,i)=aa(j)
|
|
end do
|
|
end do
|
|
15 continue
|
|
close(67)
|
|
iread=1
|
|
endif
|
|
c
|
|
c evaluation of the partition function
|
|
c stop if T is out of limits of Irwin's tables
|
|
c
|
|
if(t.lt.1000.) then
|
|
stop 'partf; temp<1000 K'
|
|
else if(t.gt.16000.) then
|
|
stop 'partf; temp>16000 K'
|
|
endif
|
|
tl=log(t)
|
|
u=0.
|
|
c
|
|
c atomic species
|
|
c
|
|
if(jatom.gt.0.and.ion.gt.0) then
|
|
ulog= a(1,ion,jatom)+
|
|
* tl*(a(2,ion,jatom)+
|
|
* tl*(a(3,ion,jatom)+
|
|
* tl*(a(4,ion,jatom)+
|
|
* tl*(a(5,ion,jatom)+
|
|
* tl*(a(6,ion,jatom))))))
|
|
if(jatom.eq.5.and.ion.eq.3) ulog=1.
|
|
C write(*,*) 'bor',ion,tl,ulog
|
|
c * write(6,631) ion,tl,a(1,ion,jatom),tl*a(2,ion,jatom),
|
|
c tl**2*a(3,ion,jatom),tl**3*a(4,ion,jatom),tl**4*a(5,ion,jatom),
|
|
c * tl**5*a(6,ion,jatom),ulog
|
|
c 631 format('bor',i4,1p8e11.3)
|
|
u=exp(ulog)
|
|
return
|
|
end if
|
|
c
|
|
c molecular species
|
|
c
|
|
if(indmol.gt.0) then
|
|
indm=irwind(indmol)
|
|
if(indm.le.0) return
|
|
ulog= am(1,indm)+
|
|
* tl*(am(2,indm)+
|
|
* tl*(am(3,indm)+
|
|
* tl*(am(4,indm)+
|
|
* tl*(am(5,indm)+
|
|
* tl*(am(6,indm))))))
|
|
u=exp(ulog)
|
|
c if(t.gt.5128..and.t.lt.5129.)
|
|
c * write(6,631) t,indmol,indm,u
|
|
c 631 format('irwpf',f10.1,2i5,f16.3)
|
|
end if
|
|
return
|
|
end
|
|
|
|
C
|
|
C =========================================================================
|
|
|