Skip to content

Commit 78132f4

Browse files
committed
use existing scratch, use .= to avoid allocation
1 parent 80fcddb commit 78132f4

File tree

6 files changed

+18
-28
lines changed

6 files changed

+18
-28
lines changed

src/cache/cloud_fraction.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,8 @@ NVTX.@annotate function set_cloud_fraction!(
144144
# environment
145145
diagnostic_covariance_coeff = CAP.diagnostic_covariance_coeff(params)
146146

147-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
148-
ᶜmixing_length_lazy = mixing_length(Y, p)
149-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
147+
ᶜmixing_length = p.scratch.ᶜtemp_scalar
148+
ᶜmixing_length .= mixing_length(Y, p)
150149

151150
@. cloud_diagnostics_tuple = quad_loop(
152151
SG_quad,
@@ -202,9 +201,8 @@ NVTX.@annotate function set_cloud_fraction!(
202201
# environment
203202
diagnostic_covariance_coeff = CAP.diagnostic_covariance_coeff(params)
204203

205-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
206-
ᶜmixing_length_lazy = mixing_length(Y, p)
207-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
204+
ᶜmixing_length = p.scratch.ᶜtemp_scalar
205+
ᶜmixing_length .= mixing_length(Y, p)
208206

209207
@. cloud_diagnostics_tuple = quad_loop(
210208
SG_quad,

src/cache/temporary_quantities.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ function temporary_quantities(Y, atmos)
1818
ᶜtemp_scalar_3 = Fields.Field(FT, center_space),
1919
ᶜtemp_scalar_4 = Fields.Field(FT, center_space),
2020
ᶜtemp_scalar_5 = Fields.Field(FT, center_space),
21-
ᶜtemp_scalar_6 = Fields.Field(FT, center_space),
22-
ᶜtemp_scalar_7 = Fields.Field(FT, center_space),
2321
ᶠtemp_field_level = Fields.level(Fields.Field(FT, face_space), half),
2422
temp_field_level = Fields.level(Fields.Field(FT, center_space), 1),
2523
temp_field_level_2 = Fields.level(Fields.Field(FT, center_space), 1),

src/prognostic_equations/eddy_diffusion_closures.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -576,9 +576,8 @@ function mixing_length(Y, p, mixing_length_property = :master)
576576
ᶜdz = Fields.Δz_field(axes(Y.c))
577577
sfc_tke = Fields.level(ᶜtke⁰, 1)
578578

579-
ᶜprandtl_nvec_lazy = turbulent_prandtl_number(p)
580-
ᶜprandtl_nvec = p.scratch.ᶜtemp_scalar_7
581-
ᶜprandtl_nvec = Base.Broadcast.materialize(ᶜprandtl_nvec_lazy)
579+
ᶜprandtl_nvec = p.scratch.ᶜtemp_scalar_5
580+
ᶜprandtl_nvec .= ᶜturbulent_prandtl_number(p)
582581

583582
ᶜtke_exch = tke_exchange(Y, p)
584583

@@ -700,7 +699,7 @@ function turbulent_prandtl_number(params, ᶜN²_eff, ᶜstrain_rate_norm)
700699
end
701700

702701

703-
function turbulent_prandtl_number(p)
702+
function ᶜturbulent_prandtl_number(p)
704703
(; params) = p
705704
(; ᶜlinear_buoygrad, ᶜstrain_rate_norm) = p.precomputed
706705
return @. lazy(
@@ -890,6 +889,6 @@ end
890889

891890

892891
function eddy_diffusivity(p, K_u)
893-
ᶜprandtl_nvec = turbulent_prandtl_number(p)
892+
ᶜprandtl_nvec = ᶜturbulent_prandtl_number(p)
894893
return @. lazy(K_u / ᶜprandtl_nvec) # prandtl_nvec is already bounded by eps_FT and Pr_max
895894
end

src/prognostic_equations/edmfx_sgs_flux.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,8 @@ function edmfx_sgs_diffusive_flux_tendency!(
353353

354354
if p.atmos.edmfx_model.sgs_diffusive_flux isa Val{true}
355355

356-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
357-
ᶜmixing_length_lazy = mixing_length(Y, p)
358-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
356+
ᶜmixing_length = p.scratch.ᶜtemp_scalar_2
357+
ᶜmixing_length .= mixing_length(Y, p)
359358
ᶜK_u = eddy_viscosity(turbconv_params, ᶜtke⁰, ᶜmixing_length)
360359
ᶜK_h = eddy_diffusivity(p, ᶜK_u)
361360
ᶠρaK_h = p.scratch.ᶠtemp_scalar
@@ -458,9 +457,8 @@ function edmfx_sgs_diffusive_flux_tendency!(
458457

459458
if p.atmos.edmfx_model.sgs_diffusive_flux isa Val{true}
460459

461-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
462-
ᶜmixing_length_lazy = mixing_length(Y, p)
463-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
460+
ᶜmixing_length = p.scratch.ᶜtemp_scalar_2
461+
ᶜmixing_length .= mixing_length(Y, p)
464462
ᶜK_u = eddy_viscosity(turbconv_params, ᶜtke⁰, ᶜmixing_length)
465463
ᶜK_h = eddy_diffusivity(p, ᶜK_u)
466464

src/prognostic_equations/edmfx_tke.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ function edmfx_tke_tendency!(Yₜ, Y, p, t, turbconv_model::EDOnlyEDMFX)
2929
(; ᶜstrain_rate_norm, ᶜlinear_buoygrad, ᶜtke⁰) = p.precomputed
3030
turbconv_params = CAP.turbconv_params(p.params)
3131

32-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
33-
ᶜmixing_length_lazy = mixing_length(Y, p)
34-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
32+
ᶜmixing_length = p.scratch.ᶜtemp_scalar
33+
ᶜmixing_length .= mixing_length(Y, p)
3534
ᶜK_u = eddy_viscosity(turbconv_params, ᶜtke⁰, ᶜmixing_length)
3635
ᶜK_h = eddy_diffusivity(p, ᶜK_u)
3736

@@ -77,9 +76,8 @@ function edmfx_tke_tendency!(
7776

7877
if use_prognostic_tke(turbconv_model)
7978

80-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
81-
ᶜmixing_length_lazy = mixing_length(Y, p)
82-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
79+
ᶜmixing_length = p.scratch.ᶜtemp_scalar_2
80+
ᶜmixing_length .= mixing_length(Y, p)
8381
ᶜK_u = eddy_viscosity(turbconv_params, ᶜtke⁰, ᶜmixing_length)
8482
ᶜK_h = eddy_diffusivity(p, ᶜK_u)
8583

src/prognostic_equations/implicit/manual_sparse_jacobian.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,8 @@ function update_jacobian!(alg::ManualSparseJacobian, cache, Y, p, dtγ, t)
555555
ᶜK_u = ᶜK_h
556556
else
557557
(; ᶜtke⁰,) = p.precomputed
558-
ᶜmixing_length = p.scratch.ᶜtemp_scalar_6
559-
ᶜmixing_length_lazy = mixing_length(Y, p)
560-
ᶜmixing_length = Base.Broadcast.materialize(ᶜmixing_length_lazy)
558+
ᶜmixing_length = p.scratch.ᶜtemp_scalar_3
559+
ᶜmixing_length .= mixing_length(Y, p)
561560
ᶜK_u = eddy_viscosity(turbconv_params, ᶜtke⁰, ᶜmixing_length)
562561
ᶜK_h = eddy_diffusivity(p, ᶜK_u)
563562
end

0 commit comments

Comments
 (0)