8#ifndef model_MicrostructureGenerator_H_
9#define model_MicrostructureGenerator_H_
11#ifdef _MODEL_PYBIND11_
13 #include <pybind11/embed.h>
14 #include <pybind11/eigen.h>
15 #include <pybind11/stl.h>
26#include <Eigen/Cholesky>
34#include <LatticeModule.h>
83 constexpr static int dim=3;
86 typedef Eigen::Matrix<double,dim,1> VectorDimD;
87 typedef Eigen::Matrix<int,dim,1> VectorDimI;
126 size_t insertLoop(
const VectorDimD&
b,
const VectorDimD& unitNormal,
const VectorDimD& P0,
const size_t& grainID,
const DislocationLoopType& loopType);
127 size_t insertLoopNode(
const size_t& loopID,
const VectorDimD& loopNodePos,
const size_t& networkNodeID,
const VectorDimD& loopNodeShift,
const std::pair<short int,short int>& periodicEdgeIDs);
128 std::vector<size_t>
insertLoopLinks(
const size_t& loopID,
const std::vector<size_t>& loopNodeIDs);
130 size_t insertInclusion(
const VectorDimD& pos,
const double& R,
const Eigen::Matrix<double,dim,dim>& eT,
const double& vrc,
const int&type);
131 size_t insertInclusion(
const VectorDimD& pos,
const Eigen::Matrix3d& axes,
const Eigen::Matrix3d& eT,
const double& vrc,
const int& type);
132 size_t insertInclusion(
const std::map<size_t,Eigen::Vector3d>& nodes,
const std::map<
size_t,std::vector<size_t>>& faceMap,
const Eigen::Matrix<double,dim,dim>& eT,
const double& vrc,
const int&type);
137 const VectorDimD& unitNormal,
138 const VectorDimD& P0,
139 const size_t& grainID,
141 bool insertCrackMesh(
const std::vector<VectorDimD>& nodes,
const std::vector<VectorDimD>& burgers,
const std::vector<VectorDimI>& triangles);
142 bool allPointsInGrain(
const std::vector<VectorDimD>& points,
const int& grainID);
void addFrankLoopsIndividual(const FrankLoopsIndividualSpecification &spec)
size_t insertNetworkNode(const VectorDimD &networkNodePos)
void addPrismaticLoopIndividual(const PrismaticLoopIndividualSpecification &spec)
void addSphericalInclusionIndividual(const SphericalInclusionIndividualSpecification &spec)
size_t insertLoopNode(const size_t &loopID, const VectorDimD &loopNodePos, const size_t &networkNodeID, const VectorDimD &loopNodeShift, const std::pair< short int, short int > &periodicEdgeIDs)
void addSphericalInclusionDensity(const SphericalInclusionDensitySpecification &spec)
void addPeriodicDipoleDensity(const PeriodicDipoleDensitySpecification &spec)
void addPlanarLoopIndividual(const PlanarLoopIndividualSpecification &spec)
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)
std::vector< size_t > insertLoopLinks(const size_t &loopID, const std::vector< size_t > &loopNodeIDs)
void addEllipsoidalInclusionIndividual(const EllipsoidalInclusionIndividualSpecification &spec)
std::map< VectorDimD, size_t, CompareVectorsByComponent< double, dim, float > > uniqueNetworkNodeMap
bool allPointsInMesh(const std::vector< VectorDimD > &points)
DefectiveCrystalAuxIO< 3 > auxIO
void addStackingFaultTetrahedraDensity(const StackingFaultTetrahedraDensitySpecification &spec)
DefectiveCrystalBase< 3 > & ddBase
void addCrackMeshIndividual(const CrackMeshIndividualSpecification &spec)
size_t insertLoop(const VectorDimD &b, const VectorDimD &unitNormal, const VectorDimD &P0, const size_t &grainID, const DislocationLoopType &loopType)
DefectiveCrystalConfigIO< 3 > configIO
void addCircularCrackIndividual(const CircularCrackIndividualSpecification &spec)
void addPrismaticLoopDensity(const PrismaticLoopDensitySpecification &spec)
bool insertCrackMesh(const std::vector< VectorDimD > &nodes, const std::vector< VectorDimD > &burgers, const std::vector< VectorDimI > &triangles)
void addStackingFaultTetrahedraIndividual(const StackingFaultTetrahedraIndividualSpecification &spec)
void addFrankLoopsDensity(const FrankLoopsDensitySpecification &spec)
void addEllipsoidalInclusionDensity(const EllipsoidalInclusionDensitySpecification &spec)
void addPolyhedronInclusionIndividual(const PolyhedronInclusionIndividualSpecification &spec)
const DefectiveCrystalAuxIO< 3 > & aux() const
const DefectiveCrystalConfigIO< 3 > & config() const
bool allPointsInGrain(const std::vector< VectorDimD > &points, const int &grainID)
MicrostructureGenerator(DefectiveCrystalBase< 3 > &ddBase_in)
void addPeriodicDipoleIndividual(const PeriodicDipoleIndividualSpecification &spec)
void writeConfigFiles(const size_t &fileID)
const DefectiveCrystalTraitsIO & traits() const
void addShearLoopDensity(const ShearLoopDensitySpecification &spec)
void addShearLoopIndividual(const ShearLoopIndividualSpecification &spec)
void readMicrostructureFile()
size_t insertInclusion(const VectorDimD &pos, const double &R, const Eigen::Matrix< double, dim, dim > &eT, const double &vrc, const int &type)
std::shared_ptr< PeriodicPlanePatch< 3 > > periodicPlanePatch() const