@@ -159,28 +159,14 @@ Converts every variable of the form `ρχ` in the grid-scale state `gs` into the
159159specific variable `χ` by dividing it by `ρ`. All other variables in `gs` are
160160omitted from the result.
161161"""
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
184170
185171"""
186172 all_specific_gs(gs)
@@ -199,12 +185,14 @@ Arguments:
199185Returns:
200186- A new `NamedTuple` containing only the specific quantities (e.g., `:q_tot`, `:e_tot`).
201187"""
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
208196
209197"""
210198 specific_sgs(sgs, gs, turbconv_model)
0 commit comments