diff --git a/co_sim_io/c/co_sim_io_c.cpp b/co_sim_io/c/co_sim_io_c.cpp index 21e7b49d..e3c94bdd 100644 --- a/co_sim_io/c/co_sim_io_c.cpp +++ b/co_sim_io/c/co_sim_io_c.cpp @@ -78,11 +78,13 @@ CoSimIO_Info CoSimIO_ImportMesh( int** I_ElementTypes) { using namespace CoSimIO::Internals; + constexpr int coordinates_per_node = 3; std::unique_ptr> p_container_coords(new DataContainerRawMemory(I_NodalCoordinates, *I_NumberOfNodes)); std::unique_ptr> p_container_conn(new DataContainerRawMemory(I_ElementConnectivities, *I_NumberOfElementConnectivities)); std::unique_ptr> p_container_types(new DataContainerRawMemory(I_ElementTypes, *I_NumberOfElements)); auto info = ConvertInfo(CoSimIO::ImportMesh(ConvertInfo(I_Info), *p_container_coords, *p_container_conn, *p_container_types)); - *I_NumberOfNodes = static_cast(p_container_coords->size()); + *I_NumberOfNodes = static_cast(p_container_coords->size()) / coordinates_per_node; + *I_NumberOfElementConnectivities = static_cast(p_container_conn->size()); *I_NumberOfElements = static_cast(p_container_types->size()); return info; } @@ -97,7 +99,8 @@ CoSimIO_Info CoSimIO_ExportMesh( const int* O_ElementTypes) { using namespace CoSimIO::Internals; - std::unique_ptr> p_container_coords(new DataContainerRawMemoryReadOnly(O_NodalCoordinates, O_NumberOfNodes)); + constexpr int coordinates_per_node = 3; + std::unique_ptr> p_container_coords(new DataContainerRawMemoryReadOnly(O_NodalCoordinates, O_NumberOfNodes * coordinates_per_node)); std::unique_ptr> p_container_conn(new DataContainerRawMemoryReadOnly(O_ElementConnectivities, O_NumberOfElementConnectivities)); std::unique_ptr> p_container_types(new DataContainerRawMemoryReadOnly(O_ElementTypes, O_NumberOfElements)); return ConvertInfo(CoSimIO::ExportMesh(ConvertInfo(I_Info), *p_container_coords, *p_container_conn, *p_container_types)); diff --git a/tests/integration_tutorials/c/import_mesh.c b/tests/integration_tutorials/c/import_mesh.c index 653fe6fc..71de4b43 100644 --- a/tests/integration_tutorials/c/import_mesh.c +++ b/tests/integration_tutorials/c/import_mesh.c @@ -55,6 +55,42 @@ int main() CoSimIO_FreeInfo(import_info); CoSimIO_FreeInfo(import_settings); + // Checking the imported mesh + int expected_number_of_nodes=6; + double expected_nodal_coordinates[] = { + 0.0, 2.5, 1.0, /*0*/ + 2.0, 0.0, 1.5, /*1*/ + 2.0, 2.5, 1.5, /*2*/ + 4.0, 2.5, 1.7, /*3*/ + 4.0, 0.0, 1.7, /*4*/ + 6.0, 0.0, 1.8 /*5*/ + }; + + int expected_number_of_elements_connectivities = 12; + int expected_elements_connectivities[] = { + 0, 1, 2, /*1*/ + 1, 3, 2, /*2*/ + 1, 4, 3, /*3*/ + 3, 4, 5, /*4*/ + }; + + int expected_number_of_elements = 4; + int expected_elements_types[] = {5,5,5,5}; // VTK_TRIANGLE + + COSIMIO_CHECK_EQUAL(expected_number_of_nodes, number_of_nodes); + COSIMIO_CHECK_EQUAL(expected_number_of_elements_connectivities, number_of_elements_connectivities); + COSIMIO_CHECK_EQUAL(expected_number_of_elements, number_of_elements); + + for(int i = 0 ; i < number_of_nodes * 3 ; i++) + COSIMIO_CHECK_EQUAL(expected_nodal_coordinates[i], nodal_coordinates[i]); + + for(int i = 0 ; i < number_of_elements_connectivities ; i++) + COSIMIO_CHECK_EQUAL(expected_elements_connectivities[i], elements_connectivities[i]); + + for(int i = 0 ; i < number_of_elements ; i++) + COSIMIO_CHECK_EQUAL(expected_elements_types[i], elements_types[i]); + + // Disconnecting at the end CoSimIO_Info disconnect_info = CoSimIO_Disconnect(connection_settings); // disconnect afterwards COSIMIO_CHECK_EQUAL(CoSimIO_Info_GetInt(disconnect_info, "connection_status"), CoSimIO_Disconnected);