PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
MapQuadrilateral.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 __MapQuadrilateral_H
13#define __MapQuadrilateral_H
14
15#include "Eigen/Eigen"
16
17namespace Gedim
18{
20{
21 public:
22 Eigen::MatrixXd ReferencePoints;
23
24 private:
25 inline Eigen::MatrixXd Psi(const Eigen::MatrixXd &points) const
26 {
27 const Eigen::ArrayXd x = points.row(0);
28 const Eigen::ArrayXd y = points.row(1);
29
30 Eigen::MatrixXd evalPsi = Eigen::MatrixXd::Zero(4, points.cols());
31 evalPsi.row(0) = (1.0 - x) * (1.0 - y);
32 evalPsi.row(1) = x * (1.0 - y);
33 evalPsi.row(2) = x * y;
34 evalPsi.row(3) = y * (1.0 - x);
35
36 return evalPsi;
37 }
38
39 inline std::vector<Eigen::MatrixXd> dPsi(const Eigen::MatrixXd &points) const
40 {
41 const Eigen::ArrayXd x = points.row(0);
42 const Eigen::ArrayXd y = points.row(1);
43
44 std::vector<Eigen::MatrixXd> evaldPsi(2, Eigen::MatrixXd(4, points.cols()));
45
46 evaldPsi[0].row(0) = -(1.0 - y);
47 evaldPsi[0].row(1) = (1.0 - y);
48 evaldPsi[0].row(2) = y;
49 evaldPsi[0].row(3) = -y;
50 evaldPsi[1].row(0) = -(1.0 - x);
51 evaldPsi[1].row(1) = -x;
52 evaldPsi[1].row(2) = x;
53 evaldPsi[1].row(3) = (1.0 - x);
54
55 return evaldPsi;
56 }
57
58 public:
60 {
61 ReferencePoints.resize(3, 4);
62 ReferencePoints.col(0) << 0.0, 0.0, 0.0;
63 ReferencePoints.col(1) << 1.0, 0.0, 0.0;
64 ReferencePoints.col(2) << 1.0, 1.0, 0.0;
65 ReferencePoints.col(3) << 0.0, 1.0, 0.0;
66 }
68 {
69 }
70
71 Eigen::MatrixXd F(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const;
72
73 Eigen::MatrixXd FInv(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &points) const;
74
75 Eigen::MatrixXd J(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const;
76
77 Eigen::MatrixXd JInv(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const;
78
79 Eigen::VectorXd DetJ(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const;
80};
81} // namespace Gedim
82
83#endif // __MappingQuadrilateral_H
Eigen column vector.
Definition Eigen_Array.hpp:23
Definition MapQuadrilateral.hpp:20
MapQuadrilateral()
Definition MapQuadrilateral.hpp:59
Eigen::MatrixXd F(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const
Definition MapQuadrilateral.cpp:23
~MapQuadrilateral()
Definition MapQuadrilateral.hpp:67
Eigen::MatrixXd JInv(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const
Definition MapQuadrilateral.cpp:59
Eigen::MatrixXd J(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const
Definition MapQuadrilateral.cpp:31
Eigen::VectorXd DetJ(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &referencePoints) const
Definition MapQuadrilateral.cpp:74
Eigen::MatrixXd ReferencePoints
Definition MapQuadrilateral.hpp:22
Eigen::MatrixXd FInv(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &points) const
Definition MapQuadrilateral.cpp:51
Definition Eigen_Array.cpp:22