diff --git a/src/geometry/SymmetryUtils.hpp b/src/geometry/SymmetryUtils.hpp new file mode 100644 index 0000000000000000000000000000000000000000..6524a0791aef79b5440110d7180a472865c12d89 --- /dev/null +++ b/src/geometry/SymmetryUtils.hpp @@ -0,0 +1,32 @@ +#ifndef SYMMETRY_UTILS_HPP +#define SYMMETRY_UTILS_HPP + +#include <algebra/TinyMatrix.hpp> +#include <algebra/TinyVector.hpp> +#include <utils/PugsMacros.hpp> + +template <size_t Dimension> +PUGS_INLINE auto +symmetrize_vector(const TinyVector<Dimension>& normal, const TinyVector<Dimension>& u) +{ + return u - 2 * dot(u, normal) * normal; +} + +template <size_t Dimension> +PUGS_INLINE auto +symmetrize_matrix(const TinyVector<Dimension>& normal, const TinyMatrix<Dimension>& A) +{ + const TinyMatrix S = TinyMatrix<Dimension>{identity} - 2 * tensorProduct(normal, normal); + return S * A * S; +} + +template <size_t Dimension> +PUGS_INLINE auto +symmetrize_coordinates(const TinyVector<Dimension>& origin, + const TinyVector<Dimension>& normal, + const TinyVector<Dimension>& u) +{ + return u - 2 * dot(u - origin, normal) * normal; +} + +#endif // SYMMETRY_UTILS_HPP diff --git a/src/scheme/PolynomialReconstruction.cpp b/src/scheme/PolynomialReconstruction.cpp index 3123063361c458385f34a2ab02b983bbfcad8517..6073da9c8ca1547a7aa36479b098b43999191c6f 100644 --- a/src/scheme/PolynomialReconstruction.cpp +++ b/src/scheme/PolynomialReconstruction.cpp @@ -2,8 +2,8 @@ #include <algebra/Givens.hpp> #include <algebra/ShrinkMatrixView.hpp> -#include <algebra/ShrinkVectorView.hpp> #include <algebra/SmallMatrix.hpp> +#include <geometry/SymmetryUtils.hpp> #include <mesh/MeshData.hpp> #include <mesh/MeshDataManager.hpp> #include <mesh/MeshFlatFaceBoundary.hpp> @@ -18,31 +18,6 @@ #include <scheme/reconstruction_utils/ElementIntegralReconstructionMatrixBuilder.hpp> #include <scheme/reconstruction_utils/MutableDiscreteFunctionDPkVariant.hpp> -#warning put in a file in geometry -template <size_t Dimension> -PUGS_INLINE auto -symmetrize_vector(const TinyVector<Dimension>& normal, const TinyVector<Dimension>& u) -{ - return u - 2 * dot(u, normal) * normal; -} - -template <size_t Dimension> -PUGS_INLINE auto -symmetrize_matrix(const TinyVector<Dimension>& normal, const TinyMatrix<Dimension>& A) -{ - const TinyMatrix S = TinyMatrix<Dimension>{identity} - 2 * tensorProduct(normal, normal); - return S * A * S; -} - -template <size_t Dimension> -PUGS_INLINE auto -symmetrize_coordinates(const TinyVector<Dimension>& origin, - const TinyVector<Dimension>& normal, - const TinyVector<Dimension>& u) -{ - return u - 2 * dot(u - origin, normal) * normal; -} - template <MeshConcept MeshType> class PolynomialReconstruction::Internal {