Skip to content

Commit

Permalink
Support both RRTGMP 0.19 and 0.20
Browse files Browse the repository at this point in the history
  • Loading branch information
Sbozzolo committed Jan 31, 2025
1 parent c7f8ab7 commit 5a67df1
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 45 deletions.
4 changes: 3 additions & 1 deletion src/cache/tracer_cache.jl
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ function tracer_cache(Y, atmos, prescribed_aerosol_names, start_date)
reference_date = start_date,
regridder_type = :InterpolationsRegridder,
regridder_kwargs = (; extrapolation_bc),
method = LinearInterpolation(PeriodicCalendar(Year(1), Date(2010))),
method = LinearInterpolation(
PeriodicCalendar(Year(1), Date(2010)),
),
) for name in prescribed_aerosol_names
]

Expand Down
30 changes: 20 additions & 10 deletions src/callbacks/callbacks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -196,21 +196,31 @@ NVTX.@annotate function rrtmgp_model_callback!(integrator)
end
end

_update_some_aerosol_conc(Y, p)

if !(radiation_mode isa RRTMGPI.GrayRadiation)
if radiation_mode.aerosol_radiation
ᶜΔz = Fields.Δz_field(Y.c)

if pkgversion(RRTGMP) <= v"0.19.2"
more_aerosols = ()
else
more_aerosols = (
(:center_dust1_column_mass_density, :DST01),
(:center_dust2_column_mass_density, :DST02),
(:center_dust3_column_mass_density, :DST03),
(:center_dust4_column_mass_density, :DST04),
(:center_dust5_column_mass_density, :DST05),
(:center_ss1_column_mass_density, :SSLT01),
(:center_ss2_column_mass_density, :SSLT02),
(:center_ss3_column_mass_density, :SSLT03),
(:center_ss4_column_mass_density, :SSLT04),
(:center_ss5_column_mass_density, :SSLT05),
)
end

aerosol_names_pair = [
(:center_dust1_column_mass_density, :DST01),
(:center_dust2_column_mass_density, :DST02),
(:center_dust3_column_mass_density, :DST03),
(:center_dust4_column_mass_density, :DST04),
(:center_dust5_column_mass_density, :DST05),
(:center_ss1_column_mass_density, :SSLT01),
(:center_ss2_column_mass_density, :SSLT02),
(:center_ss3_column_mass_density, :SSLT03),
(:center_ss4_column_mass_density, :SSLT04),
(:center_ss5_column_mass_density, :SSLT05),
more_aerosols...,
(:center_so4_column_mass_density, :SO4),
(:center_bcpi_column_mass_density, :CB2),
(:center_bcpo_column_mass_density, :CB1),
Expand Down
45 changes: 45 additions & 0 deletions src/compat.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import ClimaCore
import ClimaUtilities
import ClimaCore: Domains, Spaces, Topologies
import RRTGMP

# To allow for backwards compatibility of ClimaCore:
if pkgversion(ClimaCore) < v"0.14.18"
Expand Down Expand Up @@ -95,3 +96,47 @@ else
WallTimeInfo = ClimaUtilities.OnlineLogging.WallTimeInfo
report_walltime = ClimaUtilities.OnlineLogging.report_walltime
end


if pkgversion(RRTGMP) <= v"0.19.2"
function _update_some_aerosol_conc(Y, p)
ᶜΔz = Fields.Δz_field(Y.c)
rrtgmp_model = p.atmos.radiation_model.rrtgmp_model
ᶜaero_conc = Fields.array2field(
rrtmgp_model.center_dust_column_mass_density,
axes(Y.c),
)
@. ᶜaero_conc = 0
for prescribed_aerosol_name in [:DST01, :DST02, :DST03, :DST04]
if prescribed_aerosol_name in
propertynames(p.tracers.prescribed_aerosols_field)
aerosol_field = getproperty(
p.tracers.prescribed_aerosols_field,
prescribed_aerosol_name,
)
@. ᶜaero_conc += aerosol_field * Y.c.ρ * ᶜΔz
end
end

ᶜaero_conc = Fields.array2field(
rrtmgp_model.center_ss_column_mass_density,
axes(Y.c),
)
@. ᶜaero_conc = 0
for prescribed_aerosol_name in [:SSLT01, :SSLT02, :SSLT03, :SSLT04]
if prescribed_aerosol_name in
propertynames(p.tracers.prescribed_aerosols_field)
aerosol_field = getproperty(
p.tracers.prescribed_aerosols_field,
prescribed_aerosol_name,
)
@. ᶜaero_conc += aerosol_field * Y.c.ρ * ᶜΔz
end
end
return nothing
end
else
function _update_some_aerosol_conc(_, _)
return nothing
end
end
39 changes: 34 additions & 5 deletions src/parameterized_tendencies/radiation/RRTMGPInterface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -831,18 +831,47 @@ function RRTMGPModel(
# See the lookup table in RRTMGP for the order of aerosols
aero_size = DA{FT}(undef, n_aerosol_sizes, nlay, ncol)
aero_mass = DA{FT}(undef, n_aerosols, nlay, ncol)
#aerosol_size_names = ["dust", "ss"]
aerosol_names =
["dust1", "ss1", "so4", "bcpi", "bcpo", "ocpi", "ocpo", "dust2", "dust3", "dust4", "dust5", "ss2", "ss3", "ss4", "ss5"]
for (i, name) in enumerate(aerosol_names)
if occursin("dust", name) || occursin("ss", name)

if pkgversion(RRTGMP) <= v"0.19.2"
aerosol_size_names = ["dust", "ss"]
aerosol_names =
["dust", "ss", "so4", "bcpi", "bcpo", "ocpi", "ocpo"]
for (i, name) in enumerate(aerosol_size_names)
set_and_save!(
view(aero_size, i, :, :),
"center_$(name)_radius",
t...,
dict,
)
end
else
aerosol_names = [
"dust1",
"ss1",
"so4",
"bcpi",
"bcpo",
"ocpi",
"ocpo",
"dust2",
"dust3",
"dust4",
"dust5",
"ss2",
"ss3",
"ss4",
"ss5",
]
for (i, name) in enumerate(aerosol_names)
if occursin("dust", name) || occursin("ss", name)
set_and_save!(
view(aero_size, i, :, :),
"center_$(name)_radius",
t...,
dict,
)
end
end
end
for (i, name) in enumerate(aerosol_names)
set_and_save!(
Expand Down
74 changes: 45 additions & 29 deletions src/parameterized_tendencies/radiation/radiation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -244,35 +244,51 @@ function radiation_model_cache(
end

if aerosol_radiation
kwargs = (;
kwargs...,
# assuming fixed aerosol radius
center_dust1_radius = 0.55,
center_dust2_radius = 1.4,
center_dust3_radius = 2.4,
center_dust4_radius = 4.5,
center_dust5_radius = 7.5,
center_ss1_radius = 0.55,
center_ss2_radius = 1.4,
center_ss3_radius = 2.4,
center_ss4_radius = 4.5,
center_ss5_radius = 7.5,
center_dust1_column_mass_density = NaN, # initialized in callback
center_dust2_column_mass_density = NaN, # initialized in callback
center_dust3_column_mass_density = NaN, # initialized in callback
center_dust4_column_mass_density = NaN, # initialized in callback
center_dust5_column_mass_density = NaN, # initialized in callback
center_ss1_column_mass_density = NaN, # initialized in callback
center_ss2_column_mass_density = NaN, # initialized in callback
center_ss3_column_mass_density = NaN, # initialized in callback
center_ss4_column_mass_density = NaN, # initialized in callback
center_ss5_column_mass_density = NaN, # initialized in callback
center_so4_column_mass_density = NaN, # initialized in callback
center_bcpi_column_mass_density = NaN, # initialized in callback
center_bcpo_column_mass_density = NaN, # initialized in callback
center_ocpi_column_mass_density = NaN, # initialized in callback
center_ocpo_column_mass_density = NaN, # initialized in callback
)
if pkgversion(RRTGMP) <= v"0.19.2"
kwargs = (;
kwargs...,
# assuming fixed aerosol radius
center_dust_radius = 0.55,
center_ss_radius = 11.5,
center_dust_column_mass_density = NaN, # initialized in callback
center_ss_column_mass_density = NaN, # initialized in callback
center_so4_column_mass_density = NaN, # initialized in callback
center_bcpi_column_mass_density = NaN, # initialized in callback
center_bcpo_column_mass_density = NaN, # initialized in callback
center_ocpi_column_mass_density = NaN, # initialized in callback
center_ocpo_column_mass_density = NaN, # initialized in callback
)
else
kwargs = (;
kwargs...,
# assuming fixed aerosol radius
center_dust1_radius = 0.55,
center_dust2_radius = 1.4,
center_dust3_radius = 2.4,
center_dust4_radius = 4.5,
center_dust5_radius = 7.5,
center_ss1_radius = 0.55,
center_ss2_radius = 1.4,
center_ss3_radius = 2.4,
center_ss4_radius = 4.5,
center_ss5_radius = 7.5,
center_dust1_column_mass_density = NaN, # initialized in callback
center_dust2_column_mass_density = NaN, # initialized in callback
center_dust3_column_mass_density = NaN, # initialized in callback
center_dust4_column_mass_density = NaN, # initialized in callback
center_dust5_column_mass_density = NaN, # initialized in callback
center_ss1_column_mass_density = NaN, # initialized in callback
center_ss2_column_mass_density = NaN, # initialized in callback
center_ss3_column_mass_density = NaN, # initialized in callback
center_ss4_column_mass_density = NaN, # initialized in callback
center_ss5_column_mass_density = NaN, # initialized in callback
center_so4_column_mass_density = NaN, # initialized in callback
center_bcpi_column_mass_density = NaN, # initialized in callback
center_bcpo_column_mass_density = NaN, # initialized in callback
center_ocpi_column_mass_density = NaN, # initialized in callback
center_ocpo_column_mass_density = NaN, # initialized in callback
)
end
end
end

Expand Down

0 comments on commit 5a67df1

Please sign in to comment.