Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
DefectiveCrystalConfigIO.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_DefectiveCrystalConfigIO_H_
9#define model_DefectiveCrystalConfigIO_H_
10
11#include <type_traits>
12#include <vector>
13#include <map>
14#include <chrono>
15#include <iostream> // std::cout
16#include <fstream> // std::ifstream
17#include <cfloat> // std::ifstream
30
31//#include <DislocationNetwork.h>
32//#include <PeriodicLoopIO.h>
33
34#include <TerminalColors.h>
35#include <set>
36
37
38namespace model
39{
40
41 template <int dim>
43 /* */,private std::vector<DislocationNodeIO<dim>>
44 /* */,private std::vector<DislocationLoopIO<dim>>
45 /* */,private std::vector<DislocationLoopNodeIO<dim>>
46 /* */,private std::vector<DislocationLoopLinkIO<dim>>
47 /* */,private std::vector<SphericalInclusionIO<dim>>
48 /* */,private std::vector<EllipsoidalInclusionIO<dim>>
49 /* */,private std::vector<PolyhedronInclusionIO<dim>>
50 /* */,private std::vector<PolyhedronInclusionNodeIO<dim>>
51 /* */,private std::vector<PolyhedronInclusionEdgeIO>
52 {
53
54 std::map<size_t,const size_t> _loopNodeMap;
55 std::map<size_t,const size_t> _nodeMap;
56 std::map<size_t, const size_t> _loopMap;
57
58 typedef Eigen::Matrix<double,Eigen::Dynamic,ClusterDynamicsParameters<dim>::mSize+ClusterDynamicsParameters<dim>::iSize> CDMatrixType;
59 typedef Eigen::Matrix<double,Eigen::Dynamic,2*dim> DispMatrixType; // elastic and diffusive displacement
60 CDMatrixType _cdMatrix;
61 DispMatrixType _dispMatrix;
62
63 public:
64
65 // DefectiveCrystalConfigIO(const std::string& folderName,const std::string& suffix="");
66 DefectiveCrystalConfigIO(const std::string& folderName="config");
67
68 void clear();
69 const std::vector<DislocationNodeIO<dim> >& nodes() const;
70 std::vector<DislocationNodeIO<dim> >& nodes();
71 const std::vector<DislocationLoopNodeIO<dim> >& loopNodes() const;
72 std::vector<DislocationLoopNodeIO<dim> >& loopNodes();
73 const std::vector<DislocationLoopIO<dim> >& loops() const;
74 std::vector<DislocationLoopIO<dim> >& loops();
75 const DislocationLoopIO<dim>& loop(const size_t& loopID) const;
76 const std::vector<DislocationLoopLinkIO<dim> >& loopLinks() const;
77 std::vector<DislocationLoopLinkIO<dim> >& loopLinks();
78 const std::vector<SphericalInclusionIO<dim> >& sphericalInclusions() const;
79 std::vector<SphericalInclusionIO<dim> >& sphericalInclusions();
80 const std::vector<EllipsoidalInclusionIO<dim> >& ellipsoidalInclusions() const;
81 std::vector<EllipsoidalInclusionIO<dim> >& ellipsoidalInclusions();
82 const std::vector<PolyhedronInclusionIO<dim> >& polyhedronInclusions() const;
83 std::vector<PolyhedronInclusionIO<dim> >& polyhedronInclusions();
84 const std::vector<PolyhedronInclusionNodeIO<dim> >& polyhedronInclusionNodes() const;
85 std::vector<PolyhedronInclusionNodeIO<dim> >& polyhedronInclusionNodes();
86 const std::vector<PolyhedronInclusionEdgeIO>& polyhedronInclusionEdges() const;
87 std::vector<PolyhedronInclusionEdgeIO>& polyhedronInclusionEdges();
88 const std::map<size_t,const size_t>& nodeMap() const;
89 std::map<size_t,const size_t>& nodeMap();
90 const std::map<size_t,const size_t>& loopNodeMap() const;
91 std::map<size_t,const size_t>& loopNodeMap();
92 const std::map<size_t, const size_t>& loopMap() const;
93 std::map<size_t, const size_t>& loopMap();
94 const CDMatrixType& cdMatrix() const;
95 CDMatrixType& cdMatrix();
96 const DispMatrixType& displacementMatrix() const;
97 DispMatrixType& displacementMatrix();
98 std::map<std::pair<size_t,size_t>,DislocationSegmentIO<dim> > segments() const;
99 void write(const size_t& runID,const bool& outputBinary);
100 void writeTxt(const size_t& runID);
101 void writeTxtStream(std::ostream &file);
102 void writeBin(const size_t& runID);
103 void read(const size_t& runID);
104 void readBin(const size_t& runID);
105 void readTxt(const size_t& runID);
106 void readTxtStream(std::istream &infile);
107 void bin2txt(const size_t& runID,const bool& writeSegments);
108 std::map<size_t,std::vector<size_t>> loopNodeSequence() const;
109 void finalize();
110 void print() const;
111
112 // std::map<std::pair<size_t,size_t>,std::set<size_t> > segmentloopMap() const
113 // {
114 //
115 // std::map<std::pair<size_t,size_t>,std::set<size_t> >temp;
116 //
117 // for(const auto& link : loopLinks())
118 // {
119 //
120 //
121 // const auto loopIter=loopMap().find(link.loopID);
122 // assert(loopIter!=loopMap().end());
123 //
124 // const auto loopSourceIter(loopNodeMap().find(link.sourceID));
125 // assert(loopSourceIter!=loopNodeMap().end());
126 //
127 // const auto loopSinkIter(loopNodeMap().find(link.sinkID));
128 // assert(loopSinkIter!=loopNodeMap().end());
129 //
130 //
131 // if(link.hasNetworkLink)
132 // {
133 // const size_t sourceID(std::min(loopSourceIter->second->networkNodeID,loopSinkIter->second->networkNodeID));
134 // const size_t sinkID(std::max(loopSourceIter->second->networkNodeID,loopSinkIter->second->networkNodeID));
135 // const auto key=std::make_pair(sourceID,sinkID);
136 //
137 // temp[key].insert(link.loopID);
138 //
139 // }
140 // }
141 //
142 // return temp;
143 // }
144
145 };
146
147}
148#endif
std::map< size_t, const size_t > & loopMap()
const DispMatrixType & displacementMatrix() const
const std::vector< SphericalInclusionIO< dim > > & sphericalInclusions() const
std::vector< DislocationLoopNodeIO< dim > > & loopNodes()
std::map< size_t, std::vector< size_t > > loopNodeSequence() const
const std::vector< DislocationLoopLinkIO< dim > > & loopLinks() const
std::vector< DislocationNodeIO< dim > > & nodes()
const std::vector< DislocationLoopIO< dim > > & loops() const
const std::vector< PolyhedronInclusionIO< dim > > & polyhedronInclusions() const
const std::vector< DislocationNodeIO< dim > > & nodes() const
std::map< size_t, const size_t > & nodeMap()
std::map< std::pair< size_t, size_t >, DislocationSegmentIO< dim > > segments() const
std::vector< PolyhedronInclusionNodeIO< dim > > & polyhedronInclusionNodes()
const std::map< size_t, const size_t > & loopMap() const
void write(const size_t &runID, const bool &outputBinary)
const std::map< size_t, const size_t > & loopNodeMap() const
DefectiveCrystalConfigIO(const std::string &folderName="config")
std::vector< EllipsoidalInclusionIO< dim > > & ellipsoidalInclusions()
const std::vector< EllipsoidalInclusionIO< dim > > & ellipsoidalInclusions() const
const std::vector< PolyhedronInclusionNodeIO< dim > > & polyhedronInclusionNodes() const
std::vector< PolyhedronInclusionEdgeIO > & polyhedronInclusionEdges()
const std::map< size_t, const size_t > & nodeMap() const
std::map< size_t, const size_t > & loopNodeMap()
void bin2txt(const size_t &runID, const bool &writeSegments)
std::vector< DislocationLoopIO< dim > > & loops()
const DislocationLoopIO< dim > & loop(const size_t &loopID) const
const std::vector< PolyhedronInclusionEdgeIO > & polyhedronInclusionEdges() const
const std::vector< DislocationLoopNodeIO< dim > > & loopNodes() const
std::vector< SphericalInclusionIO< dim > > & sphericalInclusions()
std::vector< DislocationLoopLinkIO< dim > > & loopLinks()
std::vector< PolyhedronInclusionIO< dim > > & polyhedronInclusions()
DefectiveCrystalBaseIO(const std::string &outFolderName_in, const std::string &fileNamePrefix_in, const std::string &outFolderSuffix_in="")
char infile