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
Norm.h
1#ifndef PBAT_MATH_LINALG_MINI_NORM_H
2#define PBAT_MATH_LINALG_MINI_NORM_H
3
4#include "Concepts.h"
5#include "Reductions.h"
6#include "pbat/HostDevice.h"
7
8#include <math.h>
9#include <type_traits>
10#include <utility>
11
12namespace pbat {
13namespace math {
14namespace linalg {
15namespace mini {
16
17template <class /*CMatrix*/ TMatrix>
18PBAT_HOST_DEVICE auto SquaredNorm(TMatrix&& A)
19{
20 return Dot(std::forward<TMatrix>(A), std::forward<TMatrix>(A));
21}
22
23template <class /*CMatrix*/ TMatrix>
24PBAT_HOST_DEVICE auto Norm(TMatrix&& A)
25{
26 using MatrixType = std::remove_cvref_t<TMatrix>;
27 PBAT_MINI_CHECK_CMATRIX(MatrixType);
28 using ScalarType = typename MatrixType::ScalarType;
29 if constexpr (std::is_same_v<ScalarType, float>)
30 {
31 return sqrtf(SquaredNorm(std::forward<TMatrix>(A)));
32 }
33 else
34 {
35 return sqrt(SquaredNorm(std::forward<TMatrix>(A)));
36 }
37}
38
39} // namespace mini
40} // namespace linalg
41} // namespace math
42} // namespace pbat
43
44#endif // PBAT_MATH_LINALG_MINI_NORM_H
Mini linear algebra related functionality.
Definition Assign.h:12
Linear Algebra related functionality.
Definition FilterEigenvalues.h:7
Math related functionality.
Definition Concepts.h:19
The main namespace of the library.
Definition Aliases.h:15