/home/runner/work/amr-wind/amr-wind/amr-wind/wind_energy/actuator/ActuatorModel.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/wind_energy/actuator/ActuatorModel.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ActuatorModel.H
Go to the documentation of this file.
1#ifndef ACTUATORMODEL_H
2#define ACTUATORMODEL_H
3
11
12namespace amr_wind {
13
14class CFDSim;
15
16namespace actuator {
17
29 : public Factory<ActuatorModel, CFDSim&, const std::string&, const int>
30{
31public:
32 static std::string base_identifier() { return "ActuatorModel"; }
33
34 ~ActuatorModel() override = default;
35
36 [[nodiscard]] virtual const std::string& label() const = 0;
37
38 [[nodiscard]] virtual int id() const = 0;
39
40 [[nodiscard]] virtual const ActInfo& info() const = 0;
41
42 virtual ActInfo& info() = 0;
43
44 virtual void read_inputs(const utils::ActParser&) = 0;
45
46 virtual void determine_influenced_procs() = 0;
47
48 virtual void determine_root_proc(amrex::Vector<int>&) = 0;
49
50 virtual void init_actuator_source() = 0;
51
52 [[nodiscard]] virtual int num_velocity_points() const = 0;
53
54 virtual void update_positions(VecSlice&) = 0;
55
56 virtual void update_fields(const VecSlice&, const RealSlice&) = 0;
57
58 virtual void compute_forces() = 0;
59
60 virtual void compute_source_term(
61 int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom) = 0;
62
63 virtual void prepare_outputs(const std::string&) = 0;
64
65 virtual void write_outputs() = 0;
66};
67
82template <typename ActTrait, typename SrcTrait = ActSrcLine>
83class ActModel : public ActuatorModel::Register<ActModel<ActTrait, SrcTrait>>
84{
85private:
87 typename ActTrait::DataType m_data;
88
91
94
95public:
96 static std::string identifier()
97 {
98 return ActTrait::identifier() + SrcTrait::identifier();
99 }
100
106 ActModel(CFDSim& sim, const std::string& label, const int id)
108 {}
109
111 [[nodiscard]] const std::string& label() const override
112 {
113 return m_data.info().label;
114 }
115
117 [[nodiscard]] int id() const override { return m_data.info().id; }
118
120 [[nodiscard]] const ActInfo& info() const override { return m_data.info(); }
121
123 ActInfo& info() override { return m_data.info(); }
124
126 [[nodiscard]] const auto& meta() const { return m_data.meta(); }
127
128 void read_inputs(const utils::ActParser& pp) override
129 {
131 m_out_op.read_io_options(pp);
132 }
133
138
139 void determine_root_proc(amrex::Vector<int>& act_proc_count) override;
140
141 [[nodiscard]] int num_velocity_points() const override;
142
143 void update_positions(VecSlice& pos) override
144 {
146 const auto& vpos = m_data.grid().vel_pos;
147 std::copy(vpos.begin(), vpos.end(), pos.begin());
148 }
149
150 void update_fields(const VecSlice& vel, const RealSlice& density) override
151 {
152 std::copy(vel.begin(), vel.end(), m_data.grid().vel.begin());
153 std::copy(
154 density.begin(), density.end(), m_data.grid().density.begin());
156 }
157
158 void compute_forces() override
159 {
161 m_src_op.setup_op();
162 }
163
165 const int lev,
166 const amrex::MFIter& mfi,
167 const amrex::Geometry& geom) override
168 {
169 m_src_op(lev, mfi, geom);
170 }
171
172 void prepare_outputs(const std::string& out_dir) override
173 {
174 m_out_op.prepare_outputs(out_dir);
175 }
176
177 void write_outputs() override { m_out_op.write_outputs(); }
178
179 void init_actuator_source() override
180 {
182 m_src_op.initialize();
183 }
184};
185
186template <typename ActTrait, typename SrcTrait>
188 amrex::Vector<int>& act_proc_count)
189{
191 {
192 // Sanity checks
193 const auto& linfo = m_data.info();
194 const auto& plist = linfo.procs;
195 AMREX_ALWAYS_ASSERT(linfo.root_proc > -1);
196 AMREX_ALWAYS_ASSERT(plist.find(linfo.root_proc) != plist.end());
197 }
198}
199
200template <typename ActTrait, typename SrcTrait>
202{
203 const auto& linfo = m_data.info();
204 auto& grid = m_data.grid();
205
206 return (linfo.sample_vel_in_proc) ? grid.vel.size() : 0;
207}
208
209} // namespace actuator
210} // namespace amr_wind
211
212#endif /* ACTUATORMODEL_H */
Definition CFDSim.H:54
const auto & meta() const
Return the meta info object for this actuator instance.
Definition ActuatorModel.H:126
void write_outputs() override
Definition ActuatorModel.H:177
void compute_forces() override
Definition ActuatorModel.H:158
void compute_source_term(const int lev, const amrex::MFIter &mfi, const amrex::Geometry &geom) override
Definition ActuatorModel.H:164
ops::ProcessOutputsOp< ActTrait, SrcTrait > m_out_op
Outputs processor.
Definition ActuatorModel.H:93
int num_velocity_points() const override
Definition ActuatorModel.H:201
void prepare_outputs(const std::string &out_dir) override
Definition ActuatorModel.H:172
int id() const override
Return the unique tag (integer ID) for this instance.
Definition ActuatorModel.H:117
void determine_influenced_procs() override
Definition ActuatorModel.H:134
const std::string & label() const override
Return the unique identifier (name) for this instance.
Definition ActuatorModel.H:111
void read_inputs(const utils::ActParser &pp) override
Definition ActuatorModel.H:128
void determine_root_proc(amrex::Vector< int > &act_proc_count) override
Definition ActuatorModel.H:187
ActTrait::DataType m_data
Instance that holds all data related to a particular actuator type.
Definition ActuatorModel.H:87
void init_actuator_source() override
Definition ActuatorModel.H:179
void update_fields(const VecSlice &vel, const RealSlice &density) override
Definition ActuatorModel.H:150
ActModel(CFDSim &sim, const std::string &label, const int id)
Definition ActuatorModel.H:106
static std::string identifier()
Definition ActuatorModel.H:96
ActInfo & info() override
Return the core info object for this actuator instance.
Definition ActuatorModel.H:123
void update_positions(VecSlice &pos) override
Definition ActuatorModel.H:143
ops::ActSrcOp< ActTrait, SrcTrait > m_src_op
Source computation operator.
Definition ActuatorModel.H:90
const ActInfo & info() const override
Return the core info object for this actuator instance.
Definition ActuatorModel.H:120
Definition ActuatorModel.H:30
virtual const std::string & label() const =0
virtual void update_positions(VecSlice &)=0
virtual ActInfo & info()=0
virtual const ActInfo & info() const =0
virtual void prepare_outputs(const std::string &)=0
virtual int num_velocity_points() const =0
virtual void determine_root_proc(amrex::Vector< int > &)=0
~ActuatorModel() override=default
virtual void compute_source_term(int lev, const amrex::MFIter &mfi, const amrex::Geometry &geom)=0
virtual void determine_influenced_procs()=0
virtual void init_actuator_source()=0
virtual void read_inputs(const utils::ActParser &)=0
virtual int id() const =0
static std::string base_identifier()
Definition ActuatorModel.H:32
virtual void update_fields(const VecSlice &, const RealSlice &)=0
Definition actuator_ops.H:68
void determine_root_proc(typename T::DataType &, amrex::Vector< int > &)
Definition actuator_opsI.H:32
void determine_influenced_procs(typename T::DataType &)
Definition actuator_opsI.H:12
::amr_wind::utils::MultiParser ActParser
Definition ActParser.H:8
Definition ActParser.H:6
::amr_wind::utils::Slice< amrex::Real > RealSlice
Definition actuator_types.H:64
::amr_wind::utils::Slice< amr_wind::vs::Vector > VecSlice
Definition actuator_types.H:66
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition actuator_types.H:147
Definition actuator_ops.H:61
Definition actuator_ops.H:32
Definition actuator_ops.H:71
Definition actuator_ops.H:19
Definition actuator_ops.H:43
Definition actuator_ops.H:54
AMREX_GPU_HOST_DEVICE iterator end()
Definition Slice.H:57
AMREX_GPU_HOST_DEVICE iterator begin()
Definition Slice.H:56