Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
MicrostructureContainer.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_MicrostructureContainer_H_
9#define model_MicrostructureContainer_H_
10
11#include <fstream>
12#include <memory>
13#include <vector>
18
19namespace model
20{
21 template <int dim>
23 /* */, public std::vector<std::shared_ptr<MicrostructureBase<dim>>>
24 {
32
33 typedef std::vector<std::shared_ptr<MicrostructureBase<dim>>> BaseContainerType;
34
36
40 void initializeConfiguration(const DefectiveCrystalConfigIO<dim>& configIO,const std::ofstream& f_file,const std::ofstream& F_labels) override;
41 void solve() override;
42 void reSolve() override;
43 double getDt() const override;
44 void output(DefectiveCrystalConfigIO<dim>& configIO,DefectiveCrystalAuxIO<dim>& auxIO,std::ofstream& f_file,std::ofstream& F_labels) const override;
45 void updateConfiguration() override;
48 VectorDim displacement(const VectorDim&,const NodeType* const,const ElementType* const,const SimplexDim* const) const override;
49 MatrixDim stress(const VectorDim&,const NodeType* const,const ElementType* const,const SimplexDim* const) const override;
50 MatrixDim averageStress() const override;
51 VectorDim inelasticDisplacementRate(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
52 VectorMSize mobileConcentration(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
53 VectorISize immobileClusters(const VectorDim&, const NodeType* const, const ElementType* const,const SimplexDim* const) const override;
54
55// template<typename MicrostructureType>
56// std::set<MicrostructureType*> getTypedMicrostructures() const
57// {
58// std::set<MicrostructureType*> temp;
59// for(const auto& microstructure : microstructures())
60// {
61// if(dynamic_cast<MicrostructureType*>(microstructure.get()))
62// {
63// temp.insert(dynamic_cast<MicrostructureType*>(microstructure.get()));
64// }
65// }
66// return temp;
67// }
68
69 template<typename MicrostructureType>
70 std::set<std::shared_ptr<MicrostructureType>> getTypedMicrostructures() const
71 {
72 std::set<std::shared_ptr<MicrostructureType>> temp;
73 for(const auto& microstructure : microstructures())
74 {
75 std::shared_ptr<MicrostructureType> derived(std::dynamic_pointer_cast<MicrostructureType>(microstructure));
76 if(derived)
77 {
78 temp.insert(derived);
79 }
80 }
81 return temp;
82 }
83
84// template<typename MicrostructureType>
85// MicrostructureType* getUniqueTypedMicrostructure() const
86// {
87// const auto cdMicrostructures(getTypedMicrostructures<MicrostructureType>());
88// if(cdMicrostructures.size()==1)
89// {
90// return *cdMicrostructures.begin();
91// }
92// else
93// {
94// std::cout<<"Found "<<cdMicrostructures.size()<<" microstructures of requested type"<<std::endl;
95// return nullptr;
96// }
97// }
98
99 template<typename MicrostructureType>
100 std::shared_ptr<MicrostructureType> getUniqueTypedMicrostructure() const
101 {
102 const auto cdMicrostructures(getTypedMicrostructures<MicrostructureType>());
103 if(cdMicrostructures.size()==1)
104 {
105 return *cdMicrostructures.begin();
106 }
107 else
108 {
109 std::cout<<"Found "<<cdMicrostructures.size()<<" microstructures of requested type"<<std::endl;
110 return nullptr;
111 }
112 }
113
114 };
115}
116#endif
Eigen::Matrix< double, mSize, 1 > VectorMSize
Eigen::Matrix< double, dim, dim > MatrixDim
ElementType::NodeType NodeType
MicrostructureBase(const std::string &tag_in, MicrostructureContainer< dim > &m_in)
Eigen::Matrix< double, dim, 1 > VectorDim
DefectiveCrystalBase< dim >::ElementType ElementType
Eigen::Matrix< double, iSize, 1 > VectorISize
Simplex< dim, dim > SimplexDim
MicrostructureBase< dim >::ElementType ElementType
VectorMSize mobileConcentration(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const override
std::shared_ptr< MicrostructureType > getUniqueTypedMicrostructure() const
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
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
std::set< std::shared_ptr< MicrostructureType > > getTypedMicrostructures() const
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
vertex temp