int HYPRE_SStructGraphDestroy( HYPRE_SStructGraph graph ) { int ierr = 0; int nparts; hypre_SStructPGrid **pgrids; hypre_SStructStencil ***stencils; int nUventries; int *iUventries; hypre_SStructUVEntry **Uventries; hypre_SStructUVEntry *Uventry; int nvars; int part, var, i; if (graph) { hypre_SStructGraphRefCount(graph) --; if (hypre_SStructGraphRefCount(graph) == 0) { nparts = hypre_SStructGraphNParts(graph); pgrids = hypre_SStructGraphPGrids(graph); stencils = hypre_SStructGraphStencils(graph); nUventries = hypre_SStructGraphNUVEntries(graph); iUventries = hypre_SStructGraphIUVEntries(graph); Uventries = hypre_SStructGraphUVEntries(graph); for (part = 0; part < nparts; part++) { nvars = hypre_SStructPGridNVars(pgrids[part]); for (var = 0; var < nvars; var++) { HYPRE_SStructStencilDestroy(stencils[part][var]); } hypre_TFree(stencils[part]); } HYPRE_SStructGridDestroy(hypre_SStructGraphGrid(graph)); hypre_TFree(stencils); for (i = 0; i < nUventries; i++) { Uventry = Uventries[iUventries[i]]; if (Uventry) { hypre_TFree(hypre_SStructUVEntryUEntries(Uventry)); hypre_TFree(Uventry); } Uventries[iUventries[i]] = NULL; } hypre_TFree(iUventries); hypre_TFree(Uventries); hypre_TFree(graph); } } return ierr; }
HYPRE_Int HYPRE_SStructGraphDestroy( HYPRE_SStructGraph graph ) { HYPRE_Int nparts; hypre_SStructPGrid **pgrids; hypre_SStructStencil ***stencils; HYPRE_Int *fem_nsparse; HYPRE_Int **fem_sparse_i; HYPRE_Int **fem_sparse_j; HYPRE_Int **fem_entries; HYPRE_Int nUventries; HYPRE_Int *iUventries; hypre_SStructUVEntry **Uventries; hypre_SStructUVEntry *Uventry; HYPRE_Int nvars; HYPRE_Int part, var, i; if (graph) { hypre_SStructGraphRefCount(graph) --; if (hypre_SStructGraphRefCount(graph) == 0) { nparts = hypre_SStructGraphNParts(graph); pgrids = hypre_SStructGraphPGrids(graph); stencils = hypre_SStructGraphStencils(graph); fem_nsparse = hypre_SStructGraphFEMNSparse(graph); fem_sparse_i = hypre_SStructGraphFEMSparseJ(graph); fem_sparse_j = hypre_SStructGraphFEMSparseI(graph); fem_entries = hypre_SStructGraphFEMEntries(graph); nUventries = hypre_SStructGraphNUVEntries(graph); iUventries = hypre_SStructGraphIUVEntries(graph); Uventries = hypre_SStructGraphUVEntries(graph); for (part = 0; part < nparts; part++) { nvars = hypre_SStructPGridNVars(pgrids[part]); for (var = 0; var < nvars; var++) { HYPRE_SStructStencilDestroy(stencils[part][var]); } hypre_TFree(stencils[part]); hypre_TFree(fem_sparse_i[part]); hypre_TFree(fem_sparse_j[part]); hypre_TFree(fem_entries[part]); } HYPRE_SStructGridDestroy(hypre_SStructGraphGrid(graph)); HYPRE_SStructGridDestroy(hypre_SStructGraphDomainGrid(graph)); hypre_TFree(stencils); hypre_TFree(fem_nsparse); hypre_TFree(fem_sparse_i); hypre_TFree(fem_sparse_j); hypre_TFree(fem_entries); /* RDF: THREAD? */ for (i = 0; i < nUventries; i++) { Uventry = Uventries[iUventries[i]]; if (Uventry) { hypre_TFree(hypre_SStructUVEntryUEntries(Uventry)); hypre_TFree(Uventry); } Uventries[iUventries[i]] = NULL; } hypre_TFree(iUventries); hypre_TFree(Uventries); hypre_TFree(graph); } } return hypre_error_flag; }