Skip to content
Open
Show file tree
Hide file tree
Changes from 5 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 CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
| mo-jmanners | James Manners | Met Office | 2025-12-18 |
| t00sa | Sam Clarke-Green | Met Office | 20226-03-02 |
| Pierre-siddall | Pierre Siddall | Met Office | 20226-03-16 |
| nichollsh | Harrison Nicholls | University of Cambridge | 2026-03-24 |
110 changes: 91 additions & 19 deletions src/interface_core/socrates_set_spectrum.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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_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_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_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_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

Expand All @@ -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
Expand Down Expand Up @@ -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. &
Expand Down Expand Up @@ -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
Expand Down
92 changes: 90 additions & 2 deletions src/radiance_core/def_control.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand All @@ -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
Expand Down
Loading