Jet  v1.3.3
scalar_grid2.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_SCALAR_GRID2_H_
8 #define INCLUDE_JET_SCALAR_GRID2_H_
9 
10 #include <jet/array2.h>
11 #include <jet/array_accessor2.h>
12 #include <jet/array_samplers2.h>
13 #include <jet/grid2.h>
14 #include <jet/scalar_field2.h>
15 #include <memory>
16 #include <vector>
17 
18 namespace jet {
19 
21 class ScalarGrid2 : public ScalarField2, public Grid2 {
22  public:
25 
28 
31 
33  virtual ~ScalarGrid2();
34 
41  virtual Size2 dataSize() const = 0;
42 
50  virtual Vector2D dataOrigin() const = 0;
51 
53  virtual std::shared_ptr<ScalarGrid2> clone() const = 0;
54 
56  void clear();
57 
59  void resize(
60  size_t resolutionX,
61  size_t resolutionY,
62  double gridSpacingX = 1.0,
63  double gridSpacingY = 1.0,
64  double originX = 0.0,
65  double originY = 0.0,
66  double initialValue = 0.0);
67 
69  void resize(
70  const Size2& resolution,
71  const Vector2D& gridSpacing = Vector2D(1, 1),
72  const Vector2D& origin = Vector2D(),
73  double initialValue = 0.0);
74 
76  void resize(
77  double gridSpacingX,
78  double gridSpacingY,
79  double originX,
80  double originY);
81 
83  void resize(const Vector2D& gridSpacing, const Vector2D& origin);
84 
86  const double& operator()(size_t i, size_t j) const;
87 
89  double& operator()(size_t i, size_t j);
90 
92  Vector2D gradientAtDataPoint(size_t i, size_t j) const;
93 
95  double laplacianAtDataPoint(size_t i, size_t j) const;
96 
99 
102 
105 
107  void fill(double value,
109 
111  void fill(const std::function<double(const Vector2D&)>& func,
113 
122  const std::function<void(size_t, size_t)>& func) const;
123 
134  const std::function<void(size_t, size_t)>& func) const;
135 
136  // ScalarField2 implementations
137 
144  double sample(const Vector2D& x) const override;
145 
152  std::function<double(const Vector2D&)> sampler() const override;
153 
155  Vector2D gradient(const Vector2D& x) const override;
156 
158  double laplacian(const Vector2D& x) const override;
159 
161  void serialize(std::vector<uint8_t>* buffer) const override;
162 
164  void deserialize(const std::vector<uint8_t>& buffer) override;
165 
166  protected:
169 
171  void setScalarGrid(const ScalarGrid2& other);
172 
174  void getData(std::vector<double>* data) const override;
175 
177  void setData(const std::vector<double>& data) override;
178 
179  private:
180  Array2<double> _data;
182  std::function<double(const Vector2D&)> _sampler;
183 
184  void resetSampler();
185 };
186 
188 typedef std::shared_ptr<ScalarGrid2> ScalarGrid2Ptr;
189 
192  public:
195 
198 
201  const Size2& resolution,
202  const Vector2D& gridSpacing,
203  const Vector2D& gridOrigin,
204  double initialVal) const = 0;
205 };
206 
208 typedef std::shared_ptr<ScalarGridBuilder2> ScalarGridBuilder2Ptr;
209 
210 } // namespace jet
211 
212 #endif // INCLUDE_JET_SCALAR_GRID2_H_
jet::ScalarGrid2::deserialize
void deserialize(const std::vector< uint8_t > &buffer) override
Deserializes the input buffer to the grid instance.
jet::ExecutionPolicy
ExecutionPolicy
Execution policy tag.
Definition: parallel.h:13
array2.h
array_accessor2.h
jet::ScalarGrid2::clear
void clear()
Clears the contents of the grid.
jet::ScalarGrid2::laplacian
double laplacian(const Vector2D &x) const override
Returns the Laplacian at given position x.
jet::ScalarGrid2::dataAccessor
ScalarDataAccessor dataAccessor()
Returns the read-write data array accessor.
jet::Grid2::origin
const Vector2D & origin() const
Returns the grid origin.
jet::ScalarGridBuilder2
Abstract base class for 2-D scalar grid builder.
Definition: scalar_grid2.h:191
jet::Vector2D
Vector2< double > Vector2D
Double-type 2D vector.
Definition: vector2.h:340
jet::ScalarGrid2::ConstScalarDataAccessor
ConstArrayAccessor2< double > ConstScalarDataAccessor
Read-only array accessor type.
Definition: scalar_grid2.h:27
jet::ScalarGrid2::sample
double sample(const Vector2D &x) const override
Returns the sampled value at given position x.
jet::ScalarGrid2::ScalarDataAccessor
ArrayAccessor2< double > ScalarDataAccessor
Read-write array accessor type.
Definition: scalar_grid2.h:24
scalar_field2.h
jet::ScalarGrid2::setScalarGrid
void setScalarGrid(const ScalarGrid2 &other)
Sets the data storage and predefined samplers with given grid.
jet::ScalarGrid2::setData
void setData(const std::vector< double > &data) override
Sets the data from a continuous linear array.
jet::ScalarField2
Abstract base class for 2-D scalar field.
Definition: scalar_field2.h:18
jet::Grid2
Abstract base class for 2-D cartesian grid structure.
Definition: grid2.h:30
jet::Grid2::DataPositionFunc
std::function< Vector2D(size_t, size_t)> DataPositionFunc
Function type for mapping data index to actual position.
Definition: grid2.h:33
jet::Array< T, 2 >
2-D array class.
Definition: array2.h:42
jet::ScalarGrid2::getData
void getData(std::vector< double > *data) const override
Fetches the data into a continuous linear array.
jet::ScalarGrid2::parallelForEachDataPointIndex
void parallelForEachDataPointIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each data point parallelly.
jet::LinearArraySampler< T, R, 2 >
2-D linear array sampler class.
Definition: array_samplers2.h:77
jet
Definition: advection_solver2.h:18
jet::ConstArrayAccessor< T, 2 >
2-D read-only array accessor class.
Definition: array_accessor2.h:261
jet::ScalarGrid2::resize
void resize(double gridSpacingX, double gridSpacingY, double originX, double originY)
Resizes the grid using given parameters.
jet::ScalarGrid2::ScalarGrid2
ScalarGrid2()
Constructs an empty grid.
jet::ScalarGrid2
Abstract base class for 2-D scalar grid structure.
Definition: scalar_grid2.h:21
jet::ScalarGrid2::~ScalarGrid2
virtual ~ScalarGrid2()
Default destructor.
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::ScalarGridBuilder2Ptr
std::shared_ptr< ScalarGridBuilder2 > ScalarGridBuilder2Ptr
Shared pointer for the ScalarGridBuilder2 type.
Definition: scalar_grid2.h:208
jet::ScalarGrid2::operator()
double & operator()(size_t i, size_t j)
Returns the grid data at given data point.
jet::ScalarGrid2::fill
void fill(const std::function< double(const Vector2D &)> &func, ExecutionPolicy policy=ExecutionPolicy::kParallel)
Fills the grid with given position-to-value mapping function.
jet::ScalarGrid2::resize
void resize(const Vector2D &gridSpacing, const Vector2D &origin)
Resizes the grid using given parameters.
jet::ScalarGridBuilder2::ScalarGridBuilder2
ScalarGridBuilder2()
Creates a builder.
jet::ScalarGrid2::constDataAccessor
ConstScalarDataAccessor constDataAccessor() const
Returns the read-only data array accessor.
jet::ScalarGridBuilder2::build
virtual ScalarGrid2Ptr build(const Size2 &resolution, const Vector2D &gridSpacing, const Vector2D &gridOrigin, double initialVal) const =0
Returns 2-D scalar grid with given parameters.
jet::ScalarGrid2::serialize
void serialize(std::vector< uint8_t > *buffer) const override
Serializes the grid instance to the output buffer.
jet::ScalarGrid2::forEachDataPointIndex
void forEachDataPointIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each data point.
jet::ScalarGrid2::fill
void fill(double value, ExecutionPolicy policy=ExecutionPolicy::kParallel)
Fills the grid with given value.
jet::ScalarGrid2::resize
void resize(const Size2 &resolution, const Vector2D &gridSpacing=Vector2D(1, 1), const Vector2D &origin=Vector2D(), double initialValue=0.0)
Resizes the grid using given parameters.
jet::ScalarGrid2Ptr
std::shared_ptr< ScalarGrid2 > ScalarGrid2Ptr
Shared pointer for the ScalarGrid2 type.
Definition: scalar_grid2.h:188
jet::Size2
2-D size class.
Definition: size2.h:19
jet::ArrayAccessor< T, 2 >
2-D array accessor class.
Definition: array_accessor2.h:31
jet::ScalarGrid2::laplacianAtDataPoint
double laplacianAtDataPoint(size_t i, size_t j) const
Returns the Laplacian at given data point.
grid2.h
jet::ScalarGrid2::sampler
std::function< double(const Vector2D &)> sampler() const override
Returns the sampler function.
jet::ScalarGrid2::dataPosition
DataPositionFunc dataPosition() const
Returns the function that maps data point to its position.
jet::ScalarGrid2::resize
void resize(size_t resolutionX, size_t resolutionY, double gridSpacingX=1.0, double gridSpacingY=1.0, double originX=0.0, double originY=0.0, double initialValue=0.0)
Resizes the grid using given parameters.
jet::ExecutionPolicy::kParallel
@ kParallel
jet::ScalarGridBuilder2::~ScalarGridBuilder2
virtual ~ScalarGridBuilder2()
Default destructor.
jet::ScalarGrid2::swapScalarGrid
void swapScalarGrid(ScalarGrid2 *other)
Swaps the data storage and predefined samplers with given grid.
array_samplers2.h
jet::Grid2::resolution
const Size2 & resolution() const
Returns the grid resolution.
jet::Grid2::gridSpacing
const Vector2D & gridSpacing() const
Returns the grid spacing.
jet::ScalarGrid2::operator()
const double & operator()(size_t i, size_t j) const
Returns the grid data at given data point.
jet::ScalarGrid2::clone
virtual std::shared_ptr< ScalarGrid2 > clone() const =0
Returns the copy of the grid instance.
jet::ScalarGrid2::dataSize
virtual Size2 dataSize() const =0
Returns the size of the grid data.
jet::ScalarGrid2::gradient
Vector2D gradient(const Vector2D &x) const override
Returns the gradient vector at given position x.
jet::ScalarGrid2::gradientAtDataPoint
Vector2D gradientAtDataPoint(size_t i, size_t j) const
Returns the gradient vector at given data point.
jet::ScalarGrid2::dataOrigin
virtual Vector2D dataOrigin() const =0
Returns the origin of the grid data.