OpenVDB
12.0.0
|
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...
#include <openvdb/tools/VolumeAdvect.h>
Public Member Functions | |
VolumeAdvection (const VelocityGridT &velGrid, InterrupterType *interrupter=nullptr) | |
Constructor. More... | |
virtual | ~VolumeAdvection () |
int | spatialOrder () const |
Return the spatial order of accuracy of the advection scheme. More... | |
int | temporalOrder () const |
Return the temporal order of accuracy of the advection scheme. More... | |
void | setIntegrator (Scheme::SemiLagrangian integrator) |
Set the integrator (see details in the table above) More... | |
Scheme::SemiLagrangian | getIntegrator () const |
Return the integrator (see details in the table above) More... | |
void | setLimiter (Scheme::Limiter limiter) |
Set the limiter (see details above) More... | |
Scheme::Limiter | getLimiter () const |
Retrun the limiter (see details above) More... | |
bool | isLimiterOn () const |
Return true if a limiter will be applied based on the current settings. More... | |
size_t | getGrainSize () const |
void | setGrainSize (size_t grainsize) |
Set the grain-size used for multi-threading. More... | |
int | getSubSteps () const |
void | setSubSteps (int substeps) |
Set the number of sub-steps per integration. More... | |
double | getMaxVelocity () const |
Return the maximum magnitude of the velocity in the advection velocity field defined during construction. More... | |
template<typename VolumeGridT > | |
int | getMaxDistance (const VolumeGridT &inGrid, double dt) const |
template<typename VolumeGridT , typename VolumeSamplerT > | |
VolumeGridT::Ptr | advect (const VolumeGridT &inGrid, double timeStep) |
template<typename VolumeGridT , typename MaskGridT , typename VolumeSamplerT > | |
VolumeGridT::Ptr | advect (const VolumeGridT &inGrid, const MaskGridT &mask, double timeStep) |
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.
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 | /// ================================================================ ///
|
inline |
Constructor.
velGrid | Velocity grid responsible for the (passive) advection. |
interrupter | Optional interrupter used to prematurely end computations. |
|
inlinevirtual |
|
inline |
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.
RuntimeError | if inGrid does not have uniform voxels. |
|
inline |
mask
. The time of the output grid is incremented by timeStep.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.
RuntimeError | if inGrid is not aligned with mask or if its voxels are not uniform. |
|
inline |
|
inline |
Return the integrator (see details in the table above)
|
inline |
Retrun the limiter (see details above)
|
inline |
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.
RuntimeError | if inGrid does not have uniform voxels. |
|
inline |
Return the maximum magnitude of the velocity in the advection velocity field defined during construction.
|
inline |
|
inline |
Return true
if a limiter will be applied based on the current settings.
|
inline |
Set the grain-size used for multi-threading.
|
inline |
Set the integrator (see details in the table above)
|
inline |
Set the limiter (see details above)
|
inline |
Set the number of sub-steps per integration.
|
inline |
Return the spatial order of accuracy of the advection scheme.
|
inline |
Return the temporal order of accuracy of the advection scheme.