int hypre_StructMatrixDestroy( hypre_StructMatrix *matrix ) { int i; int ierr = 0; if (matrix) { hypre_StructMatrixRefCount(matrix) --; if (hypre_StructMatrixRefCount(matrix) == 0) { if (hypre_StructMatrixDataAlloced(matrix)) { hypre_SharedTFree(hypre_StructMatrixData(matrix)); } hypre_CommPkgDestroy(hypre_StructMatrixCommPkg(matrix)); hypre_ForBoxI(i, hypre_StructMatrixDataSpace(matrix)) hypre_TFree(hypre_StructMatrixDataIndices(matrix)[i]); hypre_TFree(hypre_StructMatrixDataIndices(matrix)); hypre_BoxArrayDestroy(hypre_StructMatrixDataSpace(matrix)); hypre_TFree(hypre_StructMatrixSymmElements(matrix)); hypre_StructStencilDestroy(hypre_StructMatrixUserStencil(matrix)); hypre_StructStencilDestroy(hypre_StructMatrixStencil(matrix)); hypre_StructGridDestroy(hypre_StructMatrixGrid(matrix)); hypre_TFree(matrix); } } return ierr; }
HYPRE_Int hypre_StructVectorDestroy( hypre_StructVector *vector ) { if (vector) { hypre_StructVectorRefCount(vector) --; if (hypre_StructVectorRefCount(vector) == 0) { if (hypre_StructVectorDataAlloced(vector)) { hypre_SharedTFree(hypre_StructVectorData(vector)); } hypre_TFree(hypre_StructVectorDataIndices(vector)); hypre_BoxArrayDestroy(hypre_StructVectorDataSpace(vector)); hypre_StructGridDestroy(hypre_StructVectorGrid(vector)); hypre_TFree(vector); } } return hypre_error_flag; }
HYPRE_Int hypre_SysPFMGDestroy( void *sys_pfmg_vdata ) { hypre_SysPFMGData *sys_pfmg_data = sys_pfmg_vdata; HYPRE_Int l; if (sys_pfmg_data) { if ((sys_pfmg_data -> logging) > 0) { hypre_TFree(sys_pfmg_data -> norms); hypre_TFree(sys_pfmg_data -> rel_norms); } if ((sys_pfmg_data -> num_levels) > -1) { for (l = 0; l < (sys_pfmg_data -> num_levels); l++) { hypre_SysPFMGRelaxDestroy(sys_pfmg_data -> relax_data_l[l]); hypre_SStructPMatvecDestroy(sys_pfmg_data -> matvec_data_l[l]); } for (l = 0; l < ((sys_pfmg_data -> num_levels) - 1); l++) { hypre_SysSemiRestrictDestroy(sys_pfmg_data -> restrict_data_l[l]); hypre_SysSemiInterpDestroy(sys_pfmg_data -> interp_data_l[l]); } hypre_TFree(sys_pfmg_data -> relax_data_l); hypre_TFree(sys_pfmg_data -> matvec_data_l); hypre_TFree(sys_pfmg_data -> restrict_data_l); hypre_TFree(sys_pfmg_data -> interp_data_l); hypre_SStructPVectorDestroy(sys_pfmg_data -> tx_l[0]); /*hypre_SStructPGridDestroy(sys_pfmg_data -> grid_l[0]);*/ hypre_SStructPMatrixDestroy(sys_pfmg_data -> A_l[0]); hypre_SStructPVectorDestroy(sys_pfmg_data -> b_l[0]); hypre_SStructPVectorDestroy(sys_pfmg_data -> x_l[0]); for (l = 0; l < ((sys_pfmg_data -> num_levels) - 1); l++) { hypre_SStructPGridDestroy(sys_pfmg_data -> grid_l[l+1]); hypre_SStructPGridDestroy(sys_pfmg_data -> P_grid_l[l+1]); hypre_SStructPMatrixDestroy(sys_pfmg_data -> A_l[l+1]); hypre_SStructPMatrixDestroy(sys_pfmg_data -> P_l[l]); hypre_SStructPVectorDestroy(sys_pfmg_data -> b_l[l+1]); hypre_SStructPVectorDestroy(sys_pfmg_data -> x_l[l+1]); hypre_SStructPVectorDestroy(sys_pfmg_data -> tx_l[l+1]); } hypre_SharedTFree(sys_pfmg_data -> data); hypre_TFree(sys_pfmg_data -> cdir_l); hypre_TFree(sys_pfmg_data -> active_l); hypre_TFree(sys_pfmg_data -> grid_l); hypre_TFree(sys_pfmg_data -> P_grid_l); hypre_TFree(sys_pfmg_data -> A_l); hypre_TFree(sys_pfmg_data -> P_l); hypre_TFree(sys_pfmg_data -> RT_l); hypre_TFree(sys_pfmg_data -> b_l); hypre_TFree(sys_pfmg_data -> x_l); hypre_TFree(sys_pfmg_data -> tx_l); } hypre_FinalizeTiming(sys_pfmg_data -> time_index); hypre_TFree(sys_pfmg_data); } 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; }
int hypre_SMGDestroy( void *smg_vdata ) { hypre_SMGData *smg_data = smg_vdata; int l; int ierr = 0; if (smg_data) { if ((smg_data -> logging) > 0) { hypre_TFree(smg_data -> norms); hypre_TFree(smg_data -> rel_norms); } if ((smg_data -> num_levels) > -1) { for (l = 0; l < ((smg_data -> num_levels) - 1); l++) { hypre_SMGRelaxDestroy(smg_data -> relax_data_l[l]); hypre_SMGResidualDestroy(smg_data -> residual_data_l[l]); hypre_SemiRestrictDestroy(smg_data -> restrict_data_l[l]); hypre_SemiInterpDestroy(smg_data -> interp_data_l[l]); } hypre_SMGRelaxDestroy(smg_data -> relax_data_l[l]); if (l == 0) { hypre_SMGResidualDestroy(smg_data -> residual_data_l[l]); } hypre_TFree(smg_data -> relax_data_l); hypre_TFree(smg_data -> residual_data_l); hypre_TFree(smg_data -> restrict_data_l); hypre_TFree(smg_data -> interp_data_l); hypre_StructVectorDestroy(smg_data -> tb_l[0]); hypre_StructVectorDestroy(smg_data -> tx_l[0]); hypre_StructGridDestroy(smg_data -> grid_l[0]); hypre_StructMatrixDestroy(smg_data -> A_l[0]); hypre_StructVectorDestroy(smg_data -> b_l[0]); hypre_StructVectorDestroy(smg_data -> x_l[0]); for (l = 0; l < ((smg_data -> num_levels) - 1); l++) { hypre_StructGridDestroy(smg_data -> grid_l[l+1]); hypre_StructGridDestroy(smg_data -> PT_grid_l[l+1]); hypre_StructMatrixDestroy(smg_data -> A_l[l+1]); if (smg_data -> PT_l[l] == smg_data -> R_l[l]) { hypre_StructMatrixDestroy(smg_data -> PT_l[l]); } else { hypre_StructMatrixDestroy(smg_data -> PT_l[l]); hypre_StructMatrixDestroy(smg_data -> R_l[l]); } hypre_StructVectorDestroy(smg_data -> b_l[l+1]); hypre_StructVectorDestroy(smg_data -> x_l[l+1]); hypre_StructVectorDestroy(smg_data -> tb_l[l+1]); hypre_StructVectorDestroy(smg_data -> tx_l[l+1]); } hypre_SharedTFree(smg_data -> data); hypre_TFree(smg_data -> grid_l); hypre_TFree(smg_data -> PT_grid_l); hypre_TFree(smg_data -> A_l); hypre_TFree(smg_data -> PT_l); hypre_TFree(smg_data -> R_l); hypre_TFree(smg_data -> b_l); hypre_TFree(smg_data -> x_l); hypre_TFree(smg_data -> tb_l); hypre_TFree(smg_data -> tx_l); } hypre_FinalizeTiming(smg_data -> time_index); hypre_TFree(smg_data); } return(ierr); }