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)
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
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
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)
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:
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")