The attached code reproduces the error on my system.

Best,
Peder
________________________________
Fra: Peder Jørgensgaard Olesen <[email protected]>
Sendt: 18. januar 2024 21:06
Til: Jose E. Roman <[email protected]>
Cc: [email protected] <[email protected]>
Emne: Sv: [petsc-users] ScaLAPACK EPS error

I set up the matrix using MatCreateDense(), passing PETSC_DECIDE for the local 
dimensions.

The same error appears with 8, 12, and 16 nodes (32 proc/node).

I'll have to get back to you regarding a minimal example.

Best,
Peder
________________________________
Fra: Jose E. Roman <[email protected]>
Sendt: 18. januar 2024 19:28
Til: Peder Jørgensgaard Olesen <[email protected]>
Cc: [email protected] <[email protected]>
Emne: Re: [petsc-users] ScaLAPACK EPS error

How are you setting up your input matrix? Are you giving the local sizes or 
setting them to PETSC_DECIDE?
Do you get the same error for different number of MPI processes?
Can you send a small code reproducing the error?

Jose


> El 18 ene 2024, a las 18:59, Peder Jørgensgaard Olesen via petsc-users 
> <[email protected]> escribió:
>
> Hello,
>
> I need to determine the full set of eigenpairs to a rather large (N=16,000) 
> dense Hermitian matrix. I've managed to do this using SLEPc's standard 
> Krylov-Schur EPS, but I think it could be done more efficiently using 
> ScaLAPACK. I receive the following error when attempting this. As I 
> understand it, descinit is used to initialize an array, and the variable in 
> question designates the leading dimension of the array, for which it seems an 
> illegal value is somehow passed.
>
> I know ScaLAPACK is an external package, but it seems as if the error would 
> be in the call from SLEPc. Any ideas as to what could cause this?
>
> Thanks,
> Peder
>
> Error message (excerpt):
>
> PETSC ERROR: #1 MatConvert_Dense_ScaLAPACK() at [...]/matscalapack.c:1032
> PETSC ERROR: #2 MatConvert at [...]/matrix.c:4250
> PETSC ERROR: #3 EPSSetUp_ScaLAPACK() at [...]/scalapack.c:47
> PETSC ERROR: #4 EPSSetUp() at [...]/epssetup.c:323
> PETSC ERROR: #5 EPSSolve at [...]/epssolve.c:134
> PETSC ERROR: ------ Error message ------
> PETSC ERROR: Error in external library
> PETSC ERROR: Error in ScaLAPACK subroutine descinit: info=-9
> (...)
>
> Log file (excerpt):
> {  357,    0}:  On entry to DESCINIT parameter number   9 had an illegal value
> [and a few hundred lines similar to this]


#include <stdio.h>
#include <stdlib.h>
#include <slepceps.h>

// Minimal example for EPS using ScaLAPACK
int main(int argc, char** argv){
  PetscInt N = 16000, nconv, i;
  Mat mat;
  EPS eps;
  PetscScalar eval_r;

  PetscCall(SlepcInitialize(&argc, &argv, NULL, NULL));


  // Generate random matrix
  PetscCall(MatCreateDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, N, N, 
NULL, &mat));
  PetscCall(MatSetRandom(mat, NULL));


  // Set up and run EPS
  PetscCall(EPSCreate(PETSC_COMM_WORLD, &eps));
  PetscCall(EPSSetOperators(eps, mat, NULL));
  PetscCall(EPSSetType(eps, EPSSCALAPACK));
  PetscCall(EPSSetProblemType(eps, EPS_HEP));
  PetscCall(EPSSetWhichEigenpairs(eps, EPS_ALL));
  PetscCall(EPSSolve(eps));
  PetscCall(EPSGetConverged(eps, &nconv));
  PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%d eigenpairs converged\n", nconv));
  PetscCall(MatDestroy(&mat));


  // Report a few eigenvalues
  for (i = 0; i < 5; i++){
    PetscCall(EPSGetEigenvalue(eps, i, &eval_r, NULL));
    PetscCall(PetscPrintf(PETSC_COMM_WORLD, "lamda_%d = %e + %ei\n", i, 
eval_r));
  }


  PetscCall(EPSDestroy(&eps));
  PetscCall(SlepcFinalize());


  return(0);
  }

Reply via email to