Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
DislocationQuadraturePoint.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//Implements non-uniform open quadrature rule
9
10#ifndef model_DislocationQuadraturePoint_H_
11#define model_DislocationQuadraturePoint_H_
12
13#include <Eigen/Dense>
14#include <SplineBase.h>
15#include <QuadratureDynamic.h>
16#include <QuadPowDynamic.h>
22#include <Polygon2D.h>
26
27//#include <DislocationSegment.h>
28
29namespace model
30{
31
32 template <int dim>
34
35
36 template<int dim>
38 {
39 static constexpr int corder=0;
42 static constexpr int Ndof= SplineBase<dim,corder>::Ndof;
43 typedef Eigen::Matrix<double,dim,1> VectorDim;
44 typedef Eigen::Matrix<double,dim,dim> MatrixDim;
45 typedef Eigen::Matrix<float,dim,dim> MatrixDimF;
46 typedef Eigen::Matrix<double,dim,Ndof> MatrixDimNdof;
47 typedef Eigen::Matrix<double,Ncoeff,Ncoeff> MatrixNcoeff;
48 typedef Eigen::Matrix<double,Ncoeff,dim> MatrixNcoeffDim;
52
53// typedef QuadratureDynamic<1,NonUniformOpen,3,5,7,9,11,13,15,17,19,21,23,25,27,29> QuadratureDynamicType; // this causes some line wiggles
54// typedef QuadPowDynamic<pOrder,NonUniformOpen,3,5,7,9,11,13,15,17,19,21,23,25,27,29> QuadPowDynamicType; // this causes some line wiggles
55
56 const size_t sourceID;
57 const size_t sinkID;
58 const int qID;
59 const double abscissa;
60 const double weight;
61 const Eigen::Matrix<double,1,Ncoeff> SF; // Spline shape-functions at this quadrature point
62 const VectorDim r; // position
63 const VectorDim ru; // parametric tangent dr/du with u in [0:1]
64 const double j; // jacobian dl/du
65 const VectorDim rl; // unit tangent dr/dl
66 const double dL; // line length corresponding to this quadrature point
67
77 std::pair<VectorDim,VectorDim> slipVectors;
78 Eigen::Matrix<double,1,ClusterDynamicsParameters<dim>::mSize> cCD;
79 Eigen::Matrix<double,1,ClusterDynamicsParameters<dim>::mSize> cDD;
80
81
83 const int& q,const int& qOrder,
84 const MatrixNcoeff& SFCH,
85 const MatrixNcoeffDim& qH);
86 DislocationQuadraturePoint(const size_t sourceID_in,
87 const size_t sinkID_in,
88 const int& q,const int& qOrder,
89 const MatrixNcoeff& SFCH,
90 const MatrixNcoeffDim& qH);
93 static VectorDim getGlideVelocity(const LinkType& parentSegment,
94 const VectorDim& r,
95 const VectorDim& fPK,
96 const MatrixDim& S,
97 const VectorDim& rl,
98 const double& dL,
99 const int& inclusionID
100 );
101
102
103 void updateForcesAndVelocities(const LinkType& parentSegment,const bool& isClimbStep);
104 MatrixDim forceToStress(const VectorDim& force,const VectorDim& unitTangent,const LinkType& parentSegment) const;
105
106 };
107
108 template<int dim>
109 class DislocationQuadraturePointContainer : public std::deque<DislocationQuadraturePoint<dim>>
110
111 {
112 static constexpr int corder=DislocationQuadraturePoint<dim>::corder;
113 static constexpr int Ncoeff= SplineBase<dim,corder>::Ncoeff;
114 static constexpr int Ndof= SplineBase<dim,corder>::Ndof;
115 typedef Eigen::Matrix<double,dim,1> VectorDim;
116 typedef Eigen::Matrix<double,Ndof,1> VectorNdof;
117 typedef Eigen::Matrix<double,Ndof,Ndof> MatrixNdof;
118 typedef Eigen::Matrix<double,dim,dim> MatrixDim;
119 typedef Eigen::Matrix<double,dim,Ndof> MatrixDimNdof;
120 typedef DislocationQuadraturePointContainer<dim> DislocationQuadraturePointContainerType;
121 typedef DislocationQuadraturePoint<dim> DislocationQuadraturePointType;
122 typedef std::deque<DislocationQuadraturePointType> BaseContainerType;
123 typedef Eigen::Matrix<double,Ncoeff,Ncoeff> MatrixNcoeff;
124 typedef Eigen::Matrix<double,Ncoeff,dim> MatrixNcoeffDim;
125 typedef typename DislocationQuadraturePointType::QuadratureDynamicType QuadratureDynamicType;
126 typedef typename DislocationQuadraturePointType::QuadPowDynamicType QuadPowDynamicType;
127 typedef DislocationSegment<dim> LinkType;
128
129 VectorNdof nodalVelocityLinearKernel(const int& k) const;
130 MatrixNdof nodalVelocityBilinearKernel(const int& k) const;
131 VectorDim pkKernel(const int& k) const;
132 MatrixDim stressKernel(const int& k) const;
133 VectorDim glideVelocityKernel(const int& k) const;
134 void updateKernel(const LinkType& parentSegment,const StraightDislocationSegment<dim>& ss,const double& L0,const VectorDim& c);
135// void updateForcesAndVelocitiesKernelShifted(const LinkType& parentSegment,const StraightDislocationSegment<dim>& ss,const double& L0,const VectorDim& c,const VectorDim& shift,const double& weight);
136// MatrixDim stressGradient(const LinkType& parentSegment,const StraightDislocationSegment<dim>& ss,const VectorDim& x,const VectorDim& shift) const;
137// double energyGradient(const LinkType& parentSegment,const StraightDislocationSegment<dim>& ss,const VectorDim& x,const VectorDim& rl,const VectorDim& shift) const;
138
139 public:
140
141 void update(const LinkType& parentSegment,const bool& isClimbStep);
142 void create(const LinkType& parentSegment,const double& quadPerLength,const bool& isClimbStep);
143 const DislocationQuadraturePointContainerType& quadraturePoints() const;
144 DislocationQuadraturePointContainerType& quadraturePoints();
145 const DislocationQuadraturePointType& quadraturePoint(const int& k) const;
146 VectorNdof nodalVelocityVector(const LinkType& parentSegment) const;
147 MatrixNdof nodalVelocityMatrix(const LinkType& parentSegment) const;
148 VectorDim glideVelocityIntegral() const;
149 VectorDim pkIntegral() const;
150 MatrixDim stressIntegral() const;
151
152 };
153
154}
155#endif
const DislocationQuadraturePointType & quadraturePoint(const int &k) const
VectorNdof nodalVelocityVector(const LinkType &parentSegment) const
void create(const LinkType &parentSegment, const double &quadPerLength, const bool &isClimbStep)
void update(const LinkType &parentSegment, const bool &isClimbStep)
MatrixNdof nodalVelocityMatrix(const LinkType &parentSegment) const
const DislocationQuadraturePointContainerType & quadraturePoints() const
the tangent vector S
the magnitude of the R vector q
c
Definition int_R.m:15
double DislocationSegment< dim >::quadPerLength
Eigen::Matrix< double, Ncoeff, dim > MatrixNcoeffDim
const Eigen::Matrix< double, 1, Ncoeff > SF
MatrixDim forceToStress(const VectorDim &force, const VectorDim &unitTangent, const LinkType &parentSegment) const
void updateForcesAndVelocities(const LinkType &parentSegment, const bool &isClimbStep)
std::pair< VectorDim, VectorDim > slipVectors
Eigen::Matrix< double, dim, Ndof > MatrixDimNdof
Eigen::Matrix< double, 1, ClusterDynamicsParameters< dim >::mSize > cDD
Eigen::Matrix< double, dim, dim > MatrixDim
DislocationQuadraturePoint(const LinkType &parentSegment, const int &q, const int &qOrder, const MatrixNcoeff &SFCH, const MatrixNcoeffDim &qH)
Eigen::Matrix< double, Ncoeff, Ncoeff > MatrixNcoeff
QuadratureDynamic< 1, UniformOpen, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32, 64, 128, 256, 512, 1024 > QuadratureDynamicType
Eigen::Matrix< float, dim, dim > MatrixDimF
Eigen::Matrix< double, 1, ClusterDynamicsParameters< dim >::mSize > cCD
DislocationQuadraturePoint(const size_t sourceID_in, const size_t sinkID_in, const int &q, const int &qOrder, const MatrixNcoeff &SFCH, const MatrixNcoeffDim &qH)
static VectorDim getGlideVelocity(const LinkType &parentSegment, const VectorDim &r, const VectorDim &fPK, const MatrixDim &S, const VectorDim &rl, const double &dL, const int &inclusionID)
Eigen::Matrix< double, dim, 1 > VectorDim
QuadPowDynamic< pOrder, UniformOpen, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32, 64, 128, 256, 512, 1024 > QuadPowDynamicType
static constexpr int Ncoeff
Definition SplineBase.h:21
static constexpr int pOrder
Definition SplineBase.h:22
static constexpr int Ndof
Definition SplineBase.h:23
newsubseg ss[0]
int k