HYPRE_Int hypre_SStructScale( HYPRE_Complex alpha, hypre_SStructVector *y ) { HYPRE_Int nparts = hypre_SStructVectorNParts(y); HYPRE_Int part; HYPRE_Int y_object_type= hypre_SStructVectorObjectType(y); if (y_object_type == HYPRE_SSTRUCT) { for (part = 0; part < nparts; part++) { hypre_SStructPScale(alpha, hypre_SStructVectorPVector(y, part)); } } else if (y_object_type == HYPRE_PARCSR) { hypre_ParVector *y_par; hypre_SStructVectorConvert(y, &y_par); hypre_ParVectorScale(alpha, y_par); } return hypre_error_flag; }
int hypre_SStructScale( double alpha, hypre_SStructVector *y ) { int ierr = 0; int nparts = hypre_SStructVectorNParts(y); int part; int y_object_type= hypre_SStructVectorObjectType(y); if (y_object_type == HYPRE_SSTRUCT) { for (part = 0; part < nparts; part++) { hypre_SStructPScale(alpha, hypre_SStructVectorPVector(y, part)); } } else if (y_object_type == HYPRE_PARCSR) { hypre_ParVector *y_par; hypre_SStructVectorConvert(y, &y_par); hypre_ParVectorScale(alpha, y_par); } return ierr; }
HYPRE_Int hypre_SStructInnerProd( hypre_SStructVector *x, hypre_SStructVector *y, double *result_ptr ) { HYPRE_Int nparts = hypre_SStructVectorNParts(x); double result; double presult; HYPRE_Int part; HYPRE_Int x_object_type= hypre_SStructVectorObjectType(x); HYPRE_Int y_object_type= hypre_SStructVectorObjectType(y); if (x_object_type != y_object_type) { hypre_error_in_arg(2); hypre_error_in_arg(3); return hypre_error_flag; } result = 0.0; if ( (x_object_type == HYPRE_SSTRUCT) || (x_object_type == HYPRE_STRUCT) ) { for (part = 0; part < nparts; part++) { hypre_SStructPInnerProd(hypre_SStructVectorPVector(x, part), hypre_SStructVectorPVector(y, part), &presult); result += presult; } } else if (x_object_type == HYPRE_PARCSR) { hypre_ParVector *x_par; hypre_ParVector *y_par; hypre_SStructVectorConvert(x, &x_par); hypre_SStructVectorConvert(y, &y_par); result= hypre_ParVectorInnerProd(x_par, y_par); } *result_ptr = result; return hypre_error_flag; }
HYPRE_Int hypre_SStructVectorSetRandomValues( hypre_SStructVector *vector, HYPRE_Int seed ) { HYPRE_Int ierr = 0; HYPRE_Int nparts = hypre_SStructVectorNParts(vector); hypre_SStructPVector *pvector; HYPRE_Int part; srand( seed ); for (part = 0; part < nparts; part++) { pvector = hypre_SStructVectorPVector(vector, part); seed = rand(); hypre_SStructPVectorSetRandomValues(pvector, seed); } return ierr; }
int hypre_SStructAxpy( double alpha, hypre_SStructVector *x, hypre_SStructVector *y ) { int ierr = 0; int nparts = hypre_SStructVectorNParts(x); int part; int x_object_type= hypre_SStructVectorObjectType(x); int y_object_type= hypre_SStructVectorObjectType(y); if (x_object_type != y_object_type) { printf("vector object types different- cannot compute Axpy\n"); return ierr; } if (x_object_type == HYPRE_SSTRUCT) { for (part = 0; part < nparts; part++) { hypre_SStructPAxpy(alpha, hypre_SStructVectorPVector(x, part), hypre_SStructVectorPVector(y, part)); } } else if (x_object_type == HYPRE_PARCSR) { hypre_ParVector *x_par; hypre_ParVector *y_par; hypre_SStructVectorConvert(x, &x_par); hypre_SStructVectorConvert(y, &y_par); hypre_ParVectorAxpy(alpha, x_par, y_par); } return ierr; }
HYPRE_Int hypre_SStructCopy( hypre_SStructVector *x, hypre_SStructVector *y ) { HYPRE_Int nparts = hypre_SStructVectorNParts(x); HYPRE_Int part; HYPRE_Int x_object_type= hypre_SStructVectorObjectType(x); HYPRE_Int y_object_type= hypre_SStructVectorObjectType(y); if (x_object_type != y_object_type) { hypre_error_in_arg(2); hypre_error_in_arg(3); return hypre_error_flag; } if (x_object_type == HYPRE_SSTRUCT) { for (part = 0; part < nparts; part++) { hypre_SStructPCopy(hypre_SStructVectorPVector(x, part), hypre_SStructVectorPVector(y, part)); } } else if (x_object_type == HYPRE_PARCSR) { hypre_ParVector *x_par; hypre_ParVector *y_par; hypre_SStructVectorConvert(x, &x_par); hypre_SStructVectorConvert(y, &y_par); hypre_ParVectorCopy(x_par, y_par); } return hypre_error_flag; }
HYPRE_Int hypre_SStructOverlapInnerProd( hypre_SStructVector *x, hypre_SStructVector *y, double *result_ptr ) { HYPRE_Int nparts = hypre_SStructVectorNParts(x); double result; double presult; HYPRE_Int part; result = 0.0; for (part = 0; part < nparts; part++) { hypre_SStructPOverlapInnerProd(hypre_SStructVectorPVector(x, part), hypre_SStructVectorPVector(y, part), &presult); result += presult; } *result_ptr = result; return hypre_error_flag; }