Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
ClusterDynamics.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_ClusterDynamics_H_
9#define model_ClusterDynamics_H_
10
13#include <ClusterDynamicsFEM.h>
14//#include <SimpleNullSpaceSolver.h>
16//#include <SecondOrderReaction.h>
17
18namespace model
19{
20
21 template<int dim>
23 {
24
25// typedef Eigen::SparseMatrix<double> SparseMatrixType;
26// #ifdef _MODEL_PARDISO_SOLVER_
27// typedef Eigen::PardisoLLT<SparseMatrixType> DirectSPDSolverType;
28// typedef Eigen::PardisoLU<SparseMatrixType> DirectSquareSolverType;
29// #else
30// typedef Eigen::SimplicialLLT<SparseMatrixType> DirectSPDSolverType;
31// typedef Eigen::SparseLU<SparseMatrixType> DirectSquareSolverType;
32// #endif
33// typedef Eigen::ConjugateGradient<SparseMatrixType> IterativeSPDSolverType;
34// typedef Eigen::BiCGSTAB<SparseMatrixType> IterativeSquareSolverType;
35
39
42
48
49
50// typedef typename ClusterDynamicsFEM<dim>::FiniteElementType FiniteElementType;
51// static constexpr int mSize=ClusterDynamicsParameters<dim>::mSize;
52// static constexpr int dVorder=4;
53// typedef IntegrationDomain<FiniteElementType,0,dVorder,GaussLegendre> VolumeIntegrationDomainType;
54
55// typedef typename ClusterDynamicsFEM<dim>::MobileTrialType MobileTrialType;
56// typedef typename ClusterDynamicsFEM<dim>::MobileGradType MobileGradType;
57// typedef typename ClusterDynamicsFEM<dim>::MobileFluxType MobileFluxType;
58// typedef BilinearForm<MobileGradType,TrialProd<Constant<double,1,1>,MobileFluxType>> MobileBilinearFormType;
59// typedef BilinearWeakForm<MobileBilinearFormType,VolumeIntegrationDomainType> MobileBilinearWeakFormType;
60//
61// typedef TrialFunction<'d',mSize,FiniteElementType> MobileIncrementTrialType;
62// typedef TrialGrad<MobileIncrementTrialType> MobileIncrementGradType;
63// typedef TrialProd<FluxMatrix<dim>,MobileIncrementGradType> MobileIncrementFluxType;
64// typedef BilinearForm<MobileIncrementGradType,TrialProd<Constant<double,1,1>,MobileIncrementFluxType>> MobileIncrementBilinearFormType;
65// typedef BilinearWeakForm<MobileIncrementBilinearFormType,VolumeIntegrationDomainType> MobileIncrementBilinearWeakFormType;
66
67// typedef typename ClusterDynamicsFEM<dim>::ImmobileTrialType ImmobileTrialType;
68
69
71 typedef std::map<size_t,const std::unique_ptr<UniformControllerType>> UniformControllerContainerType; // one per each grain
72
74
76
78 const std::unique_ptr<ClusterDynamicsFEM<dim>> clusterDynamicsFEM;
80
81
82// const int nodeListInternalExternal;
83// MobileIncrementTrialType mobileClustersIncrement;
84// VolumeIntegrationDomainType dV;
85// MobileBilinearWeakFormType mBWF;
86// MobileIncrementBilinearWeakFormType dmBWF;
87//
89// FixedDirichletSolver mSolver;
90//
91// const Eigen::VectorXd cascadeGlobalProduction;
92
93 void initializeConfiguration(const DefectiveCrystalConfigIO<dim>& configIO,const std::ofstream& f_file,const std::ofstream& F_labels) override;
94 void solve() override;
95 void reSolve() override;
96 double getDt() const override;
97 void output(DefectiveCrystalConfigIO<dim>& configIO,DefectiveCrystalAuxIO<dim>& auxIO,std::ofstream& f_file,std::ofstream& F_labels) const override;
98 void updateConfiguration() override;
99 MatrixDim averagePlasticDistortion() const override ;
101 VectorDim displacement(const VectorDim&,const NodeType* const,const ElementType* const,const SimplexDim* const) const override;
102 MatrixDim stress(const VectorDim&,const NodeType* const,const ElementType* const,const SimplexDim* const) const override;
103 MatrixDim averageStress() const override;
104 VectorDim inelasticDisplacementRate(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
105 VectorMSize mobileConcentration(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
106 VectorISize immobileClusters(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
107
109
110
111 // std::set<const Simplex<dim,dim>*> vertexSetNeighbors(const std::set<const Simplex<dim,dim>*>& inSet, const std::set<const Simplex<dim,dim>*>& usedEle) const;
112 // std::pair<double,double> groupNi(const std::set<const Simplex<dim,dim>*>& inSet, const int &k) const;
113 // void initializeDiscreteClimbLoops();
114
115
117
118 };
119
120
121
122
123}
124#endif
125
void updateConfiguration() override
VectorDim displacement(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
const ClusterDynamicsParameters< dim > & cdp
static constexpr int iSize
double getDt() const override
UniformControllerContainerType uniformControllers
MicrostructureBase< dim >::ElementType ElementType
VectorMSize mobileConcentration(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MicrostructureBase< dim >::VectorISize VectorISize
static UniformControllerContainerType getUniformControllers(const DefectiveCrystalBase< dim > &ddBase, const ClusterDynamicsParameters< dim > &cdp)
MicrostructureBase< dim >::VectorMSize VectorMSize
MatrixDim averageStress() const override
const std::unique_ptr< ClusterDynamicsFEM< dim > > clusterDynamicsFEM
static constexpr int mSize
MicrostructureBase< dim >::MatrixDim MatrixDim
MatrixDim stress(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MatrixDim averagePlasticDistortionRate() const override
VectorDim inelasticDisplacementRate(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
void initializeConfiguration(const DefectiveCrystalConfigIO< dim > &configIO, const std::ofstream &f_file, const std::ofstream &F_labels) override
MicrostructureContainer< dim > MicrostructureContainerType
MatrixDim averagePlasticDistortion() const override
MicrostructureBase< dim >::SimplexDim SimplexDim
ClusterDynamics(MicrostructureContainerType &mc)
UniformController< mSize *dim > UniformControllerType
VectorISize immobileClusters(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MicrostructureBase< dim >::NodeType NodeType
void output(DefectiveCrystalConfigIO< dim > &configIO, DefectiveCrystalAuxIO< dim > &auxIO, std::ofstream &f_file, std::ofstream &F_labels) const override
MicrostructureBase< dim >::VectorDim VectorDim
std::map< size_t, const std::unique_ptr< UniformControllerType > > UniformControllerContainerType
Eigen::Matrix< double, mSize, 1 > VectorMSize
Eigen::Matrix< double, dim, dim > MatrixDim
ElementType::NodeType NodeType
MicrostructureBase(const std::string &tag_in, MicrostructureContainer< dim > &m_in)
Eigen::Matrix< double, dim, 1 > VectorDim
DefectiveCrystalBase< dim >::ElementType ElementType
Eigen::Matrix< double, iSize, 1 > VectorISize
Simplex< dim, dim > SimplexDim