89 ,
voigtTraits((typename
SymmetricVoigtTraits<3>::VoigtSizeMatrixType()<<0,0,1,1,2,2,0,1,1,2,0,2).finished())
107 if(!
mesh.simplices().size())
109 throw std::runtime_error(
"Mesh is empty");
112 for(
const auto& region :
mesh.regions())
114 for(const auto& face : region.second->faces())
116 if(face.second->isExternal() && face.second->periodicFacePair.second)
118 const Eigen::Matrix<double,Eigen::Dynamic,1> pd(periodicLatticeReciprocalBasis.transpose()*face.second->periodicFacePair.first);
119 const Eigen::Matrix<double,Eigen::Dynamic,1> pn(pd.array().round());
120 if((pd-pn).norm()>FLT_EPSILON*pd.norm())
122 std::cout<<
"region="<<region.second->regionID<<std::endl;
123 std::cout<<
"face="<<face.second->sID<<std::endl;
124 std::cout<<
"pd="<<pd.transpose()<<std::endl;
125 std::cout<<
"pn="<<pn.transpose()<<std::endl;
126 throw std::runtime_error(
"Face shift must be an intiger combination of the periodicity vectors");
132 std::cout<<
"periodicLatticeBasis="<<periodicLatticeBasis<<std::endl;
133 std::cout<<
"periodicLatticeReciprocalBasis="<<periodicLatticeReciprocalBasis<<std::endl;
134 std::cout<<
"periodicShifts("<<periodicShifts.size()<<
")="<<std::endl;
135 for(
const auto& shift : periodicShifts)
137 std::cout<<shift.transpose()<<std::endl;