This examples demonstrates the construction of a grain boundary in a 3D bicrystal. We will construct a [111] tilt \(\Sigma 273\) - STGB (5 6 -11) and an ATGB (17 23 -40)(145 136 -281).
{
const int dim=3;
Eigen::Matrix3d A;
A << 0.0, 0.5, 0.5,
0.5, 0.0, 0.5,
0.5, 0.5, 0.0;
Eigen::Vector3d axis;
axis << 1,1,1;
double angle= 6.0089831977661480877*M_PI/180;
Eigen::AngleAxisd rotation(angle,axis.normalized());
try
{
std::cout <<
"Sigma = " << bc.
sigma << std::endl;
normal << 17,23,-40;
std::cout << "Miller indices w.r.t A: ";
std::cout << gb.
nA << std::endl;
std::cout << "Miller indices w.r.t B: ";
std::cout << gb.
nB << std::endl;
auto basis= bc.
csl.planeParallelLatticeBasis(gb.
bc.getReciprocalLatticeDirectionInC(gb.
nA.reciprocalLatticeVector()),
true);
std::vector<LatticeVector<dim>> boxVectors;
boxVectors.push_back(nonParallelC);
boxVectors.push_back(periodC);
boxVectors.push_back(vectorAlongAxisC);
std::cout << "Input box vectors = " << std::endl;
std::cout << boxVectors[0].cartesian().transpose() << std::endl;
std::cout << boxVectors[1].cartesian().transpose() << std::endl;
std::cout << boxVectors[2].cartesian().transpose() << std::endl;
gb.
box(boxVectors,0.5,2,
"gb.txt",
true);
std::cout << "Output box vectors = " << std::endl;
std::cout << boxVectors[0].cartesian().transpose() << std::endl;
std::cout << boxVectors[1].cartesian().transpose() << std::endl;
std::cout << boxVectors[2].cartesian().transpose() << std::endl;
}
catch(std::runtime_error& e)
{
std::cout << e.what() << std::endl;
return -1;
}
return 0;
}
LatticeDirection< dim > getLatticeDirectionInC(const LatticeVector< dim > &v) const
const Lattice< dim > csl
CSL lattice .
const ReciprocalLatticeDirection< dim > nA
const BiCrystal< dim > & bc
std::enable_if< dm==2||dm==3, std::vector< LatticeVector< dim > > >::type box(std::vector< LatticeVector< dim > > &boxVectors, const double &orthogonality, const int &dsclFactor, std::string filename="", bool orient=false) const
const ReciprocalLatticeDirection< dim > nB
ReciprocalLatticeDirection< dim > reciprocalLatticeDirection(const VectorDimD &d, const double &tol=FLT_EPSILON) const
Returns the reciprocal lattice direction along a vector.
std::enable_if< dm==2, LatticeDirection< dim > >::type cross(const ReciprocalLatticeVector< dim > &other) const
VectorDimD cartesian() const
int main(int argc, char **argv)