Jet  v1.3.3
pic_solver2.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_SOLVER2_H_
8 #define INCLUDE_JET_PIC_SOLVER2_H_
9 
10 #include <jet/grid_fluid_solver2.h>
11 #include <jet/particle_emitter2.h>
13 
14 namespace jet {
15 
26 class PicSolver2 : public GridFluidSolver2 {
27  public:
28  class Builder;
29 
32 
35  const Size2& resolution,
36  const Vector2D& gridSpacing,
37  const Vector2D& gridOrigin);
38 
40  virtual ~PicSolver2();
41 
44 
47 
50 
52  void setParticleEmitter(const ParticleEmitter2Ptr& newEmitter);
53 
55  static Builder builder();
56 
57  protected:
60 
62  void onInitialize() override;
63 
65  void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override;
66 
68  void computeAdvection(double timeIntervalInSeconds) override;
69 
71  ScalarField2Ptr fluidSdf() const override;
72 
75 
78 
80  virtual void moveParticles(double timeIntervalInSeconds);
81 
82  private:
83  size_t _signedDistanceFieldId;
84  ParticleSystemData2Ptr _particles;
85  ParticleEmitter2Ptr _particleEmitter;
86 
87  void extrapolateVelocityToAir();
88 
89  void buildSignedDistanceField();
90 
91  void updateParticleEmitter(double timeIntervalInSeconds);
92 };
93 
95 typedef std::shared_ptr<PicSolver2> PicSolver2Ptr;
96 
97 
102  : public GridFluidSolverBuilderBase2<PicSolver2::Builder> {
103  public:
105  PicSolver2 build() const;
106 
109 };
110 
111 } // namespace jet
112 
113 #endif // INCLUDE_JET_PIC_SOLVER2_H_
jet::PicSolver2::transferFromGridsToParticles
virtual void transferFromGridsToParticles()
Transfers velocity field from grids to particles.
jet::PicSolver2::setParticleEmitter
void setParticleEmitter(const ParticleEmitter2Ptr &newEmitter)
Sets the particle emitter.
jet::GridFluidSolver2::gridSpacing
Vector2D gridSpacing() const
Returns the grid spacing of the grid system data.
jet::PicSolver2::_vMarkers
Array2< char > _vMarkers
Definition: pic_solver2.h:59
jet::PicSolver2::Builder::makeShared
PicSolver2Ptr makeShared() const
Builds shared pointer of PicSolver2 instance.
jet::PicSolver2::_uMarkers
Array2< char > _uMarkers
Definition: pic_solver2.h:58
jet::PicSolver2
2-D Particle-in-Cell (PIC) implementation.
Definition: pic_solver2.h:26
jet::PicSolver2::transferFromParticlesToGrids
virtual void transferFromParticlesToGrids()
Transfers velocity field from particles to grids.
jet::GridFluidSolver2::gridOrigin
Vector2D gridOrigin() const
Returns the origin of the grid system data.
grid_fluid_solver2.h
jet::GridFluidSolver2
Abstract base class for grid-based 2-D fluid solver.
Definition: grid_fluid_solver2.h:34
jet::PicSolver2::onBeginAdvanceTimeStep
void onBeginAdvanceTimeStep(double timeIntervalInSeconds) override
Invoked before a simulation time-step begins.
jet::Array< T, 2 >
2-D array class.
Definition: array2.h:42
jet
Definition: advection_solver2.h:18
jet::ScalarField2Ptr
std::shared_ptr< ScalarField2 > ScalarField2Ptr
Shared pointer for the ScalarField2 type.
Definition: scalar_field2.h:40
jet::PicSolver2::builder
static Builder builder()
Returns builder fox PicSolver2.
particle_emitter2.h
jet::PicSolver2::Builder
Front-end to create PicSolver2 objects step by step.
Definition: pic_solver2.h:102
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::PicSolver2::onInitialize
void onInitialize() override
Initializes the simulator.
particle_system_data2.h
jet::PicSolver2::fluidSdf
ScalarField2Ptr fluidSdf() const override
Returns the signed-distance field of the fluid.
jet::PicSolver2Ptr
std::shared_ptr< PicSolver2 > PicSolver2Ptr
Shared pointer type for the PicSolver2.
Definition: pic_solver2.h:95
jet::ScalarGrid2Ptr
std::shared_ptr< ScalarGrid2 > ScalarGrid2Ptr
Shared pointer for the ScalarGrid2 type.
Definition: scalar_grid2.h:188
jet::PicSolver2::signedDistanceField
ScalarGrid2Ptr signedDistanceField() const
Returns the signed-distance field of particles.
jet::Size2
2-D size class.
Definition: size2.h:19
jet::PicSolver2::~PicSolver2
virtual ~PicSolver2()
Default destructor.
jet::ParticleEmitter2Ptr
std::shared_ptr< ParticleEmitter2 > ParticleEmitter2Ptr
Shared pointer for the ParticleEmitter2 type.
Definition: particle_emitter2.h:79
jet::PicSolver2::Builder::build
PicSolver2 build() const
Builds PicSolver2.
jet::ParticleSystemData2Ptr
std::shared_ptr< ParticleSystemData2 > ParticleSystemData2Ptr
Shared pointer type of ParticleSystemData2.
Definition: particle_system_data2.h:250
jet::PicSolver2::PicSolver2
PicSolver2(const Size2 &resolution, const Vector2D &gridSpacing, const Vector2D &gridOrigin)
Constructs solver with initial grid size.
jet::PicSolver2::moveParticles
virtual void moveParticles(double timeIntervalInSeconds)
Moves particles.
jet::PicSolver2::particleEmitter
const ParticleEmitter2Ptr & particleEmitter() const
Returns the particle emitter.
jet::PicSolver2::PicSolver2
PicSolver2()
Default constructor.
jet::PicSolver2::particleSystemData
const ParticleSystemData2Ptr & particleSystemData() const
Returns the particle system data.
jet::GridFluidSolver2::resolution
Size2 resolution() const
Returns the resolution of the grid system data.
jet::GridFluidSolverBuilderBase2
Base class for grid-based fluid solver builder.
Definition: grid_fluid_solver2.h:300
jet::PicSolver2::computeAdvection
void computeAdvection(double timeIntervalInSeconds) override
Computes the advection term of the fluid solver.