Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
DislocationClimbSolverFactory.cpp
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_DislocationClimbSolverFactory_cpp_
9#define model_DislocationClimbSolverFactory_cpp_
10
11//#include <PlanarDislocationNode.h>
12
14#include <GalerkinClimbSolver.h>
15#include <TextFileParser.h>
16
17#include <DislocationNetwork.h>
18
19namespace model
20{
21
22 template <int dim>
24 /* init */ DislocationVelocitySolverBase<dim>(DN)
25 /* init */,glideEquilibriumRate(TextFileParser(DN.ddBase.simulationParameters.traitsIO.inputFilesFolder+"/DD.txt").readScalar<double>("glideEquilibriumRate",true))
26 /* init */,CD(CD_in)
27 /* init */,vClimbRef(getVclimbRef())
28 {
29 if(!CD)
30 {
31 throw std::runtime_error("DislocationClimbSolverBase requires ClusterDynamics.");
32 }
33 }
34
35 template <int dim>
40
41 template <int dim>
46
47 template <int dim>
49 {
50 double vRef(0.0);
51 const auto eqC(CD->cdp.equilibriumMobileConcentration(0.0));
52 for(const auto& pair : CD->cdp.D)
53 {
54 const auto& dVec(pair.second);
55 for(int m=0;m<CD->cdp.mSize;++m)
56 {
57 vRef=std::max(vRef,dVec[m].trace()*eqC[m]/3.0/this->DN.ddBase.poly.b);
58 }
59 }
60 return vRef;
61 }
62
63 template <int dim>
64 std::shared_ptr<DislocationClimbSolverBase<dim>> DislocationClimbSolverFactory<dim>::getClimbSolver(const DislocationNetwork<dim>& DN,const std::string& solverType)
65 {
66 const auto CD(DN.microstructures.template getUniqueTypedMicrostructure<ClusterDynamics<dim>>());
67 if(CD)
68 {
69 if(solverType=="Galerkin" || solverType=="galerkin")
70 {
71
72 return std::shared_ptr<DislocationClimbSolverBase<dim>>(new GalerkinClimbSolver<dim>(DN,CD.get()));
73 }
74 else
75 {
76 std::cout<<redBoldColor<<"Unknown climb solver type "<<solverType<<". Climb disabled."<<defaultColor<<std::endl;
77 return nullptr;
78 }
79 }
80 else
81 {
82 std::cout<<redBoldColor<<"ClusterDynamics not found. Climb disabled."<<defaultColor<<std::endl;
83 return nullptr;
84 }
85 }
86
87 template struct DislocationClimbSolverBase<3>;
89
90}
91#endif
static std::string redBoldColor
static std::string defaultColor
std::vector< Eigen::Array< double, 1, ClusterDynamicsParameters< dim >::mSize > > ScalarVelocitiesContainerType
const ClusterDynamics< dim > *const CD
DislocationClimbSolverBase(const DislocationNetwork< dim > &, const ClusterDynamics< dim > *const)
const ScalarVelocitiesContainerType & scalarVelocities() const
static std::shared_ptr< DislocationClimbSolverBase< dim > > getClimbSolver(const DislocationNetwork< dim > &DN, const std::string &solverType)
DislocationVelocitySolverBase(const DislocationNetwork< dim > &)
void t struct mesh * m