@@ -42,20 +42,6 @@ Arguments:
42
42
"""
43
43
@inline specific (ρχ, ρ) = ρχ / ρ
44
44
45
- # ! format: off
46
- @inline specific_name (ρχ_name:: Symbol ) =
47
- if ρχ_name == :ρe_tot ; return :e_tot
48
- elseif ρχ_name == :ρq_tot ; return :q_tot
49
- elseif ρχ_name == :ρq_liq ; return :q_liq
50
- elseif ρχ_name == :ρq_ice ; return :q_ice
51
- elseif ρχ_name == :ρq_rai ; return :q_rai
52
- elseif ρχ_name == :ρn_liq ; return :n_liq
53
- elseif ρχ_name == :ρn_rai ; return :q_rai
54
- elseif ρχ_name == :ρq_sno ; return :q_sno
55
- else ; error (" Uncaught name: $ρχ_name " )
56
- end
57
- # ! format: on
58
-
59
45
@inline function specific (ρaχ, ρa, ρχ, ρ, turbconv_model)
60
46
# TODO : Replace turbconv_model struct by parameters, and include a_half in
61
47
# parameters, not in config
@@ -173,24 +159,28 @@ Converts every variable of the form `ρχ` in the grid-scale state `gs` into the
173
159
specific variable `χ` by dividing it by `ρ`. All other variables in `gs` are
174
160
omitted from the result.
175
161
"""
176
- @generated specific_gs (gs) =
177
- :( NamedTuple {$( specific_gs_names(gs))} (( $ ( map (name -> :( gs.$ name / gs. ρ) , relevant_gs_names (gs)) ... ), )))
162
+ specific_gs (gs) =
163
+ NamedTuple {specific_gs_names(gs)} ( map (name -> gs.:( $ name) / gs. ρ, relevant_gs_names (gs)))
178
164
179
165
"""
180
166
relevant_gs_names(gs)
181
167
182
168
Returns relevant grid-scale state `gs` names for determining specific variables.
183
169
"""
184
- @generated relevant_gs_names (gs) =
185
- filter (name -> has_prefix (name, :ρ ) && name != :ρ , Base. _nt_names (gs))
170
+ @generated relevant_gs_names (:: Type{GS} ) where {GS} =
171
+ filter (name -> has_prefix (name, :ρ ) && name != :ρ , Base. _nt_names (GS))
172
+
173
+ @inline relevant_gs_names (gs) = relevant_gs_names (typeof (gs))
186
174
187
175
"""
188
176
specific_gs_names(gs)
189
177
190
178
Returns relevant specific grid-scale state `gs` names.
191
179
"""
192
- @generated specific_gs_names (gs) =
193
- map (name -> remove_prefix (name, :ρ ), relevant_gs_names (gs))
180
+ @generated specific_gs_names (:: Type{GS} ) where {GS} =
181
+ map (name -> remove_prefix (name, :ρ ), relevant_gs_names (GS))
182
+
183
+ @inline specific_gs_names (gs) = specific_gs_names (typeof (gs))
194
184
195
185
"""
196
186
all_specific_gs(gs)
@@ -209,9 +199,9 @@ Arguments:
209
199
Returns:
210
200
- A new `NamedTuple` containing only the specific quantities (e.g., `:q_tot`, `:e_tot`).
211
201
"""
212
- all_specific_gs (gs:: Fields.Field ) =
202
+ all_specific_gs (gs) =
213
203
NamedTuple {specific_gs_names(eltype(gs))} (
214
- UU. unrolled_map (relevant_gs_names (gs )) do name
204
+ UU. unrolled_map (relevant_gs_names (eltype (gs) )) do name
215
205
lazy .(specific .(getproperty (gs, name), gs. ρ))
216
206
end
217
207
)
0 commit comments