/home/runner/work/kynema-sgf/kynema-sgf/src/wind_energy/actuator/ActuatorModel.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/wind_energy/actuator/ActuatorModel.H Source File
Kynema-SGF 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
4#include "src/core/Factory.H"
11
12namespace kynema_sgf {
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
129 [[nodiscard]] const auto& grid() const { return m_data.grid(); }
130
131 void read_inputs(const utils::ActParser& pp) override
132 {
134 m_out_op.read_io_options(pp);
135 }
136
141
142 void determine_root_proc(amrex::Vector<int>& act_proc_count) override;
143
144 [[nodiscard]] int num_velocity_points() const override;
145
146 void update_positions(VecSlice& pos) override
147 {
149 const auto& vpos = m_data.grid().vel_pos;
150 std::copy(vpos.begin(), vpos.end(), pos.begin());
151 }
152
153 void update_fields(const VecSlice& vel, const RealSlice& density) override
154 {
155 std::copy(vel.begin(), vel.end(), m_data.grid().vel.begin());
156 std::copy(
157 density.begin(), density.end(), m_data.grid().density.begin());
159 }
160
161 void compute_forces() override
162 {
164 m_src_op.setup_op();
165 }
166
168 const int lev,
169 const amrex::MFIter& mfi,
170 const amrex::Geometry& geom) override
171 {
172 m_src_op(lev, mfi, geom);
173 }
174
175 void prepare_outputs(const std::string& out_dir) override
176 {
177 m_out_op.prepare_outputs(out_dir);
178 }
179
180 void write_outputs() override { m_out_op.write_outputs(); }
181
182 void init_actuator_source() override
183 {
185 m_src_op.initialize();
186 }
187};
188
189template <typename ActTrait, typename SrcTrait>
191 amrex::Vector<int>& act_proc_count)
192{
194 {
195 // Sanity checks
196 const auto& linfo = m_data.info();
197 const auto& plist = linfo.procs;
198 AMREX_ALWAYS_ASSERT(linfo.root_proc > -1);
199 AMREX_ALWAYS_ASSERT(plist.find(linfo.root_proc) != plist.end());
200 }
201}
202
203template <typename ActTrait, typename SrcTrait>
205{
206 const auto& linfo = m_data.info();
207 auto& grid = m_data.grid();
208
209 return (linfo.sample_vel_in_proc) ? grid.vel.size() : 0;
210}
211
212} // namespace actuator
213} // namespace kynema_sgf
214
215#endif /* ACTUATORMODEL_H */
Definition CFDSim.H:55
const auto & meta() const
Return the meta info object for this actuator instance.
Definition ActuatorModel.H:126
void compute_source_term(const int lev, const amrex::MFIter &mfi, const amrex::Geometry &geom) override
Definition ActuatorModel.H:167
ActTrait::DataType m_data
Instance that holds all data related to a particular actuator type.
Definition ActuatorModel.H:87
ActInfo & info() override
Return the core info object for this actuator instance.
Definition ActuatorModel.H:123
static std::string identifier()
Definition ActuatorModel.H:96
void determine_root_proc(amrex::Vector< int > &act_proc_count) override
Definition ActuatorModel.H:190
void init_actuator_source() override
Definition ActuatorModel.H:182
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
const auto & grid() const
Return the actuator grid for inspection and diagnostics.
Definition ActuatorModel.H:129
int num_velocity_points() const override
Definition ActuatorModel.H:204
void update_positions(VecSlice &pos) override
Definition ActuatorModel.H:146
void determine_influenced_procs() override
Definition ActuatorModel.H:137
void compute_forces() override
Definition ActuatorModel.H:161
ActModel(CFDSim &sim, const std::string &label, const int id)
Definition ActuatorModel.H:106
void read_inputs(const utils::ActParser &pp) override
Definition ActuatorModel.H:131
void update_fields(const VecSlice &vel, const RealSlice &density) override
Definition ActuatorModel.H:153
ops::ProcessOutputsOp< ActTrait, SrcTrait > m_out_op
Outputs processor.
Definition ActuatorModel.H:93
void write_outputs() override
Definition ActuatorModel.H:180
const std::string & label() const override
Return the unique identifier (name) for this instance.
Definition ActuatorModel.H:111
void prepare_outputs(const std::string &out_dir) override
Definition ActuatorModel.H:175
int id() const override
Return the unique tag (integer ID) for this instance.
Definition ActuatorModel.H:117
Definition ActuatorModel.H:30
virtual void update_fields(const VecSlice &, const RealSlice &)=0
virtual void determine_root_proc(amrex::Vector< int > &)=0
virtual void prepare_outputs(const std::string &)=0
virtual void update_positions(VecSlice &)=0
virtual void determine_influenced_procs()=0
virtual void read_inputs(const utils::ActParser &)=0
virtual const std::string & label() const =0
virtual void compute_source_term(int lev, const amrex::MFIter &mfi, const amrex::Geometry &geom)=0
virtual int num_velocity_points() const =0
virtual const ActInfo & info() const =0
static std::string base_identifier()
Definition ActuatorModel.H:32
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
::kynema_sgf::utils::MultiParser ActParser
Definition ActParser.H:8
Definition ActParser.H:6
::kynema_sgf::utils::Slice< kynema_sgf::vs::Vector > VecSlice
Definition actuator_types.H:94
::kynema_sgf::utils::Slice< amrex::Real > RealSlice
Definition actuator_types.H:92
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition actuator_types.H:175
Definition actuator_ops.H:61
Definition actuator_ops.H:32
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