diff --git a/python/py_group_manager.cc b/python/py_group_manager.cc index 86f040107..81b3cff91 100644 --- a/python/py_group_manager.cc +++ b/python/py_group_manager.cc @@ -1,74 +1,96 @@ /* -------------------------------------------------------------------------- */ #include "py_aka_array.hh" /* -------------------------------------------------------------------------- */ #include #include /* -------------------------------------------------------------------------- */ #include #include /* -------------------------------------------------------------------------- */ namespace py = pybind11; /* -------------------------------------------------------------------------- */ namespace akantu { /* -------------------------------------------------------------------------- */ void register_group_manager(py::module & mod) { /* ------------------------------------------------------------------------ */ py::class_(mod, "NodeGroup") - .def("getNodes", - [](NodeGroup & self) -> decltype(auto) { return self.getNodes(); }, - py::return_value_policy::reference); + .def( + "getNodes", + [](NodeGroup & self) -> decltype(auto) { return self.getNodes(); }, + py::return_value_policy::reference) + .def("getName", &NodeGroup::getName); /* ------------------------------------------------------------------------ */ py::class_(mod, "ElementGroup") - .def("getNodeGroup", - [](ElementGroup & self) -> decltype(auto) { - return self.getNodeGroup(); - }, - py::return_value_policy::reference); + .def( + "getNodeGroup", + [](ElementGroup & self) -> decltype(auto) { + return self.getNodeGroup(); + }, + py::return_value_policy::reference) + .def("getName", &ElementGroup::getName); /* ------------------------------------------------------------------------ */ py::class_(mod, "GroupManager") - .def("getElementGroup", - [](GroupManager & self, const std::string & name) -> decltype(auto) { - return self.getElementGroup(name); - }, - py::return_value_policy::reference) + .def( + "getElementGroup", + [](GroupManager & self, const std::string & name) -> decltype(auto) { + return self.getElementGroup(name); + }, + py::return_value_policy::reference) .def("iterateElementGroups", [](GroupManager & self) -> decltype(auto) { std::vector> groups; for (auto & group : self.iterateElementGroups()) { groups.emplace_back(group); } return groups; }) .def("iterateNodeGroups", [](GroupManager & self) -> decltype(auto) { std::vector> groups; for (auto & group : self.iterateNodeGroups()) { groups.emplace_back(group); } return groups; }) .def("createNodeGroup", &GroupManager::createNodeGroup, py::return_value_policy::reference) .def("createElementGroup", py::overload_cast( &GroupManager::createElementGroup), py::return_value_policy::reference) .def("createGroupsFromMeshDataUInt", &GroupManager::createGroupsFromMeshData) .def("createElementGroupFromNodeGroup", &GroupManager::createElementGroupFromNodeGroup, py::arg("name"), py::arg("node_group"), py::arg("dimension") = _all_dimensions) - .def("getNodeGroup", - [](GroupManager & self, const std::string & name) -> decltype(auto) { - return self.getNodeGroup(name); - }, - py::return_value_policy::reference) + .def( + "getNodeGroup", + [](GroupManager & self, const std::string & name) -> decltype(auto) { + return self.getNodeGroup(name); + }, + py::return_value_policy::reference) + .def("nodeGroups", + [](GroupManager & self) { + std::vector groups; + for (auto & g : self.iterateNodeGroups()) { + groups.push_back(&g); + } + return groups; + }, py::return_value_policy::reference) + .def("elementGroups", + [](GroupManager & self) { + std::vector groups; + for (auto & g : self.iterateElementGroups()) { + groups.push_back(&g); + } + return groups; + }, py::return_value_policy::reference) .def("createBoundaryGroupFromGeometry", &GroupManager::createBoundaryGroupFromGeometry); } } // namespace akantu diff --git a/python/py_mesh.cc b/python/py_mesh.cc index 9724f2aae..fd0a6096f 100644 --- a/python/py_mesh.cc +++ b/python/py_mesh.cc @@ -1,60 +1,68 @@ /* -------------------------------------------------------------------------- */ #include "aka_config.hh" /* -------------------------------------------------------------------------- */ #include "py_aka_array.hh" /* -------------------------------------------------------------------------- */ #include #include /* -------------------------------------------------------------------------- */ #include /* -------------------------------------------------------------------------- */ namespace py = pybind11; /* -------------------------------------------------------------------------- */ namespace akantu { /* -------------------------------------------------------------------------- */ void register_mesh(py::module & mod) { py::class_(mod, "MeshData") .def( "getElementalDataUInt", [](MeshData & _this, const ID & name) -> ElementTypeMapArray & { return _this.getElementalData(name); }, py::return_value_policy::reference); py::class_(mod, "Mesh", py::multiple_inheritance()) .def(py::init(), py::arg("spatial_dimension"), py::arg("id") = "mesh", py::arg("memory_id") = 0) .def("read", &Mesh::read, py::arg("filename"), py::arg("mesh_io_type") = _miot_auto, "read the mesh from a file") - .def("getNodes", - [](Mesh & self) -> decltype(auto) { return self.getNodes(); }, - py::return_value_policy::reference) + .def( + "getNodes", + [](Mesh & self) -> decltype(auto) { return self.getNodes(); }, + py::return_value_policy::reference) .def("getNbNodes", &Mesh::getNbNodes) + .def( + "getConnectivity", + [](Mesh & self, const ElementType & type) -> decltype(auto) { + return self.getConnectivity(type); + }, + py::return_value_policy::reference) .def("distribute", [](Mesh & self) { self.distribute(); }) - .def("getNbElement", - [](Mesh & self, const UInt spatial_dimension, - const GhostType & ghost_type, const ElementKind & kind) { - return self.getNbElement(spatial_dimension, ghost_type, kind); - }, - py::arg("spatial_dimension") = _all_dimensions, - py::arg("ghost_type") = _not_ghost, - py::arg("kind") = _ek_not_defined) - .def("getNbElement", - [](Mesh & self, const ElementType & type, - const GhostType & ghost_type) { - return self.getNbElement(type, ghost_type); - }, - py::arg("type"), py::arg("ghost_type") = _not_ghost) + .def( + "getNbElement", + [](Mesh & self, const UInt spatial_dimension, + const GhostType & ghost_type, const ElementKind & kind) { + return self.getNbElement(spatial_dimension, ghost_type, kind); + }, + py::arg("spatial_dimension") = _all_dimensions, + py::arg("ghost_type") = _not_ghost, py::arg("kind") = _ek_not_defined) + .def( + "getNbElement", + [](Mesh & self, const ElementType & type, + const GhostType & ghost_type) { + return self.getNbElement(type, ghost_type); + }, + py::arg("type"), py::arg("ghost_type") = _not_ghost) .def_static("getSpatialDimension", [](ElementType & type) { return Mesh::getSpatialDimension(type); }); /* ------------------------------------------------------------------------ */ py::class_(mod, "MeshUtils") .def_static("buildFacets", &MeshUtils::buildFacets); } } // namespace akantu