Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
ClusterDynamicsParameters.h
Go to the documentation of this file.
1/* This file is part of GreatWhite, a library for integrating
2 * MOOSE and MoDeLib.
3 *
4 * (c) 2018 Multiscale Materials Solutions, LLC
5 * ALL RIGTHS REVERVED
6 * Prepared by 2018 Multiscale Materials Solutions
7 * under contract N. 126180
8 * with the NAVAL NUCLEAR LABORATORY
9 *
10 * See COPYRIGHT for full restriction
11*/
12
13
14#ifndef model_ClusterDynamicsParameters_H_
15#define model_ClusterDynamicsParameters_H_
16
17#include <TerminalColors.h>
18//#include <DislocatedMaterialBase.h>
19#include <Polycrystal.h>
20
21//#include <TrialBase.h>
22//#include <EvalFunction.h>
23//#include <EvalExpression.h>
24//#include <DislocationStress.h>
25
26#ifndef MODELIB_CD_MSIZE
27#define MODELIB_CD_MSIZE 4
28#endif
29#ifndef MODELIB_CD_ISIZE
30#define MODELIB_CD_ISIZE 8
31#endif
32
33namespace model
34{
35 template<int dim> struct DefectiveCrystalBase;
36
37template<int dim>
39{
40 // Numbers of mobile and immobile cluster-dynamics species. They are compile-time constants,
41 // set by the CMake options MODELIB_CD_MSIZE and MODELIB_CD_ISIZE, and must match the material file.
42 static constexpr int mSize=MODELIB_CD_MSIZE; // e.g. Cv, Ci, C2i, C3i
43 static constexpr int iSize=MODELIB_CD_ISIZE; // e.g. Nc, Na1, Na2, Na3, cv, ca1, ca2, ca3
44
45 typedef Eigen::Matrix<double,dim,1> VectorDim;
46 typedef Eigen::Matrix<double,dim,dim> MatrixDim;
48
49 // Materials parameters
50 const double kB;
51 const double T; // Studied temperature in K
52 const double omega; // Atomic volume
53 const double b; // Burgers vector
54 const double G0; // dpa/s, Dose rate
55
56 // Mobile Species
57 const Eigen::Array<double,1,mSize> msVector;
58 const Eigen::Array<double,1,mSize> msRelRelaxVol;
59 const Eigen::Array<double,1,mSize> msEf;
60 const Eigen::Matrix<double,mSize,dim*(dim+1)/2> msEm; // for each species (row) em11 em12 em13 em22 em23 em33
61 const Eigen::Matrix<double,mSize,dim*(dim+1)/2> msD0; // diffusion pre-exponential coeff. for each species (row) D011 D012 D013 D022 D023 D033
62 const std::map<size_t,std::vector<Eigen::Matrix<double,dim,dim>>> D; // map<grain_ID, vector of diffusion coeff for each species>
63 const std::map<size_t,std::vector<Eigen::Matrix<double,dim,dim>>> invD;
64 const std::map<size_t,Eigen::Array<double,mSize,1>> detD;
65 const Eigen::Array<double,1,mSize> Eb;
66
67 // Irradiation Production
68 const Eigen::Matrix<double,1,mSize> msCascadeFractions;
69 const double msSurvivingEfficiency; // Surviving effciency
70 const Eigen::Matrix<double,mSize,1> G; // dpa/s, Effective dose rate
71
72 // First-order reaction
73 const Eigen::Array<double,1,mSize> otherSinks;
74 const Eigen::Array<double,1,iSize/2> dislocationSinks;
75 const Eigen::Array<double,1,iSize> initLoopSinks;
76 const std::map<std::pair<int,int>,double> reactionMap;
77 const Eigen::Matrix<double,mSize,mSize> R1;
78 const Eigen::Matrix<double,mSize,mSize> R1cd;
79 // Second-order reaction
80 const std::vector<Eigen::Matrix<double,mSize,mSize>> R2;
81
82 // Bias factors
83 const Eigen::Array<double,2,mSize> discreteDislocationBias;
84
85 // Immobile Species
86 const Eigen::Array<double,1,iSize/2> immobileSpeciesVector;
87 const Eigen::Array<double,1,iSize/2> immobileSpeciesRelRelaxVol;
88 const Eigen::Matrix<double,dim,iSize/2> immobileSpeciesBurgers;
89 const Eigen::Array<double,1,iSize/2> immobileSpeciesBurgersMagnitude;
90 const Eigen::Array<double,1,iSize/2> immobileBias;
91 const double a_bp; // bi-pyramid sink strength coefficient
92 const double delVPyramid;
93 const double w0;
94 const double n_s;
95 const Eigen::Array<double,1,iSize/2> nmin; // Critical size for <c> pyramid -> loop
96 const Eigen::Array<double,1,iSize/2> nmax;
97 const Eigen::Array<double,1,iSize/2> n_min; // minimal loop sizes
98
99 // Irradiation Production
100 // const double evc; // Vacancy cluster generation efficiency
101 // const double Nvmax; // Satuatrion number density for vacancy loops in m^-3
102 // const Eigen::Array<double,1,iSize/2> nmin; // Critical size for <c> pyramid -> loop
103 // const Eigen::Array<double,1,iSize/2> nmax;
104 // const Eigen::Array<double,1,iSize/2> r_min; // minimal loop sizes
105
106 // Reaction map (types: parameters)
108// const int use0DsinkStrength;
109//
110// // Bias factors
111// const Eigen::Array<double,1,dim> Zv;
112// const Eigen::Array<double,1,dim> Zi;
113// const Eigen::Array<double,1,mSize> ZVec;
114// const Eigen::Array<double,1,dim> rc_il;
115
116
117 // Discrete Loop Generation
118 // const double discreteDistanceFactor;
119 // Discrete Loop Generation
120 // const double discreteDistanceFactor;
122 const double discretizationTime;
123 const double minimumLoopSize;
124
125 ClusterDynamicsParameters(const DefectiveCrystalBase<dim>& ddBase /*const Polycrystal<dim>& poly*/);
126 std::map<std::pair<int,int>,double> getMap(const Eigen::Array<double,mSize*(mSize+1)/2,3> matrix_in) const;
127 Eigen::Matrix<double,mSize,mSize> getR1() const;
128 std::vector<Eigen::Matrix<double,mSize,mSize>> getR2() const;
129 Eigen::Array<double,1,iSize/2> getImmobileSpeciesBurgersMagnitude(const GrainContainerType& grains) const;
130 std::map<size_t,std::vector<Eigen::Matrix<double,dim,dim>>> getD(const GrainContainerType& grains) const;
131 std::vector<Eigen::Matrix<double,dim,dim>> getDlocal() const;
132 std::map<size_t,std::vector<Eigen::Matrix<double,dim,dim>>> getInvD() const;
133 std::map<size_t,Eigen::Array<double,mSize,1>> getDetD() const;
134 Eigen::Array<double,1,iSize> getInitLoopSinks(const Eigen::Array<double,1,iSize> initloopSinks_SI, const double b_SI) const;
135 Eigen::Array<double,1,mSize> equilibriumMobileConcentration(const double& stressTrace) const;
136 Eigen::Array<double,1,mSize> dislocationMobileConcentration(const VectorDim& b,const VectorDim& t,const VectorDim& fPK,const MatrixDim& stress) const;
137 Eigen::Array<double,1,mSize> boundaryMobileConcentration(const double& stressTrace,const double& normalTraction) const;
138 Eigen::Array<double,1,iSize/2> sigmoid(const Eigen::Array<double,1,iSize/2>& n) const;
139 Eigen::Array<double,1,iSize/2> rpyr(const Eigen::Array<double,1,iSize/2>& n) const;
140 Eigen::Array<double,1,iSize/2> rloop(const Eigen::Array<double,1,iSize/2>& n) const;
141 Eigen::Array<double,1,iSize/2> sigmoidalVectorInterpolation(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N, const Eigen::Array<double,1,iSize/2>& lowValue, const Eigen::Array<double,1,iSize/2>& highValue) const;
142 Eigen::Array<double,1,iSize/2> clusterRadius(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N) const;
143 Eigen::Array<double,1,iSize/2> clusterDensity(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N) const;
144 Eigen::Array<double,dim,dim> sigmoidalMatrixInterpolation(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N, const Eigen::Array<double,dim,dim>& lowValue, const Eigen::Array<double,dim,dim>& highValue, const int& index) const;
145 Eigen::Array<double,1,iSize/2> sigmoidalPlotVectorInterpolation(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N, const Eigen::Array<double,1,iSize/2>& lowValue, const Eigen::Array<double,1,iSize/2>& highValue) const;
146 Eigen::Array<double,1,iSize/2> clusterPlotRadius(const Eigen::Array<double,1,iSize/2>& CI, const Eigen::Array<double,1,iSize/2>& N) const;
147};
148
149}
150#endif
std::map< size_t, std::shared_ptr< Grain< dim > > > GrainContainerType
Definition Polycrystal.h:47
final point of the source segment t
const Eigen::Array< double, 1, mSize > otherSinks
Eigen::Array< double, 1, mSize > dislocationMobileConcentration(const VectorDim &b, const VectorDim &t, const VectorDim &fPK, const MatrixDim &stress) const
const Eigen::Array< double, 1, iSize/2 > nmax
const Eigen::Array< double, 1, iSize/2 > n_min
ClusterDynamicsParameters(const DefectiveCrystalBase< dim > &ddBase)
Eigen::Array< double, 1, iSize/2 > clusterRadius(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N) const
const Eigen::Array< double, 2, mSize > discreteDislocationBias
Eigen::Array< double, 1, iSize/2 > getImmobileSpeciesBurgersMagnitude(const GrainContainerType &grains) const
Eigen::Array< double, 1, mSize > equilibriumMobileConcentration(const double &stressTrace) const
const Eigen::Array< double, 1, iSize/2 > nmin
const std::vector< Eigen::Matrix< double, mSize, mSize > > R2
const Eigen::Array< double, 1, mSize > msRelRelaxVol
const std::map< std::pair< int, int >, double > reactionMap
const Eigen::Matrix< double, mSize, dim *(dim+1)/2 > msD0
Eigen::Matrix< double, dim, 1 > VectorDim
const Eigen::Matrix< double, mSize, 1 > G
const Eigen::Array< double, 1, iSize/2 > immobileSpeciesRelRelaxVol
Eigen::Array< double, 1, iSize/2 > sigmoid(const Eigen::Array< double, 1, iSize/2 > &n) const
std::map< size_t, std::vector< Eigen::Matrix< double, dim, dim > > > getInvD() const
std::map< std::pair< int, int >, double > getMap(const Eigen::Array< double, mSize *(mSize+1)/2, 3 > matrix_in) const
const Eigen::Matrix< double, mSize, mSize > R1
const std::map< size_t, std::vector< Eigen::Matrix< double, dim, dim > > > D
Eigen::Matrix< double, dim, dim > MatrixDim
const Eigen::Array< double, 1, mSize > Eb
const Eigen::Matrix< double, dim, iSize/2 > immobileSpeciesBurgers
Eigen::Array< double, 1, iSize > getInitLoopSinks(const Eigen::Array< double, 1, iSize > initloopSinks_SI, const double b_SI) const
Eigen::Array< double, 1, iSize/2 > rpyr(const Eigen::Array< double, 1, iSize/2 > &n) const
Polycrystal< dim >::GrainContainerType GrainContainerType
Eigen::Array< double, 1, iSize/2 > sigmoidalPlotVectorInterpolation(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N, const Eigen::Array< double, 1, iSize/2 > &lowValue, const Eigen::Array< double, 1, iSize/2 > &highValue) const
const Eigen::Array< double, 1, iSize/2 > dislocationSinks
Eigen::Matrix< double, mSize, mSize > getR1() const
const Eigen::Array< double, 1, mSize > msEf
const Eigen::Matrix< double, mSize, dim *(dim+1)/2 > msEm
Eigen::Array< double, 1, mSize > boundaryMobileConcentration(const double &stressTrace, const double &normalTraction) const
std::map< size_t, Eigen::Array< double, mSize, 1 > > getDetD() const
const Eigen::Matrix< double, mSize, mSize > R1cd
const std::map< size_t, std::vector< Eigen::Matrix< double, dim, dim > > > invD
Eigen::Array< double, 1, iSize/2 > clusterDensity(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N) const
Eigen::Array< double, dim, dim > sigmoidalMatrixInterpolation(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N, const Eigen::Array< double, dim, dim > &lowValue, const Eigen::Array< double, dim, dim > &highValue, const int &index) const
const std::map< size_t, Eigen::Array< double, mSize, 1 > > detD
std::vector< Eigen::Matrix< double, dim, dim > > getDlocal() const
const Eigen::Array< double, 1, iSize/2 > immobileSpeciesVector
Eigen::Array< double, 1, iSize/2 > rloop(const Eigen::Array< double, 1, iSize/2 > &n) const
const Eigen::Array< double, 1, mSize > msVector
const Eigen::Array< double, 1, iSize/2 > immobileBias
std::vector< Eigen::Matrix< double, mSize, mSize > > getR2() const
Eigen::Array< double, 1, iSize/2 > clusterPlotRadius(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N) const
const Eigen::Matrix< double, 1, mSize > msCascadeFractions
std::map< size_t, std::vector< Eigen::Matrix< double, dim, dim > > > getD(const GrainContainerType &grains) const
Eigen::Array< double, 1, iSize/2 > sigmoidalVectorInterpolation(const Eigen::Array< double, 1, iSize/2 > &CI, const Eigen::Array< double, 1, iSize/2 > &N, const Eigen::Array< double, 1, iSize/2 > &lowValue, const Eigen::Array< double, 1, iSize/2 > &highValue) const
const Eigen::Array< double, 1, iSize > initLoopSinks
const Eigen::Array< double, 1, iSize/2 > immobileSpeciesBurgersMagnitude
int index