void hypre_F90_IFACE(hypre_parcsrdiagscale, HYPRE_PARCSRDIAGSCALE) ( hypre_F90_Obj *solver, hypre_F90_Obj *HA, hypre_F90_Obj *Hy, hypre_F90_Obj *Hx, hypre_F90_Int *ierr ) { *ierr = (hypre_F90_Int) ( HYPRE_ParCSRDiagScale( hypre_F90_PassObj (HYPRE_Solver, solver), hypre_F90_PassObj (HYPRE_ParCSRMatrix, HA), hypre_F90_PassObj (HYPRE_ParVector, Hy), hypre_F90_PassObj (HYPRE_ParVector, Hx) ) ); }
int32_t impl_bHYPRE_ParCSRDiagScale_Apply( /* in */ bHYPRE_ParCSRDiagScale self, /* in */ bHYPRE_Vector b, /* inout */ bHYPRE_Vector* x, /* out */ sidl_BaseInterface *_ex) { *_ex = 0; { /* DO-NOT-DELETE splicer.begin(bHYPRE.ParCSRDiagScale.Apply) */ /* Insert the implementation of the Apply method here... */ int ierr = 0; MPI_Comm comm; HYPRE_Solver dummy; HYPRE_Solver * solver = &dummy; struct bHYPRE_ParCSRDiagScale__data * data; /* not used HYPRE_Matrix HYPRE_A;*/ bHYPRE_IJParCSRMatrix bH_A; HYPRE_ParCSRMatrix AA; HYPRE_IJMatrix ij_A; /* not used HYPRE_Vector HYPRE_x, HYPRE_b;*/ bHYPRE_IJParCSRVector bH_b, bH_x; HYPRE_ParVector bb, xx; HYPRE_IJVector ij_b, ij_x; struct bHYPRE_IJParCSRMatrix__data * dataA; struct bHYPRE_IJParCSRVector__data * datab, * datax; void * objectA, * objectb, * objectx; data = bHYPRE_ParCSRDiagScale__get_data( self ); comm = data->comm; /* SetCommunicator should have been called earlier */ hypre_assert( comm != MPI_COMM_NULL ); bH_A = data->matrix; hypre_assert( bH_A != NULL ); if ( *x==NULL ) { /* If vector not supplied, make one...*/ /* There's no good way to check the size of x. It would be good * to do something similar if x had zero length. Or * hypre_assert(x-has-the-right-size) */ bHYPRE_Vector_Clone( b, x, _ex ); SIDL_CHECK(*_ex); bHYPRE_Vector_Clear( *x, _ex ); SIDL_CHECK(*_ex); } bH_b = (bHYPRE_IJParCSRVector) bHYPRE_Vector__cast2( b, "bHYPRE.IJParCSRVector", _ex ); SIDL_CHECK(*_ex); hypre_assert( bH_b!=NULL ); datab = bHYPRE_IJParCSRVector__get_data( bH_b ); ij_b = datab -> ij_b; ierr += HYPRE_IJVectorGetObject( ij_b, &objectb ); bb = (HYPRE_ParVector) objectb; /* not used HYPRE_b = (HYPRE_Vector) bb;*/ bH_x = (bHYPRE_IJParCSRVector) bHYPRE_Vector__cast2( *x, "bHYPRE.IJParCSRVector", _ex ); SIDL_CHECK(*_ex); hypre_assert( bH_x!=NULL ); datax = bHYPRE_IJParCSRVector__get_data( bH_x ); ij_x = datax -> ij_b; ierr += HYPRE_IJVectorGetObject( ij_x, &objectx ); xx = (HYPRE_ParVector) objectx; /* not used HYPRE_b = (HYPRE_Vector) xx;*/ dataA = bHYPRE_IJParCSRMatrix__get_data( bH_A ); ij_A = dataA -> ij_A; ierr += HYPRE_IJMatrixGetObject( ij_A, &objectA ); AA = (HYPRE_ParCSRMatrix) objectA; /* not used HYPRE_A = (HYPRE_Matrix) AA;*/ /* does x = y/diagA as approximation to solving Ax=y for x ... */ ierr += HYPRE_ParCSRDiagScale( *solver, AA, bb, xx ); bHYPRE_IJParCSRVector_deleteRef( bH_b, _ex ); SIDL_CHECK(*_ex); bHYPRE_IJParCSRVector_deleteRef( bH_x, _ex ); SIDL_CHECK(*_ex); return ierr; hypre_babel_exception_return_error(_ex); /* DO-NOT-DELETE splicer.end(bHYPRE.ParCSRDiagScale.Apply) */ } }