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

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/utilities/sampling/Sampling.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Sampling.H
Go to the documentation of this file.
1#ifndef SAMPLING_H
2#define SAMPLING_H
3
4#include <memory>
5
6#include "amr-wind/CFDSim.H"
11#include <AMReX_PlotFileUtil.H>
12
26namespace amr_wind::sampling {
27
41class Sampling : public PostProcessBase::Register<Sampling>
42{
43public:
44 static std::string identifier() { return "Sampling"; }
45
46 Sampling(CFDSim& /*sim*/, std::string /*label*/);
47
48 ~Sampling() override;
49
51 void pre_init_actions() override {}
52
54 void initialize() override;
55
57 void post_advance_work() override;
58
60 void post_regrid_actions() override;
61
62 // Public for CUDA
63
65 virtual void impl_write_native();
66
67 void sampling_workflow();
68 void sampling_post();
69 void fill_buffer();
72
74 {
75 return static_cast<int>(m_total_particles);
76 }
77
78#ifdef AMR_WIND_USE_NETCDF
80 {
81 if (m_out_fmt == "netcdf") {
82 return static_cast<int>(m_netcdf_output_particles);
83 }
84 return 0;
85 }
86#endif
87
88 const amrex::Vector<std::string>& var_names() const { return m_var_names; }
89
90protected:
92 void update_container();
93
96
98 virtual void process_output();
99
101 virtual void prepare_netcdf_file();
102
104 void write_netcdf();
105
111 virtual void write_ascii();
112
114 void write_header_file(const std::string& fname);
115
117 void write_info_file(const std::string& fname);
118
120
121 static amrex::Vector<std::string> int_var_names()
122 {
123 return {"uid", "set_id", "probe_id"};
124 };
125
126private:
128
129 std::unique_ptr<SamplingContainer> m_scontainer;
130 amrex::Vector<std::unique_ptr<SamplerBase>> m_samplers;
131
133 amrex::Vector<std::string> m_var_names;
134
136 amrex::Vector<Field*> m_fields;
137
139 amrex::Vector<IntField*> m_int_fields;
140
142 std::unique_ptr<DerivedQtyMgr> m_derived_mgr;
143
149 const std::string m_label;
150
152#ifdef AMR_WIND_USE_NETCDF
153 std::string m_out_fmt{"netcdf"};
154 std::string m_ncfile_name;
155
156 // Current sample buffer for full container
157 std::vector<double> m_sample_buf;
158
159 // Current sample buffer for output
160 std::vector<double> m_output_buf;
161
164#else
165 std::string m_out_fmt{"native"};
166#endif
167
168 // Sample initial condition for interpolation consistency
169 bool m_restart_sample{false};
170
171 // number of field components
172 int m_ncomp{0};
173
174 // number of int field components
175 int m_nicomp{0};
176
177 // number of derived field components
178 int m_ndcomp{0};
179
182
184 int m_out_freq{100};
185
188};
189
190} // namespace amr_wind::sampling
191
192#endif /* SAMPLING_H */
Definition CFDSim.H:54
Definition SamplingContainer.H:65
Definition Sampling.H:42
void write_info_file(const std::string &fname)
Output extra information for certain formats.
Definition Sampling.cpp:425
std::unique_ptr< DerivedQtyMgr > m_derived_mgr
List of derived fields to be sampled for this collection of probes.
Definition Sampling.H:142
bool m_restart_sample
Definition Sampling.H:169
int m_ncomp
Definition Sampling.H:172
amrex::Vector< IntField * > m_int_fields
List of IntFields to be sampled for this collection of probes.
Definition Sampling.H:139
int num_netcdf_output_particles() const
Definition Sampling.H:79
SamplingContainer & sampling_container()
Definition Sampling.H:119
int m_out_freq
Frequency of data sampling and output.
Definition Sampling.H:184
void post_advance_work() override
Interpolate fields at a given timestep and output to disk.
Definition Sampling.cpp:180
virtual void impl_write_native()
Write sampled data in binary format.
Definition Sampling.cpp:385
void sampling_workflow()
Definition Sampling.cpp:204
std::unique_ptr< SamplingContainer > m_scontainer
Definition Sampling.H:129
std::vector< double > m_output_buf
Definition Sampling.H:160
std::vector< double > m_sample_buf
Definition Sampling.H:157
virtual void write_ascii()
Definition Sampling.cpp:407
size_t m_total_particles
Number of sampling container particles:
Definition Sampling.H:181
void post_regrid_actions() override
Actions to perform post regrid e.g. redistribute particles.
Definition Sampling.cpp:241
int num_total_particles() const
Definition Sampling.H:73
void initialize() override
Read user inputs and create the different data probe instances.
Definition Sampling.cpp:21
std::string m_ncfile_name
Definition Sampling.H:154
size_t m_netcdf_output_particles
Number of output particles in netcdf.
Definition Sampling.H:163
int m_nicomp
Definition Sampling.H:175
void write_header_file(const std::string &fname)
Output extra information for certain formats.
Definition Sampling.cpp:456
void update_sampling_locations()
Conduct work to update the particles.
Definition Sampling.cpp:163
void fill_buffer()
Definition Sampling.cpp:356
void update_container()
Update the container by re-initializing the particles.
Definition Sampling.cpp:145
void convert_velocity_lineofsight()
Definition Sampling.cpp:252
virtual void process_output()
Output data based on user-defined format.
Definition Sampling.cpp:371
void write_netcdf()
Write sampled data into a NetCDF file.
Definition Sampling.cpp:567
int m_ndcomp
Definition Sampling.H:178
static amrex::Vector< std::string > int_var_names()
Definition Sampling.H:121
amrex::Vector< Field * > m_fields
List of fields to be sampled for this collection of probes.
Definition Sampling.H:136
amrex::Vector< std::string > m_var_names
List of variable names for output.
Definition Sampling.H:133
void sampling_post()
Definition Sampling.cpp:225
amrex::Vector< std::unique_ptr< SamplerBase > > m_samplers
Definition Sampling.H:130
static std::string identifier()
Definition Sampling.H:44
void pre_init_actions() override
Perform actions before mesh is created.
Definition Sampling.H:51
std::string m_out_fmt
Format of the data output (native, ascii, netcdf, etc.)
Definition Sampling.H:153
virtual void prepare_netcdf_file()
Prepare NetCDF metadata.
Definition Sampling.cpp:493
CFDSim & m_sim
Definition Sampling.H:127
int m_out_delay
Delay number of timestep before output.
Definition Sampling.H:187
Sampling(CFDSim &, std::string)
Definition Sampling.cpp:13
void create_output_buffer()
Definition Sampling.cpp:314
const amrex::Vector< std::string > & var_names() const
Definition Sampling.H:88
const std::string m_label
Definition Sampling.H:149
Definition DTUSpinnerSampler.cpp:16