@@ -159,28 +159,14 @@ Converts every variable of the form `ρχ` in the grid-scale state `gs` into the
159
159
specific variable `χ` by dividing it by `ρ`. All other variables in `gs` are
160
160
omitted from the result.
161
161
"""
162
- specific_gs (gs) =
163
- NamedTuple {specific_gs_names(gs)} (map (name -> gs.:($ name) / gs. ρ, relevant_gs_names (gs)))
164
-
165
- """
166
- relevant_gs_names(gs)
167
-
168
- Returns relevant grid-scale state `gs` names for determining specific variables.
169
- """
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))
174
-
175
- """
176
- specific_gs_names(gs)
177
-
178
- Returns relevant specific grid-scale state `gs` names.
179
- """
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))
162
+ @generated function specific_gs (gs)
163
+ gs_names = Base. _nt_names (gs)
164
+ relevant_gs_names =
165
+ filter (name -> has_prefix (name, :ρ ) && name != :ρ , gs_names)
166
+ specific_gs_names = map (name -> remove_prefix (name, :ρ ), relevant_gs_names)
167
+ specific_gs_values = map (name -> :(gs.$ name / gs. ρ), relevant_gs_names)
168
+ return :(NamedTuple {$specific_gs_names} (($ (specific_gs_values... ),)))
169
+ end
184
170
185
171
"""
186
172
all_specific_gs(gs)
@@ -199,12 +185,14 @@ Arguments:
199
185
Returns:
200
186
- A new `NamedTuple` containing only the specific quantities (e.g., `:q_tot`, `:e_tot`).
201
187
"""
202
- all_specific_gs (gs) =
203
- NamedTuple {specific_gs_names(eltype(gs))} (
204
- UU. unrolled_map (relevant_gs_names (eltype (gs))) do name
205
- lazy .(specific .(getproperty (gs, name), gs. ρ))
206
- end
207
- )
188
+ @generated function all_specific_gs (gs)
189
+ gs_names = Base. _nt_names (gs)
190
+ relevant_gs_names =
191
+ filter (name -> has_prefix (name, :ρ ) && name != :ρ , gs_names)
192
+ specific_gs_names = map (name -> remove_prefix (name, :ρ ), relevant_gs_names)
193
+ specific_gs_values = map (name -> :(lazy .(specific .(gs.$ name, gs. ρ))), relevant_gs_names)
194
+ return :(NamedTuple {$specific_gs_names} (($ (specific_gs_values... ),)))
195
+ end
208
196
209
197
"""
210
198
specific_sgs(sgs, gs, turbconv_model)
0 commit comments