Jet  v1.3.3
scalar_grid3.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_GRID3_H_
8 #define INCLUDE_JET_SCALAR_GRID3_H_
9 
10 #include <jet/array3.h>
11 #include <jet/array_accessor3.h>
12 #include <jet/array_samplers3.h>
13 #include <jet/grid3.h>
14 #include <jet/scalar_field3.h>
15 #include <memory>
16 #include <vector>
17 
18 namespace jet {
19 
21 class ScalarGrid3 : public ScalarField3, public Grid3 {
22  public:
25 
28 
31 
33  virtual ~ScalarGrid3();
34 
41  virtual Size3 dataSize() const = 0;
42 
50  virtual Vector3D dataOrigin() const = 0;
51 
53  virtual std::shared_ptr<ScalarGrid3> clone() const = 0;
54 
56  void clear();
57 
59  void resize(
60  size_t resolutionX,
61  size_t resolutionY,
62  size_t resolutionZ,
63  double gridSpacingX = 1.0,
64  double gridSpacingY = 1.0,
65  double gridSpacingZ = 1.0,
66  double originX = 0.0,
67  double originY = 0.0,
68  double originZ = 0.0,
69  double initialValue = 0.0);
70 
72  void resize(
73  const Size3& resolution,
74  const Vector3D& gridSpacing = Vector3D(1, 1, 1),
75  const Vector3D& origin = Vector3D(),
76  double initialValue = 0.0);
77 
79  void resize(
80  double gridSpacingX,
81  double gridSpacingY,
82  double gridSpacingZ,
83  double originX,
84  double originY,
85  double originZ);
86 
88  void resize(const Vector3D& gridSpacing, const Vector3D& origin);
89 
91  const double& operator()(size_t i, size_t j, size_t k) const;
92 
94  double& operator()(size_t i, size_t j, size_t k);
95 
97  Vector3D gradientAtDataPoint(size_t i, size_t j, size_t k) const;
98 
100  double laplacianAtDataPoint(size_t i, size_t j, size_t k) const;
101 
104 
107 
110 
112  void fill(double value,
114 
116  void fill(const std::function<double(const Vector3D&)>& func,
118 
127  const std::function<void(size_t, size_t, size_t)>& func) const;
128 
139  const std::function<void(size_t, size_t, size_t)>& func) const;
140 
141  // ScalarField3 implementations
142 
149  double sample(const Vector3D& x) const override;
150 
157  std::function<double(const Vector3D&)> sampler() const override;
158 
160  Vector3D gradient(const Vector3D& x) const override;
161 
163  double laplacian(const Vector3D& x) const override;
164 
166  void serialize(std::vector<uint8_t>* buffer) const override;
167 
169  void deserialize(const std::vector<uint8_t>& buffer) override;
170 
171  protected:
174 
176  void setScalarGrid(const ScalarGrid3& other);
177 
179  void getData(std::vector<double>* data) const override;
180 
182  void setData(const std::vector<double>& data) override;
183 
184  private:
185  Array3<double> _data;
187  std::function<double(const Vector3D&)> _sampler;
188 
189  void resetSampler();
190 };
191 
193 typedef std::shared_ptr<ScalarGrid3> ScalarGrid3Ptr;
194 
197  public:
200 
203 
206  const Size3& resolution,
207  const Vector3D& gridSpacing,
208  const Vector3D& gridOrigin,
209  double initialVal) const = 0;
210 };
211 
213 typedef std::shared_ptr<ScalarGridBuilder3> ScalarGridBuilder3Ptr;
214 
215 } // namespace jet
216 
217 #endif // INCLUDE_JET_SCALAR_GRID3_H_
jet::ConstArrayAccessor< T, 3 >
3-D read-only array accessor class.
Definition: array_accessor3.h:270
jet::ScalarGridBuilder3::ScalarGridBuilder3
ScalarGridBuilder3()
Creates a builder.
jet::ScalarGridBuilder3::~ScalarGridBuilder3
virtual ~ScalarGridBuilder3()
Default destructor.
jet::ExecutionPolicy
ExecutionPolicy
Execution policy tag.
Definition: parallel.h:13
jet::ScalarField3
Abstract base class for 3-D scalar field.
Definition: scalar_field3.h:18
array_samplers3.h
jet::ScalarGrid3::resize
void resize(size_t resolutionX, size_t resolutionY, size_t resolutionZ, double gridSpacingX=1.0, double gridSpacingY=1.0, double gridSpacingZ=1.0, double originX=0.0, double originY=0.0, double originZ=0.0, double initialValue=0.0)
Resizes the grid using given parameters.
jet::ScalarGrid3::serialize
void serialize(std::vector< uint8_t > *buffer) const override
Serializes the grid instance to the output buffer.
jet::ScalarGrid3::dataPosition
DataPositionFunc dataPosition() const
Returns the function that maps data point to its position.
jet::ScalarGrid3::sample
double sample(const Vector3D &x) const override
Returns the sampled value at given position x.
jet::ScalarGrid3::gradientAtDataPoint
Vector3D gradientAtDataPoint(size_t i, size_t j, size_t k) const
Returns the gradient vector at given data point.
jet::ScalarGrid3::laplacianAtDataPoint
double laplacianAtDataPoint(size_t i, size_t j, size_t k) const
Returns the Laplacian at given data point.
jet::Grid3
Abstract base class for 3-D cartesian grid structure.
Definition: grid3.h:30
jet::ScalarGrid3::sampler
std::function< double(const Vector3D &)> sampler() const override
Returns the sampler function.
jet::ScalarGrid3::fill
void fill(double value, ExecutionPolicy policy=ExecutionPolicy::kParallel)
Fills the grid with given value.
jet::ScalarGrid3::operator()
double & operator()(size_t i, size_t j, size_t k)
Returns the grid data at given data point.
jet::ScalarGrid3::ScalarDataAccessor
ArrayAccessor3< double > ScalarDataAccessor
Read-write array accessor type.
Definition: scalar_grid3.h:24
jet::ScalarGrid3Ptr
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition: scalar_grid3.h:193
jet::ScalarGrid3::dataSize
virtual Size3 dataSize() const =0
Returns the size of the grid data.
jet::ScalarGridBuilder3
Abstract base class for 3-D scalar grid builder.
Definition: scalar_grid3.h:196
jet::ScalarGrid3::resize
void resize(double gridSpacingX, double gridSpacingY, double gridSpacingZ, double originX, double originY, double originZ)
Resizes the grid using given parameters.
jet::ScalarGrid3::clear
void clear()
Clears the contents of the grid.
jet::ScalarGrid3::forEachDataPointIndex
void forEachDataPointIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each data point.
scalar_field3.h
jet
Definition: advection_solver2.h:18
jet::LinearArraySampler< T, R, 3 >
2-D linear array sampler class.
Definition: array_samplers3.h:77
jet::ScalarGridBuilder3Ptr
std::shared_ptr< ScalarGridBuilder3 > ScalarGridBuilder3Ptr
Shared pointer for the ScalarGridBuilder3 type.
Definition: scalar_grid3.h:213
jet::ScalarGrid3::~ScalarGrid3
virtual ~ScalarGrid3()
Default destructor.
jet::Grid3::origin
const Vector3D & origin() const
Returns the grid origin.
jet::Grid3::resolution
const Size3 & resolution() const
Returns the grid resolution.
jet::ScalarGrid3::ScalarGrid3
ScalarGrid3()
Constructs an empty grid.
jet::ScalarGrid3::swapScalarGrid
void swapScalarGrid(ScalarGrid3 *other)
Swaps the data storage and predefined samplers with given grid.
jet::ScalarGrid3::operator()
const double & operator()(size_t i, size_t j, size_t k) const
Returns the grid data at given data point.
jet::ScalarGrid3::deserialize
void deserialize(const std::vector< uint8_t > &buffer) override
Deserializes the input buffer to the grid instance.
jet::Grid3::gridSpacing
const Vector3D & gridSpacing() const
Returns the grid spacing.
jet::ScalarGrid3::ConstScalarDataAccessor
ConstArrayAccessor3< double > ConstScalarDataAccessor
Read-only array accessor type.
Definition: scalar_grid3.h:27
jet::Size3
3-D size class.
Definition: size3.h:19
array3.h
grid3.h
jet::ScalarGrid3::laplacian
double laplacian(const Vector3D &x) const override
Returns the Laplacian at given position x.
jet::ArrayAccessor< T, 3 >
3-D array accessor class.
Definition: array_accessor3.h:31
jet::ScalarGrid3::resize
void resize(const Size3 &resolution, const Vector3D &gridSpacing=Vector3D(1, 1, 1), const Vector3D &origin=Vector3D(), double initialValue=0.0)
Resizes the grid using given parameters.
jet::ScalarGrid3::clone
virtual std::shared_ptr< ScalarGrid3 > clone() const =0
Returns the copy of the grid instance.
jet::ScalarGrid3::gradient
Vector3D gradient(const Vector3D &x) const override
Returns the gradient vector at given position x.
jet::ScalarGrid3::parallelForEachDataPointIndex
void parallelForEachDataPointIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each data point parallelly.
jet::Grid3::DataPositionFunc
std::function< Vector3D(size_t, size_t, size_t)> DataPositionFunc
Function type for mapping data index to actual position.
Definition: grid3.h:33
jet::ScalarGrid3
Abstract base class for 3-D scalar grid structure.
Definition: scalar_grid3.h:21
jet::Vector3D
Vector3< double > Vector3D
Double-type 3D vector.
Definition: vector3.h:349
array_accessor3.h
jet::ScalarGrid3::setData
void setData(const std::vector< double > &data) override
Sets the data from a continuous linear array.
jet::ScalarGrid3::setScalarGrid
void setScalarGrid(const ScalarGrid3 &other)
Sets the data storage and predefined samplers with given grid.
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::ExecutionPolicy::kParallel
@ kParallel
jet::ScalarGrid3::resize
void resize(const Vector3D &gridSpacing, const Vector3D &origin)
Resizes the grid using given parameters.
jet::ScalarGrid3::fill
void fill(const std::function< double(const Vector3D &)> &func, ExecutionPolicy policy=ExecutionPolicy::kParallel)
Fills the grid with given position-to-value mapping function.
jet::ScalarGrid3::dataOrigin
virtual Vector3D dataOrigin() const =0
Returns the origin of the grid data.
jet::Array< T, 3 >
3-D array class.
Definition: array3.h:43
jet::ScalarGrid3::getData
void getData(std::vector< double > *data) const override
Fetches the data into a continuous linear array.
jet::ScalarGrid3::constDataAccessor
ConstScalarDataAccessor constDataAccessor() const
Returns the read-only data array accessor.
jet::ScalarGridBuilder3::build
virtual ScalarGrid3Ptr build(const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin, double initialVal) const =0
Returns 3-D scalar grid with given parameters.
jet::ScalarGrid3::dataAccessor
ScalarDataAccessor dataAccessor()
Returns the read-write data array accessor.