Пример #1
0
    def test_create_mesh_from_regions5(self):
        file_name = tempfile.mktemp('.tsh')

        # These are the absolute values
        density_outer = 10000000
        min_outer = 0
        max_outer = 1000
        polygon_outer = [[min_outer, min_outer], [max_outer, min_outer],
                         [max_outer, max_outer], [min_outer, max_outer]]

        density_inner1 = 1000
        inner_buffer = 100
        min_inner1 = min_outer + inner_buffer
        max_inner1 = max_outer - inner_buffer
        inner1_polygon = [[min_inner1, min_inner1], [max_inner1, min_inner1],
                          [max_inner1, max_inner1], [min_inner1, max_inner1]]

        boundary_tags = {'walls': [0, 1], 'bom': [2, 3]}

        interior_regions = [(inner1_polygon, density_inner1)]
        create_mesh_from_regions(polygon_outer,
                                 boundary_tags,
                                 density_outer,
                                 interior_regions=interior_regions,
                                 filename=file_name,
                                 verbose=False)

        m = importMeshFromFile(file_name)
        self.assertTrue(
            len(m.getTriangulation()) <= 2000, 'Test mesh interface failed!')
        self.assertTrue(
            len(m.getTriangulation()) >= 900, 'Test mesh interface failed!')

        os.remove(file_name)
    def test_create_mesh_from_regions5(self):
        file_name = tempfile.mktemp('.tsh')

        # These are the absolute values
        density_outer = 10000000
        min_outer = 0
        max_outer = 1000
        polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],
                         [max_outer,max_outer], [min_outer,max_outer]]

        density_inner1 = 1000
        inner_buffer = 100
        min_inner1 = min_outer + inner_buffer
        max_inner1 = max_outer - inner_buffer
        inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1],
                          [max_inner1,max_inner1], [min_inner1,max_inner1]]

        boundary_tags = {'walls': [0,1], 'bom': [2,3]}

        interior_regions = [(inner1_polygon, density_inner1)]
        create_mesh_from_regions(polygon_outer,
                                 boundary_tags,
                                 density_outer,
                                 interior_regions=interior_regions,
                                 filename=file_name,
                                 verbose=False)

        m = importMeshFromFile(file_name)
        self.assertTrue(len(m.getTriangulation()) <= 2000,
                        'Test mesh interface failed!')
        self.assertTrue(len(m.getTriangulation()) >= 900,
                        'Test mesh interface failed!')

        os.remove(file_name)
Пример #3
0
def load_pts_as_polygon(points_file, minimum_triangle_angle=3.0):
    """
    WARNING: This function is not fully working.

    Function to return a polygon returned from alpha shape, given a points file.

    WARNING: Alpha shape returns multiple polygons, but this function only
             returns one polygon.
    """

    from anuga.pmesh.mesh import importMeshFromFile
    from anuga.shallow_water.shallow_water_domain import Domain

    mesh = importMeshFromFile(points_file)
    mesh.auto_segment()
    mesh.exportASCIIsegmentoutlinefile("outline.tsh")
    mesh2 = importMeshFromFile("outline.tsh")
    mesh2.generate_mesh(maximum_triangle_area=1000000000,
                        minimum_triangle_angle=minimum_triangle_angle,
                        verbose=False)
    mesh2.export_mesh_file('outline_meshed.tsh')
    domain = Domain("outline_meshed.tsh", use_cache = False)
    polygon =  domain.get_boundary_polygon()
    return polygon
Пример #4
0
def load_pts_as_polygon(points_file, minimum_triangle_angle=3.0):
    """
    WARNING: This function is not fully working.

    Function to return a polygon returned from alpha shape, given a points file.

    WARNING: Alpha shape returns multiple polygons, but this function only
             returns one polygon.
    """

    from anuga.pmesh.mesh import importMeshFromFile
    from anuga.shallow_water.shallow_water_domain import Domain

    mesh = importMeshFromFile(points_file)
    mesh.auto_segment()
    mesh.exportASCIIsegmentoutlinefile("outline.tsh")
    mesh2 = importMeshFromFile("outline.tsh")
    mesh2.generate_mesh(maximum_triangle_area=1000000000,
                        minimum_triangle_angle=minimum_triangle_angle,
                        verbose=False)
    mesh2.export_mesh_file('outline_meshed.tsh')
    domain = Domain("outline_meshed.tsh", use_cache=False)
    polygon = domain.get_boundary_polygon()
    return polygon
Пример #5
0
    def test_create_mesh_from_regions7(self):
        file_name = tempfile.mktemp('.tsh')

        # These are the absolute values
        density_outer = 1001
        min_outer = 0
        max_outer = 1000
        polygon_outer = [[min_outer, min_outer], [max_outer, min_outer],
                         [max_outer, max_outer], [min_outer, max_outer]]

        delta = 10
        density_inner1 = 100000000
        min_inner1 = min_outer + delta
        max_inner1 = max_outer - delta
        inner1_polygon = [[min_inner1, min_inner1], [max_inner1, min_inner1],
                          [max_inner1, max_inner1], [min_inner1, max_inner1]]

        density_inner2 = 1000
        min_inner2 = min_outer + 2 * delta
        max_inner2 = max_outer - 2 * delta
        inner2_polygon = [[min_inner2, min_inner2], [max_inner2, min_inner2],
                          [max_inner2, max_inner2], [min_inner2, max_inner2]]

        boundary_tags = {'walls': [0, 1], 'bom': [2, 3]}

        # Note the list order is important
        # The last region added will be the region triangle uses,
        # if two regions points are in the same bounded area.
        interior_regions = [(inner2_polygon, density_inner2),
                            (inner1_polygon, density_inner1)]
        create_mesh_from_regions(polygon_outer,
                                 boundary_tags,
                                 density_outer,
                                 interior_regions=interior_regions,
                                 filename=file_name,
                                 verbose=False)

        m = importMeshFromFile(file_name)
        self.assertTrue(
            len(m.getTriangulation()) <= 3000, 'Test mesh interface failed!')
        self.assertTrue(
            len(m.getTriangulation()) >= 2000, 'Test mesh interface failed!')

        os.remove(file_name)
    def test_create_mesh_from_regions7(self):
        file_name = tempfile.mktemp('.tsh')

        # These are the absolute values
        density_outer = 1001
        min_outer = 0
        max_outer = 1000
        polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],
                         [max_outer,max_outer], [min_outer,max_outer]]

        delta = 10
        density_inner1 = 100000000
        min_inner1 = min_outer + delta
        max_inner1 = max_outer - delta
        inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1],
                          [max_inner1,max_inner1], [min_inner1,max_inner1]]

        density_inner2 = 1000
        min_inner2 = min_outer +  2*delta
        max_inner2 = max_outer -  2*delta
        inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2],
                          [max_inner2,max_inner2], [min_inner2,max_inner2]]

        boundary_tags = {'walls': [0,1], 'bom': [2,3]}

        # Note the list order is important
        # The last region added will be the region triangle uses,
        # if two regions points are in the same bounded area.
        interior_regions = [(inner2_polygon, density_inner2),
                            (inner1_polygon, density_inner1)]
        create_mesh_from_regions(polygon_outer,
                                 boundary_tags,
                                 density_outer,
                                 interior_regions=interior_regions,
                                 filename=file_name,
                                 verbose=False)

        m = importMeshFromFile(file_name)
        self.assertTrue(len(m.getTriangulation()) <= 3000,
                        'Test mesh interface failed!')
        self.assertTrue(len(m.getTriangulation()) >= 2000,
                        'Test mesh interface failed!')

        os.remove(file_name)
    def test_pmesh2Domain_using_dummy_tsh(self):
        filename = tempfile.mktemp("test.1.tsh")
        fid = open(filename, "w")
        fid.write("4 3 # <vertex #> <x> <y> [attributes]\n \
0 0.0 0.0 0.1 0.01 0.0\n \
1 1.0 0.0 1.0 0.02 0.0\n \
2 0.0 1.0 0.2 0.03 0.0\n \
3 0.5 0.25 8.0 0.04 0.0\n \
# Vert attribute title\n \
elevation\n \
friction\n \
stage\n\
2 # <triangle #> [<vertex #>] [<neighbouring triangle #>]\n \
0 0 3 2 -1 -1 1\n \
1 0 1 3 -1 0 -1\n \
4 # <segment #> <vertex #> [boundary tag]\n\
0 1 0 a\n\
1 0 2 b\n\
2 2 3 c\n\
3 3 1 d\n")
        fid.close()

        mesh_instance = importMeshFromFile(filename)
        domain = pmesh_to_domain_instance(mesh_instance, Domain)
        os.remove(filename)

        answer = [[0.1,8.0,0.2],
                [0.1,1.0,8.0]]
        assert np.allclose(domain.quantities["elevation"].vertex_values, answer)

        answer = [[0.0,0.0,0.0],
                [0.0,0.0,0.0]]
        assert np.allclose(domain.quantities["stage"].vertex_values, answer)

        answer = [[0.01,0.04,0.03],
                [0.01,0.02,0.04]]
        assert np.allclose(domain.quantities["friction"].vertex_values, answer)

        # undefined but somehow default value is zero
        answer = [[0.0,0.0,0.0],
                [0.0,0.0,0.0]]
        assert np.allclose(domain.quantities["xmomentum"].vertex_values, answer)
Пример #8
0
minimum_storable_height = project.min_storable_h
store_unique_vertices = project.store_unique_vertices
is_varying_manning = project.is_varying_manning

# -----------------------------------------------------------------------------
# SET UP DOMAIN AND INITIAL CONDITION
# -----------------------------------------------------------------------------

if myid == 0:
    zelv = helper.data.get_elevation(f_elv)
    xmom = helper.data.get_xmomentum(f_elv)
    ymom = helper.data.get_ymomentum(f_elv)
    inistage = helper.data.get_stage(f_elv)
    man_n = helper.data.get_manning(f_man, is_varying_manning, default_man_n)

    mesh_instance = importMeshFromFile(f_mesh)
    domain = anuga.pmesh_to_domain_instance(mesh_instance, Domain)

    print domain.statistics()
    print domain.geo_reference

    domain.set_quantity('elevation', zelv)
    domain.set_quantity('stage', inistage)
    domain.set_quantity('xmomentum', xmom)
    domain.set_quantity('ymomentum', ymom)
    domain.set_quantity('friction', man_n)

else:
    domain = None

if myid == 0 and verbose:
Пример #9
0
    def test_pmesh2Domain_instance(self):
        import os
        import tempfile

        fileName = tempfile.mktemp(".tsh")
        fid = open(fileName, "w")
        fid.write("4 3 # <vertex #> <x> <y> [attributes]\n \
0 0.0 0.0 0.0 0.0 0.01 \n \
1 1.0 0.0 10.0 10.0 0.02  \n \
2 0.0 1.0 0.0 10.0 0.03  \n \
3 0.5 0.25 8.0 12.0 0.04  \n \
# Vert att title  \n \
elevation  \n \
stage  \n \
friction  \n \
2 # <triangle #> [<vertex #>] [<neigbouring triangle #>]  \n\
0 0 3 2 -1  -1  1 dsg\n\
1 0 1 3 -1  0 -1   ole nielsen\n\
4 # <segment #> <vertex #>  <vertex #> [boundary tag] \n\
0 1 0 2 \n\
1 0 2 3 \n\
2 2 3 \n\
3 3 1 1 \n\
3 0 # <x> <y> [attributes] ...Mesh Vertices... \n \
0 216.0 -86.0 \n \
1 160.0 -167.0 \n \
2 114.0 -91.0 \n \
3 # <vertex #>  <vertex #> [boundary tag] ...Mesh Segments... \n \
0 0 1 0 \n \
1 1 2 0 \n \
2 2 0 0 \n \
0 # <x> <y> ...Mesh Holes... \n \
0 # <x> <y> <attribute>...Mesh Regions... \n \
0 # <x> <y> <attribute>...Mesh Regions, area... \n\
#Geo reference \n \
56 \n \
140 \n \
120 \n")
        fid.close()

        mesh_instance = importMeshFromFile(fileName)

        tags = {}
        b1 = Dirichlet_boundary(dirichlet_values=num.array([0.0]))
        b2 = Dirichlet_boundary(dirichlet_values=num.array([1.0]))
        b3 = Dirichlet_boundary(dirichlet_values=num.array([2.0]))
        tags["1"] = b1
        tags["2"] = b2
        tags["3"] = b3

        domain = pmesh_to_domain_instance(mesh_instance, Domain)

        os.remove(fileName)
        # print "domain.tagged_elements", domain.tagged_elements
        # # check the quantities
        # print domain.quantities['elevation'].vertex_values
        answer = [[0., 8., 0.], [0., 10., 8.]]
        assert num.allclose(domain.quantities['elevation'].vertex_values,
                            answer)

        # print domain.quantities['stage'].vertex_values
        answer = [[0., 12., 10.], [0., 10., 12.]]
        assert num.allclose(domain.quantities['stage'].vertex_values, answer)

        # print domain.quantities['friction'].vertex_values
        answer = [[0.01, 0.04, 0.03], [0.01, 0.02, 0.04]]
        assert num.allclose(domain.quantities['friction'].vertex_values,
                            answer)

        # print domain.quantities['friction'].vertex_values
        tagged_elements = domain.get_tagged_elements()
        assert num.allclose(tagged_elements['dsg'][0], 0)
        assert num.allclose(tagged_elements['ole nielsen'][0], 1)

        self.assertTrue(
            domain.boundary[(1, 0)] == '1',
            "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(
            domain.boundary[(1, 2)] == '2',
            "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(
            domain.boundary[(0, 1)] == '3',
            "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(
            domain.boundary[(0, 0)] == 'exterior',
            "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        # print "domain.boundary",domain.boundary
        self.assertTrue(
            len(domain.boundary) == 4, "test_pmesh2Domain Too many boundaries")
        # FIXME change to use get_xllcorner
        # print "d.geo_reference.xllcorner",domain.geo_reference.xllcorner
        self.assertTrue(domain.geo_reference.xllcorner == 140.0,
                        "bad geo_referece")
 def test_pmesh2Domain_using_simple_tsh(self):
     f_tsh = "/home/somat/ir_flood/ciliwung/pre/test/data/simple/box.1.tsh"
     mesh_instance = importMeshFromFile(f_tsh)
     domain = pmesh_to_domain_instance(mesh_instance, Domain)
    def test_pmesh2Domain_instance(self):
        import os
        import tempfile

        fileName = tempfile.mktemp(".tsh")
        fid = open(fileName, "w")
        fid.write("4 3 # <vertex #> <x> <y> [attributes]\n \
0 0.0 0.0 0.0 0.0 0.01 \n \
1 1.0 0.0 10.0 10.0 0.02  \n \
2 0.0 1.0 0.0 10.0 0.03  \n \
3 0.5 0.25 8.0 12.0 0.04  \n \
# Vert att title  \n \
elevation  \n \
stage  \n \
friction  \n \
2 # <triangle #> [<vertex #>] [<neigbouring triangle #>]  \n\
0 0 3 2 -1  -1  1 dsg\n\
1 0 1 3 -1  0 -1   ole nielsen\n\
4 # <segment #> <vertex #>  <vertex #> [boundary tag] \n\
0 1 0 2 \n\
1 0 2 3 \n\
2 2 3 \n\
3 3 1 1 \n\
3 0 # <x> <y> [attributes] ...Mesh Vertices... \n \
0 216.0 -86.0 \n \
1 160.0 -167.0 \n \
2 114.0 -91.0 \n \
3 # <vertex #>  <vertex #> [boundary tag] ...Mesh Segments... \n \
0 0 1 0 \n \
1 1 2 0 \n \
2 2 0 0 \n \
0 # <x> <y> ...Mesh Holes... \n \
0 # <x> <y> <attribute>...Mesh Regions... \n \
0 # <x> <y> <attribute>...Mesh Regions, area... \n\
#Geo reference \n \
56 \n \
140 \n \
120 \n")
        fid.close()

        mesh_instance = importMeshFromFile(fileName)

        tags = {}
        b1 = Dirichlet_boundary(dirichlet_values=num.array([0.0]))
        b2 = Dirichlet_boundary(dirichlet_values=num.array([1.0]))
        b3 = Dirichlet_boundary(dirichlet_values=num.array([2.0]))
        tags["1"] = b1
        tags["2"] = b2
        tags["3"] = b3

        domain = pmesh_to_domain_instance(mesh_instance, Domain)

        os.remove(fileName)
        # print "domain.tagged_elements", domain.tagged_elements
        # # check the quantities
        # print domain.quantities['elevation'].vertex_values
        answer = [[0., 8., 0.],
               [0., 10., 8.]]
        assert num.allclose(domain.quantities['elevation'].vertex_values,
                         answer)

        # print domain.quantities['stage'].vertex_values
        answer = [[0., 12., 10.],
               [0., 10., 12.]]
        assert num.allclose(domain.quantities['stage'].vertex_values,
                         answer)

        # print domain.quantities['friction'].vertex_values
        answer = [[0.01, 0.04, 0.03],
               [0.01, 0.02, 0.04]]
        assert num.allclose(domain.quantities['friction'].vertex_values,
                         answer)

        # print domain.quantities['friction'].vertex_values
        tagged_elements = domain.get_tagged_elements()         
        assert num.allclose(tagged_elements['dsg'][0], 0)
        assert num.allclose(tagged_elements['ole nielsen'][0], 1)

        self.assertTrue(domain.boundary[(1, 0)] == '1',
                      "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(domain.boundary[(1, 2)] == '2',
                      "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(domain.boundary[(0, 1)] == '3',
                      "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        self.assertTrue(domain.boundary[(0, 0)] == 'exterior',
                      "test_tags_to_boundaries  failed. Single boundary wasn't added.")
        # print "domain.boundary",domain.boundary
        self.assertTrue(len(domain.boundary) == 4,
                      "test_pmesh2Domain Too many boundaries")
        # FIXME change to use get_xllcorner
        # print "d.geo_reference.xllcorner",domain.geo_reference.xllcorner 
        self.assertTrue(domain.geo_reference.xllcorner == 140.0,
                      "bad geo_referece")