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

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/wind_energy/actuator/sector/actuator_sector_ops.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
actuator_sector_ops.H
Go to the documentation of this file.
1#ifndef ACTUATOR_SECTOR_OPS_H
2#define ACTUATOR_SECTOR_OPS_H
3
8
9#include <cstddef>
10#include <cmath>
11#include <numbers>
12#include <string>
13
14namespace ncutils {
15class NCGroup;
16}
17
19
20void build_radial_grid(ActuatorSectorData& meta);
21
23
25
27
29 amrex::Real time,
30 const vs::Tensor& initial_orientation,
31 const vs::Vector& rotor_angular_velocity);
32
34 amrex::Real radius,
35 amrex::Real theta,
36 amrex::Real time,
37 const vs::Vector& center0,
38 const vs::Vector& translation_velocity,
39 const vs::Tensor& initial_orientation,
40 const vs::Vector& rotor_angular_velocity);
41
42void blade_basis(
43 amrex::Real theta,
44 const vs::Tensor& orientation,
45 vs::Vector& e_r,
46 vs::Vector& e_theta,
47 vs::Vector& e_normal);
48
50
52void set_placement(
54 const vs::Vector& center,
55 const vs::Vector& rotor_normal,
56 const vs::Vector& translation_velocity);
57
58void build_gaussian_table(ActuatorSectorData& meta);
59
60amrex::Real timestep_width(const CFDSim& sim);
61
62ActuatorRefinementGeometry refinement_geometry(
63 const ActuatorSectorData& meta, const std::string& label, amrex::Real time);
64
66 const std::string& ncfile,
67 const ActuatorSectorData& meta,
68 const ActInfo& info);
69
71 const ncutils::NCGroup& parent,
72 const std::string& group_name,
73 const ActuatorSectorData& meta);
74
76 const ncutils::NCGroup& parent,
77 const std::string& group_name,
78 const ActuatorSectorData& meta);
79
80void write_netcdf(
81 const std::string& ncfile,
82 const ActuatorSectorData& meta,
83 const ActInfo& info,
84 const ActGrid& grid,
85 amrex::Real time,
86 int time_index);
87
89 const ncutils::NCGroup& parent,
90 const std::string& group_name,
91 const ActuatorSectorData& meta,
92 const ActGrid& grid,
93 amrex::Real time,
94 int time_index,
95 std::size_t time_record);
96
97AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
98{
99 const amrex::Real pi = std::numbers::pi_v<amrex::Real>;
100 return 1.0_rt / (pi * std::sqrt(pi));
101}
102
103} // namespace kynema_sgf::actuator::sector
104
106
107template <>
112
113template <>
118
119template <>
121{
122 [[nodiscard]] amrex::Vector<ActuatorRefinementGeometry>
123 operator()(const ActuatorSector::DataType& data, amrex::Real time) const;
124};
125
126template <>
128{
129 [[nodiscard]] std::optional<motion::RigidTransform>
130 operator()(const ActuatorSector::DataType& data, amrex::Real time) const;
131};
132
133template <>
138
139template <>
144
145template <>
150
151template <>
153{
155 void read_io_options(const utils::ActParser& pp);
156 void prepare_outputs(const std::string& out_dir);
157 void write_outputs();
158
159private:
161 std::string m_nc_filename;
163};
164
165template <>
167{
168private:
171
175 amrex::Gpu::DeviceVector<amrex::Real> m_gaussian_table;
176
177 void copy_to_device();
178
179public:
181 : m_data(data)
182 , m_act_src(m_data.sim().repo().get_field("actuator_src_term"))
183 {}
184
185 void initialize();
186
188
189 void
190 operator()(int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom);
191};
192
193} // namespace kynema_sgf::actuator::ops
194
195#endif /* ACTUATOR_SECTOR_OPS_H */
Definition Field.H:115
void copy_to_device()
Definition actuator_sector_ops.cpp:954
DeviceVecList m_epsilon
Definition actuator_sector_ops.H:174
Field & m_act_src
Definition actuator_sector_ops.H:170
amrex::Gpu::DeviceVector< amrex::Real > m_gaussian_table
Definition actuator_sector_ops.H:175
DeviceVecList m_force
Definition actuator_sector_ops.H:173
ActSrcOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:180
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:169
DeviceVecList m_pos
Definition actuator_sector_ops.H:172
Representation of a NetCDF group.
Definition nc_interface.H:162
Definition ActSrcLineOp.H:12
Definition actuator_sector_ops.cpp:21
void prepare_netcdf_group(const ncutils::NCGroup &parent, const std::string &group_name, const ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:337
void build_gaussian_table(ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:293
ActuatorRefinementGeometry refinement_geometry(const ActuatorSectorData &meta, const std::string &label, const amrex::Real time)
Definition actuator_sector_ops.cpp:317
amrex::Real timestep_width(const CFDSim &sim)
Definition actuator_sector_ops.cpp:67
void prepare_netcdf_file(const std::string &ncfile, const ActuatorSectorData &meta, const ActInfo &info)
Definition actuator_sector_ops.cpp:409
void build_radial_grid(ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:77
void write_netcdf(const std::string &ncfile, const ActuatorSectorData &meta, const ActInfo &info, const ActGrid &grid, const amrex::Real time, const int time_index)
Definition actuator_sector_ops.cpp:493
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
Definition actuator_sector_ops.H:97
void write_netcdf_group_metadata(const ncutils::NCGroup &parent, const std::string &group_name, const ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:391
void update_midpoint_sample_points(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:217
void blade_basis(const amrex::Real theta, const vs::Tensor &orientation, vs::Vector &e_r, vs::Vector &e_theta, vs::Vector &e_normal)
Definition actuator_sector_ops.cpp:183
vs::Tensor rotation_matrix_from_vector(const vs::Vector &rotation_vector)
Definition actuator_sector_ops.cpp:164
void set_placement(ActuatorSector::DataType &data, const vs::Vector &center, const vs::Vector &rotor_normal, const vs::Vector &translation_velocity)
Set the initial placement and prescribed translation of a mounted rotor.
Definition actuator_sector_ops.cpp:261
vs::Tensor rotation_matrix_from_euler_degrees(const vs::Vector &angles)
Definition actuator_sector_ops.cpp:144
void write_netcdf_group(const ncutils::NCGroup &parent, const std::string &group_name, const ActuatorSectorData &meta, const ActGrid &grid, const amrex::Real time, const int time_index, const std::size_t time_record)
Definition actuator_sector_ops.cpp:435
vs::Vector blade_position(const amrex::Real radius, const amrex::Real theta, const amrex::Real time, const vs::Vector &center0, const vs::Vector &translation_velocity, const vs::Tensor &initial_orientation, const vs::Vector &rotor_angular_velocity)
Definition actuator_sector_ops.cpp:198
vs::Tensor orientation_at_time(const amrex::Real time, const vs::Tensor &initial_orientation, const vs::Vector &rotor_angular_velocity)
Definition actuator_sector_ops.cpp:174
vs::Tensor orientation_matrix_from_normal(const vs::Vector &normal)
Definition actuator_sector_ops.cpp:149
::kynema_sgf::utils::MultiParser ActParser
Definition ActParser.H:8
amrex::Gpu::DeviceVector< kynema_sgf::vs::Vector > DeviceVecList
Definition actuator_types.H:97
VectorT< amrex::Real > Vector
Definition vector.H:145
TensorT< amrex::Real > Tensor
Definition tensor.H:158
Definition nc_interface.cpp:12
Definition actuator_types.H:73
Definition ActuatorSector.H:209
ActDataHolder< ActuatorSector > DataType
Definition ActuatorSector.H:213
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:766
Definition actuator_ops.H:64
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:709
Definition actuator_ops.H:35
ProcessOutputsOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:154
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:160
std::string m_nc_filename
Definition actuator_sector_ops.H:161
void operator()(ActuatorSector::DataType &data, const utils::ActParser &pp)
Definition actuator_sector_ops.cpp:519
Definition actuator_ops.H:22
std::optional< motion::RigidTransform > operator()(const typename ActTrait::DataType &, amrex::Real) const
Definition actuator_ops.H:100
amrex::Vector< ActuatorRefinementGeometry > operator()(const typename ActTrait::DataType &, amrex::Real) const
Definition actuator_ops.H:84
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:760
Definition actuator_ops.H:46
void operator()(ActuatorSector::DataType &)
Definition actuator_sector_ops.H:142
Definition actuator_ops.H:57