]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Can not compute residual norms if no eigenvectors have converged.
authoryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 21 Aug 2013 10:39:34 +0000 (10:39 +0000)
committeryoung <young@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 21 Aug 2013 10:39:34 +0000 (10:39 +0000)
git-svn-id: https://svn.dealii.org/trunk@30369 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/source/lac/slepc_solver.cc

index 4c2576646d7241cf5726f0a47f195d4a982aa78b..fe91deb0b003ae7e830f2589af5adfdcd5b09397 100644 (file)
@@ -187,11 +187,11 @@ namespace SLEPcWrappers
 
     // get number of converged eigenstates
     ierr = EPSGetConverged (solver_data->eps,
-                            reinterpret_cast<PetscInt *>(n_converged));
+                            reinterpret_cast<PetscInt*>(n_converged));
     AssertThrow (ierr == 0, ExcSLEPcError(ierr));
 
-    PetscInt n_iterations = 0;
-    double residual_norm = 1e300;
+    PetscInt n_iterations   = 0;
+    PetscReal residual_norm = 1.e300;
 
     // @todo Investigate elaborating on some of this to act on the
     // complete eigenspectrum
@@ -200,9 +200,13 @@ namespace SLEPcWrappers
       ierr = EPSGetIterationNumber (solver_data->eps, &n_iterations);
       AssertThrow (ierr == 0, ExcSLEPcError(ierr));
 
-      // get the residual norm of the most extreme eigenvalue
-      ierr = EPSComputeResidualNorm (solver_data->eps, 0, &residual_norm);
-      AssertThrow (ierr == 0, ExcSLEPcError(ierr));
+      // get the residual norm of the most extreme eigenvalue if and
+      // only if at least one eigenvector has converged.
+      if ((*n_converged)>0)
+       {
+         ierr = EPSComputeResidualNorm (solver_data->eps, 0, &residual_norm);
+         AssertThrow (ierr == 0, ExcSLEPcError(ierr));
+       }
 
       // check the solver state
       const SolverControl::State state

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.