PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
LoadVector.h
Go to the documentation of this file.
1
10
11#ifndef PBAT_FEM_LOAD_VECTOR_H
12#define PBAT_FEM_LOAD_VECTOR_H
13
14#include "Concepts.h"
15#include "ShapeFunctions.h"
17
18#include <Eigen/Core>
19
20namespace pbat::fem {
21
40template <
41 CElement TElement,
42 class TDerivedE,
43 class TDerivedeg,
44 class TDerivedwg,
45 class TDerivedNeg,
46 class TDerivedFeg>
48 Eigen::DenseBase<TDerivedE> const& E,
49 Eigen::Index nNodes,
50 Eigen::DenseBase<TDerivedeg> const& eg,
51 Eigen::DenseBase<TDerivedwg> const& wg,
52 Eigen::MatrixBase<TDerivedNeg> const& Neg,
53 Eigen::MatrixBase<TDerivedFeg> const& Feg)
54 -> Eigen::Matrix<typename TDerivedFeg::Scalar, TDerivedFeg::RowsAtCompileTime, Eigen::Dynamic>
55{
56 PBAT_PROFILE_NAMED_SCOPE("pbat.fem.LoadVector");
57 using MatrixType =
58 Eigen::Matrix<typename TDerivedFeg::Scalar, TDerivedFeg::RowsAtCompileTime, Eigen::Dynamic>;
59 MatrixType F = MatrixType::Zero(Feg.rows(), nNodes);
60 for (auto g = 0; g < wg.size(); ++g)
61 {
62 auto const nodes = E.col(eg(g));
63 F(Eigen::placeholders::all, nodes) += wg(g) * Feg.col(g) * Neg.col(g).transpose();
64 }
65 return F;
66}
67
68} // namespace pbat::fem
69
70#endif // PBAT_FEM_LOAD_VECTOR_H
FEM shape functions and gradients.
Reference finite element.
Definition Concepts.h:63
Finite Element Method (FEM)
Definition Concepts.h:19
auto LoadVectors(Eigen::DenseBase< TDerivedE > const &E, Eigen::Index nNodes, Eigen::DenseBase< TDerivedeg > const &eg, Eigen::DenseBase< TDerivedwg > const &wg, Eigen::MatrixBase< TDerivedNeg > const &Neg, Eigen::MatrixBase< TDerivedFeg > const &Feg) -> Eigen::Matrix< typename TDerivedFeg::Scalar, TDerivedFeg::RowsAtCompileTime, Eigen::Dynamic >
Computes the load vector for a given FEM mesh.
Definition LoadVector.h:47
Profiling utilities for the Physics-Based Animation Toolkit (PBAT)