Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Beta/MixMassFractionBetaCoeffPolicy.hpp
4 : : \copyright 2012-2015 J. Bakosi,
5 : : 2016-2018 Los Alamos National Security, LLC.,
6 : : 2019-2021 Triad National Security, LLC.
7 : : All rights reserved. See the LICENSE file for details.
8 : : \brief Mix mass-fraction beta SDE coefficients policies
9 : : \details This file declares coefficients policy classes for the mix
10 : : mass-fraction beta SDE, defined in DiffEq/Beta/MixMassFractionBeta.h.
11 : :
12 : : General requirements on mix mass-fraction beta SDE coefficients policy
13 : : classes:
14 : :
15 : : - Must define a _constructor_, which is used to initialize the SDE
16 : : coefficients, b, S, kappa, rho2, and r. Required signature:
17 : : \code{.cpp}
18 : : CoeffPolicyName(
19 : : tk::ctr::ncomp_t ncomp,
20 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
21 : : const std::vector< kw::sde_S::info::expect::type >& S_,
22 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
23 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
24 : : const std::vector< kw::sde_r::info::expect::type >& r_,
25 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
26 : : std::vector< kw::sde_S::info::expect::type >& S,
27 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
28 : : std::vector< kw::sde_rho2::info::expect::type >& rho2_,
29 : : std::vector< kw::sde_r::info::expect::type >& r_ );
30 : : \endcode
31 : : where
32 : : - ncomp denotes the number of scalar components of the system of
33 : : mix mass-fraction beta SDEs.
34 : : - Constant references to bprime_, S_, kprime_, rho2_, and r_, which
35 : : denote vectors of real values used to initialize the parameter
36 : : vectors of the system of mix mass-fraction beta SDEs. The length of
37 : : the vectors must be equal to the number of components given by ncomp.
38 : : - References to bprime, S, kprime, rho2_, and r, which denote the
39 : : parameter vectors to be initialized based on bprime_, S_, kprime_,
40 : : rho2_, and r_.
41 : :
42 : : - Must define the static function _type()_, returning the enum value of the
43 : : policy option. Example:
44 : : \code{.cpp}
45 : : static ctr::CoeffPolicyType type() noexcept {
46 : : return ctr::CoeffPolicyType::DECAY;
47 : : }
48 : : \endcode
49 : : which returns the enum value of the option from the underlying option
50 : : class, collecting all possible options for coefficients policies.
51 : :
52 : : - Must define the function _update()_, called from
53 : : MixMassFractionBeta::advance(), updating the model coefficients.
54 : : Required signature:
55 : : \code{.cpp}
56 : : void update(
57 : : char depvar,
58 : : char dissipation_depvar,
59 : : char velocity_depvar,
60 : : ctr::DepvarType velocity_solve,
61 : : ctr::DepvarType solve,
62 : : ncomp_t ncomp,
63 : : const std::map< tk::ctr::Product, tk::real >& moments,
64 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime,
65 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
66 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2,
67 : : const std::vector< kw::sde_r::info::expect::type >& r,
68 : : const std::vector< tk::Table<1> >& hts,
69 : : const std::vector< tk::Table<1> >& hp,
70 : : std::vector< kw::sde_b::info::expect::type >& b,
71 : : std::vector< kw::sde_kappa::info::expect::type >& k,
72 : : std::vector< kw::sde_S::info::expect::type >& S ) const {}
73 : : \endcode
74 : : where _depvar_ is the dependent variable associated with the mix
75 : : mass-fraction beta SDE, specified in the control file by the user,
76 : : _dissipation_depvar_ is a character labeling the coupled dissipation
77 : : equation, _velocity_depvar_ is an is a character labeling the coupled
78 : : velocity equation, _velocity_solve_ is an enum selecting whether the
79 : : coupled velocity equation solves for full variable or its fluctuation,
80 : : _solve_ is an enum selecting whether the mixmassfracbeta (scalar) equation
81 : : solves for full variable or its fluctuation, _ncomp_ is the number of
82 : : components in the system, _moments_ is the map associating moment IDs
83 : : (tk::ctr::vector< tk::ctr::Term >) to values of statistical moments,
84 : : _bprime_, _kprime_, rho2, r, are user-defined parameters, and _b_, _k_,
85 : : _S_, are the SDE parameters computed, see
86 : : DiffEq/Beta/MixMassFractionBeta.h.
87 : :
88 : : The constant reference to hts, denotes a vector of y=f(x) functions (see
89 : : src/DiffEq/Beta/HydroTimeScales.h and
90 : : src/Control/Walker/Options/HydroTimescales.h) used to configure the
91 : : inverse hydrodynamics time scales (extracted from direct numerical
92 : : simulations) of the system of mix mass-fraction beta SDEs if the
93 : : MixMassFracBetaCoeffHydroTimeScaleHomDecay coefficients policy is
94 : : selected. The length of this vector must be equal to the number of
95 : : components given by ncomp. Note that hts is only used by
96 : : MixMassFracBetaCoeffHydroTimeScaleHomDecay.
97 : :
98 : : The constant reference to hp, denotes a vector of y=f(x) functions (see
99 : : src/DiffEq/Beta/HydroProductions.h and
100 : : src/Control/Walker/Options/HydroProductions.h) used to configure the
101 : : turbulent kinetic energy production divided by the dissipation rate, P/e,
102 : : a measure of the non-eqilibrium nature of the turbulent flow (extracted
103 : : from direct numerical simulations) of the system of mix mass-fraction beta
104 : : SDEs if the MixMassFracBetaCoeffHydroTimeScaleHomDecay
105 : : coefficients policy is selected. The length of this vector must be equal
106 : : to the number of components given by ncomp. Note that hp is only used by
107 : : MixMassFracBetaCoeffHydroTimeScaleHomDecay.
108 : : */
109 : : // *****************************************************************************
110 : : #ifndef MixMassFractionBetaCoeffPolicy_h
111 : : #define MixMassFractionBetaCoeffPolicy_h
112 : :
113 : : #include <brigand/sequences/list.hpp>
114 : :
115 : : #include "Types.hpp"
116 : : #include "Table.hpp"
117 : : #include "Walker/Options/CoeffPolicy.hpp"
118 : : #include "Langevin.hpp"
119 : :
120 : : namespace walker {
121 : :
122 : : //! \brief Mix mass-fraction beta SDE decay coefficients policy
123 : : //! \details User-defined parameters b' and kappa' are constants in time and
124 : : //! ensure decay in the evolution of <y^2>.
125 : : class MixMassFracBetaCoeffDecay {
126 : :
127 : : using ncomp_t = kw::ncomp::info::expect::type;
128 : :
129 : : public:
130 : : //! Constructor: initialize coefficients
131 : : MixMassFracBetaCoeffDecay(
132 : : ncomp_t ncomp,
133 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
134 : : const std::vector< kw::sde_S::info::expect::type >& S_,
135 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
136 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
137 : : const std::vector< kw::sde_r::info::expect::type >& r_,
138 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
139 : : std::vector< kw::sde_S::info::expect::type >& S,
140 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
141 : : std::vector< kw::sde_rho2::info::expect::type >& rho2,
142 : : std::vector< kw::sde_r::info::expect::type >& r,
143 : : std::vector< kw::sde_b::info::expect::type >& b,
144 : : std::vector< kw::sde_kappa::info::expect::type >& k );
145 : :
146 : : //! Coefficients policy type accessor
147 : 2584 : static ctr::CoeffPolicyType type() noexcept
148 : 2584 : { return ctr::CoeffPolicyType::DECAY; }
149 : :
150 : : //! Update coefficients
151 : : void update(
152 : : char depvar,
153 : : char,
154 : : char,
155 : : ctr::DepvarType /*velocity_solve*/,
156 : : ctr::DepvarType /*solve*/,
157 : : ncomp_t ncomp,
158 : : const std::map< tk::ctr::Product, tk::real >& moments,
159 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime,
160 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
161 : : const std::vector< kw::sde_rho2::info::expect::type >&,
162 : : const std::vector< kw::sde_r::info::expect::type >&,
163 : : const std::vector< tk::Table<1> >&,
164 : : const std::vector< tk::Table<1> >&,
165 : : std::vector< kw::sde_b::info::expect::type >& b,
166 : : std::vector< kw::sde_kappa::info::expect::type >& k,
167 : : std::vector< kw::sde_S::info::expect::type >&,
168 : : tk::real ) const;
169 : : };
170 : :
171 : : //! \brief Mix mass-fraction beta SDE homogneous decay coefficients policy
172 : : //! \details User-defined parameters b' and kappa' are constants in time and
173 : : //! ensure decay in the evolution of \<y^2\>. Additionally, S is constrained
174 : : //! to make d\<rho\>/dt = 0, where \<rho\> = rho_2/(1+rY).
175 : : class MixMassFracBetaCoeffHomDecay {
176 : :
177 : : using ncomp_t = kw::ncomp::info::expect::type;
178 : :
179 : : public:
180 : : //! Constructor: initialize coefficients
181 : : MixMassFracBetaCoeffHomDecay(
182 : : ncomp_t ncomp,
183 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
184 : : const std::vector< kw::sde_S::info::expect::type >& S_,
185 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
186 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
187 : : const std::vector< kw::sde_r::info::expect::type >& r_,
188 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
189 : : std::vector< kw::sde_S::info::expect::type >& S,
190 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
191 : : std::vector< kw::sde_rho2::info::expect::type >& rho2,
192 : : std::vector< kw::sde_r::info::expect::type >& r,
193 : : std::vector< kw::sde_b::info::expect::type >& b,
194 : : std::vector< kw::sde_kappa::info::expect::type >& k );
195 : :
196 : : //! Coefficients policy type accessor
197 : 2595 : static ctr::CoeffPolicyType type() noexcept
198 : 2595 : { return ctr::CoeffPolicyType::HOMOGENEOUS_DECAY; }
199 : :
200 : : //! Update coefficients
201 : : void update(
202 : : char depvar,
203 : : char,
204 : : char,
205 : : ctr::DepvarType /*velocity_solve*/,
206 : : ctr::DepvarType /*solve*/,
207 : : ncomp_t ncomp,
208 : : const std::map< tk::ctr::Product, tk::real >& moments,
209 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime,
210 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
211 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2,
212 : : const std::vector< kw::sde_r::info::expect::type >& r,
213 : : const std::vector< tk::Table<1> >&,
214 : : const std::vector< tk::Table<1> >&,
215 : : std::vector< kw::sde_b::info::expect::type >& b,
216 : : std::vector< kw::sde_kappa::info::expect::type >& k,
217 : : std::vector< kw::sde_S::info::expect::type >& S,
218 : : tk::real ) const;
219 : : };
220 : :
221 : : //! \brief Mix mass-fraction beta SDE Monte Carlo homogenous decay coefficients
222 : : //! policy
223 : : //! \details User-defined parameters b' and kappa' are constants in time and
224 : : //! ensure decay in the evolution of \<y^2\>. Additionally, S is constrained
225 : : //! to make d\<rho\>/dt = 0, where \<rho\> = rho_2/(1+rY). This is the same as
226 : : //! the specification in MixMassFracBetaCoeffHomDecay, but uses more advanced
227 : : //! statistics, available from the Monte Carlo simulation, which yield a
228 : : //! simpler formula for the coefficient S.
229 : : class MixMassFracBetaCoeffMonteCarloHomDecay {
230 : :
231 : : using ncomp_t = kw::ncomp::info::expect::type;
232 : :
233 : : public:
234 : : //! Constructor: initialize coefficients
235 : : MixMassFracBetaCoeffMonteCarloHomDecay(
236 : : ncomp_t ncomp,
237 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
238 : : const std::vector< kw::sde_S::info::expect::type >& S_,
239 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
240 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
241 : : const std::vector< kw::sde_r::info::expect::type >& r_,
242 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
243 : : std::vector< kw::sde_S::info::expect::type >& S,
244 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
245 : : std::vector< kw::sde_rho2::info::expect::type >& rho2,
246 : : std::vector< kw::sde_r::info::expect::type >& r,
247 : : std::vector< kw::sde_b::info::expect::type >& b,
248 : : std::vector< kw::sde_kappa::info::expect::type >& k );
249 : :
250 : : //! Coefficients policy type accessor
251 : 2584 : static ctr::CoeffPolicyType type() noexcept
252 : 2584 : { return ctr::CoeffPolicyType::MONTE_CARLO_HOMOGENEOUS_DECAY; }
253 : :
254 : : //! Update coefficients
255 : : void update(
256 : : char depvar,
257 : : char,
258 : : char,
259 : : ctr::DepvarType /*velocity_solve*/,
260 : : ctr::DepvarType /*solve*/,
261 : : ncomp_t ncomp,
262 : : const std::map< tk::ctr::Product, tk::real >& moments,
263 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime,
264 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
265 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2,
266 : : const std::vector< kw::sde_r::info::expect::type >& r,
267 : : const std::vector< tk::Table<1> >&,
268 : : const std::vector< tk::Table<1> >&,
269 : : std::vector< kw::sde_b::info::expect::type >& b,
270 : : std::vector< kw::sde_kappa::info::expect::type >& k,
271 : : std::vector< kw::sde_S::info::expect::type >& S,
272 : : tk::real ) const;
273 : : };
274 : :
275 : : //! \brief Mix mass-fraction beta SDE coefficients policy with DNS hydrodynamics
276 : : //! time scale
277 : : //! \details User-defined parameters b' and kappa' are functions of an
278 : : //! externally, e.g., DNS-, provided hydrodynamics time scale ensuring decay
279 : : //! in the evolution of \<y^2\>. Additionally, S is constrained to
280 : : //! make d\<rho\>/dt = 0, where \<rho\> = rho_2/(1+rY). Additionally,
281 : : //! we pull in a hydrodynamic timescale from an external function.
282 : : //! \see kw::hydrotimescale_info
283 : : class MixMassFracBetaCoeffHydroTimeScale {
284 : :
285 : : using ncomp_t = kw::ncomp::info::expect::type;
286 : :
287 : : public:
288 : : //! Constructor: initialize coefficients
289 : : MixMassFracBetaCoeffHydroTimeScale(
290 : : ncomp_t ncomp,
291 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
292 : : const std::vector< kw::sde_S::info::expect::type >& S_,
293 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
294 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
295 : : const std::vector< kw::sde_r::info::expect::type >& r_,
296 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
297 : : std::vector< kw::sde_S::info::expect::type >& S,
298 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
299 : : std::vector< kw::sde_rho2::info::expect::type >& rho2,
300 : : std::vector< kw::sde_r::info::expect::type >& r,
301 : : std::vector< kw::sde_b::info::expect::type >& b,
302 : : std::vector< kw::sde_kappa::info::expect::type >& k );
303 : :
304 : : //! Coefficients policy type accessor
305 : 2588 : static ctr::CoeffPolicyType type() noexcept
306 : 2588 : { return ctr::CoeffPolicyType::HYDROTIMESCALE; }
307 : :
308 : : //! Update coefficients b', kappa', and S
309 : : void update(
310 : : char depvar,
311 : : char,
312 : : char,
313 : : ctr::DepvarType /*velocity_solve*/,
314 : : ctr::DepvarType /*solve*/,
315 : : ncomp_t ncomp,
316 : : const std::map< tk::ctr::Product, tk::real >& moments,
317 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime,
318 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
319 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2,
320 : : const std::vector< kw::sde_r::info::expect::type >& r,
321 : : const std::vector< tk::Table<1> >& hts,
322 : : const std::vector< tk::Table<1> >& hp,
323 : : std::vector< kw::sde_b::info::expect::type >& b,
324 : : std::vector< kw::sde_kappa::info::expect::type >& k,
325 : : std::vector< kw::sde_S::info::expect::type >& S,
326 : : tk::real t ) const;
327 : :
328 : : //! Sample the inverse hydrodynamics time scale at time t
329 : : //! \param[in] t Time at which to sample inverse hydrodynamics time scale
330 : : //! \param[in] ts Hydro time scale table to sample
331 : : //! \return Sampled value from discrete table of inverse hydro time scale
332 : 180 : tk::real hydrotimescale( tk::real t, const tk::Table<1>& ts ) const
333 : 180 : { return tk::sample<1>( t, ts )[ 0 ]; }
334 : :
335 : : //! Sample the hydrodynamics production/dissipation rate (P/e) at time t
336 : : //! \param[in] t Time at which to sample hydrodynamics P/e
337 : : //! \param[in] p P/e table to sample
338 : : //! \return Sampled value from discrete table of P/e
339 : 180 : tk::real hydroproduction( tk::real t, const tk::Table<1>& p ) const
340 : 180 : { return tk::sample<1>( t, p )[ 0 ]; }
341 : :
342 : : mutable std::size_t m_it = 0;
343 : : mutable std::vector< tk::real > m_s;
344 : : mutable std::string m_extra_out_filename;
345 : : };
346 : :
347 : : //! \brief Mix mass-fraction beta SDE coefficients policy coupled to velocity
348 : : //! \details User-defined parameters b' and kappa' are functions of P/eps and
349 : : //! k/eps from a coupled velocity model. Additionally, S is constrained to
350 : : //! make d\<rho\>/dt = 0, where \<rho\> = rho_2/(1+rY).
351 : : class MixMassFracBetaCoeffInstVel {
352 : :
353 : : using ncomp_t = kw::ncomp::info::expect::type;
354 : :
355 : : public:
356 : : //! Constructor: initialize coefficients
357 : : MixMassFracBetaCoeffInstVel(
358 : : ncomp_t ncomp,
359 : : const std::vector< kw::sde_bprime::info::expect::type >& bprime_,
360 : : const std::vector< kw::sde_S::info::expect::type >& S_,
361 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime_,
362 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2_,
363 : : const std::vector< kw::sde_r::info::expect::type >& r_,
364 : : std::vector< kw::sde_bprime::info::expect::type >& bprime,
365 : : std::vector< kw::sde_S::info::expect::type >& S,
366 : : std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
367 : : std::vector< kw::sde_rho2::info::expect::type >& rho2,
368 : : std::vector< kw::sde_r::info::expect::type >& r,
369 : : std::vector< kw::sde_b::info::expect::type >& b,
370 : : std::vector< kw::sde_kappa::info::expect::type >& k );
371 : :
372 : : //! Coefficients policy type accessor
373 : 2584 : static ctr::CoeffPolicyType type() noexcept
374 : 2584 : { return ctr::CoeffPolicyType::INSTANTANEOUS_VELOCITY; }
375 : :
376 : : //! Update coefficients
377 : : void update(
378 : : char depvar,
379 : : char dissipation_depvar,
380 : : char /*velocity_depvar*/,
381 : : ctr::DepvarType /*velocity_solve*/,
382 : : ctr::DepvarType solve,
383 : : ncomp_t ncomp,
384 : : const std::map< tk::ctr::Product, tk::real >& moments,
385 : : const std::vector< kw::sde_bprime::info::expect::type >& /*bprime*/,
386 : : const std::vector< kw::sde_kappaprime::info::expect::type >& kprime,
387 : : const std::vector< kw::sde_rho2::info::expect::type >& rho2,
388 : : const std::vector< kw::sde_r::info::expect::type >& r,
389 : : const std::vector< tk::Table<1> >&,
390 : : const std::vector< tk::Table<1> >&,
391 : : std::vector< kw::sde_b::info::expect::type >& b,
392 : : std::vector< kw::sde_kappa::info::expect::type >& k,
393 : : std::vector< kw::sde_S::info::expect::type >& S,
394 : : tk::real ) const;
395 : :
396 : : mutable std::size_t m_it = 0;
397 : : mutable std::vector< tk::real > m_s;
398 : : };
399 : :
400 : : //! List of all mix mass-fraction beta's coefficients policies
401 : : using MixMassFracBetaCoeffPolicies =
402 : : brigand::list< MixMassFracBetaCoeffDecay
403 : : , MixMassFracBetaCoeffHomDecay
404 : : , MixMassFracBetaCoeffMonteCarloHomDecay
405 : : , MixMassFracBetaCoeffHydroTimeScale
406 : : , MixMassFracBetaCoeffInstVel
407 : : >;
408 : :
409 : : } // walker::
410 : :
411 : : #endif // MixMassFractionBetaCoeffPolicy_h
|