Loading...
Searching...
No Matches
GridFractionalSinglePhasePressureSolver3.hpp
Go to the documentation of this file.
1// This code is based on Jet framework.
2// Copyright (c) 2018 Doyub Kim
3// CubbyFlow is voxel-based fluid simulation engine for computer games.
4// Copyright (c) 2020 CubbyFlow Team
5// Core Part: Chris Ohk, Junwoo Hwang, Jihong Sin, Seungwoo Yoo
6// AI Part: Dongheon Cho, Minseo Kim
7// We are making my contributions/submissions to this project solely in our
8// personal capacity and are not conveying any rights to any intellectual
9// property of any third parties.
10
11#ifndef CUBBYFLOW_FRACTIONAL_SINGLE_PHASE_PRESSURE_SOLVER3_HPP
12#define CUBBYFLOW_FRACTIONAL_SINGLE_PHASE_PRESSURE_SOLVER3_HPP
13
18
19namespace CubbyFlow
20{
47{
48 public:
51
55
59
62
66
70
94 void Solve(const FaceCenteredGrid3& input, double timeIntervalInSeconds,
97 ConstantScalarField3{ std::numeric_limits<double>::max() },
99 ConstantVectorField3{ { 0, 0, 0 } },
100 const ScalarField3& fluidSDF =
101 ConstantScalarField3{ -std::numeric_limits<double>::max() },
102 bool useCompressed = false) override;
103
115
118 const;
119
122
124 [[nodiscard]] const FDMVector3& GetPressure() const;
125
126 private:
127 void BuildWeights(const FaceCenteredGrid3& input,
130 const ScalarField3& fluidSDF);
131
132 void DecompressSolution();
133
134 virtual void BuildSystem(const FaceCenteredGrid3& input,
135 bool useCompressed);
136
137 virtual void ApplyPressureGradient(const FaceCenteredGrid3& input,
139
140 FDMLinearSystem3 m_system;
141 FDMCompressedLinearSystem3 m_compSystem;
142 FDMLinearSystemSolver3Ptr m_systemSolver;
143
144 FDMMGLinearSystem3 m_mgSystem;
145 FDMMGSolver3Ptr m_mgSystemSolver;
146
147 std::vector<Array3<double>> m_uWeights;
148 std::vector<Array3<double>> m_vWeights;
149 std::vector<Array3<double>> m_wWeights;
150 std::vector<Array3<double>> m_fluidSDF;
151
152 std::function<Vector3D(const Vector3D&)> m_boundaryVel;
153};
154
157 std::shared_ptr<GridFractionalSinglePhasePressureSolver3>;
158} // namespace CubbyFlow
159
160#endif
N-D constant scalar field.
Definition ConstantScalarField.hpp:21
N-D constant vector field.
Definition ConstantVectorField.hpp:21
N-D face-centered (a.k.a MAC or staggered) grid.
Definition FaceCenteredGrid.hpp:32
3-D fractional single-phase pressure solver.
Definition GridFractionalSinglePhasePressureSolver3.hpp:47
const FDMVector3 & GetPressure() const
Returns the pressure field.
void Solve(const FaceCenteredGrid3 &input, double timeIntervalInSeconds, FaceCenteredGrid3 *output, const ScalarField3 &boundarySDF=ConstantScalarField3{ std::numeric_limits< double >::max() }, const VectorField3 &boundaryVelocity=ConstantVectorField3{ { 0, 0, 0 } }, const ScalarField3 &fluidSDF=ConstantScalarField3{ -std::numeric_limits< double >::max() }, bool useCompressed=false) override
Solves the pressure term and apply it to the velocity field.
const FDMLinearSystemSolver3Ptr & GetLinearSystemSolver() const
Returns the linear system solver.
void SetLinearSystemSolver(const FDMLinearSystemSolver3Ptr &solver)
Sets the linear system solver.
GridFractionalSinglePhasePressureSolver3()
Default constructor.
GridFractionalSinglePhasePressureSolver3(GridFractionalSinglePhasePressureSolver3 &&) noexcept=delete
Deleted move constructor.
GridFractionalSinglePhasePressureSolver3(const GridFractionalSinglePhasePressureSolver3 &)=delete
Deleted copy constructor.
GridBoundaryConditionSolver3Ptr SuggestedBoundaryConditionSolver() const override
Returns the best boundary condition solver for this solver.
Abstract base class for 2-D grid-based pressure solver.
Definition GridPressureSolver3.hpp:30
Definition Matrix.hpp:30
Abstract base class for N-D scalar field.
Definition ScalarField.hpp:25
Abstract base class for N-D vector field.
Definition VectorField.hpp:43
Definition pybind11Utils.hpp:21
std::shared_ptr< FDMLinearSystemSolver3 > FDMLinearSystemSolver3Ptr
Shared pointer type for the FDMLinearSystemSolver3.
Definition FDMLinearSystemSolver3.hpp:52
Vector3< double > Vector3D
Definition Matrix.hpp:787
ConstantScalarField< 3 > ConstantScalarField3
3-D ConstantScalarField type.
Definition ConstantScalarField.hpp:46
ScalarField< 3 > ScalarField3
3-D ScalarField type.
Definition ScalarField.hpp:64
Matrix< T, Rows, 1 > Vector
Definition Matrix.hpp:738
std::shared_ptr< GridFractionalSinglePhasePressureSolver3 > GridFractionalSinglePhasePressureSolver3Ptr
Shared pointer type for the GridFractionalSinglePhasePressureSolver3.
Definition GridFractionalSinglePhasePressureSolver3.hpp:157
std::shared_ptr< FDMMGSolver3 > FDMMGSolver3Ptr
Shared pointer type for the FDMMGSolver3.
Definition FDMMGSolver3.hpp:55
std::shared_ptr< GridBoundaryConditionSolver3 > GridBoundaryConditionSolver3Ptr
Shared pointer type for the GridBoundaryConditionSolver3.
Definition GridBoundaryConditionSolver3.hpp:117
Compressed linear system (Ax=b) for 3-D finite differencing.
Definition FDMLinearSystem3.hpp:63
Linear system (Ax=b) for 3-D finite differencing.
Definition FDMLinearSystem3.hpp:44
Multigrid-syle 3-D linear system.
Definition FDMMGLinearSystem3.hpp:27