Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
Grain.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_Grain_cpp_
9#define model_Grain_cpp_
10
11#include <Grain.h>
12#include <BCClattice.h>
13#include <FCClattice.h>
14#include <HEXlattice.h>
15
16namespace model
17{
18
19 template <int dim>
20 Grain<dim>::Grain(const MeshRegionType& region_in,
21 const PolycrystallineMaterialBase& material,
22 const std::string& polyFile
23 ) :
24 /* init */SingleCrystalBase<dim>(material,TextFileParser(polyFile).readMatrix<double>("C2G"+std::to_string(region_in.regionID),dim,dim,true))
25 /* init */,region(region_in)
26 /* init */,grainID(region.regionID) // remove grain ID, use lattice.sID
27 {
28 if(this->sID!=region.regionID)
29 {
30 std::cout<<"this->sID="<<this->sID<<std::endl;
31 std::cout<<"region.regionID="<<region.regionID<<std::endl;
32 throw std::runtime_error("grain.sID!=region.regionID.");
33 }
34 std::cout<<" # planeNormals="<<this->planeNormals().size()<<std::endl;
35 std::cout<<" # slipSystems="<<this->slipSystems().size()<<std::endl;
36 std::cout<<" # secondPhases="<<this->secondPhases().size()<<std::endl;
37 }
38
39 template <int dim>
40 const typename Grain<dim>::GrainBoundaryContainerType& Grain<dim>::grainBoundaries() const
41 {
42 return *this;
43 }
44
45 template <int dim>
46 typename Grain<dim>::GrainBoundaryContainerType& Grain<dim>::grainBoundaries()
47 {
48 return *this;
49 }
50
51 template <int dim>
52 std::deque<const GlidePlaneBase*> Grain<dim>::conjugatePlaneNormal(const LatticeVectorType& B,
53 const ReciprocalLatticeDirectionType& N) const
54 {
55 std::deque<const GlidePlaneBase*> temp;
56 if(B.dot(N)==0) // not sessile
57 {
58 for (const auto& planeNormal : this->planeNormals())
59 {
60 if( B.dot(*planeNormal.second)==0 && N.cross(*planeNormal.second).base().squaredNorm()>0)
61 {
62 temp.push_back(planeNormal.second.get());
63 }
64 }
65 }
66 return temp;
67 }
68
69 template class Grain<3>;
70}
71#endif
const MeshRegionType & region
Definition Grain.h:48
const GrainBoundaryContainerType & grainBoundaries() const
Definition Grain.cpp:40
const size_t & grainID
Definition Grain.h:49
std::deque< const GlidePlaneBase * > conjugatePlaneNormal(const LatticeVectorType &B, const ReciprocalLatticeDirectionType &N) const
Definition Grain.cpp:52
Grain(const MeshRegionType &region_in, const PolycrystallineMaterialBase &material, const std::string &polyFile)
Definition Grain.cpp:20
initial point of the source segment B
SingleCrystalBase(const PolycrystallineMaterialBase &material, const MatrixDim &Q)
const PlaneNormalContainerType & planeNormals() const
vertex temp