/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 <typename Transport>
19void visc_update(Field& evisc, Field& tvisc, Transport& transport)
20 requires Transport::constant_properties
21{
22 evisc.setVal(transport.viscosity());
24 evisc, 1.0_rt, tvisc, 0, 0, evisc.num_comp(), evisc.num_grow());
25}
26
27template <typename Transport>
28void alpha_update(Field& evisc, Field& tvisc, Transport& transport)
29 requires Transport::constant_properties
30{
31 evisc.setVal(transport.thermal_diffusivity());
33 evisc, 1.0_rt / transport.turbulent_prandtl(), tvisc, 0, 0,
34 evisc.num_comp(), evisc.num_grow());
35}
36
37template <typename Transport>
39 Field& evisc, Field& tvisc, Transport& transport, const std::string& name)
40 requires Transport::constant_properties
41{
42 evisc.setVal(transport.viscosity() / transport.laminar_schmidt(name));
44 evisc, 1.0_rt / transport.turbulent_schmidt(name), tvisc, 0, 0,
45 evisc.num_comp(), evisc.num_grow());
46}
47
48template <typename Transport>
49void visc_update(Field& evisc, Field& tvisc, Transport& transport)
50 requires(!Transport::constant_properties)
51{
52 auto lam_mu = transport.mu();
54 evisc, 1.0_rt, *lam_mu, 0, 1.0_rt, tvisc, 0, 0, evisc.num_comp(),
55 evisc.num_grow());
56}
57
58template <typename Transport>
59void alpha_update(Field& evisc, Field& tvisc, Transport& transport)
60 requires(!Transport::constant_properties)
61{
62 auto lam_alpha = transport.alpha();
64 evisc, 1.0_rt, *lam_alpha, 0, 1.0_rt / transport.turbulent_prandtl(),
65 tvisc, 0, 0, evisc.num_comp(), evisc.num_grow());
66}
67
68template <typename Transport>
70 Field& evisc, Field& tvisc, Transport& transport, const std::string& name)
71 requires(!Transport::constant_properties)
72{
73 auto lam_mu = transport.mu();
75 evisc, 1.0_rt / transport.laminar_schmidt(name), *lam_mu, 0,
76 1.0_rt / transport.turbulent_schmidt(name), tvisc, 0, 0,
77 evisc.num_comp(), evisc.num_grow());
78}
79
80} // namespace turb_base_impl
81
91template <typename Transport>
92class TurbModelBase : public TurbModel<Transport>
93{
94public:
95 explicit TurbModelBase(CFDSim& sim)
96 : TurbModel<Transport>(sim)
97 , m_mu_turb(sim.repo().declare_field("mu_turb", 1, 1, 1))
98 {
99 this->m_sim.io_manager().register_io_var("mu_turb");
100
101 // Effective viscosity field for output
102 auto& fields = this->m_sim.pde_manager().icns().fields();
103 this->m_sim.io_manager().register_io_var(fields.mueff.name());
104
105 // Effective diffusive parameter fields for scalars
106 for (auto& sc_eqn : this->m_sim.pde_manager().scalar_eqns()) {
107 this->m_sim.io_manager().register_output_var(
108 sc_eqn->fields().mueff.name());
109 }
110
111 m_mu_turb.set_default_fillpatch_bc(this->m_sim.time());
112 }
113
115 Field& mu_turb() override { return m_mu_turb; }
116
118 Field& alpha_turb() override
119 {
120 AMREX_ASSERT(m_alpha_turb != nullptr);
121 return *m_alpha_turb;
122 }
123
124 // clang-format off
125
132 void update_mueff(Field& mueff) override
133 {
135 }
136
147
149 void update_scalar_diff(Field& deff, const std::string& name) override
150 {
152 }
153
154 // clang-format on
155
156protected:
159
162};
163
164} // namespace amr_wind::turbulence
165
166#endif /* TURBMODELBASE_H */
Definition CFDSim.H:54
Definition Field.H:112
Field & alpha_turb() override
Return the turbulent thermal diffusivity field.
Definition TurbModelBase.H:118
Field & mu_turb() override
Return the turbulent viscosity field.
Definition TurbModelBase.H:115
Field * m_alpha_turb
Reference to thermal diffusivity field.
Definition TurbModelBase.H:161
void update_alphaeff(Field &alphaeff) override
Definition TurbModelBase.H:143
TurbModelBase(CFDSim &sim)
Definition TurbModelBase.H:95
void update_scalar_diff(Field &deff, const std::string &name) override
Interface to update scalar diffusivity based on Schmidt number.
Definition TurbModelBase.H:149
void update_mueff(Field &mueff) override
Definition TurbModelBase.H:132
Field & m_mu_turb
Reference to the turbulent viscosity field.
Definition TurbModelBase.H:158
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 scal_diff_update(Field &evisc, Field &tvisc, Transport &transport, const std::string &name)
Definition TurbModelBase.H:38
void alpha_update(Field &evisc, Field &tvisc, Transport &transport)
Definition TurbModelBase.H:28
void visc_update(Field &evisc, Field &tvisc, Transport &transport)
Definition TurbModelBase.H:19
Definition CFDSim.H:30