Skip to content

Commit 636784a

Browse files
authored
[ModelPart] adding clear (#161)
* adding clear * adding Clear in Python * adding Clear in C * adding tests * fix C comment
1 parent 17a5486 commit 636784a

File tree

7 files changed

+70
-0
lines changed

7 files changed

+70
-0
lines changed

co_sim_io/c/co_sim_io_c.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,11 @@ CoSimIO_Element CoSimIO_ModelPart_GetElementById(CoSimIO_ModelPart I_ModelPart,
353353
return elem;
354354
}
355355

356+
void CoSimIO_ModelPart_Clear(CoSimIO_ModelPart I_ModelPart)
357+
{
358+
static_cast<CoSimIO::ModelPart*>(I_ModelPart.PtrCppModelPart)->Clear();
359+
}
360+
356361

357362
int CoSimIO_FreeModelPart(CoSimIO_ModelPart I_ModelPart)
358363
{

co_sim_io/c/co_sim_io_c_model_part.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ CoSimIO_Node CoSimIO_ModelPart_GetNodeByIndex(CoSimIO_ModelPart I_ModelPart, con
8282
CoSimIO_Node CoSimIO_ModelPart_GetNodeById(CoSimIO_ModelPart I_ModelPart, const int I_Id);
8383
CoSimIO_Element CoSimIO_ModelPart_GetElementByIndex(CoSimIO_ModelPart I_ModelPart, const int I_Index);
8484
CoSimIO_Element CoSimIO_ModelPart_GetElementById(CoSimIO_ModelPart I_ModelPart, const int I_Id);
85+
void CoSimIO_ModelPart_Clear(CoSimIO_ModelPart I_ModelPart);
8586

8687
CoSimIO_Node CoSimIO_ModelPart_CreateNewNode(
8788
CoSimIO_ModelPart I_ModelPart,

co_sim_io/impl/model_part.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,15 @@ class ModelPart
254254
rOStream << " Number of Elements: " << NumberOfElements() << std::endl;
255255
}
256256

257+
void Clear()
258+
{
259+
mElements.clear();
260+
mElements.shrink_to_fit();
261+
262+
mNodes.clear();
263+
mNodes.shrink_to_fit();
264+
}
265+
257266
private:
258267
std::string mName;
259268
NodesContainerType mNodes;

co_sim_io/python/model_part_to_python.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ void AddCoSimIOModelPartToPython(pybind11::module& m)
7373
.def_property_readonly("Elements", [](CoSimIO::ModelPart& I_ModelPart) {
7474
return py::make_iterator(I_ModelPart.ElementsBegin(), I_ModelPart.ElementsEnd());
7575
}, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
76+
.def("Clear", &CoSimIO::ModelPart::Clear)
7677
.def("__str__", [](const CoSimIO::ModelPart& I_ModelPart)
7778
{ std::stringstream ss; ss << I_ModelPart; return ss.str(); } )
7879
;

tests/co_sim_io/c/model_part/test_model_part.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ int main()
5353
COSIMIO_CHECK_INT_EQUAL(CoSimIO_ModelPart_NumberOfNodes(model_part), 4);
5454
COSIMIO_CHECK_INT_EQUAL(CoSimIO_ModelPart_NumberOfElements(model_part), 2);
5555

56+
/* remove all Nodes and Elements */
57+
CoSimIO_ModelPart_Clear(model_part);
58+
59+
COSIMIO_CHECK_INT_EQUAL(CoSimIO_ModelPart_NumberOfNodes(model_part), 0);
60+
COSIMIO_CHECK_INT_EQUAL(CoSimIO_ModelPart_NumberOfElements(model_part), 0);
61+
5662
CoSimIO_FreeModelPart(model_part);
5763

5864
return 0;

tests/co_sim_io/impl/test_model_part.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,31 @@ TEST_CASE("model_part_get_element")
375375
}
376376
}
377377

378+
TEST_CASE("model_part_clear")
379+
{
380+
ModelPart model_part("for_test");
381+
382+
const int node_ids[] = {2, 159, 61};
383+
const std::array<double, 3> node_coords = {1.0, -2.7, 9.44};
384+
model_part.CreateNewNode(node_ids[0], node_coords[0], node_coords[1], node_coords[2]);
385+
model_part.CreateNewNode(node_ids[1], node_coords[1], node_coords[2], node_coords[0]);
386+
model_part.CreateNewNode(node_ids[2], node_coords[2], node_coords[0], node_coords[1]);
387+
388+
model_part.CreateNewElement(15, CoSimIO::ElementType::Point2D, {node_ids[0]});
389+
model_part.CreateNewElement(73, CoSimIO::ElementType::Line2D2, {node_ids[1], node_ids[2]});
390+
model_part.CreateNewElement(47, CoSimIO::ElementType::Triangle3D3, {node_ids[1], node_ids[2], node_ids[0]});
391+
model_part.CreateNewElement(18, CoSimIO::ElementType::Point3D, {node_ids[1]});
392+
393+
REQUIRE_EQ(model_part.NumberOfNodes(), 3);
394+
REQUIRE_EQ(model_part.NumberOfElements(), 4);
395+
396+
// remove all Nodes and Elements
397+
model_part.Clear();
398+
399+
REQUIRE_EQ(model_part.NumberOfNodes(), 0);
400+
REQUIRE_EQ(model_part.NumberOfElements(), 0);
401+
}
402+
378403
TEST_CASE("model_part_ostream")
379404
{
380405
ModelPart model_part("for_test");

tests/co_sim_io/python/test_model_part.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,29 @@ def test_model_part_get_element(self):
241241
with self.assertRaisesRegex(Exception, 'Error: Element with Id 7 does not exist!'):
242242
model_part.GetElement(elem_id+1)
243243

244+
def test_model_part_clear(self):
245+
model_part = CoSimIO.ModelPart("for_test")
246+
247+
node_ids = [2, 159, 61]
248+
node_coords = [1.0, -2.7, 9.44]
249+
model_part.CreateNewNode(node_ids[0], node_coords[0], node_coords[1], node_coords[2])
250+
model_part.CreateNewNode(node_ids[1], node_coords[1], node_coords[2], node_coords[0])
251+
model_part.CreateNewNode(node_ids[2], node_coords[2], node_coords[0], node_coords[1])
252+
253+
model_part.CreateNewElement(15, CoSimIO.ElementType.Point2D, [node_ids[0]])
254+
model_part.CreateNewElement(188, CoSimIO.ElementType.Line2D2, [node_ids[0], node_ids[1]])
255+
model_part.CreateNewElement(161, CoSimIO.ElementType.Triangle2D3, [node_ids[0], node_ids[2], node_ids[1]])
256+
model_part.CreateNewElement(16, CoSimIO.ElementType.Point3D, [node_ids[0]])
257+
258+
self.assertEqual(model_part.NumberOfNodes(), 3)
259+
self.assertEqual(model_part.NumberOfElements(), 4)
260+
261+
# remove all Nodes and Elements
262+
model_part.Clear()
263+
264+
self.assertEqual(model_part.NumberOfNodes(), 0)
265+
self.assertEqual(model_part.NumberOfElements(), 0)
266+
244267
def test_print_model_part(self):
245268
model_part = CoSimIO.ModelPart("for_test")
246269

0 commit comments

Comments
 (0)