Functions | |
| void | parpack_standard_eigen (const int_t *nloc, const int_t *nglobal, const int_t *nnz, const real *values, const int_t *indices, const int_t *pointers, const int_t *job, const int_t *nev, const int_t *ncvmin, const real *tol, const int_t *maxit, const real *sigma, real *lambdareal, real *lambdaimag, int_t *info) |
| distributed reverse communication driver around pdnaupd / pdneupd. | |
| void | parpack_symmetric_eigen (const int_t *nloc, const int_t *nglobal, const int_t *nnz, const real *values, const int_t *indices, const int_t *pointers, const int_t *job, const int_t *nev, const int_t *ncvmin, const real *tol, const int_t *maxit, const real *sigma, real *lambdareal, real *lambdaimag, int_t *info) |
| symmetric counterpart of parpack_standard_eigen. | |
| void belfem::parpack::parpack_standard_eigen | ( | const int_t * | nloc, |
| const int_t * | nglobal, | ||
| const int_t * | nnz, | ||
| const real * | values, | ||
| const int_t * | indices, | ||
| const int_t * | pointers, | ||
| const int_t * | job, | ||
| const int_t * | nev, | ||
| const int_t * | ncvmin, | ||
| const real * | tol, | ||
| const int_t * | maxit, | ||
| const real * | sigma, | ||
| real * | lambdareal, | ||
| real * | lambdaimag, | ||
| int_t * | info ) |
distributed reverse communication driver around pdnaupd / pdneupd.
Every rank owns a contiguous block of ROWS, and PARPACK distributes the Arnoldi basis with it, so the n x ncv basis is split across ranks rather than held whole.
COLLECTIVE over MPI_COMM_WORLD. Every rank must call this.
Row distribution contract, owned by the caller:
Cross-rank uniformity, also owned by the caller and NOT enforced: nglobal, nev, job, tol, maxit and sigma must be identical on every rank – sigma changes the operator, so a divergent value would put the ranks on different problems. PARPACK runs one algorithm whose control flow is executed redundantly on all ranks, and they stay in lockstep only because they take the same branches. A divergent nev or job changes the trip count inside pdnaupd and HANGS the job rather than failing. ( nglobal is the exception – it falls out of the row map check and surfaces as info = 101. )
info must have arpack::gNumInfoEntries entries; see arpack::check_naupd() for the driver codes 100-105.
lambdareal and lambdaimag must have nev + 1 entries and come back identical on every rank. Eigenvalues only – the driver does not compute Ritz vectors.
| void belfem::parpack::parpack_symmetric_eigen | ( | const int_t * | nloc, |
| const int_t * | nglobal, | ||
| const int_t * | nnz, | ||
| const real * | values, | ||
| const int_t * | indices, | ||
| const int_t * | pointers, | ||
| const int_t * | job, | ||
| const int_t * | nev, | ||
| const int_t * | ncvmin, | ||
| const real * | tol, | ||
| const int_t * | maxit, | ||
| const real * | sigma, | ||
| real * | lambdareal, | ||
| real * | lambdaimag, | ||
| int_t * | info ) |
symmetric counterpart of parpack_standard_eigen.
Identical contract, identical row-distribution rules, identical info layout ; pdsaupd / pdseupd instead of pdnaupd / pdneupd. The same cross-rank uniformity requirements apply, sigma included.
Flags are decoded by arpack::check_saupd / check_seupd.