[petsc-users] preconditioned eigensolver in slepc

Jose E. Roman jroman at dsic.upv.es
Thu Feb 16 09:54:00 CST 2012


El 16/02/2012, a las 16:41, Verena Kuhlemann escribió:

> Hi,
> 
> I am trying to use LOBPCG via Slepc and I am a little confused on how to set the preconditioner and operator matrices. I have a shell matrix A and a matrix P that should be used for the preconditioning. Here is the relevant part of my code:
> 
> EPSCreate(PETSC_COMM_WORLD,&eps);
> EPSSetOperators(eps, A, PETSC_NULL);
> EPSSetProblemType(eps, EPS_HEP);
> EPSSetType(eps, EPSBLOPEX);
> EPSGetST(eps, &st);
> STPrecondSetMatForPC(st, P);
> STGetKSP(st,&ksp);
> KSPGetPC(ksp, &pc);
> KSPSetOperators(ksp,A, P, DIFFERENT_NONZERO_PATTERN); //do I have to set this?? If I don't the program complains that a matrix is not set
> PCSetType(pc, PCJACOBI);
> EPSSetUp(eps);
> 
> 
> Is that correct or do I need to do something else? 
> 
> Thanks,
> Verena

It works for me like this:

  ierr = EPSCreate(PETSC_COMM_WORLD,&eps);CHKERRQ(ierr);
  ierr = EPSSetOperators(eps,A,PETSC_NULL);CHKERRQ(ierr);
  ierr = EPSSetProblemType(eps,EPS_HEP);CHKERRQ(ierr);
  ierr = EPSSetType(eps,EPSBLOPEX);CHKERRQ(ierr);
  ierr = EPSGetST(eps,&st);CHKERRQ(ierr);
  ierr = STPrecondSetMatForPC(st,P);CHKERRQ(ierr);
  ierr = EPSSetFromOptions(eps);CHKERRQ(ierr);

You don't need to manipulate the KSP or PC objects.

If you want to check whether your matrix P is being used in Blopex, you can do
  ierr = PetscObjectSetName((PetscObject)P,"My precond");CHKERRQ(ierr);

then run with -eps_view and you will see "Matrix Object:    My precond     1 MPI processes" in the PC section.

Jose



More information about the petsc-users mailing list