Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions co_sim_io/c/co_sim_io_c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,13 @@ CoSimIO_Info CoSimIO_ImportMesh(
int** I_ElementTypes)
{
using namespace CoSimIO::Internals;
constexpr int coordinates_per_node = 3;
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemory<double>(I_NodalCoordinates, *I_NumberOfNodes));
std::unique_ptr<DataContainer<int>> p_container_conn(new DataContainerRawMemory<int>(I_ElementConnectivities, *I_NumberOfElementConnectivities));
std::unique_ptr<DataContainer<int>> p_container_types(new DataContainerRawMemory<int>(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<int>(p_container_coords->size());
*I_NumberOfNodes = static_cast<int>(p_container_coords->size()) / coordinates_per_node;
*I_NumberOfElementConnectivities = static_cast<int>(p_container_conn->size());
*I_NumberOfElements = static_cast<int>(p_container_types->size());
return info;
}
Expand All @@ -97,7 +99,8 @@ CoSimIO_Info CoSimIO_ExportMesh(
const int* O_ElementTypes)
{
using namespace CoSimIO::Internals;
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemoryReadOnly<double>(O_NodalCoordinates, O_NumberOfNodes));
constexpr int coordinates_per_node = 3;
std::unique_ptr<DataContainer<double>> p_container_coords(new DataContainerRawMemoryReadOnly<double>(O_NodalCoordinates, O_NumberOfNodes * coordinates_per_node));
std::unique_ptr<DataContainer<int>> p_container_conn(new DataContainerRawMemoryReadOnly<int>(O_ElementConnectivities, O_NumberOfElementConnectivities));
std::unique_ptr<DataContainer<int>> p_container_types(new DataContainerRawMemoryReadOnly<int>(O_ElementTypes, O_NumberOfElements));
return ConvertInfo(CoSimIO::ExportMesh(ConvertInfo(I_Info), *p_container_coords, *p_container_conn, *p_container_types));
Expand Down
36 changes: 36 additions & 0 deletions tests/integration_tutorials/c/import_mesh.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down