@@ -11,6 +11,7 @@ import ClimaCore:
1111 Spaces,
1212 Utilities
1313
14+ import LazyBroadcast: lazy
1415using OrdinaryDiffEqSSPRK: ODEProblem, solve, SSPRK33
1516using ClimaCorePlots
1617using Plots
@@ -121,15 +122,14 @@ for (fn, mesh) in zip(("sin", "step"), (mesh_sin, mesh_step))
121122 UB = Operators. UpwindBiasedProductC2F ()
122123 ∂ = Operators. DivergenceF2C ()
123124 left_center = Fields. level (θ, 1 )
125+ θ_top = Fields. level (θ, Fields. nlevels (θ))
126+ θ_top_m1 = Fields. level (θ, Fields. nlevels (θ) - 1 )
124127 right_center_left_biased_grad =
125- Geometry. Covariant3Vector .(
126- Fields. level (θ, Fields. nlevels (θ)) .-
127- Fields. level (θ, Fields. nlevels (θ) - 1 )
128- )
128+ @. lazy (Geometry. Covariant3Vector (θ_top - θ_top_m1))
129129 right_gradient_extrapolate = Operators. SetGradient (right_center_left_biased_grad)
130- left_gradient_extrapolate = Operators . SetGradient (
131- Geometry. Covariant3Vector .(Fields . level (θ, 2 ) . - left_center),
132- )
130+ θ_2 = Fields . level (θ, 2 )
131+ _left_lazy_grad2 = @. lazy ( Geometry. Covariant3Vector (θ_2 - left_center))
132+ left_gradient_extrapolate = Operators . SetGradient (_left_lazy_grad2 )
133133 gradc2f_fcc = Operators. GradientC2F (
134134 left = left_gradient_extrapolate,
135135 right = right_gradient_extrapolate,
@@ -144,13 +144,14 @@ for (fn, mesh) in zip(("sin", "step"), (mesh_sin, mesh_step))
144144 # use the advection operator
145145 function tendency3! (dθ, θ, _, t)
146146 left_center = Fields. level (θ, 1 )
147+ θ_top = Fields. level (θ, Fields. nlevels (θ))
148+ θ_top_m1 = Fields. level (θ, Fields. nlevels (θ) - 1 )
147149 right_center_left_biased_grad =
148- Geometry. Covariant3Vector .(
149- Fields. level (θ, Fields. nlevels (θ)) .-
150- Fields. level (θ, Fields. nlevels (θ) - 1 )
151- )
150+ @. lazy (Geometry. Covariant3Vector (θ_top - θ_top_m1))
152151 left_gradient =
153- Operators. SetGradient (@. Geometry. Covariant3Vector (2 * (left_center - sin (- t))))
152+ Operators. SetGradient (
153+ @. lazy (Geometry. Covariant3Vector (2 * (left_center - sin (- t))))
154+ )
154155 right_gradient = Operators. SetGradient (right_center_left_biased_grad)
155156 gradc2f = Operators. GradientC2F (left = left_gradient, right = right_gradient)
156157 interpf2c = Operators. InterpolateF2C ()
@@ -160,20 +161,21 @@ for (fn, mesh) in zip(("sin", "step"), (mesh_sin, mesh_step))
160161 # use the advection operator
161162 function tendency4! (dθ, θ, _, t)
162163 left_center = Fields. level (θ, 1 )
164+ θ_top = Fields. level (θ, Fields. nlevels (θ))
165+ θ_top_m1 = Fields. level (θ, Fields. nlevels (θ) - 1 )
163166 right_center_left_biased_grad =
164- Geometry. Covariant3Vector .(
165- Fields. level (θ, Fields. nlevels (θ)) .-
166- Fields. level (θ, Fields. nlevels (θ) - 1 )
167- )
167+ @. lazy (Geometry. Covariant3Vector (θ_top - θ_top_m1))
168168 left_gradient =
169- Operators. SetGradient (@. Geometry. Covariant3Vector (2 * (left_center - sin (- t))))
169+ Operators. SetGradient (
170+ @. lazy (Geometry. Covariant3Vector (2 * (left_center - sin (- t))))
171+ )
170172 right_gradient_extrapolate = Operators. SetGradient (right_center_left_biased_grad)
171173 gradc2f =
172174 Operators. GradientC2F (left = left_gradient, right = right_gradient_extrapolate)
173175 interpf2c = Operators. InterpolateF2C ()
174- left_gradient_extrapolate = Operators . SetGradient (
175- Geometry. Covariant3Vector .(Fields . level (θ, 2 ) . - left_center),
176- )
176+ θ_2 = Fields . level (θ, 2 )
177+ _left_lazy_grad4 = @. lazy ( Geometry. Covariant3Vector (θ_2 - left_center))
178+ left_gradient_extrapolate = Operators . SetGradient (_left_lazy_grad4 )
177179 gradc2f_fcc = Operators. GradientC2F (
178180 left = left_gradient_extrapolate,
179181 right = right_gradient_extrapolate,
0 commit comments