diff --git a/examples/diffusion/mesh1D.py b/examples/diffusion/mesh1D.py index a9f8e71a4f..6c64b8a65d 100755 --- a/examples/diffusion/mesh1D.py +++ b/examples/diffusion/mesh1D.py @@ -720,24 +720,30 @@ and solve the steady-state problem ->>> DiffusionTerm(coeff=D).solve(var=phi) #doctest: +PYSPARSE_SOLVER +>>> try: +... DiffusionTerm(coeff=D).solve(var=phi) +... except: +... pass >>> if __name__ == '__main__': ... viewer.plot() >>> from fipy import input >>> if __name__ == '__main__': -... input("No-flux - stead-state failure. \ +... input("No-flux - steady-state failure. \ ... Press to proceed...") ->>> print(numerix.allclose(phi, 0.0)) #doctest: +PYSPARSE_SOLVER -True +>>> print(numerix.allclose(phi, 0.2, atol=1e-5)) # doctest: +NOT_TRILINOS_SOLVER +False .. image:: /figures/examples/diffusion/mesh1D-noflux_steady_fail.* :width: 90% :align: center :alt: (failed) steady-state solution for no-flux boundary conditions -we find that the value is uniformly zero! What happened to our no-flux boundary -conditions? +Depending on the solver, we find that the value may be uniformly zero, +infinity, or NaN, or the solver may just fail! +What happened to our no-flux boundary conditions? +Trilinos actually manages to get the correct solution, but this should not +be relied on; this problem has an infinite number of solutions. The problem is that in the implicit discretization of :math:`\nabla\cdot(D\nabla\phi) = 0`, diff --git a/fipy/solvers/__init__.py b/fipy/solvers/__init__.py index 01180b9267..613e68b9ec 100644 --- a/fipy/solvers/__init__.py +++ b/fipy/solvers/__init__.py @@ -190,6 +190,12 @@ def _import_mesh_matrices(suite): test=lambda: solver_suite != 'pyamgx', why="the PyAMGX solver is being used.", skipWarning=True) + +register_skipper(flag='NOT_TRILINOS_SOLVER', + test=lambda: solver_suite not in ['trilinos', 'no-pysparse'], + why="the Trilinos solvers are being used.", + skipWarning=True) + del register_skipper _log.info("Solver suite is %s", solver_suite)