44 assert(std::fabs(plane.unitNormal.dot(d))<FLT_EPSILON);
45 assert(plane.contains(P0));
47 const double maxSize=std::max(
mesh.xMax(0)-
mesh.xMin(0),std::max(
mesh.xMax(1)-
mesh.xMin(1),
mesh.xMax(2)-
mesh.xMin(2)));
51 const VectorDim
A(P0+3.0*maxSize*d);
52 const VectorDim
B(P0-3.0*maxSize*d);
57 std::vector<VectorDim> nodePos;
59 for(
const auto& pair : plane.meshIntersections)
66 if(ssi.
dMin>FLT_EPSILON)
73 nodePos.push_back((ssi.
x0+ssi.
x1)*0.5);
76 else if(nIntersections==1)
78 if(ssi.
dMin>FLT_EPSILON)
80 if((pair->P0-nodePos.back()).norm()>FLT_EPSILON)
82 nodePos.push_back(pair->P0);
87 const VectorDim X((ssi.
x0+ssi.
x1)*0.5);
88 if((X-nodePos.back()).norm()>FLT_EPSILON)
91 nodePos.push_back(pair->P0);
92 if((X-pair->P0).norm()>FLT_EPSILON)
107 std::cout<<
"nodePos.size="<<nodePos.size()<<std::endl;
108 std::cout<<
"plane.meshIntersections are:"<<std::endl;
109 std::cout<<std::setprecision(15)<<std::scientific<<plane.meshIntersections<<std::endl;
110 std::cout<<
"P0="<<std::setprecision(15)<<std::scientific<<P0.transpose()<<std::endl;
111 std::cout<<
"d="<<std::setprecision(15)<<std::scientific<<d.transpose()<<std::endl;
112 assert(
false &&
"LOOP DOES NOT HAVE ENOUGH POINTS");
123 typedef typename DislocationNetworkType::NodeType
NodeType;
124 const std::pair<LatticeVector<dim>,
int> rp=DN.poly.randomLatticePointInMesh();
125 const int& grainID=rp.second;
128 std::mt19937 generator(std::chrono::system_clock::now().time_since_epoch().
count());
129 std::uniform_int_distribution<> distribution(0,DN.poly.grain(grainID).slipSystems().size()-1);
130 const int rSS=distribution(generator);
131 const SlipSystem& slipSystem=DN.poly.grain(grainID).slipSystems()[rSS];
133 const VectorDim n=slipSystem.
n.
cartesian().normalized();
135 std::uniform_real_distribution<> dis(0.0, 2.0*std::numbers::pi);
136 const double theta=dis(generator);
137 const VectorDim d=Eigen::AngleAxisd(theta,n)*
b.normalized();
140 std::vector<std::shared_ptr<NodeType>> loopNodes;
141 for (
const auto& pos : nodePos)
143 loopNodes.emplace_back(
new NodeType(&DN,pos,VectorDim::Zero(),1.0));
145 DN.insertLoop(loopNodes,
b,n,P0,grainID);