oILAB
Loading...
Searching...
No Matches
BiCrystalBindings.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 7/9/25.
3//
4
5#ifndef OILAB_BICRYSTAL_BINDINGS_H
6#define OILAB_BICRYSTAL_BINDINGS_H
7
8#include <pybind11/pybind11.h>
9#include "../Lattices/LatticeModule.h"
10#include <pybind11/stl.h>
11namespace py = pybind11;
12
13namespace pyoilab {
14 template<int dim>
15 void bind_BiCrystal(py::module_ &m) {
18 using BiCrystal = oILAB::BiCrystal<dim>;
19 using Lattice = oILAB::Lattice<dim>;
20 using LatticeVector = oILAB::LatticeVector<dim>;
21
22 using MatrixDimD = Eigen::Matrix<double, dim, dim>;
23 using VectorDimD = Eigen::Matrix<double, dim, 1>;
24
25 py::class_<BiCrystal> cls(m, ("BiCrystal" + std::to_string(dim) + "D").c_str());
26 cls.def(py::init<const Lattice&, const Lattice&, const bool&>(),
27 py::arg("A"), py::arg("B"), py::arg("useRLLL")=false);
28 cls.def("A",[](const BiCrystal& self) -> const Lattice& {
29 return self.A;
30 }, py::return_value_policy::reference_internal);
31 cls.def("B",[](const BiCrystal& self) -> const Lattice& {
32 return self.B;
33 }, py::return_value_policy::reference_internal);
34 cls.def_readonly("sigma",&BiCrystal::sigma);
35 cls.def_readonly("sigmaA",&BiCrystal::sigmaA);
36 cls.def_readonly("sigmaB",&BiCrystal::sigmaB);
37 cls.def_readonly("csl",&BiCrystal::csl);
38 cls.def_readonly("dscl",&BiCrystal::dscl);
39 cls.def("box", [](const BiCrystal& self,
40 std::vector<PyLatticeVector>& boxPyLatticeVectors,
41 const double& orthogonality,
42 const int& dsclFactor,
43 std::string filename,
44 bool orient){
45 std::vector<LatticeVector> boxLatticeVectors;
46 for(const auto& v : boxPyLatticeVectors)
47 boxLatticeVectors.push_back(v.lv);
48 auto latticeVectors= self.box(boxLatticeVectors,
49 orthogonality,
50 dsclFactor,
51 filename,
52 orient);
53
54 std::vector<PyLatticeVector> pyLatticeVectors;
55 for(const auto& v : latticeVectors)
56 pyLatticeVectors.push_back(PyLatticeVector(v));
57 return pyLatticeVectors;
58 }, py::arg("boxVectors"), py::arg("orthogonality"), py::arg("dsclFactor"), py::arg("filename")="", py::arg("orient")=false);
59 cls.def("getLatticeVectorInA",[](const BiCrystal& self, const PyLatticeVector& v){
60 return PyLatticeVector(self.getLatticeVectorInA(v.lv));
61 });
62 cls.def("getLatticeVectorInB",[](const BiCrystal& self, const PyLatticeVector& v){
63 return PyLatticeVector(self.getLatticeVectorInB(v.lv));
64 });
65 cls.def("getLatticeVectorInD",[](const BiCrystal& self, const PyLatticeVector& v){
66 return PyLatticeVector(self.getLatticeVectorInD(v.lv));
67 });
68 cls.def("getLatticeDirectionInC",[](const BiCrystal& self, const PyLatticeVector& v){
69 return PyLatticeDirection(self.getLatticeDirectionInC(v.lv));
70 });
71 cls.def("getLatticeDirectionInD",[](const BiCrystal& self, const PyLatticeVector& v){
72 return PyLatticeDirection(self.getLatticeDirectionInD(v.lv));
73 });
74 cls.def("getReciprocalLatticeDirectionInA",[](const BiCrystal& self, const PyReciprocalLatticeVector& rv){
75 return PyReciprocalLatticeDirection(self.getReciprocalLatticeDirectionInA(rv.rlv));
76 });
77 cls.def("getReciprocalLatticeDirectionInB",[](const BiCrystal& self, const PyReciprocalLatticeVector& rv){
78 return PyReciprocalLatticeDirection(self.getReciprocalLatticeDirectionInB(rv.rlv));
79 });
80 cls.def("getReciprocalLatticeDirectionInC",[](const BiCrystal& self, const PyReciprocalLatticeVector& rv){
81 return PyReciprocalLatticeDirection(self.getReciprocalLatticeDirectionInC(rv.rlv));
82 });
83 cls.def("getReciprocalLatticeDirectionInD",[](const BiCrystal& self, const PyReciprocalLatticeVector& rv){
84 return PyReciprocalLatticeDirection(self.getReciprocalLatticeDirectionInD(rv.rlv));
85 });
86 }
87}
88#endif //OILAB_BICRYSTAL_BINDINGS_H
Lattice class.
Definition Lattice.h:31
LatticeVector class.
void bind_BiCrystal(py::module_ &m)