Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
DislocationNetwork.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// valgrind --leak-check=full --show-leak-kinds=all ./DDomp
9
10#ifndef model_DISLOCATIONNETWORK_H_
11#define model_DISLOCATIONNETWORK_H_
12
13#ifdef _MODEL_MPI_
14#define _MODEL_DD_MPI_
15#endif
16
17// template header cpp
18// https://www.codeproject.com/Articles/48575/How-to-Define-a-Template-Class-in-a-h-File-and-Imp
19
20#ifdef _OPENMP
21#include <omp.h>
22#endif
23
24#include <vector>
25#include <functional>
26#include <chrono>
27#include <map>
28#include <memory>
29#include <numbers>
30
31#include <Eigen/Dense>
32
33#include <TerminalColors.h>
36#include <LoopNetwork.h>
37//#include <DislocationNetworkComponent.h>
38#include <DislocationLoop.h>
39#include <DislocationLoopNode.h>
40#include <DislocationLoopLink.h>
41#include <DislocationNode.h>
42#include <DislocationSegment.h>
43#include <Hermite.h>
44
48#include <DDtimeStepper.h>
50#include <SimplicialMesh.h>
51#include <Polycrystal.h>
52#include <GlidePlaneModule.h>
53
58
62#include <CrossSlipModels.h>
66
67#ifndef NDEBUG
68#define VerboseDislocationNetwork(N,x) if(verboseDislocationNetwork>=N){std::cout<<x;}
69#else
70#define VerboseDislocationNetwork(N,x)
71#endif
72
73namespace model
74{
75 template <int dim>
77 /* */,public LoopNetwork<DislocationNetwork<dim> >
78 {
79
80 public:
81
82
100
101
102 constexpr static int NdofXnode=NetworkNodeType::NdofXnode;
105 // During a time step, loop positions are provisional until reconciliation.
106 bool trialNodeMotion=false;
107 void moveNodes(const double & dt_in);
108 void storeSingleGlideStepDiscreteEvents(const long int& runID);
109 void executeSingleGlideStepDiscreteEvents(const long int& runID);
110 // Optional checkpoint is for fault-injection regression tests. It runs
111 // inside the rollback-protected commit after each topology operation.
112 void updateBoundaryNodes(const std::function<void()>& checkpoint={});
113 bool contract(std::shared_ptr<NetworkNodeType> nA,std::shared_ptr<NetworkNodeType> nB);
114
115 std::shared_ptr<DislocationGlideSolverBase<dim>> glideSolver;
116 std::shared_ptr<DislocationClimbSolverBase<dim>> climbSolver;
117
118 private:
119
120 static std::set<int> getSubCyclingSet(const std::vector<int> &inpVector);
121 std::shared_ptr<InclusionMicrostructure<dim>> _inclusions;
122
123 public:
124
128 const std::shared_ptr<BaseCrossSlipModel<dim>> crossSlipModel;
132 std::shared_ptr<StochasticForceGenerator> stochasticForceGenerator;
145 std::set<const LoopNodeType*> danglingBoundaryLoopNodes;
148 const Eigen::Matrix<double,Eigen::Dynamic,dim> nodalVelocityConstraints;
149 const std::set<int> subcyclingBins;
150
152
154
155 void initializeConfiguration(const DefectiveCrystalConfigIO<dim>& configIO,const std::ofstream& f_file,const std::ofstream& F_labels) override;
156 void solve() override;
157 void reSolve() override;
158 double getDt() const override;
159 void output(DefectiveCrystalConfigIO<dim>& configIO,DefectiveCrystalAuxIO<dim>& auxIO,std::ofstream& f_file,std::ofstream& F_labels) const override;
160 void updateConfiguration() override;
163 VectorDim displacement(const VectorDim&,const NodeType* const,const ElementType* const,const SimplexDim* const) const override;
164 MatrixDim stress(const VectorDim&,const NodeType* const,const ElementType* const ele,const SimplexDim* const guess) const override;
165 MatrixDim averageStress() const override;
166 VectorDim inelasticDisplacementRate(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
167 VectorMSize mobileConcentration(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
168 VectorISize immobileClusters(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
169
172
174 std::map<std::pair<int,int>,double> slipSystemAveragePlasticDistortion() const;
177 std::tuple<double,double,double,double> networkLength() const;
178 std::vector<std::tuple<double,double,double,double>> networkLengthPerSlipSystem() const;
179 bool isClimbStep() const;
180 const std::shared_ptr<InclusionMicrostructure<dim>>& inclusions() const;
181
182 };
183
184}
185#endif
TraitsType::VectorDim VectorDim
DislocationNetworkRemesh< dim > networkRemesher
TraitsType::LoopType LoopType
std::vector< std::tuple< double, double, double, double > > networkLengthPerSlipSystem() const
void updateBoundaryNodes(const std::function< void()> &checkpoint={})
const std::set< int > subcyclingBins
void executeSingleGlideStepDiscreteEvents(const long int &runID)
MicrostructureBase< dim >::SimplexDim SimplexDim
const int verboseDislocationNode
TraitsType::LoopNodeType LoopNodeType
TypeTraits< DislocationNetwork< dim > > TraitsType
const std::shared_ptr< InclusionMicrostructure< dim > > & inclusions() const
MicrostructureBase< dim >::VectorMSize VectorMSize
VectorDim displacement(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
TraitsType::LoopLinkType LoopLinkType
TraitsType::NetworkNodeType NetworkNodeType
DislocationNetwork(MicrostructureContainerType &mc)
const Eigen::Matrix< double, Eigen::Dynamic, dim > nodalVelocityConstraints
const bool outputDislocationDensityPerSlipSystem
DislocationJunctionFormation< dim > junctionsMaker
std::map< std::pair< int, int >, double > slipSystemAveragePlasticDistortion() const
const bool use_velocityFilter
const double velocityReductionFactor
MicrostructureBase< dim >::NodeType NodeType
MicrostructureBase< dim >::VectorISize VectorISize
std::tuple< double, double, double, double > networkLength() const
static int verboseDislocationNetwork
static constexpr int NdofXnode
std::shared_ptr< DislocationGlideSolverBase< dim > > glideSolver
DefectiveCrystalBase< dim > & ddBase
MatrixDim averagePlasticDistortion() const override
TraitsType::FlowType FlowType
void output(DefectiveCrystalConfigIO< dim > &configIO, DefectiveCrystalAuxIO< dim > &auxIO, std::ofstream &f_file, std::ofstream &F_labels) const override
std::shared_ptr< StochasticForceGenerator > stochasticForceGenerator
bool contract(std::shared_ptr< NetworkNodeType > nA, std::shared_ptr< NetworkNodeType > nB)
void setConfiguration(const DefectiveCrystalConfigIO< dim > &)
MatrixDim stress(const VectorDim &, const NodeType *const, const ElementType *const ele, const SimplexDim *const guess) const override
MatrixDim averagePlasticStrain() const
TraitsType::NetworkLinkType NetworkLinkType
VectorMSize mobileConcentration(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
TraitsType::MatrixDim MatrixDim
MatrixDim averagePlasticStrainRate() const
DDtimeStepper< dim > timeStepper
VectorISize immobileClusters(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
void moveNodes(const double &dt_in)
VectorDim inelasticDisplacementRate(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
const bool computeElasticEnergyPerLength
MicrostructureContainer< dim > MicrostructureContainerType
TraitsType::VectorLowerDim VectorLowerDim
void storeSingleGlideStepDiscreteEvents(const long int &runID)
TraitsType::LoopNetworkType LoopNetworkType
const bool outputPlasticDistortionPerSlipSystem
DislocationNodeContraction< dim > nodeContractor
MatrixDim averagePlasticDistortionRate() const override
void addConfiguration(const DefectiveCrystalConfigIO< dim > &)
std::set< const LoopNodeType * > danglingBoundaryLoopNodes
DislocationCrossSlip< dim > crossSlipMaker
std::shared_ptr< DislocationClimbSolverBase< dim > > climbSolver
double getDt() const override
MicrostructureBase< dim >::ElementType ElementType
MatrixDim averageStress() const override
void initializeConfiguration(const DefectiveCrystalConfigIO< dim > &configIO, const std::ofstream &f_file, const std::ofstream &F_labels) override
const std::shared_ptr< BaseCrossSlipModel< dim > > crossSlipModel
Class template that handles the nodal remesh of the DislocationNetwork.
Eigen::Matrix< double, dim-1, 1 > VectorLowerDim
Eigen::Matrix< double, mSize, 1 > VectorMSize
ElementType::NodeType NodeType
MicrostructureBase(const std::string &tag_in, MicrostructureContainer< dim > &m_in)
DefectiveCrystalBase< dim >::ElementType ElementType
Eigen::Matrix< double, iSize, 1 > VectorISize
Simplex< dim, dim > SimplexDim