OpenVDB
9.0.1
|
Solve Poisson's equation ∇2x = b for x, where b is a vector comprising the values of all of the active voxels in a grid. More...
#include <openvdb/Types.h>
#include <openvdb/math/ConjGradient.h>
#include <openvdb/tree/LeafManager.h>
#include <openvdb/tree/Tree.h>
#include <openvdb/util/NullInterrupter.h>
#include "Morphology.h"
#include <openvdb/openvdb.h>
Go to the source code of this file.
Classes | |
struct | DirichletBoundaryOp< ValueType > |
Dirichlet boundary condition functor. More... | |
Namespaces | |
openvdb | |
openvdb::v9_0 | |
openvdb::v9_0::tools | |
openvdb::v9_0::tools::poisson | |
Typedefs | |
using | VIndex = Int32 |
using | LaplacianMatrix = math::pcg::SparseStencilMatrix< double, 7 > |
The type of a matrix used to represent a three-dimensional Laplacian operator. More... | |
Functions | |
template<typename TreeType > | |
TreeType::Ptr | solve (const TreeType &, math::pcg::State &, bool staggered=false) |
Solve ∇2x = b for x, where b is a vector comprising the values of all of the active voxels in the input tree. More... | |
template<typename TreeType , typename Interrupter > | |
TreeType::Ptr | solve (const TreeType &, math::pcg::State &, Interrupter &, bool staggered=false) |
Solve ∇2x = b for x, where b is a vector comprising the values of all of the active voxels in the input tree. More... | |
template<typename TreeType , typename BoundaryOp , typename Interrupter > | |
TreeType::Ptr | solveWithBoundaryConditions (const TreeType &, const BoundaryOp &, math::pcg::State &, Interrupter &, bool staggered=false) |
Solve ∇2x = b for x with user-specified boundary conditions, where b is a vector comprising the values of all of the active voxels in the input tree or domain mask if provided. More... | |
template<typename PreconditionerType , typename TreeType , typename BoundaryOp , typename Interrupter > | |
TreeType::Ptr | solveWithBoundaryConditionsAndPreconditioner (const TreeType &, const BoundaryOp &, math::pcg::State &, Interrupter &, bool staggered=false) |
Solve ∇2x = b for x with user-specified boundary conditions, where b is a vector comprising the values of all of the active voxels in the input tree or domain mask if provided. More... | |
template<typename PreconditionerType , typename TreeType , typename DomainTreeType , typename BoundaryOp , typename Interrupter > | |
TreeType::Ptr | solveWithBoundaryConditionsAndPreconditioner (const TreeType &, const DomainTreeType &, const BoundaryOp &, math::pcg::State &, Interrupter &, bool staggered=false) |
Solve ∇2x = b for x with user-specified boundary conditions, where b is a vector comprising the values of all of the active voxels in the input tree or domain mask if provided. More... | |
Low-level functions | |
template<typename VIndexTreeType > | |
void | populateIndexTree (VIndexTreeType &) |
Overwrite each active voxel in the given scalar tree with a sequential index, starting from zero. More... | |
template<typename TreeType > | |
TreeType::template ValueConverter< VIndex >::Type::Ptr | createIndexTree (const TreeType &) |
Iterate over the active voxels of the input tree and for each one assign its index in the iteration sequence to the corresponding voxel of an integer-valued output tree. More... | |
template<typename VectorValueType , typename SourceTreeType > | |
math::pcg::Vector< VectorValueType >::Ptr | createVectorFromTree (const SourceTreeType &source, const typename SourceTreeType::template ValueConverter< VIndex >::Type &index) |
Return a vector of the active voxel values of the scalar-valued source tree. More... | |
template<typename TreeValueType , typename VIndexTreeType , typename VectorValueType > | |
VIndexTreeType::template ValueConverter< TreeValueType >::Type::Ptr | createTreeFromVector (const math::pcg::Vector< VectorValueType > &values, const VIndexTreeType &index, const TreeValueType &background) |
Return a tree with the same active voxel topology as the index tree but whose voxel values are taken from the the given vector. More... | |
template<typename BoolTreeType > | |
LaplacianMatrix::Ptr | createISLaplacian (const typename BoolTreeType::template ValueConverter< VIndex >::Type &vectorIndexTree, const BoolTreeType &interiorMask, bool staggered=false) |
Generate a sparse matrix of the index-space (Δx = 1) Laplacian operator using second-order finite differences. More... | |
template<typename BoolTreeType , typename BoundaryOp > | |
LaplacianMatrix::Ptr | createISLaplacianWithBoundaryConditions (const typename BoolTreeType::template ValueConverter< VIndex >::Type &vectorIndexTree, const BoolTreeType &interiorMask, const BoundaryOp &boundaryOp, typename math::pcg::Vector< LaplacianMatrix::ValueType > &source, bool staggered=false) |
Generate a sparse matrix of the index-space (Δx = 1) Laplacian operator with user-specified boundary conditions using second-order finite differences. More... | |
Solve Poisson's equation ∇2x = b for x, where b is a vector comprising the values of all of the active voxels in a grid.
P = 0 +--------+ (N,0,N) /| /| (0,0,0) +--------+ | | | | | dP/dx = 0 dP/dx = 0 | +------|-+ |/ |/ (0,-N,0) +--------+ (N,-N,0) dP/dy = -1