Changeset 218


Ignore:
Timestamp:
Aug 25, 2004, 4:43:44 AM (21 years ago)
Author:
ole
Message:

Made more tests of distribute based on data generated from previous pyvolution version (pyvolution2).
All tests passed.

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

Legend:

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

    r215 r218  
    137137    def set_quantity(self, name, X, location='vertices'):
    138138        """Set values for named quantity
    139 
     139       
    140140        name: Name of quantity
    141141        X: Compatible list, Numeric array, const or function (see below)
  • inundation/ga/storm_surge/pyvolution/test_shallow_water.py

    r215 r218  
    659659
    660660    #####################################################   
     661    def test_distribute_basic(self):
     662        #Using test data generated by pyvolution-2
     663        #Assuming no friction and flat bed (0.0)
     664       
     665        a = [0.0, 0.0]
     666        b = [0.0, 2.0]
     667        c = [2.0, 0.0]
     668        d = [0.0, 4.0]
     669        e = [2.0, 2.0]
     670        f = [4.0, 0.0]
     671
     672        points = [a, b, c, d, e, f]
     673        #bac, bce, ecf, dbe
     674        vertices = [ [1,0,2], [1,2,4], [4,2,5], [3,1,4]]
     675       
     676        domain = Domain(points, vertices)
     677       
     678        val0 = 2.
     679        val1 = 4.
     680        val2 = 8.
     681        val3 = 2.
     682
     683        domain.set_quantity('level', [val0, val1, val2, val3], 'centroids')
     684        L = domain.quantities['level'].vertex_values
     685       
     686        #First order
     687        domain.order = 1       
     688        domain.distribute_to_vertices_and_edges()
     689        assert allclose(L[1], val1)
     690       
     691        #Second order
     692        domain.order = 2       
     693        domain.distribute_to_vertices_and_edges()
     694        assert allclose(L[1], [2.2, 4.9, 4.9])
     695               
     696
     697       
     698    def test_distribute_away_from_bed(self):           
     699        #Using test data generated by pyvolution-2
     700        #Assuming no friction and flat bed (0.0)
     701       
     702        a = [0.0, 0.0]
     703        b = [0.0, 2.0]
     704        c = [2.0, 0.0]
     705        d = [0.0, 4.0]
     706        e = [2.0, 2.0]
     707        f = [4.0, 0.0]
     708
     709        points = [a, b, c, d, e, f]
     710        #bac, bce, ecf, dbe
     711        vertices = [ [1,0,2], [1,2,4], [4,2,5], [3,1,4]]
     712       
     713        domain = Domain(points, vertices)
     714        L = domain.quantities['level'].vertex_values   
     715       
     716        def level(x,y):
     717            return x**2
     718       
     719        domain.set_quantity('level', level, 'centroids')
     720       
     721        a, b = domain.quantities['level'].compute_gradients()           
     722        assert allclose(a[1], 3.33333334)
     723        assert allclose(b[1], 0.0)
     724       
     725        domain.order = 1
     726        domain.distribute_to_vertices_and_edges()
     727        assert allclose(L[1], 1.77777778)
     728       
     729        domain.order = 2
     730        domain.distribute_to_vertices_and_edges()
     731        assert allclose(L[1], [0.57777777, 2.37777778, 2.37777778])     
     732
     733
     734       
     735    def test_distribute_away_from_bed1(self):           
     736        #Using test data generated by pyvolution-2
     737        #Assuming no friction and flat bed (0.0)
     738       
     739        a = [0.0, 0.0]
     740        b = [0.0, 2.0]
     741        c = [2.0, 0.0]
     742        d = [0.0, 4.0]
     743        e = [2.0, 2.0]
     744        f = [4.0, 0.0]
     745
     746        points = [a, b, c, d, e, f]
     747        #bac, bce, ecf, dbe
     748        vertices = [ [1,0,2], [1,2,4], [4,2,5], [3,1,4]]
     749       
     750        domain = Domain(points, vertices)
     751        L = domain.quantities['level'].vertex_values   
     752       
     753        def level(x,y):
     754            return x**4+y**2
     755       
     756        domain.set_quantity('level', level, 'centroids')
     757        #print domain.quantities['level'].centroid_values               
     758       
     759        a, b = domain.quantities['level'].compute_gradients()           
     760        assert allclose(a[1], 25.18518519)
     761        assert allclose(b[1], 3.33333333)
     762       
     763        domain.order = 1
     764        domain.distribute_to_vertices_and_edges()
     765        assert allclose(L[1], 4.9382716)
     766       
     767        domain.order = 2
     768        domain.distribute_to_vertices_and_edges()
     769        assert allclose(L[1], [1.07160494, 6.46058131, 7.28262855])     
     770
     771   
     772   
    661773    def test_distribute_near_bed(self):
    662         #Assuming no friction
    663 
    664         from config import g
    665        
     774        #Using test data generated by pyvolution-2
     775        #Assuming no friction and flat bed (0.0)
     776
    666777        a = [0.0, 0.0]
    667778        b = [0.0, 2.0]
     
    676787       
    677788        domain = Domain(points, vertices)
    678         domain.order = 2
    679 
    680         #Set up for a gradient of (10,0) at mid triangle         
     789
     790
     791        #Set up for a gradient of (3,0) at mid triangle         
    681792        def slope(x, y):
    682793            return 10*x
     
    689800        domain.set_quantity('level', level, 'centroids')
    690801
     802        #print domain.quantities['elevation'].centroid_values   
     803        #print domain.quantities['level'].centroid_values
     804       
    691805        E = domain.quantities['elevation'].vertex_values
    692806        L = domain.quantities['level'].vertex_values
    693807
    694808        #print E
     809        domain.order = 1       
    695810        domain.distribute_to_vertices_and_edges()
    696         #print L
    697 
    698         #FIXME: HERTIL 24/8/4. Write similar test using pyvolution2 and
    699         #get test data from that
    700 
     811        assert allclose(L[1], [0.19999999, 20.05, 20.05])
     812
     813        domain.order = 2       
     814        domain.distribute_to_vertices_and_edges()
     815        assert allclose(L[1], [0.1, 20.1, 20.1])
     816
     817    def test_distribute_near_bed1(self):
     818        #Using test data generated by pyvolution-2
     819        #Assuming no friction and flat bed (0.0)
     820
     821        a = [0.0, 0.0]
     822        b = [0.0, 2.0]
     823        c = [2.0, 0.0]
     824        d = [0.0, 4.0]
     825        e = [2.0, 2.0]
     826        f = [4.0, 0.0]
     827
     828        points = [a, b, c, d, e, f]
     829        #bac, bce, ecf, dbe
     830        vertices = [ [1,0,2], [1,2,4], [4,2,5], [3,1,4]]
     831       
     832        domain = Domain(points, vertices)
     833
     834
     835        #Set up for a gradient of (3,0) at mid triangle         
     836        def slope(x, y):
     837            return x**4+y**2
     838
     839        h = 0.1
     840        def level(x,y):
     841            return slope(x,y)+h
     842
     843        domain.set_quantity('elevation', slope)
     844        domain.set_quantity('level', level)
     845
     846        #print domain.quantities['elevation'].centroid_values   
     847        #print domain.quantities['level'].centroid_values
     848       
     849        E = domain.quantities['elevation'].vertex_values
     850        L = domain.quantities['level'].vertex_values
     851
     852        #print E
     853        domain.order = 1       
     854        domain.distribute_to_vertices_and_edges()
     855        assert allclose(L[1], [4.19999999, 16.07142857, 20.02857143])
     856
     857        domain.order = 2       
     858        domain.distribute_to_vertices_and_edges()
     859        assert allclose(L[1], [4.1, 16.1, 20.1])
     860
     861#FIXME: Make version with variable height!!!!!!!!
    701862       
    702863    def test_second_order_flat_bed_onestep(self):
Note: See TracChangeset for help on using the changeset viewer.