void sc_memory_check (int package) { sc_package_t *p; if (package == -1) { SC_CHECK_ABORT (default_rc_active == 0, "Leftover references (default)"); if (default_abort_mismatch) { SC_CHECK_ABORT (default_malloc_count == default_free_count, "Memory balance (default)"); } else if (default_malloc_count != default_free_count) { SC_GLOBAL_LERROR ("Memory balance (default)\n"); } } else { SC_ASSERT (sc_package_is_registered (package)); p = sc_packages + package; SC_CHECK_ABORTF (p->rc_active == 0, "Leftover references (%s)", p->name); if (p->abort_mismatch) { SC_CHECK_ABORTF (p->malloc_count == p->free_count, "Memory balance (%s)", p->name); } else if (p->malloc_count != p->free_count) { SC_GLOBAL_LERRORF ("Memory balance (%s)\n", p->name); } } }
int main (int argc, char **argv) { int mpiret, retval; int mpirank; const char *argbasename; char afilename[BUFSIZ]; p4est_topidx_t tnum_flips; p8est_tets_t *ptg; p8est_connectivity_t *connectivity; p8est_t *p8est; MPI_Comm mpicomm; mpiret = MPI_Init (&argc, &argv); SC_CHECK_MPI (mpiret); mpicomm = MPI_COMM_WORLD; mpiret = MPI_Comm_rank (mpicomm, &mpirank); sc_init (MPI_COMM_WORLD, 1, 1, NULL, SC_LP_DEFAULT); p4est_init (NULL, SC_LP_DEFAULT); if (argc != 2) { SC_GLOBAL_LERRORF ("Usage: %s <tetgen file base name>\n", argv[0]); sc_abort (); } argbasename = argv[1]; /* read tetgen nodes and tetrahedra from files */ ptg = p8est_tets_read (argbasename); SC_CHECK_ABORTF (ptg != NULL, "Failed to read tetgen %s", argbasename); P4EST_GLOBAL_STATISTICSF ("Read %d nodes and %d tets %s attributes\n", (int) ptg->nodes->elem_count / 3, (int) ptg->tets->elem_count / 4, ptg->tet_attributes != NULL ? "with" : "without"); /* flip orientation to right-handed */ tnum_flips = p8est_tets_make_righthanded (ptg); P4EST_GLOBAL_STATISTICSF ("Performed %ld orientation flip(s)\n", (long) tnum_flips); /* create a connectivity from the tet mesh and save it */ connectivity = p8est_connectivity_new_tets (ptg); if (mpirank == 0) { snprintf (afilename, BUFSIZ, "%s", "read_tetgen.p8c"); retval = p8est_connectivity_save (afilename, connectivity); SC_CHECK_ABORT (retval == 0, "Failed connectivity_save"); } /* create a forest and visualize */ p8est = p8est_new (mpicomm, connectivity, 0, NULL, NULL); snprintf (afilename, BUFSIZ, "%s", "read_tetgen"); p8est_vtk_write_file (p8est, NULL, afilename); /* clean up */ p8est_destroy (p8est); p8est_connectivity_destroy (connectivity); p8est_tets_destroy (ptg); sc_finalize (); mpiret = MPI_Finalize (); SC_CHECK_MPI (mpiret); return 0; }