8#ifndef model_CircularCrackGenerator_cpp_
9#define model_CircularCrackGenerator_cpp_
21 if(spec.radii.size()!=spec.nodesNumbers.size())
23 throw std::runtime_error(
"radii.size()="+std::to_string(spec.radii.size())+
" NOT EQUAL TO nodesNumbers.size()="+std::to_string(spec.nodesNumbers.size()));
25 if(spec.radii.size()!=spec.meshSizes.size())
27 throw std::runtime_error(
"radii.size()="+std::to_string(spec.radii.size())+
" NOT EQUAL TO meshSizes.size()="+std::to_string(spec.meshSizes.size()));
29 if(
int(spec.radii.size())!=spec.centers.rows())
31 throw std::runtime_error(
"radii.size()="+std::to_string(spec.radii.size())+
" NOT EQUAL TO centers.rows()="+std::to_string(spec.centers.rows()));
33 if(
int(spec.radii.size())!=spec.normals.rows())
35 throw std::runtime_error(
"radii.size()="+std::to_string(spec.radii.size())+
" NOT EQUAL TO normals.rows()="+std::to_string(spec.normals.rows()));
39 for(
size_t k=0;
k<spec.radii.size();++
k)
43 const bool success=generateSingle(mg,spec.radii[
k],spec.nodesNumbers[
k],spec.meshSizes[
k],spec.centers.row(
k),spec.normals.row(
k));
47 std::cout<<
"generated CircularCrack"<<std::endl;
50 catch(
const std::exception&
e)
65 throw std::runtime_error(
"ShearLoopGenerator::generateSingle:: center is outside mesh.");
68 const int grainID(found.second->region->regionID);
69 const auto& grain(mg.
ddBase.
poly.grain(grainID));
71 Plane<3> crackPlane(center,normal);
72 const VectorDimD localX1(crackPlane.L2G.col(0));
74 std::vector<VectorDimD> crackNodePos;
75 for(
int k=0;
k< nNodes;++
k)
77 crackNodePos.push_back(center+Eigen::AngleAxisd(
k*2.0*std::numbers::pi/nNodes,normal)*localX1*radius);
86 std::cout<<
"Skipping CircularCrack of (negative) radius "<<radius<<std::endl;
CircularCrackGenerator(const CircularCrackIndividualSpecification &, MicrostructureGenerator &mg)
DefectiveCrystalBase< 3 > & ddBase
std::pair< bool, const Simplex< _dim, _dim > * > search(const Eigen::Matrix< double, dim, 1 > &P) const
static std::string defaultColor
static std::string magentaBoldColor
const Polycrystal< dim > & poly
const SimplicialMesh< dim > & mesh
enum insertvertexresult success