Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
GrainBoundary.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_GrainBoundary_H_
9#define model_GrainBoundary_H_
10
11#include <cfloat> // FLT_EPSILON
12#include <vector>
13#include <deque>
14#include <Eigen/Core>
15#include <Eigen/Eigenvalues>
16//#include <RoundEigen.h>
17#include <SimplicialMesh.h>
18#include <Grain.h>
19//#include <GrainBoundaryType.h>
20#include <LatticePlane.h>
21//#include <LineMeshIntersection.h>
22//#include <CSL.h>
23//#include <DSCL.h>
24//#include <DislocationDynamics/StressStraight.h>
25//#include <GlidePlane.h>
26#include <MeshPlane.h>
27
28
29namespace model
30{
31
32 template <int dim>
33 class GrainBoundary : public MeshPlane<dim>,
34 /* base */ private std::map<size_t,const Grain<dim>* const>,
35 /* base */ private std::map<size_t,const Eigen::Matrix<double,dim,1>>
36 {
37 enum AxisPlaneRelation{TILT=0,TWIST=1,MIXED=2};
38
39 typedef MeshRegionBoundary<dim> MeshRegionBoundaryType;
40 typedef Eigen::Matrix<long int,dim,1> VectorDimI;
41 typedef Eigen::Matrix< double,dim,1> VectorDimD;
42 typedef Eigen::Matrix<double,dim,dim> MatrixDimD;
43 typedef LatticeVector<dim> LatticeVectorType;
44 typedef ReciprocalLatticeDirection<dim> ReciprocalLatticeDirectionType;
45 typedef Grain<dim> GrainType;
46 typedef std::map<size_t,const GrainType* const> GrainContainerType;
47 typedef std::map<size_t,const Eigen::Matrix<double,dim,1>> OutNormalContainerType;
48 typedef Eigen::Matrix<double,2*dim+1,1> BGkeyType;
49
50 void computeCrystallographicRotationAxis();
51
52 VectorDimD _crystallographicRotationAxis;
53 VectorDimD _rotationAxis;
54 double cosTheta; // cosine of relative rotation angle between grains
55
56 public:
57
58 static bool use_GBdislocations;
59 const MeshRegionBoundaryType& regionBoundary;
60 const std::shared_ptr<Polyhedron<dim,dim-1>>& face;
61 const std::pair<int,int>& grainBndID;
62
63 GrainBoundary(const MeshRegionBoundaryType& regionbnd_in,
64 const std::shared_ptr<Polyhedron<dim,dim-1>>& face_in,
65 const Grain<dim>& grainFirst,
66 const Grain<dim>& grainSecond
67 );
68 const GrainContainerType& grains() const;
69 const Grain<dim>& grain(const size_t& k) const;
70 const OutNormalContainerType& outNormals() const;
71 const VectorDimD& outNormal(const size_t& k) const;
72 const VectorDimD& crystallographicRotationAxis() const;
73 const VectorDimD& rotationAxis() const;
74 double rotationAngle() const;
75 std::string tag() const;
76 };
77
78}
79#endif
80
81
double rotationAngle() const
const VectorDimD & rotationAxis() const
const VectorDimD & outNormal(const size_t &k) const
const VectorDimD & crystallographicRotationAxis() const
const GrainContainerType & grains() const
std::string tag() const
const MeshRegionBoundaryType & regionBoundary
const std::pair< int, int > & grainBndID
const OutNormalContainerType & outNormals() const
static bool use_GBdislocations
const std::shared_ptr< Polyhedron< dim, dim-1 > > & face
const Grain< dim > & grain(const size_t &k) const
GrainBoundary(const MeshRegionBoundaryType &regionbnd_in, const std::shared_ptr< Polyhedron< dim, dim-1 > > &face_in, const Grain< dim > &grainFirst, const Grain< dim > &grainSecond)
MeshPlane(const SimplicialMesh< dim > &mesh, const size_t &rID, const VectorDim &p, const VectorDim &n)
Definition MeshPlane.cpp:57
int k