PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
|
FEM mass matrix operator. More...
#include "Concepts.h"
#include "ShapeFunctions.h"
#include "pbat/Aliases.h"
#include "pbat/common/Eigen.h"
#include "pbat/profiling/Profiling.h"
#include <exception>
#include <fmt/core.h>
#include <tbb/parallel_for.h>
Go to the source code of this file.
Namespaces | |
namespace | pbat |
The main namespace of the library. | |
namespace | pbat::fem |
Finite Element Method (FEM) | |
Functions | |
template<typename TElement, typename TN> | |
auto | pbat::fem::ElementMassMatrix (Eigen::MatrixBase< TN > const &N, typename TN::Scalar w, typename TN::Scalar rho) |
Compute the element mass matrix at a single quadrature point. | |
template<typename TElement, typename TN, typename TDerivedwg, typename TDerivedrhog, typename TDerivedOut> | |
void | pbat::fem::ToElementMassMatrices (Eigen::MatrixBase< TN > const &Neg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::PlainObjectBase< TDerivedOut > &Meg) |
Compute a matrix of horizontally stacked element mass matrices for all quadrature points. | |
template<typename TElement, typename TN, typename TDerivedwg, typename TDerivedrhog> | |
auto | pbat::fem::ElementMassMatrices (Eigen::MatrixBase< TN > const &Neg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog) |
Compute a matrix of horizontally stacked element mass matrices for all quadrature points. | |
template<CElement TElement, int Dims, class TDerivedE, class TDerivedeg, class TDerivedMe, class TDerivedIn, class TDerivedOut> | |
void | pbat::fem::GemmMass (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Me, int dims, Eigen::MatrixBase< TDerivedIn > const &X, Eigen::DenseBase< TDerivedOut > &Y) |
Compute mass matrix-matrix multiply \( Y += \mathbf{M} X \) using precomputed element mass matrices. | |
template<CMesh TMesh, class TDerivedeg, class TDerivedMe, class TDerivedIn, class TDerivedOut> | |
void | pbat::fem::GemmMass (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Me, int dims, Eigen::MatrixBase< TDerivedIn > const &X, Eigen::DenseBase< TDerivedOut > &Y) |
Compute mass matrix-matrix multiply \( Y += \mathbf{M} X \) using mesh and precomputed element mass matrices. | |
template<CElement TElement, int Dims, Eigen::StorageOptions Options, class TDerivedE, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg> | |
auto | pbat::fem::MassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims=1) -> Eigen::SparseMatrix< typename TDerivedNeg::Scalar, Options, typename TDerivedE::Scalar > |
Construct the mass matrix operator's sparse matrix representation. | |
template<CElement TElement, int Dims, Eigen::StorageOptions Options, class TDerivedE, class TDerivedeg, class TDerivedMe> | |
auto | pbat::fem::MassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims=1) -> Eigen::SparseMatrix< typename TDerivedMe::Scalar, Options, typename TDerivedE::Scalar > |
Construct the mass matrix operator's sparse matrix representation from precomputed element mass matrices. | |
template<Eigen::StorageOptions Options, CMesh TMesh, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg> | |
auto | pbat::fem::MassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims=1) -> Eigen::SparseMatrix< typename TDerivedNeg::Scalar, Options, typename TMesh::IndexType > |
Construct the mass matrix operator's sparse matrix representation using mesh. | |
template<Eigen::StorageOptions Options, CMesh TMesh, class TDerivedeg, class TDerivedMe> | |
auto | pbat::fem::MassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims=1) -> Eigen::SparseMatrix< typename TDerivedMe::Scalar, Options, typename TMesh::IndexType > |
Construct the mass matrix operator's sparse matrix representation using mesh and precomputed element mass matrices. | |
template<CElement TElement, int Dims, class TDerivedE, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg, class TDerivedOut> | |
void | pbat::fem::ToLumpedMassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims, Eigen::PlainObjectBase< TDerivedOut > &m) |
Compute lumped mass matrix's diagonal vector into existing output vector. | |
template<CElement TElement, int Dims, class TDerivedE, class TDerivedeg, class TDerivedMe, class TDerivedOut> | |
void | pbat::fem::ToLumpedMassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims, Eigen::PlainObjectBase< TDerivedOut > &m) |
Compute lumped mass vector from precomputed element mass matrices into existing output vector. | |
template<CMesh TMesh, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg, class TDerivedOut> | |
void | pbat::fem::ToLumpedMassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims, Eigen::PlainObjectBase< TDerivedOut > &m) |
Compute lumped mass vector using mesh and precomputed element mass matrices into existing output vector. | |
template<CMesh TMesh, class TDerivedeg, class TDerivedMe, class TDerivedOut> | |
void | pbat::fem::ToLumpedMassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims, Eigen::PlainObjectBase< TDerivedOut > &m) |
Compute lumped mass vector using mesh and precomputed element mass matrices into existing output vector. | |
template<CElement TElement, int Dims, class TDerivedE, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg> | |
auto | pbat::fem::LumpedMassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims=1) -> Eigen::Vector< typename TDerivedNeg::Scalar, Eigen::Dynamic > |
Compute lumped mass matrix's diagonal vector (allocates output vector) | |
template<CElement TElement, int Dims, class TDerivedE, class TDerivedeg, class TDerivedMe> | |
auto | pbat::fem::LumpedMassMatrix (Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims=1) -> Eigen::Vector< typename TDerivedMe::Scalar, Eigen::Dynamic > |
Compute lumped mass vector from precomputed element mass matrices (allocates output vector) | |
template<CMesh TMesh, class TDerivedeg, class TDerivedwg, class TDerivedrhog, class TDerivedNeg> | |
auto | pbat::fem::LumpedMassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::DenseBase< TDerivedrhog > const &rhog, Eigen::MatrixBase< TDerivedNeg > const &Neg, int dims=1) |
Compute lumped mass vector using mesh (allocates output vector) | |
template<CMesh TMesh, class TDerivedeg, class TDerivedMe> | |
auto | pbat::fem::LumpedMassMatrix (TMesh const &mesh, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::MatrixBase< TDerivedMe > const &Meg, int dims=1) |
Compute lumped mass vector using mesh and precomputed element mass matrices (allocates output vector) | |
FEM mass matrix operator.
The mass matrix \( \mathbf{M}_{ij} = \int_\Omega \rho(X) \phi_i(X) \phi_j(X) \) of a finite element discretized function under Galerkin projection.
This file provides functions to compute mass matrix related quantities.