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

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/physics/ScalarAdvection.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ScalarAdvection.H
Go to the documentation of this file.
1#ifndef SCALARADVECTION_H
2#define SCALARADVECTION_H
3
4#include <numbers>
8#include "AMReX_REAL.H"
9
10using namespace amrex::literals;
11
12namespace amr_wind {
13
19class ScalarAdvection : public Physics::Register<ScalarAdvection>
20{
21public:
22 static std::string identifier() { return "ScalarAdvection"; }
23
24 explicit ScalarAdvection(CFDSim& sim);
25
26 ~ScalarAdvection() override = default;
27
29 void initialize_fields(int level, const amrex::Geometry& geom) override;
30
31 template <typename Shape>
32 amrex::Vector<amrex::Real> compute_error(const Shape& scalar_function);
33
34 void post_init_actions() override;
35
36 void post_regrid_actions() override {}
37
38 void pre_advance_work() override {}
39
40 void post_advance_work() override;
41
42 template <typename Shape>
43 void initialize_scalar(const Shape& scalar_function);
44
45private:
50 std::string m_output_fname = "error.log";
51 const int m_w = 20;
52
54 Field* m_scalar{nullptr};
55
57 amrex::Real m_u{1.0_rt};
58 amrex::Real m_v{0.0_rt};
59
61 amrex::Real m_x0{0.1_rt};
62 amrex::Real m_y0{0.1_rt};
63
65 amrex::Real m_amplitude{1.0_rt};
66
69 amrex::Real m_x_width{0.01_rt};
70 amrex::Real m_y_width{0.01_rt};
71
73 amrex::Real m_x_wavenumber{16.0_rt * std::numbers::pi_v<amrex::Real>};
74 amrex::Real m_y_wavenumber{16.0_rt * std::numbers::pi_v<amrex::Real>};
75
77 std::string m_shape{"gaussian"};
78
80 amrex::Real m_rho{1.0_rt};
81};
82
84{
85 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
86 amrex::Real /*x*/,
87 amrex::Real /*x0*/,
88 amrex::Real /*amplitude*/,
89 amrex::Real /*x_width*/,
90 amrex::Real /*x_wavenumber*/) const;
91};
92
94{
95 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
96 amrex::Real /*x*/,
97 amrex::Real /*unused*/,
98 amrex::Real /*dx*/,
99 amrex::Real /*unused*/,
100 amrex::Real /*x0*/,
101 amrex::Real /*unused*/,
102 amrex::Real /*amplitude*/,
103 amrex::Real /*x_width*/,
104 amrex::Real /*unused*/,
105 amrex::Real /*unused*/,
106 amrex::Real /*unused*/) const;
107};
108
110{
111 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
112 amrex::Real /*x*/,
113 amrex::Real /*y*/,
114 amrex::Real /*dx*/,
115 amrex::Real /*dy*/,
116 amrex::Real /*x0*/,
117 amrex::Real /*y0*/,
118 amrex::Real /*amplitude*/,
119 amrex::Real /*x_width*/,
120 amrex::Real /*y_width*/,
121 amrex::Real /*unused*/,
122 amrex::Real /*unused*/) const;
123};
124
126{
127 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
128 amrex::Real /*x*/,
129 amrex::Real /*unused*/,
130 amrex::Real /*dx*/,
131 amrex::Real /*unused*/,
132 amrex::Real /*x0*/,
133 amrex::Real /*unused*/,
134 amrex::Real /*amplitude*/,
135 amrex::Real /*x_width*/,
136 amrex::Real /*unused*/,
137 amrex::Real /*unused*/,
138 amrex::Real /*unused*/) const;
139};
140
142{
143 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
144 amrex::Real /*x*/,
145 amrex::Real /*unused*/,
146 amrex::Real /*dx*/,
147 amrex::Real /*unused*/,
148 amrex::Real /*x0*/,
149 amrex::Real /*unused*/,
150 amrex::Real /*amplitude*/,
151 amrex::Real /*x_width*/,
152 amrex::Real /*unused*/,
153 amrex::Real /*x_wavenumber*/,
154 amrex::Real /*unused*/) const;
155};
156
157} // namespace amr_wind
158
159#endif /* ScalarAdvection_H */
Definition CFDSim.H:54
Definition Field.H:112
Definition FieldRepo.H:86
void post_advance_work() override
Definition ScalarAdvection.cpp:314
amrex::Vector< amrex::Real > compute_error(const Shape &scalar_function)
Definition ScalarAdvection.cpp:247
amrex::Real m_v
Definition ScalarAdvection.H:58
amrex::Real m_x_width
Initial wave/pulse width (standard deviation for GaussianPulse and GaussianWavePacket)
Definition ScalarAdvection.H:69
const FieldRepo & m_repo
Definition ScalarAdvection.H:47
const SimTime & m_time
Definition ScalarAdvection.H:46
Field & m_velocity
Definition ScalarAdvection.H:48
amrex::Real m_y_wavenumber
Definition ScalarAdvection.H:74
amrex::Real m_y_width
Definition ScalarAdvection.H:70
Field * m_scalar
Scalar field.
Definition ScalarAdvection.H:54
void pre_advance_work() override
Definition ScalarAdvection.H:38
void post_regrid_actions() override
Definition ScalarAdvection.H:36
amrex::Real m_x0
Initial wave/pulse packet location.
Definition ScalarAdvection.H:61
const int m_w
Definition ScalarAdvection.H:51
amrex::Real m_x_wavenumber
Wave numbers.
Definition ScalarAdvection.H:73
Field & m_density
Definition ScalarAdvection.H:49
void post_init_actions() override
Definition ScalarAdvection.cpp:186
void initialize_fields(int level, const amrex::Geometry &geom) override
Initialize the fields for ScalarAdvection simulations.
Definition ScalarAdvection.cpp:166
amrex::Real m_y0
Definition ScalarAdvection.H:62
amrex::Real m_amplitude
Initial wave/pulse amplitude.
Definition ScalarAdvection.H:65
static std::string identifier()
Definition ScalarAdvection.H:22
amrex::Real m_rho
Density.
Definition ScalarAdvection.H:80
std::string m_shape
Initial wave/pulse shape.
Definition ScalarAdvection.H:77
amrex::Real m_u
Flow velocity in x-direction.
Definition ScalarAdvection.H:57
std::string m_output_fname
Definition ScalarAdvection.H:50
void initialize_scalar(const Shape &scalar_function)
Definition ScalarAdvection.cpp:211
~ScalarAdvection() override=default
ScalarAdvection(CFDSim &sim)
Definition ScalarAdvection.cpp:136
Definition SimTime.H:33
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition ScalarAdvection.H:94
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real) const
Definition ScalarAdvection.cpp:12
Definition ScalarAdvection.H:142
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real) const
Definition ScalarAdvection.cpp:90
Definition ScalarAdvection.H:84
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real) const
Definition ScalarAdvection.cpp:119
Definition ScalarAdvection.H:126
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real) const
Definition ScalarAdvection.cpp:66
Definition ScalarAdvection.H:110
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real, amrex::Real) const
Definition ScalarAdvection.cpp:38