From: young Date: Mon, 28 Jan 2013 14:51:25 +0000 (+0000) Subject: Create a solver if there is not one yet, otherwise continue. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=771415d728ab290dd558566492d84ebe2fc6e0eb;p=dealii-svn.git Create a solver if there is not one yet, otherwise continue. git-svn-id: https://svn.dealii.org/trunk@28184 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/source/lac/slepc_solver.cc b/deal.II/source/lac/slepc_solver.cc index 926a76f1ad..27988d65eb 100644 --- a/deal.II/source/lac/slepc_solver.cc +++ b/deal.II/source/lac/slepc_solver.cc @@ -99,23 +99,27 @@ namespace SLEPcWrappers { int ierr; - AssertThrow (solver_data.get() == 0, ExcSLEPcWrappersUsageError()); - solver_data.reset (new SolverData()); - - // create eigensolver context and set operators - ierr = EPSCreate (mpi_communicator, &solver_data->eps); - AssertThrow (ierr == 0, ExcSLEPcError(ierr)); - - // set eigenspectrum problem type (general/standard) - AssertThrow (opA, ExcSLEPcWrappersUsageError()); - if (opB) - ierr = EPSSetOperators (solver_data->eps, *opA, *opB); - else - ierr = EPSSetOperators (solver_data->eps, *opA, PETSC_NULL); - AssertThrow (ierr == 0, ExcSLEPcError(ierr)); + // create a solver object if this is necessary + if (solver_data.get() == 0) + { + // reset solver dtaa + solver_data.reset (new SolverData()); - // set runtime options - set_solver_type (solver_data->eps); + // create eigensolver context and set operators + ierr = EPSCreate (mpi_communicator, &solver_data->eps); + AssertThrow (ierr == 0, ExcSLEPcError(ierr)); + + // set eigenspectrum problem type (general/standard) + AssertThrow (opA, ExcSLEPcWrappersUsageError()); + if (opB) + ierr = EPSSetOperators (solver_data->eps, *opA, *opB); + else + ierr = EPSSetOperators (solver_data->eps, *opA, PETSC_NULL); + AssertThrow (ierr == 0, ExcSLEPcError(ierr)); + + // set runtime options + set_solver_type (solver_data->eps); + } // set the initial vector(s) if any if (initial_vector && initial_vector->size() != 0)