Skip to content

Commit 1f3b502

Browse files
committed
lazy thermo vars
1 parent 91d4650 commit 1f3b502

13 files changed

+140
-89
lines changed

src/cache/cloud_fraction.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ NVTX.@annotate function set_cloud_fraction!(
6262
TD.PhasePartition(thermo_params, ᶜts).ice,
6363
)
6464
else
65-
q_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
66-
q_ice = @. lazy(specific(Y.c.ρq_ice, Y.c.ρ))
65+
q_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
66+
q_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
6767
@. cloud_diagnostics_tuple =
6868
make_named_tuple(ifelse(q_liq + q_ice > 0, 1, 0), q_liq, q_ice)
6969
end

src/cache/diagnostic_edmf_precomputed_quantities.jl

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,9 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_bottom_bc!(
105105
turbconv_params = CAP.turbconv_params(params)
106106
ᶜts = p.precomputed.ᶜts #TODO replace
107107

108-
q_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
109-
ᶜe_tot = @. lazy(specific(Y.c.ρe_tot, Y.c.ρ))
110-
ᶜh_tot = @. lazy(
111-
TD.total_specific_enthalpy(
112-
thermo_params,
113-
ᶜts,
114-
ᶜe_tot,
115-
),
116-
)
108+
q_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
109+
ᶜe_tot = ᶜspecific(Y.c.ρe_tot, Y.c.ρ)
110+
ᶜh_tot = @. lazy(TD.total_specific_enthalpy(thermo_params, ᶜts, ᶜe_tot))
117111

118112
ρ_int_level = Fields.field_values(Fields.level(Y.c.ρ, 1))
119113
uₕ_int_level = Fields.field_values(Fields.level(Y.c.uₕ, 1))
@@ -338,8 +332,8 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
338332

339333

340334
if microphysics_model isa Microphysics1Moment
341-
q_rai = @. lazy(specific(Y.c.ρq_rai, Y.c.ρ))
342-
q_sno = @. lazy(specific(Y.c.ρq_sno, Y.c.ρ))
335+
q_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
336+
q_sno = ᶜspecific(Y.c.ρq_sno, Y.c.ρ)
343337
end
344338

345339
thermo_params = CAP.thermodynamics_params(params)
@@ -359,7 +353,7 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
359353
Fields.field_values(Fields.level(Fields.coordinate_field(Y.f).z, half))
360354

361355
# integral
362-
q_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
356+
q_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
363357
ᶜh_tot = @. lazy(
364358
TD.total_specific_enthalpy(
365359
thermo_params,
@@ -1112,7 +1106,7 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_env_precipita
11121106
(; ᶜts, ᶜSqₜᵖ⁰) = p.precomputed
11131107

11141108
# Environment precipitation sources (to be applied to grid mean)
1115-
ᶜq_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
1109+
ᶜq_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
11161110
@. ᶜSqₜᵖ⁰ = q_tot_0M_precipitation_sources(
11171111
thermo_params,
11181112
microphys_0m_params,

src/cache/precipitation_precomputed_quantities.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ function set_precipitation_velocities!(
112112
cm2p = CAP.microphysics_2m_params(p.params)
113113
thp = CAP.thermodynamics_params(p.params)
114114

115-
q_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
116-
q_ice = @. lazy(specific(Y.c.ρq_ice, Y.c.ρ))
117-
q_rai = @. lazy(specific(Y.c.ρq_rai, Y.c.ρ))
118-
q_sno = @. lazy(specific(Y.c.ρq_sno, Y.c.ρ))
115+
q_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
116+
q_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
117+
q_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
118+
q_sno = ᶜspecific(Y.c.ρq_sno, Y.c.ρ)
119119

120120
# compute the precipitation terminal velocity [m/s]
121121
# TODO sedimentation of snow is based on the 1M scheme
@@ -289,11 +289,11 @@ function set_precipitation_cache!(Y, p, ::Microphysics1Moment, _)
289289
(; ᶜts, ᶜwᵣ, ᶜwₛ, ᶜu) = p.precomputed
290290
(; ᶜSqₗᵖ, ᶜSqᵢᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ) = p.precomputed
291291

292-
q_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
293-
q_rai = @. lazy(specific(Y.c.ρq_rai, Y.c.ρ))
294-
q_sno = @. lazy(specific(Y.c.ρq_sno, Y.c.ρ))
295-
q_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
296-
q_ice = @. lazy(specific(Y.c.ρq_ice, Y.c.ρ))
292+
q_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
293+
q_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
294+
q_sno = ᶜspecific(Y.c.ρq_sno, Y.c.ρ)
295+
q_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
296+
q_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
297297

298298
ᶜSᵖ = p.scratch.ᶜtemp_scalar
299299
ᶜSᵖ_snow = p.scratch.ᶜtemp_scalar_2
@@ -367,10 +367,10 @@ function set_precipitation_cache!(Y, p, ::Microphysics2Moment, _)
367367
(; ᶜSqₗᵖ, ᶜSqᵢᵖ, ᶜSqᵣᵖ, ᶜSqₛᵖ) = p.precomputed
368368
(; ᶜSnₗᵖ, ᶜSnᵣᵖ) = p.precomputed
369369

370-
q_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
371-
q_rai = @. lazy(specific(Y.c.ρq_rai, Y.c.ρ))
372-
n_liq = @. lazy(specific(Y.c.ρn_liq, Y.c.ρ))
373-
n_rai = @. lazy(specific(Y.c.ρn_rai, Y.c.ρ))
370+
q_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
371+
q_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
372+
n_liq = ᶜspecific(Y.c.ρn_liq, Y.c.ρ)
373+
n_rai = ᶜspecific(Y.c.ρn_rai, Y.c.ρ)
374374

375375
ᶜSᵖ = p.scratch.ᶜtemp_scalar
376376
ᶜS₂ᵖ = p.scratch.ᶜtemp_scalar_2
@@ -484,10 +484,10 @@ function set_precipitation_surface_fluxes!(
484484
sfc_ρ = @. lazy(int_ρ * int_J / sfc_J)
485485

486486
# Constant extrapolation to surface, consistent with simple downwinding
487-
ᶜq_rai = @. lazy(specific(Y.c.ρq_rai, Y.c.ρ))
488-
ᶜq_sno = @. lazy(specific(Y.c.ρq_sno, Y.c.ρ))
489-
ᶜq_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
490-
ᶜq_ice = @. lazy(specific(Y.c.ρq_ice, Y.c.ρ))
487+
ᶜq_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
488+
ᶜq_sno = ᶜspecific(Y.c.ρq_sno, Y.c.ρ)
489+
ᶜq_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
490+
ᶜq_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
491491
sfc_qᵣ = Fields.Field(
492492
Fields.field_values(Fields.level(Base.materialize(ᶜq_rai), 1)),
493493
sfc_space,

src/cache/precomputed_quantities.jl

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -373,29 +373,84 @@ function thermo_state(
373373
return get_ts(ρ, p, θ, e_int, q_tot, q_pt)
374374
end
375375

376+
function ᶜthermo_state(
377+
thermo_params;
378+
ρ = nothing,
379+
p = nothing,
380+
θ = nothing,
381+
e_int = nothing,
382+
q_tot = nothing,
383+
q_pt = nothing,
384+
)
385+
386+
get_ts(ρ, ::Nothing, θ, ::Nothing, ::Nothing, ::Nothing) =
387+
TD.PhaseDry_ρθ(thermo_params, ρ, θ)
388+
get_ts(ρ, ::Nothing, θ, ::Nothing, q_tot, ::Nothing) =
389+
TD.PhaseEquil_ρθq(thermo_params, ρ, θ, q_tot)
390+
get_ts(ρ, ::Nothing, θ, ::Nothing, ::Nothing, q_pt) =
391+
TD.PhaseNonEquil_ρθq(thermo_params, ρ, θ, q_pt)
392+
get_ts(ρ, ::Nothing, ::Nothing, e_int, ::Nothing, ::Nothing) =
393+
TD.PhaseDry_ρe(thermo_params, ρ, e_int)
394+
get_ts(ρ, ::Nothing, ::Nothing, e_int, q_tot, ::Nothing) =
395+
TD.PhaseEquil_ρeq(
396+
thermo_params,
397+
ρ,
398+
e_int,
399+
q_tot,
400+
3,
401+
eltype(thermo_params)(0.003),
402+
)
403+
get_ts(ρ, ::Nothing, ::Nothing, e_int, ::Nothing, q_pt) =
404+
TD.PhaseNonEquil(thermo_params, e_int, ρ, q_pt)
405+
get_ts(::Nothing, p, θ, ::Nothing, ::Nothing, ::Nothing) =
406+
TD.PhaseDry_pθ(thermo_params, p, θ)
407+
get_ts(::Nothing, p, θ, ::Nothing, q_tot, ::Nothing) =
408+
TD.PhaseEquil_pθq(thermo_params, p, θ, q_tot)
409+
get_ts(::Nothing, p, θ, ::Nothing, ::Nothing, q_pt) =
410+
TD.PhaseNonEquil_pθq(thermo_params, p, θ, q_pt)
411+
get_ts(::Nothing, p, ::Nothing, e_int, ::Nothing, ::Nothing) =
412+
TD.PhaseDry_pe(thermo_params, p, e_int)
413+
get_ts(::Nothing, p, ::Nothing, e_int, q_tot, ::Nothing) =
414+
TD.PhaseEquil_peq(thermo_params, p, e_int, q_tot)
415+
get_ts(::Nothing, p, ::Nothing, e_int, ::Nothing, q_pt) =
416+
TD.PhaseNonEquil_peq(thermo_params, p, e_int, q_pt)
417+
418+
return @. lazy(get_ts(ρ, p, θ, e_int, q_tot, q_pt))
419+
end
420+
376421
function thermo_vars(moisture_model, microphysics_model, Y_c, K, Φ)
377-
e_tot = materialize(@. lazy(specific(Y_c.ρe_tot, Y_c.ρ)))
378-
energy_var = (; e_int = e_tot - K - Φ)
422+
e_tot = ᶜspecific(Y_c.ρe_tot, Y_c.ρ)
423+
energy_var = (; e_int = @. lazy(e_tot - K - Φ))
379424

380425
moisture_var = if moisture_model isa DryModel
381426
(;)
382427
elseif moisture_model isa EquilMoistModel
383-
q_tot = materialize(@. lazy(specific(Y_c.ρq_tot, Y_c.ρ)))
428+
q_tot = ᶜspecific(Y_c.ρq_tot, Y_c.ρ)
384429
(; q_tot)
385430
elseif moisture_model isa NonEquilMoistModel
386-
q_tot = materialize(@. lazy(specific(Y_c.ρq_tot, Y_c.ρ)))
387-
q_liq = materialize(@. lazy(specific(Y_c.ρq_liq, Y_c.ρ)))
388-
q_ice = materialize(@. lazy(specific(Y_c.ρq_ice, Y_c.ρ)))
389-
q_rai = materialize(@. lazy(specific(Y_c.ρq_rai, Y_c.ρ)))
390-
q_sno = materialize(@. lazy(specific(Y_c.ρq_sno, Y_c.ρ)))
391-
q_pt_args = (q_tot, q_liq + q_rai, q_ice + q_sno)
392-
(; q_pt = TD.PhasePartition(q_pt_args...))
431+
q_tot = ᶜspecific(Y_c.ρq_tot, Y_c.ρ)
432+
q_liq = ᶜspecific(Y_c.ρq_liq, Y_c.ρ)
433+
q_ice = ᶜspecific(Y_c.ρq_ice, Y_c.ρ)
434+
q_rai = ᶜspecific(Y_c.ρq_rai, Y_c.ρ)
435+
q_sno = ᶜspecific(Y_c.ρq_sno, Y_c.ρ)
436+
(;
437+
q_pt = @. lazy(
438+
TD.PhasePartition(q_tot, q_liq + q_rai, q_ice + q_sno),
439+
)
440+
)
393441
end
394442
return (; energy_var..., moisture_var...)
395443
end
396444

397445
ts_gs(thermo_params, moisture_model, microphysics_model, ᶜY, K, Φ, ρ) =
398-
thermo_state(
446+
ᶜthermo_state(
447+
thermo_params;
448+
thermo_vars(moisture_model, microphysics_model, ᶜY, K, Φ)...,
449+
ρ,
450+
)
451+
452+
ᶜts_gs(thermo_params, moisture_model, microphysics_model, ᶜY, K, Φ, ρ) =
453+
ᶜthermo_state(
399454
thermo_params;
400455
thermo_vars(moisture_model, microphysics_model, ᶜY, K, Φ)...,
401456
ρ,
@@ -467,7 +522,7 @@ NVTX.@annotate function set_implicit_precomputed_quantities!(Y, p, t)
467522
# @. ᶜK += Y.c.sgs⁰.ρatke / Y.c.ρ
468523
# TODO: We should think more about these increments before we use them.
469524
end
470-
@. ᶜts = ts_gs(thermo_args..., Y.c, ᶜK, ᶜΦ, Y.c.ρ)
525+
ᶜts .= ᶜts_gs(thermo_args..., Y.c, ᶜK, ᶜΦ, Y.c.ρ)
471526
@. ᶜp = TD.air_pressure(thermo_params, ᶜts)
472527

473528
if turbconv_model isa PrognosticEDMFX

src/cache/prognostic_edmf_precomputed_quantities.jl

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_bottom_bc!(
201201

202202
# ... and the first interior point for EDMFX ᶜq_totʲ.
203203

204-
ᶜq_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
204+
ᶜq_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
205205
ᶜq_tot_int_val =
206206
Fields.field_values(Fields.level(Base.materialize(ᶜq_tot), 1))
207207
ᶜq_totʲ_int_val = Fields.field_values(Fields.level(ᶜq_totʲ, 1))
@@ -220,31 +220,27 @@ NVTX.@annotate function set_prognostic_edmf_precomputed_quantities_bottom_bc!(
220220
p.atmos.microphysics_model isa Microphysics1Moment
221221
# TODO - any better way to define the cloud and precip tracer flux?
222222

223-
ᶜq_liq = @.lazy(specific(Y.c.ρq_liq, Y.c.ρ))
224-
ᶜq_ice = @.lazy(specific(Y.c.ρq_ice, Y.c.ρ))
225-
ᶜq_rai = @.lazy(specific(Y.c.ρq_rai, Y.c.ρ))
226-
ᶜq_sno = @.lazy(specific(Y.c.ρq_sno, Y.c.ρ))
227-
ᶜq_liq_int_val = Fields.field_values(
228-
Fields.level(Base.materialize(ᶜq_liq), 1),
229-
)
223+
ᶜq_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
224+
ᶜq_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
225+
ᶜq_rai = ᶜspecific(Y.c.ρq_rai, Y.c.ρ)
226+
ᶜq_sno = ᶜspecific(Y.c.ρq_sno, Y.c.ρ)
227+
ᶜq_liq_int_val =
228+
Fields.field_values(Fields.level(Base.materialize(ᶜq_liq), 1))
230229
ᶜq_liqʲ_int_val = Fields.field_values(Fields.level(ᶜq_liqʲ, 1))
231230
@. ᶜq_liqʲ_int_val = ᶜq_liq_int_val
232231

233-
ᶜq_ice_int_val = Fields.field_values(
234-
Fields.level(Base.materialize(ᶜq_ice), 1),
235-
)
232+
ᶜq_ice_int_val =
233+
Fields.field_values(Fields.level(Base.materialize(ᶜq_ice), 1))
236234
ᶜq_iceʲ_int_val = Fields.field_values(Fields.level(ᶜq_iceʲ, 1))
237235
@. ᶜq_iceʲ_int_val = ᶜq_ice_int_val
238236

239-
ᶜq_rai_int_val = Fields.field_values(
240-
Fields.level(Base.materialize(ᶜq_rai), 1),
241-
)
237+
ᶜq_rai_int_val =
238+
Fields.field_values(Fields.level(Base.materialize(ᶜq_rai), 1))
242239
ᶜq_raiʲ_int_val = Fields.field_values(Fields.level(ᶜq_raiʲ, 1))
243240
@. ᶜq_raiʲ_int_val = ᶜq_rai_int_val
244241

245-
ᶜq_sno_int_val = Fields.field_values(
246-
Fields.level(Base.materialize(ᶜq_sno), 1),
247-
)
242+
ᶜq_sno_int_val =
243+
Fields.field_values(Fields.level(Base.materialize(ᶜq_sno), 1))
248244
ᶜq_snoʲ_int_val = Fields.field_values(Fields.level(ᶜq_snoʲ, 1))
249245
@. ᶜq_snoʲ_int_val = ᶜq_sno_int_val
250246
end

src/diagnostics/Diagnostics.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import ..compute_gm_mixing_length!
6060
import ..horizontal_integral_at_boundary
6161
import ..ᶜρa⁰
6262
import ..ᶜspecific_tke
63+
import ..ᶜspecific_env_value
6364

6465
# We need the abbreviations for symbols like curl, grad, and so on
6566
include(joinpath("..", "utils", "abbreviations.jl"))

src/parameterized_tendencies/les_sgs_models/smagorinsky_lilly.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ function vertical_smagorinsky_lilly_tendency!(Yₜ, Y, p, t, ::SmagorinskyLilly)
135135
(; ᶜτ_smag, ᶠτ_smag, ᶠD_smag, sfc_conditions) = p.precomputed
136136
(; ρ_flux_uₕ, ρ_flux_h_tot) = sfc_conditions
137137
(; ᶜts) = p.precomputed
138+
thermo_params = CAP.thermodynamics_params(p.params)
138139

139140
# Define operators
140141
ᶠgradᵥ = Operators.GradientC2F() # apply BCs to ᶜdivᵥ, which wraps ᶠgradᵥ

src/prognostic_equations/advection.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,13 @@ NVTX.@annotate function explicit_vertical_advection_tendency!(Yₜ, Y, p, t)
194194
turbconv_model isa EDOnlyEDMFX ? p.precomputed.ᶠu³ :
195195
p.precomputed.ᶠu³⁰
196196
) : nothing
197-
ᶜρa⁰_vals = advect_tke ? (n > 0 ? (ᶜρa⁰(Y.c, p)) : lazy(Y.c.ρ)) : nothing
197+
ᶜρa⁰_vals = advect_tke ? (n > 0 ? (ᶜρa⁰(Y.c, p)) : @. lazy(Y.c.ρ)) : nothing
198198
ᶜρ⁰ = if advect_tke
199199
if n > 0
200-
(; ᶜts⁰) = p.precomputed.ᶜts⁰
200+
(; ᶜts⁰) = p.precomputed
201201
@. lazy(TD.air_density(thermo_params, ᶜts⁰))
202202
else
203-
lazy(Y.c.ρ)
203+
@. lazy(Y.c.ρ)
204204
end
205205
else
206206
nothing
@@ -253,7 +253,7 @@ NVTX.@annotate function explicit_vertical_advection_tendency!(Yₜ, Y, p, t)
253253
end
254254

255255
if !(p.atmos.moisture_model isa DryModel) && tracer_upwinding != Val(:none)
256-
ᶜq_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
256+
ᶜq_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
257257
vtt = vertical_transport(ᶜρ, ᶠu³, ᶜq_tot, float(dt), tracer_upwinding)
258258
vtt_central = vertical_transport(ᶜρ, ᶠu³, ᶜq_tot, float(dt), Val(:none))
259259
@. Yₜ.c.ρq_tot += vtt - vtt_central

src/prognostic_equations/forcing/external_forcing.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ function external_forcing_tendency!(
405405
ᶜh_tot,
406406
Val{:first_order}(),
407407
)
408-
ᶜq_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
408+
ᶜq_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
409409
subsidence!(
410410
Yₜ.c.ρq_tot,
411411
Y.c.ρ,

src/prognostic_equations/forcing/subsidence.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,19 +107,19 @@ function subsidence_tendency!(Yₜ, Y, p, t, ::Subsidence)
107107
specific(Y.c.ρe_tot, Y.c.ρ),
108108
),
109109
)
110-
ᶜq_tot = @. lazy(specific(Y.c.ρq_tot, Y.c.ρ))
110+
ᶜq_tot = ᶜspecific(Y.c.ρq_tot, Y.c.ρ)
111111
subsidence!(Yₜ.c.ρe_tot, Y.c.ρ, ᶠsubsidence³, ᶜh_tot, Val{:first_order}())
112112
subsidence!(Yₜ.c.ρq_tot, Y.c.ρ, ᶠsubsidence³, ᶜq_tot, Val{:first_order}())
113113
if moisture_model isa NonEquilMoistModel
114-
ᶜq_liq = @. lazy(specific(Y.c.ρq_liq, Y.c.ρ))
114+
ᶜq_liq = ᶜspecific(Y.c.ρq_liq, Y.c.ρ)
115115
subsidence!(
116116
Yₜ.c.ρq_liq,
117117
Y.c.ρ,
118118
ᶠsubsidence³,
119119
ᶜq_liq,
120120
Val{:first_order}(),
121121
)
122-
ᶜq_ice = @. lazy(specific(Y.c.ρq_ice, Y.c.ρ))
122+
ᶜq_ice = ᶜspecific(Y.c.ρq_ice, Y.c.ρ)
123123
subsidence!(
124124
Yₜ.c.ρq_ice,
125125
Y.c.ρ,

0 commit comments

Comments
 (0)