Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
MicrostructureGenerator.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_MicrostructureGenerator_H_
9#define model_MicrostructureGenerator_H_
10
11#ifdef _MODEL_PYBIND11_
12 #undef slots
13 #include <pybind11/embed.h>
14 #include <pybind11/eigen.h>
15 #include <pybind11/stl.h>
16 #define slots Q_SLOTS
17#endif
18
19#include <filesystem>
20#include <chrono>
21#include <random>
22#include <cmath>
23#include <list>
24#include <assert.h>
25#include <Eigen/LU>
26#include <Eigen/Cholesky>
27#include <limits>
28#include <memory>
29
30//#include <Simplex.h>
31#include <SimplicialMesh.h>
32#include <Polycrystal.h>
34#include <LatticeModule.h>
38
41#include <TextFileParser.h>
43#include <MeshBoundarySegment.h>
44//#include <ConfinedDislocationObject.h>
45#include <GlidePlaneModule.h>
46#include <MeshModule.h>
47#include <Plane.h>
48//#include <MicrostructureGeneratorBase.h>
49
68
69namespace model
70{
71
73{
74
75 std::shared_ptr<PeriodicPlanePatch<3>> periodicPlanePatch() const;
76
77
78
79};
80
82 {
83 constexpr static int dim=3;
84// typedef typename MicrostructureGeneratorBase::VectorDimD VectorDimD;
85// typedef typename MicrostructureGeneratorBase::DislocationLoopType DislocationLoopType;
86 typedef Eigen::Matrix<double,dim,1> VectorDimD;
87 typedef Eigen::Matrix<int,dim,1> VectorDimI;
88 typedef DislocationLoopIO<dim>::DislocationLoopType DislocationLoopType;
89
90 public:
91
95 const bool outputBinary;
96 const double minSize;
97 const double maxSize;
98 std::map<VectorDimD,size_t,CompareVectorsByComponent<double,dim,float>> uniqueNetworkNodeMap;
99 const DefectiveCrystalTraitsIO& traits() const;
100 const DefectiveCrystalConfigIO<3>& config() const;
101 const DefectiveCrystalAuxIO<3>& aux() const;
104
125
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);
129 size_t insertNetworkNode(const VectorDimD& networkNodePos);
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);
133 void writeConfigFiles(const size_t& fileID);
134 bool insertJunctionLoop(const std::vector<VectorDimD>& loopNodePos,
135 const std::shared_ptr<PeriodicGlidePlane<3>>& periodicPlane,
136 const VectorDimD& b,
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);
143 bool allPointsInMesh(const std::vector<VectorDimD>& points);
144
145 };
146}
147#endif
void addFrankLoopsIndividual(const FrankLoopsIndividualSpecification &spec)
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)
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)
bool allPointsInGrain(const std::vector< VectorDimD > &points, const int &grainID)
void addPeriodicDipoleIndividual(const PeriodicDipoleIndividualSpecification &spec)
void addShearLoopDensity(const ShearLoopDensitySpecification &spec)
void addShearLoopIndividual(const ShearLoopIndividualSpecification &spec)
size_t insertInclusion(const VectorDimD &pos, const double &R, const Eigen::Matrix< double, dim, dim > &eT, const double &vrc, const int &type)
b
Definition int_R.m:16
std::shared_ptr< PeriodicPlanePatch< 3 > > periodicPlanePatch() const