@@ -173,14 +173,24 @@ Converts every variable of the form `ρχ` in the grid-scale state `gs` into the
173173specific variable `χ` by dividing it by `ρ`. All other variables in `gs` are
174174omitted from the result.
175175"""
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))
184194
185195"""
186196 all_specific_gs(gs)
@@ -199,14 +209,12 @@ Arguments:
199209Returns:
200210- A new `NamedTuple` containing only the specific quantities (e.g., `:q_tot`, `:e_tot`).
201211"""
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+ )
210218
211219"""
212220 specific_sgs(sgs, gs, turbconv_model)
0 commit comments