dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #18107
Re: Fwd: [Branch ~dolfin-core/dolfin/main] Rev 4692: Issue error by default when solvers don't converge (parameter "error_on_convergence")
On Sun, Apr 18, 2010 at 07:03:34PM +0400, Garth N. Wells wrote:
> What about the other backends?
>
> Garth
You mean EpetraKrylovSolver and ITLKrylovSolver? I never use those so
I forgot about them. Any others or just the two?
--
Anders
> -------- Original Message --------
> Subject: [Branch ~dolfin-core/dolfin/main] Rev 4692: Issue error by
> default when solvers don't converge (parameter
> "error_on_convergence")
> Date: Thu, 15 Apr 2010 19:30:37 -0000
> From: noreply@xxxxxxxxxxxxx
> Reply-To: noreply@xxxxxxxxxxxxx
> To: Garth Wells <gnw20@xxxxxxxxx>
>
> ------------------------------------------------------------
> revno: 4692
> committer: Anders Logg <logg@xxxxxxxxx>
> branch nick: dolfin-dev
> timestamp: Thu 2010-04-15 20:57:43 +0200
> message:
> Issue error by default when solvers don't converge (parameter
> "error_on_convergence")
> modified:
> ChangeLog
> dolfin/la/PETScKrylovSolver.cpp
> dolfin/la/uBLASKrylovSolver.cpp
> dolfin/la/uBLASKrylovSolver.h
> dolfin/nls/NewtonSolver.cpp
> dolfin/parameter/GlobalParameters.h
>
>
> === modified file 'ChangeLog'
> --- ChangeLog 2010-04-08 10:38:46 +0000
> +++ ChangeLog 2010-04-15 18:57:43 +0000
> @@ -1,3 +1,4 @@
> + - Issue error by default when solvers don't converge (parameter "error_on_convergence")
> - Add option to print matrix/vector for a VariationalProblem
> - Trilinos backend now works in parallel
> - Remove Mesh refine members functions. Use free refine(...) functions instead
>
> === modified file 'dolfin/la/PETScKrylovSolver.cpp'
> --- dolfin/la/PETScKrylovSolver.cpp 2010-04-05 17:22:50 +0000
> +++ dolfin/la/PETScKrylovSolver.cpp 2010-04-15 18:57:43 +0000
> @@ -1,11 +1,11 @@
> // Copyright (C) 2005 Johan Jansson.
> // Licensed under the GNU LGPL Version 2.1.
> //
> -// Modified by Anders Logg, 2005-2009.
> +// Modified by Anders Logg, 2005-2010.
> // Modified by Garth N. Wells, 2005-2010.
> //
> // First added: 2005-12-02
> -// Last changed: 2010-04-05
> +// Last changed: 2010-04-15
>
> #ifdef HAS_PETSC
>
> @@ -156,7 +156,13 @@
> KSPConvergedReason reason;
> KSPGetConvergedReason(*_ksp, &reason);
> if (reason < 0)
> - warning("Krylov solver did not converge (PETSc reason %i).", reason);
> + {
> + bool error_on_nonconvergence = parameters["error_on_nonconvergence"];
> + if (error_on_nonconvergence)
> + error("Krylov solver did not converge (PETSc reason %i).", reason);
> + else
> + warning("Krylov solver did not converge (PETSc reason %i).", reason);
> + }
>
> // Get the number of iterations
> int num_iterations = 0;
>
> === modified file 'dolfin/la/uBLASKrylovSolver.cpp'
> --- dolfin/la/uBLASKrylovSolver.cpp 2009-09-08 16:38:36 +0000
> +++ dolfin/la/uBLASKrylovSolver.cpp 2010-04-15 18:57:43 +0000
> @@ -1,10 +1,10 @@
> // Copyright (C) 2006-2009 Garth N. Wells.
> // Licensed under the GNU LGPL Version 2.1.
> //
> -// Modified by Anders Logg, 2006-2009.
> +// Modified by Anders Logg, 2006-2010.
> //
> // First added: 2006-05-31
> -// Last changed: 2009-09-08
> +// Last changed: 2010-04-15
>
> #include <boost/assign/list_of.hpp>
> #include "uBLASILUPreconditioner.h"
>
> === modified file 'dolfin/la/uBLASKrylovSolver.h'
> --- dolfin/la/uBLASKrylovSolver.h 2009-09-08 13:03:05 +0000
> +++ dolfin/la/uBLASKrylovSolver.h 2010-04-15 18:57:43 +0000
> @@ -1,10 +1,10 @@
> // Copyright (C) 2006-2009 Garth N. Wells.
> // Licensed under the GNU LGPL Version 2.1.
> //
> -// Modified by Anders Logg, 2006-2008.
> +// Modified by Anders Logg, 2006-2010.
> //
> // First added: 2006-05-31
> -// Last changed: 2009-09-08
> +// Last changed: 2010-04-15
>
> #ifndef __UBLAS_KRYLOV_SOLVER_H
> #define __UBLAS_KRYLOV_SOLVER_H
> @@ -157,9 +157,15 @@
> error("Requested Krylov method unknown.");
>
> // Check for convergence
> - if( !converged )
> - warning("Krylov solver failed to converge.");
> - else if ( report )
> + if (!converged)
> + {
> + bool error_on_nonconvergence = parameters["error_on_nonconvergence"];
> + if (error_on_nonconvergence)
> + error("Krylov solver failed to converge.");
> + else
> + warning("Krylov solver failed to converge.");
> + }
> + else if (report)
> info("Krylov solver converged in %d iterations.", iterations);
>
> return iterations;
>
> === modified file 'dolfin/nls/NewtonSolver.cpp'
> --- dolfin/nls/NewtonSolver.cpp 2010-04-05 17:22:50 +0000
> +++ dolfin/nls/NewtonSolver.cpp 2010-04-15 18:57:43 +0000
> @@ -6,7 +6,7 @@
> // Modified by Johan Hake, 2010.
> //
> // First added: 2005-10-23
> -// Last changed: 2010-03-04
> +// Last changed: 2010-04-15
>
> #include <iostream>
> #include <dolfin/common/NoDeleter.h>
> @@ -110,7 +110,13 @@
> info(PROGRESS, "Newton solver finished in %d iterations and %d linear solver iterations.",
> newton_iteration, krylov_iterations);
> else
> - warning("Newton solver did not converge.");
> + {
> + bool error_on_nonconvergence = parameters["error_on_nonconvergence"];
> + if (error_on_nonconvergence)
> + error("Newton solver did not converge.");
> + else
> + warning("Newton solver did not converge.");
> + }
>
> end();
>
>
> === modified file 'dolfin/parameter/GlobalParameters.h'
> --- dolfin/parameter/GlobalParameters.h 2010-03-22 12:48:12 +0000
> +++ dolfin/parameter/GlobalParameters.h 2010-04-15 18:57:43 +0000
> @@ -2,7 +2,7 @@
> // Licensed under the GNU LGPL Version 2.1.
> //
> // First added: 2009-07-02
> -// Last changed: 2010-03-22
> +// Last changed: 2010-04-15
>
> #ifndef __GLOBAL_PARAMETERS_H
> #define __GLOBAL_PARAMETERS_H
> @@ -43,21 +43,24 @@
> p.add("optimize_use_tensor_cache", false); // Store tensors in cache for reuse
> p.add("optimize", false); // All of the above
>
> - // Linear algebra ---
> + // Linear algebra
> #ifdef HAS_PETSC
> p.add("linear_algebra_backend", "PETSc"); // Use PETSc if available
> #else
> p.add("linear_algebra_backend", "uBLAS"); // Otherwise, use uBLAS
> #endif
>
> - // Floating-point precision (only relevant when using GMP) ---
> + // Solvers
> + p.add("error_on_nonconvergence", true); // Issue an error if solver does not converge (otherwise warning)
> +
> + // Floating-point precision (only relevant when using GMP)
> #ifdef HAS_GMP
> p.add("floating_point_precision", 30); // Use higher precision for GMP (can be changed)
> #else
> p.add("floating_point_precision", 16); // Use double precision when GMP is not available
> #endif
>
> - // Graph partitioner ---
> + // Graph partitioner
> p.add("mesh_partitioner", "ParMETIS");
>
> return p;
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
Attachment:
signature.asc
Description: Digital signature
Follow ups
References