# Diff of /trunk/escript/test/python/test_pdetools.py

revision 1467 by trankine, Fri Jan 11 07:45:58 2008 UTC revision 1468 by gross, Thu Apr 3 04:14:48 2008 UTC
# Line 50  __date__="\$Date\$" Line 50  __date__="\$Date\$"
50
51  import unittest  import unittest
52  from esys.escript import *  from esys.escript import *
53  from esys.escript.pdetools import Locator,Projector,TimeIntegrationManager,NoPDE,PCG, IterationHistory, ArithmeticTuple  from esys.escript.pdetools import Locator,Projector,TimeIntegrationManager,NoPDE,PCG, IterationHistory, ArithmeticTuple, GMRES
54
55  class Test_pdetools_noLumping(unittest.TestCase):  class Test_pdetools_noLumping(unittest.TestCase):
56      DEBUG=False      DEBUG=False
# Line 409  class Test_pdetools_noLumping(unittest.T Line 409  class Test_pdetools_noLumping(unittest.T
409        self.failUnless(Lsup(x-x_ref)<=Lsup(x_ref)*tol*10.,"wrong solution")        self.failUnless(Lsup(x-x_ref)<=Lsup(x_ref)*tol*10.,"wrong solution")
410        self.failUnless(Lsup(r-(b-matrixmultiply(A,x)))<=Lsup(b)*EPSILON*100.,"wrong solution")        self.failUnless(Lsup(r-(b-matrixmultiply(A,x)))<=Lsup(b)*EPSILON*100.,"wrong solution")
411
412        def testGMRES(self):
413          from numarray import array,matrixmultiply, zeros, dot, size, Float64
414          from math import sqrt
415          A=array([[  4.752141253159452e+02, -2.391895572674098e-01,
416                      5.834798554135237e-01, -3.704394311709722e+00,
417                      5.765369186984777e+00, -1.309786358737351e+01,
418                      2.522087134507148e+01, -3.393956279045637e+01,
419                      1.046856914770830e+02, -2.447764190849540e+02],
420                   [ -2.391895572674098e-01,  1.256797283910693e+02,
421                     -9.188270412920813e-01,  1.300169538880688e+00,
422                     -5.353714719231424e-01,  2.674709444667012e+00,
423                     -1.116097841269580e+01,  2.801193427514478e+01,
424                     -3.877806125898224e+01,  3.063505753648256e+01],
425                   [  5.834798554135237e-01, -9.188270412920813e-01,
426                      6.240841811806843e+01, -8.176289504109282e-01,
427                      1.447935098417076e-01, -9.721424148655324e-01,
428                      6.713551574117577e-01, -3.656297654168375e+00,
429                      7.015141656913973e+00, -4.195525932156250e+01],
430                   [ -3.704394311709722e+00,  1.300169538880688e+00,
431                     -8.176289504109282e-01,  3.604980536782198e+01,
432                     -6.241238423759328e-01,  1.142345320047869e+00,
433                     -3.438816797096519e+00,  5.854857481367470e+00,
434                     -4.524311288596452e+00,  1.136590280389803e+01],
435                   [  5.765369186984777e+00, -5.353714719231424e-01,
436                      1.447935098417076e-01, -6.241238423759328e-01,
437                      2.953997190215862e+01, -9.474729233464712e-01,
438                      1.883516378345809e+00, -1.906274765704230e+00,
439                      4.401859671778645e+00, -1.064573816075257e+01],
440                   [ -1.309786358737351e+01,  2.674709444667012e+00,
441                     -9.721424148655324e-01,  1.142345320047869e+00,
442                     -9.474729233464712e-01,  2.876998216302979e+01,
443                     -4.853065259692995e-01,  7.088596468102618e-01,
444                     -8.972224295152829e-01,  5.228606946522749e+00],
445                   [  2.522087134507148e+01, -1.116097841269580e+01,
446                      6.713551574117577e-01, -3.438816797096519e+00,
447                      1.883516378345809e+00, -4.853065259692995e-01,
448                      5.121175860935919e+01, -3.523133115905478e-01,
449                      1.782136702229135e+00, -1.560849559916187e+00],
450                   [ -3.393956279045637e+01,  2.801193427514478e+01,
451                     -3.656297654168375e+00,  5.854857481367470e+00,
452                     -1.906274765704230e+00,  7.088596468102618e-01,
453                     -3.523133115905478e-01,  8.411681423853814e+01,
454                     -5.238590858177903e-01,  1.515872114883926e+00],
455                   [  1.046856914770830e+02, -3.877806125898224e+01,
456                      7.015141656913973e+00, -4.524311288596452e+00,
457                      4.401859671778645e+00, -8.972224295152829e-01,
458                      1.782136702229135e+00, -5.238590858177903e-01,
459                      1.797889693808014e+02, -8.362340479938084e-01],
460                   [ -2.447764190849540e+02,  3.063505753648256e+01,
461                     -4.195525932156250e+01,  1.136590280389803e+01,
462                     -1.064573816075257e+01,  5.228606946522749e+00,
463                     -1.560849559916187e+00,  1.515872114883926e+00,
464                     -8.362340479938084e-01,  3.833719335346630e+02]])
465          x_ref=array([ 0.41794207085296,   0.031441086046563,  0.882801683420401,
466                         0.807186823427233,  0.48950999450145,   0.995486532098031,
467                         0.351243009576568,  0.704352576819321,  0.850648989740204,
468                         0.314596738052894])
469          b=array([ 182.911023960262952,   -1.048322041992754,   44.181293875206201,
470                    30.344553414038817,   15.247917439094513,   24.060664905403492,
471                    27.210293789825833,   47.122067744075842,  199.267136417856847,
472                    -8.7934289814322  ])
473
474          def Ap(x):
475              return matrixmultiply(A,x)
476          def Ms(b):
477              out=zeros((size(b),),Float64)
478              for i in xrange(size(b)):
479                out[i]=b[i]/A[i,i]
480              return out
481
482          tol=1.e-4
483          x=GMRES(b*1.,Ap,Ms,dot, IterationHistory(tol).stoppingcriterium2,x=x_ref*1.5, iter_max=12)
484          self.failUnless(Lsup(x-x_ref)<=Lsup(x_ref)*tol*10.,"wrong solution")
485
486      def testArithmeticTuple(self):      def testArithmeticTuple(self):
487          a=ArithmeticTuple(1.,2.)          a=ArithmeticTuple(1.,2.)
488          self.failUnless(len(a)==2,"wrong length")          self.failUnless(len(a)==2,"wrong length")

Legend:
 Removed from v.1467 changed lines Added in v.1468