/home/runner/work/kynema-sgf/kynema-sgf/src/physics/ChannelFlow.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/physics/ChannelFlow.H Source File
Kynema-SGF 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
4#include "src/core/Physics.H"
5#include "src/core/Field.H"
6#include "src/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
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 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 kynema_sgf::channel_flow
159
160#endif /* ChannelFlow_H */
Definition CFDSim.H:55
Definition FieldRepo.H:86
Definition SimTime.H:33
Definition WallFunction.H:20
amrex::Real m_C1
Analytical Smagorinsky second coefficient.
Definition ChannelFlow.H:144
const kynema_sgf::SimTime & m_time
Definition ChannelFlow.H:81
amrex::Real m_mean_vel
Definition ChannelFlow.H:133
amrex::Real m_perturb_z_period
perturbation period (z-direction)
Definition ChannelFlow.H:118
amrex::Real m_tke0
initial tke value
Definition ChannelFlow.H:106
void initialize_fields(int level, const amrex::Geometry &geom) override
Definition ChannelFlow.cpp:104
amrex::Real m_re_tau
Re_tau.
Definition ChannelFlow.H:97
WallFunction m_wall_func
Definition ChannelFlow.H:85
CFDSim & m_sim
CFD simulation controller instance.
Definition ChannelFlow.H:79
const amrex::AmrCore & m_mesh
Definition ChannelFlow.H:83
int m_mean_vel_dir
direction of mean velocity
Definition ChannelFlow.H:150
amrex::Real m_sdr0
initial sdr value
Definition ChannelFlow.H:109
void post_advance_work() override
Definition ChannelFlow.cpp:462
bool m_half
Definition ChannelFlow.H:135
void post_init_actions() override
Definition ChannelFlow.cpp:436
amrex::Real m_ytau
y_tau
Definition ChannelFlow.H:103
amrex::Real m_utau
u_tau
Definition ChannelFlow.H:100
amrex::Real m_perturb_y_period
perturbation period (y-direction)
Definition ChannelFlow.H:115
amrex::Real m_mu
viscosity
Definition ChannelFlow.H:94
amrex::Real m_C0
Analytical Smagorinsky first coefficient.
Definition ChannelFlow.H:141
int m_norm_dir
Wall normal direction - Default y direction.
Definition ChannelFlow.H:88
bool m_laminar
Definition ChannelFlow.H:129
void post_regrid_actions() override
Definition ChannelFlow.H:71
const int m_w
output precision
Definition ChannelFlow.H:153
bool m_analytical_smagorinsky_test
flag for analytical smagorinsky test
Definition ChannelFlow.H:138
bool m_perturb_vel
flag for perturbations of the initial condition
Definition ChannelFlow.H:112
bool m_mesh_mapping
Definition ChannelFlow.H:131
ChannelFlow(CFDSim &sim)
Definition ChannelFlow.cpp:14
amrex::Real compute_error(const IndexSelector &idxOp)
Definition ChannelFlow.cpp:231
amrex::Real m_perturb_fac
perturbation factor (fraction of utau)
Definition ChannelFlow.H:121
amrex::Real compute_analytical_smagorinsky_error()
Definition ChannelFlow.cpp:339
std::string m_output_fname
error log file
Definition ChannelFlow.H:156
amrex::Real m_kappa
Von-Karman constant.
Definition ChannelFlow.H:124
FieldRepo & m_repo
Definition ChannelFlow.H:82
static std::string identifier()
Definition ChannelFlow.H:46
amrex::Real m_rho
initial density value
Definition ChannelFlow.H:91
amrex::Real m_dpdx
Body forcing (x direction)
Definition ChannelFlow.H:147
std::string m_turbulence_model
Turbulence model.
Definition ChannelFlow.H:127
void pre_advance_work() override
Definition ChannelFlow.H:73
void output_error()
Definition ChannelFlow.cpp:404
Definition ChannelFlow.cpp:12