Jet  v1.3.3
semi_lagrangian2.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_SEMI_LAGRANGIAN2_H_
8 #define INCLUDE_JET_SEMI_LAGRANGIAN2_H_
9 
10 #include <jet/advection_solver2.h>
11 #include <limits>
12 
13 namespace jet {
14 
27  public:
29 
30  virtual ~SemiLagrangian2();
31 
50  void advect(const ScalarGrid2& input, const VectorField2& flow, double dt,
51  ScalarGrid2* output, const ScalarField2& boundarySdf =
53 
72  void advect(
73  const CollocatedVectorGrid2& input, const VectorField2& flow, double dt,
74  CollocatedVectorGrid2* output,
75  const ScalarField2& boundarySdf = ConstantScalarField2(kMaxD)) final;
76 
96  void advect(
97  const FaceCenteredGrid2& input, const VectorField2& flow, double dt,
98  FaceCenteredGrid2* output,
99  const ScalarField2& boundarySdf = ConstantScalarField2(kMaxD)) final;
100 
101  protected:
111  virtual std::function<double(const Vector2D&)> getScalarSamplerFunc(
112  const ScalarGrid2& input) const;
113 
123  virtual std::function<Vector2D(const Vector2D&)> getVectorSamplerFunc(
124  const CollocatedVectorGrid2& input) const;
125 
135  virtual std::function<Vector2D(const Vector2D&)> getVectorSamplerFunc(
136  const FaceCenteredGrid2& input) const;
137 
138  private:
139  Vector2D backTrace(const VectorField2& flow, double dt, double h,
140  const Vector2D& pt0, const ScalarField2& boundarySdf);
141 };
142 
143 typedef std::shared_ptr<SemiLagrangian2> SemiLagrangian2Ptr;
144 
145 } // namespace jet
146 
147 #endif // INCLUDE_JET_SEMI_LAGRANGIAN2_H_
advection_solver2.h
jet::Vector2D
Vector2< double > Vector2D
Double-type 2D vector.
Definition: vector2.h:340
jet::SemiLagrangian2::advect
void advect(const FaceCenteredGrid2 &input, const VectorField2 &flow, double dt, FaceCenteredGrid2 *output, const ScalarField2 &boundarySdf=ConstantScalarField2(kMaxD)) final
Computes semi-Lagrangian for given face-centered vector grid.
jet::SemiLagrangian2::SemiLagrangian2
SemiLagrangian2()
jet::SemiLagrangian2::advect
void advect(const ScalarGrid2 &input, const VectorField2 &flow, double dt, ScalarGrid2 *output, const ScalarField2 &boundarySdf=ConstantScalarField2(kMaxD)) final
Computes semi-Lagrangian for given scalar grid.
jet::SemiLagrangian2::getVectorSamplerFunc
virtual std::function< Vector2D(const Vector2D &)> getVectorSamplerFunc(const CollocatedVectorGrid2 &input) const
Returns spatial interpolation function object for given collocated vector grid.
jet::ScalarField2
Abstract base class for 2-D scalar field.
Definition: scalar_field2.h:18
jet::FaceCenteredGrid2
2-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid2.h:26
jet::AdvectionSolver2
Abstract based class for 2-D grid-based advection solver.
Definition: advection_solver2.h:26
jet
Definition: advection_solver2.h:18
jet::ScalarGrid2
Abstract base class for 2-D scalar grid structure.
Definition: scalar_grid2.h:21
jet::ConstantScalarField2
2-D constant scalar field.
Definition: constant_scalar_field2.h:15
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::SemiLagrangian2
Implementation of 2-D semi-Lagrangian advection solver.
Definition: semi_lagrangian2.h:26
jet::CollocatedVectorGrid2
Abstract base class for 2-D collocated vector grid structure.
Definition: collocated_vector_grid2.h:18
jet::SemiLagrangian2::getVectorSamplerFunc
virtual std::function< Vector2D(const Vector2D &)> getVectorSamplerFunc(const FaceCenteredGrid2 &input) const
Returns spatial interpolation function object for given face-centered vector grid.
jet::SemiLagrangian2Ptr
std::shared_ptr< SemiLagrangian2 > SemiLagrangian2Ptr
Definition: semi_lagrangian2.h:143
jet::kMaxD
constexpr double kMaxD
Max double.
Definition: constants.h:88
jet::SemiLagrangian2::getScalarSamplerFunc
virtual std::function< double(const Vector2D &)> getScalarSamplerFunc(const ScalarGrid2 &input) const
Returns spatial interpolation function object for given scalar grid.
jet::VectorField2
Abstract base class for 2-D vector field.
Definition: vector_field2.h:18
jet::SemiLagrangian2::~SemiLagrangian2
virtual ~SemiLagrangian2()
jet::SemiLagrangian2::advect
void advect(const CollocatedVectorGrid2 &input, const VectorField2 &flow, double dt, CollocatedVectorGrid2 *output, const ScalarField2 &boundarySdf=ConstantScalarField2(kMaxD)) final
Computes semi-Lagrangian for given collocated vector grid.