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