Loading...
Searching...
No Matches
PICSolver3.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_PIC_SOLVER3_HPP
12#define CUBBYFLOW_PIC_SOLVER3_HPP
13
17
18namespace CubbyFlow
19{
31{
32 public:
33 class Builder;
34
37
40 const Vector3D& gridOrigin);
41
43 PICSolver3(const PICSolver3&) = delete;
44
47
50
53
56
59
62
65
68
71
75
77 void OnBeginAdvanceTimeStep(double timeIntervalInSeconds) override;
78
80 void ComputeAdvection(double timeIntervalInSeconds) override;
81
84
87
90
92 virtual void MoveParticles(double timeIntervalInSeconds);
93
97
98 private:
99 void ExtrapolateVelocityToAir();
100
101 void BuildSignedDistanceField();
102
103 void UpdateParticleEmitter(double timeIntervalInSeconds) const;
104
105 size_t m_signedDistanceFieldID;
106 ParticleSystemData3Ptr m_particles;
107 ParticleEmitter3Ptr m_particleEmitter;
108};
109
112
125} // namespace CubbyFlow
126
127#endif
Definition Array.hpp:36
Abstract base class for grid-based 3-D fluid solver.
Definition GridFluidSolver3.hpp:36
Base class for grid-based fluid solver builder.
Definition GridFluidSolver3.hpp:316
Definition Matrix.hpp:30
Front-end to create PICSolver3 objects step by step.
Definition PICSolver3.hpp:117
PICSolver3Ptr MakeShared() const
Builds shared pointer of PICSolver3 instance.
PICSolver3 Build() const
Builds PICSolver3.
3-D Particle-in-Cell (PIC) implementation.
Definition PICSolver3.hpp:31
PICSolver3(PICSolver3 &&) noexcept=delete
Deleted move constructor.
void OnBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Invoked before a simulation time-step begins.
Array3< char > m_wMarkers
Definition PICSolver3.hpp:96
virtual void TransferFromGridsToParticles()
Transfers velocity field from grids to particles.
virtual void TransferFromParticlesToGrids()
Transfers velocity field from particles to grids.
void OnInitialize() override
Initializes the simulator.
Array3< char > m_uMarkers
Definition PICSolver3.hpp:94
const ParticleEmitter3Ptr & GetParticleEmitter() const
Returns the particle emitter.
virtual void MoveParticles(double timeIntervalInSeconds)
Moves particles.
void SetParticleEmitter(const ParticleEmitter3Ptr &newEmitter)
Sets the particle emitter.
Array3< char > m_vMarkers
Definition PICSolver3.hpp:95
const ParticleSystemData3Ptr & GetParticleSystemData() const
Returns the particle system data.
PICSolver3(const PICSolver3 &)=delete
Deleted copy constructor.
void ComputeAdvection(double timeIntervalInSeconds) override
Computes the advection term of the fluid solver.
static Builder GetBuilder()
Returns builder fox PICSolver3.
PICSolver3(const Vector3UZ &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin)
Constructs solver with initial grid size.
ScalarGrid3Ptr GetSignedDistanceField() const
Returns the signed-distance field of particles.
PICSolver3()
Default constructor.
ScalarField3Ptr GetFluidSDF() const override
Returns the signed-distance field of the fluid.
Definition pybind11Utils.hpp:21
std::shared_ptr< ParticleSystemData3 > ParticleSystemData3Ptr
Shared pointer type of ParticleSystemData3.
Definition ParticleSystemData.hpp:284
std::shared_ptr< PICSolver3 > PICSolver3Ptr
Shared pointer type for the PICSolver3.
Definition PICSolver3.hpp:111
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition ScalarGrid.hpp:269
Matrix< T, Rows, 1 > Vector
Definition Matrix.hpp:738
std::shared_ptr< ScalarField3 > ScalarField3Ptr
Shared pointer for the ScalarField3 type.
Definition ScalarField.hpp:70
std::shared_ptr< ParticleEmitter3 > ParticleEmitter3Ptr
Shared pointer for the ParticleEmitter3 type.
Definition ParticleEmitter3.hpp:94