Jet  v1.3.3
semi_lagrangian3.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_LAGRANGIAN3_H_
8 #define INCLUDE_JET_SEMI_LAGRANGIAN3_H_
9 
10 #include <jet/advection_solver3.h>
11 #include <limits>
12 
13 namespace jet {
14 
27  public:
29 
30  virtual ~SemiLagrangian3();
31 
50  void advect(const ScalarGrid3& input, const VectorField3& flow, double dt,
51  ScalarGrid3* output,
52  const ScalarField3& boundarySdf = ConstantScalarField3(
54 
73  void advect(const CollocatedVectorGrid3& input, const VectorField3& flow,
74  double dt, CollocatedVectorGrid3* output,
75  const ScalarField3& boundarySdf = ConstantScalarField3(
76  std::numeric_limits<double>::max())) final;
77 
97  void advect(const FaceCenteredGrid3& input, const VectorField3& flow,
98  double dt, FaceCenteredGrid3* output,
99  const ScalarField3& boundarySdf = ConstantScalarField3(
100  std::numeric_limits<double>::max())) final;
101 
102  protected:
112  virtual std::function<double(const Vector3D&)> getScalarSamplerFunc(
113  const ScalarGrid3& input) const;
114 
124  virtual std::function<Vector3D(const Vector3D&)> getVectorSamplerFunc(
125  const CollocatedVectorGrid3& input) const;
126 
136  virtual std::function<Vector3D(const Vector3D&)> getVectorSamplerFunc(
137  const FaceCenteredGrid3& input) const;
138 
139  private:
140  Vector3D backTrace(const VectorField3& flow, double dt, double h,
141  const Vector3D& pt0, const ScalarField3& boundarySdf);
142 };
143 
144 typedef std::shared_ptr<SemiLagrangian3> SemiLagrangian3Ptr;
145 
146 } // namespace jet
147 
148 #endif // INCLUDE_JET_SEMI_LAGRANGIAN3_H_
advection_solver3.h
jet::ScalarField3
Abstract base class for 3-D scalar field.
Definition: scalar_field3.h:18
jet::max
Point2< T > max(const Point2< T > &a, const Point2< T > &b)
Returns element-wise max point: (max(a.x, b.x), max(a.y, b.y)).
jet::SemiLagrangian3::advect
void advect(const ScalarGrid3 &input, const VectorField3 &flow, double dt, ScalarGrid3 *output, const ScalarField3 &boundarySdf=ConstantScalarField3(std::numeric_limits< double >::max())) final
Computes semi-Langian for given scalar grid.
jet::AdvectionSolver3
Abstract based class for 3-D grid-based advection solver.
Definition: advection_solver3.h:26
jet::CollocatedVectorGrid3
Abstract base class for 3-D collocated vector grid structure.
Definition: collocated_vector_grid3.h:18
jet
Definition: advection_solver2.h:18
jet::VectorField3
Abstract base class for 3-D vector field.
Definition: vector_field3.h:18
jet::SemiLagrangian3
Implementation of 3-D semi-Lagrangian advection solver.
Definition: semi_lagrangian3.h:26
jet::FaceCenteredGrid3
3-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid3.h:26
jet::ConstantScalarField3
3-D constant scalar field.
Definition: constant_scalar_field3.h:15
jet::ScalarGrid3
Abstract base class for 3-D scalar grid structure.
Definition: scalar_grid3.h:21
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::SemiLagrangian3::SemiLagrangian3
SemiLagrangian3()
jet::SemiLagrangian3::~SemiLagrangian3
virtual ~SemiLagrangian3()
jet::SemiLagrangian3::getScalarSamplerFunc
virtual std::function< double(const Vector3D &)> getScalarSamplerFunc(const ScalarGrid3 &input) const
Returns spatial interpolation function object for given scalar grid.
jet::SemiLagrangian3Ptr
std::shared_ptr< SemiLagrangian3 > SemiLagrangian3Ptr
Definition: semi_lagrangian3.h:144
jet::SemiLagrangian3::getVectorSamplerFunc
virtual std::function< Vector3D(const Vector3D &)> getVectorSamplerFunc(const CollocatedVectorGrid3 &input) const
Returns spatial interpolation function object for given collocated vector grid.