@@ -173,14 +173,24 @@ Converts every variable of the form `ρχ` in the grid-scale state `gs` into the
173
173
specific variable `χ` by dividing it by `ρ`. All other variables in `gs` are
174
174
omitted from the result.
175
175
"""
176
- @generated function specific_gs (gs)
177
- gs_names = Base. _nt_names (gs)
178
- relevant_gs_names =
179
- filter (name -> has_prefix (name, :ρ ) && name != :ρ , gs_names)
180
- specific_gs_names = map (name -> remove_prefix (name, :ρ ), relevant_gs_names)
181
- specific_gs_values = map (name -> :(gs.$ name / gs. ρ), relevant_gs_names)
182
- return :(NamedTuple {$specific_gs_names} (($ (specific_gs_values... ),)))
183
- end
176
+ @generated specific_gs (gs) =
177
+ :(NamedTuple {$(specific_gs_names(gs))} (($ (map (name -> :(gs.$ name / gs. ρ), relevant_gs_names (gs))... ),)))
178
+
179
+ """
180
+ relevant_gs_names(gs)
181
+
182
+ Returns relevant grid-scale state `gs` names for determining specific variables.
183
+ """
184
+ @generated relevant_gs_names (gs) =
185
+ filter (name -> has_prefix (name, :ρ ) && name != :ρ , Base. _nt_names (gs))
186
+
187
+ """
188
+ specific_gs_names(gs)
189
+
190
+ Returns relevant specific grid-scale state `gs` names.
191
+ """
192
+ @generated specific_gs_names (gs) =
193
+ map (name -> remove_prefix (name, :ρ ), relevant_gs_names (gs))
184
194
185
195
"""
186
196
all_specific_gs(gs)
@@ -199,14 +209,12 @@ Arguments:
199
209
Returns:
200
210
- A new `NamedTuple` containing only the specific quantities (e.g., `:q_tot`, `:e_tot`).
201
211
"""
202
- @generated function all_specific_gs (gs)
203
- gs_names = Base. _nt_names (gs)
204
- relevant_gs_names =
205
- filter (name -> has_prefix (name, :ρ ) && name != :ρ , gs_names)
206
- all_specific_gs_names = map (name -> remove_prefix (name, :ρ ), relevant_gs_names)
207
- all_specific_gs_values = map (name -> :(lazy .(specific .(gs.$ name, gs. ρ))), relevant_gs_names)
208
- return :(NamedTuple {$all_specific_gs_names} (($ (all_specific_gs_values... ),)))
209
- end
212
+ all_specific_gs (gs:: Fields.Field ) =
213
+ NamedTuple {specific_gs_names(eltype(gs))} (
214
+ UU. unrolled_map (relevant_gs_names (gs)) do name
215
+ lazy .(specific .(getproperty (gs, name), gs. ρ))
216
+ end
217
+ )
210
218
211
219
"""
212
220
specific_sgs(sgs, gs, turbconv_model)
0 commit comments