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

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/physics/SyntheticTurbulence.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
SyntheticTurbulence.H
Go to the documentation of this file.
1#ifndef SyntheticTurbulence_H
2#define SyntheticTurbulence_H
3
4#include <string>
5#include <cmath>
6#include <memory>
7
11#include "amr-wind/CFDSim.H"
12#include "AMReX_REAL.H"
13
14using namespace amrex::literals;
15
16namespace amr_wind {
17
18namespace synth_turb {
19
21{
22 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real
23 operator()(amrex::Real /* height */) const
24 {
25 return m_ref_vel;
26 }
27
28 const amrex::Real m_ref_vel;
29};
30
32{
33public:
34 explicit MeanProfile(amrex::Real ref_vel, int shear_dir = 2)
35 : m_op{ref_vel}, m_ref_vel(ref_vel), m_shear_dir(shear_dir)
36 {}
37
38 virtual ~MeanProfile() = default;
39
40 inline amrex::Real reference_velocity() const { return m_ref_vel; }
41
42 inline int shear_dir() const { return m_shear_dir; }
43
44 MeanVelOp device_instance() const { return m_op; }
45
46private:
48
49 const amrex::Real m_ref_vel;
50 const int m_shear_dir;
51};
52
53} // namespace synth_turb
54
56{
57 // Dimensions of the box
59
60 // Length of the boxes in each direction
62
64
65 // Reference point for the turbulence box. Reference is the mid-point of the
66 // turbulence grid at the plane where it is injected into the CFD flow
67 // field.
69
70 // Transformation matrix to convert from global coordinate system to local
71 // coordinate system
73
74 // Perturbation velocities (2, ny, nz)
75 amrex::Vector<amrex::Real> uvel;
76 amrex::Vector<amrex::Real> vvel;
77 amrex::Vector<amrex::Real> wvel;
78
79 amrex::Gpu::DeviceVector<amrex::Real> uvel_d;
80 amrex::Gpu::DeviceVector<amrex::Real> vvel_d;
81 amrex::Gpu::DeviceVector<amrex::Real> wvel_d;
82
83 // Indices of the two planes stored in the data arrays
84 int ileft;
85 int iright;
86};
87
89{
90 // Dimensions of the box
92
93 // Length of the boxes in each direction
95
97
98 // Reference point for the turbulence box. Reference is the mid-point of the
99 // turbulence grid at the plane where it is injected into the CFD flow
100 // field.
102
103 // Transformation matrix to convert from global coordinate system to local
104 // coordinate system
106
107 amrex::Real* uvel;
108 amrex::Real* vvel;
109 amrex::Real* wvel;
110
111 // Indices of the two planes stored in the data arrays
112 int ileft;
114
116 : box_dims(hdata.box_dims)
117 , box_len(hdata.box_len)
118 , dx(hdata.dx)
119 , origin(hdata.origin)
120 , tr_mat(hdata.tr_mat)
121 , uvel(hdata.uvel_d.data())
122 , vvel(hdata.vvel_d.data())
123 , wvel(hdata.wvel_d.data())
124 , ileft(hdata.ileft)
125 , iright(hdata.iright)
126 {}
127};
128
133{
134 int il, ir, jl, jr, kl, kr;
135 amrex::Real xl, xr, yl, yr, zl, zr;
136};
137
149
150class SyntheticTurbulence : public Physics::Register<SyntheticTurbulence>
151{
152public:
153 static std::string identifier() { return "SyntheticTurbulence"; }
154
155 explicit SyntheticTurbulence(const CFDSim& sim);
156
160
161 ~SyntheticTurbulence() override = default;
162
163 void initialize_fields(int level, const amrex::Geometry& geom) override;
164
165 void post_init_actions() override {}
166
167 void post_regrid_actions() override {}
168
169 void pre_advance_work() override;
170
171 void post_advance_work() override {}
172
173 void initialize();
174
175 void update();
176
177 template <typename T>
178 void update_impl(
179 const SynthTurbDeviceData& /*turb_grid*/,
180 const InterpWeights& /*weights*/,
181 const T& /*velfunc*/);
182
183private:
186 const amrex::AmrCore& m_mesh;
190
191 // Turbulence file name
192 std::string m_turb_filename;
193
194 // Turbulence box data
196
197 std::unique_ptr<synth_turb::MeanProfile> m_wind_profile;
198
199 std::string m_mean_wind_type{"ConstValue"};
200 amrex::Real m_epsilon;
201 amrex::Real m_gauss_scaling;
202
203 amrex::Real m_time_offset{0.0_rt};
204 // Duration of the synthetic turbulence injection. Unused if < 0
205 amrex::Real m_duration{-1};
206
207 bool m_is_init{true};
208};
209
210} // namespace amr_wind
211
212#endif /* SyntheticTurbulence_H */
Definition CFDSim.H:54
Definition Field.H:116
Definition FieldRepo.H:86
Definition SimTime.H:33
SyntheticTurbulence(const CFDSim &sim)
Definition SyntheticTurbulence.cpp:356
static std::string identifier()
Definition SyntheticTurbulence.H:153
~SyntheticTurbulence() override=default
SyntheticTurbulence(const SyntheticTurbulence &)=delete
std::string m_turb_filename
Definition SyntheticTurbulence.H:192
void pre_advance_work() override
Definition SyntheticTurbulence.cpp:487
amrex::Real m_time_offset
Definition SyntheticTurbulence.H:203
void post_advance_work() override
Definition SyntheticTurbulence.H:171
void update_impl(const SynthTurbDeviceData &, const InterpWeights &, const T &)
Definition SyntheticTurbulence.cpp:557
bool m_is_init
Definition SyntheticTurbulence.H:207
SyntheticTurbulence & operator=(const SyntheticTurbulence &)=delete
const amr_wind::SimTime & m_time
Definition SyntheticTurbulence.H:184
Field & m_density
Definition SyntheticTurbulence.H:188
Field & m_velocity
Definition SyntheticTurbulence.H:187
void post_regrid_actions() override
Definition SyntheticTurbulence.H:167
void initialize()
Definition SyntheticTurbulence.cpp:496
void initialize_fields(int level, const amrex::Geometry &geom) override
Definition SyntheticTurbulence.cpp:483
std::unique_ptr< synth_turb::MeanProfile > m_wind_profile
Definition SyntheticTurbulence.H:197
amrex::Real m_gauss_scaling
Definition SyntheticTurbulence.H:201
Field & m_turb_force
Definition SyntheticTurbulence.H:189
amrex::Real m_epsilon
Definition SyntheticTurbulence.H:200
const FieldRepo & m_repo
Definition SyntheticTurbulence.H:185
std::string m_mean_wind_type
Definition SyntheticTurbulence.H:199
SynthTurbData m_turb_grid
Definition SyntheticTurbulence.H:195
void post_init_actions() override
Definition SyntheticTurbulence.H:165
void update()
Definition SyntheticTurbulence.cpp:510
amrex::Real m_duration
Definition SyntheticTurbulence.H:205
const amrex::AmrCore & m_mesh
Definition SyntheticTurbulence.H:186
const amrex::Real m_ref_vel
Definition SyntheticTurbulence.H:49
const int m_shear_dir
Definition SyntheticTurbulence.H:50
amrex::Real reference_velocity() const
Definition SyntheticTurbulence.H:40
MeanVelOp m_op
Definition SyntheticTurbulence.H:47
MeanProfile(amrex::Real ref_vel, int shear_dir=2)
Definition SyntheticTurbulence.H:34
int shear_dir() const
Definition SyntheticTurbulence.H:42
MeanVelOp device_instance() const
Definition SyntheticTurbulence.H:44
Definition SyntheticTurbulence.cpp:17
VectorT< amrex::Real > Vector
Definition vector.H:148
TensorT< amrex::Real > Tensor
Definition tensor.H:189
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition SyntheticTurbulence.H:133
int kr
Definition SyntheticTurbulence.H:134
amrex::Real yl
Definition SyntheticTurbulence.H:135
amrex::Real xl
Definition SyntheticTurbulence.H:135
amrex::Real xr
Definition SyntheticTurbulence.H:135
amrex::Real yr
Definition SyntheticTurbulence.H:135
amrex::Real zr
Definition SyntheticTurbulence.H:135
int ir
Definition SyntheticTurbulence.H:134
int jl
Definition SyntheticTurbulence.H:134
int jr
Definition SyntheticTurbulence.H:134
int il
Definition SyntheticTurbulence.H:134
amrex::Real zl
Definition SyntheticTurbulence.H:135
int kl
Definition SyntheticTurbulence.H:134
Definition SyntheticTurbulence.H:56
vs::Vector box_len
Definition SyntheticTurbulence.H:61
vs::Tensor tr_mat
Definition SyntheticTurbulence.H:72
vs::Vector dx
Definition SyntheticTurbulence.H:63
amrex::Gpu::DeviceVector< amrex::Real > vvel_d
Definition SyntheticTurbulence.H:80
amrex::Gpu::DeviceVector< amrex::Real > uvel_d
Definition SyntheticTurbulence.H:79
int ileft
Definition SyntheticTurbulence.H:84
vs::VectorT< int > box_dims
Definition SyntheticTurbulence.H:58
int iright
Definition SyntheticTurbulence.H:85
amrex::Gpu::DeviceVector< amrex::Real > wvel_d
Definition SyntheticTurbulence.H:81
amrex::Vector< amrex::Real > vvel
Definition SyntheticTurbulence.H:76
amrex::Vector< amrex::Real > wvel
Definition SyntheticTurbulence.H:77
amrex::Vector< amrex::Real > uvel
Definition SyntheticTurbulence.H:75
vs::Vector origin
Definition SyntheticTurbulence.H:68
Definition SyntheticTurbulence.H:89
int iright
Definition SyntheticTurbulence.H:113
vs::VectorT< int > box_dims
Definition SyntheticTurbulence.H:91
amrex::Real * uvel
Definition SyntheticTurbulence.H:107
vs::Vector box_len
Definition SyntheticTurbulence.H:94
vs::Vector origin
Definition SyntheticTurbulence.H:101
SynthTurbDeviceData(SynthTurbData &hdata)
Definition SyntheticTurbulence.H:115
vs::Tensor tr_mat
Definition SyntheticTurbulence.H:105
int ileft
Definition SyntheticTurbulence.H:112
amrex::Real * vvel
Definition SyntheticTurbulence.H:108
amrex::Real * wvel
Definition SyntheticTurbulence.H:109
vs::Vector dx
Definition SyntheticTurbulence.H:96
Definition SyntheticTurbulence.H:21
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real) const
Definition SyntheticTurbulence.H:23
const amrex::Real m_ref_vel
Definition SyntheticTurbulence.H:28
Definition vector.H:13