Changeset 4480


Ignore:
Timestamp:
May 23, 2007, 5:07:40 PM (17 years ago)
Author:
duncan
Message:

removing lone verts when using sww2dem. checking in to test.

Location:
anuga_core/source/anuga
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/abstract_2d_finite_volumes/test_util.py

    r4473 r4480  
    13241324       
    13251325
     1326    def test_remove_lone_verts_d(self):
     1327        verts = [[0,0],[1,0],[0,1]]
     1328        tris = [[0,1,2]]
     1329        new_verts, new_tris = remove_lone_verts(verts, tris)
     1330        assert new_verts == verts
     1331        assert new_tris == tris
    13261332     
    13271333
     1334    def test_remove_lone_verts_e(self):
     1335        verts = [[0,0],[1,0],[0,1],[99,99]]
     1336        tris = [[0,1,2]]
     1337        new_verts, new_tris = remove_lone_verts(verts, tris)
     1338        assert new_verts == verts[0:3]
     1339        assert new_tris == tris
     1340       
     1341    def test_remove_lone_verts_a(self):
     1342        verts = [[99,99],[0,0],[1,0],[99,99],[0,1],[99,99]]
     1343        tris = [[1,2,4]]
     1344        new_verts, new_tris = remove_lone_verts(verts, tris)
     1345        #print "new_verts", new_verts
     1346        assert new_verts == [[0,0],[1,0],[0,1]]
     1347        assert new_tris == [[0,1,2]]
     1348     
     1349    def test_remove_lone_verts_c(self):
     1350        verts = [[0,0],[1,0],[99,99],[0,1]]
     1351        tris = [[0,1,3]]
     1352        new_verts, new_tris = remove_lone_verts(verts, tris)
     1353        #print "new_verts", new_verts
     1354        assert new_verts == [[0,0],[1,0],[0,1]]
     1355        assert new_tris == [[0,1,2]]
     1356       
     1357    def test_remove_lone_verts_b(self):
     1358        verts = [[0,0],[1,0],[0,1],[99,99],[99,99],[99,99]]
     1359        tris = [[0,1,2]]
     1360        new_verts, new_tris = remove_lone_verts(verts, tris)
     1361        assert new_verts == verts[0:3]
     1362        assert new_tris == tris
     1363     
     1364
     1365    def test_remove_lone_verts_e(self):
     1366        verts = [[0,0],[1,0],[0,1],[99,99]]
     1367        tris = [[0,1,2]]
     1368        new_verts, new_tris = remove_lone_verts(verts, tris)
     1369        assert new_verts == verts[0:3]
     1370        assert new_tris == tris
    13281371       
    13291372#-------------------------------------------------------------
    13301373if __name__ == "__main__":
    13311374    suite = unittest.makeSuite(Test_Util,'test')
    1332     #suite = unittest.makeSuite(Test_Util,'test_get_revision_number')
     1375    #suite = unittest.makeSuite(Test_Util,'test_remove_lone_verts')
    13331376    runner = unittest.TextTestRunner()
    13341377    runner.run(suite)
  • anuga_core/source/anuga/abstract_2d_finite_volumes/util.py

    r4473 r4480  
    1414from shutil import copy
    1515
     16from anuga.utilities.numerical_tools import ensure_numeric
     17from Numeric import arange, choose
     18   
    1619from anuga.geospatial_data.geospatial_data import ensure_absolute
    1720
     
    15671570        raise msg
    15681571
    1569      
    1570    
    1571    
    1572        
    1573    
    1574    
    1575      
    1576 
    1577 
     1572
     1573def remove_lone_verts(verts, triangles):
     1574    verts = ensure_numeric(verts)
     1575    triangles = ensure_numeric(triangles)
     1576    N = len(verts)
     1577    # initialise the array to easily find the index of the first loner
     1578    loners=arange(2*N, N, -1) # if N=3 [6,5,4]
     1579   
     1580    for i,t in enumerate(triangles):
     1581        for vert in t:
     1582            loners[vert]= vert # all non-loners will have loners[i]=i
     1583    #print loners
     1584
     1585    lone_start = 2*N - max(loners) # The index of the first loner
     1586
     1587    if lone_start-1 == N:
     1588        # no loners
     1589        pass
     1590    elif min(loners[lone_start:N]) > N:
     1591        # All the loners are at the end of the vert array
     1592        verts = verts[0:lone_start]
     1593    else:
     1594        # change the loners list so it can be used to modify triangle
     1595        # Remove the loners from verts
     1596        # Could've used X=compress(less(loners,N),loners)
     1597        # verts=take(verts,X)  to Remove the loners from verts
     1598        # but I think it would use more memory
     1599        new_i = 0
     1600        for i in range(lone_start, N):
     1601            if loners[i] >= N:
     1602                # Loner!
     1603                pass
     1604            else:
     1605                loners[i] = new_i
     1606                verts[new_i] = verts[i]
     1607                new_i += 1
     1608        verts = verts[0:new_i]
     1609
     1610        # Modify the triangles
     1611        #print "loners", loners
     1612        #print "triangles before", triangles
     1613        triangles = choose(triangles,loners)
     1614        #print "triangles after", triangles
     1615    return verts, triangles
     1616 
  • anuga_core/source/anuga/shallow_water/data_manager.py

    r4463 r4480  
    8585from anuga.abstract_2d_finite_volumes.pmesh2domain import \
    8686     pmesh_to_domain_instance
    87 from anuga.abstract_2d_finite_volumes.util import get_revision_number
     87from anuga.abstract_2d_finite_volumes.util import get_revision_number, \
     88     remove_lone_verts
    8889
    8990# formula mappings
     
    19301931    from anuga.fit_interpolate.interpolate import Interpolate
    19311932
     1933    # Remove loners from vertex_points, volumes here
     1934    vertex_points, volumes = remove_lone_verts(vertex_points, volumes)
     1935   
    19321936    interp = Interpolate(vertex_points, volumes, verbose = verbose)
    19331937
Note: See TracChangeset for help on using the changeset viewer.