Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
src/DefectiveCrystal/MicrostructureContainer.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_MicrostructureContainer_cpp_
9#define model_MicrostructureContainer_cpp_
10
11#include <fstream>
12#include <memory>
13#include <vector>
14#include <chrono>
16#include <TerminalColors.h>
17
18
19namespace model
20{
21 template <int dim>
23 /* init */ MicrostructureBase<dim>("MicrostructureContainer",*this)
24 /* init */,ddBase(ddBase_in)
25 {
26
27 }
28
29 template <int dim>
34
35 template <int dim>
40
41 template <int dim>
42 void MicrostructureContainer<dim>::initializeConfiguration(const DefectiveCrystalConfigIO<dim>& configIO,const std::ofstream& f_file,const std::ofstream& F_labels)
43 {
44 for(auto& pair : microstructures())
45 {
46 const auto t0= std::chrono::system_clock::now();
47 std::cout<<"Initializing "<<pair->tag<<":"<<std::flush;
48 pair->initializeConfiguration(configIO,f_file,F_labels);
49 std::cout<<greenColor<<" ["<<(std::chrono::duration<double>(std::chrono::system_clock::now()-t0)).count()<<" sec]"<<defaultColor<<std::endl;
50 }
51 }
52
53 template <int dim>
55 {
56 for(auto& pair : microstructures())
57 {
58 const auto t0= std::chrono::system_clock::now();
59 std::cout<<"Solving "<<pair->tag<<":"<<std::flush;
60 pair->solve();
61 std::cout<<greenColor<<" ["<<(std::chrono::duration<double>(std::chrono::system_clock::now()-t0)).count()<<" sec]"<<defaultColor<<std::endl;
62 }
63 }
64
65 template <int dim>
67 {
68 for(auto& pair : microstructures())
69 {
70 const auto t0= std::chrono::system_clock::now();
71 std::cout<<"re-Solving "<<pair->tag<<":"<<std::flush;
72 pair->reSolve();
73 std::cout<<greenColor<<" ["<<(std::chrono::duration<double>(std::chrono::system_clock::now()-t0)).count()<<" sec]"<<defaultColor<<std::endl;
74 }
75 }
76
77 template <int dim>
79 {
80 const auto t0= std::chrono::system_clock::now();
81 double dt(ddBase.simulationParameters.dtMax);
82 for(auto& pair : microstructures())
83 {
84 std::cout<<pair->tag<<":"<<std::flush;
85 const double pairDt(pair->getDt());
86 std::cout<<" dt="<<pairDt<<std::endl;
87 dt=std::min(dt,pairDt);
88 }
89 std::cout<<"Used dt="<<dt;
90 std::cout<<greenColor<<" ["<<(std::chrono::duration<double>(std::chrono::system_clock::now()-t0)).count()<<" sec]"<<defaultColor<<std::endl;
91 return dt;
92 }
93
94 template <int dim>
95 void MicrostructureContainer<dim>::output(DefectiveCrystalConfigIO<dim>& configIO,DefectiveCrystalAuxIO<dim>& auxIO,std::ofstream& f_file,std::ofstream& F_labels) const
96 {
97 for(const auto& pair : microstructures())
98 {
99 pair->output(configIO,auxIO,f_file,F_labels);
100 }
101 }
102
103 template <int dim>
105 {
106 for(auto& pair : microstructures())
107 {
108 const auto t0= std::chrono::system_clock::now();
109 std::cout<<"Updating "<<pair->tag<<":"<<std::flush;
110 pair->updateConfiguration();
111 std::cout<<greenColor<<" ["<<(std::chrono::duration<double>(std::chrono::system_clock::now()-t0)).count()<<" sec]"<<defaultColor<<std::endl;
112 }
113 }
114
115 template <int dim>
117 {
118 MatrixDim temp(MatrixDim::Zero());
119 for(const auto& pair : microstructures())
120 {
121 temp += pair->averagePlasticDistortion();
122 }
123 return temp;
124 }
125
126 template <int dim>
128 {
129 MatrixDim temp(MatrixDim::Zero());
130 for(const auto& pair : microstructures())
131 {
132 temp += pair->averagePlasticDistortionRate();
133 }
134 return temp;
135 }
136
137 template <int dim>
138 typename MicrostructureContainer<dim>::VectorDim MicrostructureContainer<dim>::displacement(const VectorDim& x,const NodeType* const node,const ElementType* const ele,const SimplexDim* const guess) const
139 {
140 VectorDim temp(VectorDim::Zero());
141 for(const auto& pair : microstructures())
142 {
143 temp += pair->displacement(x,node,ele,guess);
144 }
145 return temp;
146 }
147
148 template <int dim>
149 typename MicrostructureContainer<dim>::MatrixDim MicrostructureContainer<dim>::stress(const VectorDim& x,const NodeType* const node,const ElementType* const ele,const SimplexDim* const guess) const
150 {
151 MatrixDim temp(MatrixDim::Zero());
152 for(const auto& pair : microstructures())
153 {
154 temp += pair->stress(x,node,ele,guess);
155 }
156 return temp;
157 }
158
159 template <int dim>
161 {
162 MatrixDim temp(MatrixDim::Zero());
163 for(const auto& pair : microstructures())
164 {
165 temp += pair->averageStress();
166 }
167 return temp;
168 }
169
170 template<int dim>
172 {
173 VectorDim temp(VectorDim::Zero());
174 for(const auto& pair : microstructures())
175 {
176 temp += pair->inelasticDisplacementRate(x,node,ele,guess);
177 }
178 return temp;
179 }
180
181 template<int dim>
183 {
184 VectorMSize temp(VectorMSize::Zero());
185 for(const auto& pair : microstructures())
186 {
187 temp += pair->mobileConcentration(x,node,ele,guess);
188 }
189 return temp;
190 }
191
192 template<int dim>
194 {
195 VectorISize temp(VectorISize::Zero());
196 for(const auto& pair : microstructures())
197 {
198 temp += pair->immobileClusters(x,node,ele,guess);
199 }
200 return temp;
201 }
202
203 template struct MicrostructureContainer<3>;
204}
205#endif
x
Definition int_R.m:12
size_t InstanceCount< Derived >::count
static std::string greenColor
static std::string defaultColor
MicrostructureBase(const std::string &tag_in, MicrostructureContainer< dim > &m_in)
MicrostructureBase< dim >::ElementType ElementType
VectorMSize mobileConcentration(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MicrostructureBase< dim >::NodeType NodeType
MicrostructureBase< dim >::VectorDim VectorDim
MicrostructureBase< dim >::MatrixDim MatrixDim
void initializeConfiguration(const DefectiveCrystalConfigIO< dim > &configIO, const std::ofstream &f_file, const std::ofstream &F_labels) override
MatrixDim stress(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
DefectiveCrystalBase< dim > & ddBase
VectorDim inelasticDisplacementRate(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
std::vector< std::shared_ptr< MicrostructureBase< dim > > > BaseContainerType
VectorISize immobileClusters(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MicrostructureBase< dim >::VectorISize VectorISize
VectorDim displacement(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
MicrostructureContainer(DefectiveCrystalBase< dim > &ddBase_in)
MicrostructureBase< dim >::SimplexDim SimplexDim
MicrostructureBase< dim >::VectorMSize VectorMSize
void output(DefectiveCrystalConfigIO< dim > &configIO, DefectiveCrystalAuxIO< dim > &auxIO, std::ofstream &f_file, std::ofstream &F_labels) const override
REAL t0
vertex temp