Performs advections of an arbitrary type of volume in a static velocity field. The advections are performed by means of various derivatives of Semi-Lagrangian integration, i.e. backwards tracking along the hyperbolic characteristics followed by interpolation.
More...
template<typename VelocityGridT = Vec3fGrid, bool StaggeredVelocity = false, typename InterrupterType = util::NullInterrupter>
class openvdb::OPENVDB_VERSION_NAME::tools::VolumeAdvection< VelocityGridT, StaggeredVelocity, InterrupterType >
Performs advections of an arbitrary type of volume in a static velocity field. The advections are performed by means of various derivatives of Semi-Lagrangian integration, i.e. backwards tracking along the hyperbolic characteristics followed by interpolation.
- Note
- Optionally a limiter can be combined with the higher-order integration schemes MacCormack and BFECC. There are two types of limiters (CLAMP and REVERT) that suppress non-physical oscillations by means of either claminging or reverting to a first-order schemes when the function is not bounded by the cell values used for tri-linear interpolation.
The supported integrations schemes:
///
/// ================================================================
/// | Lable | Accuracy | Integration Scheme | Interpolations |
/// | |Time/Space| | velocity/volume |
/// ================================================================
/// | SEMI | 1/1 | Semi-Lagrangian | 1/1 |
/// | MID | 2/1 | Mid-Point | 2/1 |
/// | RK3 | 3/1 | 3rd Order Runge-Kutta | 3/1 |
/// | RK4 | 4/1 | 4th Order Runge-Kutta | 4/1 |
/// | MAC | 2/2 | MacCormack | 2/2 |
/// | BFECC | 2/2 | BFECC | 3/2 |
/// ================================================================
///
Definition at line 75 of file VolumeAdvect.h.
template<typename VelocityGridT = Vec3fGrid, bool StaggeredVelocity = false, typename InterrupterType = util::NullInterrupter>
template<typename VolumeGridT , typename VolumeSamplerT >
- Returns
- Returns a new grid that is the result of passive advection of all the active values the input grid by timeStep.
- Parameters
-
inGrid | The input grid to be advected (unmodified) |
timeStep | Time-step of the Runge-Kutta integrator. |
This method will advect all of the active values in the input inGrid. To achieve this a deep-copy is dilated to account for the material transport. This dilation step can be slow for large time steps dt or a velocity field with large magnitudes.
- Warning
- If the VolumeSamplerT is of higher order than one (i.e. tri-linear interpolation) instabilities are known to occur. To suppress those monotonicity constrains or flux-limiters need to be applies.
- Exceptions
-
RuntimeError | if inGrid does not have uniform voxels. |
Definition at line 210 of file VolumeAdvect.h.
template<typename VelocityGridT = Vec3fGrid, bool StaggeredVelocity = false, typename InterrupterType = util::NullInterrupter>
template<typename VolumeGridT , typename MaskGridT , typename VolumeSamplerT >
- Returns
- Returns a new grid that is the result of passive advection of the active values in inGrid that intersect the active values in
mask
. The time of the output grid is incremented by timeStep.
- Parameters
-
inGrid | The input grid to be advected (unmodified). |
mask | The mask of active values defining the active voxels in inGrid on which to perform advection. Only if a value is active in both grids will it be modified. |
timeStep | Time-step for a single Runge-Kutta integration step. |
This method will advect all of the active values in the input inGrid that intersects with the active values in mask. To achieve this a deep-copy is dilated to account for the material transport and finally cropped to the intersection with mask. The dilation step can be slow for large time steps dt or fast moving velocity fields.
- Warning
- If the VolumeSamplerT is of higher order the one (i.e. tri-linear interpolation) instabilities are known to occur. To suppress those monotonicity constrains or flux-limiters need to be applies.
- Exceptions
-
RuntimeError | if inGrid is not aligned with mask or if its voxels are not uniform. |
Definition at line 257 of file VolumeAdvect.h.
template<typename VelocityGridT = Vec3fGrid, bool StaggeredVelocity = false, typename InterrupterType = util::NullInterrupter>
template<typename VolumeGridT >
- Returns
- Returns the maximum distance in voxel units of inGrid that a particle can travel in the time-step dt when advected in the velocity field defined during construction.
This method is useful when dilating sparse volume grids to pad boundary regions. Excessive dilation can be computationally expensive so use this method to prevent or warn against run-away computation.
- Exceptions
-
RuntimeError | if inGrid does not have uniform voxels. |
Definition at line 181 of file VolumeAdvect.h.