Changeset 475


Ignore:
Timestamp:
Nov 1, 2004, 3:30:45 PM (20 years ago)
Author:
ole
Message:

Modified test_cg to use sparse.py

Location:
inundation/ga/storm_surge/pyvolution
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/pyvolution/cg_solve.py

    r467 r475  
    33
    44
    5 def conjugate_gradient(A,b,x0,imax=10000,tol=1.0e-8,iprint=0):
     5def conjugate_gradient(A,b,x0=None,imax=10000,tol=1.0e-8,iprint=0):
    66   """
    77   Try to solve linear equation Ax = b using
     
    1010   Input
    1111   A: matrix or function which applies a matrix, assumed symmetric
     12      A can be either dense or sparse
    1213   b: right hand side
    13    x0: inital guess
     14   x0: inital guess (default the 0 vector)
    1415   imax: max number of iterations
    1516   tol: tolerance used for residual
     
    1920   """
    2021
    21    #if nargin<3
    22    #   x0 = zeros(b);
    23    #end
    24 
    25    from Numeric import dot, asarray, Float
    26    #from operator import mod
    27 
    28    b  = asarray(b, typecode=Float)
    29    x0 = asarray(x0, typecode=Float)
    30    #A = asarray(A, typecode=Float)
    31 
    32    #print "A shape",A.shape
    33    #print "b shape",len(b.shape)
    34    #print "x0 shape",x0.shape[0]
     22   from Numeric import dot, array, Float, zeros
     23   
     24   b  = array(b, typecode=Float)
     25   
     26   if x0 is None:
     27      x0 = zeros(b.shape, typecode=Float)
     28   else:   
     29      x0 = array(x0, typecode=Float)
     30     
    3531
    3632   if len(b.shape) != 1 :
    3733      raise VectorShapeError, 'input vector should consist of only one column'
    3834
     35   #FIXME: Should test using None
    3936   if iprint == 0:
    4037      iprint = imax
  • inundation/ga/storm_surge/pyvolution/test_cg_solve.py

    r454 r475  
    33import unittest
    44
    5 from Matrix import *
     5
    66from Numeric import dot, allclose, array, transpose, arange, ones, Float
    77from cg_solve import *
    8 from scipy import sparse, mat
     8from sparse import Sparse
    99
    1010
    1111class TestCase(unittest.TestCase):
    12 
    13 ##     def test_solve(self):
    14 ##         """Small Matrix"""
    15        
    16 ##         A = [[2.0, -1.0, 0.0, 0.0 ],
    17 ##              [-1.0, 2.0, -1.0, 0.0],
    18 ##              [0.0, -1.0, 2.0, -1.0],
    19 ##              [0.0, 0.0, -1.0, 2.0]]
    20 
    21 ##         A = mat(A)
    22 
    23 ##         xe = asarray([0.0, 1.0, 2.0,  3.0])
    24 ##         b  = A*xe
    25 ##         x =  asarray([0.0, 0.0, 0.0, 0.0])
    26 
    27 ##         print A
    28 ##         print xe
    29 ##         print b
    30 ##         print b.shape
    31 
    32 ##         x = conjugate_gradient(A,b,x,iprint=1)
    33 
    34 ##         assert allclose(x,xe)
    3512
    3613    def test_sparse_solve(self):
     
    4219             [0.0,0.0, -1.0, 2.0]]
    4320       
    44         A = sparse.dok_matrix(A)
     21        A = Sparse(A)
    4522
    4623        xe = [0.0, 1.0, 2.0, 3.0]
     
    5633        """Standard 1d laplacian """
    5734
    58         A = sparse.dok_matrix()
    59 
    6035        n = 50
     36        A = Sparse(n,n)
     37       
    6138        for i in arange(0,n):
    6239            A[i,i] = 1.0
     
    7653        """Standard 2d laplacian"""
    7754       
    78         A = sparse.dok_matrix()
    79 
    8055        n = 20
    8156        m = 10
     57
     58        A = Sparse(m*n, m*n)
     59
    8260        for i in arange(0,n):
    8361            for j in arange(0,m):
     
    10179
    10280
     81    def test_solve_large_2d_with_default_guess(self):
     82        """Standard 2d laplacian using default first guess"""
     83       
     84        n = 20
     85        m = 10
     86
     87        A = Sparse(m*n, m*n)
     88
     89        for i in arange(0,n):
     90            for j in arange(0,m):
     91                I = j+m*i
     92                A[I,I] = 4.0
     93                if i > 0  :
     94                    A[I,I-m] = -1.0
     95                if i < n-1 :
     96                    A[I,I+m] = -1.0
     97                if j > 0  :
     98                    A[I,I-1] = -1.0
     99                if j < m-1 :
     100                    A[I,I+1] = -1.0
     101               
     102        xe = ones( (n*m,), Float)
     103
     104        b  = A*xe
     105        x = conjugate_gradient(A,b)
     106
     107        assert allclose(x,xe)
     108
     109
    103110    def test_vector_shape_error(self):
    104111        """Raise VectorShapeError"""
     
    109116             [0.0,0.0, -1.0, 2.0]]
    110117       
    111         A = sparse.dok_matrix(A)
     118        A = Sparse(A)
    112119
    113120        xe = [[0.0,2.0], [1.0,3.0], [2.0,4.0], [3.0,2.0]]
    114         b  = A*xe
    115         x =  [0.0, 0.0, 0.0, 0.0]
    116121
    117122        try:
    118             x = conjugate_gradient(A,b,b,iprint=0)
     123            x = conjugate_gradient(A,xe,xe,iprint=0)
    119124        except:
    120125            pass
  • inundation/ga/storm_surge/pyvolution/test_least_squares.py

    r466 r475  
    671671if __name__ == "__main__":
    672672    suite = unittest.makeSuite(TestCase,'test')
    673     runner = unittest.TextTestRunner()   #(verbosity=2)
     673    runner = unittest.TextTestRunner(verbosity=1)
    674674    runner.run(suite)
    675675
Note: See TracChangeset for help on using the changeset viewer.