/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 std::string model_name() const override { return "AMDNoTherm"; }
32
35 const FieldState fstate, const DiffusionType /*unused*/) override;
36
39
41 void parse_model_coeffs() override;
42
44 void post_advance_work() override {};
45
46private:
49 amrex::Real m_C{0.333333333333333_rt};
50 const Field& m_vel;
51 const Field& m_rho;
52};
53
54AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real amd_base_muvel(
55 int i,
56 int j,
57 int k,
58 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM> dx, // Grid spacing
59 amrex::Real C, // Poincare const
60 amrex::Array4<amrex::Real const> const& gradVel) noexcept
61{
62
63 amrex::Real num_shear = 0;
64 amrex::Real denom = 0;
65 for (int ii = 0; ii < AMREX_SPACEDIM; ++ii) {
66 for (int jj = 0; jj < AMREX_SPACEDIM; ++jj) {
67 denom = denom + gradVel(i, j, k, ii * AMREX_SPACEDIM + jj) *
68 gradVel(i, j, k, ii * AMREX_SPACEDIM + jj);
69 amrex::Real sij =
70 0.5_rt * (gradVel(i, j, k, ii * AMREX_SPACEDIM + jj) +
71 gradVel(i, j, k, jj * AMREX_SPACEDIM + ii));
72 for (int kk = 0; kk < AMREX_SPACEDIM; ++kk) {
73 amrex::Real dkui = gradVel(i, j, k, ii * AMREX_SPACEDIM + kk);
74 amrex::Real dkuj = gradVel(i, j, k, jj * AMREX_SPACEDIM + kk);
75 num_shear = num_shear + dkui * dkuj * dx[kk] * dx[kk] * sij;
76 }
77 }
78 }
79 denom = amrex::max<amrex::Real>(
80 std::numeric_limits<amrex::Real>::epsilon() * 1.0e1_rt, denom);
81 num_shear = -C * num_shear;
82
83 return amrex::max<amrex::Real>(
84 std::numeric_limits<amrex::Real>::epsilon() * 1.0e1_rt,
85 num_shear / denom);
86}
87
88} // namespace amr_wind::turbulence
89
90#endif /* AMDNoTherm_H */
Definition CFDSim.H:54
Definition Field.H:116
const Field & m_rho
Definition AMDNoTherm.H:51
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:71
amrex::Real m_C
Poincare coefficient (default value set for 2nd order AMR-wind discretization)
Definition AMDNoTherm.H:49
void update_turbulent_viscosity(const FieldState fstate, const DiffusionType) override
Update the turbulent viscosity field.
Definition AMDNoTherm.cpp:32
void post_advance_work() override
No post advance work for this model.
Definition AMDNoTherm.H:44
std::string model_name() const override
Model name for debugging purposes.
Definition AMDNoTherm.H:31
const Field & m_vel
Definition AMDNoTherm.H:50
AMDNoTherm(CFDSim &sim)
Definition AMDNoTherm.cpp:17
static std::string identifier()
Definition AMDNoTherm.H:23
TurbModelBase(CFDSim &sim)
Definition TurbModelBase.H:101
std::unordered_map< std::string, amrex::Real > CoeffsDictType
Default identifier used by factor methods.
Definition TurbulenceModel.H:35
FieldState
Definition FieldDescTypes.H:14
DiffusionType
Definition incflo_enums.H:4
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) noexcept
Definition AMDNoTherm.H:54
Second-order finite volume discretization stencil coefficients.