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

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/turbulence/LES/AMDNoTherm.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
AMDNoTherm.H
Go to the documentation of this file.
1#ifndef AMDNOTHERM_H
2#define AMDNOTHERM_H
3
4#include <string>
9#include "AMReX_Config.H"
10#include "AMReX_AmrCore.H"
11#include "AMReX_REAL.H"
12
13using namespace amrex::literals;
14
15namespace amr_wind::turbulence {
19template <typename Transport>
20class AMDNoTherm : public TurbModelBase<Transport>
21{
22public:
23 static std::string identifier()
24 {
25 return "AMDNoTherm-" + Transport::identifier();
26 }
27
28 explicit AMDNoTherm(CFDSim& sim);
29
31 [[nodiscard]] std::string model_name() const override
32 {
33 return "AMDNoTherm";
34 }
35
38 FieldState fstate, DiffusionType /*unused*/) override;
39
41 [[nodiscard]] TurbulenceModel::CoeffsDictType model_coeffs() const override;
42
44 void parse_model_coeffs() override;
45
47 void post_advance_work() override {};
48
49private:
52 amrex::Real m_C{0.333333333333333_rt};
53 const Field& m_vel;
54 const Field& m_rho;
55};
56
57AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real amd_base_muvel(
58 int i,
59 int j,
60 int k,
61 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM> dx, // Grid spacing
62 amrex::Real C, // Poincare const
63 amrex::Array4<amrex::Real const> const& gradVel)
64{
65
66 amrex::Real num_shear = 0;
67 amrex::Real denom = 0;
68 for (int ii = 0; ii < AMREX_SPACEDIM; ++ii) {
69 for (int jj = 0; jj < AMREX_SPACEDIM; ++jj) {
70 denom = denom + (gradVel(i, j, k, (ii * AMREX_SPACEDIM) + jj) *
71 gradVel(i, j, k, (ii * AMREX_SPACEDIM) + jj));
72 amrex::Real sij =
73 0.5_rt * (gradVel(i, j, k, (ii * AMREX_SPACEDIM) + jj) +
74 gradVel(i, j, k, (jj * AMREX_SPACEDIM) + ii));
75 for (int kk = 0; kk < AMREX_SPACEDIM; ++kk) {
76 amrex::Real dkui = gradVel(i, j, k, (ii * AMREX_SPACEDIM) + kk);
77 amrex::Real dkuj = gradVel(i, j, k, (jj * AMREX_SPACEDIM) + kk);
78 num_shear = num_shear + (dkui * dkuj * dx[kk] * dx[kk] * sij);
79 }
80 }
81 }
82 denom = amrex::max<amrex::Real>(
83 std::numeric_limits<amrex::Real>::epsilon() * 1.0e1_rt, denom);
84 num_shear = -C * num_shear;
85
86 return amrex::max<amrex::Real>(
87 std::numeric_limits<amrex::Real>::epsilon() * 1.0e1_rt,
88 num_shear / denom);
89}
90
91} // namespace amr_wind::turbulence
92
93#endif /* AMDNoTherm_H */
Definition CFDSim.H:54
Definition Field.H:112
const Field & m_rho
Definition AMDNoTherm.H:54
void parse_model_coeffs() override
Parse turbulence model coefficients for this model.
Definition AMDNoTherm.cpp:24
TurbulenceModel::CoeffsDictType model_coeffs() const override
Return model coefficients dictionary.
Definition AMDNoTherm.cpp:70
amrex::Real m_C
Poincare coefficient (default value set for 2nd order AMR-wind discretization)
Definition AMDNoTherm.H:52
void post_advance_work() override
No post advance work for this model.
Definition AMDNoTherm.H:47
std::string model_name() const override
Model name for debugging purposes.
Definition AMDNoTherm.H:31
const Field & m_vel
Definition AMDNoTherm.H:53
AMDNoTherm(CFDSim &sim)
Definition AMDNoTherm.cpp:17
static std::string identifier()
Definition AMDNoTherm.H:23
void update_turbulent_viscosity(FieldState fstate, DiffusionType) override
Update the turbulent viscosity field.
Definition AMDNoTherm.cpp:32
TurbModelBase(CFDSim &sim)
Definition TurbModelBase.H:95
std::unordered_map< std::string, amrex::Real > CoeffsDictType
Default identifier used by factor methods.
Definition TurbulenceModel.H:35
FieldState
Definition FieldDescTypes.H:16
DiffusionType
Definition incflo_enums.H:6
Definition CFDSim.H:30
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real amd_base_muvel(int i, int j, int k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dx, amrex::Real C, amrex::Array4< amrex::Real const > const &gradVel)
Definition AMDNoTherm.H:57
Second-order finite volume discretization stencil coefficients.