PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
MapTetrahedron.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __MapTetrahedron_H
13#define __MapTetrahedron_H
14
15#include "Eigen/Eigen"
16#include "GeometryUtilities.hpp"
17
18namespace Gedim
19{
21{
22 public:
24 {
25 Eigen::Matrix3d Q;
26 Eigen::Vector3d b;
27 Eigen::Matrix3d QInv;
28 double DetQ;
29 double DetQInv;
30 };
31
32 private:
33 const Gedim::GeometryUtilities &geometryUtilities;
34
35 bool TestMapConfiguration(const Eigen::MatrixXd &vertices,
36 const Eigen::MatrixXd &referencePoints,
37 const unsigned int &secondVertexIndex,
38 const unsigned int &thirdVertexIndex,
39 const unsigned int &fourthVertexIndex,
41
42 public:
43 MapTetrahedron(const Gedim::GeometryUtilities &geometryUtilities);
44
46 {
47 }
48
51 static inline Eigen::Matrix3d Q(const Eigen::Vector3d &firstVertex,
52 const Eigen::Vector3d &secondVertex,
53 const Eigen::Vector3d &thirdVertex,
54 const Eigen::Vector3d &fourthVertex)
55 {
56 Eigen::Matrix3d Q;
57 Q.row(0) << secondVertex.x() - firstVertex.x(), thirdVertex.x() - firstVertex.x(),
58 fourthVertex.x() - firstVertex.x();
59 Q.row(1) << secondVertex.y() - firstVertex.y(), thirdVertex.y() - firstVertex.y(),
60 fourthVertex.y() - firstVertex.y();
61 Q.row(2) << secondVertex.z() - firstVertex.z(), thirdVertex.z() - firstVertex.z(),
62 fourthVertex.z() - firstVertex.z();
63
64 return Q;
65 }
66
69 static inline Eigen::Vector3d b(const Eigen::Vector3d &firstVertex)
70 {
71 return firstVertex;
72 }
73
77 MapTetrahedronData Compute(const Eigen::MatrixXd &vertices) const;
78
83 static inline Eigen::MatrixXd F(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
84 {
85 return (mapData.Q * x).colwise() + mapData.b;
86 }
87
88 static inline Eigen::MatrixXd FInv(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
89 {
90 return mapData.QInv * (x.colwise() - mapData.b);
91 }
92
97 static Eigen::MatrixXd J(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x);
102 static Eigen::VectorXd DetJ(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x);
103
107 static inline double DetJ(const MapTetrahedronData &mapData)
108 {
109 return mapData.DetQ;
110 };
111};
112} // namespace Gedim
113
114#endif // __MapTetrahedron_H
Eigen column vector.
Definition Eigen_Array.hpp:23
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
Definition MapTetrahedron.hpp:21
MapTetrahedronData Compute(const Eigen::MatrixXd &vertices) const
Definition MapTetrahedron.cpp:45
static double DetJ(const MapTetrahedronData &mapData)
Definition MapTetrahedron.hpp:107
static Eigen::Vector3d b(const Eigen::Vector3d &firstVertex)
Definition MapTetrahedron.hpp:69
static Eigen::MatrixXd FInv(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
Definition MapTetrahedron.hpp:88
static Eigen::VectorXd DetJ(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
Definition MapTetrahedron.cpp:88
static Eigen::Matrix3d Q(const Eigen::Vector3d &firstVertex, const Eigen::Vector3d &secondVertex, const Eigen::Vector3d &thirdVertex, const Eigen::Vector3d &fourthVertex)
Definition MapTetrahedron.hpp:51
static Eigen::MatrixXd J(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
Definition MapTetrahedron.cpp:77
static Eigen::MatrixXd F(const MapTetrahedronData &mapData, const Eigen::MatrixXd &x)
Definition MapTetrahedron.hpp:83
~MapTetrahedron()
Definition MapTetrahedron.hpp:45
Definition Eigen_Array.cpp:22
Definition MapTetrahedron.hpp:24
Eigen::Vector3d b
Definition MapTetrahedron.hpp:26
Eigen::Matrix3d QInv
Definition MapTetrahedron.hpp:27
Eigen::Matrix3d Q
Definition MapTetrahedron.hpp:25
double DetQ
Definition MapTetrahedron.hpp:28
double DetQInv
Definition MapTetrahedron.hpp:29