diff --git a/.buildkite/Manifest-v1.11.toml b/.buildkite/Manifest-v1.11.toml index f0e610c3bb..5d6e8d5dd2 100644 --- a/.buildkite/Manifest-v1.11.toml +++ b/.buildkite/Manifest-v1.11.toml @@ -1977,7 +1977,9 @@ version = "1.11.0" [[deps.RRTMGP]] deps = ["Adapt", "Artifacts", "ClimaComms", "DocStringExtensions", "Random"] -git-tree-sha1 = "56240e81cd9fa6dde6c860509cb88833920d0d99" +git-tree-sha1 = "fb35b62209fdf9c38a0f0d777c3cc2c5206a9fe1" +repo-rev = "zs/ck/aerosol" +repo-url = "https://github.com/CliMA/RRTMGP.jl.git" uuid = "a01a1ee8-cea4-48fc-987c-fc7878d79da1" version = "0.19.2" weakdeps = ["CUDA", "ClimaParams"] diff --git a/config/model_configs/sphere_aquaplanet_rhoe_nonequilmoist_allsky_gw_res.yml b/config/model_configs/sphere_aquaplanet_rhoe_nonequilmoist_allsky_gw_res.yml index efc013a042..79a75bc1bf 100644 --- a/config/model_configs/sphere_aquaplanet_rhoe_nonequilmoist_allsky_gw_res.yml +++ b/config/model_configs/sphere_aquaplanet_rhoe_nonequilmoist_allsky_gw_res.yml @@ -20,8 +20,8 @@ orographic_gravity_wave: "gfdl_restart" surface_setup: "DefaultMoninObukhov" prescribe_ozone: true reproducibility_test: true -prescribed_aerosols: ["CB1", "CB2", "SO4"] -toml: [toml/sphere_aquaplanet_1M.toml] +prescribed_aerosols: ["CB1", "CB2", "SO4", "DST01", "SSLT01"] +toml: [toml/sphere_aquaplanet_1m.toml] diagnostics: - short_name: [edt, evu, mmrso4, mmrbcpo, mmrbcpi, o3] reduction_time: average diff --git a/src/cache/tracer_cache.jl b/src/cache/tracer_cache.jl index 7aed0e53c3..a811202a7a 100644 --- a/src/cache/tracer_cache.jl +++ b/src/cache/tracer_cache.jl @@ -83,7 +83,7 @@ function tracer_cache(Y, atmos, prescribed_aerosol_names, start_date) reference_date = start_date, regridder_type = :InterpolationsRegridder, regridder_kwargs = (; extrapolation_bc), - method = LinearPeriodFillingInterpolation(Year(1)), + method = LinearInterpolation(PeriodicCalendar(Year(1), Date(2010))), ) for name in prescribed_aerosol_names ] diff --git a/src/callbacks/callbacks.jl b/src/callbacks/callbacks.jl index 9c6e3fa98c..5ac7f729b6 100644 --- a/src/callbacks/callbacks.jl +++ b/src/callbacks/callbacks.jl @@ -200,39 +200,17 @@ NVTX.@annotate function rrtmgp_model_callback!(integrator) if radiation_mode.aerosol_radiation ᶜΔz = Fields.Δz_field(Y.c) - ᶜ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 - 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), (:center_so4_column_mass_density, :SO4), (:center_bcpi_column_mass_density, :CB2), (:center_bcpo_column_mass_density, :CB1), diff --git a/src/parameterized_tendencies/radiation/RRTMGPInterface.jl b/src/parameterized_tendencies/radiation/RRTMGPInterface.jl index fa2c98dd3f..64d182ad4e 100644 --- a/src/parameterized_tendencies/radiation/RRTMGPInterface.jl +++ b/src/parameterized_tendencies/radiation/RRTMGPInterface.jl @@ -831,16 +831,18 @@ 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_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, - ) + ["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 for (i, name) in enumerate(aerosol_names) set_and_save!( diff --git a/src/parameterized_tendencies/radiation/radiation.jl b/src/parameterized_tendencies/radiation/radiation.jl index 65f8d4055c..747e1ffe07 100644 --- a/src/parameterized_tendencies/radiation/radiation.jl +++ b/src/parameterized_tendencies/radiation/radiation.jl @@ -247,10 +247,26 @@ function radiation_model_cache( 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_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