8#ifndef model_SimplicialMesh_H_
9#define model_SimplicialMesh_H_
44 ,
public std::map<typename SimplexTraits<_dim,_dim>::SimplexIDType,
45 std::shared_ptr<Simplex<_dim,_dim>>>
46 ,
public std::map<std::pair<size_t,size_t>,MeshRegionBoundary<_dim>>
50 typedef Eigen::Matrix<double,_dim,1> VectorDim;
58 std::shared_ptr<const int> lifetime=std::make_shared<const int>(0);
60 Eigen::Matrix<double,_dim,Eigen::Dynamic> _periodicBasis = Eigen::Matrix<double,_dim,Eigen::Dynamic>(_dim,0);
62 std::shared_ptr<PolyhedralMesh<_dim>> _polyhedralMesh = std::make_shared<PolyhedralMesh<_dim>>();
63 void createMesh(
const std::set<int>&);
69 static constexpr int dim=_dim;
72 typedef std::map<typename SimplexTraits<dim,dim>::SimplexIDType,
84 SimplicialMesh(
const std::string& meshFileName,
const Eigen::Matrix<double,dim,dim>&
A,
const Eigen::Matrix<double,dim,1>& x0,
const std::set<int>&);
86 void readMesh(
const std::string& meshFileName,
const Eigen::Matrix<double,dim,dim>&
A,
const Eigen::Matrix<double,dim,1>& x0,
const std::set<int>&);
94 return _simplexFactories.template factory<order>();
98 return _simplexFactories.template factory<order>();
101 const auto&
regions()
const {
return _polyhedralMesh->template factory<_dim>(); }
104 std::shared_ptr<Polyhedron<_dim,_dim>>
getSharedRegion(
size_t id) {
return _polyhedralMesh->getRegion(
id); }
123 return _periodicSimplexPairs;
129 std::pair<bool,const Simplex<_dim,_dim>*>
search(
const Eigen::Matrix<double,dim,1>& P)
const;
131 std::pair<bool,const Simplex<_dim,_dim>*>
searchWithGuess(
const Eigen::Matrix<double,dim,1>& P,
134 std::pair<bool,const Simplex<_dim,_dim>*>
searchRegion(
const int& regionID,
135 const Eigen::Matrix<double,dim,1>& P)
const;
140 std::pair<bool,const Simplex<_dim,_dim>*>
searchWithGuess(
const bool& searchAllRegions,
141 const Eigen::Matrix<double,dim,1>& P,
145 const Eigen::Matrix<double,dim,1>& P,
150 const double& tol)
const;
152 const Eigen::Matrix<double,_dim,1>&
xMin()
const;
153 const double&
xMin(
const int&
k)
const;
154 const Eigen::Matrix<double,_dim,1>&
xMax()
const;
155 const double&
xMax(
const int&
k)
const;
156 const Eigen::Matrix<double,_dim,1>&
xCenter()
const;
const double & xMax(const int &k) const
Eigen::Matrix< double, dim, Eigen::Dynamic > PeriodicBasisType
const Eigen::Matrix< double, _dim, 1 > & xMax() const
std::pair< bool, const Simplex< _dim, _dim > * > searchRegion(const int ®ionID, const Eigen::Matrix< double, dim, 1 > &P) const
void identifyParallelFaces(const std::set< int > &)
std::pair< bool, const Simplex< _dim, _dim > * > isOnMeshBoundary(const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess, const double &tol) const
MeshRegionBoundary< dim > MeshRegionBoundaryType
std::pair< bool, const Simplex< _dim, _dim > * > searchWithGuess(const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess) const
IDreader< 1, dim+2, size_t > ElementReaderType
Polyhedron< dim, dim > MeshRegionType
const PolyhedralMesh< _dim > & polyhedralMesh() const
const Eigen::Matrix< double, _dim, 1 > & xMin() const
const PeriodicSimplexPairMap< dim > & periodicSimplexPairs() const
const SimplexMapType & simplices() const
const double & xMin(const int &k) const
const auto & simplexFactory() const
std::map< typename SimplexTraits< dim, dim >::SimplexIDType, std::shared_ptr< Simplex< dim, dim > > > SimplexMapType
const MeshRegionBoundaryType & regionBoundary(const int &i, const int &j) const
std::pair< size_t, size_t > MeshRegionIDType
SimplicialMesh(const std::string &meshFileName, const Eigen::Matrix< double, dim, dim > &A, const Eigen::Matrix< double, dim, 1 > &x0, const std::set< int > &)
std::pair< bool, const Simplex< _dim, _dim > * > isStrictlyInsideMesh(const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess, const double &tol) const
Eigen::Matrix< double, dim, Eigen::Dynamic > periodicBasis() const
std::shared_ptr< Polyhedron< _dim, _dim > > getSharedRegion(size_t id)
const MeshRegionBoundaryContainerType & regionBoundaries() const
const Eigen::Matrix< double, _dim, 1 > & xCenter() const
Polyhedron< _dim, _dim > * region(const size_t &id)
std::pair< bool, const Simplex< _dim, _dim > * > searchRegionWithGuess(const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess) const
void readMesh(const std::string &meshFileName, const Eigen::Matrix< double, dim, dim > &A, const Eigen::Matrix< double, dim, 1 > &x0, const std::set< int > &)
const auto & regions() const
MeshRegionBoundaryContainerType & regionBoundaries()
std::weak_ptr< const int > lifetimeToken() const
std::pair< bool, const Simplex< _dim, _dim > * > search(const Eigen::Matrix< double, dim, 1 > &P) const
std::pair< bool, const Simplex< _dim, _dim > * > searchWithGuess(const bool &searchAllRegions, const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess, std::set< const Simplex< dim, dim > * > &searchSet) const
const Polyhedron< _dim, _dim > * region(const size_t &id) const
void updateRegionBoundaries()
void insertSimplex(const typename SimplexTraits< dim, dim >::SimplexIDType &xIN, const int ®ionID)
void checkSearch(const bool &searchAllRegions, const Eigen::Matrix< double, dim, 1 > &P, const Simplex< dim, dim > *const guess, const std::pair< bool, const Simplex< dim, dim > * > &lastSearched) const
SimplexMapType & simplices()
std::map< MeshRegionIDType, MeshRegionBoundaryType > MeshRegionBoundaryContainerType
const double & volume() const
function infiniteDisplacement syms Ax Ay Az Bx By Bz qx qy qz u L x y z real A
std::map< const Simplex< dim, dim-1 > *, PeriodicSimplexPair< dim > > PeriodicSimplexPairMap
SimplexID< nVertices > SimplexIDType