Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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