Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ This has to be done manually and will require editing a lot of files. The easies
* `spectraltools/src/utils.py`
* `src/interface_core/socrates_set_spectrum.F90`
* `src/modules_gen/input_head_pcf.f90`
* `src/modules_gen/refract_re_ccf.f90`
* `src/radiance_core/def_control.F90`
* `src/radiance_core/gas_list_pcf.F90`

Expand Down
132 changes: 132 additions & 0 deletions julia/src/SOCRATES.jl
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ function set_spectrum(;
l_hcn ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_h2s ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ar ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_air ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_o ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_n ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_no3 ::Union{Bool, Ptr{Nothing}} = C_NULL,
Expand Down Expand Up @@ -159,6 +160,49 @@ function set_spectrum(;
l_macr ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_pan ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3ono2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c2h3 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c2h4 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_oh ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_hco ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_n2o4 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c2n2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_n2h4 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_n2o3 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_si ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_sio ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_sio2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_mg ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_mg2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_mgo ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_tio2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_fe ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_feo ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ca ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_cao ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_alo ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_na2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_nao ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_naoh ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_koh ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_hminus ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ps ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_po ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_pn ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3sh ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3s ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c2h6s ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c2h6s2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c3h4 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_c4h3 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_sih4 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_s2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_sf6 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_cs2 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_s8 ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_cn ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3cl ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3f ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_ch3br ::Union{Bool, Ptr{Nothing}} = C_NULL,
l_all_gases::Union{Bool, Ptr{Nothing}} = C_NULL,
wavelength_blue::Union{Float64, Ptr{Nothing}} = C_NULL,
)
Expand Down Expand Up @@ -240,6 +284,50 @@ function set_spectrum(;
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ref{Cuchar},
Ptr{Cvoid}, # Ref{Cdouble} doesn't work (can't be set to C_NULL) ???
),
n_instances,
Expand Down Expand Up @@ -283,6 +371,7 @@ function set_spectrum(;
l_hcn,
l_h2s,
l_ar,
l_air,
l_o,
l_n,
l_no3,
Expand Down Expand Up @@ -312,6 +401,49 @@ function set_spectrum(;
l_macr,
l_pan,
l_ch3ono2,
l_c2h3,
l_c2h4,
l_oh,
l_hco,
l_n2o4,
l_c2n2,
l_n2h4,
l_n2o3,
l_si,
l_sio,
l_sio2,
l_mg,
l_mg2,
l_mgo,
l_tio2,
l_fe,
l_feo,
l_ca,
l_cao,
l_alo,
l_na2,
l_nao,
l_naoh,
l_koh,
l_hminus,
l_ps,
l_po,
l_pn,
l_ch3sh,
l_ch3s,
l_c2h6s,
l_c2h6s2,
l_c3h4,
l_c4h3,
l_sih4,
l_s2,
l_sf6,
l_cs2,
l_s8,
l_cn,
l_ch3cl,
l_ch3f,
l_ch3br,
l_all_gases,
wavelength_blue === C_NULL ? C_NULL : Ref{Cdouble}(wavelength_blue),
)
Expand Down
60 changes: 56 additions & 4 deletions julia/src/SOCRATES_C.f90
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,15 @@ subroutine PS_set_spectrum(n_instances, spectrum_Cptr, spectrum_name_Cstr, spect
l_h2o, l_co2, l_o3, l_n2o, l_co, l_ch4, l_o2, l_no, l_so2, l_no2, l_nh3, &
l_hno3, l_n2, l_cfc11, l_cfc12, l_cfc113, l_hcfc22, l_hfc125, l_hfc134a, &
l_cfc114, l_tio, l_vo, l_h2, l_he, l_ocs, l_na, l_k, l_feh, l_crh, l_li, &
l_rb, l_cs, l_ph3, l_c2h2, l_hcn, l_h2s, l_ar, l_o, l_n, l_no3, l_n2o5, &
l_rb, l_cs, l_ph3, l_c2h2, l_hcn, l_h2s, l_ar, l_air, l_o, l_n, l_no3, l_n2o5, &
l_hono, l_ho2no2, l_h2o2, l_c2h6, l_ch3, l_h2co, l_ho2, l_hdo, l_hcl, &
l_hf, l_cosso, l_tosso, l_yosos, l_ch3cho, l_ch3ooh, l_ch3coch3, &
l_ch3cocho, l_chocho, l_c2h5cho, l_hoch2cho, l_c2h5coch3, l_mvk, l_macr, &
l_pan, l_ch3ono2, &
l_pan, l_ch3ono2, l_c2h3, l_c2h4, l_oh, l_hco, l_n2o4, l_c2n2, l_n2h4, l_n2o3, &
l_si, l_sio, l_sio2, l_mg, l_mg2, l_mgo, l_tio2, l_fe, l_feo, l_ca, l_cao, &
l_alo, l_na2, l_nao, l_naoh, l_koh, l_hminus, l_ps, l_po, l_pn, &
l_ch3sh, l_ch3s, l_c2h6s, l_c2h6s2, l_c3h4, l_c4h3, l_sih4, l_s2, l_sf6, l_cs2, l_s8, &
l_cn, l_ch3cl, l_ch3f, l_ch3br, &
l_all_gases, wavelength_blue) bind(C, name='PS_set_spectrum')

implicit none
Expand All @@ -111,11 +115,15 @@ subroutine PS_set_spectrum(n_instances, spectrum_Cptr, spectrum_name_Cstr, spect
l_h2o, l_co2, l_o3, l_n2o, l_co, l_ch4, l_o2, l_no, l_so2, l_no2, l_nh3, &
l_hno3, l_n2, l_cfc11, l_cfc12, l_cfc113, l_hcfc22, l_hfc125, l_hfc134a, &
l_cfc114, l_tio, l_vo, l_h2, l_he, l_ocs, l_na, l_k, l_feh, l_crh, l_li, &
l_rb, l_cs, l_ph3, l_c2h2, l_hcn, l_h2s, l_ar, l_o, l_n, l_no3, l_n2o5, &
l_rb, l_cs, l_ph3, l_c2h2, l_hcn, l_h2s, l_ar, l_air, l_o, l_n, l_no3, l_n2o5, &
l_hono, l_ho2no2, l_h2o2, l_c2h6, l_ch3, l_h2co, l_ho2, l_hdo, l_hcl, &
l_hf, l_cosso, l_tosso, l_yosos, l_ch3cho, l_ch3ooh, l_ch3coch3, &
l_ch3cocho, l_chocho, l_c2h5cho, l_hoch2cho, l_c2h5coch3, l_mvk, l_macr, &
l_pan, l_ch3ono2, &
l_pan, l_ch3ono2, l_c2h3, l_c2h4, l_oh, l_hco, l_n2o4, l_c2n2, l_n2h4, l_n2o3, &
l_si, l_sio, l_sio2, l_mg, l_mg2, l_mgo, l_tio2, l_fe, l_feo, l_ca, l_cao, &
l_alo, l_na2, l_nao, l_naoh, l_koh, l_hminus, l_ps, l_po, l_pn, &
l_ch3sh, l_ch3s, l_c2h6s, l_c2h6s2, l_c3h4, l_c4h3, l_sih4, l_s2, l_sf6, l_cs2, l_s8, &
l_cn, l_ch3cl, l_ch3f, l_ch3br, &
l_all_gases

real(c_double), intent(in), optional :: wavelength_blue
Expand Down Expand Up @@ -181,6 +189,7 @@ subroutine PS_set_spectrum(n_instances, spectrum_Cptr, spectrum_name_Cstr, spect
l_hcn = logical(l_hcn ), &
l_h2s = logical(l_h2s ), &
l_ar = logical(l_ar ), &
l_air = logical(l_air ), &
l_o = logical(l_o ), &
l_n = logical(l_n ), &
l_no3 = logical(l_no3 ), &
Expand Down Expand Up @@ -210,6 +219,49 @@ subroutine PS_set_spectrum(n_instances, spectrum_Cptr, spectrum_name_Cstr, spect
l_macr = logical(l_macr ), &
l_pan = logical(l_pan ), &
l_ch3ono2 = logical(l_ch3ono2 ), &
l_c2h3 = logical(l_c2h3 ), &
l_c2h4 = logical(l_c2h4 ), &
l_oh = logical(l_oh ), &
l_hco = logical(l_hco ), &
l_n2o4 = logical(l_n2o4 ), &
l_c2n2 = logical(l_c2n2 ), &
l_n2h4 = logical(l_n2h4 ), &
l_n2o3 = logical(l_n2o3 ), &
l_si = logical(l_si ), &
l_sio = logical(l_sio ), &
l_sio2 = logical(l_sio2 ), &
l_mg = logical(l_mg ), &
l_mg2 = logical(l_mg2 ), &
l_mgo = logical(l_mgo ), &
l_tio2 = logical(l_tio2 ), &
l_fe = logical(l_fe ), &
l_feo = logical(l_feo ), &
l_ca = logical(l_ca ), &
l_cao = logical(l_cao ), &
l_alo = logical(l_alo ), &
l_na2 = logical(l_na2 ), &
l_nao = logical(l_nao ), &
l_naoh = logical(l_naoh ), &
l_koh = logical(l_koh ), &
l_hminus = logical(l_hminus ), &
l_ps = logical(l_ps ), &
l_po = logical(l_po ), &
l_pn = logical(l_pn ), &
l_ch3sh = logical(l_ch3sh ), &
l_ch3s = logical(l_ch3s ), &
l_c2h6s = logical(l_c2h6s ), &
l_c2h6s2 = logical(l_c2h6s2 ), &
l_c3h4 = logical(l_c3h4 ), &
l_c4h3 = logical(l_c4h3 ), &
l_sih4 = logical(l_sih4 ), &
l_s2 = logical(l_s2 ), &
l_sf6 = logical(l_sf6 ), &
l_cs2 = logical(l_cs2 ), &
l_s8 = logical(l_s8 ), &
l_cn = logical(l_cn ), &
l_ch3cl = logical(l_ch3cl ), &
l_ch3f = logical(l_ch3f ), &
l_ch3br = logical(l_ch3br ), &
l_all_gases = logical(l_all_gases), &
wavelength_blue = wavelength_blue )

Expand Down
2 changes: 1 addition & 1 deletion make/Mk_cmd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated automatically
# System: Linux delphinium 6.19.8-200.fc43.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Mar 13 22:06:06 UTC 2026 x86_64 GNU/Linux
# Date: Sat 21 Mar 19:36:59 GMT 2026
# Date: Tue 24 Mar 19:31:16 GMT 2026

FORTCOMP = /usr/bin/gfortran -Ofast -march=native -fPIC -fallow-argument-mismatch -c
LINK = /usr/bin/gfortran -Ofast -march=native -fPIC -fallow-argument-mismatch
Expand Down
73 changes: 71 additions & 2 deletions spectraltools/src/phys.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ def iso_to_formula(iso:str):
"Hydrogen cyanide" :"HCN",
"Hydrogen sulphide" :"H2S",
"Argon" :"Ar",
"Dry air" :"Dry air",
"Atomic oxygen" :"O",
"Atomic nitrogen" :"N",
"Nitrate radical" :"NO3",
Expand Down Expand Up @@ -104,13 +105,47 @@ def iso_to_formula(iso:str):
"Methacrolein" :"MACR",
"Peroxyacetyl nitrate" :"PAN",
"Methylnitrate" :"CH3ONO2",
"Vinyl radical" :"C2H3",
"Ethylene" :"C2H4",
"Hydroxyl radical" :"OH",
"Formyl radical" :"HCO",
"Dinitrogen tetroxide" :"N2O4",
"Cyanogen" :"C2N2",
"Hydrazine" :"N2H4",
"Dinitrogen trioxide" :"N2O3",
"Silicon monoxide" :"SiO",
"Silicon" :"Si",
"Titanium dioxide" :"TiO2",
"Calcium" :"Ca",
"Calcium oxide" :"CaO",
"Aluminium monoxide" :"AlO",
"Sodium hydroxide" :"NaOH",
"Potassium hydroxide" :"KOH",
"Hydride anion" :"H-",
"Phosphorus sulfide" :"PS",
"Phosphorus monoxide" :"PO",
"Phosphorus nitride" :"PN",
"Methanethiol" :"CH3SH",
"Methylthiyl radical" :"CH3S",
"Dimethyl sulfide" :"C2H6S",
"Dimethyl disulfide" :"C2H6S2",
"Propyne" :"C3H4",
"Butadiynyl radical" :"C4H3",
"Silane" :"SiH4",
"Disulfur" :"S2",
"Sulfur hexafluoride" :"SF6",
"Carbon disulfide" :"CS2",
"Octasulfur" :"S8",
"Cyanogen radical" :"CN",
"Methyl chloride" :"CH3Cl",
"Methyl fluoride" :"CH3F",
"Methyl bromide" :"CH3Br",
"Silicon dioxide" :"SiO2",
"Atomic iron" :"Fe",
"Iron" :"Fe",
"Iron(II) oxide" :"FeO",
"Disodium" :"Na2",
"Sodium oxide" :"NaO",
"Atomic magnesium" :"Mg",
"Magnesium" :"Mg",
"Magnesium dimer" :"Mg2",
"Magnesium oxide" :"MgO",
}
Expand Down Expand Up @@ -197,7 +232,41 @@ def chemsafe(name:str):
"MACR" : 70.0898,
"PAN" : 121.048,
"CH3ONO2" : 77.0394,
"C2H3" : 27.0452,
"C2H4" : 28.0532,
"OH" : 17.0073,
"HCO" : 29.0180,
"N2O4" : 91.0110,
"C2N2" : 52.0348,
"N2H4" : 32.0452,
"N2O3" : 76.0116,
"SiO" : 44.0849,
"Si" : 28.0855,
"TiO2" : 79.8658,
"Ca" : 40.0780,
"CaO" : 56.0774,
"AlO" : 42.9809,
"NaOH" : 39.9971,
"KOH" : 56.1056,
"H-" : 1.00794,
"PS" : 63.0389,
"PO" : 46.9732,
"PN" : 44.9805,
"CH3SH" : 48.1075,
"CH3S" : 47.0996,
"C2H6S" : 62.1343,
"C2H6S2" : 94.1994,
"C3H4" : 40.0638,
"C4H3" : 51.0717,
"SiH4" : 32.1173,
"S2" : 64.1302,
"SF6" : 146.0554,
"CS2" : 76.1409,
"S8" : 256.5208,
"CN" : 26.0174,
"CH3Cl" : 50.4875,
"CH3F" : 34.0329,
"CH3Br" : 94.9385,
"SiO2" : 60.0843,
"Fe" : 55.8450,
"FeO" : 71.8440,
Expand Down
11 changes: 0 additions & 11 deletions spectraltools/src/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,6 @@ def checkenv():
else:
raise EnvironmentError("Cannot find SOCRATES executables. Have you sourced set_rad_env?")

# Map absorber names to their IDs (see radiance_core/gas_list_pcf.f90)
# gas_list = ["H2O", "CO2", "O3", "N2O", "CO", "CH4", "O2", "NO", "SO2", "NO2", "NH3",
# "HNO3", "N2", "CFC11", "CFC12", "CFC113", "HCFC22", "HFC125", "HFC134a",
# "CFC114", "TiO ", "VO", "H2", "He", "OCS", "Na", "K", "FeH", "CrH", "Li", "Rb",
# "Cs", "PH3", "C2H2", "HCN", "H2S", "Ar", "_air", "O", "N", "NO3", "N2O5",
# "HONO", "HO2NO2", "H2O2", "C2H6", "CH3 ", "H2CO ", "HO2", "HDO", "HCl", "HF",
# "cis-OSSO", "trans-OSSO", "OSO-S", "CH3CHO", "CH3OOH", "CH3COCH3", "CH3COCHO",
# "CHOCHO", "C2H5CHO", "HOCH2CHO", "C2H5COCH3", "MVK", "MACR", "PAN", "CH3ONO2",
# "SiO", "SiO2", "Fe", "FeO", "Na2", "NaO", "Mg", "Mg2", "MgO"]


gas_list = []
gas_list_pcf = os.path.join(dirs["socrates"], "src", "radiance_core", "gas_list_pcf.F90")
with open(gas_list_pcf, "r") as f:
Expand Down
Loading