8#ifndef model_BoundarySimplex_H_
9#define model_BoundarySimplex_H_
16 template<
short int dim,
short int dmo>
23 for (
auto& pParent : simplexChild.
parents())
25 temp=pParent.second->isBoundarySimplex();
38 for (
auto& pParent : simplexChild.
parents())
40 temp=pParent.second->isRegionBoundarySimplex();
52 Eigen::Matrix<double,dim,1>
temp(Eigen::Matrix<double,dim,1>::Zero());
55 if(
parent.second->isBoundarySimplex())
60 const double tempNorm(
temp.norm());
61 return (tempNorm>FLT_EPSILON)? (
temp/tempNorm).
eval() : Eigen::Matrix<double,dim,1>::Zero();
68 Eigen::Matrix<double,dim,1>
temp(Eigen::Matrix<double,dim,1>::Zero());
73 const double tempNorm(
temp.norm());
74 return (tempNorm>FLT_EPSILON)? (
temp/tempNorm).
eval() : Eigen::Matrix<double,dim,1>::Zero();
81 template<
short int dim>
87 return simplexChild.
parents().size()==1;
94 if(simplexChild.
parents().size()==2)
97 if(simplexChild.
parents().begin()->second->region->regionID != simplexChild.
parents().rbegin()->second->region->regionID)
109 Eigen::Matrix<double,dim,1>
temp(Eigen::Matrix<double,dim,1>::Zero());
112 const size_t faceID=simplexChild.
parents().begin()->second->childOrder(simplexChild.
xID);
113 temp=simplexChild.
parents().begin()->second->nda.col(faceID).normalized();
122 Eigen::Matrix<double,dim,1>
temp(Eigen::Matrix<double,dim,1>::Zero());
125 if( (
parent.second->isBoundarySimplex() ||
parent.second->isRegionBoundarySimplex())
126 &&
parent.second->region->regionID==rID)
128 const size_t faceID=
parent.second->childOrder(simplexChild.
xID);
129 temp+=
parent.second->nda.col(faceID).normalized();
132 const double tempNorm(
temp.norm());
133 return (tempNorm>FLT_EPSILON)? (
temp/tempNorm).
eval() : Eigen::Matrix<double,dim,1>::Zero();
140 template<
short int dim>
149 for (
int n=0;n<simplex.nFaces;++n)
151 temp=simplex.child(n).isBoundarySimplex();
165 for (
int n=0;n<simplex.nFaces;++n)
167 temp=simplex.child(n).isRegionBoundarySimplex();
ParentContainerType parents() const
bool isBoundarySimplex() const
auto eval(const std::shared_ptr< T > &t)
static bool isBoundarySimplex(const Simplex< dim, dim > &simplex)
static bool isRegionBoundarySimplex(const Simplex< dim, dim > &simplex)
static Eigen::Matrix< double, dim, 1 > outNormal(const Simplex< dim, dim-1 > &simplexChild)
static Eigen::Matrix< double, dim, 1 > outNormal(const Simplex< dim, dim-1 > &simplexChild, const size_t &rID)
static bool isBoundarySimplex(const SimplexChild< dim, dim-1 > &simplexChild)
static bool isRegionBoundarySimplex(const SimplexChild< dim, dim-1 > &simplexChild)
static Eigen::Matrix< double, dim, 1 > outNormal(const Simplex< dim, dim-dmo > &simplexChild)
static bool isBoundarySimplex(const SimplexChild< dim, dim-dmo > &simplexChild)
static Eigen::Matrix< double, dim, 1 > outNormal(const Simplex< dim, dim-dmo > &simplexChild, const size_t &rID)
static bool isRegionBoundarySimplex(const SimplexChild< dim, dim-dmo > &simplexChild)