Jet  v1.3.3
face_centered_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_FACE_CENTERED_GRID2_H_
8 #define INCLUDE_JET_FACE_CENTERED_GRID2_H_
9 
10 #include <jet/array2.h>
11 #include <jet/array_samplers2.h>
12 #include <jet/vector_grid2.h>
13 #include <memory>
14 #include <utility> // just make cpplint happy..
15 #include <vector>
16 
17 namespace jet {
18 
26 class FaceCenteredGrid2 final : public VectorGrid2 {
27  public:
29 
30  class Builder;
31 
34 
37 
40 
42  FaceCenteredGrid2(size_t resolutionX, size_t resolutionY,
43  double gridSpacingX = 1.0, double gridSpacingY = 1.0,
44  double originX = 0.0, double originY = 0.0,
45  double initialValueU = 0.0, double initialValueV = 0.0);
46 
49  const Vector2D& gridSpacing = Vector2D(1.0, 1.0),
50  const Vector2D& origin = Vector2D(),
51  const Vector2D& initialValue = Vector2D());
52 
55 
62  void swap(Grid2* other) override;
63 
65  void set(const FaceCenteredGrid2& other);
66 
69 
71  double& u(size_t i, size_t j);
72 
74  const double& u(size_t i, size_t j) const;
75 
77  double& v(size_t i, size_t j);
78 
80  const double& v(size_t i, size_t j) const;
81 
83  Vector2D valueAtCellCenter(size_t i, size_t j) const;
84 
86  double divergenceAtCellCenter(size_t i, size_t j) const;
87 
89  double curlAtCellCenter(size_t i, size_t j) const;
90 
93 
96 
99 
102 
105 
108 
110  Size2 uSize() const;
111 
113  Size2 vSize() const;
114 
121  Vector2D uOrigin() const;
122 
129  Vector2D vOrigin() const;
130 
132  void fill(const Vector2D& value,
133  ExecutionPolicy policy = ExecutionPolicy::kParallel) override;
134 
136  void fill(const std::function<Vector2D(const Vector2D&)>& func,
137  ExecutionPolicy policy = ExecutionPolicy::kParallel) override;
138 
140  std::shared_ptr<VectorGrid2> clone() const override;
141 
149  void forEachUIndex(const std::function<void(size_t, size_t)>& func) const;
150 
161  const std::function<void(size_t, size_t)>& func) const;
162 
170  void forEachVIndex(const std::function<void(size_t, size_t)>& func) const;
171 
182  const std::function<void(size_t, size_t)>& func) const;
183 
184  // VectorField2 implementations
185 
187  Vector2D sample(const Vector2D& x) const override;
188 
190  double divergence(const Vector2D& x) const override;
191 
193  double curl(const Vector2D& x) const override;
194 
201  std::function<Vector2D(const Vector2D&)> sampler() const override;
202 
204  static Builder builder();
205 
206  protected:
207  // VectorGrid2 implementations
209  const Vector2D& origin, const Vector2D& initialValue) final;
210 
212  void getData(std::vector<double>* data) const override;
213 
215  void setData(const std::vector<double>& data) override;
216 
217  private:
218  Array2<double> _dataU;
219  Array2<double> _dataV;
220  Vector2D _dataOriginU;
221  Vector2D _dataOriginV;
222  LinearArraySampler2<double, double> _uLinearSampler;
223  LinearArraySampler2<double, double> _vLinearSampler;
224  std::function<Vector2D(const Vector2D&)> _sampler;
225 
226  void resetSampler();
227 };
228 
230 typedef std::shared_ptr<FaceCenteredGrid2> FaceCenteredGrid2Ptr;
231 
236  public:
239 
241  Builder& withResolution(size_t resolutionX, size_t resolutionY);
242 
245 
247  Builder& withGridSpacing(double gridSpacingX, double gridSpacingY);
248 
250  Builder& withOrigin(const Vector2D& gridOrigin);
251 
253  Builder& withOrigin(double gridOriginX, double gridOriginY);
254 
256  Builder& withInitialValue(const Vector2D& initialVal);
257 
259  Builder& withInitialValue(double initialValX, double initialValY);
260 
263 
266 
273  const Vector2D& gridOrigin,
274  const Vector2D& initialVal) const override;
275 
276  private:
277  Size2 _resolution{1, 1};
278  Vector2D _gridSpacing{1, 1};
279  Vector2D _gridOrigin{0, 0};
280  Vector2D _initialVal{0, 0};
281 };
282 
283 } // namespace jet
284 
285 #endif // INCLUDE_JET_FACE_CENTERED_GRID2_H_
jet::FaceCenteredGrid2::divergence
double divergence(const Vector2D &x) const override
Returns divergence at given position x.
jet::FaceCenteredGrid2::fill
void fill(const std::function< Vector2D(const Vector2D &)> &func, ExecutionPolicy policy=ExecutionPolicy::kParallel) override
Fills the grid with given function.
jet::FaceCenteredGrid2::clone
std::shared_ptr< VectorGrid2 > clone() const override
Returns the copy of the grid instance.
jet::FaceCenteredGrid2::operator=
FaceCenteredGrid2 & operator=(const FaceCenteredGrid2 &other)
Sets the contents with the given other grid.
jet::ExecutionPolicy
ExecutionPolicy
Execution policy tag.
Definition: parallel.h:13
jet::FaceCenteredGrid2::uConstAccessor
ConstScalarDataAccessor uConstAccessor() const
Returns read-only u data accessor.
array2.h
jet::FaceCenteredGrid2::Builder::withOrigin
Builder & withOrigin(double gridOriginX, double gridOriginY)
Returns builder with grid origin.
jet::FaceCenteredGrid2::parallelForEachVIndex
void parallelForEachVIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each v-data point parallelly.
jet::FaceCenteredGrid2::fill
void fill(const Vector2D &value, ExecutionPolicy policy=ExecutionPolicy::kParallel) override
Fills the grid with given value.
jet::FaceCenteredGrid2::divergenceAtCellCenter
double divergenceAtCellCenter(size_t i, size_t j) const
Returns divergence at cell-center location.
jet::Grid2::origin
const Vector2D & origin() const
Returns the grid origin.
jet::FaceCenteredGrid2::vAccessor
ScalarDataAccessor vAccessor()
Returns v data accessor.
jet::FaceCenteredGrid2::forEachVIndex
void forEachVIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each v-data point.
jet::FaceCenteredGrid2::swap
void swap(Grid2 *other) override
Swaps the contents with the given other grid.
jet::FaceCenteredGrid2::Builder::makeShared
FaceCenteredGrid2Ptr makeShared() const
Builds shared pointer of FaceCenteredGrid2 instance.
jet::Vector2D
Vector2< double > Vector2D
Double-type 2D vector.
Definition: vector2.h:340
jet::FaceCenteredGrid2::u
const double & u(size_t i, size_t j) const
Returns u-value at given data point.
jet::FaceCenteredGrid2::Builder
Front-end to create FaceCenteredGrid2 objects step by step.
Definition: face_centered_grid2.h:235
jet::FaceCenteredGrid2::Builder::withInitialValue
Builder & withInitialValue(const Vector2D &initialVal)
Returns builder with initial value.
jet::Grid2
Abstract base class for 2-D cartesian grid structure.
Definition: grid2.h:30
jet::FaceCenteredGrid2::v
double & v(size_t i, size_t j)
Returns v-value at given data point.
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::FaceCenteredGrid2::ConstScalarDataAccessor
ConstArrayAccessor2< double > ConstScalarDataAccessor
Read-only scalar data accessor type.
Definition: face_centered_grid2.h:36
jet::FaceCenteredGrid2::Builder::withGridSpacing
Builder & withGridSpacing(double gridSpacingX, double gridSpacingY)
Returns builder with grid spacing.
jet::FaceCenteredGrid2
2-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid2.h:26
jet::Array< T, 2 >
2-D array class.
Definition: array2.h:42
jet::VectorGrid2
Abstract base class for 2-D vector grid structure.
Definition: vector_grid2.h:21
jet::FaceCenteredGrid2::FaceCenteredGrid2
FaceCenteredGrid2()
Constructs empty grid.
jet::FaceCenteredGrid2::vOrigin
Vector2D vOrigin() const
Returns v-data position for the grid point at (0, 0).
jet::LinearArraySampler< T, R, 2 >
2-D linear array sampler class.
Definition: array_samplers2.h:77
jet::FaceCenteredGrid2::onResize
void onResize(const Size2 &resolution, const Vector2D &gridSpacing, const Vector2D &origin, const Vector2D &initialValue) final
Invoked when the resizing happens.
jet::FaceCenteredGrid2::Builder::withOrigin
Builder & withOrigin(const Vector2D &gridOrigin)
Returns builder with grid origin.
jet
Definition: advection_solver2.h:18
jet::FaceCenteredGrid2::ScalarDataAccessor
ArrayAccessor2< double > ScalarDataAccessor
Read-write scalar data accessor type.
Definition: face_centered_grid2.h:30
jet::FaceCenteredGrid2::v
const double & v(size_t i, size_t j) const
Returns v-value at given data point.
jet::FaceCenteredGrid2::uAccessor
ScalarDataAccessor uAccessor()
Returns u data accessor.
jet::FaceCenteredGrid2::Builder::withGridSpacing
Builder & withGridSpacing(const Vector2D &gridSpacing)
Returns builder with grid spacing.
jet::ConstArrayAccessor< T, 2 >
2-D read-only array accessor class.
Definition: array_accessor2.h:261
jet::VectorGridBuilder2
Abstract base class for 2-D vector grid builder.
Definition: vector_grid2.h:91
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::FaceCenteredGrid2Ptr
std::shared_ptr< FaceCenteredGrid2 > FaceCenteredGrid2Ptr
Shared pointer type for the FaceCenteredGrid2.
Definition: face_centered_grid2.h:230
jet::FaceCenteredGrid2::Builder::withResolution
Builder & withResolution(size_t resolutionX, size_t resolutionY)
Returns builder with resolution.
jet::FaceCenteredGrid2::valueAtCellCenter
Vector2D valueAtCellCenter(size_t i, size_t j) const
Returns interpolated value at cell center.
jet::FaceCenteredGrid2::u
double & u(size_t i, size_t j)
Returns u-value at given data point.
jet::FaceCenteredGrid2::forEachUIndex
void forEachUIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each u-data point.
jet::FaceCenteredGrid2::FaceCenteredGrid2
FaceCenteredGrid2(const FaceCenteredGrid2 &other)
Copy constructor.
jet::FaceCenteredGrid2::builder
static Builder builder()
Returns builder fox FaceCenteredGrid2.
jet::FaceCenteredGrid2::uPosition
DataPositionFunc uPosition() const
Returns function object that maps u data point to its actual position.
jet::Size2
2-D size class.
Definition: size2.h:19
jet::FaceCenteredGrid2::curlAtCellCenter
double curlAtCellCenter(size_t i, size_t j) const
Returns curl at cell-center location.
jet::FaceCenteredGrid2::Builder::withResolution
Builder & withResolution(const Size2 &resolution)
Returns builder with resolution.
jet::FaceCenteredGrid2::sample
Vector2D sample(const Vector2D &x) const override
Returns sampled value at given position x.
jet::ArrayAccessor< T, 2 >
2-D array accessor class.
Definition: array_accessor2.h:31
jet::FaceCenteredGrid2::vConstAccessor
ConstScalarDataAccessor vConstAccessor() const
Returns read-only v data accessor.
jet::FaceCenteredGrid2::uSize
Size2 uSize() const
Returns data size of the u component.
vector_grid2.h
jet::FaceCenteredGrid2::FaceCenteredGrid2
FaceCenteredGrid2(const Size2 &resolution, const Vector2D &gridSpacing=Vector2D(1.0, 1.0), const Vector2D &origin=Vector2D(), const Vector2D &initialValue=Vector2D())
Resizes the grid using given parameters.
jet::FaceCenteredGrid2::vSize
Size2 vSize() const
Returns data size of the v component.
jet::ExecutionPolicy::kParallel
@ kParallel
array_samplers2.h
JET_GRID2_TYPE_NAME
#define JET_GRID2_TYPE_NAME(DerivedClassName)
Definition: grid2.h:113
jet::FaceCenteredGrid2::Builder::withInitialValue
Builder & withInitialValue(double initialValX, double initialValY)
Returns builder with initial value.
jet::Grid2::resolution
const Size2 & resolution() const
Returns the grid resolution.
jet::FaceCenteredGrid2::set
void set(const FaceCenteredGrid2 &other)
Sets the contents with the given other grid.
jet::FaceCenteredGrid2::getData
void getData(std::vector< double > *data) const override
Fetches the data into a continuous linear array.
jet::FaceCenteredGrid2::parallelForEachUIndex
void parallelForEachUIndex(const std::function< void(size_t, size_t)> &func) const
Invokes the given function func for each u-data point parallelly.
jet::FaceCenteredGrid2::uOrigin
Vector2D uOrigin() const
Returns u-data position for the grid point at (0, 0).
jet::FaceCenteredGrid2::sampler
std::function< Vector2D(const Vector2D &)> sampler() const override
Returns the sampler function.
jet::Grid2::gridSpacing
const Vector2D & gridSpacing() const
Returns the grid spacing.
jet::FaceCenteredGrid2::vPosition
DataPositionFunc vPosition() const
Returns function object that maps v data point to its actual position.
jet::FaceCenteredGrid2::curl
double curl(const Vector2D &x) const override
Returns curl at given position x.
jet::VectorGrid2Ptr
std::shared_ptr< VectorGrid2 > VectorGrid2Ptr
Shared pointer for the VectorGrid2 type.
Definition: vector_grid2.h:88
jet::FaceCenteredGrid2::FaceCenteredGrid2
FaceCenteredGrid2(size_t resolutionX, size_t resolutionY, double gridSpacingX=1.0, double gridSpacingY=1.0, double originX=0.0, double originY=0.0, double initialValueU=0.0, double initialValueV=0.0)
Resizes the grid using given parameters.
jet::FaceCenteredGrid2::Builder::build
FaceCenteredGrid2 build() const
Builds FaceCenteredGrid2 instance.
jet::FaceCenteredGrid2::setData
void setData(const std::vector< double > &data) override
Sets the data from a continuous linear array.
jet::FaceCenteredGrid2::Builder::build
VectorGrid2Ptr build(const Size2 &resolution, const Vector2D &gridSpacing, const Vector2D &gridOrigin, const Vector2D &initialVal) const override
Builds shared pointer of FaceCenteredGrid2 instance.