Skip to content

Commit

Permalink
Merge pull request #627 from CliMA/ap/refs
Browse files Browse the repository at this point in the history
Use refs for long variable names
  • Loading branch information
anastasia-popova authored Mar 5, 2024
2 parents 7f73652 + a5780ed commit 7f0f85b
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 37 deletions.
56 changes: 28 additions & 28 deletions experiments/AMIP/components/atmosphere/climaatmos_init.jl
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ function get_atmos_config(coupler_dict)
end

function atmos_init(::Type{FT}, atmos_config_dict::Dict) where {FT}

# By passing `parsed_args` to `AtmosConfig`, `parsed_args` overwrites the default atmos config
atmos_config = CA.AtmosConfig(atmos_config_dict)
simulation = CA.get_simulation(atmos_config)
Expand All @@ -76,16 +75,27 @@ function atmos_init(::Type{FT}, atmos_config_dict::Dict) where {FT}
@warn("Running with ρe_int in coupled mode is not tested yet.", maxlog = 1)
end

# define shorter references for long variable names to increase readability
ρ_flux_h_tot = integrator.p.precomputed.sfc_conditions.ρ_flux_h_tot
ρ_flux_q_tot = integrator.p.precomputed.sfc_conditions.ρ_flux_q_tot
ᶠradiation_flux = integrator.p.radiation.ᶠradiation_flux
ρ_flux_uₕ = integrator.p.precomputed.sfc_conditions.ρ_flux_uₕ
col_integrated_rain = integrator.p.precipitation.col_integrated_rain
col_integrated_snow = integrator.p.precipitation.col_integrated_snow
ᶜS_ρq_tot = integrator.p.precipitation.ᶜS_ρq_tot
ᶜ3d_rain = integrator.p.precipitation.ᶜ3d_rain
ᶜ3d_snow = integrator.p.precipitation.ᶜ3d_snow

# set initial fluxes to zero
@. integrator.p.precomputed.sfc_conditions.ρ_flux_h_tot = Geometry.Covariant3Vector(FT(0.0))
@. integrator.p.precomputed.sfc_conditions.ρ_flux_q_tot = Geometry.Covariant3Vector(FT(0.0))
@. integrator.p.radiation.ᶠradiation_flux = Geometry.WVector(FT(0))
integrator.p.precomputed.sfc_conditions.ρ_flux_uₕ.components .= Ref(SMatrix{1, 2}([FT(0), FT(0)]))
integrator.p.precipitation.col_integrated_rain .= FT(0)
integrator.p.precipitation.col_integrated_snow .= FT(0)
integrator.p.precipitation.ᶜS_ρq_tot .= FT(0)
integrator.p.precipitation.ᶜ3d_rain .= FT(0)
integrator.p.precipitation.ᶜ3d_snow .= FT(0)
@. ρ_flux_h_tot = Geometry.Covariant3Vector(FT(0.0))
@. ρ_flux_q_tot = Geometry.Covariant3Vector(FT(0.0))
@. ᶠradiation_flux = Geometry.WVector(FT(0))
ρ_flux_uₕ.components .= Ref(SMatrix{1, 2}([FT(0), FT(0)]))
col_integrated_rain .= FT(0)
col_integrated_snow .= FT(0)
ᶜS_ρq_tot .= FT(0)
ᶜ3d_rain .= FT(0)
ᶜ3d_snow .= FT(0)

sim = ClimaAtmosSimulation(integrator.p.params, Y, spaces, integrator)

Expand Down Expand Up @@ -300,29 +310,19 @@ Extension of Interfacer.get_field to get the net TOA radiation, which is a sum o
upward and downward longwave and shortwave radiation.
"""
function get_field(atmos_sim::ClimaAtmosSimulation, ::Val{:F_radiative_TOA})
radiation = atmos_sim.integrator.p.radiation.radiation_model
FT = eltype(atmos_sim.integrator.u)
# save radiation source
if radiation != nothing
if atmos_sim.integrator.p.radiation.radiation_model != nothing
face_space = axes(atmos_sim.integrator.u.f)
nz_faces = length(Spaces.vertical_topology(face_space).mesh.faces)

LWd_TOA = Fields.level(
CA.RRTMGPI.array2field(FT.(atmos_sim.integrator.p.radiation.radiation_model.face_lw_flux_dn), face_space),
nz_faces - half,
)
LWu_TOA = Fields.level(
CA.RRTMGPI.array2field(FT.(atmos_sim.integrator.p.radiation.radiation_model.face_lw_flux_up), face_space),
nz_faces - half,
)
SWd_TOA = Fields.level(
CA.RRTMGPI.array2field(FT.(atmos_sim.integrator.p.radiation.radiation_model.face_sw_flux_dn), face_space),
nz_faces - half,
)
SWu_TOA = Fields.level(
CA.RRTMGPI.array2field(FT.(atmos_sim.integrator.p.radiation.radiation_model.face_sw_flux_up), face_space),
nz_faces - half,
)
(; face_lw_flux_dn, face_lw_flux_up, face_sw_flux_dn, face_sw_flux_up) =
atmos_sim.integrator.p.radiation.radiation_model

LWd_TOA = Fields.level(CA.RRTMGPI.array2field(FT.(face_lw_flux_dn), face_space), nz_faces - half)
LWu_TOA = Fields.level(CA.RRTMGPI.array2field(FT.(face_lw_flux_up), face_space), nz_faces - half)
SWd_TOA = Fields.level(CA.RRTMGPI.array2field(FT.(face_sw_flux_dn), face_space), nz_faces - half)
SWu_TOA = Fields.level(CA.RRTMGPI.array2field(FT.(face_sw_flux_up), face_space), nz_faces - half)

return @. -(LWd_TOA + SWd_TOA - LWu_TOA - SWu_TOA) # [W/m^2]
else
Expand Down
13 changes: 8 additions & 5 deletions experiments/AMIP/components/land/bucket_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ function make_land_domain(
@assert zlim[1] < zlim[2]
depth = zlim[2] - zlim[1]

radius = ClimaCore.Spaces.topology(atmos_boundary_space).mesh.domain.radius
nelements_horz = ClimaCore.Spaces.topology(atmos_boundary_space).mesh.ne
mesh = ClimaCore.Spaces.topology(atmos_boundary_space).mesh

radius = mesh.domain.radius
nelements_horz = mesh.ne
npolynomial =
ClimaCore.Spaces.Quadratures.polynomial_degree(ClimaCore.Spaces.quadrature_style(atmos_boundary_space))
nelements = (nelements_horz, nelements_vert)
Expand Down Expand Up @@ -79,9 +81,10 @@ reinit!(sim::BucketSimulation) = reinit!(sim.integrator)
# extensions required by FluxCalculator (partitioned fluxes)
function update_turbulent_fluxes_point!(sim::BucketSimulation, fields::NamedTuple, colidx::Fields.ColumnIndex)
(; F_turb_energy, F_turb_moisture) = fields
sim.integrator.p.bucket.turbulent_fluxes.shf[colidx] .= F_turb_energy
sim.integrator.p.bucket.turbulent_fluxes.vapor_flux[colidx] .=
F_turb_moisture ./ LP.ρ_cloud_liq(sim.model.parameters.earth_param_set)
turbulent_fluxes = sim.integrator.p.bucket.turbulent_fluxes
turbulent_fluxes.shf[colidx] .= F_turb_energy
earth_params = sim.model.parameters.earth_param_set
turbulent_fluxes.vapor_flux[colidx] .= F_turb_moisture ./ LP.ρ_cloud_liq(earth_params)
return nothing
end

Expand Down
8 changes: 4 additions & 4 deletions src/ConservationChecker.jl
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,14 @@ function check_conservation!(
for sim in model_sims
sim_name = Symbol(Interfacer.name(sim))
if sim isa Interfacer.AtmosModelSimulation
F_radiative_TOA = coupler_sim.fields.F_radiative_TOA
# save radiation source
parent(coupler_sim.fields.F_radiative_TOA) .= parent(Interfacer.get_field(sim, Val(:F_radiative_TOA)))
parent(F_radiative_TOA) .= parent(Interfacer.get_field(sim, Val(:F_radiative_TOA)))

if isempty(ccs.toa_net_source)
radiation_sources_accum = sum(coupler_sim.fields.F_radiative_TOA .* FT(coupler_sim.Δt_cpl)) # ∫ J / m^2 dA
radiation_sources_accum = sum(F_radiative_TOA .* FT(coupler_sim.Δt_cpl)) # ∫ J / m^2 dA
else
radiation_sources_accum =
sum(coupler_sim.fields.F_radiative_TOA .* FT(coupler_sim.Δt_cpl)) .+ ccs.toa_net_source[end] # ∫ J / m^2 dA
radiation_sources_accum = sum(F_radiative_TOA .* FT(coupler_sim.Δt_cpl)) .+ ccs.toa_net_source[end] # ∫ J / m^2 dA
end
push!(ccs.toa_net_source, radiation_sources_accum)

Expand Down

0 comments on commit 7f0f85b

Please sign in to comment.