Skip to content

Commit 59fd53d

Browse files
Merge pull request #3366 from CliMA/ck/manually_fuse
Manually fuse some broadcast expressions in diagnostic edmf
2 parents a905ac9 + 4a528bc commit 59fd53d

File tree

1 file changed

+58
-54
lines changed

1 file changed

+58
-54
lines changed

src/cache/diagnostic_edmf_precomputed_quantities.jl

+58-54
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,51 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_bottom_bc!(
216216
return nothing
217217
end
218218

219+
function compute_u³ʲ_u³ʲ(
220+
u³ʲ_prev_halflevel,
221+
J_prev_halflevel,
222+
J_halflevel,
223+
J_prev_level,
224+
∇Φ³_data_prev_level,
225+
ρʲ_prev_level,
226+
ρ_prev_level,
227+
entrʲ_prev_level,
228+
turb_entrʲ_prev_level,
229+
u³⁰_data_prev_halflevel,
230+
nh_pressure³ʲ_data_prev_halflevel,
231+
)
232+
u³ʲ_u³ʲ =
233+
(1 / (J_halflevel^2)) *
234+
(J_prev_halflevel^2 * u³ʲ_prev_halflevel * u³ʲ_prev_halflevel)
235+
236+
u³ʲ_u³ʲ -=
237+
(1 / (J_halflevel^2)) * (
238+
J_prev_level^2 *
239+
2 *
240+
(
241+
∇Φ³_data_prev_level * (ρʲ_prev_level - ρ_prev_level) /
242+
ρʲ_prev_level
243+
)
244+
)
245+
246+
u³ʲ_u³ʲ +=
247+
(1 / (J_halflevel^2)) * (
248+
J_prev_level^2 *
249+
2 *
250+
(
251+
(entrʲ_prev_level + turb_entrʲ_prev_level) *
252+
u³⁰_data_prev_halflevel -
253+
(entrʲ_prev_level + turb_entrʲ_prev_level) * u³ʲ_prev_halflevel
254+
)
255+
)
256+
257+
u³ʲ_u³ʲ -=
258+
(1 / (J_halflevel^2)) *
259+
(J_prev_level^2 * 2 * nh_pressure³ʲ_data_prev_halflevel)
260+
return u³ʲ_u³ʲ
261+
end
262+
263+
219264
NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
220265
Y,
221266
p,
@@ -490,60 +535,19 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
490535
end
491536

492537
u³ʲ_datau³ʲ_data = p.scratch.temp_data_level
493-
# Using constant exponents in broadcasts allocate, so we use
494-
# local_geometry_halflevel.J * local_geometry_halflevel.J instead.
495-
# See ClimaCore.jl issue #1126.
496-
@. u³ʲ_datau³ʲ_data =
497-
(
498-
1 /
499-
(local_geometry_halflevel.J * local_geometry_halflevel.J)
500-
) * (
501-
local_geometry_prev_halflevel.J *
502-
local_geometry_prev_halflevel.J *
503-
u³ʲ_data_prev_halflevel *
504-
u³ʲ_data_prev_halflevel
505-
)
506-
507-
@. u³ʲ_datau³ʲ_data -=
508-
(
509-
1 /
510-
(local_geometry_halflevel.J * local_geometry_halflevel.J)
511-
) * (
512-
local_geometry_prev_level.J *
513-
local_geometry_prev_level.J *
514-
2 *
515-
(
516-
∇Φ³_data_prev_level * (ρʲ_prev_level - ρ_prev_level) /
517-
ρʲ_prev_level
518-
)
519-
)
520-
521-
@. u³ʲ_datau³ʲ_data +=
522-
(
523-
1 /
524-
(local_geometry_halflevel.J * local_geometry_halflevel.J)
525-
) * (
526-
local_geometry_prev_level.J *
527-
local_geometry_prev_level.J *
528-
2 *
529-
(
530-
(entrʲ_prev_level + turb_entrʲ_prev_level) *
531-
u³⁰_data_prev_halflevel -
532-
(entrʲ_prev_level + turb_entrʲ_prev_level) *
533-
u³ʲ_data_prev_halflevel
534-
)
535-
)
536-
537-
@. u³ʲ_datau³ʲ_data -=
538-
(
539-
1 /
540-
(local_geometry_halflevel.J * local_geometry_halflevel.J)
541-
) * (
542-
local_geometry_prev_level.J *
543-
local_geometry_prev_level.J *
544-
2 *
545-
nh_pressure³ʲ_data_prev_halflevel
546-
)
538+
@. u³ʲ_datau³ʲ_data = compute_u³ʲ_u³ʲ(
539+
u³ʲ_data_prev_halflevel,
540+
local_geometry_prev_halflevel.J,
541+
local_geometry_halflevel.J,
542+
local_geometry_prev_level.J,
543+
∇Φ³_data_prev_level,
544+
ρʲ_prev_level,
545+
ρ_prev_level,
546+
entrʲ_prev_level,
547+
turb_entrʲ_prev_level,
548+
u³⁰_data_prev_halflevel,
549+
nh_pressure³ʲ_data_prev_halflevel,
550+
)
547551

548552
# get u³ʲ to calculate divergence term for detrainment,
549553
# u³ʲ will be clipped later after we get area fraction

0 commit comments

Comments
 (0)