Subject: [Fenics] intermittent error in uBLAS gmres solver

From: Douglas Arnold <[email-masked]>
Date: Tue, 15 Jun 2010 17:29:25 -0500

I am having a strange problem with the gmres solver using the
uBLAS backend.  The strange part is that it works fine sometimes,
and fails others, with the same code.

A simple code that demonstrates the problem is:

   from dolfin import *
   parameters["linear_algebra_backend"] = "PETSc"
   mesh = UnitSquare(3,3)
   V = FunctionSpace(mesh, 'CG', 1)
   v = TestFunction(V)
   u = TrialFunction(V)
   a = u*v*dx
   A = assemble(a)
   L = v*dx
   b = assemble(L)
   x = Vector(b.size())
   solve(A, x, b)
   print x.array()

Here I run it and get the expected output:

: vinh512 1032; python solve3.py
Warning: Converting real-valued parameter to double, might loose precision.
Warning: Converting real-valued parameter to double, might loose precision.
Matrix of size 16 x 16 has 82 nonzero entries.
Sorting sparsity pattern.
Warning: Converting real-valued parameter to double, might loose precision.
Solving linear system of size 16 x 16 (uBLAS Krylov solver).
Krylov solver converged in 5 iterations.
[ 1.00000005  0.99999996  1.00000011  1.00000001  0.99999996  0.99999992
   0.99999997  0.99999995  1.00000011  0.99999997  0.99999998  1.00000003
   1.00000001  0.99999995  1.00000003  0.99999999]

Then I run it again, and get an error message:

: vinh512 1032; python solve3.py
Warning: Converting real-valued parameter to double, might loose precision.
Warning: Converting real-valued parameter to double, might loose precision.
Matrix of size 16 x 16 has 82 nonzero entries.
Sorting sparsity pattern.
Warning: Converting real-valued parameter to double, might loose precision.
Solving linear system of size 16 x 16 (uBLAS Krylov solver).
Check failed in file /usr/include/boost/numeric/ublas/operation.hpp at 
line 260:
norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * 
verrorbound
Traceback (most recent call last):
   File "solve3.py", line 12, in <module>
     solve(A, x, b, 'gmres')
   File 
"/home/faculty/arnold/workshop/FEniCS/lib/python2.6/site-packages/dolfin/cpp.py", 
line 4169, in solve
     return _cpp.solve(*args)
StandardError: internal logic

Searching on the web for the error message came up with this:
   http://archives.free.net.ph/message/20081022.224821.1eddeaa9.da.html
where Gunter Winkler suggests "#define BOOST_UBLAS_TYPE_CHECK 0",
but I don't know how to do this from dolfin.

Any ideas what is going on or how to fix?

---

From: "Garth N. Wells" <[email-masked]>
Date: Wed, 16 Jun 2010 07:44:15 +0100

> Krylov solver converged in 5 iterations.

I get this too. I've created a bug report so that we can keep track of it.

     https://bugs.launchpad.net/dolfin/+bug/594954

Garth

> _______________________________________________
> Mailing list: https://launchpad.net/~fenics
> Post to : [email-masked]
> Unsubscribe : https://launchpad.net/~fenics
> More help : https://help.launchpad.net/ListHelp