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

79 lines
2.1 KiB
Fortran

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