| 22 | namespace Kratos::Python { |
| 23 | |
| 24 | void AddDofsToPython(pybind11::module& m) |
| 25 | { |
| 26 | namespace py = pybind11; |
| 27 | |
| 28 | py::class_<Dof<double>, std::unique_ptr<Dof<double>, py::nodelete>>(m,"Dof") |
| 29 | .def("GetVariable", &Dof<double>::GetVariable, py::return_value_policy::reference_internal) |
| 30 | .def("GetReaction", &Dof<double>::GetReaction, py::return_value_policy::reference_internal) |
| 31 | .def("Id", &Dof<double>::Id) |
| 32 | .def("GetSolutionStepValue", [](const Dof<double>& self) { |
| 33 | return self.GetSolutionStepValue(); |
| 34 | }) |
| 35 | .def("SetSolutionStepValue", [](Dof<double>& self, const double value) { |
| 36 | return self.GetSolutionStepValue() = value; |
| 37 | }) |
| 38 | .def_property("EquationId", &Dof<double>::EquationId, &Dof<double>::SetEquationId) |
| 39 | .def_property("EffectiveEquationId", &Dof<double>::EffectiveEquationId, &Dof<double>::SetEffectiveEquationId) |
| 40 | .def("Fix", &Dof<double>::FixDof) |
| 41 | .def("Free", &Dof<double>::FreeDof) |
| 42 | .def("IsFixed", &Dof<double>::IsFixed) |
| 43 | .def("__lt__", [](Dof<double>& dof1, Dof<double>& dof2){return dof1<dof2; }) |
| 44 | .def("__gt__", [](Dof<double>& dof1, Dof<double>& dof2){return dof1>dof2; }) |
| 45 | .def("__le__", [](Dof<double>& dof1, Dof<double>& dof2){return dof1<=dof2; }) |
| 46 | .def("__ge__", [](Dof<double>& dof1, Dof<double>& dof2){return dof1>=dof2; }) |
| 47 | .def("__eq__", [](Dof<double>& dof1, Dof<double>& dof2){return dof1==dof2; }) |
| 48 | .def("__ne__", [](Dof<double>& dof1, Dof<double>& dof2){return !(dof1==dof2); }) |
| 49 | .def("__str__", PrintObject<Dof<double>>) |
| 50 | ; |
| 51 | |
| 52 | py::class_<ModelPart::DofsArrayType, ModelPart::DofsArrayType::Pointer>(m, "DofsArrayType") |
| 53 | .def(py::init<>()) |
| 54 | .def("__len__", [](ModelPart::DofsArrayType &self) { |
| 55 | return self.size(); |
| 56 | }) |
| 57 | .def("__iter__", [](ModelPart::DofsArrayType &self){ |
| 58 | return py::make_iterator(self.begin(), self.end()); |
| 59 | }, py::keep_alive<0, 1>()) |
| 60 | .def("append", [](ModelPart::DofsArrayType &self, Dof<double> &value) { |
| 61 | self.push_back(&value); |
| 62 | }) |
| 63 | .def("unique", [](ModelPart::DofsArrayType &self) { |
| 64 | self.Unique(); |
| 65 | }) |
| 66 | .def("GetValues", [](ModelPart::DofsArrayType &self) { |
| 67 | Vector values(self.size()); |
| 68 | int counter = 0; |
| 69 | for (auto &r_dof : self) |
| 70 | { |
| 71 | values[counter++] = r_dof.GetSolutionStepValue(); |
| 72 | } |
| 73 | return values; |
| 74 | }) |
| 75 | .def("GetEquationIds", [](ModelPart::DofsArrayType &self) { |
| 76 | std::vector<std::size_t> values(self.size()); |
| 77 | int counter = 0; |
| 78 | for (auto &r_dof : self) |
| 79 | { |
| 80 | values[counter++] = r_dof.EquationId(); |
| 81 | } |
no test coverage detected