1C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2C
3C RADSUB06
4C
5C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
6
7 subroutine radsub06 (irad,t6,density,moles,tmass)
8C 10/20/26 MHP via Claude
9C code changed to convert COMMON/EOS06MISC/ into
10C EOS06MISC_MOD.
11 USE EOS06MISC_MOD
12C 10/20/26 MHP via Claude
13C code changed to replace implicit typing with IMPLICIT NONE and
14C explicit declarations.
15 IMPLICIT NONE
16 REAL*8 APROP,CHIR,CHITT,CVTT,DEDRHO,DENSITY,ER,ET,GAM1T,
17 * * GAM1T_NORAD,GAM2PT,GAM2PT_NORAD,GAM3PT,GAM3PT_NORAD,PR,PT,
18 * * RAT,SIGMACC,SR,ST,T6,TMASS
19 INTEGER IRAD,MV,MX,NR,NT
20
21 parameter (mx=5,mv=10,nr=169,nt=197)
22C real*8 moles,k,molenak,Na ! KC 2025-05-31
23 real*8 moles,molenak
24C KC 2025-05-30 reordered common block elements
25C common/beos06/ iri(10),index(10),nta(nr),zz(mx),nra(nt)
26C 10/9/26 MHP via Claude
27C code changed to merge COMMON/EEOS06/, COMMON/AAEOS06/, COMMON/BBEOS06/,
28C and COMMON/BEOS06/ into COMMON/EOS06MISC/ (see esac06.f for the full
29C rationale).
30
31c data Na/6.0221367D+23/, k/1.380658D-16/, unitf/0.9648530D0/,
32c x unitfold/0.965296D0/, c/2.9979245D10/, sigma/5.67051D-5/
33c x , sigmac/1.8914785D-15/, sigmacc/1.8914785D-3/
34c x , aprop/83.14510D0/ ! KC 2025-05-31
35 data sigmacc/1.8914785D-3/, aprop/83.14510D0/
36
37cPhysical constants
38c Na=6.0221367e+23
39c k =1.380658e-16 ! erg/degree K
40c Na*k=6.0221367E+23*1.380658e-16 erg/degree K=8.314510E+7 erg/degree K
41c =8.314510e+7*11604.5 erg/eV=0.9648575E+12 erg/eV
42c Define unitf= Na*k/e+12=0.9648575
43c unitf=0.9648530 ! obtained with latest physical constants
44c unitfold=0.965296 ! old units- still used in the EOS code
45c In these units energy/density is in units of Mb-CC/gm
46c Pressure is in units of E+12 bars=Mb
47c sigma is the Stefan-Boltzmann constant
48c sigma=5.67051E-5 ! erg /(s*cm**2*K**4)
49c c=2.99792458E+10 ! cm/sec
50
51c rat=sigma/c ! dyne/(cm**2*K**4)
52
53c rat=rat*1.e+24 ! Convert degrees K to units 10**6 K (T replaced with T6)
54 save
55
56 rat=sigmacc
57
58 molenak=moles*aprop ! Mb-cc/unit T6
59
60c-----Calculate EOS without radiation correction
61
62 pt=eos(iri(1))
63 et=eos(iri(2))
64 st=eos(iri(3))
65 dedrho=eos(iri(4))
66 chir=eos(iri(6))*eos(iri(1))/pt
67 chitt=(eos(iri(1))*eos(iri(7)))/pt
68 cvtt=(eos(iri(5))*molenak/tmass)
69 gam3pt_norad=pt*chitt/(cvtt*density*t6)
70 gam1t_norad=chir+chitt*gam3pt_norad
71 gam2pt_norad=gam1t_norad/gam3pt_norad
72c---- End no radiation calculation
73
74 if (irad .ne. 0) then
75c---- Calculate EOS with radiation calculation
76 pr=4D0/3D0*rat*t6**4 ! Mb
77 er=3D0*pr/density ! Mb-cc/gm
78 sr=4D0/3D0*er/t6 ! Mb-cc/(gm-unit T6)
79 pt=eos(iri(1))+pr
80 et=eos(iri(2))+er
81 st=eos(iri(3))+sr
82 dedrho=eos(iri(4))-er/density
83 chir=eos(iri(6))*eos(iri(1))/pt
84 chitt=(eos(iri(1))*eos(iri(7))+4D0*pr)/pt
85c gam1t(jcs,i)=(p(jcs,i)*gam1(jcs,i)+4D0/3D0*pr)/pt(jcs,i)
86c gam2pt(jcs,i)=(gam2p(jcs,i)*p(jcs,i)+4D0*pr)/pt(jcs,i)
87c gam3pt(jcs,i)=gam1t(jcs,i)/gam2pt(jcs,i)
88 cvtt=(eos(iri(5))*molenak/tmass+4D0*er/t6)
89 gam3pt=pt*chitt/(cvtt*density*t6) ! DIRECT
90 gam1t=chir+chitt*gam3pt !eq 16.16 Landau_Lifshitz (Stat. Mech) ! DIRECT
91 gam2pt=gam1t/gam3pt ! DIRECT
92
93c normalize cvt to 3/2 when gas is ideal,non-degenerate,
94c fully-ionized, and has no radiation correction
95c cvt=(eos(5)*molenak/tmass+4.*er/t6)
96c x /molenak
97c-----Add difference between EOS with and without radiation. cvtt
98c calculation is not accurate enough to give accurate results using
99c eq. 16.16 Landau&Lifshitz (SEE line labeled DIRECT)
100 eos(iri(8))=eos(iri(8))+gam1t-gam1t_norad
101 eos(iri(9))=eos(iri(9))+gam2pt-gam2pt_norad
102c eos(iri(10))=eos(iri(10))+gam3pt-gam3pt_norad
103 endif
104c-----End EOS calculations with radiation
105c normalize cvt to 3/2 when gas is ideal,non-degenerate,
106c fully-ionized, and has no radiation correction
107c cvt=(eos(5)*molenak/tmass+4.*er/t6)
108c x /molenak
109 eos(iri(1))=pt
110 eos(iri(2))=et
111 eos(iri(3))=st
112 eos(iri(4))=dedrho
113 eos(iri(5))=cvtt
114 eos(iri(6))=chir
115 eos(iri(7))=chitt
116 return
117 end
1"""Python version of radsub06.f (YREC 7be4133): radiation added to the
2OPAL 2006 gas equation of state."""
3
4from pyrec import eos06misc_mod
5
6# DATA: sigma/c = a/4 in Mb per unit T6^4, and the gas constant in
7# Mb cc per mole and unit T6.
8SIGMACC = 1.8914785e-3
9APROP = 83.14510
10
11
12def radsub06(irad: int, t6: float, density: float, moles: float, tmass: float) -> None:
13 """Rewrite EOS(IRI(1..7)) in EOS06MISC_MOD with radiation added (when
14 irad != 0): pressure, energy, entropy, dE/drho, c_V, chi_rho, chi_T,
15 and add the radiation's differences to Gamma_1 and Gamma_2/(Gamma_2-1).
16 With irad = 0 only the gas values are rewritten (c_V times Nk/M).
17
18 Translates: radsub06.f#RADSUB06 (7be4133)
19
20 Arguments: irad; t6, T in 10^6 K; density (g/cc); moles; tmass.
21 Returns nothing.
22
23 """
24
25 # Constants (Fortran lines 56–58).
26 eos = eos06misc_mod.eos
27 iri = eos06misc_mod.iri
28 rat = SIGMACC
29 molenak = moles * APROP # Mb-cc/unit T6
30
31 # The equation of state without radiation (Fortran lines 60–72).
32 pt = eos[iri[1]]
33 et = eos[iri[2]]
34 st = eos[iri[3]]
35 dedrho = eos[iri[4]]
36 chir = eos[iri[6]] * eos[iri[1]] / pt
37 chitt = (eos[iri[1]] * eos[iri[7]]) / pt
38 cvtt = (eos[iri[5]] * molenak / tmass)
39 gam3pt_norad = pt * chitt / (cvtt * density * t6)
40 gam1t_norad = chir + chitt * gam3pt_norad
41 gam2pt_norad = gam1t_norad / gam3pt_norad
42
43 # With radiation; esac06 calls this routine only with irad = 1
44 # (Fortran lines 74–103).
45 if irad != 0:
46 pr = 4.0 / 3.0 * rat * t6**4 # Mb
47 er = 3.0 * pr / density # Mb-cc/gm
48 sr = 4.0 / 3.0 * er / t6 # Mb-cc/(gm-unit T6)
49 pt = eos[iri[1]] + pr
50 et = eos[iri[2]] + er
51 st = eos[iri[3]] + sr
52 dedrho = eos[iri[4]] - er / density
53 chir = eos[iri[6]] * eos[iri[1]] / pt
54 chitt = (eos[iri[1]] * eos[iri[7]] + 4.0 * pr) / pt
55 cvtt = (eos[iri[5]] * molenak / tmass + 4.0 * er / t6)
56 gam3pt = pt * chitt / (cvtt * density * t6)
57 gam1t = chir + chitt * gam3pt # eq 16.16 Landau & Lifshitz
58 gam2pt = gam1t / gam3pt
59 # Add the differences with and without radiation.
60 eos[iri[8]] = eos[iri[8]] + gam1t - gam1t_norad
61 eos[iri[9]] = eos[iri[9]] + gam2pt - gam2pt_norad
62 # Gamma_3 (IRI(10)) is not corrected: it is never computed.
63
64 # Store (Fortran lines 109–115).
65 eos[iri[1]] = pt
66 eos[iri[2]] = et
67 eos[iri[3]] = st
68 eos[iri[4]] = dedrho
69 eos[iri[5]] = cvtt
70 eos[iri[6]] = chir
71 eos[iri[7]] = chitt