Jet  v1.3.3
iterative_level_set_solver3.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_ITERATIVE_LEVEL_SET_SOLVER3_H_
8 #define INCLUDE_JET_ITERATIVE_LEVEL_SET_SOLVER3_H_
9 
10 #include <jet/level_set_solver3.h>
11 
12 namespace jet {
13 
26  public:
29 
32 
40  void reinitialize(const ScalarGrid3& inputSdf, double maxDistance,
41  ScalarGrid3* outputSdf) override;
42 
51  void extrapolate(const ScalarGrid3& input, const ScalarField3& sdf,
52  double maxDistance, ScalarGrid3* output) override;
53 
64  const ScalarField3& sdf, double maxDistance,
65  CollocatedVectorGrid3* output) override;
66 
76  void extrapolate(const FaceCenteredGrid3& input, const ScalarField3& sdf,
77  double maxDistance, FaceCenteredGrid3* output) override;
78 
80  double maxCfl() const;
81 
88  void setMaxCfl(double newMaxCfl);
89 
90  protected:
93  const Vector3D& gridSpacing, size_t i, size_t j,
94  size_t k, std::array<double, 2>* dx,
95  std::array<double, 2>* dy,
96  std::array<double, 2>* dz) const = 0;
97 
98  private:
99  double _maxCfl = 0.5;
100 
101  void extrapolate(const ConstArrayAccessor3<double>& input,
102  const ConstArrayAccessor3<double>& sdf,
103  const Vector3D& gridSpacing, double maxDistance,
104  ArrayAccessor3<double> output);
105 
106  static unsigned int distanceToNumberOfIterations(double distance,
107  double dtau);
108 
109  static double sign(const ConstArrayAccessor3<double>& sdf,
110  const Vector3D& gridSpacing, size_t i, size_t j,
111  size_t k);
112 
113  double pseudoTimeStep(ConstArrayAccessor3<double> sdf,
114  const Vector3D& gridSpacing);
115 };
116 
117 typedef std::shared_ptr<IterativeLevelSetSolver3> IterativeLevelSetSolver3Ptr;
118 
119 } // namespace jet
120 
121 #endif // INCLUDE_JET_ITERATIVE_LEVEL_SET_SOLVER3_H_
jet::ConstArrayAccessor< T, 3 >
3-D read-only array accessor class.
Definition: array_accessor3.h:270
jet::ScalarField3
Abstract base class for 3-D scalar field.
Definition: scalar_field3.h:18
jet::IterativeLevelSetSolver3::setMaxCfl
void setMaxCfl(double newMaxCfl)
Sets the maximum CFL limit.
jet::IterativeLevelSetSolver3::getDerivatives
virtual void getDerivatives(ConstArrayAccessor3< double > grid, const Vector3D &gridSpacing, size_t i, size_t j, size_t k, std::array< double, 2 > *dx, std::array< double, 2 > *dy, std::array< double, 2 > *dz) const =0
Computes the derivatives for given grid point.
jet::CollocatedVectorGrid3
Abstract base class for 3-D collocated vector grid structure.
Definition: collocated_vector_grid3.h:18
level_set_solver3.h
jet::IterativeLevelSetSolver3::extrapolate
void extrapolate(const CollocatedVectorGrid3 &input, const ScalarField3 &sdf, double maxDistance, CollocatedVectorGrid3 *output) override
jet::LevelSetSolver3
Abstract base class for 3-D level set solver.
Definition: level_set_solver3.h:18
jet
Definition: advection_solver2.h:18
jet::FaceCenteredGrid3
3-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid3.h:26
jet::IterativeLevelSetSolver3::~IterativeLevelSetSolver3
virtual ~IterativeLevelSetSolver3()
Default destructor.
jet::IterativeLevelSetSolver3::reinitialize
void reinitialize(const ScalarGrid3 &inputSdf, double maxDistance, ScalarGrid3 *outputSdf) override
jet::ArrayAccessor< T, 3 >
3-D array accessor class.
Definition: array_accessor3.h:31
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::IterativeLevelSetSolver3::maxCfl
double maxCfl() const
Returns the maximum CFL limit.
jet::IterativeLevelSetSolver3Ptr
std::shared_ptr< IterativeLevelSetSolver3 > IterativeLevelSetSolver3Ptr
Definition: iterative_level_set_solver3.h:117
jet::IterativeLevelSetSolver3::IterativeLevelSetSolver3
IterativeLevelSetSolver3()
Default constructor.
jet::IterativeLevelSetSolver3::extrapolate
void extrapolate(const ScalarGrid3 &input, const ScalarField3 &sdf, double maxDistance, ScalarGrid3 *output) override
jet::IterativeLevelSetSolver3
Abstract base class for 3-D PDE-based iterative level set solver.
Definition: iterative_level_set_solver3.h:25
jet::IterativeLevelSetSolver3::extrapolate
void extrapolate(const FaceCenteredGrid3 &input, const ScalarField3 &sdf, double maxDistance, FaceCenteredGrid3 *output) override