/home/runner/work/kynema-sgf/kynema-sgf/src/utilities/sampling/SamplerBase.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/utilities/sampling/SamplerBase.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
SamplerBase.H
Go to the documentation of this file.
1#ifndef SAMPLERBASE_H
2#define SAMPLERBASE_H
3
4#include <AMReX_RealVect.H>
5#include "src/core/Factory.H"
8#include "AMReX_REAL.H"
9#include <ostream>
10
11using namespace amrex::literals;
12
13namespace kynema_sgf {
14
15class CFDSim;
16
17namespace sampling {
18
20{
21 using LocType = amrex::Vector<amrex::RealVect>;
22 using IdType = amrex::Vector<amrex::Long>;
23
24 void push_back(const amrex::RealVect& loc, const amrex::Long id)
25 {
26 m_locations.push_back(loc);
27 m_ids.push_back(id);
28 }
29
30 [[nodiscard]] const LocType& locations() const
31 {
32 AMREX_ALWAYS_ASSERT(m_locations.size() == m_ids.size());
33 return m_locations;
34 }
35
37 {
38 AMREX_ALWAYS_ASSERT(m_locations.size() == m_ids.size());
39 return m_locations;
40 }
41
42 [[nodiscard]] const IdType& ids() const
43 {
44 AMREX_ALWAYS_ASSERT(m_locations.size() == m_ids.size());
45 return m_ids;
46 }
47
50};
51
59class SamplerBase : public Factory<SamplerBase, CFDSim&>
60{
61public:
62 static std::string base_identifier() { return "SamplerBase"; }
63
64 static constexpr amrex::Real bounds_tol = constants::TIGHT_TOL;
65
66 ~SamplerBase() override = default;
67
69 [[nodiscard]] virtual std::string label() const = 0;
70 virtual std::string& label() = 0;
71
73 [[nodiscard]] virtual std::string sampletype() const = 0;
74
77 [[nodiscard]] virtual int id() const = 0;
78 virtual int& id() = 0;
79
81 [[nodiscard]] virtual long num_points() const = 0;
82
85 [[nodiscard]] virtual long num_output_points() const = 0;
86
88 virtual void initialize(const std::string& key) = 0;
89
91 virtual void sampling_locations(SampleLocType&) const = 0;
92
95 virtual void
96 sampling_locations(SampleLocType&, const amrex::Box&) const = 0;
97
99 virtual void check_bounds() = 0;
100
102 virtual void output_locations(SampleLocType&) const = 0;
103
105 virtual bool update_sampling_locations() { return false; }
106
108 virtual void post_sample_actions() {}
109
111 virtual void post_regrid_actions() {}
112
115 const std::vector<amrex::Real>& /*unused*/,
116 ncutils::NCGroup& /*unused*/,
117 const size_t /*unused*/)
118 {
119 return true;
120 }
121
123 virtual bool do_data_modification() { return false; }
124 virtual bool do_convert_velocity_los() { return false; }
125 virtual bool do_subsampling_interp() { return false; }
126
128 virtual std::vector<amrex::Real> modify_sample_data(
129 const std::vector<amrex::Real>& sampledata,
130 const std::string& /*unused*/)
131 {
132 return sampledata;
133 }
134
136 const std::vector<std::vector<amrex::Real>>& /*unused*/,
137 const int /*unused*/)
138 {}
139
141 virtual void
143 {}
144 virtual void
146 {}
147 virtual void output_netcdf_data(
148 const ncutils::NCGroup& /*unused*/, const size_t /*unused*/) const
149 {}
150
152 virtual void populate_info_file(std::ostream& /*unused*/) const {}
153};
154
155} // namespace sampling
156} // namespace kynema_sgf
157
158#endif /* SAMPLERBASE_H */
Definition CFDSim.H:55
Definition SamplerBase.H:60
virtual void populate_netcdf_metadata(const ncutils::NCGroup &) const
Definition SamplerBase.H:145
virtual std::string label() const =0
Name used to refer to this sampler (e.g., myline1)
virtual int id() const =0
Unique numeric identifier used to track particles belonging to this instance.
virtual bool update_sampling_locations()
Update the sampling locations.
Definition SamplerBase.H:105
virtual void post_sample_actions()
Run actions after sample (useful in interpolated subsampling)
Definition SamplerBase.H:108
virtual void define_netcdf_metadata(const ncutils::NCGroup &) const
Populate metadata in the NetCDF file.
Definition SamplerBase.H:142
virtual void calc_lineofsight_velocity(const std::vector< std::vector< amrex::Real > > &, const int)
Definition SamplerBase.H:135
virtual void output_netcdf_data(const ncutils::NCGroup &, const size_t) const
Definition SamplerBase.H:147
virtual std::string sampletype() const =0
Class name of this sampler (e.g., LineSampler)
virtual long num_output_points() const =0
Total number of probes to be output Note: Same as num_points() for sampling without data reduction.
virtual void sampling_locations(SampleLocType &) const =0
Populate the vector with coordinates of the sampling locations.
virtual void output_locations(SampleLocType &) const =0
Populate the vector with coordinates of the output locations.
static std::string base_identifier()
Definition SamplerBase.H:62
virtual void sampling_locations(SampleLocType &, const amrex::Box &) const =0
Populate the vector with coordinates of the sampling locations inside a box.
virtual std::vector< amrex::Real > modify_sample_data(const std::vector< amrex::Real > &sampledata, const std::string &)
Sample buffer modification instructions.
Definition SamplerBase.H:128
virtual bool do_data_modification()
Run data modification for specific sampler?
Definition SamplerBase.H:123
virtual bool do_subsampling_interp()
Definition SamplerBase.H:125
virtual long num_points() const =0
Total number of probes that belong to this sampling instance.
virtual void populate_info_file(std::ostream &) const
Populate sampler-specific YAML keys to the native/ascii info file.
Definition SamplerBase.H:152
virtual bool do_convert_velocity_los()
Definition SamplerBase.H:124
virtual void initialize(const std::string &key)=0
Read inputs and perform initialization actions.
static constexpr amrex::Real bounds_tol
Definition SamplerBase.H:64
virtual void check_bounds()=0
Check and fix the bounds of the sampler so the probes are in the domain.
virtual void post_regrid_actions()
Run actions after regrid (important when using field-based quantities)
Definition SamplerBase.H:111
virtual bool output_netcdf_field(const std::vector< amrex::Real > &, ncutils::NCGroup &, const size_t)
Run specific output for the sampler.
Definition SamplerBase.H:114
virtual std::string & label()=0
Representation of a NetCDF group.
Definition nc_interface.H:162
static constexpr amrex::Real TIGHT_TOL
A tight tolerance.
Definition constants.H:17
Definition DTUSpinnerSampler.cpp:19
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition SamplerBase.H:20
amrex::Vector< amrex::RealVect > LocType
Definition SamplerBase.H:21
void push_back(const amrex::RealVect &loc, const amrex::Long id)
Definition SamplerBase.H:24
LocType m_locations
Definition SamplerBase.H:48
const LocType & locations() const
Definition SamplerBase.H:30
amrex::Vector< amrex::Long > IdType
Definition SamplerBase.H:22
LocType & locations()
Definition SamplerBase.H:36
IdType m_ids
Definition SamplerBase.H:49
const IdType & ids() const
Definition SamplerBase.H:42