HYPRE_Int hypre_SStructPMatvecDestroy( void *pmatvec_vdata ) { hypre_SStructPMatvecData *pmatvec_data = pmatvec_vdata; HYPRE_Int nvars; void ***smatvec_data; HYPRE_Int vi, vj; if (pmatvec_data) { nvars = (pmatvec_data -> nvars); smatvec_data = (pmatvec_data -> smatvec_data); for (vi = 0; vi < nvars; vi++) { for (vj = 0; vj < nvars; vj++) { if (smatvec_data[vi][vj] != NULL) { hypre_StructMatvecDestroy(smatvec_data[vi][vj]); } } hypre_TFree(smatvec_data[vi]); } hypre_TFree(smatvec_data); hypre_TFree(pmatvec_data); } return hypre_error_flag; }
HYPRE_Int HYPRE_SStructSplitDestroy( HYPRE_SStructSolver solver ) { hypre_SStructVector *y; HYPRE_Int nparts; HYPRE_Int *nvars; void ****smatvec_data; HYPRE_Int (***ssolver_solve)(); HYPRE_Int (***ssolver_destroy)(); void ***ssolver_data; HYPRE_Int (*sdestroy)(); void *sdata; HYPRE_Int part, vi, vj; if (solver) { y = (solver -> y); nparts = (solver -> nparts); nvars = (solver -> nvars); smatvec_data = (solver -> smatvec_data); ssolver_solve = (solver -> ssolver_solve); ssolver_destroy = (solver -> ssolver_destroy); ssolver_data = (solver -> ssolver_data); HYPRE_SStructVectorDestroy(y); for (part = 0; part < nparts; part++) { for (vi = 0; vi < nvars[part]; vi++) { for (vj = 0; vj < nvars[part]; vj++) { if (smatvec_data[part][vi][vj] != NULL) { hypre_StructMatvecDestroy(smatvec_data[part][vi][vj]); } } hypre_TFree(smatvec_data[part][vi]); sdestroy = ssolver_destroy[part][vi]; sdata = ssolver_data[part][vi]; sdestroy(sdata); } hypre_TFree(smatvec_data[part]); hypre_TFree(ssolver_solve[part]); hypre_TFree(ssolver_destroy[part]); hypre_TFree(ssolver_data[part]); } hypre_TFree(nvars); hypre_TFree(smatvec_data); hypre_TFree(ssolver_solve); hypre_TFree(ssolver_destroy); hypre_TFree(ssolver_data); hypre_SStructMatvecDestroy(solver -> matvec_data); hypre_TFree(solver); } return hypre_error_flag; }
HYPRE_Int hypre_SparseMSGDestroy( void *smsg_vdata ) { HYPRE_Int ierr = 0; /* RDF */ #if 0 hypre_SparseMSGData *smsg_data = smsg_vdata; HYPRE_Int fi, l; if (smsg_data) { if ((smsg_data -> logging) > 0) { hypre_TFree(smsg_data -> norms); hypre_TFree(smsg_data -> rel_norms); } if ((smsg_data -> num_levels) > 1) { for (fi = 0; fi < (smsg_data -> num_all_grids); fi++) { hypre_PFMGRelaxDestroy(smsg_data -> relax_array[fi]); hypre_StructMatvecDestroy(smsg_data -> matvec_array[fi]); hypre_SemiRestrictDestroy(smsg_data -> restrictx_array[fi]); hypre_SemiRestrictDestroy(smsg_data -> restricty_array[fi]); hypre_SemiRestrictDestroy(smsg_data -> restrictz_array[fi]); hypre_SemiInterpDestroy(smsg_data -> interpx_array[fi]); hypre_SemiInterpDestroy(smsg_data -> interpy_array[fi]); hypre_SemiInterpDestroy(smsg_data -> interpz_array[fi]); hypre_StructMatrixDestroy(smsg_data -> A_array[fi]); hypre_StructVectorDestroy(smsg_data -> b_array[fi]); hypre_StructVectorDestroy(smsg_data -> x_array[fi]); hypre_StructVectorDestroy(smsg_data -> t_array[fi]); hypre_StructVectorDestroy(smsg_data -> r_array[fi]); hypre_StructVectorDestroy(smsg_data -> visitx_array[fi]); hypre_StructVectorDestroy(smsg_data -> visity_array[fi]); hypre_StructVectorDestroy(smsg_data -> visitz_array[fi]); hypre_StructGridDestroy(smsg_data -> grid_array[fi]); } for (l = 0; l < (smsg_data -> num_grids[0]) - 1; l++) { hypre_StructMatrixDestroy(smsg_data -> Px_array[l]); hypre_StructGridDestroy(smsg_data -> Px_grid_array[l]); } for (l = 0; l < (smsg_data -> num_grids[1]) - 1; l++) { hypre_StructMatrixDestroy(smsg_data -> Py_array[l]); hypre_StructGridDestroy(smsg_data -> Py_grid_array[l]); } for (l = 0; l < (smsg_data -> num_grids[2]) - 1; l++) { hypre_StructMatrixDestroy(smsg_data -> Pz_array[l]); hypre_StructGridDestroy(smsg_data -> Pz_grid_array[l]); } hypre_SharedTFree(smsg_data -> data); hypre_TFree(smsg_data -> relax_array); hypre_TFree(smsg_data -> matvec_array); hypre_TFree(smsg_data -> restrictx_array); hypre_TFree(smsg_data -> restricty_array); hypre_TFree(smsg_data -> restrictz_array); hypre_TFree(smsg_data -> interpx_array); hypre_TFree(smsg_data -> interpy_array); hypre_TFree(smsg_data -> interpz_array); hypre_TFree(smsg_data -> A_array); hypre_TFree(smsg_data -> Px_array); hypre_TFree(smsg_data -> Py_array); hypre_TFree(smsg_data -> Pz_array); hypre_TFree(smsg_data -> RTx_array); hypre_TFree(smsg_data -> RTy_array); hypre_TFree(smsg_data -> RTz_array); hypre_TFree(smsg_data -> b_array); hypre_TFree(smsg_data -> x_array); hypre_TFree(smsg_data -> t_array); hypre_TFree(smsg_data -> r_array); hypre_TFree(smsg_data -> grid_array); hypre_TFree(smsg_data -> Px_grid_array); hypre_TFree(smsg_data -> Py_grid_array); hypre_TFree(smsg_data -> Pz_grid_array); } hypre_FinalizeTiming(smsg_data -> time_index); hypre_TFree(smsg_data); } #endif /* RDF */ return ierr; }
HYPRE_Int hypre_StructKrylovMatvecDestroy( void *matvec_data ) { return ( hypre_StructMatvecDestroy( matvec_data ) ); }