diff --git a/README.md b/README.md index 11942c2..0c2404e 100644 --- a/README.md +++ b/README.md @@ -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` diff --git a/julia/src/SOCRATES.jl b/julia/src/SOCRATES.jl index 62b6ded..e6f8afc 100644 --- a/julia/src/SOCRATES.jl +++ b/julia/src/SOCRATES.jl @@ -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, @@ -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, ) @@ -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, @@ -283,6 +371,7 @@ function set_spectrum(; l_hcn, l_h2s, l_ar, + l_air, l_o, l_n, l_no3, @@ -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), ) diff --git a/julia/src/SOCRATES_C.f90 b/julia/src/SOCRATES_C.f90 index 22d38e4..4e6ddc7 100644 --- a/julia/src/SOCRATES_C.f90 +++ b/julia/src/SOCRATES_C.f90 @@ -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 @@ -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 @@ -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 ), & @@ -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 ) diff --git a/make/Mk_cmd b/make/Mk_cmd index 5e3896a..b5b45c2 100644 --- a/make/Mk_cmd +++ b/make/Mk_cmd @@ -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 diff --git a/spectraltools/src/phys.py b/spectraltools/src/phys.py index 883d9dc..78edb9b 100644 --- a/spectraltools/src/phys.py +++ b/spectraltools/src/phys.py @@ -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", @@ -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", } @@ -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, diff --git a/spectraltools/src/utils.py b/spectraltools/src/utils.py index 5698b66..b9fac11 100644 --- a/spectraltools/src/utils.py +++ b/spectraltools/src/utils.py @@ -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: diff --git a/src/interface_core/socrates_set_spectrum.F90 b/src/interface_core/socrates_set_spectrum.F90 index 3295847..092ece2 100644 --- a/src/interface_core/socrates_set_spectrum.F90 +++ b/src/interface_core/socrates_set_spectrum.F90 @@ -30,11 +30,15 @@ subroutine set_spectrum(n_instances, spectrum, spectrum_name, spectral_file, & 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) use errormessagelength_mod, only: errormessagelength @@ -61,11 +65,16 @@ subroutine set_spectrum(n_instances, spectrum, spectrum_name, spectral_file, & 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_all_gases + 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(RealExt), intent(in), optional :: wavelength_blue @@ -135,11 +144,16 @@ subroutine set_spectrum(n_instances, spectrum, spectrum_name, spectral_file, & 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_all_gases) + 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) ! Map the gas k-terms and weights to the sub-bands call map_sub_bands(spec) end if @@ -153,21 +167,30 @@ subroutine compress_spectrum(spec, & 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_all_gases) + 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) use gas_list_pcf, only: & ip_h2o, ip_co2, ip_o3, ip_n2o, ip_co, ip_ch4, ip_o2, ip_no, ip_so2, ip_no2, & ip_nh3, ip_hno3, ip_n2, ip_cfc11, ip_cfc12, ip_cfc113, ip_hcfc22, ip_hfc125, & ip_hfc134a, ip_cfc114, ip_tio, ip_vo, ip_h2, ip_he, ip_ocs, ip_na, ip_k, & ip_feh, ip_crh, ip_li, ip_rb, ip_cs, ip_ph3, ip_c2h2, ip_hcn, ip_h2s, ip_ar, & - ip_o, ip_n, ip_no3, ip_n2o5, ip_hono, ip_ho2no2, ip_h2o2, ip_c2h6, ip_ch3, & + ip_air, ip_o, ip_n, ip_no3, ip_n2o5, ip_hono, ip_ho2no2, ip_h2o2, ip_c2h6, ip_ch3, & ip_h2co, ip_ho2, ip_hdo, ip_hcl, ip_hf, ip_cosso, ip_tosso, ip_yosos, & ip_ch3cho, ip_ch3ooh, ip_ch3coch3, ip_ch3cocho, ip_chocho, ip_c2h5cho, & - ip_hoch2cho, ip_c2h5coch3, ip_mvk, ip_macr, ip_pan, ip_ch3ono2 + ip_hoch2cho, ip_c2h5coch3, ip_mvk, ip_macr, ip_pan, ip_ch3ono2, ip_c2h3, ip_c2h4, & + ip_oh, ip_hco, ip_n2o4, ip_c2n2, ip_n2h4, ip_n2o3, ip_si, ip_sio, ip_sio2, ip_mg, ip_mg2, ip_mgo, ip_tio2, ip_fe, ip_feo, ip_ca, ip_cao, & + ip_alo, ip_na2, ip_nao, ip_naoh, ip_koh, ip_hminus, ip_ps, ip_po, ip_pn, & + ip_ch3sh, ip_ch3s, ip_c2h6s, ip_c2h6s2, ip_c3h4, ip_c4h3, ip_sih4, ip_s2, & + ip_sf6, ip_cs2, ip_s8, ip_cn, ip_ch3cl, ip_ch3f, ip_ch3br implicit none @@ -177,11 +200,16 @@ subroutine compress_spectrum(spec, & 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_all_gases + 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 integer :: i, j, i_sub, n_band_absorb logical :: l_retain_absorb(spec%gas%n_absorb), l_retain_major @@ -235,6 +263,7 @@ subroutine compress_spectrum(spec, & retain_absorber(ip_hcn, l_hcn ) .or. & retain_absorber(ip_h2s, l_h2s ) .or. & retain_absorber(ip_ar, l_ar ) .or. & + retain_absorber(ip_air, l_air ) .or. & retain_absorber(ip_o, l_o ) .or. & retain_absorber(ip_n, l_n ) .or. & retain_absorber(ip_no3, l_no3 ) .or. & @@ -263,7 +292,50 @@ subroutine compress_spectrum(spec, & retain_absorber(ip_mvk, l_mvk ) .or. & retain_absorber(ip_macr, l_macr ) .or. & retain_absorber(ip_pan, l_pan ) .or. & - retain_absorber(ip_ch3ono2, l_ch3ono2 )) then + retain_absorber(ip_ch3ono2, l_ch3ono2 ) .or. & + retain_absorber(ip_c2h3, l_c2h3 ) .or. & + retain_absorber(ip_c2h4, l_c2h4 ) .or. & + retain_absorber(ip_oh, l_oh ) .or. & + retain_absorber(ip_hco, l_hco ) .or. & + retain_absorber(ip_n2o4, l_n2o4 ) .or. & + retain_absorber(ip_c2n2, l_c2n2 ) .or. & + retain_absorber(ip_n2h4, l_n2h4 ) .or. & + retain_absorber(ip_n2o3, l_n2o3 ) .or. & + retain_absorber(ip_si, l_si ) .or. & + retain_absorber(ip_sio, l_sio ) .or. & + retain_absorber(ip_sio2, l_sio2 ) .or. & + retain_absorber(ip_mg, l_mg ) .or. & + retain_absorber(ip_mg2, l_mg2 ) .or. & + retain_absorber(ip_mgo, l_mgo ) .or. & + retain_absorber(ip_tio2, l_tio2 ) .or. & + retain_absorber(ip_fe, l_fe ) .or. & + retain_absorber(ip_feo, l_feo ) .or. & + retain_absorber(ip_ca, l_ca ) .or. & + retain_absorber(ip_cao, l_cao ) .or. & + retain_absorber(ip_alo, l_alo ) .or. & + retain_absorber(ip_na2, l_na2 ) .or. & + retain_absorber(ip_nao, l_nao ) .or. & + retain_absorber(ip_naoh, l_naoh ) .or. & + retain_absorber(ip_koh, l_koh ) .or. & + retain_absorber(ip_hminus, l_hminus ) .or. & + retain_absorber(ip_ps, l_ps ) .or. & + retain_absorber(ip_po, l_po ) .or. & + retain_absorber(ip_pn, l_pn ) .or. & + retain_absorber(ip_ch3sh, l_ch3sh ) .or. & + retain_absorber(ip_ch3s, l_ch3s ) .or. & + retain_absorber(ip_c2h6s, l_c2h6s ) .or. & + retain_absorber(ip_c2h6s2, l_c2h6s2 ) .or. & + retain_absorber(ip_c3h4, l_c3h4 ) .or. & + retain_absorber(ip_c4h3, l_c4h3 ) .or. & + retain_absorber(ip_sih4, l_sih4 ) .or. & + retain_absorber(ip_s2, l_s2 ) .or. & + retain_absorber(ip_sf6, l_sf6 ) .or. & + retain_absorber(ip_cs2, l_cs2 ) .or. & + retain_absorber(ip_s8, l_s8 ) .or. & + retain_absorber(ip_cn, l_cn ) .or. & + retain_absorber(ip_ch3cl, l_ch3cl ) .or. & + retain_absorber(ip_ch3f, l_ch3f ) .or. & + retain_absorber(ip_ch3br, l_ch3br )) then l_retain_absorb(i)=.true. end if end do diff --git a/src/radiance_core/def_control.F90 b/src/radiance_core/def_control.F90 index 70245e2..d3c443d 100644 --- a/src/radiance_core/def_control.F90 +++ b/src/radiance_core/def_control.F90 @@ -144,6 +144,8 @@ MODULE def_control ! Flag for absorption by nitrogen LOGICAL :: l_ar = .FALSE. ! Flag for absorption by argon + LOGICAL :: l_air = .FALSE. +! Flag for absorption by dry air LOGICAL :: l_o = .FALSE. ! Flag for absorption by atomic oxygen LOGICAL :: l_n = .FALSE. @@ -184,8 +186,8 @@ MODULE def_control ! Flag for absorption by OSO-S LOGICAL :: l_h2s = .FALSE. ! Flag for absorption by Hydrogen sulphide - LOGICAL :: l_cocs = .FALSE. -! Flag for absorption by Carbonyl sulphide + LOGICAL :: l_ocs = .FALSE. +! Flag for absorption by carbonyl sulphide LOGICAL :: l_ch3cho = .FALSE. ! Flag for absorption by Acetaldehyde LOGICAL :: l_ch3ooh = .FALSE. @@ -210,6 +212,92 @@ MODULE def_control ! Flag for absorption by peroxyacetyl nitrate (PAN) LOGICAL :: l_ch3ono2 = .FALSE. ! Flag for absorption by methylnitrate + LOGICAL :: l_c2h3 = .FALSE. +! Flag for absorption by vinyl radical + LOGICAL :: l_c2h4 = .FALSE. +! Flag for absorption by ethylene + LOGICAL :: l_oh = .FALSE. +! Flag for absorption by hydroxyl radical + LOGICAL :: l_hco = .FALSE. +! Flag for absorption by formyl radical + LOGICAL :: l_n2o4 = .FALSE. +! Flag for absorption by dinitrogen tetroxide + LOGICAL :: l_c2n2 = .FALSE. +! Flag for absorption by cyanogen + LOGICAL :: l_n2h4 = .FALSE. +! Flag for absorption by hydrazine + LOGICAL :: l_n2o3 = .FALSE. +! Flag for absorption by dinitrogen trioxide + LOGICAL :: l_si = .FALSE. +! Flag for absorption by silicon + LOGICAL :: l_sio = .FALSE. +! Flag for absorption by silicon monoxide + LOGICAL :: l_sio2 = .FALSE. +! Flag for absorption by silicon dioxide + LOGICAL :: l_mg = .FALSE. +! Flag for absorption by atomic magnesium + LOGICAL :: l_mg2 = .FALSE. +! Flag for absorption by magnesium dimer + LOGICAL :: l_mgo = .FALSE. +! Flag for absorption by magnesium oxide + LOGICAL :: l_tio2 = .FALSE. +! Flag for absorption by titanium dioxide + LOGICAL :: l_fe = .FALSE. +! Flag for absorption by atomic iron + LOGICAL :: l_feo = .FALSE. +! Flag for absorption by iron(ii) oxide + LOGICAL :: l_ca = .FALSE. +! Flag for absorption by calcium + LOGICAL :: l_cao = .FALSE. +! Flag for absorption by calcium oxide + LOGICAL :: l_alo = .FALSE. +! Flag for absorption by aluminium monoxide + LOGICAL :: l_na2 = .FALSE. +! Flag for absorption by disodium + LOGICAL :: l_nao = .FALSE. +! Flag for absorption by sodium oxide + LOGICAL :: l_naoh = .FALSE. +! Flag for absorption by sodium hydroxide + LOGICAL :: l_koh = .FALSE. +! Flag for absorption by potassium hydroxide + LOGICAL :: l_hminus = .FALSE. +! Flag for absorption by hydride anion + LOGICAL :: l_ps = .FALSE. +! Flag for absorption by phosphorus sulfide + LOGICAL :: l_po = .FALSE. +! Flag for absorption by phosphorus monoxide + LOGICAL :: l_pn = .FALSE. +! Flag for absorption by phosphorus nitride + LOGICAL :: l_ch3sh = .FALSE. +! Flag for absorption by methanethiol + LOGICAL :: l_ch3s = .FALSE. +! Flag for absorption by methylthiyl radical + LOGICAL :: l_c2h6s = .FALSE. +! Flag for absorption by dimethyl sulfide + LOGICAL :: l_c2h6s2 = .FALSE. +! Flag for absorption by dimethyl disulfide + LOGICAL :: l_c3h4 = .FALSE. +! Flag for absorption by propyne/allene + LOGICAL :: l_c4h3 = .FALSE. +! Flag for absorption by butadiynyl radical + LOGICAL :: l_sih4 = .FALSE. +! Flag for absorption by silane + LOGICAL :: l_s2 = .FALSE. +! Flag for absorption by disulfur + LOGICAL :: l_sf6 = .FALSE. +! Flag for absorption by sulfur hexafluoride + LOGICAL :: l_cs2 = .FALSE. +! Flag for absorption by carbon disulfide + LOGICAL :: l_s8 = .FALSE. +! Flag for absorption by octasulfur + LOGICAL :: l_cn = .FALSE. +! Flag for absorption by cyanogen radical + LOGICAL :: l_ch3cl = .FALSE. +! Flag for absorption by methyl chloride + LOGICAL :: l_ch3f = .FALSE. +! Flag for absorption by methyl fluoride + LOGICAL :: l_ch3br = .FALSE. +! Flag for absorption by methyl bromide LOGICAL :: l_include_gas(npd_gases) = .FALSE. ! Flags to treat radiative effect of gases diff --git a/src/radiance_core/gas_list_pcf.F90 b/src/radiance_core/gas_list_pcf.F90 index b2718dc..66c09bc 100644 --- a/src/radiance_core/gas_list_pcf.F90 +++ b/src/radiance_core/gas_list_pcf.F90 @@ -20,7 +20,7 @@ MODULE gas_list_pcf INTEGER, PRIVATE :: i -INTEGER, PARAMETER :: npd_gases = 75 +INTEGER, PARAMETER :: npd_gases = 110 ! Number of indexed gases INTEGER, PARAMETER :: IP_h2o = 1 @@ -173,6 +173,76 @@ MODULE gas_list_pcf ! Identifier for hydrazine INTEGER, PARAMETER :: IP_n2o3 = 75 ! Identifier for dinitrogen trioxide +INTEGER, PARAMETER :: IP_si = 76 +! Identifier for silicon +INTEGER, PARAMETER :: IP_sio = 77 +! Identifier for silicon monoxide +INTEGER, PARAMETER :: IP_sio2 = 78 +! Identifier for silicon dioxide +INTEGER, PARAMETER :: IP_mg = 79 +! Identifier for atomic magnesium +INTEGER, PARAMETER :: IP_mg2 = 80 +! Identifier for magnesium dimer +INTEGER, PARAMETER :: IP_mgo = 81 +! Identifier for magnesium oxide +INTEGER, PARAMETER :: IP_tio2 = 82 +! Identifier for titanium dioxide +INTEGER, PARAMETER :: IP_fe = 83 +! Identifier for atomic iron +INTEGER, PARAMETER :: IP_feo = 84 +! Identifier for iron(ii) oxide +INTEGER, PARAMETER :: IP_ca = 85 +! Identifier for calcium +INTEGER, PARAMETER :: IP_cao = 86 +! Identifier for calcium oxide +INTEGER, PARAMETER :: IP_alo = 87 +! Identifier for aluminium monoxide +INTEGER, PARAMETER :: IP_na2 = 88 +! Identifier for disodium +INTEGER, PARAMETER :: IP_nao = 89 +! Identifier for sodium oxide +INTEGER, PARAMETER :: IP_naoh = 90 +! Identifier for sodium hydroxide +INTEGER, PARAMETER :: IP_koh = 91 +! Identifier for potassium hydroxide +INTEGER, PARAMETER :: IP_hminus = 92 +! Identifier for hydride anion +INTEGER, PARAMETER :: IP_ps = 93 +! Identifier for phosphorus sulfide +INTEGER, PARAMETER :: IP_po = 94 +! Identifier for phosphorus monoxide +INTEGER, PARAMETER :: IP_pn = 95 +! Identifier for phosphorus nitride +INTEGER, PARAMETER :: IP_ch3sh = 96 +! Identifier for methanethiol +INTEGER, PARAMETER :: IP_ch3s = 97 +! Identifier for methylthiyl radical +INTEGER, PARAMETER :: IP_c2h6s = 98 +! Identifier for dimethyl sulfide +INTEGER, PARAMETER :: IP_c2h6s2 = 99 +! Identifier for dimethyl disulfide +INTEGER, PARAMETER :: IP_c3h4 = 100 +! Identifier for propyne +INTEGER, PARAMETER :: IP_c4h3 = 101 +! Identifier for butadiynyl radical +INTEGER, PARAMETER :: IP_sih4 = 102 +! Identifier for silane +INTEGER, PARAMETER :: IP_s2 = 103 +! Identifier for disulfur +INTEGER, PARAMETER :: IP_sf6 = 104 +! Identifier for sulfur hexafluoride +INTEGER, PARAMETER :: IP_cs2 = 105 +! Identifier for carbon disulfide +INTEGER, PARAMETER :: IP_s8 = 106 +! Identifier for octasulfur +INTEGER, PARAMETER :: IP_cn = 107 +! Identifier for cyanogen radical +INTEGER, PARAMETER :: IP_ch3cl = 108 +! Identifier for methyl chloride +INTEGER, PARAMETER :: IP_ch3f = 109 +! Identifier for methyl fluoride +INTEGER, PARAMETER :: IP_ch3br = 110 +! Identifier for methyl bromide ! Column headers for reading data in raw_input @@ -195,7 +265,16 @@ MODULE gas_list_pcf 'C2H5CHO ', 'HOCH2CHO ', 'C2H5COCH3 ', 'MVK ', & 'MACR ', 'PAN ', 'CH3ONO2 ', 'C2H3 ', & 'C2H4 ', 'OH ', 'HCO ', 'N2O4 ', & - 'C2N2 ', 'N2H4 ', 'N2O3 '/) + 'C2N2 ', 'N2H4 ', 'N2O3 ', & + 'Si ', 'SiO ', 'SiO2 ', 'Mg ', & + 'Mg2 ', 'MgO ', 'TiO2 ', 'Fe ', & + 'FeO ', 'Ca ', 'CaO ', 'AlO ', & + 'Na2 ', 'NaO ', 'NaOH ', 'KOH ', & + 'H- ', 'PS ', 'PO ', 'PN ', & + 'CH3SH ', 'CH3S ', 'C2H6S ', 'C2H6S2 ', & + 'C3H4 ', 'C4H3 ', 'SiH4 ', 'S2 ', & + 'SF6 ', 'CS2 ', 'S8 ', 'CN ', & + 'CH3Cl ', 'CH3F ', 'CH3Br ' /) ! File suffixes CHARACTER (LEN=12), PARAMETER :: gas_suffix(npd_gases) = (/ & @@ -217,7 +296,16 @@ MODULE gas_list_pcf 'c2h5cho ', 'hoch2cho ', 'c2h5coch3 ', 'mvk ', & 'macr ', 'pan ', 'ch3ono2 ', 'c2h3 ', & 'c2h4 ', 'oh ', 'hco ', 'n2o4 ', & - 'c2n2 ', 'n2h4 ', 'n2o3 '/) + 'c2n2 ', 'n2h4 ', 'n2o3 ', & + 'si ', 'sio ', 'sio2 ', 'mg ', & + 'mg2 ', 'mgo ', 'tio2 ', 'fe ', & + 'feo ', 'ca ', 'cao ', 'alo ', & + 'na2 ', 'nao ', 'naoh ', 'koh ', & + 'hminus ', 'ps ', 'po ', 'pn ', & + 'ch3sh ', 'ch3s ', 'c2h6s ', 'c2h6s2 ', & + 'c3h4 ', 'c4h3 ', 'sih4 ', 's2 ', & + 'sf6 ', 'cs2 ', 's8 ', 'cn ', & + 'ch3cl ', 'ch3f ', 'ch3br ' /) ! Long names CHARACTER (LEN=20), PARAMETER :: name_absorb(npd_gases) = (/ & @@ -295,7 +383,42 @@ MODULE gas_list_pcf "Dinitrogen tetroxide", & "Cyanogen ", & "Hydrazine ", & - "Dinitrogen trioxide "/) + "Dinitrogen trioxide ", & + "Silicon ", & + "Silicon monoxide ", & + "Silicon dioxide ", & + "Atomic magnesium ", & + "Magnesium dimer ", & + "Magnesium oxide ", & + "Titanium dioxide ", & + "Iron ", & + "Iron(II) oxide ", & + "Calcium ", & + "Calcium oxide ", & + "Aluminium monoxide ", & + "Disodium ", & + "Sodium oxide ", & + "Sodium hydroxide ", & + "Potassium hydroxide ", & + "Hydride anion ", & + "Phosphorus sulfide ", & + "Phosphorus monoxide ", & + "Phosphorus nitride ", & + "Methanethiol ", & + "Methylthiyl radical ", & + "Dimethyl sulfide ", & + "Dimethyl disulfide ", & + "Propyne ", & + "Butadiynyl radical ", & + "Silane ", & + "Disulfur ", & + "Sulfur hexafluoride ", & + "Carbon disulfide ", & + "Octasulfur ", & + "Cyanogen radical ", & + "Methyl chloride ", & + "Methyl fluoride ", & + "Methyl bromide " /) ! Molecular weights taken from "General Inorganic Chemistry" @@ -375,7 +498,42 @@ MODULE gas_list_pcf 91.0110_RealK, & ! 72: N2O4 (from NIST) 52.0348_RealK, & ! 73: C2N2 (from NIST) 32.0452_RealK, & ! 74: N2H4 (from NIST) - 76.0116_RealK /) ! 75: N2O3 (from NIST) + 76.0116_RealK, & ! 75: N2O3 (from NIST) + 28.0855_RealK, & ! 76: Si (from NIST) + 44.0849_RealK, & ! 77: SiO (from NIST) + 60.0843_RealK, & ! 78: SiO2 (from NIST) + 24.3050_RealK, & ! 79: Mg (from NIST) + 48.6100_RealK, & ! 80: Mg2 (from NIST) + 40.3044_RealK, & ! 81: MgO (from NIST) + 79.8658_RealK, & ! 82: TiO2 (from NIST) + 55.8450_RealK, & ! 83: Fe (from NIST) + 71.8440_RealK, & ! 84: FeO (from NIST) + 40.0780_RealK, & ! 85: Ca (from NIST) + 56.0774_RealK, & ! 86: CaO (from NIST) + 42.9809_RealK, & ! 87: AlO (from NIST) + 45.9795_RealK, & ! 88: Na2 (from NIST) + 38.9892_RealK, & ! 89: NaO (from NIST) + 39.9971_RealK, & ! 90: NaOH (from NIST) + 56.1056_RealK, & ! 91: KOH (from NIST) + 1.0079_RealK, & ! 92: H- (from NIST) + 63.0389_RealK, & ! 93: PS (from NIST) + 46.9732_RealK, & ! 94: PO (from NIST) + 44.9805_RealK, & ! 95: PN (from NIST) + 48.1075_RealK, & ! 96: CH3SH (from NIST) + 47.0996_RealK, & ! 97: CH3S (from NIST) + 62.1343_RealK, & ! 98: C2H6S (from NIST) + 94.1994_RealK, & ! 99: C2H6S2 (from NIST) + 40.0638_RealK, & ! 100: C3H4 (from NIST) + 51.0717_RealK, & ! 101: C4H3 (from NIST) + 32.1173_RealK, & ! 102: SiH4 (from NIST) + 64.1302_RealK, & ! 103: S2 (from NIST) + 146.0554_RealK, & ! 104: SF6 (from NIST) + 76.1409_RealK, & ! 105: CS2 (from NIST) + 256.5208_RealK, & ! 106: S8 (from NIST) + 26.0174_RealK, & ! 107: CN (from NIST) + 50.4875_RealK, & ! 108: CH3Cl (from NIST) + 34.0329_RealK, & ! 109: CH3F (from NIST) + 94.9385_RealK /) ! 110: CH3Br (from NIST) ! Array of identifiers in HITRAN for each gas in the radiation code. @@ -454,7 +612,42 @@ MODULE gas_list_pcf 0, & ! 72: N2O4 48, & ! 73: C2N2 0 , & ! 74: N2H4 - 0 /) ! 75: N2H3 + 0, & ! 75: N2H3 + 0 , & ! 76: Si + 0 , & ! 77: SiO + 0 , & ! 78: SiO2 + 0 , & ! 79: Mg + 0 , & ! 80: Mg2 + 0 , & ! 81: MgO + 0 , & ! 82: TiO2 + 0 , & ! 83: Fe + 0 , & ! 84: FeO + 0 , & ! 85: Ca + 0 , & ! 86: CaO + 0 , & ! 87: AlO + 0 , & ! 88: Na2 + 0 , & ! 89: NaO + 0 , & ! 90: NaOH + 0 , & ! 91: KOH + 0 , & ! 92: H- + 0 , & ! 93: PS + 0 , & ! 94: PO + 0 , & ! 95: PN + 0 , & ! 96: CH3SH + 0 , & ! 97: CH3S + 0 , & ! 98: C2H6S + 0 , & ! 99: C2H6S2 + 0 , & ! 100: C3H4 + 0 , & ! 101: C4H3 + 0 , & ! 102: SiH4 + 0 , & ! 103: S2 + 30 , & ! 104: SF6 + 53 , & ! 105: CS2 + 0 , & ! 106: S8 + 0 , & ! 107: CN + 24 , & ! 108: CH3Cl + 51 , & ! 109: CH3F + 40 /) ! 110: CH3Br ! Maximum number of specified HITRAN isotopes for a given absorber INTEGER, PARAMETER :: npd_isotopes = 3 @@ -543,7 +736,42 @@ MODULE gas_list_pcf 0.0_RealK, & ! 72: N2O4 0.0_RealK, & ! 73: C2N2 0.0_RealK, & ! 74: N2H4 - 0.0_RealK /) ! 75: N2H3 + 0.0_RealK, & ! 75: N2H3 + 0.0_RealK, & ! 76: Si + 0.0_RealK, & ! 77: SiO + 0.0_RealK, & ! 78: SiO2 + 0.0_RealK, & ! 79: Mg + 0.0_RealK, & ! 80: Mg2 + 0.0_RealK, & ! 81: MgO + 0.0_RealK, & ! 82: TiO2 + 0.0_RealK, & ! 83: Fe + 0.0_RealK, & ! 84: FeO + 0.0_RealK, & ! 85: Ca + 0.0_RealK, & ! 86: CaO + 0.0_RealK, & ! 87: AlO + 0.0_RealK, & ! 88: Na2 + 0.0_RealK, & ! 89: NaO + 0.0_RealK, & ! 90: NaOH + 0.0_RealK, & ! 91: KOH + 0.0_RealK, & ! 92: H- + 0.0_RealK, & ! 93: PS + 0.0_RealK, & ! 94: PO + 0.0_RealK, & ! 95: PN + 0.0_RealK, & ! 96: CH3SH + 0.0_RealK, & ! 97: CH3S + 0.0_RealK, & ! 98: C2H6S + 0.0_RealK, & ! 99: C2H6S2 + 0.0_RealK, & ! 100: C3H4 + 0.0_RealK, & ! 101: C4H3 + 0.0_RealK, & ! 102: SiH4 + 0.0_RealK, & ! 103: S2 + 0.0_RealK, & ! 104: SF6 + 0.0_RealK, & ! 105: CS2 + 0.0_RealK, & ! 106: S8 + 0.0_RealK, & ! 107: CN + 0.0_RealK, & ! 108: CH3Cl + 0.0_RealK, & ! 109: CH3F + 0.0_RealK /) ! 110: CH3Br ! Minimum wavelength to consider Rayleigh scattering REAL (RealK), PARAMETER :: rayleigh_cutoff(npd_gases) = (/ & @@ -621,7 +849,42 @@ MODULE gas_list_pcf 0.0_RealK, & ! 72: N2O4 0.0_RealK, & ! 73: C2N2 0.0_RealK, & ! 74: N2H4 - 0.0_RealK /) ! 75: N2H3 + 0.0_RealK, & ! 75: N2H3 + 0.0_RealK, & ! 76: Si + 0.0_RealK, & ! 77: SiO + 0.0_RealK, & ! 78: SiO2 + 0.0_RealK, & ! 79: Mg + 0.0_RealK, & ! 80: Mg2 + 0.0_RealK, & ! 81: MgO + 0.0_RealK, & ! 82: TiO2 + 0.0_RealK, & ! 83: Fe + 0.0_RealK, & ! 84: FeO + 0.0_RealK, & ! 85: Ca + 0.0_RealK, & ! 86: CaO + 0.0_RealK, & ! 87: AlO + 0.0_RealK, & ! 88: Na2 + 0.0_RealK, & ! 89: NaO + 0.0_RealK, & ! 90: NaOH + 0.0_RealK, & ! 91: KOH + 0.0_RealK, & ! 92: H- + 0.0_RealK, & ! 93: PS + 0.0_RealK, & ! 94: PO + 0.0_RealK, & ! 95: PN + 0.0_RealK, & ! 96: CH3SH + 0.0_RealK, & ! 97: CH3S + 0.0_RealK, & ! 98: C2H6S + 0.0_RealK, & ! 99: C2H6S2 + 0.0_RealK, & ! 100: C3H4 + 0.0_RealK, & ! 101: C4H3 + 0.0_RealK, & ! 102: SiH4 + 0.0_RealK, & ! 103: S2 + 0.0_RealK, & ! 104: SF6 + 0.0_RealK, & ! 105: CS2 + 0.0_RealK, & ! 106: S8 + 0.0_RealK, & ! 107: CN + 0.0_RealK, & ! 108: CH3Cl + 0.0_RealK, & ! 109: CH3F + 0.0_RealK /) ! 110: CH3Br ! Maximum number of photolysis products for a given absorber INTEGER, PARAMETER :: npd_products = 9 @@ -838,7 +1101,7 @@ MODULE gas_list_pcf (blank, i=1, npd_products-8) , & ! CH3ONO2 "C2H3 -> C2H2 + H ", & (blank, i=1, npd_products-1) , & ! C2H3 - "C2H4 -> C2H2 + H2 ", & + "C2H4 -> C2H2 + H2 ", & "C2H4 -> C2H2 + H + H ", & (blank, i=1, npd_products-2) , & ! C2H4 "OH -> O(1D) + H ", & @@ -852,7 +1115,42 @@ MODULE gas_list_pcf "N2H4 -> N2H3 + H ", & (blank, i=1, npd_products-1) , & ! N2H4 "N2O3 -> NO2 + NO ", & - (blank, i=1, npd_products-1) & ! N2O3 + (blank, i=1, npd_products-1) , & ! N2O3 + (blank, i=1, npd_products), & ! Si + (blank, i=1, npd_products), & ! SiO + (blank, i=1, npd_products), & ! SiO2 + (blank, i=1, npd_products), & ! Mg + (blank, i=1, npd_products), & ! Mg2 + (blank, i=1, npd_products), & ! MgO + (blank, i=1, npd_products), & ! TiO2 + (blank, i=1, npd_products), & ! Fe + (blank, i=1, npd_products), & ! FeO + (blank, i=1, npd_products), & ! Ca + (blank, i=1, npd_products), & ! CaO + (blank, i=1, npd_products), & ! AlO + (blank, i=1, npd_products), & ! Na2 + (blank, i=1, npd_products), & ! NaO + (blank, i=1, npd_products), & ! NaOH + (blank, i=1, npd_products), & ! KOH + (blank, i=1, npd_products), & ! H- + (blank, i=1, npd_products), & ! PS + (blank, i=1, npd_products), & ! PO + (blank, i=1, npd_products), & ! PN + (blank, i=1, npd_products), & ! CH3SH + (blank, i=1, npd_products), & ! CH3S + (blank, i=1, npd_products), & ! C2H6S + (blank, i=1, npd_products), & ! C2H6S2 + (blank, i=1, npd_products), & ! C3H4 + (blank, i=1, npd_products), & ! C4H3 + (blank, i=1, npd_products), & ! SiH4 + (blank, i=1, npd_products), & ! S2 + (blank, i=1, npd_products), & ! SF6 + (blank, i=1, npd_products), & ! CS2 + (blank, i=1, npd_products), & ! S8 + (blank, i=1, npd_products), & ! CN + (blank, i=1, npd_products), & ! CH3Cl + (blank, i=1, npd_products), & ! CH3F + (blank, i=1, npd_products) & ! CH3Br ], shape=[npd_products, npd_gases] ) ! Name used by UKCA for photolysis pathway @@ -974,7 +1272,42 @@ MODULE gas_list_pcf (blank, i=0, npd_products), & ! N2O4 (blank, i=0, npd_products), & ! C2N2 (blank, i=0, npd_products), & ! N2H4 - (blank, i=0, npd_products) & ! N2O3 + (blank, i=0, npd_products), & ! N2O3 + (blank, i=0, npd_products), & ! Si + (blank, i=0, npd_products), & ! SiO + (blank, i=0, npd_products), & ! SiO2 + (blank, i=0, npd_products), & ! Mg + (blank, i=0, npd_products), & ! Mg2 + (blank, i=0, npd_products), & ! MgO + (blank, i=0, npd_products), & ! TiO2 + (blank, i=0, npd_products), & ! Fe + (blank, i=0, npd_products), & ! FeO + (blank, i=0, npd_products), & ! Ca + (blank, i=0, npd_products), & ! CaO + (blank, i=0, npd_products), & ! AlO + (blank, i=0, npd_products), & ! Na2 + (blank, i=0, npd_products), & ! NaO + (blank, i=0, npd_products), & ! NaOH + (blank, i=0, npd_products), & ! KOH + (blank, i=0, npd_products), & ! H- + (blank, i=0, npd_products), & ! PS + (blank, i=0, npd_products), & ! PO + (blank, i=0, npd_products), & ! PN + (blank, i=0, npd_products), & ! CH3SH + (blank, i=0, npd_products), & ! CH3S + (blank, i=0, npd_products), & ! C2H6S + (blank, i=0, npd_products), & ! C2H6S2 + (blank, i=0, npd_products), & ! C3H4 + (blank, i=0, npd_products), & ! C4H3 + (blank, i=0, npd_products), & ! SiH4 + (blank, i=0, npd_products), & ! S2 + (blank, i=0, npd_products), & ! SF6 + (blank, i=0, npd_products), & ! CS2 + (blank, i=0, npd_products), & ! S8 + (blank, i=0, npd_products), & ! CN + (blank, i=0, npd_products), & ! CH3Cl + (blank, i=0, npd_products), & ! CH3F + (blank, i=0, npd_products) & ! CH3Br ], shape=[npd_products+1, npd_gases] ) ! Threshold wavelength defining energy required for photolysis @@ -1075,13 +1408,13 @@ MODULE gas_list_pcf (0.0_RealK, i=1, npd_products), & ! H2S (0.0_RealK, i=1, npd_products), & ! Ar (0.0_RealK, i=1, npd_products), & ! Dry air - 91.25E-09_RealK, & ! O -> O+(4S) - 73.18E-09_RealK, & ! O -> O+(2D) - 66.58E-09_RealK, & ! O -> O+(2P) + 91.25E-09_RealK, & ! O -> O+(4S) + 73.18E-09_RealK, & ! O -> O+(2D) + 66.58E-09_RealK, & ! O -> O+(2P) 43.50E-09_RealK, & ! O -> O+(4Pe) 31.00E-09_RealK, & ! O -> O+(2Pe) - 24.80E-09_RealK, & ! O -> O++ - 12.179E-09_RealK, & ! O -> O+++ + 24.80E-09_RealK, & ! O -> O++ + 12.179E-09_RealK, & ! O -> O+++ (0.0_RealK, i=1, npd_products-7), & ! O 85.92E-09_RealK, & ! N -> N+ 28.00E-09_RealK, & ! N -> N++ @@ -1157,7 +1490,7 @@ MODULE gas_list_pcf 349.0E-09_RealK, & ! C2H5CHO -> CH3 + CH2CHO : JPL 19-5 (0.0_RealK, i=1, npd_products-4), & ! C2H5CHO 347.0E-09_RealK, & ! HOCH2CHO -> CH2OH + HCO - 1910.0E-09_RealK, & ! HOCH2CHO -> CH3OH + CO + 1910.0E-09_RealK, & ! HOCH2CHO -> CH3OH + CO 328.0E-09_RealK, & ! HOCH2CHO -> OH + CH2CHO 314.0E-09_RealK, & ! HOCH2CHO -> HOCH2CO + H (0.0_RealK, i=1, npd_products-4), & ! HOCH2CHO @@ -1176,32 +1509,67 @@ MODULE gas_list_pcf 1004.0E-09_RealK, & ! CH3C(O)OONO2 -> CH3C(O)OO + NO2 963.0E-09_RealK, & ! CH3C(O)OONO2 -> CH3C(O)O + NO3 (0.0_RealK, i=1, npd_products-2), & ! CH3C(O)OONO2 (PAN) : IUPAC P21 - 697.0E-09_RealK, & ! CH3ONO2 -> CH3O + NO2 - 1.0_RealK, & ! CH3ONO2 -> HCHO + HONO - 497.0E-09_RealK, & ! CH3ONO2 -> HCHO + NO + OH - 391.0E-09_RealK, & ! CH3ONO2 -> CH3ONO + O(3P) - 344.0E-09_RealK, & ! CH3ONO2 -> CH3 + NO3 - 294.0E-09_RealK, & ! CH3ONO2 -> CH2ONO2 + H + 697.0E-09_RealK, & ! CH3ONO2 -> CH3O + NO2 + 1.0_RealK, & ! CH3ONO2 -> HCHO + HONO + 497.0E-09_RealK, & ! CH3ONO2 -> HCHO + NO + OH + 391.0E-09_RealK, & ! CH3ONO2 -> CH3ONO + O(3P) + 344.0E-09_RealK, & ! CH3ONO2 -> CH3 + NO3 + 294.0E-09_RealK, & ! CH3ONO2 -> CH2ONO2 + H 250.0E-09_RealK, & ! CH3ONO2 -> CH3O + NO + O(3P) - 241.0E-09_RealK, & ! CH3ONO2 -> CH3ONO + O(1D) + 241.0E-09_RealK, & ! CH3ONO2 -> CH3ONO + O(1D) (0.0_RealK, i=1, npd_products-8), & ! CH3ONO2 : JPL 19-5 - 237.0E-09_RealK, & ! C2H3 -> C2H2 + H + 237.0E-09_RealK, & ! C2H3 -> C2H2 + H (0.0_RealK, i=1, npd_products-1), & ! C2H3 : Venot 2012-highest non zero qy 720.0E-09_RealK, & ! C2H4 -> C2H2 + H2 - 196.0E-09_RealK, & ! C2H4 -> C2H2 + H + H + 196.0E-09_RealK, & ! C2H4 -> C2H2 + H + H (0.0_RealK, i=1, npd_products-2), & ! C2H4 : Huebner 92 - 511.4E-09_RealK, & ! OH -> O(1D) + H + 511.4E-09_RealK, & ! OH -> O(1D) + H (0.0_RealK, i=1, npd_products-1), & ! OH : Huebner 1992 - 229.0E-09_RealK, & ! HCO -> H + CO + 229.0E-09_RealK, & ! HCO -> H + CO (0.0_RealK, i=1, npd_products-1), & ! HCO : Venot 2012-highest non zero xsc - 453.0E-09_RealK, & ! N2O4 -> NO2 + NO2 + 453.0E-09_RealK, & ! N2O4 -> NO2 + NO2 (0.0_RealK, i=1, npd_products-1), & ! N2O4 : Venot 2012-highest non zero xsc - 224.0E-09_RealK, & ! C2N2 -> C2 + N2 + 224.0E-09_RealK, & ! C2N2 -> C2 + N2 (0.0_RealK, i=1, npd_products-1), & ! C2N2 : Venot 2012-highest non zero xsc 290.0E-09_RealK, & ! N2H4 -> N2H3 + H (0.0_RealK, i=1, npd_products-1), & ! N2H4 : Venot 2012-highest non zero xsc 398.0E-09_RealK, & ! N2O3 -> NO2 + NO - (0.0_RealK, i=1, npd_products-1) & ! N2O3 : Venot 2012-highest non zero xsc + (0.0_RealK, i=1, npd_products-1), & ! N2O3 : Venot 2012-highest non zero xsc + (0.0_RealK, i=1, npd_products), & ! Si + (0.0_RealK, i=1, npd_products), & ! SiO + (0.0_RealK, i=1, npd_products), & ! SiO2 + (0.0_RealK, i=1, npd_products), & ! Mg + (0.0_RealK, i=1, npd_products), & ! Mg2 + (0.0_RealK, i=1, npd_products), & ! MgO + (0.0_RealK, i=1, npd_products), & ! TiO2 + (0.0_RealK, i=1, npd_products), & ! Fe + (0.0_RealK, i=1, npd_products), & ! FeO + (0.0_RealK, i=1, npd_products), & ! Ca + (0.0_RealK, i=1, npd_products), & ! CaO + (0.0_RealK, i=1, npd_products), & ! AlO + (0.0_RealK, i=1, npd_products), & ! Na2 + (0.0_RealK, i=1, npd_products), & ! NaO + (0.0_RealK, i=1, npd_products), & ! NaOH + (0.0_RealK, i=1, npd_products), & ! KOH + (0.0_RealK, i=1, npd_products), & ! H- + (0.0_RealK, i=1, npd_products), & ! PS + (0.0_RealK, i=1, npd_products), & ! PO + (0.0_RealK, i=1, npd_products), & ! PN + (0.0_RealK, i=1, npd_products), & ! CH3SH + (0.0_RealK, i=1, npd_products), & ! CH3S + (0.0_RealK, i=1, npd_products), & ! C2H6S + (0.0_RealK, i=1, npd_products), & ! C2H6S2 + (0.0_RealK, i=1, npd_products), & ! C3H4 + (0.0_RealK, i=1, npd_products), & ! C4H3 + (0.0_RealK, i=1, npd_products), & ! SiH4 + (0.0_RealK, i=1, npd_products), & ! S2 + (0.0_RealK, i=1, npd_products), & ! SF6 + (0.0_RealK, i=1, npd_products), & ! CS2 + (0.0_RealK, i=1, npd_products), & ! S8 + (0.0_RealK, i=1, npd_products), & ! CN + (0.0_RealK, i=1, npd_products), & ! CH3Cl + (0.0_RealK, i=1, npd_products), & ! CH3F + (0.0_RealK, i=1, npd_products) & ! CH3Br ], shape=[npd_products, npd_gases] ) ! Unless otherwise stated, data comes from JPL publication No. 15-10: @@ -1217,6 +1585,6 @@ MODULE gas_list_pcf ! * PAN: P21: https://iupac-aeris.ipsl.fr/datasheets/pdf/P21.pdf ! * Venot 2012 : Venot et al (2012) DOI: 10.1051/0004-6361/201219310 ! * Lias 70 : Lias et al (1970) DOI: 10.1063/1.1673226 -! * Chang 2020 : Chang et al (2020) DOI: 10.1039/D0SC01746A +! * Chang 2020 : Chang et al (2020) DOI: 10.1039/D0SC01746A END MODULE gas_list_pcf diff --git a/version b/version index 0b28648..83b7e12 100644 --- a/version +++ b/version @@ -1 +1 @@ -2603.1 +2603.2