PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
MapParallelepiped.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 __MapParallelepiped_H
13#define __MapParallelepiped_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 Eigen::MatrixXd ReferenceVertices;
33
34 private:
35 const Gedim::GeometryUtilities &geometryUtilities;
36
37 bool TestMapConfiguration(const Eigen::MatrixXd &vertices,
38 const std::vector<unsigned int> &coordinateSystem,
39 const Eigen::MatrixXd &referencePoints,
40 const unsigned int &secondVertexIndex,
41 const unsigned int &thirdVertexIndex,
42 const unsigned int &fourthVertexIndex,
44
45 public:
46 MapParallelepiped(const Gedim::GeometryUtilities &geometryUtilities);
47
49 {
50 }
51
55 static Eigen::Matrix3d Q(const Eigen::Vector3d &firstVertex,
56 const Eigen::Vector3d &secondVertex,
57 const Eigen::Vector3d &thirdVertex,
58 const Eigen::Vector3d &fourthVertex)
59 {
60 Eigen::Matrix3d Q;
61 Q.row(0) << secondVertex.x() - firstVertex.x(), thirdVertex.x() - firstVertex.x(),
62 fourthVertex.x() - firstVertex.x();
63 Q.row(1) << secondVertex.y() - firstVertex.y(), thirdVertex.y() - firstVertex.y(),
64 fourthVertex.y() - firstVertex.y();
65 Q.row(2) << secondVertex.z() - firstVertex.z(), thirdVertex.z() - firstVertex.z(),
66 fourthVertex.z() - firstVertex.z();
67
68 return Q;
69 }
70
74 static inline Eigen::Vector3d b(const Eigen::Vector3d &firstVertex)
75 {
76 return firstVertex;
77 }
78
83 MapParallelepipedData Compute(const Eigen::MatrixXd &vertices, const std::vector<unsigned int> &coordinateSystem) const;
84
89 static inline Eigen::MatrixXd F(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
90 {
91 return (mapData.Q * x).colwise() + mapData.b;
92 }
93
94 static inline Eigen::MatrixXd FInv(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
95 {
96 return mapData.QInv * (x.colwise() - mapData.b);
97 }
98
103 static Eigen::MatrixXd J(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x);
104
109 static Eigen::VectorXd DetJ(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x);
110};
111} // namespace Gedim
112
113#endif // __MapParallelepiped_H
Eigen column vector.
Definition Eigen_Array.hpp:23
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
Definition MapParallelepiped.hpp:21
static Eigen::MatrixXd F(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelepiped.hpp:89
~MapParallelepiped()
Definition MapParallelepiped.hpp:48
static Eigen::MatrixXd J(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelepiped.cpp:84
MapParallelepipedData Compute(const Eigen::MatrixXd &vertices, const std::vector< unsigned int > &coordinateSystem) const
Definition MapParallelepiped.cpp:58
static Eigen::MatrixXd FInv(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelepiped.hpp:94
static Eigen::Matrix3d Q(const Eigen::Vector3d &firstVertex, const Eigen::Vector3d &secondVertex, const Eigen::Vector3d &thirdVertex, const Eigen::Vector3d &fourthVertex)
Definition MapParallelepiped.hpp:55
static Eigen::VectorXd DetJ(const MapParallelepipedData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelepiped.cpp:96
Eigen::MatrixXd ReferenceVertices
Definition MapParallelepiped.hpp:32
static Eigen::Vector3d b(const Eigen::Vector3d &firstVertex)
Definition MapParallelepiped.hpp:74
Definition Eigen_Array.cpp:22
Definition MapParallelepiped.hpp:24
Eigen::Matrix3d Q
Definition MapParallelepiped.hpp:25
Eigen::Matrix3d QInv
Definition MapParallelepiped.hpp:27
Eigen::Vector3d b
Definition MapParallelepiped.hpp:26
double DetQ
Definition MapParallelepiped.hpp:28
double DetQInv
Definition MapParallelepiped.hpp:29