/home/runner/work/amr-wind/amr-wind/amr-wind/turbulence/TurbModelBase.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/turbulence/TurbModelBase.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
TurbModelBase.H
Go to the documentation of this file.
1#ifndef TURBMODELBASE_H
2#define TURBMODELBASE_H
3
7#include "AMReX_REAL.H"
8
9using namespace amrex::literals;
10
11namespace amr_wind::turbulence {
12
13namespace turb_base_impl {
14
15// For transport model with constant properties implement specializations that
16// avoid creation of an intermediate scratch buffer.
17
18template <
19 typename Transport,
20 std::enable_if_t<Transport::constant_properties>* = nullptr>
21inline void visc_update(Field& evisc, Field& tvisc, Transport& transport)
22{
23 evisc.setVal(transport.viscosity());
25 evisc, 1.0_rt, tvisc, 0, 0, evisc.num_comp(), evisc.num_grow());
26}
27
28template <
29 typename Transport,
30 std::enable_if_t<Transport::constant_properties>* = nullptr>
31inline void alpha_update(Field& evisc, Field& tvisc, Transport& transport)
32{
33 evisc.setVal(transport.thermal_diffusivity());
35 evisc, 1.0_rt / transport.turbulent_prandtl(), tvisc, 0, 0,
36 evisc.num_comp(), evisc.num_grow());
37}
38
39template <
40 typename Transport,
41 std::enable_if_t<Transport::constant_properties>* = nullptr>
42inline void scal_diff_update(
43 Field& evisc, Field& tvisc, Transport& transport, const std::string& name)
44{
45 evisc.setVal(transport.viscosity() / transport.laminar_schmidt(name));
47 evisc, 1.0_rt / transport.turbulent_schmidt(name), tvisc, 0, 0,
48 evisc.num_comp(), evisc.num_grow());
49}
50
51template <
52 typename Transport,
53 std::enable_if_t<!Transport::constant_properties>* = nullptr>
54inline void visc_update(Field& evisc, Field& tvisc, Transport& transport)
55{
56 auto lam_mu = transport.mu();
58 evisc, 1.0_rt, *lam_mu, 0, 1.0_rt, tvisc, 0, 0, evisc.num_comp(),
59 evisc.num_grow());
60}
61
62template <
63 typename Transport,
64 std::enable_if_t<!Transport::constant_properties>* = nullptr>
65inline void alpha_update(Field& evisc, Field& tvisc, Transport& transport)
66{
67 auto lam_alpha = transport.alpha();
69 evisc, 1.0_rt, *lam_alpha, 0, 1.0_rt / transport.turbulent_prandtl(),
70 tvisc, 0, 0, evisc.num_comp(), evisc.num_grow());
71}
72
73template <
74 typename Transport,
75 std::enable_if_t<!Transport::constant_properties>* = nullptr>
76inline void scal_diff_update(
77 Field& evisc, Field& tvisc, Transport& transport, const std::string& name)
78{
79 auto lam_mu = transport.mu();
81 evisc, 1.0_rt / transport.laminar_schmidt(name), *lam_mu, 0,
82 1.0_rt / transport.turbulent_schmidt(name), tvisc, 0, 0,
83 evisc.num_comp(), evisc.num_grow());
84}
85
86} // namespace turb_base_impl
87
97template <typename Transport>
98class TurbModelBase : public TurbModel<Transport>
99{
100public:
101 explicit TurbModelBase(CFDSim& sim)
102 : TurbModel<Transport>(sim)
103 , m_mu_turb(sim.repo().declare_field("mu_turb", 1, 1, 1))
104 {
105 this->m_sim.io_manager().register_io_var("mu_turb");
106
107 // Effective viscosity field for output
108 auto& fields = this->m_sim.pde_manager().icns().fields();
109 this->m_sim.io_manager().register_io_var(fields.mueff.name());
110
111 // Effective diffusive parameter fields for scalars
112 for (auto& sc_eqn : this->m_sim.pde_manager().scalar_eqns()) {
113 this->m_sim.io_manager().register_output_var(
114 sc_eqn->fields().mueff.name());
115 }
116
117 m_mu_turb.set_default_fillpatch_bc(this->m_sim.time());
118 }
119
121 Field& mu_turb() override { return m_mu_turb; }
122
124 Field& alpha_turb() override
125 {
126 AMREX_ASSERT(m_alpha_turb != nullptr);
127 return *m_alpha_turb;
128 }
129
130 // clang-format off
131
138 void update_mueff(Field& mueff) override
139 {
141 }
142
153
155 void update_scalar_diff(Field& deff, const std::string& name) override
156 {
158 }
159
160 // clang-format on
161
162protected:
165
168};
169
170} // namespace amr_wind::turbulence
171
172#endif /* TURBMODELBASE_H */
Definition CFDSim.H:54
Definition Field.H:116
const amrex::IntVect & num_grow() const
Ghost cells.
Definition Field.H:137
int num_comp() const
Number of components for this field.
Definition Field.H:134
void setVal(amrex::Real value) noexcept
Set the field to a constant value at all levels.
Definition Field.cpp:347
Field & alpha_turb() override
Return the turbulent thermal diffusivity field.
Definition TurbModelBase.H:124
Field & mu_turb() override
Return the turbulent viscosity field.
Definition TurbModelBase.H:121
Field * m_alpha_turb
Reference to thermal diffusivity field.
Definition TurbModelBase.H:167
void update_alphaeff(Field &alphaeff) override
Definition TurbModelBase.H:149
TurbModelBase(CFDSim &sim)
Definition TurbModelBase.H:101
void update_scalar_diff(Field &deff, const std::string &name) override
Interface to update scalar diffusivity based on Schmidt number.
Definition TurbModelBase.H:155
void update_mueff(Field &mueff) override
Definition TurbModelBase.H:138
Field & m_mu_turb
Reference to the turbulent viscosity field.
Definition TurbModelBase.H:164
CFDSim & m_sim
Definition TurbModel.H:60
Field & mueff() override
Return the effective dynamic viscosity field.
Definition TurbModel.H:47
TurbModel(CFDSim &sim)
Definition TurbModel.H:22
Field & alphaeff() override
Return the effective thermal diffusivity field.
Definition TurbModel.H:53
Transport m_transport
Transport properties instance.
Definition TurbModel.H:63
void saxpy(T1 &dst, const amrex::Real a, const T2 &src, const int srccomp, const int dstcomp, const int numcomp, const amrex::IntVect &nghost)
Definition field_ops.H:205
void lincomb(T1 &dst, const amrex::Real a, const T2 &x, const int xcomp, const amrex::Real b, const T3 &y, const int ycomp, const int dstcomp, const int numcomp, const amrex::IntVect &nghost)
Definition field_ops.H:320
Definition CFDSim.H:26
Definition TurbModelBase.H:13
void visc_update(Field &evisc, Field &tvisc, Transport &transport)
Definition TurbModelBase.H:21
void alpha_update(Field &evisc, Field &tvisc, Transport &transport)
Definition TurbModelBase.H:31
void scal_diff_update(Field &evisc, Field &tvisc, Transport &transport, const std::string &name)
Definition TurbModelBase.H:42
Definition CFDSim.H:30