/home/runner/work/amr-wind/amr-wind/amr-wind/utilities/sampling/RadarSampler.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/utilities/sampling/RadarSampler.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
RadarSampler.H
Go to the documentation of this file.
1#ifndef RADARSAMPLER_H
2#define RADARSAMPLER_H
3
4#include <cstdint>
9#include "AMReX_REAL.H"
10
11using namespace amrex::literals;
12
13namespace amr_wind::sampling {
14
22class RadarSampler : public SamplerBase::Register<RadarSampler>
23{
24public:
25 static std::string identifier() { return "RadarSampler"; }
26
27 explicit RadarSampler(const CFDSim& /*sim*/);
28
29 ~RadarSampler() override;
30
31 using LosRotType = amrex::Vector<vs::Tensor>;
32 using LosUnitType = amrex::Vector<vs::Vector>;
33
38 void initialize(const std::string& key) override;
39
40 enum class phase : std::uint8_t {
45 };
46
48 void check_bounds() override;
49
50 void new_cone();
51
52 [[nodiscard]] amrex::Real total_sweep_time() const;
53 amrex::Real periodic_time();
54 [[nodiscard]] int sweep_count() const;
55 [[nodiscard]] phase determine_operation_phase() const;
56 [[nodiscard]] amrex::Real determine_current_sweep_angle() const;
57
59 void sampling_locations(SampleLocType& /*sample_locs**/) const override;
60
64 SampleLocType& /*sample_locs*/,
65 const amrex::Box& /*box*/) const override;
66
67 bool update_sampling_locations() override;
68 void cone_axis_locations(SampleLocType& /*sample_locs*/) const;
69 void output_locations(SampleLocType& sample_locs) const override
70 {
71 cone_axis_locations(sample_locs);
72 }
73
74 void post_sample_actions() override;
75
76 void
77 define_netcdf_metadata(const ncutils::NCGroup& /*unused*/) const override;
78 void
79 populate_netcdf_metadata(const ncutils::NCGroup& /*unused*/) const override;
81 const ncutils::NCGroup& /*unused*/, size_t /*unused*/) const override;
82
84 const std::vector<amrex::Real>& output_buffer,
86 size_t nt) override;
87
89 [[nodiscard]] std::string label() const override { return m_label; }
90 std::string& label() override { return m_label; }
91
93 [[nodiscard]] std::string sampletype() const override
94 {
95 return identifier();
96 }
97
99 [[nodiscard]] int id() const override { return m_id; }
100 int& id() override { return m_id; }
101
103 [[nodiscard]] long num_points() const override
104 {
105 return m_interp_steps * m_ntotal *
106 (m_npts + m_ntheta * m_npts * (m_nphi - 1));
107 }
108
110 [[nodiscard]] long num_output_points() const override
111 {
112 return m_ntotal * m_npts;
113 }
114
116 [[nodiscard]] long num_points_scan() const
117 {
118 return m_ntotal * (m_npts + m_ntheta * m_npts * (m_nphi - 1));
119 }
120
122 [[nodiscard]] long num_points_axis() const { return m_npts; }
123
125 [[nodiscard]] long num_points_cone() const
126 {
127 return m_npts + (m_ntheta * m_npts * (m_nphi - 1));
128 }
129
131 [[nodiscard]] long num_points_quad() const
132 {
133 return 1 + (m_ntheta * (m_nphi - 1));
134 }
135
136 static void line_average(
137 const std::vector<amrex::Real>& weights,
138 const std::vector<amrex::Real>& values,
139 std::vector<amrex::Real>& reduced,
140 long offset);
141
143 bool do_data_modification() override { return true; }
144 bool do_convert_velocity_los() override { return true; }
145 bool do_subsampling_interp() override { return true; }
146
148 std::vector<amrex::Real> modify_sample_data(
149 const std::vector<amrex::Real>& sample_data,
150 const std::string& /*unused*/) override;
151
153 const std::vector<std::vector<amrex::Real>>& /*velocity_raw*/,
154 int /*interp_idx*/) override;
155
156protected:
157 const CFDSim& m_sim;
158
159 std::string m_label;
160 int m_id{-1};
161
162 amrex::Real m_radtodeg{180.0_rt / std::numbers::pi_v<amrex::Real>};
163
164 amrex::Vector<amrex::Real> m_start;
165 amrex::Vector<amrex::Real> m_end;
166
171
174
175 std::vector<amrex::Real> m_los_velocity;
176 std::vector<amrex::Real> m_los_velocity_next;
177 std::vector<amrex::Real> m_los_velocity_prior;
178 std::vector<amrex::Real> m_los_velocity_interp;
179
180 std::vector<amrex::Real> m_weights;
181 std::vector<vs::Vector> m_rays;
182
183 amrex::Real m_sample_freq; // Simulation sample rate
184 amrex::Real m_radar_sample_freq; // Actual device sample rate
185 int m_npts{0};
186 amrex::Real m_cone_angle;
187 std::string m_radar_quad_type;
189 amrex::Real m_beam_length;
190 amrex::Real m_angular_speed;
191 amrex::Vector<amrex::Real> m_axis;
192 amrex::Vector<amrex::Real> m_vertical;
193 amrex::Real m_sweep_angle;
194 amrex::Real m_reset_time;
195 amrex::Vector<amrex::Real> m_elevation_angles;
196
197 int m_nphi{5};
198 int m_ntheta{5};
199
201
202 long m_radar_iter{0}; // Iteration tracking from radar perspective
203 amrex::Real m_radar_time; // Current radar time
204 amrex::Real
205 m_periodic_time; // Running cycle time (Forward, pause, reverse, pause)
206 int m_ns; // Number of radar steps in current timestep
207 long m_ntotal; // Max number of radar timesteps in any timestep
210
211 bool m_debug_print{false};
213
219
220 amrex::Real m_fill_val{-99999.99_rt};
221};
222
223} // namespace amr_wind::sampling
224
225#endif /* RADARSAMPLER_H */
Definition CFDSim.H:54
amrex::Real m_sample_freq
Definition RadarSampler.H:183
long num_output_points() const override
Number of probe locations to output.
Definition RadarSampler.H:110
void initialize(const std::string &key) override
Definition RadarSampler.cpp:17
long m_num_output_points_prior
Definition RadarSampler.H:218
int m_ns_prior
Definition RadarSampler.H:215
void sampling_locations(SampleLocType &) const override
Populate and return a vector of probe locations to be sampled.
Definition RadarSampler.cpp:470
SampleLocType::LocType m_current_cones
Definition RadarSampler.H:168
std::string & label() override
Definition RadarSampler.H:90
std::vector< amrex::Real > m_los_velocity_next
Definition RadarSampler.H:176
std::vector< amrex::Real > m_los_velocity_prior
Definition RadarSampler.H:177
void define_netcdf_metadata(const ncutils::NCGroup &) const override
Definition RadarSampler.cpp:552
long m_ntotal_prior
Definition RadarSampler.H:216
amrex::Vector< vs::Vector > LosUnitType
Definition RadarSampler.H:32
amrex::Real m_cone_angle
Definition RadarSampler.H:186
long m_num_points_prior
Definition RadarSampler.H:217
amrex::Real m_fill_val
Definition RadarSampler.H:220
int m_nphi
Definition RadarSampler.H:197
void check_bounds() override
Check and fix the bounds of the sampler so the probes are in the domain.
Definition RadarSampler.cpp:102
amrex::Vector< amrex::Real > m_end
Definition RadarSampler.H:165
long num_points_cone() const
Number of probe locations in a cone.
Definition RadarSampler.H:125
phase determine_operation_phase() const
Definition RadarSampler.cpp:155
amrex::Vector< amrex::Real > m_vertical
Definition RadarSampler.H:192
amrex::Vector< amrex::Real > m_elevation_angles
Definition RadarSampler.H:195
amrex::Real m_radar_time
Definition RadarSampler.H:203
amrex::Real m_reset_time
Definition RadarSampler.H:194
long m_ntotal
Definition RadarSampler.H:207
phase m_current_phase
Definition RadarSampler.H:209
amrex::Real periodic_time()
Definition RadarSampler.cpp:139
amrex::Real m_sweep_angle
Definition RadarSampler.H:193
long m_radar_iter
Definition RadarSampler.H:202
amrex::Real m_periodic_time
Definition RadarSampler.H:205
std::string m_label
Definition RadarSampler.H:159
long m_cone_size
Definition RadarSampler.H:208
bool output_netcdf_field(const std::vector< amrex::Real > &output_buffer, ncutils::NCGroup &grp, size_t nt) override
Definition RadarSampler.cpp:599
SampleLocType::LocType m_initial_cone
Definition RadarSampler.H:167
bool m_output_cone_points
Definition RadarSampler.H:212
int m_ntheta
Definition RadarSampler.H:198
amrex::Real total_sweep_time() const
Definition RadarSampler.cpp:134
long num_points_scan() const
Number of sampling container locations per interp step.
Definition RadarSampler.H:116
long m_interp_steps
Definition RadarSampler.H:214
int sweep_count() const
Definition RadarSampler.cpp:148
std::string label() const override
Name of this sampling object.
Definition RadarSampler.H:89
void new_cone()
Definition RadarSampler.cpp:318
std::string sampletype() const override
Type of this sampling object.
Definition RadarSampler.H:93
amrex::Real m_angular_speed
Definition RadarSampler.H:190
amrex::Real m_radtodeg
Definition RadarSampler.H:162
amrex::Real m_radar_sample_freq
Definition RadarSampler.H:184
long num_points_axis() const
Number of probe locations on Radar axis.
Definition RadarSampler.H:122
const CFDSim & m_sim
Definition RadarSampler.H:157
vs::Vector m_radar_rotation_axis
Definition RadarSampler.H:200
void cone_axis_locations(SampleLocType &) const
Definition RadarSampler.cpp:521
int m_id
Definition RadarSampler.H:160
long num_points_quad() const
Number of probe locations in a spherical cap.
Definition RadarSampler.H:131
amrex::Real determine_current_sweep_angle() const
Definition RadarSampler.cpp:174
void calc_lineofsight_velocity(const std::vector< std::vector< amrex::Real > > &, int) override
Definition RadarSampler.cpp:383
std::string m_radar_quad_type
Definition RadarSampler.H:187
SampleLocType::LocType m_prior_cones
Definition RadarSampler.H:169
amrex::Vector< amrex::Real > m_axis
Definition RadarSampler.H:191
amrex::Vector< amrex::Real > m_start
Definition RadarSampler.H:164
int & id() override
Definition RadarSampler.H:100
std::vector< amrex::Real > m_los_velocity_interp
Definition RadarSampler.H:178
int id() const override
Unique identifier for this set of probe locations.
Definition RadarSampler.H:99
void output_locations(SampleLocType &sample_locs) const override
Definition RadarSampler.H:69
int m_npts_azimuth
Definition RadarSampler.H:188
LosRotType m_los_proj
Definition RadarSampler.H:172
RadarSampler(const CFDSim &)
Definition RadarSampler.cpp:13
static void line_average(const std::vector< amrex::Real > &weights, const std::vector< amrex::Real > &values, std::vector< amrex::Real > &reduced, long offset)
Definition RadarSampler.cpp:446
bool do_convert_velocity_los() override
Definition RadarSampler.H:144
void post_sample_actions() override
Definition RadarSampler.cpp:537
void output_netcdf_data(const ncutils::NCGroup &, size_t) const override
Definition RadarSampler.cpp:573
long num_points() const override
Number of sampling container locations in a timestep.
Definition RadarSampler.H:103
void populate_netcdf_metadata(const ncutils::NCGroup &) const override
Definition RadarSampler.cpp:569
int m_ns
Definition RadarSampler.H:206
SampleLocType::LocType m_sample_cones
Definition RadarSampler.H:170
LosUnitType m_los_unit
Definition RadarSampler.H:173
phase
Definition RadarSampler.H:40
@ REVERSE_PAUSE
Definition RadarSampler.H:44
@ FORWARD_PAUSE
Definition RadarSampler.H:42
@ REVERSE
Definition RadarSampler.H:43
@ FORWARD
Definition RadarSampler.H:41
static std::string identifier()
Definition RadarSampler.H:25
amrex::Real m_beam_length
Definition RadarSampler.H:189
bool do_subsampling_interp() override
Definition RadarSampler.H:145
amrex::Vector< vs::Tensor > LosRotType
Definition RadarSampler.H:31
bool do_data_modification() override
Run data modification for specific sampler.
Definition RadarSampler.H:143
std::vector< amrex::Real > m_weights
Definition RadarSampler.H:180
int m_npts
Definition RadarSampler.H:185
std::vector< amrex::Real > modify_sample_data(const std::vector< amrex::Real > &sample_data, const std::string &) override
Modify sample buffer after sampling happens.
Definition RadarSampler.cpp:422
bool update_sampling_locations() override
Definition RadarSampler.cpp:193
bool m_debug_print
Definition RadarSampler.H:211
std::vector< amrex::Real > m_los_velocity
Definition RadarSampler.H:175
std::vector< vs::Vector > m_rays
Definition RadarSampler.H:181
Representation of a NetCDF group.
Definition nc_interface.H:162
Definition DTUSpinnerSampler.cpp:19
VectorT< amrex::Real > Vector
Definition vector.H:145
Definition SamplerBase.H:19
amrex::Vector< amrex::RealVect > LocType
Definition SamplerBase.H:20