Nektar++
Loading...
Searching...
No Matches
Functions
MeshGraph.cpp File Reference
#include <LibUtilities/Python/NekPyConfig.hpp>
#include <SpatialDomains/MeshGraph.h>
#include <SpatialDomains/MeshGraphIO.h>
#include <SpatialDomains/Movement/Movement.h>
#include <SpatialDomains/Python/SpatialDomains.h>

Go to the source code of this file.

Functions

CompositeSharedPtr Composite_Init (py::list geometries)
 
template<typename T >
void MeshGraph_AddGeom (MeshGraphSharedPtr graph, unique_ptr_objpool< T > geom)
 
template<typename T >
void MeshGraph_GeomMapView (py::module_ &m, const std::string &name)
 
void export_MeshGraph (py::module &m)
 MeshGraph exports.
 

Function Documentation

◆ Composite_Init()

CompositeSharedPtr Composite_Init ( py::list  geometries)

Definition at line 48 of file Python/MeshGraph.cpp.

49{
50 CompositeSharedPtr composite = std::make_shared<Composite>();
51 composite->m_geomVec.clear();
52 for (int i = 0; i < py::len(geometries); i++)
53 {
54 composite->m_geomVec.emplace_back(py::cast<Geometry *>(geometries[i]));
55 }
56 return composite;
57}
std::shared_ptr< Composite > CompositeSharedPtr
Definition MeshGraph.h:178

Referenced by export_MeshGraph().

◆ export_MeshGraph()

void export_MeshGraph ( py::module &  m)

MeshGraph exports.

Definition at line 116 of file Python/MeshGraph.cpp.

117{
118 py::bind_map<LibUtilities::FieldMetaDataMap>(m, "FieldMetaDataMap");
119 py::bind_vector<std::vector<Geometry *>>(m, "GeometryList");
120
121 py::class_<Composite, std::shared_ptr<Composite>>(m, "Composite")
122 .def(py::init<>())
123 .def(py::init<>(&Composite_Init))
124 .def_readwrite("geometries", &Composite::m_geomVec);
125
126 py::bind_map<CurveMap>(m, "CurveMap");
127 py::bind_map<CompositeMap>(m, "CompositeMap");
128 py::bind_map<std::map<int, CompositeMap>>(m, "DomainMap");
129
130 MeshGraph_GeomMapView<PointGeom>(m, "PointGeomView");
131 MeshGraph_GeomMapView<SegGeom>(m, "SegGeomView");
132 MeshGraph_GeomMapView<TriGeom>(m, "TriGeomView");
133 MeshGraph_GeomMapView<QuadGeom>(m, "QuadGeomView");
134 MeshGraph_GeomMapView<TetGeom>(m, "TetGeomView");
135 MeshGraph_GeomMapView<PyrGeom>(m, "PyrGeomView");
136 MeshGraph_GeomMapView<PrismGeom>(m, "PrismGeomView");
137 MeshGraph_GeomMapView<HexGeom>(m, "HexGeomView");
138
139 py::class_<MeshGraph, std::shared_ptr<MeshGraph>>(m, "MeshGraph")
140 .def(py::init<>())
141
142 .def("Empty", &MeshGraph::Empty)
143
144 .def("GetMeshDimension", &MeshGraph::GetMeshDimension)
145 .def("GetSpaceDimension", &MeshGraph::GetSpaceDimension)
146 .def("SetMeshDimension", &MeshGraph::SetMeshDimension)
147 .def("SetSpaceDimension", &MeshGraph::SetSpaceDimension)
148
149 .def_property_readonly("points", &MeshGraph::GetGeomMap<PointGeom>,
150 py::return_value_policy::reference_internal)
151 .def_property_readonly("segments", &MeshGraph::GetGeomMap<SegGeom>,
152 py::return_value_policy::reference_internal)
153 .def_property_readonly("quads", &MeshGraph::GetGeomMap<QuadGeom>,
154 py::return_value_policy::reference_internal)
155 .def_property_readonly("tris", &MeshGraph::GetGeomMap<TriGeom>,
156 py::return_value_policy::reference_internal)
157 .def_property_readonly("tets", &MeshGraph::GetGeomMap<TetGeom>,
158 py::return_value_policy::reference_internal)
159 .def_property_readonly("pyrs", &MeshGraph::GetGeomMap<PyrGeom>,
160 py::return_value_policy::reference_internal)
161 .def_property_readonly("prisms", &MeshGraph::GetGeomMap<PrismGeom>,
162 py::return_value_policy::reference_internal)
163 .def_property_readonly("hexes", &MeshGraph::GetGeomMap<HexGeom>,
164 py::return_value_policy::reference_internal)
165
166 .def("AddGeom", &MeshGraph_AddGeom<PointGeom>)
167 .def("AddGeom", &MeshGraph_AddGeom<SegGeom>)
168 .def("AddGeom", &MeshGraph_AddGeom<TriGeom>)
169 .def("AddGeom", &MeshGraph_AddGeom<QuadGeom>)
170
171 .def("GetVertex", &MeshGraph::GetPointGeom,
172 py::return_value_policy::reference_internal)
173 .def("GetPointGeom", &MeshGraph::GetPointGeom,
174 py::return_value_policy::reference_internal)
175 .def("GetSegGeom", &MeshGraph::GetSegGeom,
176 py::return_value_policy::reference_internal)
177 .def("GetTriGeom", &MeshGraph::GetTriGeom,
178 py::return_value_policy::reference_internal)
179 .def("GetQuadGeom", &MeshGraph::GetQuadGeom,
180 py::return_value_policy::reference_internal)
181 .def("GetHexGeom", &MeshGraph::GetHexGeom,
182 py::return_value_policy::reference_internal)
183 .def("GetPrismGeom", &MeshGraph::GetPrismGeom,
184 py::return_value_policy::reference_internal)
185 .def("GetTetGeom", &MeshGraph::GetTetGeom,
186 py::return_value_policy::reference_internal)
187 .def("GetPyrGeom", &MeshGraph::GetPyrGeom,
188 py::return_value_policy::reference_internal)
189
190 //.def("AddGeom", &MeshGraph::AddGeom<PointGeom>)
191 .def("GetCurvedEdges", &MeshGraph::GetCurvedEdges,
192 py::return_value_policy::reference_internal)
193 .def("GetCurvedFaces", &MeshGraph::GetCurvedFaces,
194 py::return_value_policy::reference_internal)
195 .def("GetComposites", &MeshGraph::GetComposites,
196 py::return_value_policy::reference_internal)
197 .def<std::map<int, CompositeMap> &(MeshGraph::*)()>(
198 "GetDomain", &MeshGraph::GetDomain,
199 py::return_value_policy::reference_internal)
200
201 .def("GetMovement", &MeshGraph::GetMovement,
202 py::return_value_policy::reference_internal)
203
204 .def("GetNumElements", &MeshGraph::GetNumElements)
205
206 .def("SetExpansionInfosToEvenlySpacedPoints",
208 .def("SetExpansionInfosToPolyOrder",
210 .def("SetExpansionInfosToPointOrder",
212}
CompositeSharedPtr Composite_Init(py::list geometries)
Base class for a spectral/hp element mesh.
Definition MeshGraph.h:290
TriGeom * GetTriGeom(int id)
Returns triangle id from the MeshGraph.
Definition MeshGraph.h:506
int GetMeshDimension()
Dimension of the mesh (can be a 1D curve in 3D space).
Definition MeshGraph.h:317
std::map< int, std::map< int, CompositeSharedPtr > > & GetDomain()
Definition MeshGraph.h:383
void SetExpansionInfoToEvenlySpacedPoints(int npoints=0)
Sets expansions to have equispaced points.
std::map< int, CompositeSharedPtr > & GetComposites()
Definition MeshGraph.h:373
PrismGeom * GetPrismGeom(int id)
Returns prism id from the MeshGraph.
Definition MeshGraph.h:538
SegGeom * GetSegGeom(int id)
Returns segment id from the MeshGraph.
Definition MeshGraph.h:498
void SetExpansionInfoToPointOrder(int npts)
Reset expansion to have specified point order npts.
void Empty(int dim, int space)
Definition MeshGraph.h:295
HexGeom * GetHexGeom(int id)
Returns hex id from the MeshGraph.
Definition MeshGraph.h:546
int GetSpaceDimension()
Dimension of the space (can be a 1D curve in 3D space).
Definition MeshGraph.h:323
PyrGeom * GetPyrGeom(int id)
Returns pyramid id from the MeshGraph.
Definition MeshGraph.h:530
void SetExpansionInfoToNumModes(int nmodes)
Reset expansion to have specified polynomial order nmodes.
MovementSharedPtr & GetMovement()
Definition MeshGraph.h:789
PointGeom * GetPointGeom(int id)
Returns vertex id from the MeshGraph.
Definition MeshGraph.h:490
QuadGeom * GetQuadGeom(int id)
Returns quadrilateral id from the MeshGraph.
Definition MeshGraph.h:514
TetGeom * GetTetGeom(int id)
Returns tetrahedron id from the MeshGraph.
Definition MeshGraph.h:522
std::vector< Geometry * > m_geomVec
Definition MeshGraph.h:175

References Composite_Init(), Nektar::SpatialDomains::MeshGraph::Empty(), Nektar::SpatialDomains::MeshGraph::GetComposites(), Nektar::SpatialDomains::MeshGraph::GetCurvedEdges(), Nektar::SpatialDomains::MeshGraph::GetCurvedFaces(), Nektar::SpatialDomains::MeshGraph::GetDomain(), Nektar::SpatialDomains::MeshGraph::GetHexGeom(), Nektar::SpatialDomains::MeshGraph::GetMeshDimension(), Nektar::SpatialDomains::MeshGraph::GetMovement(), Nektar::SpatialDomains::MeshGraph::GetNumElements(), Nektar::SpatialDomains::MeshGraph::GetPointGeom(), Nektar::SpatialDomains::MeshGraph::GetPrismGeom(), Nektar::SpatialDomains::MeshGraph::GetPyrGeom(), Nektar::SpatialDomains::MeshGraph::GetQuadGeom(), Nektar::SpatialDomains::MeshGraph::GetSegGeom(), Nektar::SpatialDomains::MeshGraph::GetSpaceDimension(), Nektar::SpatialDomains::MeshGraph::GetTetGeom(), Nektar::SpatialDomains::MeshGraph::GetTriGeom(), Nektar::SpatialDomains::Composite::m_geomVec, Nektar::SpatialDomains::MeshGraph::SetExpansionInfoToEvenlySpacedPoints(), Nektar::SpatialDomains::MeshGraph::SetExpansionInfoToNumModes(), Nektar::SpatialDomains::MeshGraph::SetExpansionInfoToPointOrder(), Nektar::SpatialDomains::MeshGraph::SetMeshDimension(), and Nektar::SpatialDomains::MeshGraph::SetSpaceDimension().

Referenced by PYBIND11_MODULE().

◆ MeshGraph_AddGeom()

template<typename T >
void MeshGraph_AddGeom ( MeshGraphSharedPtr  graph,
unique_ptr_objpool< T >  geom 
)

Definition at line 60 of file Python/MeshGraph.cpp.

61{
62 auto id = geom->GetGlobalID();
63 graph->AddGeom(id, std::move(geom));
64}

◆ MeshGraph_GeomMapView()

template<typename T >
void MeshGraph_GeomMapView ( py::module_ &  m,
const std::string &  name 
)

Definition at line 67 of file Python/MeshGraph.cpp.

68{
69 using MapView = GeomMapView<T>;
70
71 py::class_<MapView>(m, name.c_str())
72 .def("__getitem__", &MapView::at, py::return_value_policy::reference)
73 .def("__len__", &MapView::size)
74 .def(
75 "__iter__",
76 [](const MapView &self) {
77 return py::make_key_iterator(self.begin(), self.end());
78 },
79 py::keep_alive<0, 1>()) // keep object alive while iterating
80 .def(
81 "items",
82 [](const MapView &self) {
83 return py::make_iterator(self.begin(), self.end());
84 },
85 py::keep_alive<0, 1>())
86 .def("values",
87 [](const MapView &self) {
88 py::list result;
89 for (const auto &[_, ptr] : self)
90 {
91 result.append(ptr);
92 }
93 return result;
94 })
95 .def("keys",
96 [](const MapView &self) {
97 py::list result;
98 for (const auto &[id, _] : self)
99 {
100 result.append(id);
101 }
102 return result;
103 })
104 .def(
105 "get",
106 [](const MapView &self, int id) -> T * {
107 auto it = self.find(id);
108 return (*it).second;
109 },
110 py::return_value_policy::reference);
111}