Skip to content

Commit 40e457b

Browse files
Merge pull request #3367 from CliMA/ck/manually_fuse
Manually fuse broadcast expressions in diag edmf
2 parents 59fd53d + 1b1d922 commit 40e457b

File tree

2 files changed

+45
-30
lines changed

2 files changed

+45
-30
lines changed

src/cache/diagnostic_edmf_precomputed_quantities.jl

+43-28
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,32 @@ function compute_u³ʲ_u³ʲ(
260260
return u³ʲ_u³ʲ
261261
end
262262

263+
function compute_ρaʲu³ʲ(
264+
J_halflevel,
265+
J_prev_level,
266+
J_prev_halflevel,
267+
ρaʲ_prev_level,
268+
entrʲ_prev_level,
269+
detrʲ_prev_level,
270+
u³ʲ_data_prev_halflevel,
271+
S_q_totʲ_prev_level,
272+
precip_model,
273+
)
274+
275+
ρaʲu³ʲ_data =
276+
(1 / J_halflevel) *
277+
(J_prev_halflevel * ρaʲ_prev_level * u³ʲ_data_prev_halflevel)
278+
279+
ρaʲu³ʲ_data +=
280+
(1 / J_halflevel) *
281+
(J_prev_level * ρaʲ_prev_level * (entrʲ_prev_level - detrʲ_prev_level))
282+
if precip_model isa Union{Microphysics0Moment, Microphysics1Moment}
283+
ρaʲu³ʲ_data +=
284+
(1 / J_halflevel) *
285+
(J_prev_level * ρaʲ_prev_level * S_q_totʲ_prev_level)
286+
end
287+
return ρaʲu³ʲ_data
288+
end
263289

264290
NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
265291
Y,
@@ -410,10 +436,13 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
410436
scale_height =
411437
CAP.R_d(params) * CAP.T_surf_ref(params) / CAP.grav(params)
412438

413-
if precip_model isa Union{Microphysics0Moment, Microphysics1Moment}
414-
S_q_totʲ_prev_level =
439+
S_q_totʲ_prev_level =
440+
if precip_model isa
441+
Union{Microphysics0Moment, Microphysics1Moment}
415442
Fields.field_values(Fields.level(ᶜS_q_totʲ, i - 1))
416-
end
443+
else
444+
Ref(nothing)
445+
end
417446
if precip_model isa Microphysics1Moment
418447
S_q_raiʲ_prev_level =
419448
Fields.field_values(Fields.level(ᶜS_q_raiʲ, i - 1))
@@ -597,37 +626,23 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
597626
local_geometry_prev_halflevel,
598627
),
599628
dz_prev_level,
600-
)
601-
@. detrʲ_prev_level = limit_detrainment(
602-
detrʲ_prev_level,
603-
draft_area(ρaʲ_prev_level, ρʲ_prev_level),
604629
dt,
605630
)
606631

607632
ρaʲu³ʲ_data = p.scratch.temp_data_level_2
608633
ρaʲu³ʲ_datamse = ρaʲu³ʲ_dataq_tot = p.scratch.temp_data_level_3
609634

610-
@. ρaʲu³ʲ_data =
611-
(1 / local_geometry_halflevel.J) * (
612-
local_geometry_prev_halflevel.J *
613-
ρaʲ_prev_level *
614-
u³ʲ_data_prev_halflevel
615-
)
616-
617-
@. ρaʲu³ʲ_data +=
618-
(1 / local_geometry_halflevel.J) * (
619-
local_geometry_prev_level.J *
620-
ρaʲ_prev_level *
621-
(entrʲ_prev_level - detrʲ_prev_level)
622-
)
623-
if precip_model isa Union{Microphysics0Moment, Microphysics1Moment}
624-
@. ρaʲu³ʲ_data +=
625-
(1 / local_geometry_halflevel.J) * (
626-
local_geometry_prev_level.J *
627-
ρaʲ_prev_level *
628-
S_q_totʲ_prev_level
629-
)
630-
end
635+
@. ρaʲu³ʲ_data = compute_ρaʲu³ʲ(
636+
local_geometry_halflevel.J,
637+
local_geometry_prev_level.J,
638+
local_geometry_prev_halflevel.J,
639+
ρaʲ_prev_level,
640+
entrʲ_prev_level,
641+
detrʲ_prev_level,
642+
u³ʲ_data_prev_halflevel,
643+
S_q_totʲ_prev_level,
644+
precip_model,
645+
)
631646

632647
@. u³ʲ_halflevel = ifelse(
633648
(

src/prognostic_equations/edmfx_entr_detr.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,8 @@ end
375375
limit_entrainment(entr::FT, a, w, dz) where {FT} =
376376
max(min(entr, FT(0.9) * w / dz), 0)
377377

378-
limit_detrainment(detr::FT, a, w, dz) where {FT} =
379-
max(min(detr, FT(0.9) * w / dz), 0)
378+
limit_detrainment(detr::FT, a, w, dz, dt) where {FT} =
379+
limit_detrainment(max(min(detr, FT(0.9) * w / dz), 0), a, dt)
380380

381381
function limit_turb_entrainment(dyn_entr::FT, turb_entr::FT, w, dz) where {FT}
382382
return max(min((FT(0.9) * w / dz) - dyn_entr, turb_entr), 0)

0 commit comments

Comments
 (0)