Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Velocity/VelocityCoeffPolicy.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 Velocity equation coefficients policies
9 : : \details This file defines coefficients policy classes for the velocity
10 : : equation for the fluctuating velocity in variable-density turbulence,
11 : : defined in DiffEq/Velocity.h.
12 : :
13 : : General requirements on velocity equation coefficients policy classes:
14 : :
15 : : - Must define a _constructor_, which is used to initialize the SDE
16 : : coefficient, C0. Required signature:
17 : : \code{.cpp}
18 : : CoeffPolicyName(
19 : : kw::sde_c0::info::expect::type C0_,
20 : : kw::sde_c0::info::expect::type& C0,
21 : : std::array< tk::real, 9 >& dU )
22 : : \endcode
23 : : where
24 : : - C0_ denotes a real value used to initialize the velocity system.
25 : : - The reference C0 is to be initialized based on C0_.
26 : : - _dU_ is an optionally prescribed mean velocity gradient.
27 : :
28 : : - Must define the function _update()_, called from Velocity::advance(),
29 : : updating the model coefficients.
30 : : Required signature:
31 : : \code{.cpp}
32 : : void update( char depvar,
33 : : char dissipation_depvar,
34 : : const std::map< tk::ctr::Product, tk::real >& moments,
35 : : const tk::Table<1>& hts,
36 : : ctr::DepvarType solve,
37 : : ctr::VelocityVariantType variant,
38 : : kw::sde_c0::info::expect::type C0,
39 : : tk::real t,
40 : : tk::real& eps,
41 : : std::array< tk::real, 9 >& G ) const
42 : : \endcode
43 : : where _depvar_ is the dependent variable of the velocity equation,
44 : : _dissipation_depvar_ is the dependent variable of the coupled dissipation
45 : : equation, _moments_ if the map of computed statistical moments, _hts_ is
46 : : a ctr::Table containing the inverse hydrodynamic timescale, _variant_ is
47 : : the velocity model variant, _solve_ is the the lable of the dependent
48 : : variable to solve for (full variable or fluctuation), _C0_ is the Langevin
49 : : eq constat to use, _t_ is the physical time, _eps_ is the dissipation rate
50 : : of turbulent kinetic energy to update, and _G_ is the G_{ij} tensor in the
51 : : Langevin model to update.
52 : :
53 : : - Must define the static function _type()_, returning the enum value of the
54 : : policy option. Example:
55 : : \code{.cpp}
56 : : static ctr::CoeffPolicyType type() noexcept {
57 : : return ctr::CoeffPolicyType::HYDROTIMESCALE;
58 : : }
59 : : \endcode
60 : : which returns the enum value of the option from the underlying option
61 : : class, collecting all possible options for coefficients policies.
62 : : */
63 : : // *****************************************************************************
64 : : #ifndef VelocityCoeffPolicy_h
65 : : #define VelocityCoeffPolicy_h
66 : :
67 : : #include <array>
68 : :
69 : : #include <brigand/sequences/list.hpp>
70 : :
71 : : #include "Types.hpp"
72 : : #include "Table.hpp"
73 : : #include "SystemComponents.hpp"
74 : : #include "Walker/Options/CoeffPolicy.hpp"
75 : : #include "Walker/Options/VelocityVariant.hpp"
76 : : #include "Langevin.hpp"
77 : :
78 : : namespace walker {
79 : :
80 : : //! Velocity equation coefficients policy with prescribed mean shear
81 : : //! \see kw::const_shear_info
82 : : class VelocityCoeffConstShear {
83 : :
84 : : public:
85 : : //! Constructor: initialize coefficients
86 : : VelocityCoeffConstShear( kw::sde_c0::info::expect::type C0_,
87 : : kw::sde_c0::info::expect::type& C0,
88 : : std::array< tk::real, 9 >& dU );
89 : :
90 : : //! Coefficients policy type accessor
91 : 3010 : static ctr::CoeffPolicyType type() noexcept
92 : 3010 : { return ctr::CoeffPolicyType::CONST_SHEAR; }
93 : :
94 : : //! Update the model coefficients prescribing shear
95 : : void update( char depvar,
96 : : char dissipation_depvar,
97 : : const std::map< tk::ctr::Product, tk::real >& moments,
98 : : const tk::Table<1>&,
99 : : ctr::DepvarType solve,
100 : : ctr::VelocityVariantType variant,
101 : : kw::sde_c0::info::expect::type C0,
102 : : tk::real,
103 : : tk::real& eps,
104 : : std::array< tk::real, 9 >& G ) const;
105 : :
106 : : private:
107 : : //! Mean velocity gradient prescribed for simpled 1D homogeneous shear
108 : : std::array< tk::real, 9 > m_dU;
109 : : };
110 : :
111 : : //! \brief Velocity equation coefficients policy yielding a statistically
112 : : //! stationary state
113 : : //! \see kw::stationary
114 : : class VelocityCoeffStationary {
115 : :
116 : : public:
117 : : //! Constructor: initialize coefficients
118 : : VelocityCoeffStationary( kw::sde_c0::info::expect::type C0_,
119 : : kw::sde_c0::info::expect::type& C0,
120 : : std::array< tk::real, 9 >& dU );
121 : :
122 : : //! Coefficients policy type accessor
123 : 2996 : static ctr::CoeffPolicyType type() noexcept
124 : 2996 : { return ctr::CoeffPolicyType::STATIONARY; }
125 : :
126 : : //! Update the model coefficients forcing a statistically stationary PDF
127 : : void update( char /*depvar*/,
128 : : char,
129 : : const std::map< tk::ctr::Product, tk::real >&,
130 : : const tk::Table<1>&,
131 : : ctr::DepvarType,
132 : : ctr::VelocityVariantType,
133 : : kw::sde_c0::info::expect::type C0,
134 : : tk::real,
135 : : tk::real& eps,
136 : : std::array< tk::real, 9 >& G ) const;
137 : : };
138 : :
139 : : //! Velocity equation coefficients policy with DNS hydrodynamics time scale
140 : : //! \see kw::hydrotimescale_info
141 : : class VelocityCoeffHydroTimeScale {
142 : :
143 : : public:
144 : : //! Constructor: initialize coefficients
145 : : VelocityCoeffHydroTimeScale( kw::sde_c0::info::expect::type C0_,
146 : : kw::sde_c0::info::expect::type& C0,
147 : : std::array< tk::real, 9 >& dU );
148 : :
149 : : //! Coefficients policy type accessor
150 : 2992 : static ctr::CoeffPolicyType type() noexcept
151 : 2992 : { return ctr::CoeffPolicyType::HYDROTIMESCALE; }
152 : :
153 : : //! \brief Update the model coefficients sampling the hydrodynamics time
154 : : //! scale from a prescribed function table
155 : : void update( char depvar,
156 : : char,
157 : : const std::map< tk::ctr::Product, tk::real >& moments,
158 : : const tk::Table<1>& hts,
159 : : ctr::DepvarType solve,
160 : : ctr::VelocityVariantType,
161 : : kw::sde_c0::info::expect::type C0,
162 : : tk::real t,
163 : : tk::real& eps,
164 : : std::array< tk::real, 9 >& G ) const;
165 : : };
166 : :
167 : : //! List of all Velocity's coefficients policies
168 : : using VelocityCoeffPolicies = brigand::list< VelocityCoeffConstShear
169 : : , VelocityCoeffStationary
170 : : , VelocityCoeffHydroTimeScale
171 : : >;
172 : :
173 : : } // walker::
174 : :
175 : : #endif // VelocityCoeffPolicy_h
|