Skip to content

Commit 0d9e127

Browse files
Start using columnwise
1 parent 660894d commit 0d9e127

File tree

1 file changed

+110
-1
lines changed

1 file changed

+110
-1
lines changed

src/prognostic_equations/remaining_tendency.jl

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,118 @@ NVTX.@annotate function hyperdiffusion_tendency!(Yₜ, Yₜ_lim, Y, p, t)
1010
apply_hyperdiffusion_tendency!(Yₜ, Y, p, t)
1111
end
1212

13+
prognostic_nt(::Val{names}, tends...) where {names} =
14+
NamedTuple{names}(tends)
15+
16+
function ᶜremaining_tendency(ᶜY, ᶠY, p, t)
17+
names = propertynames(ᶜY)
18+
tends = (
19+
ᶜremaining_tendency_ρ(ᶜY, ᶠY, p, t)...,
20+
ᶜremaining_tendency_uₕ(ᶜY, ᶠY, p, t)...,
21+
ᶜremaining_tendency_ρe_tot(ᶜY, ᶠY, p, t)...,
22+
ᶜremaining_tendency_ρq_tot(ᶜY, ᶠY, p, t)...,
23+
ᶜremaining_tendency_ρq_liq(ᶜY, ᶠY, p, t)...,
24+
ᶜremaining_tendency_ρq_ice(ᶜY, ᶠY, p, t)...,
25+
ᶜremaining_tendency_ρq_rai(ᶜY, ᶠY, p, t)...,
26+
ᶜremaining_tendency_ρq_sno(ᶜY, ᶠY, p, t)...,
27+
ᶜremaining_tendency_sfc(ᶜY, ᶠY, p, t)...,
28+
ᶜremaining_tendency_sgsʲs(ᶜY, ᶠY, p, t)...,
29+
)
30+
return lazy.(prognostic_nt.(Val(names), tends...))
31+
end
32+
function ᶠremaining_tendency(ᶜY, ᶠY, p, t)
33+
names = propertynames(ᶠY)
34+
tends = (
35+
ᶠremaining_tendency_u₃(ᶜY, ᶠY, p, t)...,
36+
ᶠremaining_tendency_sgsʲs(ᶜY, ᶠY, p, t)...,
37+
)
38+
return lazy.(prognostic_nt.(Val(names), tends...))
39+
end
40+
41+
function ᶜremaining_tendency_ρ(ᶜY, ᶠY, p, t)
42+
in propertynames(ᶜY) || return ()
43+
∑tendencies = zero(eltype(ᶜY.ρ))
44+
return (;ρ=∑tendencies)
45+
end
46+
function ᶜremaining_tendency_uₕ(ᶜY, ᶠY, p, t)
47+
:uₕ in propertynames(ᶜY) || return ()
48+
∑tendencies = zero(eltype(ᶜY.uₕ))
49+
return (;uₕ=∑tendencies)
50+
end
51+
function ᶜremaining_tendency_ρe_tot(ᶜY, ᶠY, p, t)
52+
:ρe_tot in propertynames(ᶜY) || return ()
53+
∑tendencies = zero(eltype(ᶜY.ρe_tot))
54+
return (;ρe_tot=∑tendencies)
55+
end
56+
function ᶜremaining_tendency_ρq_tot(ᶜY, ᶠY, p, t)
57+
:ρq_tot in propertynames(ᶜY) || return ()
58+
∑tendencies = zero(eltype(ᶜY.ρq_tot))
59+
return (;ρq_tot=∑tendencies)
60+
end
61+
function ᶜremaining_tendency_ρq_liq(ᶜY, ᶠY, p, t)
62+
:ρq_liq in propertynames(ᶜY) || return ()
63+
∑tendencies = zero(eltype(ᶜY.ρq_liq))
64+
return (;ρq_liq=∑tendencies)
65+
end
66+
function ᶜremaining_tendency_ρq_ice(ᶜY, ᶠY, p, t)
67+
:ρq_ice in propertynames(ᶜY) || return ()
68+
∑tendencies = zero(eltype(ᶜY.ρq_ice))
69+
return (;ρq_ice=∑tendencies)
70+
end
71+
function ᶜremaining_tendency_ρq_rai(ᶜY, ᶠY, p, t)
72+
:ρq_rai in propertynames(ᶜY) || return ()
73+
∑tendencies = zero(eltype(ᶜY.ρq_rai))
74+
return (;ρq_rai=∑tendencies)
75+
end
76+
function ᶜremaining_tendency_ρq_sno(ᶜY, ᶠY, p, t)
77+
:ρq_sno in propertynames(ᶜY) || return ()
78+
∑tendencies = zero(eltype(ᶜY.ρq_sno))
79+
return (;ρq_sno=∑tendencies)
80+
end
81+
function ᶜremaining_tendency_sfc(ᶜY, ᶠY, p, t)
82+
:sfc in propertynames(ᶜY) || return ()
83+
∑tendencies = zero(eltype(ᶜY.sfc))
84+
return (;sfc=∑tendencies)
85+
end
86+
function ᶜremaining_tendency_sgsʲs(ᶜY, ᶠY, p, t)
87+
:sgsʲs in propertynames(ᶜY) || return ()
88+
∑tendencies = zero(eltype(ᶜY.sgsʲs))
89+
return (;sgsʲs=∑tendencies)
90+
end
91+
function ᶠremaining_tendency_u₃(ᶜY, ᶠY, p, t)
92+
:u₃ in propertynames(ᶠY) || return ()
93+
∑tendencies = zero(eltype(ᶠY.u₃))
94+
return (;u₃=∑tendencies)
95+
end
96+
function ᶠremaining_tendency_sgsʲs(ᶜY, ᶠY, p, t)
97+
:sgsʲs in propertynames(ᶠY) || return ()
98+
∑tendencies = zero(eltype(ᶠY.sgsʲs))
99+
return (;sgsʲs=∑tendencies)
100+
end
101+
102+
13103
NVTX.@annotate function remaining_tendency!(Yₜ, Yₜ_lim, Y, p, t)
14104
Yₜ_lim .= zero(eltype(Yₜ_lim))
15-
Yₜ .= zero(eltype(Yₜ))
105+
device = ClimaComms.device(axes(Y.c))
106+
(localmem_lg, localmem_state) = if device isa ClimaComms.CUDADevice
107+
Val(false), Val(true)
108+
else
109+
Val(false), Val(false)
110+
end
111+
p_kernel = (;)
112+
Operators.columnwise!(
113+
device,
114+
ᶜremaining_tendency,
115+
ᶠremaining_tendency,
116+
Yₜ.c,
117+
Yₜ.f,
118+
Y.c,
119+
Y.f,
120+
p_kernel,
121+
t,
122+
localmem_lg,
123+
localmem_state
124+
)
16125
horizontal_tracer_advection_tendency!(Yₜ_lim, Y, p, t)
17126
fill_with_nans!(p)
18127
horizontal_advection_tendency!(Yₜ, Y, p, t)

0 commit comments

Comments
 (0)