Jet  v1.3.3
face_centered_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_FACE_CENTERED_GRID3_H_
8 #define INCLUDE_JET_FACE_CENTERED_GRID3_H_
9 
10 #include <jet/array3.h>
11 #include <jet/array_samplers3.h>
12 #include <jet/vector_grid3.h>
13 #include <memory>
14 #include <utility> // just make cpplint happy..
15 #include <vector>
16 
17 namespace jet {
18 
26 class FaceCenteredGrid3 final : public VectorGrid3 {
27  public:
29 
30  class Builder;
31 
34 
37 
40 
42  FaceCenteredGrid3(size_t resolutionX, size_t resolutionY,
43  size_t resolutionZ, double gridSpacingX = 1.0,
44  double gridSpacingY = 1.0, double gridSpacingZ = 1.0,
45  double originX = 0.0, double originY = 0.0,
46  double originZ = 0.0, double initialValueU = 0.0,
47  double initialValueV = 0.0, double initialValueW = 0.0);
48 
51  const Vector3D& gridSpacing = Vector3D(1.0, 1.0, 1.0),
52  const Vector3D& origin = Vector3D(),
53  const Vector3D& initialValue = Vector3D());
54 
57 
64  void swap(Grid3* other) override;
65 
67  void set(const FaceCenteredGrid3& other);
68 
71 
73  double& u(size_t i, size_t j, size_t k);
74 
76  const double& u(size_t i, size_t j, size_t k) const;
77 
79  double& v(size_t i, size_t j, size_t k);
80 
82  const double& v(size_t i, size_t j, size_t k) const;
83 
85  double& w(size_t i, size_t j, size_t k);
86 
88  const double& w(size_t i, size_t j, size_t k) const;
89 
91  Vector3D valueAtCellCenter(size_t i, size_t j, size_t k) const;
92 
94  double divergenceAtCellCenter(size_t i, size_t j, size_t k) const;
95 
97  Vector3D curlAtCellCenter(size_t i, size_t j, size_t k) const;
98 
101 
104 
107 
110 
113 
116 
119 
122 
125 
127  Size3 uSize() const;
128 
130  Size3 vSize() const;
131 
133  Size3 wSize() const;
134 
141  Vector3D uOrigin() const;
142 
149  Vector3D vOrigin() const;
150 
157  Vector3D wOrigin() const;
158 
160  void fill(const Vector3D& value,
161  ExecutionPolicy policy = ExecutionPolicy::kParallel) override;
162 
164  void fill(const std::function<Vector3D(const Vector3D&)>& func,
165  ExecutionPolicy policy = ExecutionPolicy::kParallel) override;
166 
168  std::shared_ptr<VectorGrid3> clone() const override;
169 
178  const std::function<void(size_t, size_t, size_t)>& func) const;
179 
190  const std::function<void(size_t, size_t, size_t)>& func) const;
191 
200  const std::function<void(size_t, size_t, size_t)>& func) const;
201 
212  const std::function<void(size_t, size_t, size_t)>& func) const;
213 
222  const std::function<void(size_t, size_t, size_t)>& func) const;
223 
234  const std::function<void(size_t, size_t, size_t)>& func) const;
235 
236  // VectorField3 implementations
237 
239  Vector3D sample(const Vector3D& x) const override;
240 
242  double divergence(const Vector3D& x) const override;
243 
245  Vector3D curl(const Vector3D& x) const override;
246 
253  std::function<Vector3D(const Vector3D&)> sampler() const override;
254 
256  static Builder builder();
257 
258  protected:
259  // VectorGrid3 implementations
261  const Vector3D& origin, const Vector3D& initialValue) final;
262 
264  void getData(std::vector<double>* data) const override;
265 
267  void setData(const std::vector<double>& data) override;
268 
269  private:
270  Array3<double> _dataU;
271  Array3<double> _dataV;
272  Array3<double> _dataW;
273  Vector3D _dataOriginU;
274  Vector3D _dataOriginV;
275  Vector3D _dataOriginW;
276  LinearArraySampler3<double, double> _uLinearSampler;
277  LinearArraySampler3<double, double> _vLinearSampler;
278  LinearArraySampler3<double, double> _wLinearSampler;
279  std::function<Vector3D(const Vector3D&)> _sampler;
280 
281  void resetSampler();
282 };
283 
285 typedef std::shared_ptr<FaceCenteredGrid3> FaceCenteredGrid3Ptr;
286 
291  public:
294 
296  Builder& withResolution(size_t resolutionX, size_t resolutionY,
297  size_t resolutionZ);
298 
301 
303  Builder& withGridSpacing(double gridSpacingX, double gridSpacingY,
304  double gridSpacingZ);
305 
307  Builder& withOrigin(const Vector3D& gridOrigin);
308 
310  Builder& withOrigin(double gridOriginX, double gridOriginY,
311  double gridOriginZ);
312 
314  Builder& withInitialValue(const Vector3D& initialVal);
315 
317  Builder& withInitialValue(double initialValX, double initialValY,
318  double initialValZ);
319 
322 
325 
332  const Vector3D& gridOrigin,
333  const Vector3D& initialVal) const override;
334 
335  private:
336  Size3 _resolution{1, 1, 1};
337  Vector3D _gridSpacing{1, 1, 1};
338  Vector3D _gridOrigin{0, 0, 0};
339  Vector3D _initialVal{0, 0, 0};
340 };
341 
342 } // namespace jet
343 
344 #endif // INCLUDE_JET_FACE_CENTERED_GRID3_H_
jet::ConstArrayAccessor< T, 3 >
3-D read-only array accessor class.
Definition: array_accessor3.h:270
jet::FaceCenteredGrid3Ptr
std::shared_ptr< FaceCenteredGrid3 > FaceCenteredGrid3Ptr
Shared pointer type for the FaceCenteredGrid3.
Definition: face_centered_grid3.h:285
jet::FaceCenteredGrid3::ScalarDataAccessor
ArrayAccessor3< double > ScalarDataAccessor
Read-write scalar data accessor type.
Definition: face_centered_grid3.h:30
jet::FaceCenteredGrid3::swap
void swap(Grid3 *other) override
Swaps the contents with the given other grid.
jet::FaceCenteredGrid3::vOrigin
Vector3D vOrigin() const
Returns v-data position for the grid point at (0, 0, 0).
jet::FaceCenteredGrid3::setData
void setData(const std::vector< double > &data) override
Sets the data from a continuous linear array.
jet::FaceCenteredGrid3::wSize
Size3 wSize() const
Returns data size of the w component.
jet::ExecutionPolicy
ExecutionPolicy
Execution policy tag.
Definition: parallel.h:13
jet::FaceCenteredGrid3::vPosition
DataPositionFunc vPosition() const
Returns function object that maps v data point to its actual position.
jet::FaceCenteredGrid3::uPosition
DataPositionFunc uPosition() const
Returns function object that maps u data point to its actual position.
array_samplers3.h
jet::FaceCenteredGrid3::w
double & w(size_t i, size_t j, size_t k)
Returns w-value at given data point.
jet::FaceCenteredGrid3::fill
void fill(const Vector3D &value, ExecutionPolicy policy=ExecutionPolicy::kParallel) override
Fills the grid with given value.
jet::FaceCenteredGrid3::uAccessor
ScalarDataAccessor uAccessor()
Returns u data accessor.
jet::FaceCenteredGrid3::vSize
Size3 vSize() const
Returns data size of the v component.
jet::FaceCenteredGrid3::ConstScalarDataAccessor
ConstArrayAccessor3< double > ConstScalarDataAccessor
Read-only scalar data accessor type.
Definition: face_centered_grid3.h:36
jet::VectorGrid3Ptr
std::shared_ptr< VectorGrid3 > VectorGrid3Ptr
Shared pointer for the VectorGrid3 type.
Definition: vector_grid3.h:103
jet::FaceCenteredGrid3::Builder::withResolution
Builder & withResolution(const Size3 &resolution)
Returns builder with resolution.
jet::FaceCenteredGrid3::vAccessor
ScalarDataAccessor vAccessor()
Returns v data accessor.
jet::Grid3
Abstract base class for 3-D cartesian grid structure.
Definition: grid3.h:30
jet::FaceCenteredGrid3::set
void set(const FaceCenteredGrid3 &other)
Sets the contents with the given other grid.
jet::FaceCenteredGrid3::Builder::build
FaceCenteredGrid3 build() const
Builds CellCenteredScalarGrid3 instance.
jet::FaceCenteredGrid3::parallelForEachUIndex
void parallelForEachUIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each u-data point parallelly.
jet::FaceCenteredGrid3::valueAtCellCenter
Vector3D valueAtCellCenter(size_t i, size_t j, size_t k) const
Returns interpolated value at cell center.
jet::FaceCenteredGrid3::Builder::withInitialValue
Builder & withInitialValue(const Vector3D &initialVal)
Returns builder with initial value.
jet::FaceCenteredGrid3::Builder::withGridSpacing
Builder & withGridSpacing(const Vector3D &gridSpacing)
Returns builder with grid spacing.
jet::FaceCenteredGrid3::sampler
std::function< Vector3D(const Vector3D &)> sampler() const override
Returns the sampler function.
jet::FaceCenteredGrid3::forEachWIndex
void forEachWIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each w-data point.
jet::FaceCenteredGrid3::getData
void getData(std::vector< double > *data) const override
Fetches the data into a continuous linear array.
jet::FaceCenteredGrid3::onResize
void onResize(const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &origin, const Vector3D &initialValue) final
Invoked when the resizing happens.
jet::FaceCenteredGrid3::w
const double & w(size_t i, size_t j, size_t k) const
Returns w-value at given data point.
jet::FaceCenteredGrid3::Builder::build
VectorGrid3Ptr build(const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin, const Vector3D &initialVal) const override
Builds shared pointer of FaceCenteredGrid3 instance.
jet::FaceCenteredGrid3::forEachUIndex
void forEachUIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each u-data point.
jet::FaceCenteredGrid3::divergenceAtCellCenter
double divergenceAtCellCenter(size_t i, size_t j, size_t k) const
Returns divergence at cell-center location.
jet
Definition: advection_solver2.h:18
jet::FaceCenteredGrid3::Builder::withInitialValue
Builder & withInitialValue(double initialValX, double initialValY, double initialValZ)
Returns builder with initial value.
jet::LinearArraySampler< T, R, 3 >
2-D linear array sampler class.
Definition: array_samplers3.h:77
jet::FaceCenteredGrid3::Builder::withResolution
Builder & withResolution(size_t resolutionX, size_t resolutionY, size_t resolutionZ)
Returns builder with resolution.
jet::Grid3::origin
const Vector3D & origin() const
Returns the grid origin.
jet::Grid3::resolution
const Size3 & resolution() const
Returns the grid resolution.
jet::FaceCenteredGrid3::clone
std::shared_ptr< VectorGrid3 > clone() const override
Returns the copy of the grid instance.
jet::FaceCenteredGrid3::operator=
FaceCenteredGrid3 & operator=(const FaceCenteredGrid3 &other)
Sets the contents with the given other grid.
jet::FaceCenteredGrid3::forEachVIndex
void forEachVIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each v-data point.
jet::FaceCenteredGrid3::Builder::withOrigin
Builder & withOrigin(const Vector3D &gridOrigin)
Returns builder with grid origin.
jet::FaceCenteredGrid3::wAccessor
ScalarDataAccessor wAccessor()
Returns w data accessor.
jet::FaceCenteredGrid3::fill
void fill(const std::function< Vector3D(const Vector3D &)> &func, ExecutionPolicy policy=ExecutionPolicy::kParallel) override
Fills the grid with given function.
jet::FaceCenteredGrid3::FaceCenteredGrid3
FaceCenteredGrid3(const Size3 &resolution, const Vector3D &gridSpacing=Vector3D(1.0, 1.0, 1.0), const Vector3D &origin=Vector3D(), const Vector3D &initialValue=Vector3D())
Resizes the grid using given parameters.
jet::FaceCenteredGrid3::wOrigin
Vector3D wOrigin() const
Returns w-data position for the grid point at (0, 0, 0).
jet::FaceCenteredGrid3
3-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid3.h:26
jet::VectorGridBuilder3
Abstract base class for 3-D vector grid builder.
Definition: vector_grid3.h:106
jet::Grid3::gridSpacing
const Vector3D & gridSpacing() const
Returns the grid spacing.
jet::FaceCenteredGrid3::sample
Vector3D sample(const Vector3D &x) const override
Returns sampled value at given position x.
jet::FaceCenteredGrid3::builder
static Builder builder()
Returns builder fox FaceCenteredGrid3.
jet::Size3
3-D size class.
Definition: size3.h:19
jet::FaceCenteredGrid3::Builder
Front-end to create CellCenteredScalarGrid3 objects step by step.
Definition: face_centered_grid3.h:290
array3.h
jet::FaceCenteredGrid3::Builder::withOrigin
Builder & withOrigin(double gridOriginX, double gridOriginY, double gridOriginZ)
Returns builder with grid origin.
jet::VectorGrid3
Abstract base class for 3-D vector grid structure.
Definition: vector_grid3.h:19
jet::FaceCenteredGrid3::FaceCenteredGrid3
FaceCenteredGrid3()
Constructs empty grid.
jet::FaceCenteredGrid3::FaceCenteredGrid3
FaceCenteredGrid3(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 initialValueU=0.0, double initialValueV=0.0, double initialValueW=0.0)
Resizes the grid using given parameters.
jet::FaceCenteredGrid3::uConstAccessor
ConstScalarDataAccessor uConstAccessor() const
Returns read-only u data accessor.
jet::ArrayAccessor< T, 3 >
3-D array accessor class.
Definition: array_accessor3.h:31
jet::FaceCenteredGrid3::u
double & u(size_t i, size_t j, size_t k)
Returns u-value at given data point.
jet::FaceCenteredGrid3::vConstAccessor
ConstScalarDataAccessor vConstAccessor() const
Returns read-only v data accessor.
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::FaceCenteredGrid3::divergence
double divergence(const Vector3D &x) const override
Returns divergence at given position x.
jet::FaceCenteredGrid3::v
const double & v(size_t i, size_t j, size_t k) const
Returns v-value at given data point.
jet::Vector3D
Vector3< double > Vector3D
Double-type 3D vector.
Definition: vector3.h:349
jet::FaceCenteredGrid3::v
double & v(size_t i, size_t j, size_t k)
Returns v-value at given data point.
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::FaceCenteredGrid3::uOrigin
Vector3D uOrigin() const
Returns u-data position for the grid point at (0, 0, 0).
jet::ExecutionPolicy::kParallel
@ kParallel
jet::FaceCenteredGrid3::Builder::makeShared
FaceCenteredGrid3Ptr makeShared() const
Builds shared pointer of FaceCenteredGrid3 instance.
jet::FaceCenteredGrid3::parallelForEachWIndex
void parallelForEachWIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each w-data point parallelly.
jet::FaceCenteredGrid3::uSize
Size3 uSize() const
Returns data size of the u component.
jet::FaceCenteredGrid3::curlAtCellCenter
Vector3D curlAtCellCenter(size_t i, size_t j, size_t k) const
Returns curl at cell-center location.
vector_grid3.h
jet::FaceCenteredGrid3::parallelForEachVIndex
void parallelForEachVIndex(const std::function< void(size_t, size_t, size_t)> &func) const
Invokes the given function func for each v-data point parallelly.
jet::FaceCenteredGrid3::Builder::withGridSpacing
Builder & withGridSpacing(double gridSpacingX, double gridSpacingY, double gridSpacingZ)
Returns builder with grid spacing.
jet::Array< T, 3 >
3-D array class.
Definition: array3.h:43
JET_GRID3_TYPE_NAME
#define JET_GRID3_TYPE_NAME(DerivedClassName)
Definition: grid3.h:119
jet::FaceCenteredGrid3::curl
Vector3D curl(const Vector3D &x) const override
Returns curl at given position x.
jet::FaceCenteredGrid3::u
const double & u(size_t i, size_t j, size_t k) const
Returns u-value at given data point.
jet::FaceCenteredGrid3::FaceCenteredGrid3
FaceCenteredGrid3(const FaceCenteredGrid3 &other)
Copy constructor.
jet::FaceCenteredGrid3::wPosition
DataPositionFunc wPosition() const
Returns function object that maps w data point to its actual position.
jet::FaceCenteredGrid3::wConstAccessor
ConstScalarDataAccessor wConstAccessor() const
Returns read-only w data accessor.