/home/runner/work/amr-wind/amr-wind/amr-wind/physics/ChannelFlow.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/physics/ChannelFlow.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ChannelFlow.H
Go to the documentation of this file.
1#ifndef ChannelFlow_H
2#define ChannelFlow_H
3
6#include "amr-wind/CFDSim.H"
9#include "AMReX_REAL.H"
10
11using namespace amrex::literals;
12
13namespace {
14AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real analytical_smagorinsky_profile(
15 const amrex::Real h,
16 const amrex::Real Cs,
17 const amrex::Real dx,
18 const amrex::Real rho,
19 const amrex::Real mu,
20 const amrex::Real dpdx,
21 const amrex::Real C0,
22 const amrex::Real C1)
23{
24 const amrex::Real Cs2 = Cs * Cs;
25 const amrex::Real dx2 = dx * dx;
26 const amrex::Real Cs2dx2 = Cs2 * dx2;
27 return -mu / (rho * Cs2dx2) * h +
28 Cs2dx2 / (3 * dpdx) *
29 std::pow(
30 (2.0_rt / Cs2dx2 * dpdx * h +
31 (mu / (rho * Cs2dx2)) * (mu / (rho * Cs2dx2)) + C1),
32 3.0_rt / 2.0_rt) +
33 C0;
34}
35
36} // namespace
37
38namespace amr_wind::channel_flow {
39
43class ChannelFlow : public Physics::Register<ChannelFlow>
44{
45public:
46 static std::string identifier() { return "ChannelFlow"; }
47
48 explicit ChannelFlow(CFDSim& sim);
49
50 ~ChannelFlow() override = default;
51
52 void initialize_fields(int level, const amrex::Geometry& geom) override;
53
55 template <typename IndexSelector>
57 int level,
58 const amrex::Geometry& geom,
59 const IndexSelector& idxOp,
60 const int n_idx);
61
62 template <typename IndexSelector>
63 amrex::Real compute_error(const IndexSelector& idxOp);
64
66
67 void output_error();
68
69 void post_init_actions() override;
70
71 void post_regrid_actions() override {}
72
73 void pre_advance_work() override {}
74
75 void post_advance_work() override;
76
77private:
80
83 const amrex::AmrCore& m_mesh;
84
86
88 int m_norm_dir{1};
89
91 amrex::Real m_rho{1.0_rt};
92
94 amrex::Real m_mu{1.0_rt};
95
97 amrex::Real m_re_tau{1000.0_rt};
98
100 amrex::Real m_utau{0.01_rt};
101
103 amrex::Real m_ytau{0.001_rt};
104
106 amrex::Real m_tke0{0.0_rt};
107
109 amrex::Real m_sdr0{1000.0_rt};
110
112 bool m_perturb_vel{false};
113
115 amrex::Real m_perturb_y_period{1.0_rt};
116
118 amrex::Real m_perturb_z_period{1.0_rt};
119
121 amrex::Real m_perturb_fac{0.1_rt};
122
124 amrex::Real m_kappa{0.41_rt};
125
128
129 bool m_laminar{false};
130
131 bool m_mesh_mapping{false};
132
133 amrex::Real m_mean_vel;
134
135 bool m_half{false};
136
139
141 amrex::Real m_C0{0.0_rt};
142
144 amrex::Real m_C1{0.0_rt};
145
147 amrex::Real m_dpdx{0.0_rt};
148
151
153 const int m_w{18};
154
156 std::string m_output_fname{"channel_flow.log"};
157};
158} // namespace amr_wind::channel_flow
159
160#endif /* ChannelFlow_H */
Definition CFDSim.H:54
Definition FieldRepo.H:86
Definition SimTime.H:33
Definition WallFunction.H:20
bool m_half
Definition ChannelFlow.H:135
ChannelFlow(CFDSim &sim)
Definition ChannelFlow.cpp:14
bool m_perturb_vel
flag for perturbations of the initial condition
Definition ChannelFlow.H:112
amrex::Real m_sdr0
initial sdr value
Definition ChannelFlow.H:109
bool m_mesh_mapping
Definition ChannelFlow.H:131
const amrex::AmrCore & m_mesh
Definition ChannelFlow.H:83
amrex::Real m_perturb_y_period
perturbation period (y-direction)
Definition ChannelFlow.H:115
amrex::Real m_perturb_fac
perturbation factor (fraction of utau)
Definition ChannelFlow.H:121
const amr_wind::SimTime & m_time
Definition ChannelFlow.H:81
const int m_w
output precision
Definition ChannelFlow.H:153
amrex::Real m_C0
Analytical Smagorinsky first coefficient.
Definition ChannelFlow.H:141
CFDSim & m_sim
CFD simulation controller instance.
Definition ChannelFlow.H:79
WallFunction m_wall_func
Definition ChannelFlow.H:85
amrex::Real m_C1
Analytical Smagorinsky second coefficient.
Definition ChannelFlow.H:144
amrex::Real m_mu
viscosity
Definition ChannelFlow.H:94
int m_norm_dir
Wall normal direction - Default y direction.
Definition ChannelFlow.H:88
void post_regrid_actions() override
Definition ChannelFlow.H:71
int m_mean_vel_dir
direction of mean velocity
Definition ChannelFlow.H:150
std::string m_turbulence_model
Turbulence model.
Definition ChannelFlow.H:127
void pre_advance_work() override
Definition ChannelFlow.H:73
amrex::Real m_rho
initial density value
Definition ChannelFlow.H:91
amrex::Real compute_error(const IndexSelector &idxOp)
Definition ChannelFlow.cpp:233
amrex::Real m_kappa
Von-Karman constant.
Definition ChannelFlow.H:124
void initialize_fields(int level, const amrex::Geometry &geom) override
Definition ChannelFlow.cpp:104
amrex::Real m_utau
u_tau
Definition ChannelFlow.H:100
amrex::Real m_perturb_z_period
perturbation period (z-direction)
Definition ChannelFlow.H:118
std::string m_output_fname
error log file
Definition ChannelFlow.H:156
amrex::Real compute_analytical_smagorinsky_error()
Definition ChannelFlow.cpp:341
void post_advance_work() override
Definition ChannelFlow.cpp:464
amrex::Real m_dpdx
Body forcing (x direction)
Definition ChannelFlow.H:147
bool m_analytical_smagorinsky_test
flag for analytical smagorinsky test
Definition ChannelFlow.H:138
void post_init_actions() override
Definition ChannelFlow.cpp:438
FieldRepo & m_repo
Definition ChannelFlow.H:82
void output_error()
Definition ChannelFlow.cpp:406
static std::string identifier()
Definition ChannelFlow.H:46
amrex::Real m_mean_vel
Definition ChannelFlow.H:133
amrex::Real m_ytau
y_tau
Definition ChannelFlow.H:103
bool m_laminar
Definition ChannelFlow.H:129
amrex::Real m_tke0
initial tke value
Definition ChannelFlow.H:106
amrex::Real m_re_tau
Re_tau.
Definition ChannelFlow.H:97
Definition ChannelFlow.cpp:12