PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
MapParallelogram.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 __MapParallelogram_H
13#define __MapParallelogram_H
14
15#include "Eigen/Eigen"
16
17namespace Gedim
18{
20{
21 public:
23 {
24 Eigen::Matrix3d BMatrix;
25 Eigen::Matrix3d BMatrixInv;
26 Eigen::Vector3d b;
27 double DetBMatrix;
29 };
30 Eigen::MatrixXd ReferenceVertices;
31
32 private:
33 static inline Eigen::Matrix3d BMatrix(const Eigen::MatrixXd &vertices)
34 {
35 Eigen::Matrix3d B;
36 B.row(0) << vertices(0, 1) - vertices(0, 0), vertices(0, 3) - vertices(0, 0), 0.0;
37 B.row(1) << vertices(1, 1) - vertices(1, 0), vertices(1, 3) - vertices(1, 0), 0.0;
38 B.row(2) << 0.0, 0.0, 1.0;
39 return B;
40 }
41
45 static inline Eigen::Vector3d b(const Eigen::MatrixXd &vertices)
46 {
47 return vertices.col(0);
48 }
49
50 public:
52 {
53 ReferenceVertices.resize(3, 4);
54 ReferenceVertices.col(0) << 0.0, 0.0, 0.0;
55 ReferenceVertices.col(1) << 1.0, 0.0, 0.0;
56 ReferenceVertices.col(2) << 1.0, 1.0, 0.0;
57 ReferenceVertices.col(3) << 0.0, 1.0, 0.0;
58 }
60 {
61 }
62
63 MapParallelogramData Compute(const Eigen::MatrixXd &vertices);
64
65 static Eigen::MatrixXd F(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
66 {
67 return (mapData.BMatrix * x).colwise() + mapData.b;
68 }
69
70 static Eigen::MatrixXd FInv(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
71 {
72 return mapData.BMatrixInv * (x.colwise() - mapData.b);
73 }
74
79 static Eigen::MatrixXd J(const MapParallelogramData &mapData, const Eigen::MatrixXd &x);
80
81 static Eigen::VectorXd DetJ(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
82 {
83 return Eigen::VectorXd::Constant(x.cols(), mapData.DetBMatrix);
84 }
85
86 static double DetJ(const MapParallelogramData &mapData)
87 {
88 return mapData.DetBMatrix;
89 }
90};
91} // namespace Gedim
92
93#endif // __MappingSquare_H
Eigen column vector.
Definition Eigen_Array.hpp:23
Definition MapParallelogram.hpp:20
static Eigen::VectorXd DetJ(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelogram.hpp:81
static Eigen::MatrixXd J(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelogram.cpp:17
static Eigen::MatrixXd FInv(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelogram.hpp:70
~MapParallelogram()
Definition MapParallelogram.hpp:59
static Eigen::MatrixXd F(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelogram.hpp:65
Eigen::MatrixXd ReferenceVertices
Definition MapParallelogram.hpp:30
static double DetJ(const MapParallelogramData &mapData)
Definition MapParallelogram.hpp:86
MapParallelogram()
Definition MapParallelogram.hpp:51
MapParallelogramData Compute(const Eigen::MatrixXd &vertices)
Definition MapParallelogram.cpp:28
Definition Eigen_Array.cpp:22
Definition MapParallelogram.hpp:23
Eigen::Matrix3d BMatrix
Definition MapParallelogram.hpp:24
double DetBMatrix
Definition MapParallelogram.hpp:27
double DetBMatrixInv
Definition MapParallelogram.hpp:28
Eigen::Matrix3d BMatrixInv
Definition MapParallelogram.hpp:25
Eigen::Vector3d b
Definition MapParallelogram.hpp:26