Skip to content

Commit 9dbc84f

Browse files
pooyan-dadvandphilbuchersimscale
authored andcommitted
Fix c import mesh (#66)
* Fixing coordinates size * Checking imported mesh
1 parent bf2e437 commit 9dbc84f

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

co_sim_io/c/co_sim_io_c.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,13 @@ CoSimIO_Info CoSimIO_ImportMesh(
7878
int** I_ElementTypes)
7979
{
8080
using namespace CoSimIO::Internals;
81+
constexpr int coordinates_per_node = 3;
8182
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemory<double>(I_NodalCoordinates, *I_NumberOfNodes));
8283
std::unique_ptr<DataContainer<int>> p_container_conn(new DataContainerRawMemory<int>(I_ElementConnectivities, *I_NumberOfElementConnectivities));
8384
std::unique_ptr<DataContainer<int>> p_container_types(new DataContainerRawMemory<int>(I_ElementTypes, *I_NumberOfElements));
8485
auto info = ConvertInfo(CoSimIO::ImportMesh(ConvertInfo(I_Info), *p_container_coords, *p_container_conn, *p_container_types));
85-
*I_NumberOfNodes = static_cast<int>(p_container_coords->size());
86+
*I_NumberOfNodes = static_cast<int>(p_container_coords->size()) / coordinates_per_node;
87+
*I_NumberOfElementConnectivities = static_cast<int>(p_container_conn->size());
8688
*I_NumberOfElements = static_cast<int>(p_container_types->size());
8789
return info;
8890
}
@@ -97,7 +99,8 @@ CoSimIO_Info CoSimIO_ExportMesh(
9799
const int* O_ElementTypes)
98100
{
99101
using namespace CoSimIO::Internals;
100-
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemoryReadOnly<double>(O_NodalCoordinates, O_NumberOfNodes));
102+
constexpr int coordinates_per_node = 3;
103+
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemoryReadOnly<double>(O_NodalCoordinates, O_NumberOfNodes * coordinates_per_node));
101104
std::unique_ptr<DataContainer<int>> p_container_conn(new DataContainerRawMemoryReadOnly<int>(O_ElementConnectivities, O_NumberOfElementConnectivities));
102105
std::unique_ptr<DataContainer<int>> p_container_types(new DataContainerRawMemoryReadOnly<int>(O_ElementTypes, O_NumberOfElements));
103106
return ConvertInfo(CoSimIO::ExportMesh(ConvertInfo(I_Info), *p_container_coords, *p_container_conn, *p_container_types));

tests/integration_tutorials/c/import_mesh.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,42 @@ int main()
5555
CoSimIO_FreeInfo(import_info);
5656
CoSimIO_FreeInfo(import_settings);
5757

58+
// Checking the imported mesh
59+
int expected_number_of_nodes=6;
60+
double expected_nodal_coordinates[] = {
61+
0.0, 2.5, 1.0, /*0*/
62+
2.0, 0.0, 1.5, /*1*/
63+
2.0, 2.5, 1.5, /*2*/
64+
4.0, 2.5, 1.7, /*3*/
65+
4.0, 0.0, 1.7, /*4*/
66+
6.0, 0.0, 1.8 /*5*/
67+
};
68+
69+
int expected_number_of_elements_connectivities = 12;
70+
int expected_elements_connectivities[] = {
71+
0, 1, 2, /*1*/
72+
1, 3, 2, /*2*/
73+
1, 4, 3, /*3*/
74+
3, 4, 5, /*4*/
75+
};
76+
77+
int expected_number_of_elements = 4;
78+
int expected_elements_types[] = {5,5,5,5}; // VTK_TRIANGLE
79+
80+
COSIMIO_CHECK_EQUAL(expected_number_of_nodes, number_of_nodes);
81+
COSIMIO_CHECK_EQUAL(expected_number_of_elements_connectivities, number_of_elements_connectivities);
82+
COSIMIO_CHECK_EQUAL(expected_number_of_elements, number_of_elements);
83+
84+
for(int i = 0 ; i < number_of_nodes * 3 ; i++)
85+
COSIMIO_CHECK_EQUAL(expected_nodal_coordinates[i], nodal_coordinates[i]);
86+
87+
for(int i = 0 ; i < number_of_elements_connectivities ; i++)
88+
COSIMIO_CHECK_EQUAL(expected_elements_connectivities[i], elements_connectivities[i]);
89+
90+
for(int i = 0 ; i < number_of_elements ; i++)
91+
COSIMIO_CHECK_EQUAL(expected_elements_types[i], elements_types[i]);
92+
93+
5894
// Disconnecting at the end
5995
CoSimIO_Info disconnect_info = CoSimIO_Disconnect(connection_settings); // disconnect afterwards
6096
COSIMIO_CHECK_EQUAL(CoSimIO_Info_GetInt(disconnect_info, "connection_status"), CoSimIO_Disconnected);

0 commit comments

Comments
 (0)