Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
SimplexParent.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_SimplexParent_H_
9#define model_SimplexParent_H_
10
11#include <memory>
12#include <map>
13#include <SimplexTraits.h>
14
15namespace model
16{
17
18 template<short int dim,short int order>
20 {
21
27
28
30 const Eigen::Matrix<double,dim+1,SimplexTraits<dim,order>::nVertices> b2p;
31
32
33 /**********************************************************************/
35 const SimplexIDType& xID) :
36 /* init */ BaseArrayType(mesh->template simplexFactory<order>().faces(xID))
37 /* init */,b2p(get_b2p(mesh,xID))
38 {
39
40 }
41
42 /**********************************************************************/
43 Eigen::Matrix<double,dim,SimplexTraits<dim,order>::nVertices> vertexPositionMatrix() const
44 {
45 return b2p.template block<dim,SimplexTraits<dim,order>::nVertices>(0,0);
46 }
47
48 /**********************************************************************/
49 Eigen::Matrix<double,dim+1,SimplexTraits<dim,order>::nVertices> get_b2p(SimplicialMesh<dim>* const mesh,
50 const SimplexIDType& xID) const
51 {
52 Eigen::Matrix<double,dim+1,SimplexTraits<dim,order>::nVertices> temp(Eigen::Matrix<double,dim+1,SimplexTraits<dim,order>::nVertices>::Ones());
53 //temp.template block<dim,SimplexTraits<dim,order>::nVertices>(0,0)=this->vertexPositionMatrix();
55 {
56 const typename SimplexTraits<dim,0>::SimplexIDType vID(std::set<size_t>{xID[v]});
57 temp.col(v).template segment<dim>(0)=mesh->template simplexFactory<0>().getRef(vID).P0;
58 }
59 return temp;
60 }
61
62 /**********************************************************************/
63 Eigen::Matrix<double,dim,1> bary2pos(const Eigen::Matrix<double,SimplexTraits<dim,order>::nVertices,1>& bary) const
64 {
65 return (b2p*bary).template segment<dim>(0);
66 }
67
68 /**********************************************************************/
69 Eigen::Matrix<double,dim,1> center() const
70 {
72 }
73
74 /**********************************************************************/
76 {
77 return *this;
78 }
79
80 /**********************************************************************/
81 const BaseArrayType& children() const
82 {
83 return *this;
84 }
85
86
87 /**********************************************************************/
88 ChildSimplexType& child(const int& n)
89 {
90 return *(children()[n].get());
91 }
92
93 /**********************************************************************/
94 const ChildSimplexType& child(const int& n) const
95 {
96 return *(children()[n].get());
97 }
98
99 /**********************************************************************/
100 const std::shared_ptr<ChildSimplexType>& child(const ChildIDType& xID) const
101 {
102 size_t n=nFaces;
103 for (size_t k=0;k<nFaces;++k)
104 {
105 if(this->operator[](k)->xID==xID)
106 {
107 n=k;
108 break;
109 }
110 }
111 assert(n!=nFaces && "CHILD NOT FOUND");
112 return this->operator[](n);
113 }
114
115
116
117 };
118
119}
120#endif
121
122
123
124// /**********************************************************************/
125// Eigen::Matrix<double,dim,SimplexTraits<dim,order>::nVertices> vertexPositionMatrix() const
126// {
127// Eigen::Matrix<double,dim,SimplexTraits<dim,order>::nVertices> temp;
128// for (int v=0;v<SimplexTraits<dim,order>::nVertices;++v)
129// {
130// const typename SimplexTraits<dim,0>::SimplexIDType vID(std::set<size_t>{xID[v]});
131// temp.col(v)=mesh->template simplexFactory<0>().getRef(vID).P0;
132// }
133// return temp;
134// }
135
136// /**********************************************************************/
137// Eigen::Matrix<double,dim,1> center() const
138// {
139// Eigen::Matrix<double,dim,SimplexTraits<dim,order>::nVertices> P(vertexPositionMatrix());
140// Eigen::Matrix<double,dim,1> temp(Eigen::Matrix<double,dim,1>::Zero());
141// for (int v=0;v<SimplexTraits<dim,order>::nVertices;++v)
142// {
143// temp+=P.col(v);
144// }
145// return temp/SimplexTraits<dim,order>::nVertices;
146// }
const BaseArrayType & children() const
SimplexTraits< dim, order >::SimplexIDType SimplexIDType
const ChildSimplexType & child(const int &n) const
const std::shared_ptr< ChildSimplexType > & child(const ChildIDType &xID) const
static constexpr int nFaces
SimplexTraits< dim, order-1 >::SimplexIDType ChildIDType
ChildSimplexType & child(const int &n)
Eigen::Matrix< double, dim, SimplexTraits< dim, order >::nVertices > vertexPositionMatrix() const
Eigen::Matrix< double, dim+1, SimplexTraits< dim, order >::nVertices > get_b2p(SimplicialMesh< dim > *const mesh, const SimplexIDType &xID) const
const Eigen::Matrix< double, dim+1, SimplexTraits< dim, order >::nVertices > b2p
The barycentric-coordinate to position transformation matrix.
Simplex< dim, order-1 > ChildSimplexType
SimplexTraits< dim, order >::BaseArrayType BaseArrayType
SimplexParent(SimplicialMesh< dim > *const mesh, const SimplexIDType &xID)
Eigen::Matrix< double, dim, 1 > bary2pos(const Eigen::Matrix< double, SimplexTraits< dim, order >::nVertices, 1 > &bary) const
Eigen::Matrix< double, dim, 1 > center() const
BaseArrayType & children()
std::array< std::shared_ptr< Simplex< dim, order-1 > >, nFaces > BaseArrayType
static constexpr int nFaces
static constexpr int nVertices
SimplexID< nVertices > SimplexIDType
b order
int k
vertex temp
REAL v[4]