Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Velocity/VelocityCoeffPolicy.cpp
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 coefficients policies
9 : : \details This file defines coefficients policy classes for the velocity
10 : : SDE, defined in DiffEq/Velocity/Velocity.h. For general
11 : : requirements on velocity SDE coefficients policy classes see the
12 : : header file.
13 : : */
14 : : // *****************************************************************************
15 : :
16 : : #include "VelocityCoeffPolicy.hpp"
17 : : #include "Table.hpp"
18 : :
19 : 18 : walker::VelocityCoeffConstShear::VelocityCoeffConstShear(
20 : : kw::sde_c0::info::expect::type C0_,
21 : : kw::sde_c0::info::expect::type& C0,
22 : 18 : std::array< tk::real, 9 >& dU ) : m_dU( {{ 0.0, 1.0, 0.0,
23 : : 0.0, 0.0, 0.0,
24 : 18 : 0.0, 0.0, 0.0 }} )
25 : : // *****************************************************************************
26 : : // Constructor: initialize coefficients
27 : : //! \param[in] C0_ Value of C0 parameter in the Langevin model
28 : : //! \param[in,out] C0 Value of to set the C0 parameter in the Langevin model
29 : : //! \param[in,out] dU Prescribed mean velocity gradient
30 : : // *****************************************************************************
31 : : {
32 : 18 : C0 = C0_;
33 : 18 : dU = m_dU;
34 : 18 : }
35 : :
36 : : void
37 : 6750 : walker::VelocityCoeffConstShear::update(
38 : : char depvar,
39 : : char dissipation_depvar,
40 : : const std::map< tk::ctr::Product, tk::real >& moments,
41 : : const tk::Table<1>&,
42 : : ctr::DepvarType solve,
43 : : ctr::VelocityVariantType variant,
44 : : kw::sde_c0::info::expect::type C0,
45 : : tk::real,
46 : : tk::real& eps,
47 : : std::array< tk::real, 9 >& G ) const
48 : : // *****************************************************************************
49 : : // Update the model coefficients prescribing shear
50 : : //! \param[in] depvar Dependent variable for of this SDE
51 : : //! \param[in] dissipation_depvar Dependent variable for coupled dissipation eq
52 : : //! \param[in] moments Map of statistical moments
53 : : //! \param[in] solve Configured dependent variable to solve for
54 : : //! \param[in] variant Velocity model variant configured
55 : : //! \param[in] C0 Coefficient C0 in the Langevin model
56 : : //! \param[in,out] eps Dissipation rate of turbulent kinetic energy
57 : : //! \param[in,out] G Coefficient tensor (3x3) in the Langevin equation
58 : : //! \details Update the dissipation rate (eps) and G_{ij} based on the
59 : : //! turbulent kinetic energy (k) for a prescribed honmogeneous shear flow.
60 : : // *****************************************************************************
61 : : {
62 : : using tk::ctr::lookup;
63 : : using tk::ctr::mean;
64 : :
65 : : // Compute turbulent kinetic energy
66 : 6750 : auto rs = reynoldsStress( depvar, solve, moments );
67 : :
68 : : // Compute turbulent kinetic energy
69 : 6750 : auto k = (rs[0] + rs[1] + rs[2]) / 2.0;
70 : :
71 : : // Access mean turbulence frequency
72 [ + - ]: 6750 : tk::real O = lookup( mean(dissipation_depvar,0), moments );
73 : :
74 : : // compute turbulent kinetic energy dissipation rate
75 : 6750 : eps = O*k;
76 : :
77 : : // update drift tensor based on the Langevin model variant configured
78 [ + + ]: 6750 : if (variant == ctr::VelocityVariantType::SLM) // simplified
79 : 3375 : G = slm( O, C0 );
80 [ + - ]: 3375 : else if (variant == ctr::VelocityVariantType::GLM)// generalized
81 : 3375 : G = glm( O, C0, rs, m_dU );
82 [ - - ][ - - ]: 0 : else Throw( "Velocity variant type not implemented" );
[ - - ][ - - ]
[ - - ][ - - ]
83 : 6750 : }
84 : :
85 : 4 : walker::VelocityCoeffStationary::VelocityCoeffStationary(
86 : : kw::sde_c0::info::expect::type C0_,
87 : : kw::sde_c0::info::expect::type& C0,
88 : : std::array< tk::real, 9 >& dU )
89 : : // *****************************************************************************
90 : : // Constructor: initialize coefficients
91 : : //! \param[in] C0_ Value of C0 parameter in the Langevin model
92 : : //! \param[in,out] C0 Value of to set the C0 parameter in the Langevin model
93 : : //! \param[in,out] dU Prescribed mean velocity gradient
94 : : //! \details Prescribe no shear. The value of C0 is insignificant for a forced
95 : : //! stationary velocity PDF because drift and diffusion are in balance, so
96 : : //! that dk/dt = 0.
97 : : // *****************************************************************************
98 : : {
99 : 4 : C0 = C0_;
100 : 4 : dU = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
101 : 4 : }
102 : :
103 : : void
104 : 396 : walker::VelocityCoeffStationary::update(
105 : : char,
106 : : char,
107 : : const std::map< tk::ctr::Product, tk::real >&,
108 : : const tk::Table<1>&,
109 : : ctr::DepvarType,
110 : : ctr::VelocityVariantType,
111 : : kw::sde_c0::info::expect::type C0,
112 : : tk::real,
113 : : tk::real& eps,
114 : : std::array< tk::real, 9 >& G ) const
115 : : // *****************************************************************************
116 : : // Update the model coefficients forcing a statistically stationary PDF
117 : : //! \param[in] C0 Coefficient C0 in the Langevin model, should not affect the
118 : : //! solution for forced velocity PDF
119 : : //! \param[in,out] eps Dissipation rate of turbulent kinetic energy, force = 1
120 : : //! \param[in,out] G Coefficient tensor (3x3) in the Langevin equation
121 : : //! \details Update the dissipation rate (eps) and G_{ij} so that the velocity
122 : : //! PDF is stationary. The value of C0 is insignificant for a forced
123 : : //! stationary velocity PDF because drift and diffusion are in balance, so
124 : : //! that dk/dt = 0.
125 : : // *****************************************************************************
126 : : {
127 : : // Override turbulent kinetic energy to keep the velocity PDF exactly
128 : : // stationary
129 : : tk::real k = 1.0;
130 : :
131 : : // Do not couple a dissipation eq for forced velocity PDF, but set to unity
132 : : // and keep the PDF stationary.
133 : : tk::real O = 1.0;
134 : :
135 : : // Compute turbulent kinetic energy dissipation rate
136 : 396 : eps = O*k;
137 : :
138 : : // Update drift tensor to force the velocity PDF stationary. Note that his is
139 : : // NOT the simplified or generalized Langevin model, but a modification to
140 : : // keep the PDF stationary, see Pope, Turbulent Flows, 2000, Eq.12.100.
141 : : G.fill( 0.0 );
142 : 396 : G[0] = G[4] = G[8] = -0.75*C0*O;
143 : 396 : }
144 : :
145 : 0 : walker::VelocityCoeffHydroTimeScale::VelocityCoeffHydroTimeScale(
146 : : kw::sde_c0::info::expect::type C0_,
147 : : kw::sde_c0::info::expect::type& C0,
148 : : std::array< tk::real, 9 >& dU )
149 : : // *****************************************************************************
150 : : // Constructor: initialize coefficients
151 : : //! \param[in] C0_ Value of C0 parameter in the Langevin model
152 : : //! \param[in,out] C0 Value of to set the C0 parameter in the Langevin model
153 : : //! \param[in,out] dU Prescribed mean velocity gradient
154 : : // *****************************************************************************
155 : : {
156 : 0 : C0 = C0_;
157 : 0 : dU = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
158 : 0 : }
159 : :
160 : : void
161 : 0 : walker::VelocityCoeffHydroTimeScale::update(
162 : : char depvar,
163 : : char,
164 : : const std::map< tk::ctr::Product, tk::real >& moments,
165 : : const tk::Table<1>& hts,
166 : : ctr::DepvarType solve,
167 : : ctr::VelocityVariantType,
168 : : kw::sde_c0::info::expect::type C0,
169 : : tk::real t,
170 : : tk::real& eps,
171 : : std::array< tk::real, 9 >& G ) const
172 : : // *****************************************************************************
173 : : // Update the model coefficients sampling the hydrodynamics time scale from a
174 : : // prescribed function table
175 : : //! \param[in] depvar Dependent variable for of this SDE
176 : : //! \param[in] moments Map of statistical moments
177 : : //! \param[in] hts Table to take hydrodynamics time scale from
178 : : //! \param[in] solve Configured dependent variable to solve for
179 : : //! \param[in] C0 Coefficient C0 in the Langevin model
180 : : //! \param[in] t Physical time to sample hydrodynamics time scale at
181 : : //! \param[in,out] eps Dissipation rate of turbulent kinetic energy
182 : : //! \param[in,out] G Coefficient tensor (3x3) in the Langevin equation
183 : : //! \details Update the dissipation rate (eps) based on eps/k (from DNS) and the
184 : : //! turbulent kinetic energy (k) (from the SDE)
185 : : // *****************************************************************************
186 : : {
187 : : // Compute turbulent kinetic energy
188 : 0 : auto k = tke( depvar, solve, moments );
189 : :
190 : : // Sample the inverse hydrodynamics timescale at time t
191 : 0 : auto ts = tk::sample<1>( t, hts )[ 0 ]; // eps/k
192 : :
193 : : // compute turbulent kinetic energy dissipation rate
194 : 0 : eps = ts * k;
195 : :
196 : : // update drift tensor based on the simplified Langevin model
197 : : G.fill( 0.0 );
198 : 0 : G[0] = G[4] = G[8] = -(0.5+0.75*C0) * ts;
199 : 0 : }
|