/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
7#include "AMReX_REAL.H"
8
9using namespace amrex::literals;
10
11namespace amr_wind {
12
18class ScalarAdvection : public Physics::Register<ScalarAdvection>
19{
20public:
21 static std::string identifier() { return "ScalarAdvection"; }
22
23 explicit ScalarAdvection(CFDSim& sim);
24
25 ~ScalarAdvection() override = default;
26
28 void initialize_fields(int level, const amrex::Geometry& geom) override;
29
30 template <typename Shape>
31 amrex::Vector<amrex::Real> compute_error(const Shape& scalar_function);
32
33 void post_init_actions() override;
34
35 void post_regrid_actions() override {}
36
37 void pre_advance_work() override {}
38
39 void post_advance_work() override;
40
41 template <typename Shape>
42 void initialize_scalar(const Shape& scalar_function);
43
44private:
49 std::string m_output_fname = "error.log";
50 const int m_w = 20;
51
53 Field* m_scalar{nullptr};
54
56 amrex::Real m_u{1.0_rt};
57 amrex::Real m_v{0.0_rt};
58
60 amrex::Real m_x0{0.1_rt};
61 amrex::Real m_y0{0.1_rt};
62
64 amrex::Real m_amplitude{1.0_rt};
65
68 amrex::Real m_x_width{0.01_rt};
69 amrex::Real m_y_width{0.01_rt};
70
72 amrex::Real m_x_wavenumber{16 * utils::pi()};
73 amrex::Real m_y_wavenumber{16 * utils::pi()};
74
76 std::string m_shape{"gaussian"};
77
79 amrex::Real m_rho{1.0_rt};
80};
81
83{
84 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
85 const amrex::Real /*x*/,
86 const amrex::Real /*x0*/,
87 const amrex::Real /*amplitude*/,
88 const amrex::Real /*x_width*/,
89 const amrex::Real /*x_wavenumber*/) const;
90};
91
93{
94 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
95 const amrex::Real /*x*/,
96 const amrex::Real /*unused*/,
97 const amrex::Real /*dx*/,
98 const amrex::Real /*unused*/,
99 const amrex::Real /*x0*/,
100 const amrex::Real /*unused*/,
101 const amrex::Real /*amplitude*/,
102 const amrex::Real /*x_width*/,
103 const amrex::Real /*unused*/,
104 const amrex::Real /*unused*/,
105 const amrex::Real /*unused*/) const;
106};
107
109{
110 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
111 const amrex::Real /*x*/,
112 const amrex::Real /*y*/,
113 const amrex::Real /*dx*/,
114 const amrex::Real /*dy*/,
115 const amrex::Real /*x0*/,
116 const amrex::Real /*y0*/,
117 const amrex::Real /*amplitude*/,
118 const amrex::Real /*x_width*/,
119 const amrex::Real /*y_width*/,
120 const amrex::Real /*unused*/,
121 const amrex::Real /*unused*/) const;
122};
123
125{
126 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
127 const amrex::Real /*x*/,
128 const amrex::Real /*unused*/,
129 const amrex::Real /*dx*/,
130 const amrex::Real /*unused*/,
131 const amrex::Real /*x0*/,
132 const amrex::Real /*unused*/,
133 const amrex::Real /*amplitude*/,
134 const amrex::Real /*x_width*/,
135 const amrex::Real /*unused*/,
136 const amrex::Real /*unused*/,
137 const amrex::Real /*unused*/) const;
138};
139
141{
142 AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(
143 const amrex::Real /*x*/,
144 const amrex::Real /*unused*/,
145 const amrex::Real /*dx*/,
146 const amrex::Real /*unused*/,
147 const amrex::Real /*x0*/,
148 const amrex::Real /*unused*/,
149 const amrex::Real /*amplitude*/,
150 const amrex::Real /*x_width*/,
151 const amrex::Real /*unused*/,
152 const amrex::Real /*x_wavenumber*/,
153 const amrex::Real /*unused*/) const;
154};
155
156} // namespace amr_wind
157
158#endif /* ScalarAdvection_H */
Definition CFDSim.H:54
Definition Field.H:116
Definition FieldRepo.H:86
void post_advance_work() override
Definition ScalarAdvection.cpp:312
amrex::Vector< amrex::Real > compute_error(const Shape &scalar_function)
Definition ScalarAdvection.cpp:245
amrex::Real m_v
Definition ScalarAdvection.H:57
amrex::Real m_x_width
Initial wave/pulse width (standard deviation for GaussianPulse and GaussianWavePacket)
Definition ScalarAdvection.H:68
const FieldRepo & m_repo
Definition ScalarAdvection.H:46
const SimTime & m_time
Definition ScalarAdvection.H:45
Field & m_velocity
Definition ScalarAdvection.H:47
amrex::Real m_y_wavenumber
Definition ScalarAdvection.H:73
amrex::Real m_y_width
Definition ScalarAdvection.H:69
Field * m_scalar
Scalar field.
Definition ScalarAdvection.H:53
void pre_advance_work() override
Definition ScalarAdvection.H:37
void post_regrid_actions() override
Definition ScalarAdvection.H:35
amrex::Real m_x0
Initial wave/pulse packet location.
Definition ScalarAdvection.H:60
const int m_w
Definition ScalarAdvection.H:50
amrex::Real m_x_wavenumber
Wave numbers.
Definition ScalarAdvection.H:72
Field & m_density
Definition ScalarAdvection.H:48
void post_init_actions() override
Definition ScalarAdvection.cpp:183
void initialize_fields(int level, const amrex::Geometry &geom) override
Initialize the fields for ScalarAdvection simulations.
Definition ScalarAdvection.cpp:163
amrex::Real m_y0
Definition ScalarAdvection.H:61
amrex::Real m_amplitude
Initial wave/pulse amplitude.
Definition ScalarAdvection.H:64
static std::string identifier()
Definition ScalarAdvection.H:21
amrex::Real m_rho
Density.
Definition ScalarAdvection.H:79
std::string m_shape
Initial wave/pulse shape.
Definition ScalarAdvection.H:76
amrex::Real m_u
Flow velocity in x-direction.
Definition ScalarAdvection.H:56
std::string m_output_fname
Definition ScalarAdvection.H:49
void initialize_scalar(const Shape &scalar_function)
Definition ScalarAdvection.cpp:208
~ScalarAdvection() override=default
ScalarAdvection(CFDSim &sim)
Definition ScalarAdvection.cpp:133
Definition SimTime.H:33
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr amrex::Real pi()
Return as an amrex::Real.
Definition trig_ops.H:18
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition ScalarAdvection.H:93
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real) const
Definition ScalarAdvection.cpp:11
Definition ScalarAdvection.H:141
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real) const
Definition ScalarAdvection.cpp:87
Definition ScalarAdvection.H:83
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real) const
Definition ScalarAdvection.cpp:116
Definition ScalarAdvection.H:125
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real) const
Definition ScalarAdvection.cpp:63
Definition ScalarAdvection.H:109
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real operator()(const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real, const amrex::Real) const
Definition ScalarAdvection.cpp:36