Jet  v1.3.3
pic_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_PIC_SOLVER3_H_
8 #define INCLUDE_JET_PIC_SOLVER3_H_
9 
10 #include <jet/grid_fluid_solver3.h>
11 #include <jet/particle_emitter3.h>
13 
14 namespace jet {
15 
26 class PicSolver3 : public GridFluidSolver3 {
27  public:
28  class Builder;
29 
32 
35  const Size3& resolution,
36  const Vector3D& gridSpacing,
37  const Vector3D& gridOrigin);
38 
40  virtual ~PicSolver3();
41 
44 
47 
50 
52  void setParticleEmitter(const ParticleEmitter3Ptr& newEmitter);
53 
55  static Builder builder();
56 
57  protected:
61 
63  void onInitialize() override;
64 
66  void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override;
67 
69  void computeAdvection(double timeIntervalInSeconds) override;
70 
72  ScalarField3Ptr fluidSdf() const override;
73 
76 
79 
81  virtual void moveParticles(double timeIntervalInSeconds);
82 
83  private:
84  size_t _signedDistanceFieldId;
85  ParticleSystemData3Ptr _particles;
86  ParticleEmitter3Ptr _particleEmitter;
87 
88  void extrapolateVelocityToAir();
89 
90  void buildSignedDistanceField();
91 
92  void updateParticleEmitter(double timeIntervalInSeconds);
93 };
94 
96 typedef std::shared_ptr<PicSolver3> PicSolver3Ptr;
97 
98 
103  : public GridFluidSolverBuilderBase3<PicSolver3::Builder> {
104  public:
106  PicSolver3 build() const;
107 
110 };
111 
112 } // namespace jet
113 
114 #endif // INCLUDE_JET_PIC_SOLVER3_H_
grid_fluid_solver3.h
jet::GridFluidSolver3::resolution
Size3 resolution() const
Returns the resolution of the grid system data.
jet::ParticleSystemData3Ptr
std::shared_ptr< ParticleSystemData3 > ParticleSystemData3Ptr
Shared pointer type of ParticleSystemData3.
Definition: particle_system_data3.h:250
jet::PicSolver3::onInitialize
void onInitialize() override
Initializes the simulator.
particle_emitter3.h
jet::ParticleEmitter3Ptr
std::shared_ptr< ParticleEmitter3 > ParticleEmitter3Ptr
Shared pointer for the ParticleEmitter3 type.
Definition: particle_emitter3.h:79
jet::PicSolver3::setParticleEmitter
void setParticleEmitter(const ParticleEmitter3Ptr &newEmitter)
Sets the particle emitter.
jet::PicSolver3::moveParticles
virtual void moveParticles(double timeIntervalInSeconds)
Moves particles.
particle_system_data3.h
jet::PicSolver3::transferFromGridsToParticles
virtual void transferFromGridsToParticles()
Transfers velocity field from grids to particles.
jet::PicSolver3::particleEmitter
const ParticleEmitter3Ptr & particleEmitter() const
Returns the particle emitter.
jet::ScalarGrid3Ptr
std::shared_ptr< ScalarGrid3 > ScalarGrid3Ptr
Shared pointer for the ScalarGrid3 type.
Definition: scalar_grid3.h:193
jet::PicSolver3::computeAdvection
void computeAdvection(double timeIntervalInSeconds) override
Computes the advection term of the fluid solver.
jet::PicSolver3::signedDistanceField
ScalarGrid3Ptr signedDistanceField() const
Returns the signed-distance field of particles.
jet
Definition: advection_solver2.h:18
jet::GridFluidSolver3::gridSpacing
Vector3D gridSpacing() const
Returns the grid spacing of the grid system data.
jet::PicSolver3Ptr
std::shared_ptr< PicSolver3 > PicSolver3Ptr
Shared pointer type for the PicSolver3.
Definition: pic_solver3.h:96
jet::GridFluidSolverBuilderBase3
Base class for grid-based fluid solver builder.
Definition: grid_fluid_solver3.h:300
jet::PicSolver3::PicSolver3
PicSolver3()
Default constructor.
jet::PicSolver3::PicSolver3
PicSolver3(const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin)
Constructs solver with initial grid size.
jet::PicSolver3::Builder
Front-end to create PicSolver3 objects step by step.
Definition: pic_solver3.h:103
jet::PicSolver3::onBeginAdvanceTimeStep
void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Invoked before a simulation time-step begins.
jet::PicSolver3::Builder::build
PicSolver3 build() const
Builds PicSolver3.
jet::ScalarField3Ptr
std::shared_ptr< ScalarField3 > ScalarField3Ptr
Shared pointer for the ScalarField3 type.
Definition: scalar_field3.h:40
jet::PicSolver3::builder
static Builder builder()
Returns builder fox PicSolver3.
jet::Size3
3-D size class.
Definition: size3.h:19
jet::PicSolver3::Builder::makeShared
PicSolver3Ptr makeShared() const
Builds shared pointer of PicSolver3 instance.
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::PicSolver3
3-D Particle-in-Cell (PIC) implementation.
Definition: pic_solver3.h:26
jet::PicSolver3::_vMarkers
Array3< char > _vMarkers
Definition: pic_solver3.h:59
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::PicSolver3::_uMarkers
Array3< char > _uMarkers
Definition: pic_solver3.h:58
jet::Array< T, 3 >
3-D array class.
Definition: array3.h:43
jet::PicSolver3::~PicSolver3
virtual ~PicSolver3()
Default destructor.
jet::PicSolver3::particleSystemData
const ParticleSystemData3Ptr & particleSystemData() const
Returns the particle system data.
jet::PicSolver3::_wMarkers
Array3< char > _wMarkers
Definition: pic_solver3.h:60
jet::PicSolver3::fluidSdf
ScalarField3Ptr fluidSdf() const override
Returns the signed-distance field of the fluid.
jet::PicSolver3::transferFromParticlesToGrids
virtual void transferFromParticlesToGrids()
Transfers velocity field from particles to grids.