/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
63 const std::string& ncfile,
64 const ActuatorSectorData& meta,
65 const ActInfo& info);
66
68 const ncutils::NCGroup& parent,
69 const std::string& group_name,
70 const ActuatorSectorData& meta);
71
73 const ncutils::NCGroup& parent,
74 const std::string& group_name,
75 const ActuatorSectorData& meta);
76
77void write_netcdf(
78 const std::string& ncfile,
79 const ActuatorSectorData& meta,
80 const ActInfo& info,
81 const ActGrid& grid,
82 amrex::Real time,
83 int time_index);
84
86 const ncutils::NCGroup& parent,
87 const std::string& group_name,
88 const ActuatorSectorData& meta,
89 const ActGrid& grid,
90 amrex::Real time,
91 int time_index,
92 std::size_t time_record);
93
94AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
95{
96 const amrex::Real pi = std::numbers::pi_v<amrex::Real>;
97 return 1.0_rt / (pi * std::sqrt(pi));
98}
99
100} // namespace kynema_sgf::actuator::sector
101
103
104template <>
109
110template <>
115
116template <>
121
122template <>
127
128template <>
133
134template <>
136{
138 void read_io_options(const utils::ActParser& pp);
139 void prepare_outputs(const std::string& out_dir);
140 void write_outputs();
141
142private:
144 std::string m_nc_filename;
146};
147
148template <>
150{
151private:
154
158 amrex::Gpu::DeviceVector<amrex::Real> m_gaussian_table;
159
160 void copy_to_device();
161
162public:
164 : m_data(data)
165 , m_act_src(m_data.sim().repo().get_field("actuator_src_term"))
166 {}
167
168 void initialize();
169
171
172 void
173 operator()(int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom);
174};
175
176} // namespace kynema_sgf::actuator::ops
177
178#endif /* ACTUATOR_SECTOR_OPS_H */
Definition Field.H:112
void copy_to_device()
Definition actuator_sector_ops.cpp:886
DeviceVecList m_epsilon
Definition actuator_sector_ops.H:157
Field & m_act_src
Definition actuator_sector_ops.H:153
amrex::Gpu::DeviceVector< amrex::Real > m_gaussian_table
Definition actuator_sector_ops.H:158
DeviceVecList m_force
Definition actuator_sector_ops.H:156
ActSrcOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:163
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:152
DeviceVecList m_pos
Definition actuator_sector_ops.H:155
Representation of a NetCDF group.
Definition nc_interface.H:162
Definition ActSrcLineOp.H:12
Definition actuator_sector_ops.cpp:20
void prepare_netcdf_group(const ncutils::NCGroup &parent, const std::string &group_name, const ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:316
void build_gaussian_table(ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:292
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:388
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:472
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
Definition actuator_sector_ops.H:94
void write_netcdf_group_metadata(const ncutils::NCGroup &parent, const std::string &group_name, const ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:370
void update_midpoint_sample_points(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:216
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:182
vs::Tensor rotation_matrix_from_vector(const vs::Vector &rotation_vector)
Definition actuator_sector_ops.cpp:163
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:260
vs::Tensor rotation_matrix_from_euler_degrees(const vs::Vector &angles)
Definition actuator_sector_ops.cpp:143
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:414
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:197
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:173
vs::Tensor orientation_matrix_from_normal(const vs::Vector &normal)
Definition actuator_sector_ops.cpp:148
::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:698
Definition actuator_ops.H:61
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:661
Definition actuator_ops.H:32
ProcessOutputsOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:137
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:143
std::string m_nc_filename
Definition actuator_sector_ops.H:144
void operator()(ActuatorSector::DataType &data, const utils::ActParser &pp)
Definition actuator_sector_ops.cpp:498
Definition actuator_ops.H:19
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:692
Definition actuator_ops.H:43
void operator()(ActuatorSector::DataType &)
Definition actuator_sector_ops.H:125
Definition actuator_ops.H:54