@@ -619,39 +619,44 @@ function update_jacobian!(alg::ManualSparseJacobian, cache, Y, p, dtγ, t)
619619 FT = eltype (params)
620620 (; vertical_diffusion, smagorinsky_lilly) = p. atmos
621621 (; ᶜp) = p. precomputed
622+ ᶜK_u = p. scratch. ᶜtemp_scalar_4
623+ ᶜK_h = p. scratch. ᶜtemp_scalar_5
622624 if vertical_diffusion isa DecayWithHeightDiffusion
623- ᶜK_h = ᶜcompute_eddy_diffusivity_coefficient (Y. c. ρ, vertical_diffusion)
624- ᶜK_u = ᶜK_h
625+ ᶜK_h . = ᶜcompute_eddy_diffusivity_coefficient (Y. c. ρ, vertical_diffusion)
626+ ᶜK_u . = ᶜK_h
625627 elseif vertical_diffusion isa VerticalDiffusion
626- ᶜK_h = ᶜcompute_eddy_diffusivity_coefficient (Y. c. uₕ, ᶜp, vertical_diffusion)
627- ᶜK_u = ᶜK_h
628+ ᶜK_h . = ᶜcompute_eddy_diffusivity_coefficient (Y. c. uₕ, ᶜp, vertical_diffusion)
629+ ᶜK_u . = ᶜK_h
628630 elseif is_smagorinsky_vertical (smagorinsky_lilly)
629631 set_smagorinsky_lilly_precomputed_quantities! (Y, p, smagorinsky_lilly)
630- ᶜK_u = p. precomputed. ᶜνₜ_v
631- ᶜK_h = p. precomputed. ᶜD_v
632+ ᶜK_u . = p. precomputed. ᶜνₜ_v
633+ ᶜK_h . = p. precomputed. ᶜD_v
632634 elseif turbconv_model isa AbstractEDMF
633635 (; ᶜlinear_buoygrad, ᶜstrain_rate_norm) = p. precomputed
634636 ᶜtke⁰ = @. lazy (specific (Y. c. sgs⁰. ρatke, Y. c. ρ))
635637 ᶜmixing_length_field = p. scratch. ᶜtemp_scalar_3
636638 ᶜmixing_length_field .= ᶜmixing_length (Y, p)
637- ᶜK_u = @. lazy (eddy_viscosity (turbconv_params, ᶜtke⁰, ᶜmixing_length_field))
639+ @. ᶜK_u = eddy_viscosity (turbconv_params, ᶜtke⁰, ᶜmixing_length_field)
640+
638641 ᶜprandtl_nvec = @. lazy (
639642 turbulent_prandtl_number (params, ᶜlinear_buoygrad, ᶜstrain_rate_norm),
640643 )
641- ᶜK_h = @. lazy ( eddy_diffusivity (ᶜK_u, ᶜprandtl_nvec) )
644+ @. ᶜK_h = eddy_diffusivity (ᶜK_u, ᶜprandtl_nvec)
642645 end
643646
647+ ᶠρK_h = p. scratch. ᶠtemp_scalar
648+ @. ᶠρK_h = ᶠinterp (ᶜρ) * ᶠinterp (ᶜK_h)
644649 @. ᶜdiffusion_h_matrix =
645- ᶜadvdivᵥ_matrix () ⋅ DiagonalMatrixRow (ᶠinterp (ᶜρ) * ᶠinterp (ᶜK_h)) ⋅
646- ᶠgradᵥ_matrix ()
650+ ᶜadvdivᵥ_matrix () ⋅ DiagonalMatrixRow (ᶠρK_h) ⋅ ᶠgradᵥ_matrix ()
647651 if (
648652 MatrixFields. has_field (Y, @name (c. sgs⁰. ρatke)) ||
649653 ! isnothing (p. atmos. turbconv_model) ||
650654 ! disable_momentum_vertical_diffusion (p. atmos. vertical_diffusion)
651655 )
656+ ᶠρK_u = p. scratch. ᶠtemp_scalar
657+ @. ᶠρK_u = ᶠinterp (ᶜρ) * ᶠinterp (ᶜK_u)
652658 @. ᶜdiffusion_u_matrix =
653- ᶜadvdivᵥ_matrix () ⋅
654- DiagonalMatrixRow (ᶠinterp (ᶜρ) * ᶠinterp (ᶜK_u)) ⋅ ᶠgradᵥ_matrix ()
659+ ᶜadvdivᵥ_matrix () ⋅ DiagonalMatrixRow (ᶠρK_u) ⋅ ᶠgradᵥ_matrix ()
655660 end
656661
657662 ∂ᶜρe_tot_err_∂ᶜρ = matrix[@name (c. ρe_tot), @name (c. ρ)]
0 commit comments