22 using MatrixDimD = Eigen::Matrix<double, dim, dim>;
23 using VectorDimD = Eigen::Matrix<double, dim, 1>;
25 py::class_<Lattice> cls(m, (
"Lattice" + std::to_string(dim) +
"D").c_str());
26 cls.def(py::init<const MatrixDimD&, const MatrixDimD&>(),
27 py::arg(
"A"), py::arg(
"Q")=MatrixDimD::Identity())
28 .def_readonly(
"latticeBasis", &Lattice::latticeBasis)
29 .def_readonly(
"reciprocalBasis", &Lattice::reciprocalBasis)
30 .def_readonly(
"F", &Lattice::F)
32 return lattice.interPlanarSpacing(pyrlv.
rld);
34 .def(
"latticeVector", [](
const Lattice &lattice,
const VectorDimD &p) {
37 .def(
"box",[](
const Lattice& lattice,
const std::vector<PyLatticeVector>& boxPyLatticeVectors,
const std::string& filename){
38 std::vector<LatticeVector> boxLatticeVectors;
39 for(
const auto& v : boxPyLatticeVectors)
40 boxLatticeVectors.push_back(v.lv);
41 auto latticeVectors= lattice.box(boxLatticeVectors,filename);
43 std::vector<PyLatticeVector> pyLatticeVectors;
44 for(
const auto& v : latticeVectors)
46 return pyLatticeVectors;
47 }, py::arg(
"boxVectors"),py::arg(
"filename")=
"");
48 if constexpr(dim==3) {
49 cls.def(
"generateCoincidentLattices",
51 return lattice.generateCoincidentLattices(rd.
rld, maxDen, N);
52 }, py::arg(
"rd"), py::arg(
"maxDen") = 100, py::arg(
"N") = 100);
54 if constexpr(dim==2) {
55 cls.def(
"generateCoincidentLattices",
56 [](
const Lattice& lattice,
const double& maxStrain,
const double& maxDen,
const int& N) {
57 return lattice.generateCoincidentLattices(maxStrain, maxDen, N);
58 }, py::arg(
"maxStrain"),py::arg(
"maxDen") = 50, py::arg(
"N") = 30);
59 cls.def(
"generateCoincidentLattices",
60 [](
const Lattice& lattice,
const Lattice& underformedLattice,
const double& maxStrain,
const double& maxDen,
const int& N) {
61 return lattice.generateCoincidentLattices(underformedLattice, maxStrain, maxDen, N);
62 }, py::arg(
"undeformedLattice"), py::arg(
"maxStrain"),py::arg(
"maxDen") = 50, py::arg(
"N") = 30);
64 cls.def(
"latticeDirection",[](
const Lattice& self,
const VectorDimD& d,
const double& tol){
66 }, py::arg(
"cartesianCoordinate"), py::arg(
"tol")=FLT_EPSILON);
67 cls.def(
"reciprocalLatticeDirection",[](
const Lattice& self,
const VectorDimD& d,
const double& tol){
69 }, py::arg(
"cartesianCoordinate"), py::arg(
"tol")=FLT_EPSILON);
71 auto latticeBasis2D= self.planeParallelLatticeBasis(l.
rld, useRLLL);
72 std::vector<PyLatticeDirection> pyLatticeBasis2D;
73 for(
const auto elem : latticeBasis2D)
74 pyLatticeBasis2D.push_back(elem);
75 return pyLatticeBasis2D;
76 }, py::arg(
"reciprocalLatticeDirection"), py::arg(
"useRLLL")=
false);