/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 <cmath>
10#include <numbers>
11#include <string>
12
14
15void build_radial_grid(ActuatorSectorData& meta);
16
18
20
22
24 amrex::Real time,
25 const vs::Tensor& initial_orientation,
26 const vs::Vector& rotor_angular_velocity);
27
29 amrex::Real radius,
30 amrex::Real theta,
31 amrex::Real time,
32 const vs::Vector& center0,
33 const vs::Vector& translation_velocity,
34 const vs::Tensor& initial_orientation,
35 const vs::Vector& rotor_angular_velocity);
36
37void blade_basis(
38 amrex::Real theta,
39 const vs::Tensor& orientation,
40 vs::Vector& e_r,
41 vs::Vector& e_theta,
42 vs::Vector& e_normal);
43
45
46void build_gaussian_table(ActuatorSectorData& meta);
47
48amrex::Real timestep_width(const CFDSim& sim);
49
51 const std::string& ncfile,
52 const ActuatorSectorData& meta,
53 const ActInfo& info);
54
55void write_netcdf(
56 const std::string& ncfile,
57 const ActuatorSectorData& meta,
58 const ActInfo& info,
59 const ActGrid& grid,
60 amrex::Real time,
61 int time_index);
62
63AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
64{
65 const amrex::Real pi = std::numbers::pi_v<amrex::Real>;
66 return 1.0_rt / (pi * std::sqrt(pi));
67}
68
69} // namespace kynema_sgf::actuator::sector
70
72
73template <>
78
79template <>
84
85template <>
90
91template <>
96
97template <>
102
103template <>
105{
107 void read_io_options(const utils::ActParser& pp);
108 void prepare_outputs(const std::string& out_dir);
109 void write_outputs();
110
111private:
113 std::string m_nc_filename;
115};
116
117template <>
119{
120private:
123
127 amrex::Gpu::DeviceVector<amrex::Real> m_gaussian_table;
128
129 void copy_to_device();
130
131public:
133 : m_data(data)
134 , m_act_src(m_data.sim().repo().get_field("actuator_src_term"))
135 {}
136
137 void initialize();
138
140
141 void
142 operator()(int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom);
143};
144
145} // namespace kynema_sgf::actuator::ops
146
147#endif /* ACTUATOR_SECTOR_OPS_H */
Definition Field.H:112
void copy_to_device()
Definition actuator_sector_ops.cpp:758
DeviceVecList m_epsilon
Definition actuator_sector_ops.H:126
Field & m_act_src
Definition actuator_sector_ops.H:122
amrex::Gpu::DeviceVector< amrex::Real > m_gaussian_table
Definition actuator_sector_ops.H:127
DeviceVecList m_force
Definition actuator_sector_ops.H:125
ActSrcOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:132
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:121
DeviceVecList m_pos
Definition actuator_sector_ops.H:124
Definition ActSrcLineOp.H:12
Definition actuator_sector_ops.cpp:20
void build_gaussian_table(ActuatorSectorData &meta)
Definition actuator_sector_ops.cpp:258
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:282
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:357
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real gaussian_norm_3d()
Definition actuator_sector_ops.H:63
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
vs::Tensor rotation_matrix_from_euler_degrees(const vs::Vector &angles)
Definition actuator_sector_ops.cpp:143
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:87
VectorT< amrex::Real > Vector
Definition vector.H:145
TensorT< amrex::Real > Tensor
Definition tensor.H:158
Definition actuator_types.H:73
Definition ActuatorSector.H:184
ActDataHolder< ActuatorSector > DataType
Definition ActuatorSector.H:188
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:584
Definition actuator_ops.H:61
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:547
Definition actuator_ops.H:32
ProcessOutputsOp(ActuatorSector::DataType &data)
Definition actuator_sector_ops.H:106
ActuatorSector::DataType & m_data
Definition actuator_sector_ops.H:112
std::string m_nc_filename
Definition actuator_sector_ops.H:113
void operator()(ActuatorSector::DataType &data, const utils::ActParser &pp)
Definition actuator_sector_ops.cpp:423
Definition actuator_ops.H:19
void operator()(ActuatorSector::DataType &data)
Definition actuator_sector_ops.cpp:578
Definition actuator_ops.H:43
void operator()(ActuatorSector::DataType &)
Definition actuator_sector_ops.H:94
Definition actuator_ops.H:54