/[escript]/trunk/escript/test/python/test_linearPDEs.py
ViewVC logotype

Diff of /trunk/escript/test/python/test_linearPDEs.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/esys2/escript/py_src/test_linearPDEs.py revision 149 by jgs, Thu Sep 1 03:31:39 2005 UTC trunk/escript/py_src/test_linearPDEs.py revision 531 by gross, Wed Feb 15 08:11:10 2006 UTC
# Line 23  __date__="$Date$" Line 23  __date__="$Date$"
23    
24    
25    
26  from esys.escript.util import Lsup,kronecker,interpolate  from esys.escript.util import Lsup,kronecker,interpolate,whereZero
27  from esys.escript import Function,FunctionOnBoundary,FunctionOnContactZero,Solution,ReducedSolution,Vector,ContinuousFunction,Scalar  from esys.escript import Function,FunctionOnBoundary,FunctionOnContactZero,Solution,ReducedSolution,Vector,ContinuousFunction,Scalar
28  from esys.escript.linearPDEs import LinearPDE,IllegalCoefficientValue,Poisson  from esys.escript.linearPDEs import LinearPDE,IllegalCoefficientValue,Poisson
29  import numarray  import numarray
# Line 31  import unittest Line 31  import unittest
31    
32  class Test_linearPDEs(unittest.TestCase):  class Test_linearPDEs(unittest.TestCase):
33      TOL=1.e-6      TOL=1.e-6
34        SOLVER_TOL=1.e-10
35      DEBUG=False      DEBUG=False
36      VERBOSE=False      VERBOSE=False
37      def check(self,arg,ref_arg,tol=None):      def check(self,arg,ref_arg,tol=None):
# Line 48  class Test_Poisson(Test_linearPDEs): Line 49  class Test_Poisson(Test_linearPDEs):
49      def test_setCoefficient_q(self):      def test_setCoefficient_q(self):
50          mypde=Poisson(self.domain,debug=self.DEBUG)          mypde=Poisson(self.domain,debug=self.DEBUG)
51          x=self.domain.getX()          x=self.domain.getX()
52          q_ref=interpolate(x[0].whereZero(),Solution(self.domain))          q_ref=interpolate(whereZero(x[0]),Solution(self.domain))
53          A_ref=kronecker(self.domain)          A_ref=kronecker(self.domain)
54          mypde.setValue(q=x[0].whereZero())          mypde.setValue(q=whereZero(x[0]))
55          self.failUnless(self.check(mypde.getCoefficientOfGeneralPDE("A"),A_ref),"A is not kronecker")          self.failUnless(self.check(mypde.getCoefficientOfGeneralPDE("A"),A_ref),"A is not kronecker")
56          self.failUnless(mypde.getCoefficientOfGeneralPDE("B").isEmpty(),"B is not empty")          self.failUnless(mypde.getCoefficientOfGeneralPDE("B").isEmpty(),"B is not empty")
57          self.failUnless(mypde.getCoefficientOfGeneralPDE("C").isEmpty(),"C is not empty")          self.failUnless(mypde.getCoefficientOfGeneralPDE("C").isEmpty(),"C is not empty")
# Line 92  class Test_Poisson(Test_linearPDEs): Line 93  class Test_Poisson(Test_linearPDEs):
93         #construct mask:         #construct mask:
94         msk=Scalar(0.,cf)         msk=Scalar(0.,cf)
95         for i in range(d):         for i in range(d):
96           msk+=x[i].whereZero()           msk+=whereZero(x[i])
97         #construct right hand side         #construct right hand side
98         f=Scalar(0,cf)         f=Scalar(0,cf)
99         for i in range(d):         for i in range(d):
# Line 332  class Test_LinearPDE(Test_linearPDEs): Line 333  class Test_LinearPDE(Test_linearPDEs):
333      def test_resetCoefficient_HomogeneousConstraint(self):      def test_resetCoefficient_HomogeneousConstraint(self):
334          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
335          x=self.domain.getX()          x=self.domain.getX()
336          mypde.setValue(A=kronecker(self.domain),Y=1.,q=x[0].whereZero())          mypde.setValue(A=kronecker(self.domain),Y=1.,q=whereZero(x[0]))
337          u1=mypde.getSolution()          u1=mypde.getSolution()
338          mypde.setValue(Y=2.)          mypde.setValue(Y=2.)
339          u2=mypde.getSolution()          u2=mypde.getSolution()
# Line 340  class Test_LinearPDE(Test_linearPDEs): Line 341  class Test_LinearPDE(Test_linearPDEs):
341    
342      def test_resetCoefficient_InHomogeneousConstraint(self):      def test_resetCoefficient_InHomogeneousConstraint(self):
343          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
344            mypde.setSymmetryOn()
345          x=self.domain.getX()          x=self.domain.getX()
346          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.,r=1,q=x[0].whereZero())          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.,r=1,q=whereZero(x[0]))
347          u1=mypde.getSolution()          u1=mypde.getSolution(verbose=self.VERBOSE)
348          mypde.setValue(Y=2.,D=2)          mypde.setValue(Y=2.,D=2)
349          u2=mypde.getSolution()          u2=mypde.getSolution(verbose=self.VERBOSE)
350          self.failUnless(self.check(u2,u1),'solution is wrong.')          self.failUnless(self.check(u2,u1),'first solution is wrong.')
351            u2=mypde.getSolution(verbose=self.VERBOSE)
352            self.failUnless(self.check(u2,u1),'first solution is wrong.')
353          mypde.setValue(r=2,Y=4.)          mypde.setValue(r=2,Y=4.)
354          u2=mypde.getSolution()          u2=mypde.getSolution(verbose=self.VERBOSE)
355          self.failUnless(self.check(u2,2*u1),'solution is wrong.')          self.failUnless(self.check(u2,2*u1),'second solution is wrong.')
356    
357      def test_symmetryCheckTrue_System(self):      def test_symmetryCheckTrue_System(self):
358          d=self.domain.getDim()          d=self.domain.getDim()
# Line 443  class Test_LinearPDE(Test_linearPDEs): Line 447  class Test_LinearPDE(Test_linearPDEs):
447      def test_PCG_JACOBI(self):      def test_PCG_JACOBI(self):
448          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
449          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
450          mypde.setSolverMethod(mypde.PCG)          mypde.setSolverMethod(mypde.PCG,mypde.JACOBI)
451          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI)          u=mypde.getSolution(verbose=self.VERBOSE)
452          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
453      def test_PCG_ILU0(self):      def test_PCG_ILU0(self):
454          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
455          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
456          mypde.setSolverMethod(mypde.PCG)          mypde.setSolverMethod(mypde.PCG,mypde.ILU0)
457          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
458          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
459      def test_DIRECT(self):      def test_DIRECT(self):
460          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
461          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
462          mypde.setSolverMethod(mypde.DIRECT)          mypde.setSolverMethod(mypde.DIRECT)
463          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
464          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
465      def test_BICGSTAB_JACOBI(self):      def test_BICGSTAB_JACOBI(self):
466          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
467      mypde.setSolverMethod(mypde.BICGSTAB)      mypde.setSolverMethod(mypde.BICGSTAB,mypde.JACOBI)
468          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
469          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI)          u=mypde.getSolution(verbose=self.VERBOSE)
470          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
471      def test_BICGSTAB_ILU0(self):      def test_BICGSTAB_ILU0(self):
472          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
473          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
474      mypde.setSolverMethod(mypde.BICGSTAB)      mypde.setSolverMethod(mypde.BICGSTAB,mypde.ILU0)
475          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
476          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
477      def test_PRES20_JACOBI(self):      def test_PRES20_JACOBI(self):
478          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
479          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
480      mypde.setSolverMethod(mypde.PRES20)      mypde.setSolverMethod(mypde.PRES20,mypde.JACOBI)
481          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI)          u=mypde.getSolution(verbose=self.VERBOSE)
482          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
483      def test_PRES20_ILU0(self):      def test_PRES20_ILU0(self):
484          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
485          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
486      mypde.setSolverMethod(mypde.PRES20)      mypde.setSolverMethod(mypde.PRES20,mypde.ILU0)
487          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
488          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
489      def test_GMRESnoRestart_JACOBI(self):      def test_GMRESnoRestart_JACOBI(self):
490          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
491          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
492      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.JACOBI)
493          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI)          # u=mypde.getSolution(verbose=self.VERBOSE,truncation=5)
494            u=mypde.getSolution(verbose=self.VERBOSE)
495          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
496      def test_GMRESnoRestart_ILU0(self):      def test_GMRESnoRestart_ILU0(self):
497          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
498          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
499      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.ILU0)
500          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          # u=mypde.getSolution(verbose=self.VERBOSE,truncation=5)
501            u=mypde.getSolution(verbose=self.VERBOSE)
502          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
503      def test_GMRES_JACOBI(self):      def test_GMRES_JACOBI(self):
504          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
505          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
506      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.JACOBI)
507          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI)          u=mypde.getSolution(verbose=self.VERBOSE)
508          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
509      def test_GMRES_ILU0(self):      def test_GMRES_ILU0(self):
510          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
511          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
512      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.ILU0)
513          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
514          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
515      def test_GMRES_truncation_restart_JACOBI(self):      def test_GMRES_truncation_restart_JACOBI(self):
516          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
517          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
518      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.JACOBI)
519          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.JACOBI,truncation=10,restart=20)          u=mypde.getSolution(verbose=self.VERBOSE,truncation=10,restart=20)
520          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
521      def test_GMRES_truncation_restart_ILU0(self):      def test_GMRES_truncation_restart_ILU0(self):
522          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
523          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)          mypde.setValue(A=kronecker(self.domain),D=1.,Y=1.)
524      mypde.setSolverMethod(mypde.GMRES)      mypde.setSolverMethod(mypde.GMRES,mypde.ILU0)
525          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0,truncation=10,restart=20)          u=mypde.getSolution(verbose=self.VERBOSE,truncation=10,restart=20)
526          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
527      def test_Lumping_attemptToSetA(self):      def test_Lumping_attemptToSetA(self):
528          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
# Line 525  class Test_LinearPDE(Test_linearPDEs): Line 531  class Test_LinearPDE(Test_linearPDEs):
531         mypde.setSolverMethod(mypde.LUMPING)         mypde.setSolverMethod(mypde.LUMPING)
532             mypde.setValue(A=kronecker(self.domain))             mypde.setValue(A=kronecker(self.domain))
533             u=mypde.getSolution(verbose=self.VERBOSE)             u=mypde.getSolution(verbose=self.VERBOSE)
534          except Warning:          except ValueError:
535             success=False             success=False
536          self.failUnless(not success,'warning should be issued')          self.failUnless(not success,'error should be issued')
537      def test_Lumping_attemptToSetB(self):      def test_Lumping_attemptToSetB(self):
538          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
539          try:          try:
# Line 535  class Test_LinearPDE(Test_linearPDEs): Line 541  class Test_LinearPDE(Test_linearPDEs):
541         mypde.setSolverMethod(mypde.LUMPING)         mypde.setSolverMethod(mypde.LUMPING)
542             mypde.setValue(B=kronecker(self.domain)[0])             mypde.setValue(B=kronecker(self.domain)[0])
543             u=mypde.getSolution(verbose=self.VERBOSE)             u=mypde.getSolution(verbose=self.VERBOSE)
544          except Warning:          except ValueError:
545             success=False             success=False
546          self.failUnless(not success,'warning should be issued')          self.failUnless(not success,'error should be issued')
547      def test_Lumping_attemptToSetC(self):      def test_Lumping_attemptToSetC(self):
548          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
549          try:          try:
# Line 545  class Test_LinearPDE(Test_linearPDEs): Line 551  class Test_LinearPDE(Test_linearPDEs):
551         mypde.setSolverMethod(mypde.LUMPING)         mypde.setSolverMethod(mypde.LUMPING)
552             mypde.setValue(C=kronecker(self.domain)[0])             mypde.setValue(C=kronecker(self.domain)[0])
553             u=mypde.getSolution(verbose=self.VERBOSE)             u=mypde.getSolution(verbose=self.VERBOSE)
554          except Warning:          except ValueError:
555             success=False             success=False
556          self.failUnless(not success,'warning should be issued')          self.failUnless(not success,'error should be issued')
557                    
558      def test_Lumping(self):      def test_Lumping(self):
559          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
560      mypde.setSolverMethod(mypde.LUMPING)      mypde.setSolverMethod(mypde.LUMPING)
561          mypde.setValue(D=1.,Y=1.)          mypde.setValue(D=1.,Y=1.)
562          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
563          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
564      def test_Constrained_Lumping(self):      def test_Constrained_Lumping(self):
565          x=self.domain.getX()          x=self.domain.getX()
566          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
567      mypde.setSolverMethod(mypde.LUMPING)      mypde.setSolverMethod(mypde.LUMPING)
568          mypde.setValue(D=1.,Y=1.,q=x[0].whereZero(),r=1.)          mypde.setValue(D=1.,Y=1.,q=whereZero(x[0]),r=1.)
569          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
570          self.failUnless(self.check(u,1.),'solution is wrong.')          self.failUnless(self.check(u,1.),'solution is wrong.')
571    
572        def test_Lumping_System(self):
573            mypde=LinearPDE(self.domain,debug=self.DEBUG)
574        mypde.setSolverMethod(mypde.LUMPING)
575            mypde.setValue(D=numarray.array([[1.,0.],[0.,2.]]),Y=numarray.array([1.,2.]))
576            u=mypde.getSolution(verbose=self.VERBOSE)
577            self.failUnless(self.check(u,numarray.ones((2,))),'solution is wrong.')
578        def test_Constrained_Lumping_System(self):
579            x=self.domain.getX()
580            mypde=LinearPDE(self.domain,debug=self.DEBUG)
581        mypde.setSolverMethod(mypde.LUMPING)
582            mypde.setValue(D=numarray.array([[1.,0.],[0.,2.]]),Y=numarray.array([1.,2.]), \
583                           q=whereZero(x[0])*[0.,1],r=[0.,1.])
584            u=mypde.getSolution(verbose=self.VERBOSE)
585            self.failUnless(self.check(u,numarray.ones((2,))),'solution is wrong.')
586    
587      def test_Lumping_updateRHS(self):      def test_Lumping_updateRHS(self):
588          x=self.domain.getX()          x=self.domain.getX()
589          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
590      mypde.setSolverMethod(mypde.LUMPING)      mypde.setSolverMethod(mypde.LUMPING)
591          mypde.setValue(D=1.,Y=1.)          mypde.setValue(D=1.,Y=1.)
592          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
593          self.failUnless(self.check(u,1.),'first solution is wrong.')          self.failUnless(self.check(u,1.),'first solution is wrong.')
594          mypde.setValue(Y=2.,q=x[0].whereZero(),r=2.)          mypde.setValue(Y=2.,q=whereZero(x[0]),r=2.)
595          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
596          self.failUnless(self.check(u,2.),'second solution is wrong.')          self.failUnless(self.check(u,2.),'second solution is wrong.')
597      def test_Lumping_updateOperator(self):      def test_Lumping_updateOperator(self):
598          x=self.domain.getX()          x=self.domain.getX()
599          mypde=LinearPDE(self.domain,debug=self.DEBUG)          mypde=LinearPDE(self.domain,debug=self.DEBUG)
600      mypde.setSolverMethod(mypde.LUMPING)      mypde.setSolverMethod(mypde.LUMPING)
601          mypde.setValue(D=1.,Y=1.)          mypde.setValue(D=1.,Y=1.)
602          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
603          mypde.setValue(D=2.)          mypde.setValue(D=2.)
604          u=mypde.getSolution(verbose=self.VERBOSE,preconditioner=mypde.ILU0)          u=mypde.getSolution(verbose=self.VERBOSE)
605          self.failUnless(self.check(u,0.5),'second solution is wrong.')          self.failUnless(self.check(u,0.5),'second solution is wrong.')
606    

Legend:
Removed from v.149  
changed lines
  Added in v.531

  ViewVC Help
Powered by ViewVC 1.1.26