Jet  v1.3.3
level_set_liquid_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_LEVEL_SET_LIQUID_SOLVER3_H_
8 #define INCLUDE_JET_LEVEL_SET_LIQUID_SOLVER3_H_
9 
10 #include <jet/grid_fluid_solver3.h>
11 #include <jet/level_set_solver3.h>
12 
13 namespace jet {
14 
27  public:
28  class Builder;
29 
32 
35  const Size3& resolution,
36  const Vector3D& gridSpacing,
37  const Vector3D& gridOrigin);
38 
41 
44 
47 
49  void setLevelSetSolver(const LevelSetSolver3Ptr& newSolver);
50 
52  void setMinReinitializeDistance(double distance);
53 
66  void setIsGlobalCompensationEnabled(bool isEnabled);
67 
74  double computeVolume() const;
75 
77  static Builder builder();
78 
79  protected:
81  void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override;
82 
84  void onEndAdvanceTimeStep(double timeIntervalInSeconds) override;
85 
87  void computeAdvection(double timeIntervalInSeconds) override;
88 
96  ScalarField3Ptr fluidSdf() const override;
97 
98  private:
99  size_t _signedDistanceFieldId;
100  LevelSetSolver3Ptr _levelSetSolver;
101  double _minReinitializeDistance = 10.0;
102  bool _isGlobalCompensationEnabled = false;
103  double _lastKnownVolume = 0.0;
104 
105  void reinitialize(double currentCfl);
106 
107  void extrapolateVelocityToAir(double currentCfl);
108 
109  void addVolume(double volDiff);
110 };
111 
113 typedef std::shared_ptr<LevelSetLiquidSolver3> LevelSetLiquidSolver3Ptr;
114 
115 
120  : public GridFluidSolverBuilderBase3<LevelSetLiquidSolver3::Builder> {
121  public:
124 
127 };
128 
129 } // namespace jet
130 
131 #endif // INCLUDE_JET_LEVEL_SET_LIQUID_SOLVER3_H_
grid_fluid_solver3.h
jet::LevelSetLiquidSolver3::builder
static Builder builder()
Returns builder fox LevelSetLiquidSolver3.
jet::LevelSetLiquidSolver3::setLevelSetSolver
void setLevelSetSolver(const LevelSetSolver3Ptr &newSolver)
Sets the level set solver.
jet::LevelSetLiquidSolver3::LevelSetLiquidSolver3
LevelSetLiquidSolver3(const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin)
Constructs solver with initial grid size.
jet::GridFluidSolver3::resolution
Size3 resolution() const
Returns the resolution of the grid system data.
jet::LevelSetLiquidSolver3::signedDistanceField
ScalarGrid3Ptr signedDistanceField() const
Returns signed-distance field.
jet::LevelSetLiquidSolver3::Builder::build
LevelSetLiquidSolver3 build() const
Builds LevelSetLiquidSolver3.
jet::LevelSetLiquidSolver3::Builder
Front-end to create LevelSetLiquidSolver3 objects step by step.
Definition: level_set_liquid_solver3.h:120
jet::LevelSetLiquidSolver3::fluidSdf
ScalarField3Ptr fluidSdf() const override
Returns fluid region as a signed-distance field.
jet::LevelSetLiquidSolver3
Level set based 3-D liquid solver.
Definition: level_set_liquid_solver3.h:26
jet::LevelSetLiquidSolver3::LevelSetLiquidSolver3
LevelSetLiquidSolver3()
Default constructor.
jet::LevelSetLiquidSolver3::setMinReinitializeDistance
void setMinReinitializeDistance(double distance)
Sets minimum reinitialization distance.
jet::LevelSetSolver3Ptr
std::shared_ptr< LevelSetSolver3 > LevelSetSolver3Ptr
Shared pointer type for the LevelSetSolver3.
Definition: level_set_solver3.h:84
jet::LevelSetLiquidSolver3::onEndAdvanceTimeStep
void onEndAdvanceTimeStep(double timeIntervalInSeconds) override
Called at the end of the time-step.
jet::ScalarGrid3Ptr
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition: scalar_grid3.h:193
jet::LevelSetLiquidSolver3::Builder::makeShared
LevelSetLiquidSolver3Ptr makeShared() const
Builds shared pointer of LevelSetLiquidSolver3 instance.
level_set_solver3.h
jet::LevelSetLiquidSolver3::setIsGlobalCompensationEnabled
void setIsGlobalCompensationEnabled(bool isEnabled)
Enables (or disables) global compensation feature flag.
jet
Definition: advection_solver2.h:18
jet::GridFluidSolver3::gridSpacing
Vector3D gridSpacing() const
Returns the grid spacing of the grid system data.
jet::GridFluidSolverBuilderBase3
Base class for grid-based fluid solver builder.
Definition: grid_fluid_solver3.h:300
jet::ScalarField3Ptr
std::shared_ptr< ScalarField3 > ScalarField3Ptr
Shared pointer for the ScalarField3 type.
Definition: scalar_field3.h:40
jet::Size3
3-D size class.
Definition: size3.h:19
jet::GridFluidSolver3::gridOrigin
Vector3D gridOrigin() const
Returns the origin of the grid system data.
jet::GridFluidSolver3
Abstract base class for grid-based 3-D fluid solver.
Definition: grid_fluid_solver3.h:34
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::LevelSetLiquidSolver3::levelSetSolver
LevelSetSolver3Ptr levelSetSolver() const
Returns the level set solver.
jet::LevelSetLiquidSolver3::computeAdvection
void computeAdvection(double timeIntervalInSeconds) override
Customizes advection step.
jet::LevelSetLiquidSolver3::onBeginAdvanceTimeStep
void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Called at the beginning of the time-step.
jet::LevelSetLiquidSolver3::~LevelSetLiquidSolver3
virtual ~LevelSetLiquidSolver3()
Destructor.
jet::LevelSetLiquidSolver3::computeVolume
double computeVolume() const
Returns liquid volume measured by smeared Heaviside function.
jet::LevelSetLiquidSolver3Ptr
std::shared_ptr< LevelSetLiquidSolver3 > LevelSetLiquidSolver3Ptr
Shared pointer type for the LevelSetLiquidSolver3.
Definition: level_set_liquid_solver3.h:113