Loading...
Searching...
No Matches
PICSolver2.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_SOLVER2_HPP
12#define CUBBYFLOW_PIC_SOLVER2_HPP
13
17
18namespace CubbyFlow
19{
31{
32 public:
33 class Builder;
34
37
40 const Vector2D& gridOrigin);
41
43 PICSolver2(const PICSolver2&) = 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
96
97 private:
98 void ExtrapolateVelocityToAir();
99
100 void BuildSignedDistanceField();
101
102 void UpdateParticleEmitter(double timeIntervalInSeconds) const;
103
104 size_t m_signedDistanceFieldID;
105 ParticleSystemData2Ptr m_particles;
106 ParticleEmitter2Ptr m_particleEmitter;
107};
108
111
124} // namespace CubbyFlow
125
126#endif
Definition Array.hpp:36
Abstract base class for grid-based 2-D fluid solver.
Definition GridFluidSolver2.hpp:36
Base class for grid-based fluid solver builder.
Definition GridFluidSolver2.hpp:316
Definition Matrix.hpp:30
Front-end to create PICSolver2 objects step by step.
Definition PICSolver2.hpp:116
PICSolver2Ptr MakeShared() const
Builds shared pointer of PicSolver2 instance.
PICSolver2 Build() const
Builds PICSolver2.
2-D Particle-in-Cell (PIC) implementation.
Definition PICSolver2.hpp:31
static Builder GetBuilder()
Returns builder fox PICSolver2.
PICSolver2(PICSolver2 &&) noexcept=delete
Deleted move constructor.
ScalarGrid2Ptr GetSignedDistanceField() const
Returns the signed-distance field of particles.
PICSolver2()
Default constructor.
ScalarField2Ptr GetFluidSDF() const override
Returns the signed-distance field of the fluid.
virtual void TransferFromParticlesToGrids()
Transfers velocity field from particles to grids.
void OnInitialize() override
Initializes the simulator.
Array2< char > m_uMarkers
Definition PICSolver2.hpp:94
Array2< char > m_vMarkers
Definition PICSolver2.hpp:95
virtual void MoveParticles(double timeIntervalInSeconds)
Moves particles.
void ComputeAdvection(double timeIntervalInSeconds) override
Computes the advection term of the fluid solver.
virtual void TransferFromGridsToParticles()
Transfers velocity field from grids to particles.
PICSolver2(const Vector2UZ &resolution, const Vector2D &gridSpacing, const Vector2D &gridOrigin)
Constructs solver with initial grid size.
PICSolver2(const PICSolver2 &)=delete
Deleted copy constructor.
void SetParticleEmitter(const ParticleEmitter2Ptr &newEmitter)
Sets the particle emitter.
const ParticleSystemData2Ptr & GetParticleSystemData() const
Returns the particle system data.
const ParticleEmitter2Ptr & GetParticleEmitter() const
Returns the particle emitter.
void OnBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Invoked before a simulation time-step begins.
Definition pybind11Utils.hpp:21
std::shared_ptr< ScalarField2 > ScalarField2Ptr
Shared pointer for the ScalarField2 type.
Definition ScalarField.hpp:67
std::shared_ptr< ParticleEmitter2 > ParticleEmitter2Ptr
Shared pointer for the ParticleEmitter2 type.
Definition ParticleEmitter2.hpp:94
Matrix< T, Rows, 1 > Vector
Definition Matrix.hpp:738
std::shared_ptr< ParticleSystemData2 > ParticleSystemData2Ptr
Shared pointer type of ParticleSystemData2.
Definition ParticleSystemData.hpp:281
std::shared_ptr< ScalarGrid2 > ScalarGrid2Ptr
Shared pointer for the ScalarGrid2 type.
Definition ScalarGrid.hpp:266
std::shared_ptr< PICSolver2 > PICSolver2Ptr
Shared pointer type for the PICSolver2.
Definition PICSolver2.hpp:110