Jet
v1.3.3
|
Abstract base class for grid-based 3-D fluid solver. More...
#include <jet/grid_fluid_solver3.h>
Classes | |
class | Builder |
Front-end to create GridFluidSolver3 objects step by step. More... | |
Public Member Functions | |
GridFluidSolver3 () | |
Default constructor. More... | |
GridFluidSolver3 (const Size3 &resolution, const Vector3D &gridSpacing, const Vector3D &gridOrigin) | |
Constructs solver with initial grid size. More... | |
virtual | ~GridFluidSolver3 () |
Default destructor. More... | |
const Vector3D & | gravity () const |
Returns the gravity vector of the system. More... | |
void | setGravity (const Vector3D &newGravity) |
Sets the gravity of the system. More... | |
double | viscosityCoefficient () const |
Returns the viscosity coefficient. More... | |
void | setViscosityCoefficient (double newValue) |
Sets the viscosity coefficient. More... | |
double | cfl (double timeIntervalInSeconds) const |
Returns the CFL number from the current velocity field for given time interval. More... | |
double | maxCfl () const |
Returns the max allowed CFL number. More... | |
void | setMaxCfl (double newCfl) |
Sets the max allowed CFL number. More... | |
bool | useCompressedLinearSystem () const |
Returns true if the solver is using compressed linear system. More... | |
void | setUseCompressedLinearSystem (bool onoff) |
Sets whether the solver should use compressed linear system. More... | |
const AdvectionSolver3Ptr & | advectionSolver () const |
Returns the advection solver instance. More... | |
void | setAdvectionSolver (const AdvectionSolver3Ptr &newSolver) |
Sets the advection solver. More... | |
const GridDiffusionSolver3Ptr & | diffusionSolver () const |
Returns the diffusion solver instance. More... | |
void | setDiffusionSolver (const GridDiffusionSolver3Ptr &newSolver) |
Sets the diffusion solver. More... | |
const GridPressureSolver3Ptr & | pressureSolver () const |
Returns the pressure solver instance. More... | |
void | setPressureSolver (const GridPressureSolver3Ptr &newSolver) |
Sets the pressure solver. More... | |
int | closedDomainBoundaryFlag () const |
Returns the closed domain boundary flag. More... | |
void | setClosedDomainBoundaryFlag (int flag) |
Sets the closed domain boundary flag. More... | |
const GridSystemData3Ptr & | gridSystemData () const |
Returns the grid system data. More... | |
void | resizeGrid (const Size3 &newSize, const Vector3D &newGridSpacing, const Vector3D &newGridOrigin) |
Resizes grid system data. More... | |
Size3 | resolution () const |
Returns the resolution of the grid system data. More... | |
Vector3D | gridSpacing () const |
Returns the grid spacing of the grid system data. More... | |
Vector3D | gridOrigin () const |
Returns the origin of the grid system data. More... | |
const FaceCenteredGrid3Ptr & | velocity () const |
Returns the velocity field. More... | |
const Collider3Ptr & | collider () const |
Returns the collider. More... | |
void | setCollider (const Collider3Ptr &newCollider) |
Sets the collider. More... | |
const GridEmitter3Ptr & | emitter () const |
Returns the emitter. More... | |
void | setEmitter (const GridEmitter3Ptr &newEmitter) |
Sets the emitter. More... | |
![]() | |
PhysicsAnimation () | |
Default constructor. More... | |
virtual | ~PhysicsAnimation () |
Destructor. More... | |
bool | isUsingFixedSubTimeSteps () const |
Returns true if fixed sub-timestepping is used. More... | |
void | setIsUsingFixedSubTimeSteps (bool isUsing) |
Sets true if fixed sub-timestepping is used. More... | |
unsigned int | numberOfFixedSubTimeSteps () const |
Returns the number of fixed sub-timesteps. More... | |
void | setNumberOfFixedSubTimeSteps (unsigned int numberOfSteps) |
Sets the number of fixed sub-timesteps. More... | |
void | advanceSingleFrame () |
Advances a single frame. More... | |
Frame | currentFrame () const |
Returns current frame. More... | |
void | setCurrentFrame (const Frame &frame) |
Sets current frame cursor (but do not invoke update()). More... | |
double | currentTimeInSeconds () const |
Returns current time in seconds. More... | |
![]() | |
Animation () | |
virtual | ~Animation () |
void | update (const Frame &frame) |
Updates animation state for given frame . More... | |
Static Public Member Functions | |
static Builder | builder () |
Returns builder fox GridFluidSolver3. More... | |
Protected Member Functions | |
void | onInitialize () override |
Called when it needs to setup initial condition. More... | |
void | onAdvanceTimeStep (double timeIntervalInSeconds) override |
Called when advancing a single time-step. More... | |
unsigned int | numberOfSubTimeSteps (double timeIntervalInSeconds) const override |
Returns the required sub-time-steps for given time interval. More... | |
virtual void | onBeginAdvanceTimeStep (double timeIntervalInSeconds) |
Called at the beginning of a time-step. More... | |
virtual void | onEndAdvanceTimeStep (double timeIntervalInSeconds) |
Called at the end of a time-step. More... | |
virtual void | computeExternalForces (double timeIntervalInSeconds) |
Computes the external force terms. More... | |
virtual void | computeViscosity (double timeIntervalInSeconds) |
Computes the viscosity term using the diffusion solver. More... | |
virtual void | computePressure (double timeIntervalInSeconds) |
Computes the pressure term using the pressure solver. More... | |
virtual void | computeAdvection (double timeIntervalInSeconds) |
Computes the advection term using the advection solver. More... | |
virtual ScalarField3Ptr | fluidSdf () const |
void | computeGravity (double timeIntervalInSeconds) |
Computes the gravity term. More... | |
void | applyBoundaryCondition () |
Applies the boundary condition to the velocity field. More... | |
void | extrapolateIntoCollider (ScalarGrid3 *grid) |
Extrapolates given field into the collider-occupied region. More... | |
void | extrapolateIntoCollider (CollocatedVectorGrid3 *grid) |
Extrapolates given field into the collider-occupied region. More... | |
void | extrapolateIntoCollider (FaceCenteredGrid3 *grid) |
Extrapolates given field into the collider-occupied region. More... | |
ScalarField3Ptr | colliderSdf () const |
Returns the signed-distance field representation of the collider. More... | |
VectorField3Ptr | colliderVelocityField () const |
Returns the velocity field of the collider. More... | |
Abstract base class for grid-based 3-D fluid solver.
This is an abstract base class for grid-based 3-D fluid solver based on Jos Stam's famous 1999 paper - "Stable Fluids". This solver takes fractional step method as its foundation which is consisted of independent advection, diffusion, external forces, and pressure projection steps. Each step is configurable so that a custom step can be implemented. For example, if a user wants to change the advection solver to her/his own implementation, simply call GridFluidSolver3::setAdvectionSolver(newSolver).
jet::GridFluidSolver3::GridFluidSolver3 | ( | ) |
Default constructor.
jet::GridFluidSolver3::GridFluidSolver3 | ( | const Size3 & | resolution, |
const Vector3D & | gridSpacing, | ||
const Vector3D & | gridOrigin | ||
) |
Constructs solver with initial grid size.
|
virtual |
Default destructor.
const AdvectionSolver3Ptr& jet::GridFluidSolver3::advectionSolver | ( | ) | const |
Returns the advection solver instance.
|
protected |
Applies the boundary condition to the velocity field.
This function applies the boundary condition to the velocity field by constraining the flow based on the boundary condition solver.
|
static |
Returns builder fox GridFluidSolver3.
double jet::GridFluidSolver3::cfl | ( | double | timeIntervalInSeconds | ) | const |
Returns the CFL number from the current velocity field for given time interval.
[in] | timeIntervalInSeconds | The time interval in seconds. |
int jet::GridFluidSolver3::closedDomainBoundaryFlag | ( | ) | const |
Returns the closed domain boundary flag.
const Collider3Ptr& jet::GridFluidSolver3::collider | ( | ) | const |
Returns the collider.
|
protected |
Returns the signed-distance field representation of the collider.
|
protected |
Returns the velocity field of the collider.
|
protectedvirtual |
Computes the advection term using the advection solver.
Reimplemented in jet::LevelSetLiquidSolver3, and jet::PicSolver3.
|
protectedvirtual |
Computes the external force terms.
This function computes the external force applied for given time interval. By default, it only computes the gravity.
Reimplemented in jet::GridSmokeSolver3.
|
protected |
Computes the gravity term.
|
protectedvirtual |
Computes the pressure term using the pressure solver.
|
protectedvirtual |
Computes the viscosity term using the diffusion solver.
const GridDiffusionSolver3Ptr& jet::GridFluidSolver3::diffusionSolver | ( | ) | const |
Returns the diffusion solver instance.
const GridEmitter3Ptr& jet::GridFluidSolver3::emitter | ( | ) | const |
Returns the emitter.
|
protected |
Extrapolates given field into the collider-occupied region.
|
protected |
Extrapolates given field into the collider-occupied region.
|
protected |
Extrapolates given field into the collider-occupied region.
|
protectedvirtual |
\breif Returns the signed-distance representation of the fluid.
This function returns the signed-distance representation of the fluid. Positive sign area is considered to be atmosphere and won't be included for computing the dynamics. By default, this will return constant scalar field of -kMaxD, meaning that the entire volume is occupied with fluid.
Reimplemented in jet::LevelSetLiquidSolver3, and jet::PicSolver3.
const Vector3D& jet::GridFluidSolver3::gravity | ( | ) | const |
Returns the gravity vector of the system.
Vector3D jet::GridFluidSolver3::gridOrigin | ( | ) | const |
Returns the origin of the grid system data.
This function returns the resolution of the grid system data. This is equivalent to calling gridSystemData()->origin(), but provides a shortcut.
Vector3D jet::GridFluidSolver3::gridSpacing | ( | ) | const |
Returns the grid spacing of the grid system data.
This function returns the resolution of the grid system data. This is equivalent to calling gridSystemData()->gridSpacing(), but provides a shortcut.
const GridSystemData3Ptr& jet::GridFluidSolver3::gridSystemData | ( | ) | const |
Returns the grid system data.
This function returns the grid system data. The grid system data stores the core fluid flow fields such as velocity. By default, the data instance has velocity field only.
double jet::GridFluidSolver3::maxCfl | ( | ) | const |
Returns the max allowed CFL number.
|
overrideprotectedvirtual |
Returns the required sub-time-steps for given time interval.
This function returns the required sub-time-steps for given time interval based on the max allowed CFL number. If the time interval is too large so that it makes the CFL number greater than the max value, This function will return a numebr that is greater than 1.
Reimplemented from jet::PhysicsAnimation.
|
overrideprotectedvirtual |
Called when advancing a single time-step.
Implements jet::PhysicsAnimation.
|
protectedvirtual |
Called at the beginning of a time-step.
Reimplemented in jet::LevelSetLiquidSolver3, and jet::PicSolver3.
|
protectedvirtual |
Called at the end of a time-step.
Reimplemented in jet::GridSmokeSolver3, and jet::LevelSetLiquidSolver3.
|
overrideprotectedvirtual |
Called when it needs to setup initial condition.
Reimplemented from jet::PhysicsAnimation.
Reimplemented in jet::PicSolver3.
const GridPressureSolver3Ptr& jet::GridFluidSolver3::pressureSolver | ( | ) | const |
Returns the pressure solver instance.
void jet::GridFluidSolver3::resizeGrid | ( | const Size3 & | newSize, |
const Vector3D & | newGridSpacing, | ||
const Vector3D & | newGridOrigin | ||
) |
Resizes grid system data.
This function resizes grid system data. You can also resize the grid by calling resize function directly from GridFluidSolver3::gridSystemData(), but this function provides a shortcut for the same operation.
[in] | newSize | The new size. |
[in] | newGridSpacing | The new grid spacing. |
[in] | newGridOrigin | The new grid origin. |
Size3 jet::GridFluidSolver3::resolution | ( | ) | const |
Returns the resolution of the grid system data.
This function returns the resolution of the grid system data. This is equivalent to calling gridSystemData()->resolution(), but provides a shortcut.
void jet::GridFluidSolver3::setAdvectionSolver | ( | const AdvectionSolver3Ptr & | newSolver | ) |
Sets the advection solver.
void jet::GridFluidSolver3::setClosedDomainBoundaryFlag | ( | int | flag | ) |
Sets the closed domain boundary flag.
void jet::GridFluidSolver3::setCollider | ( | const Collider3Ptr & | newCollider | ) |
Sets the collider.
void jet::GridFluidSolver3::setDiffusionSolver | ( | const GridDiffusionSolver3Ptr & | newSolver | ) |
Sets the diffusion solver.
void jet::GridFluidSolver3::setEmitter | ( | const GridEmitter3Ptr & | newEmitter | ) |
Sets the emitter.
void jet::GridFluidSolver3::setGravity | ( | const Vector3D & | newGravity | ) |
Sets the gravity of the system.
void jet::GridFluidSolver3::setMaxCfl | ( | double | newCfl | ) |
Sets the max allowed CFL number.
void jet::GridFluidSolver3::setPressureSolver | ( | const GridPressureSolver3Ptr & | newSolver | ) |
Sets the pressure solver.
void jet::GridFluidSolver3::setUseCompressedLinearSystem | ( | bool | onoff | ) |
Sets whether the solver should use compressed linear system.
void jet::GridFluidSolver3::setViscosityCoefficient | ( | double | newValue | ) |
Sets the viscosity coefficient.
This function sets the viscosity coefficient. Non-positive input will be clamped to zero.
[in] | newValue | The new viscosity coefficient value. |
bool jet::GridFluidSolver3::useCompressedLinearSystem | ( | ) | const |
Returns true if the solver is using compressed linear system.
const FaceCenteredGrid3Ptr& jet::GridFluidSolver3::velocity | ( | ) | const |
Returns the velocity field.
This function returns the velocity field from the grid system data. It is just a shortcut to the most commonly accessed data chunk.
double jet::GridFluidSolver3::viscosityCoefficient | ( | ) | const |
Returns the viscosity coefficient.