void hypre_F90_IFACE(hypre_structvectorsetvalues, HYPRE_STRUCTVECTORSETVALUES) ( hypre_F90_Obj *vector, hypre_F90_IntArray *grid_index, hypre_F90_Complex *values, hypre_F90_Int *ierr ) { *ierr = (hypre_F90_Int) ( HYPRE_StructVectorSetValues( hypre_F90_PassObj (HYPRE_StructVector, vector), hypre_F90_PassIntArray (grid_index), hypre_F90_PassComplex (values) ) ); }
void PFMG( Vector *soln, Vector *rhs, double tol, int zero) { (void)zero; #ifdef HAVE_HYPRE PFModule *this_module = ThisPFModule; InstanceXtra *instance_xtra = (InstanceXtra*)PFModuleInstanceXtra(this_module); PublicXtra *public_xtra = (PublicXtra*)PFModulePublicXtra(this_module); HYPRE_StructMatrix hypre_mat = instance_xtra->hypre_mat; HYPRE_StructVector hypre_b = instance_xtra->hypre_b; HYPRE_StructVector hypre_x = instance_xtra->hypre_x; HYPRE_StructSolver hypre_pfmg_data = instance_xtra->hypre_pfmg_data; Grid *grid = VectorGrid(rhs); Subgrid *subgrid; int sg; Subvector *rhs_sub; Subvector *soln_sub; double *rhs_ptr; double *soln_ptr; double value; int index[3]; int ix, iy, iz; int nx, ny, nz; int nx_v, ny_v, nz_v; int i, j, k; int iv; int num_iterations; double rel_norm; /* Copy rhs to hypre_b vector. */ BeginTiming(public_xtra->time_index_copy_hypre); ForSubgridI(sg, GridSubgrids(grid)) { subgrid = SubgridArraySubgrid(GridSubgrids(grid), sg); rhs_sub = VectorSubvector(rhs, sg); rhs_ptr = SubvectorData(rhs_sub); ix = SubgridIX(subgrid); iy = SubgridIY(subgrid); iz = SubgridIZ(subgrid); nx = SubgridNX(subgrid); ny = SubgridNY(subgrid); nz = SubgridNZ(subgrid); nx_v = SubvectorNX(rhs_sub); ny_v = SubvectorNY(rhs_sub); nz_v = SubvectorNZ(rhs_sub); iv = SubvectorEltIndex(rhs_sub, ix, iy, iz); BoxLoopI1(i, j, k, ix, iy, iz, nx, ny, nz, iv, nx_v, ny_v, nz_v, 1, 1, 1, { index[0] = i; index[1] = j; index[2] = k; HYPRE_StructVectorSetValues(hypre_b, index, rhs_ptr[iv]); });