void * hypre_PointRelaxCreate( MPI_Comm comm ) { hypre_PointRelaxData *relax_data; hypre_Index stride; hypre_Index indices[1]; relax_data = hypre_CTAlloc(hypre_PointRelaxData, 1); (relax_data -> comm) = comm; (relax_data -> time_index) = hypre_InitializeTiming("PointRelax"); /* set defaults */ (relax_data -> tol) = 1.0e-06; (relax_data -> max_iter) = 1000; (relax_data -> rel_change) = 0; (relax_data -> zero_guess) = 0; (relax_data -> weight) = 1.0; (relax_data -> num_pointsets) = 0; (relax_data -> pointset_sizes) = NULL; (relax_data -> pointset_ranks) = NULL; (relax_data -> pointset_strides) = NULL; (relax_data -> pointset_indices) = NULL; (relax_data -> t) = NULL; hypre_SetIndex(stride, 1, 1, 1); hypre_SetIndex(indices[0], 0, 0, 0); hypre_PointRelaxSetNumPointsets((void *) relax_data, 1); hypre_PointRelaxSetPointset((void *) relax_data, 0, 1, stride, indices); return (void *) relax_data; }
HYPRE_Int hypre_PFMGRelaxSetType( void *pfmg_relax_vdata, HYPRE_Int relax_type ) { hypre_PFMGRelaxData *pfmg_relax_data = pfmg_relax_vdata; void *relax_data = (pfmg_relax_data -> relax_data); (pfmg_relax_data -> relax_type) = relax_type; switch(relax_type) { case 0: /* Jacobi */ { hypre_Index stride; hypre_Index indices[1]; hypre_PointRelaxSetWeight(relax_data, 1.0); hypre_PointRelaxSetNumPointsets(relax_data, 1); hypre_SetIndex(stride, 1, 1, 1); hypre_SetIndex(indices[0], 0, 0, 0); hypre_PointRelaxSetPointset(relax_data, 0, 1, stride, indices); } break; case 2: /* Red-Black Gauss-Seidel */ case 3: /* Red-Black Gauss-Seidel (non-symmetric) */ break; } return hypre_error_flag; }