Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
GalerkinClimbSolver.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_GalerkinClimbSolver_h_
9#define model_GalerkinClimbSolver_h_
10
11//#include <PlanarDislocationNode.h>
12
13
14#ifndef NDEBUG
15#define VerboseGalerkinClimbSolver(N,x) if(verboseGalerkinClimbSolver>=N){std::cout<<x;}
16#else
17#define VerboseGalerkinClimbSolver(N,x)
18#endif
19
20#include <vector>
21
24
25namespace model
26{
27 template<int dim> class DislocationNetwork;
28
29 template <int dim>
31 {
32 typedef typename DislocationNetwork<dim>::VectorDim VectorDim;
33 typedef typename DislocationNetwork<dim>::MatrixDim MatrixDim;
34 typedef typename DislocationNetwork<dim>::NetworkNodeType NetworkNodeType;
35 typedef typename DislocationNetwork<dim>::NetworkLinkType NetworkLinkType;
36 typedef typename DislocationNetwork<dim>::LoopNodeType LoopNodeType;
37 typedef typename DislocationNetwork<dim>::LoopType LoopType;
38 constexpr static int NdofXnode=NetworkNodeType::NdofXnode;
39 static constexpr int mSize=ClusterDynamicsParameters<dim>::mSize; // Cv, Ci, C2i, C3i
40 static constexpr int iSize=ClusterDynamicsParameters<dim>::iSize; // Nc, Na1, Na2, Na3, rc, ra1, ra2, ra3
41 typedef Eigen::Matrix<double,2,mSize> ForceVectorMatrixType;
42 typedef Eigen::Matrix<double,2*mSize,2> StiffnessMatrixType;
43 typedef Eigen::SparseMatrix<double> SparseMatrixType;
44 typedef std::deque<Eigen::Triplet<double> > TripletContainerType;
45
46 std::vector<Eigen::VectorXd> Fc;
47 std::vector<Eigen::VectorXd> KKc;
48
49 ForceVectorMatrixType clusterForceVector(const NetworkLinkType& networkLink) const;
50 ForceVectorMatrixType clusterForceKernel(const int& k,const NetworkLinkType& networkLink) const;
51 StiffnessMatrixType clusterStiffnessKernel(const int& k,const NetworkLinkType& fieldSegment,const NetworkLinkType& sourceSegment) const;
52 StiffnessMatrixType clusterStiffnessMatrix(const NetworkLinkType& fieldSegment,const NetworkLinkType& sourceSegment) const;
53
54
55 Eigen::VectorXd getNodeVelocitiesBulk() const;
56 Eigen::VectorXd getNodeVelocitiesPipe() const;
57
58 void computeClimbScalarVelocitiesBulk(const bool& updateStiffness);
59
60
61 public:
62
64 Eigen::VectorXd getNodeVelocities() const override;
65 void computeClimbScalarVelocities(const bool& updateStiffness) override;
66
67 };
68
69}
70#endif
TraitsType::VectorDim VectorDim
TraitsType::LoopType LoopType
TraitsType::LoopNodeType LoopNodeType
TraitsType::NetworkNodeType NetworkNodeType
TraitsType::NetworkLinkType NetworkLinkType
TraitsType::MatrixDim MatrixDim
void computeClimbScalarVelocities(const bool &updateStiffness) override
Eigen::VectorXd getNodeVelocities() const override
GalerkinClimbSolver(const DislocationNetwork< dim > &, const ClusterDynamics< dim > *const)
DislocationClimbSolverBase(const DislocationNetwork< dim > &, const ClusterDynamics< dim > *const)
int k