int HYPRE_SStructGraphCreate( MPI_Comm comm, HYPRE_SStructGrid grid, HYPRE_SStructGraph *graph_ptr ) { int ierr = 0; hypre_SStructGraph *graph; int nparts; hypre_SStructStencil ***stencils; hypre_SStructPGrid **pgrids; int nvars; int part, var; graph = hypre_TAlloc(hypre_SStructGraph, 1); hypre_SStructGraphComm(graph) = comm; hypre_SStructGraphNDim(graph) = hypre_SStructGridNDim(grid); hypre_SStructGridRef(grid, &hypre_SStructGraphGrid(graph)); nparts = hypre_SStructGridNParts(grid); hypre_SStructGraphNParts(graph) = nparts; pgrids = hypre_SStructGridPGrids(grid); hypre_SStructGraphPGrids(graph) = pgrids; stencils = hypre_TAlloc(hypre_SStructStencil **, nparts); for (part = 0; part < nparts; part++) { nvars = hypre_SStructPGridNVars(pgrids[part]); stencils[part] = hypre_TAlloc(hypre_SStructStencil *, nvars); for (var = 0; var < nvars; var++) { stencils[part][var] = NULL; } } hypre_SStructGraphStencils(graph) = stencils; hypre_SStructGraphNUVEntries(graph) = 0; hypre_SStructGraphAUVEntries(graph) = 0; hypre_SStructGraphIUVEntries(graph) = NULL; hypre_SStructGraphUVEntries(graph) = NULL; hypre_SStructGraphTotUEntries(graph) = 0; hypre_SStructGraphRefCount(graph) = 1; hypre_SStructGraphObjectType(graph) = HYPRE_SSTRUCT; *graph_ptr = graph; return ierr; }
HYPRE_Int HYPRE_SStructGridDestroy( HYPRE_SStructGrid grid ) { HYPRE_Int nparts; hypre_SStructPGrid **pgrids; HYPRE_Int *nneighbors; hypre_SStructNeighbor **neighbors; hypre_Index **nbor_offsets; HYPRE_Int **nvneighbors; hypre_SStructNeighbor ***vneighbors; hypre_SStructCommInfo **vnbor_comm_info; HYPRE_Int vnbor_ncomms; HYPRE_Int *fem_nvars; HYPRE_Int **fem_vars; hypre_Index **fem_offsets; hypre_BoxManager ***managers; hypre_BoxManager ***nbor_managers; HYPRE_Int nvars; HYPRE_Int part, var, i; if (grid) { hypre_SStructGridRefCount(grid) --; if (hypre_SStructGridRefCount(grid) == 0) { nparts = hypre_SStructGridNParts(grid); pgrids = hypre_SStructGridPGrids(grid); nneighbors = hypre_SStructGridNNeighbors(grid); neighbors = hypre_SStructGridNeighbors(grid); nbor_offsets = hypre_SStructGridNborOffsets(grid); nvneighbors = hypre_SStructGridNVNeighbors(grid); vneighbors = hypre_SStructGridVNeighbors(grid); vnbor_comm_info = hypre_SStructGridVNborCommInfo(grid); vnbor_ncomms = hypre_SStructGridVNborNComms(grid); fem_nvars = hypre_SStructGridFEMNVars(grid); fem_vars = hypre_SStructGridFEMVars(grid); fem_offsets = hypre_SStructGridFEMOffsets(grid); managers = hypre_SStructGridBoxManagers(grid); nbor_managers = hypre_SStructGridNborBoxManagers(grid); for (part = 0; part < nparts; part++) { nvars = hypre_SStructPGridNVars(pgrids[part]); for (var = 0; var < nvars; var++) { hypre_TFree(vneighbors[part][var]); hypre_BoxManDestroy(managers[part][var]); hypre_BoxManDestroy(nbor_managers[part][var]); } hypre_TFree(neighbors[part]); hypre_TFree(nbor_offsets[part]); hypre_TFree(nvneighbors[part]); hypre_TFree(vneighbors[part]); hypre_SStructPGridDestroy(pgrids[part]); hypre_TFree(fem_vars[part]); hypre_TFree(fem_offsets[part]); hypre_TFree(managers[part]); hypre_TFree(nbor_managers[part]); } for (i = 0; i < vnbor_ncomms; i++) { hypre_CommInfoDestroy( hypre_SStructCommInfoCommInfo(vnbor_comm_info[i])); hypre_TFree(vnbor_comm_info[i]); } hypre_TFree(vnbor_comm_info); hypre_TFree(pgrids); hypre_TFree(nneighbors); hypre_TFree(neighbors); hypre_TFree(nbor_offsets); hypre_TFree(fem_nvars); hypre_TFree(fem_vars); hypre_TFree(fem_offsets); hypre_TFree(nvneighbors); hypre_TFree(vneighbors); hypre_TFree(vnbor_comm_info); hypre_TFree(managers); hypre_TFree(nbor_managers); hypre_TFree(grid); } } return hypre_error_flag; }
HYPRE_Int HYPRE_SStructGridCreate( MPI_Comm comm, HYPRE_Int ndim, HYPRE_Int nparts, HYPRE_SStructGrid *grid_ptr ) { hypre_SStructGrid *grid; hypre_SStructPGrid **pgrids; hypre_SStructPGrid *pgrid; HYPRE_Int *nneighbors; hypre_SStructNeighbor **neighbors; hypre_Index **nbor_offsets; HYPRE_Int *fem_nvars; HYPRE_Int **fem_vars; hypre_Index **fem_offsets; HYPRE_Int i; grid = hypre_TAlloc(hypre_SStructGrid, 1); hypre_SStructGridComm(grid) = comm; hypre_SStructGridNDim(grid) = ndim; hypre_SStructGridNParts(grid) = nparts; pgrids = hypre_TAlloc(hypre_SStructPGrid *, nparts); nneighbors = hypre_TAlloc(HYPRE_Int, nparts); neighbors = hypre_TAlloc(hypre_SStructNeighbor *, nparts); nbor_offsets = hypre_TAlloc(hypre_Index *, nparts); fem_nvars = hypre_TAlloc(HYPRE_Int, nparts); fem_vars = hypre_TAlloc(HYPRE_Int *, nparts); fem_offsets = hypre_TAlloc(hypre_Index *, nparts); for (i = 0; i < nparts; i++) { hypre_SStructPGridCreate(comm, ndim, &pgrid); pgrids[i] = pgrid; nneighbors[i] = 0; neighbors[i] = NULL; nbor_offsets[i] = NULL; fem_nvars[i] = 0; fem_vars[i] = NULL; fem_offsets[i] = NULL; } hypre_SStructGridPGrids(grid) = pgrids; hypre_SStructGridNNeighbors(grid) = nneighbors; hypre_SStructGridNeighbors(grid) = neighbors; hypre_SStructGridNborOffsets(grid) = nbor_offsets; hypre_SStructGridNUCVars(grid) = 0; hypre_SStructGridUCVars(grid) = NULL; hypre_SStructGridFEMNVars(grid) = fem_nvars; hypre_SStructGridFEMVars(grid) = fem_vars; hypre_SStructGridFEMOffsets(grid) = fem_offsets; hypre_SStructGridBoxManagers(grid) = NULL; hypre_SStructGridNborBoxManagers(grid) = NULL; /* miscellaneous */ hypre_SStructGridLocalSize(grid) = 0; hypre_SStructGridGlobalSize(grid) = 0; hypre_SStructGridRefCount(grid) = 1; /* GEC0902 ghost addition to the grid */ hypre_SStructGridGhlocalSize(grid) = 0; *grid_ptr = grid; return hypre_error_flag; }
HYPRE_Int HYPRE_SStructGraphCreate( MPI_Comm comm, HYPRE_SStructGrid grid, HYPRE_SStructGraph *graph_ptr ) { hypre_SStructGraph *graph; HYPRE_Int nparts; hypre_SStructStencil ***stencils; hypre_SStructPGrid **pgrids; HYPRE_Int *fem_nsparse; HYPRE_Int **fem_sparse_i; HYPRE_Int **fem_sparse_j; HYPRE_Int **fem_entries; HYPRE_Int nvars; HYPRE_Int part, var; graph = hypre_TAlloc(hypre_SStructGraph, 1); hypre_SStructGraphComm(graph) = comm; hypre_SStructGraphNDim(graph) = hypre_SStructGridNDim(grid); hypre_SStructGridRef(grid, &hypre_SStructGraphGrid(graph)); hypre_SStructGridRef(grid, &hypre_SStructGraphDomainGrid(graph)); nparts = hypre_SStructGridNParts(grid); hypre_SStructGraphNParts(graph) = nparts; pgrids = hypre_SStructGridPGrids(grid); stencils = hypre_TAlloc(hypre_SStructStencil **, nparts); fem_nsparse = hypre_TAlloc(HYPRE_Int, nparts); fem_sparse_i = hypre_TAlloc(HYPRE_Int *, nparts); fem_sparse_j = hypre_TAlloc(HYPRE_Int *, nparts); fem_entries = hypre_TAlloc(HYPRE_Int *, nparts); for (part = 0; part < nparts; part++) { nvars = hypre_SStructPGridNVars(pgrids[part]); stencils[part] = hypre_TAlloc(hypre_SStructStencil *, nvars); fem_nsparse[part] = 0; fem_sparse_i[part] = NULL; fem_sparse_j[part] = NULL; fem_entries[part] = NULL; for (var = 0; var < nvars; var++) { stencils[part][var] = NULL; } } hypre_SStructGraphStencils(graph) = stencils; hypre_SStructGraphFEMNSparse(graph) = fem_nsparse; hypre_SStructGraphFEMSparseJ(graph) = fem_sparse_i; hypre_SStructGraphFEMSparseI(graph) = fem_sparse_j; hypre_SStructGraphFEMEntries(graph) = fem_entries; hypre_SStructGraphNUVEntries(graph) = 0; hypre_SStructGraphAUVEntries(graph) = 0; hypre_SStructGraphIUVEntries(graph) = NULL; hypre_SStructGraphUVEntries(graph) = NULL; hypre_SStructGraphTotUEntries(graph) = 0; hypre_SStructGraphRefCount(graph) = 1; hypre_SStructGraphObjectType(graph) = HYPRE_SSTRUCT; hypre_SStructGraphEntries(graph) = NULL; hypre_SStructNGraphEntries(graph) = 0; hypre_SStructAGraphEntries(graph) = 0; *graph_ptr = graph; return hypre_error_flag; }