GridSmokeSolver3.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_GRID_SMOKE_SOLVER3_HPP
12 #define CUBBYFLOW_GRID_SMOKE_SOLVER3_HPP
13 
15 
16 namespace CubbyFlow
17 {
30 {
31  public:
32  class Builder;
33 
36 
38  GridSmokeSolver3(const Vector3UZ& resolution, const Vector3D& gridSpacing,
39  const Vector3D& gridOrigin);
40 
42  GridSmokeSolver3(const GridSmokeSolver3&) = delete;
43 
45  GridSmokeSolver3(GridSmokeSolver3&&) noexcept = delete;
46 
48  ~GridSmokeSolver3() override = default;
49 
52 
54  GridSmokeSolver3& operator=(GridSmokeSolver3&&) noexcept = delete;
55 
57  [[nodiscard]] double GetSmokeDiffusionCoefficient() const;
58 
60  void SetSmokeDiffusionCoefficient(double newValue);
61 
63  [[nodiscard]] double GetTemperatureDiffusionCoefficient() const;
64 
66  void SetTemperatureDiffusionCoefficient(double newValue);
67 
81  [[nodiscard]] double GetBuoyancySmokeDensityFactor() const;
82 
96  void SetBuoyancySmokeDensityFactor(double newValue);
97 
111  [[nodiscard]] double GetBuoyancyTemperatureFactor() const;
112 
126  void SetBuoyancyTemperatureFactor(double newValue);
127 
136  [[nodiscard]] double GetSmokeDecayFactor() const;
137 
146  void SetSmokeDecayFactor(double newValue);
147 
156  [[nodiscard]] double GetTemperatureDecayFactor() const;
157 
166  void SetTemperatureDecayFactor(double newValue);
167 
169  [[nodiscard]] ScalarGrid3Ptr GetSmokeDensity() const;
170 
172  [[nodiscard]] ScalarGrid3Ptr GetTemperature() const;
173 
175  [[nodiscard]] static Builder GetBuilder();
176 
177  protected:
178  void OnEndAdvanceTimeStep(double timeIntervalInSeconds) override;
179 
180  void ComputeExternalForces(double timeIntervalInSeconds) override;
181 
182  private:
183  void ComputeDiffusion(double timeIntervalInSeconds);
184 
185  void ComputeBuoyancyForce(double timeIntervalInSeconds);
186 
187  size_t m_smokeDensityDataID = 0;
188  size_t m_temperatureDataID = 0;
189  double m_smokeDiffusionCoefficient = 0.0;
190  double m_temperatureDiffusionCoefficient = 0.0;
191  double m_buoyancySmokeDensityFactor = -0.000625;
192  double m_buoyancyTemperatureFactor = 5.0;
193  double m_smokeDecayFactor = 0.001;
194  double m_temperatureDecayFactor = 0.001;
195 };
196 
198 using GridSmokeSolver3Ptr = std::shared_ptr<GridSmokeSolver3>;
199 
204  : public GridFluidSolverBuilderBase3<Builder>
205 {
206  public:
208  [[nodiscard]] GridSmokeSolver3 Build() const;
209 
211  [[nodiscard]] GridSmokeSolver3Ptr MakeShared() const;
212 };
213 } // namespace CubbyFlow
214 
215 #endif
Front-end to create GridSmokeSolver3 objects step by step.
Definition: GridSmokeSolver3.hpp:203
double GetTemperatureDiffusionCoefficient() const
Returns temperature diffusion coefficient.
double GetBuoyancySmokeDensityFactor() const
Returns the buoyancy factor which will be multiplied to the smoke density.
static Builder GetBuilder()
Returns builder fox GridSmokeSolver3.
double GetBuoyancyTemperatureFactor() const
Returns the buoyancy factor which will be multiplied to the temperature.
double GetSmokeDecayFactor() const
Returns smoke decay factor.
std::shared_ptr< GridSmokeSolver3 > GridSmokeSolver3Ptr
Shared pointer type for the GridSmokeSolver3.
Definition: GridSmokeSolver3.hpp:198
~GridSmokeSolver3() override=default
Default virtual destructor.
3-D grid-based smoke solver.
Definition: GridSmokeSolver3.hpp:29
void ComputeExternalForces(double timeIntervalInSeconds) override
Computes the external force terms.
void SetTemperatureDecayFactor(double newValue)
Sets the temperature decay factor.
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition: ScalarGrid.hpp:269
Base class for grid-based fluid solver builder.
Definition: GridFluidSolver3.hpp:315
ScalarGrid3Ptr GetTemperature() const
Returns temperature field.
Definition: Matrix.hpp:27
GridSmokeSolver3 & operator=(const GridSmokeSolver3 &)=delete
Deleted copy assignment operator.
Definition: pybind11Utils.hpp:20
Abstract base class for grid-based 3-D fluid solver.
Definition: GridFluidSolver3.hpp:35
void OnEndAdvanceTimeStep(double timeIntervalInSeconds) override
Called at the end of a time-step.
double GetSmokeDiffusionCoefficient() const
Returns smoke diffusion coefficient.
ScalarGrid3Ptr GetSmokeDensity() const
Returns smoke density field.
void SetTemperatureDiffusionCoefficient(double newValue)
Sets temperature diffusion coefficient.
GridSmokeSolver3()
Default constructor.
double GetTemperatureDecayFactor() const
Returns temperature decay factor.
void SetBuoyancySmokeDensityFactor(double newValue)
Sets the buoyancy factor which will be multiplied to the smoke density.
void SetSmokeDecayFactor(double newValue)
Sets the smoke decay factor.
void SetSmokeDiffusionCoefficient(double newValue)
Sets smoke diffusion coefficient.
void SetBuoyancyTemperatureFactor(double newValue)
Sets the buoyancy factor which will be multiplied to the temperature.