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
Concepts.h
Go to the documentation of this file.
1
10
11#ifndef PBAT_FEM_CONCEPTS_H
12#define PBAT_FEM_CONCEPTS_H
13
14#include "pbat/Aliases.h"
16
17#include <concepts>
18
19namespace pbat::fem {
20
62template <class T>
63concept CElement = requires(T t)
64{
65 typename T::AffineBaseType;
66 {T::bHasConstantJacobian}->std::convertible_to<bool>;
67 // Should be valid for argument > 1 as well, but we don't check that.
68 typename T::template QuadratureType<1, Scalar>;
69 {T::kOrder}->std::convertible_to<int>;
70 {T::kDims}->std::convertible_to<int>;
71 {T::kNodes}->std::convertible_to<int>;
72 requires common::CContiguousIndexRange<decltype(T::Coordinates)>;
73 requires common::CContiguousIndexRange<decltype(T::Vertices)>;
74 {t.N(Vector<T::kDims>{})}->std::convertible_to<Vector<T::kNodes>>;
75 {t.GradN(Vector<T::kDims>{})}->std::convertible_to<Matrix<T::kNodes, T::kDims>>;
76};
77
83template <class M>
84concept CMesh = requires(M m)
85{
89 {M::kDims}->std::convertible_to<int>;
90 {M::kOrder}->std::convertible_to<int>;
91 {m.X} /*->std::
92 convertible_to<Eigen::Matrix<typename M::ScalarType, Eigen::Dynamic, Eigen::Dynamic>>*/
93 ;
94 {m.E} /*->std::convertible_to<Eigen::Matrix<typename M::IndexType, Eigen::Dynamic,
95 Eigen::Dynamic>>*/
96 ;
97};
98
99} // namespace pbat::fem
100
101#endif // PBAT_FEM_CONCEPTS_H
Concepts for common types.
Contiguous range of integer types.
Definition Concepts.h:73
Concept for floating-point types.
Definition Concepts.h:56
Concept for integral types.
Definition Concepts.h:45
Reference finite element.
Definition Concepts.h:63
Finite element mesh.
Definition Concepts.h:84
Finite Element Method (FEM)
Definition Concepts.h:19
Eigen::Vector< Scalar, N > Vector
Fixed-size vector type.
Definition Aliases.h:24
Eigen::Matrix< Scalar, Rows, Cols > Matrix
Fixed-size matrix type.
Definition Aliases.h:31