Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
PolycrystallineMaterialBase.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_PolycrystallineMaterialBase_cpp_
9#define model_PolycrystallineMaterialBase_cpp_
10
11#include <string>
12#include <TerminalColors.h>
13#include <TextFileParser.h>
15
16namespace model
17{
18
19 PolycrystallineMaterialBase::PolycrystallineMaterialBase(const std::string& fileName,const double& absoluteTemperature) :
20 /* init */ materialFile(getMaterialFile(fileName))
21 /* init */,materialName(TextFileParser(materialFile).readString("materialName",true))
22 /* init */,crystalStructure(TextFileParser(materialFile).readString("crystalStructure",true))
23 /* init */,atomsPerUnitCell(TextFileParser(materialFile).readScalar<int>("atomsPerUnitCell",true))
24 /* init */,T(absoluteTemperature)
25 /* init */,Tm(TextFileParser(materialFile).readScalar<double>("Tm",true))
26 /* init */,mu0_SI(TextFileParser(materialFile).readScalar<double>("mu0_SI",true))
27 /* init */,mu1_SI(TextFileParser(materialFile).readScalar<double>("mu1_SI",true))
28 /* init */,mu_SI(mu0_SI+mu1_SI*T)
29 /* init */,nu(TextFileParser(materialFile).readScalar<double>("nu",true))
30 /* init */,E_SI(2.0*mu_SI*(1.0+nu))
31 /* init */,rho_SI(TextFileParser(materialFile).readScalar<double>("rho_SI",true))
32 /* init */,cs_SI(sqrt(mu_SI/rho_SI))
33 /* init */,b_SI(TextFileParser(materialFile).readScalar<double>("b_SI",true))
34 /* init */,kB(kB_SI/mu_SI/std::pow(b_SI,3))
35 /* init */,mu(1.0)
36 /* init */,b(1.0)
37 /* init */,cs(1.0)
38 /* init */,C1(1.0-nu)
39 /* init */,C2(1.0/(4.0*std::numbers::pi*C1))
40 /* init */,C3(1.0-2.0*nu)
41 /* init */,C4(0.5*C2)
42 /* init */,enabledSlipSystems(TextFileParser(materialFile).readStringSet("enabledSlipSystems",true))
43 /* init */,enabledSecondPhases(TextFileParser(materialFile).readStringSet("enabledSecondPhases",true))
44 {
45 std::cout<<magentaColor<<" temperature: T="<<T<<" [K]"<<std::endl;
46 std::cout<<magentaColor<<" units of stress (shear modulus): mu="<<mu_SI<<" [Pa]"<<std::endl;
47 std::cout<<magentaColor<<" units of length (Burgers vector): b="<<b_SI<<" [m]"<<std::endl;
48 std::cout<<magentaColor<<" units of speed (shear-wave speed): cs="<<cs_SI<<" [m/s]"<<std::endl;
49 std::cout<<magentaColor<<" units of time: b/cs="<<b_SI/cs_SI<<" [sec]"<<defaultColor<<std::endl;
50
51 std::cout<<"Enabled SlipSystems"<<std::endl;
52 for(const auto& str : enabledSlipSystems)
53 {
54 std::cout<<str<<std::endl;
55 }
56
57 std::cout<<"Enabled SecondPhases"<<std::endl;
58 for(const auto& str : enabledSecondPhases)
59 {
60 std::cout<<str<<std::endl;
61 }
62 }
63
64 const std::string& PolycrystallineMaterialBase::getMaterialFile(const std::string& fileName)
65 {
66 std::cout<<greenBoldColor<<"Reading material file "<<fileName<<defaultColor<<std::endl;
67 return fileName;
68 }
69
70 bool PolycrystallineMaterialBase::isEnabledPlane(const std::string& planeStr) const
71 {
72 for(const auto& str : enabledSlipSystems)
73 {
74 if(str.find(planeStr)!= std::string::npos)
75 {
76 return true;
77 }
78 }
79 return false;
80 }
81
82 bool PolycrystallineMaterialBase::isEnabledSlipSystem(const std::string& ssStr) const
83 {
84 return enabledSlipSystems.find(ssStr)!=enabledSlipSystems.end();
85 }
86
87}
88#endif
static std::string magentaColor
static std::string greenBoldColor
static std::string defaultColor
bool isEnabledPlane(const std::string &planeStr) const
const std::set< std::string > enabledSlipSystems
PolycrystallineMaterialBase(const std::string &fileName, const double &absoluteTemperature)
const std::set< std::string > enabledSecondPhases
bool isEnabledSlipSystem(const std::string &ssStr) const
static const std::string & getMaterialFile(const std::string &fileName)