int HYPRE_IJVectorSetMaxOffProcElmts( HYPRE_IJVector vector, int max_off_proc_elmts) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (!vec) { printf("Variable vec is NULL -- HYPRE_IJVectorSetObjectType\n"); hypre_error_in_arg(1); return hypre_error_flag; } /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) return( hypre_IJVectorSetMaxOffProcElmtsPETSc(vec, max_off_proc_elmts)); else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) return( hypre_IJVectorSetMaxOffProcElmtsISIS(vec, max_off_proc_elmts)); else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) return( hypre_IJVectorSetMaxOffProcElmtsPar(vec, max_off_proc_elmts)); else { printf("Unrecognized object type -- HYPRE_IJVectorGetValues\n"); hypre_error_in_arg(1); } return hypre_error_flag; }
int HYPRE_IJVectorAssemble( HYPRE_IJVector vector ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (!vec) { printf("Variable vec is NULL -- HYPRE_IJVectorAssemble\n"); hypre_error_in_arg(1); return hypre_error_flag; } /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) return( hypre_IJVectorAssemblePETSc(vec) ); else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) return( hypre_IJVectorAssembleISIS(vec) ); else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) return( hypre_IJVectorAssemblePar(vec) ); else { printf("Unrecognized object type -- HYPRE_IJVectorAssemble\n"); hypre_error_in_arg(1); } return hypre_error_flag; }
HYPRE_Int hypre_IJVectorZeroValues( HYPRE_IJVector vector ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (vec == NULL) { hypre_printf("Vector variable is NULL -- hypre_IJVectorZeroValues\n"); exit(1); } /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) return( hypre_IJVectorZeroValuesPETSc(vec) ); else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) return( hypre_IJVectorZeroValuesISIS(vec) ); else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) return( hypre_IJVectorZeroValuesPar(vec) ); else { hypre_printf("Unrecognized object type -- hypre_IJVectorZeroValues\n"); exit(1); } return -99; }
int HYPRE_IJVectorDestroy( HYPRE_IJVector vector ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (!vec) { printf("Vector variable is NULL -- HYPRE_IJVectorDestroy\n"); hypre_error_in_arg(1); return hypre_error_flag; } if (hypre_IJVectorPartitioning(vec)) hypre_TFree(hypre_IJVectorPartitioning(vec)); /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) ierr = hypre_IJVectorDestroyPETSc(vec) ; else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) ierr = hypre_IJVectorDestroyISIS(vec) ; else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) { hypre_IJVectorDestroyPar(vec) ; if (hypre_IJVectorTranslator(vec)) { hypre_AuxParVectorDestroy((hypre_AuxParVector *) (hypre_IJVectorTranslator(vec))); } } else if ( hypre_IJVectorObjectType(vec) != -1 ) { printf("Unrecognized object type -- HYPRE_IJVectorDestroy\n"); hypre_error_in_arg(1); return hypre_error_flag; } hypre_TFree(vec); return hypre_error_flag; }
int HYPRE_IJVectorGetValues( HYPRE_IJVector vector, int nvalues, const HYPRE_BigInt *indices, double *values ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (nvalues == 0) return hypre_error_flag; if (!vec) { printf("Variable vec is NULL -- HYPRE_IJVectorGetValues\n"); hypre_error_in_arg(1); return hypre_error_flag; } if (nvalues < 0) { hypre_error_in_arg(2); return hypre_error_flag; } if (!indices) { hypre_error_in_arg(3); return hypre_error_flag; } if (!values) { hypre_error_in_arg(4); return hypre_error_flag; } /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) return( hypre_GetIJVectorPETScLocalComponents(vec, nvalues, indices, values) ); else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) return( hypre_IJVectorGetValuesISIS(vec, nvalues, indices, values) ); else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) return( hypre_IJVectorGetValuesPar(vec, nvalues, indices, values) ); else { printf("Unrecognized object type -- HYPRE_IJVectorGetValues\n"); hypre_error_in_arg(1); } return hypre_error_flag; }
int HYPRE_IJVectorGetObjectType( HYPRE_IJVector vector, int *type ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (!vec) { printf("Variable vec is NULL -- HYPRE_IJVectorGetObjectType\n"); hypre_error_in_arg(1); return hypre_error_flag; } *type = hypre_IJVectorObjectType(vec); return hypre_error_flag; }
int HYPRE_IJVectorInitialize( HYPRE_IJVector vector ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (!vec) { printf("Vector variable is NULL -- HYPRE_IJVectorInitialize\n"); hypre_error_in_arg(1); return hypre_error_flag; } /* if ( hypre_IJVectorObjectType(vec) == HYPRE_PETSC ) return( hypre_IJVectorInitializePETSc(vec) ); else if ( hypre_IJVectorObjectType(vec) == HYPRE_ISIS ) return( hypre_IJVectorInitializeISIS(vec) ); else */ if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) { if (!hypre_IJVectorObject(vec)) hypre_IJVectorCreatePar(vec, hypre_IJVectorPartitioning(vec)); hypre_IJVectorInitializePar(vec); } else { printf("Unrecognized object type -- HYPRE_IJVectorInitialize\n"); hypre_error_in_arg(1); } return hypre_error_flag; }
HYPRE_Int hypre_IJVectorDistribute( HYPRE_IJVector vector, const HYPRE_Int *vec_starts ) { hypre_IJVector *vec = (hypre_IJVector *) vector; if (vec == NULL) { hypre_printf("Vector variable is NULL -- hypre_IJVectorDistribute\n"); exit(1); } if ( hypre_IJVectorObjectType(vec) == HYPRE_PARCSR ) return( hypre_IJVectorDistributePar(vec, vec_starts) ); else { hypre_printf("Unrecognized object type -- hypre_IJVectorDistribute\n"); exit(1); } return -99; }
int HYPRE_IJVectorCreate( MPI_Comm comm, HYPRE_BigInt jlower, HYPRE_BigInt jupper, HYPRE_IJVector *vector ) { hypre_IJVector *vec; int num_procs, my_id; HYPRE_BigInt *partitioning; #ifdef HYPRE_NO_GLOBAL_PARTITION HYPRE_BigInt row0, rowN; #else HYPRE_BigInt *recv_buf; HYPRE_BigInt *info; int i, i2; #endif vec = hypre_CTAlloc(hypre_IJVector, 1); if (!vec) { printf("Out of memory -- HYPRE_IJVectorCreate\n"); hypre_error(HYPRE_ERROR_MEMORY); return hypre_error_flag; } MPI_Comm_size(comm, &num_procs); MPI_Comm_rank(comm, &my_id); if (jlower > jupper+1 || jlower < 0) { hypre_error_in_arg(2); return hypre_error_flag; } if (jupper < -1) { hypre_error_in_arg(3); return hypre_error_flag; } #ifdef HYPRE_NO_GLOBAL_PARTITION partitioning = hypre_CTAlloc(HYPRE_BigInt, 2); partitioning[0] = jlower; partitioning[1] = jupper+1; /* now we need the global number of rows as well as the global first row index */ /* proc 0 has the first row */ if (my_id==0) { row0 = jlower; } MPI_Bcast(&row0, 1, MPI_HYPRE_BIG_INT, 0, comm); /* proc (num_procs-1) has the last row */ if (my_id == (num_procs-1)) { rowN = jupper; } MPI_Bcast(&rowN, 1, MPI_HYPRE_BIG_INT, num_procs-1, comm); hypre_IJVectorGlobalFirstRow(vec) = row0; hypre_IJVectorGlobalNumRows(vec) = rowN - row0 + 1; #else info = hypre_CTAlloc(HYPRE_BigInt,2); recv_buf = hypre_CTAlloc(HYPRE_BigInt, 2*num_procs); partitioning = hypre_CTAlloc(HYPRE_BigInt, num_procs+1); info[0] = jlower; info[1] = jupper; MPI_Allgather(info, 2, MPI_HYPRE_BIG_INT, recv_buf, 2, MPI_HYPRE_BIG_INT, comm); partitioning[0] = recv_buf[0]; for (i=0; i < num_procs-1; i++) { i2 = i+i; if (recv_buf[i2+1] != (recv_buf[i2+2]-1)) { printf("Inconsistent partitioning -- HYPRE_IJVectorCreate\n"); hypre_error(HYPRE_ERROR_GENERIC); return hypre_error_flag; } else partitioning[i+1] = recv_buf[i2+2]; } i2 = (num_procs-1)*2; partitioning[num_procs] = recv_buf[i2+1]+1; hypre_TFree(info); hypre_TFree(recv_buf); hypre_IJVectorGlobalFirstRow(vec) = partitioning[0]; hypre_IJVectorGlobalNumRows(vec)= partitioning[num_procs]-partitioning[0]; #endif hypre_IJVectorComm(vec) = comm; hypre_IJVectorPartitioning(vec) = partitioning; hypre_IJVectorObjectType(vec) = HYPRE_UNITIALIZED; hypre_IJVectorObject(vec) = NULL; hypre_IJVectorTranslator(vec) = NULL; *vector = (HYPRE_IJVector) vec; return hypre_error_flag; }