Jet  v1.3.3
level_set_liquid_solver2.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_LEVEL_SET_LIQUID_SOLVER2_H_
8 #define INCLUDE_JET_LEVEL_SET_LIQUID_SOLVER2_H_
9 
10 #include <jet/grid_fluid_solver2.h>
11 #include <jet/level_set_solver2.h>
12 
13 namespace jet {
14 
27  public:
28  class Builder;
29 
32 
35  const Size2& resolution,
36  const Vector2D& gridSpacing,
37  const Vector2D& gridOrigin);
38 
41 
44 
47 
49  void setLevelSetSolver(const LevelSetSolver2Ptr& newSolver);
50 
52  void setMinReinitializeDistance(double distance);
53 
66  void setIsGlobalCompensationEnabled(bool isEnabled);
67 
75  double computeVolume() const;
76 
78  static Builder builder();
79 
80  protected:
82  void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override;
83 
85  void onEndAdvanceTimeStep(double timeIntervalInSeconds) override;
86 
88  void computeAdvection(double timeIntervalInSeconds) override;
89 
97  ScalarField2Ptr fluidSdf() const override;
98 
99  private:
100  size_t _signedDistanceFieldId;
101  LevelSetSolver2Ptr _levelSetSolver;
102  double _minReinitializeDistance = 10.0;
103  bool _isGlobalCompensationEnabled = false;
104  double _lastKnownVolume = 0.0;
105 
106  void reinitialize(double currentCfl);
107 
108  void extrapolateVelocityToAir(double currentCfl);
109 
110  void addVolume(double volDiff);
111 };
112 
114 typedef std::shared_ptr<LevelSetLiquidSolver2> LevelSetLiquidSolver2Ptr;
115 
116 
121  : public GridFluidSolverBuilderBase2<LevelSetLiquidSolver2::Builder> {
122  public:
125 
128 };
129 
130 } // namespace jet
131 
132 #endif // INCLUDE_JET_LEVEL_SET_LIQUID_SOLVER2_H_
level_set_solver2.h
jet::LevelSetLiquidSolver2::fluidSdf
ScalarField2Ptr fluidSdf() const override
Returns fluid region as a signed-distance field.
jet::LevelSetLiquidSolver2::builder
static Builder builder()
Returns builder fox LevelSetLiquidSolver2.
jet::LevelSetLiquidSolver2::Builder::makeShared
LevelSetLiquidSolver2Ptr makeShared() const
Builds shared pointer of LevelSetLiquidSolver2 instance.
jet::GridFluidSolver2::gridSpacing
Vector2D gridSpacing() const
Returns the grid spacing of the grid system data.
jet::LevelSetLiquidSolver2::signedDistanceField
ScalarGrid2Ptr signedDistanceField() const
Returns signed-distance field.
jet::LevelSetLiquidSolver2::Builder
Front-end to create LevelSetLiquidSolver2 objects step by step.
Definition: level_set_liquid_solver2.h:121
jet::LevelSetLiquidSolver2::Builder::build
LevelSetLiquidSolver2 build() const
Builds LevelSetLiquidSolver2.
jet::LevelSetSolver2Ptr
std::shared_ptr< LevelSetSolver2 > LevelSetSolver2Ptr
Shared pointer type for the LevelSetSolver2.
Definition: level_set_solver2.h:84
jet::GridFluidSolver2::gridOrigin
Vector2D gridOrigin() const
Returns the origin of the grid system data.
grid_fluid_solver2.h
jet::LevelSetLiquidSolver2::setLevelSetSolver
void setLevelSetSolver(const LevelSetSolver2Ptr &newSolver)
Sets the level set solver.
jet::LevelSetLiquidSolver2::onEndAdvanceTimeStep
void onEndAdvanceTimeStep(double timeIntervalInSeconds) override
Called at the end of the time-step.
jet::GridFluidSolver2
Abstract base class for grid-based 2-D fluid solver.
Definition: grid_fluid_solver2.h:34
jet::LevelSetLiquidSolver2::onBeginAdvanceTimeStep
void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Called at the beginning of the time-step.
jet::LevelSetLiquidSolver2::~LevelSetLiquidSolver2
virtual ~LevelSetLiquidSolver2()
Destructor.
jet
Definition: advection_solver2.h:18
jet::ScalarField2Ptr
std::shared_ptr< ScalarField2 > ScalarField2Ptr
Shared pointer for the ScalarField2 type.
Definition: scalar_field2.h:40
jet::LevelSetLiquidSolver2::LevelSetLiquidSolver2
LevelSetLiquidSolver2(const Size2 &resolution, const Vector2D &gridSpacing, const Vector2D &gridOrigin)
Constructs solver with initial grid size.
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::LevelSetLiquidSolver2::levelSetSolver
LevelSetSolver2Ptr levelSetSolver() const
Returns the level set solver.
jet::ScalarGrid2Ptr
std::shared_ptr< ScalarGrid2 > ScalarGrid2Ptr
Shared pointer for the ScalarGrid2 type.
Definition: scalar_grid2.h:188
jet::Size2
2-D size class.
Definition: size2.h:19
jet::LevelSetLiquidSolver2::computeVolume
double computeVolume() const
Returns liquid volume measured by smeared Heaviside function.
jet::LevelSetLiquidSolver2
Level set based 2-D liquid solver.
Definition: level_set_liquid_solver2.h:26
jet::LevelSetLiquidSolver2::setIsGlobalCompensationEnabled
void setIsGlobalCompensationEnabled(bool isEnabled)
Enables (or disables) global compensation feature flag.
jet::LevelSetLiquidSolver2::LevelSetLiquidSolver2
LevelSetLiquidSolver2()
Default constructor.
jet::LevelSetLiquidSolver2::computeAdvection
void computeAdvection(double timeIntervalInSeconds) override
Customizes advection step.
jet::GridFluidSolver2::resolution
Size2 resolution() const
Returns the resolution of the grid system data.
jet::LevelSetLiquidSolver2::setMinReinitializeDistance
void setMinReinitializeDistance(double distance)
Sets minimum reinitialization distance.
jet::LevelSetLiquidSolver2Ptr
std::shared_ptr< LevelSetLiquidSolver2 > LevelSetLiquidSolver2Ptr
Shared pointer type for the LevelSetLiquidSolver2.
Definition: level_set_liquid_solver2.h:114
jet::GridFluidSolverBuilderBase2
Base class for grid-based fluid solver builder.
Definition: grid_fluid_solver2.h:300