int hypre_SMGRelaxDestroyARem( void *relax_vdata ) { hypre_SMGRelaxData *relax_data = relax_vdata; int i; int ierr = 0; if (relax_data -> A_rem) { for (i = 0; i < (relax_data -> num_spaces); i++) { hypre_SMGResidualDestroy(relax_data -> residual_data[i]); } hypre_TFree(relax_data -> residual_data); hypre_StructMatrixDestroy(relax_data -> A_rem); (relax_data -> A_rem) = NULL; } (relax_data -> setup_a_rem) = 1; 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); }