/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
8#include "AMReX_REAL.H"
9
10using namespace amrex::literals;
11
12namespace amr_wind::sampling {
13
21class RadarSampler : public SamplerBase::Register<RadarSampler>
22{
23public:
24 static std::string identifier() { return "RadarSampler"; }
25
26 explicit RadarSampler(const CFDSim& /*sim*/);
27
28 ~RadarSampler() override;
29
30 using LosRotType = amrex::Vector<vs::Tensor>;
31 using LosUnitType = amrex::Vector<vs::Vector>;
32
37 void initialize(const std::string& key) override;
38
40
42 void check_bounds() override;
43
44 void new_cone();
45
46 amrex::Real total_sweep_time() const;
47 amrex::Real periodic_time();
48 int sweep_count() const;
50 amrex::Real determine_current_sweep_angle() const;
51
53 void sampling_locations(SampleLocType& /*sample_locs**/) const override;
54
58 SampleLocType& /*sample_locs*/,
59 const amrex::Box& /*box*/) const override;
60
61 bool update_sampling_locations() override;
62 void cone_axis_locations(SampleLocType& /*sample_locs*/) const;
63 void output_locations(SampleLocType& sample_locs) const override
64 {
65 cone_axis_locations(sample_locs);
66 }
67
68 void post_sample_actions() override;
69
70 void
71 define_netcdf_metadata(const ncutils::NCGroup& /*unused*/) const override;
72 void
73 populate_netcdf_metadata(const ncutils::NCGroup& /*unused*/) const override;
75 const ncutils::NCGroup& /*unused*/,
76 const size_t /*unused*/) const override;
77
79 const std::vector<amrex::Real>& output_buffer,
81 const size_t nt) override;
82
84 std::string label() const override { return m_label; }
85 std::string& label() override { return m_label; }
86
88 std::string sampletype() const override { return identifier(); }
89
91 int id() const override { return m_id; }
92 int& id() override { return m_id; }
93
95 long num_points() const override
96 {
97 return m_interp_steps * m_ntotal *
98 (m_npts + m_ntheta * m_npts * (m_nphi - 1));
99 }
100
102 long num_output_points() const override { return m_ntotal * m_npts; }
103
105 long num_points_scan() const
106 {
107 return m_ntotal * (m_npts + m_ntheta * m_npts * (m_nphi - 1));
108 }
109
111 long num_points_axis() const { return m_npts; }
112
114 long num_points_cone() const
115 {
116 return m_npts + m_ntheta * m_npts * (m_nphi - 1);
117 }
118
120 long num_points_quad() const { return 1 + m_ntheta * (m_nphi - 1); }
121
122 static void line_average(
123 const std::vector<amrex::Real>& weights,
124 const std::vector<amrex::Real>& values,
125 std::vector<amrex::Real>& reduced,
126 long offset);
127
129 bool do_data_modification() override { return true; }
130 bool do_convert_velocity_los() override { return true; }
131 bool do_subsampling_interp() override { return true; }
132
134 std::vector<amrex::Real> modify_sample_data(
135 const std::vector<amrex::Real>& sample_data,
136 const std::string& /*unused*/) override;
137
139 const std::vector<std::vector<amrex::Real>>& /*velocity_raw*/,
140 const int /*interp_idx*/) override;
141
142protected:
143 const CFDSim& m_sim;
144
145 std::string m_label;
146 int m_id{-1};
147
148 amrex::Real m_radtodeg{180.0_rt / static_cast<amrex::Real>(M_PI)};
149
150 amrex::Vector<amrex::Real> m_start;
151 amrex::Vector<amrex::Real> m_end;
152
157
160
161 std::vector<amrex::Real> m_los_velocity;
162 std::vector<amrex::Real> m_los_velocity_next;
163 std::vector<amrex::Real> m_los_velocity_prior;
164 std::vector<amrex::Real> m_los_velocity_interp;
165
166 std::vector<amrex::Real> m_weights;
167 std::vector<vs::Vector> m_rays;
168
169 amrex::Real m_sample_freq; // Simulation sample rate
170 amrex::Real m_radar_sample_freq; // Actual device sample rate
171 int m_npts{0};
172 amrex::Real m_cone_angle;
173 std::string m_radar_quad_type;
175 amrex::Real m_beam_length;
176 amrex::Real m_angular_speed;
177 amrex::Vector<amrex::Real> m_axis;
178 amrex::Vector<amrex::Real> m_vertical;
179 amrex::Real m_sweep_angle;
180 amrex::Real m_reset_time;
181 amrex::Vector<amrex::Real> m_elevation_angles;
182
183 int m_nphi{5};
184 int m_ntheta{5};
185
187
188 long m_radar_iter{0}; // Iteration tracking from radar perspective
189 amrex::Real m_radar_time; // Current radar time
190 amrex::Real
191 m_periodic_time; // Running cycle time (Forward, pause, reverse, pause)
192 int m_ns; // Number of radar steps in current timestep
193 long m_ntotal; // Max number of radar timesteps in any timestep
196
197 bool m_debug_print{false};
199
205
206 amrex::Real m_fill_val{-99999.99_rt};
207};
208
209} // namespace amr_wind::sampling
210
211#endif /* RADARSAMPLER_H */
Definition CFDSim.H:54
amrex::Real m_sample_freq
Definition RadarSampler.H:169
long num_output_points() const override
Number of probe locations to output.
Definition RadarSampler.H:102
void initialize(const std::string &key) override
Definition RadarSampler.cpp:17
long m_num_output_points_prior
Definition RadarSampler.H:204
int m_ns_prior
Definition RadarSampler.H:201
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:154
std::string & label() override
Definition RadarSampler.H:85
std::vector< amrex::Real > m_los_velocity_next
Definition RadarSampler.H:162
std::vector< amrex::Real > m_los_velocity_prior
Definition RadarSampler.H:163
void define_netcdf_metadata(const ncutils::NCGroup &) const override
Definition RadarSampler.cpp:552
long m_ntotal_prior
Definition RadarSampler.H:202
amrex::Vector< vs::Vector > LosUnitType
Definition RadarSampler.H:31
bool output_netcdf_field(const std::vector< amrex::Real > &output_buffer, ncutils::NCGroup &grp, const size_t nt) override
Definition RadarSampler.cpp:599
void calc_lineofsight_velocity(const std::vector< std::vector< amrex::Real > > &, const int) override
Definition RadarSampler.cpp:383
amrex::Real m_cone_angle
Definition RadarSampler.H:172
long m_num_points_prior
Definition RadarSampler.H:203
amrex::Real m_fill_val
Definition RadarSampler.H:206
int m_nphi
Definition RadarSampler.H:183
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:151
long num_points_cone() const
Number of probe locations in a cone.
Definition RadarSampler.H:114
phase determine_operation_phase() const
Definition RadarSampler.cpp:155
amrex::Vector< amrex::Real > m_vertical
Definition RadarSampler.H:178
amrex::Vector< amrex::Real > m_elevation_angles
Definition RadarSampler.H:181
amrex::Real m_radar_time
Definition RadarSampler.H:189
amrex::Real m_reset_time
Definition RadarSampler.H:180
long m_ntotal
Definition RadarSampler.H:193
phase m_current_phase
Definition RadarSampler.H:195
amrex::Real periodic_time()
Definition RadarSampler.cpp:139
amrex::Real m_sweep_angle
Definition RadarSampler.H:179
long m_radar_iter
Definition RadarSampler.H:188
amrex::Real m_periodic_time
Definition RadarSampler.H:191
std::string m_label
Definition RadarSampler.H:145
long m_cone_size
Definition RadarSampler.H:194
SampleLocType::LocType m_initial_cone
Definition RadarSampler.H:153
bool m_output_cone_points
Definition RadarSampler.H:198
int m_ntheta
Definition RadarSampler.H:184
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:105
long m_interp_steps
Definition RadarSampler.H:200
int sweep_count() const
Definition RadarSampler.cpp:148
std::string label() const override
Name of this sampling object.
Definition RadarSampler.H:84
void new_cone()
Definition RadarSampler.cpp:318
std::string sampletype() const override
Type of this sampling object.
Definition RadarSampler.H:88
amrex::Real m_angular_speed
Definition RadarSampler.H:176
amrex::Real m_radtodeg
Definition RadarSampler.H:148
amrex::Real m_radar_sample_freq
Definition RadarSampler.H:170
long num_points_axis() const
Number of probe locations on Radar axis.
Definition RadarSampler.H:111
const CFDSim & m_sim
Definition RadarSampler.H:143
vs::Vector m_radar_rotation_axis
Definition RadarSampler.H:186
void cone_axis_locations(SampleLocType &) const
Definition RadarSampler.cpp:521
int m_id
Definition RadarSampler.H:146
long num_points_quad() const
Number of probe locations in a spherical cap.
Definition RadarSampler.H:120
amrex::Real determine_current_sweep_angle() const
Definition RadarSampler.cpp:174
std::string m_radar_quad_type
Definition RadarSampler.H:173
SampleLocType::LocType m_prior_cones
Definition RadarSampler.H:155
amrex::Vector< amrex::Real > m_axis
Definition RadarSampler.H:177
amrex::Vector< amrex::Real > m_start
Definition RadarSampler.H:150
int & id() override
Definition RadarSampler.H:92
std::vector< amrex::Real > m_los_velocity_interp
Definition RadarSampler.H:164
int id() const override
Unique identifier for this set of probe locations.
Definition RadarSampler.H:91
void output_locations(SampleLocType &sample_locs) const override
Definition RadarSampler.H:63
int m_npts_azimuth
Definition RadarSampler.H:174
LosRotType m_los_proj
Definition RadarSampler.H:158
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
void output_netcdf_data(const ncutils::NCGroup &, const size_t) const override
Definition RadarSampler.cpp:573
bool do_convert_velocity_los() override
Definition RadarSampler.H:130
void post_sample_actions() override
Definition RadarSampler.cpp:537
long num_points() const override
Number of sampling container locations in a timestep.
Definition RadarSampler.H:95
phase
Definition RadarSampler.H:39
@ REVERSE_PAUSE
Definition RadarSampler.H:39
@ FORWARD_PAUSE
Definition RadarSampler.H:39
@ REVERSE
Definition RadarSampler.H:39
@ FORWARD
Definition RadarSampler.H:39
void populate_netcdf_metadata(const ncutils::NCGroup &) const override
Definition RadarSampler.cpp:569
int m_ns
Definition RadarSampler.H:192
SampleLocType::LocType m_sample_cones
Definition RadarSampler.H:156
LosUnitType m_los_unit
Definition RadarSampler.H:159
static std::string identifier()
Definition RadarSampler.H:24
amrex::Real m_beam_length
Definition RadarSampler.H:175
bool do_subsampling_interp() override
Definition RadarSampler.H:131
amrex::Vector< vs::Tensor > LosRotType
Definition RadarSampler.H:30
bool do_data_modification() override
Run data modification for specific sampler.
Definition RadarSampler.H:129
std::vector< amrex::Real > m_weights
Definition RadarSampler.H:166
int m_npts
Definition RadarSampler.H:171
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:197
std::vector< amrex::Real > m_los_velocity
Definition RadarSampler.H:161
std::vector< vs::Vector > m_rays
Definition RadarSampler.H:167
Representation of a NetCDF group.
Definition nc_interface.H:170
Definition DTUSpinnerSampler.cpp:19
VectorT< amrex::Real > Vector
Definition vector.H:148
Definition SamplerBase.H:19
amrex::Vector< amrex::RealVect > LocType
Definition SamplerBase.H:20