8#ifndef model_PlanarLoopGenerator_cpp_
9#define model_PlanarLoopGenerator_cpp_
19#include <Eigen/Cholesky>
26#include <LatticeModule.h>
54 if(spec.loopPoints.rows()>2)
57 std::vector<VectorDimD> loopPoints;
58 for(
int i=0;
i<spec.loopPoints.rows();++
i)
60 loopPoints.push_back(spec.loopPoints.row(
i));
62 generateSingle(mg,spec.burgers,spec.normal,loopPoints);
70 if(loopPoints.size()>=3)
73 std::pair<bool,const Simplex<dim,dim>*> found(mg.
ddBase.
mesh.
search(loopPoints[0]));
76 std::cout<<
"Point "<<loopPoints[0].transpose()<<
" is outside mesh. EXITING."<<std::endl;
80 const int grainID(found.second->region->regionID);
82 const auto& grain(mg.
ddBase.
poly.grain(grainID));
84 const ReciprocalLatticeDirection<dim> r(grain->reciprocalLatticeDirection(n));
86 std::shared_ptr<PeriodicGlidePlane<3>> glidePlane(mg.
ddBase.
dislocationDynamics().periodicGlidePlaneFactory.get(glidePlaneKey));
88 for(
const auto& point : loopPoints)
90 if(!glidePlane->referencePlane->contains(point))
92 throw std::runtime_error(
"Plane does not contain point.");
bool insertJunctionLoop(const std::vector< VectorDimD > &loopNodePos, const std::shared_ptr< PeriodicGlidePlane< 3 > > &periodicPlane, const VectorDimD &b, const VectorDimD &unitNormal, const VectorDimD &P0, const size_t &grainID, const DislocationLoopIO< dim >::DislocationLoopType &loopType)
DefectiveCrystalBase< 3 > & ddBase
PlanarLoopGenerator(const PlanarLoopIndividualSpecification &spec, MicrostructureGenerator &mg)
std::pair< bool, const Simplex< _dim, _dim > * > search(const Eigen::Matrix< double, dim, 1 > &P) const
static std::string defaultColor
static std::string magentaBoldColor
LatticePlaneKey< dim > GlidePlaneKey
const Polycrystal< dim > & poly
const SimplicialMesh< dim > & mesh
DislocationDynamicsBase< dim > & dislocationDynamics() const