Changeset 6304 for branches/numpy/anuga/pmesh/test_mesh_interface.py
- Timestamp:
- Feb 10, 2009, 11:11:04 AM (16 years ago)
- Location:
- branches/numpy
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/numpy/anuga/pmesh/test_mesh_interface.py
r6199 r6304 1 1 #!/usr/bin/env python 2 # 2 3 3 import tempfile 4 4 import unittest … … 13 13 from anuga.coordinate_transforms.geo_reference import Geo_reference,DEFAULT_ZONE 14 14 15 15 16 class TestCase(unittest.TestCase): 16 17 def setUp(self): 17 18 pass 18 19 19 20 def tearDown(self): 20 21 pass … … 23 24 x=-500 24 25 y=-1000 25 mesh_geo = geo_reference=Geo_reference(56, x,y)26 27 # These are the absolute values 28 polygon_absolute = [[0,0], [100,0],[100,100],[0,100]]29 26 mesh_geo = geo_reference=Geo_reference(56, x, y) 27 28 # These are the absolute values 29 polygon_absolute = [[0,0], [100,0], [100,100], [0,100]] 30 30 31 x_p = -10 31 32 y_p = -40 … … 33 34 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 34 35 35 boundary_tags = {'walls':[0,1],'bom':[2,3]} 36 37 inner1_polygon_absolute = [[10,10],[20,10],[20,20],[10,20]] 38 inner1_polygon = geo_ref_poly. \ 39 change_points_geo_ref(inner1_polygon_absolute) 40 41 inner2_polygon_absolute = [[30,30],[40,30],[40,40],[30,40]] 42 inner2_polygon = geo_ref_poly. \ 43 change_points_geo_ref(inner2_polygon_absolute) 44 45 interior_regions = [(inner1_polygon, 5),(inner2_polygon, 10)] 46 47 #print polygon 48 #print boundary_tags 49 36 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 37 38 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 39 inner1_polygon = geo_ref_poly.\ 40 change_points_geo_ref(inner1_polygon_absolute) 41 42 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 43 inner2_polygon = geo_ref_poly.\ 44 change_points_geo_ref(inner2_polygon_absolute) 45 46 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 47 50 48 m = create_mesh_from_regions(polygon, 51 49 boundary_tags, … … 56 54 57 55 # Test the mesh instance 58 self.failUnless(len(m.regions)==3, 59 'FAILED!') 56 self.failUnless(len(m.regions)==3, 'FAILED!') 60 57 segs = m.getUserSegments() 61 self.failUnless(len(segs)==12, 62 'FAILED!') 63 self.failUnless(len(m.userVertices)==12, 64 'FAILED!') 65 self.failUnless(segs[0].tag=='walls', 66 'FAILED!') 67 self.failUnless(segs[1].tag=='walls', 68 'FAILED!') 69 70 self.failUnless(segs[2].tag=='bom', 71 'FAILED!') 72 self.failUnless(segs[3].tag=='bom', 73 'FAILED!') 58 self.failUnless(len(segs)==12, 'FAILED!') 59 self.failUnless(len(m.userVertices)==12, 'FAILED!') 60 self.failUnless(segs[0].tag=='walls', 'FAILED!') 61 self.failUnless(segs[1].tag=='walls', 'FAILED!') 62 self.failUnless(segs[2].tag=='bom', 'FAILED!') 63 self.failUnless(segs[3].tag=='bom', 'FAILED!') 74 64 75 65 # Assuming the order of the region points is known. … … 77 67 # a black box) 78 68 poly_point = m.getRegions()[0] 79 80 #print "poly_point", poly_point 81 #print "polygon_absolute",polygon_absolute 82 69 83 70 # poly_point values are relative to the mesh geo-ref 84 71 # make them absolute 85 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y],86 polygon_absolute, closed =False),72 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 73 polygon_absolute, closed=False), 87 74 'FAILED!') 88 75 89 76 # Assuming the order of the region points is known. 90 77 # (This isn't true, if you consider create_mesh_from_regions 91 78 # a black box) 92 79 poly_point = m.getRegions()[1] 93 94 #print "poly_point", poly_point 95 #print "polygon_absolute",polygon_absolute 96 80 97 81 # poly_point values are relative to the mesh geo-ref 98 82 # make them absolute 99 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y],83 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 100 84 inner1_polygon_absolute, 101 closed =False),85 closed=False), 102 86 'FAILED!') 103 87 104 88 # Assuming the order of the region points is known. 105 89 # (This isn't true, if you consider create_mesh_from_regions 106 90 # a black box) 107 91 poly_point = m.getRegions()[2] 108 109 #print "poly_point", poly_point 110 #print "polygon_absolute",polygon_absolute 111 92 112 93 # poly_point values are relative to the mesh geo-ref 113 94 # make them absolute 114 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y],95 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 115 96 inner2_polygon_absolute, 116 closed =False),97 closed=False), 117 98 'FAILED!') 118 119 99 120 100 def test_create_mesh_from_regions_with_caching(self): 121 101 x=-500 122 102 y=-1000 123 mesh_geo = geo_reference=Geo_reference(56, x,y)124 125 # These are the absolute values 126 polygon_absolute = [[0,0], [100,0],[100,100],[0,100]]127 103 mesh_geo = geo_reference=Geo_reference(56, x, y) 104 105 # These are the absolute values 106 polygon_absolute = [[0,0], [100,0], [100,100], [0,100]] 107 128 108 x_p = -10 129 109 y_p = -40 … … 131 111 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 132 112 133 boundary_tags = {'walls': [0,1],'bom':[2,3]}134 135 inner1_polygon_absolute = [[10,10], [20,10],[20,20],[10,20]]136 inner1_polygon = geo_ref_poly. 137 change_points_geo_ref(inner1_polygon_absolute)138 139 inner2_polygon_absolute = [[30,30], [40,30],[40,40],[30,40]]140 inner2_polygon = geo_ref_poly. 141 change_points_geo_ref(inner2_polygon_absolute)142 143 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]113 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 114 115 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 116 inner1_polygon = geo_ref_poly.\ 117 change_points_geo_ref(inner1_polygon_absolute) 118 119 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 120 inner2_polygon = geo_ref_poly.\ 121 change_points_geo_ref(inner2_polygon_absolute) 122 123 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 144 124 145 125 interior_holes = None … … 147 127 # Clear cache first 148 128 from anuga.caching import cache 129 149 130 cache(_create_mesh_from_regions, 150 131 (polygon, boundary_tags), … … 159 140 clear=1) 160 141 161 #print polygon162 #print boundary_tags163 164 142 m = create_mesh_from_regions(polygon, 165 143 boundary_tags, … … 173 151 174 152 # Test the mesh instance 175 self.failUnless(len(m.regions)==3, 176 'FAILED!') 153 self.failUnless(len(m.regions)==3, 'FAILED!') 177 154 segs = m.getUserSegments() 178 self.failUnless(len(segs)==12, 179 'FAILED!') 180 self.failUnless(len(m.userVertices)==12, 181 'FAILED!') 182 self.failUnless(segs[0].tag=='walls', 183 'FAILED!') 184 self.failUnless(segs[1].tag=='walls', 185 'FAILED!') 186 187 self.failUnless(segs[2].tag=='bom', 188 'FAILED!') 189 self.failUnless(segs[3].tag=='bom', 190 'FAILED!') 155 self.failUnless(len(segs)==12, 'FAILED!') 156 self.failUnless(len(m.userVertices)==12, 'FAILED!') 157 self.failUnless(segs[0].tag=='walls', 'FAILED!') 158 self.failUnless(segs[1].tag=='walls', 'FAILED!') 159 self.failUnless(segs[2].tag=='bom', 'FAILED!') 160 self.failUnless(segs[3].tag=='bom', 'FAILED!') 191 161 192 162 # Assuming the order of the region points is known. … … 194 164 # a black box) 195 165 poly_point = m.getRegions()[0] 196 197 #print "poly_point", poly_point 198 #print "polygon_absolute",polygon_absolute 199 166 200 167 # poly_point values are relative to the mesh geo-ref 201 168 # make them absolute 202 self.failUnless(is_inside_polygon([poly_point.x+x,poly_point.y+y], 203 polygon_absolute, closed = False), 169 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 170 polygon_absolute, 171 closed=False), 204 172 'FAILED!') 205 173 206 174 # Assuming the order of the region points is known. 207 175 # (This isn't true, if you consider create_mesh_from_regions 208 176 # a black box) 209 177 poly_point = m.getRegions()[1] 210 211 #print "poly_point", poly_point 212 #print "polygon_absolute",polygon_absolute 213 178 214 179 # poly_point values are relative to the mesh geo-ref 215 180 # make them absolute 216 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y],181 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 217 182 inner1_polygon_absolute, 218 closed =False),183 closed=False), 219 184 'FAILED!') 220 185 221 186 # Assuming the order of the region points is known. 222 187 # (This isn't true, if you consider create_mesh_from_regions 223 188 # a black box) 224 189 poly_point = m.getRegions()[2] 225 226 #print "poly_point", poly_point 227 #print "polygon_absolute",polygon_absolute 228 190 229 191 # poly_point values are relative to the mesh geo-ref 230 192 # make them absolute 231 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y],193 self.failUnless(is_inside_polygon([poly_point.x+x, poly_point.y+y], 232 194 inner2_polygon_absolute, 233 closed =False),195 closed=False), 234 196 'FAILED!') 235 236 197 237 198 # Now create m using cached values … … 245 206 use_cache=True) 246 207 247 248 249 250 208 def test_create_mesh_from_regions2(self): 251 252 # These are the absolute values 253 min_x = -10 209 # These are the absolute values 210 min_x = -10 254 211 min_y = -88 255 polygon_absolute = [[min_x,min_y], [1000,100],[1000,1000],[100,1000]]256 212 polygon_absolute = [[min_x,min_y], [1000,100], [1000,1000], [100,1000]] 213 257 214 x_p = -10 258 215 y_p = -40 … … 261 218 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 262 219 263 boundary_tags = {'walls': [0,1],'bom':[2,3]}264 265 inner1_polygon_absolute = [[10,10], [20,10],[20,20],[10,20]]266 inner1_polygon = geo_ref_poly. 267 change_points_geo_ref(inner1_polygon_absolute)268 269 inner2_polygon_absolute = [[30,30], [40,30],[40,40],[30,40]]270 inner2_polygon = geo_ref_poly. 271 change_points_geo_ref(inner2_polygon_absolute)272 273 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]220 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 221 222 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 223 inner1_polygon = geo_ref_poly.\ 224 change_points_geo_ref(inner1_polygon_absolute) 225 226 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 227 inner2_polygon = geo_ref_poly.\ 228 change_points_geo_ref(inner2_polygon_absolute) 229 230 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 274 231 m = create_mesh_from_regions(polygon, 275 232 boundary_tags, … … 277 234 interior_regions=interior_regions, 278 235 poly_geo_reference=geo_ref_poly) 279 280 236 281 237 # Test the mesh instance 282 self.failUnless(len(m.regions)==3, 283 'FAILED!') 238 self.failUnless(len(m.regions)==3, 'FAILED!') 284 239 segs = m.getUserSegments() 285 self.failUnless(len(segs)==12, 286 'FAILED!') 287 self.failUnless(len(m.userVertices)==12, 288 'FAILED!') 289 self.failUnless(segs[0].tag=='walls', 290 'FAILED!') 291 self.failUnless(segs[1].tag=='walls', 292 'FAILED!') 293 294 self.failUnless(segs[2].tag=='bom', 295 'FAILED!') 296 self.failUnless(segs[3].tag=='bom', 297 'FAILED!') 298 299 self.failUnless(m.geo_reference.get_zone()==zone, 300 'FAILED!') 301 self.failUnless(m.geo_reference.get_xllcorner()==min_x, 302 'FAILED!') 303 self.failUnless(m.geo_reference.get_yllcorner()==min_y, 304 'FAILED!') 305 306 240 self.failUnless(len(segs)==12, 'FAILED!') 241 self.failUnless(len(m.userVertices)==12, 'FAILED!') 242 self.failUnless(segs[0].tag=='walls', 'FAILED!') 243 self.failUnless(segs[1].tag=='walls', 'FAILED!') 244 self.failUnless(segs[2].tag=='bom', 'FAILED!') 245 self.failUnless(segs[3].tag=='bom', 'FAILED!') 246 self.failUnless(m.geo_reference.get_zone()==zone, 'FAILED!') 247 self.failUnless(m.geo_reference.get_xllcorner()==min_x, 'FAILED!') 248 self.failUnless(m.geo_reference.get_yllcorner()==min_y, 'FAILED!') 249 307 250 def test_create_mesh_from_regions3(self): 308 309 # These are the absolute values 310 min_x = -10 251 # These are the absolute values 252 min_x = -10 311 253 min_y = -88 312 polygon = [[min_x,min_y], [1000,100],[1000,1000],[100,1000]]313 254 polygon = [[min_x,min_y], [1000,100], [1000,1000], [100,1000]] 255 314 256 315 257 x_p = -10 316 258 y_p = -40 317 259 geo_ref_poly = Geo_reference(56, x_p, y_p) 318 319 boundary_tags = {'walls': [0,1],'bom':[2,3]}320 321 inner1_polygon_absolute = [[10,10], [20,10],[20,20],[10,20]]322 inner1_polygon = geo_ref_poly. 323 change_points_geo_ref(inner1_polygon_absolute)324 325 inner2_polygon_absolute = [[30,30], [40,30],[40,40],[30,40]]326 inner2_polygon = geo_ref_poly. 327 change_points_geo_ref(inner2_polygon_absolute)328 329 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]260 261 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 262 263 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 264 inner1_polygon = geo_ref_poly.\ 265 change_points_geo_ref(inner1_polygon_absolute) 266 267 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 268 inner2_polygon = geo_ref_poly.\ 269 change_points_geo_ref(inner2_polygon_absolute) 270 271 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 330 272 m = create_mesh_from_regions(polygon, 331 273 boundary_tags, 332 274 10000000, 333 275 interior_regions=interior_regions) 334 335 276 336 277 # Test the mesh instance 337 self.failUnless(len(m.regions)==3, 338 'FAILED!') 278 self.failUnless(len(m.regions) == 3, 'FAILED!') 339 279 segs = m.getUserSegments() 340 self.failUnless(len(segs)==12, 341 'FAILED!') 342 self.failUnless(len(m.userVertices)==12, 343 'FAILED!') 344 self.failUnless(segs[0].tag=='walls', 345 'FAILED!') 346 self.failUnless(segs[1].tag=='walls', 347 'FAILED!') 348 349 self.failUnless(segs[2].tag=='bom', 350 'FAILED!') 351 self.failUnless(segs[3].tag=='bom', 352 'FAILED!') 353 354 self.failUnless(m.geo_reference.get_zone()==DEFAULT_ZONE, 355 'FAILED!') 356 self.failUnless(m.geo_reference.get_xllcorner()==min_x, 357 'FAILED!') 358 self.failUnless(m.geo_reference.get_yllcorner()==min_y, 359 'FAILED!') 280 self.failUnless(len(segs) == 12, 'FAILED!') 281 self.failUnless(len(m.userVertices) == 12, 'FAILED!') 282 self.failUnless(segs[0].tag == 'walls', 'FAILED!') 283 self.failUnless(segs[1].tag == 'walls', 'FAILED!') 284 self.failUnless(segs[2].tag == 'bom', 'FAILED!') 285 self.failUnless(segs[3].tag == 'bom', 'FAILED!') 286 self.failUnless(m.geo_reference.get_zone() == DEFAULT_ZONE, 'FAILED!') 287 self.failUnless(m.geo_reference.get_xllcorner() == min_x, 'FAILED!') 288 self.failUnless(m.geo_reference.get_yllcorner() == min_y, 'FAILED!') 360 289 361 290 def test_create_mesh_from_regions4(self): 362 363 file_name = tempfile.mktemp(".tsh") 364 291 file_name = tempfile.mktemp('.tsh') 292 365 293 # These are the absolute values 366 294 density_outer = 1000 367 min_outer = 0 295 min_outer = 0 368 296 max_outer = 1000 369 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],370 [max_outer,max_outer],[min_outer,max_outer]]371 297 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer], 298 [max_outer,max_outer], [min_outer,max_outer]] 299 372 300 density_inner1 = 10000000 373 301 inner_buffer = 100 374 302 min_inner1 = min_outer + inner_buffer 375 303 max_inner1 = max_outer - inner_buffer 376 inner1_polygon = [[min_inner1,min_inner1],[max_inner1,min_inner1], 377 [max_inner1,max_inner1],[min_inner1,max_inner1]] 378 379 380 boundary_tags = {'walls':[0,1],'bom':[2,3]} 381 304 inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1], 305 [max_inner1,max_inner1], [min_inner1,max_inner1]] 306 307 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 308 382 309 interior_regions = [(inner1_polygon, density_inner1)] 383 create_mesh_from_regions(polygon_outer 384 , boundary_tags 385 , density_outer 386 , interior_regions=interior_regions 387 ,filename=file_name 388 #,verbose=True 389 ,verbose=False 390 ) 391 310 create_mesh_from_regions(polygon_outer, 311 boundary_tags, 312 density_outer, 313 interior_regions=interior_regions, 314 filename=file_name, verbose=False) 315 392 316 m = importMeshFromFile(file_name) 393 394 #print "file_name",file_name 317 395 318 self.failUnless(len(m.getTriangulation()) <= 900, 396 319 'Test mesh interface failed!') 397 320 self.failUnless(len(m.getTriangulation()) >= 200, 398 321 'Test mesh interface failed!') 399 400 create_mesh_from_regions(polygon_outer 401 , boundary_tags 402 , interior_regions=interior_regions 403 ,filename=file_name 404 #,verbose=True 405 ,verbose=False 406 ) 407 322 323 create_mesh_from_regions(polygon_outer, 324 boundary_tags, 325 interior_regions=interior_regions, 326 filename=file_name, 327 verbose=False) 328 408 329 m = importMeshFromFile(file_name) 409 410 #print "len(m.meshTriangles)",len(m.meshTriangles) 330 411 331 self.failUnless(len(m.getTriangulation()) <= 100, 412 332 'Test mesh interface failed!') 413 333 414 334 os.remove(file_name) 415 335 416 336 def test_create_mesh_from_regions5(self): 417 418 file_name = tempfile.mktemp(".tsh") 419 420 # These are the absolute values 421 density_outer = 10000000 422 min_outer = 0 337 file_name = tempfile.mktemp('.tsh') 338 339 # These are the absolute values 340 density_outer = 10000000 341 min_outer = 0 423 342 max_outer = 1000 424 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],425 [max_outer,max_outer],[min_outer,max_outer]]426 343 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer], 344 [max_outer,max_outer], [min_outer,max_outer]] 345 427 346 density_inner1 = 1000 428 347 inner_buffer = 100 429 348 min_inner1 = min_outer + inner_buffer 430 349 max_inner1 = max_outer - inner_buffer 431 inner1_polygon = [[min_inner1,min_inner1],[max_inner1,min_inner1], 432 [max_inner1,max_inner1],[min_inner1,max_inner1]] 433 434 435 boundary_tags = {'walls':[0,1],'bom':[2,3]} 436 350 inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1], 351 [max_inner1,max_inner1], [min_inner1,max_inner1]] 352 353 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 354 437 355 interior_regions = [(inner1_polygon, density_inner1)] 438 create_mesh_from_regions(polygon_outer 439 , boundary_tags 440 , density_outer 441 , interior_regions=interior_regions 442 ,filename=file_name 443 #,verbose=True 444 ,verbose=False 445 ) 446 356 create_mesh_from_regions(polygon_outer, 357 boundary_tags, 358 density_outer, 359 interior_regions=interior_regions, 360 filename=file_name, 361 verbose=False) 362 447 363 m = importMeshFromFile(file_name) 448 #print "file_name",file_name 449 #print "len(m.meshTriangles",len(m.meshTriangles) 450 self.failUnless(len(m.getTriangulation()) <= 2000, 364 self.failUnless(len(m.getTriangulation()) <= 2000, 451 365 'Test mesh interface failed!') 452 453 366 self.failUnless(len(m.getTriangulation()) >= 900, 454 367 'Test mesh interface failed!') 455 368 456 369 os.remove(file_name) 457 370 458 371 def test_create_mesh_from_regions6(self): 459 460 file_name = tempfile.mktemp(".tsh") 461 372 file_name = tempfile.mktemp('.tsh') 373 462 374 # These are the absolute values 463 375 density_outer = 1000 464 min_outer = 0 376 min_outer = 0 465 377 max_outer = 1000 466 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],467 [max_outer,max_outer], [min_outer,max_outer]]378 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer], 379 [max_outer,max_outer], [min_outer,max_outer]] 468 380 469 381 delta = 10 … … 471 383 min_inner1 = min_outer + delta 472 384 max_inner1 = max_outer - delta 473 inner1_polygon = [[min_inner1,min_inner1],[max_inner1,min_inner1], 474 [max_inner1,max_inner1],[min_inner1,max_inner1]] 475 476 477 density_inner2 = 10000000 385 inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1], 386 [max_inner1,max_inner1], [min_inner1,max_inner1]] 387 388 density_inner2 = 10000000 478 389 min_inner2 = min_outer + 2*delta 479 390 max_inner2 = max_outer - 2*delta 480 inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2],481 [max_inner2,max_inner2], [min_inner2,max_inner2]]482 483 boundary_tags = {'walls': [0,1],'bom':[2,3]}484 391 inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2], 392 [max_inner2,max_inner2], [min_inner2,max_inner2]] 393 394 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 395 485 396 interior_regions = [(inner1_polygon, density_inner1), 486 397 (inner2_polygon, density_inner2)] … … 491 402 filename=file_name, 492 403 verbose=False) 493 404 494 405 m = importMeshFromFile(file_name) 495 #print "file_name",file_name 496 #print "len(m.meshTriangles",len(m.meshTriangles) 497 self.failUnless(len(m.getTriangulation()) <= 2000, 406 self.failUnless(len(m.getTriangulation()) <= 2000, 498 407 'Test mesh interface failed!') 499 500 408 self.failUnless(len(m.getTriangulation()) >= 900, 501 409 'Test mesh interface failed!') 502 410 503 411 os.remove(file_name) 504 412 505 413 def test_create_mesh_from_regions7(self): 506 507 file_name = tempfile.mktemp(".tsh") 508 414 file_name = tempfile.mktemp('.tsh') 415 509 416 # These are the absolute values 510 417 density_outer = 1001 511 min_outer = 0 418 min_outer = 0 512 419 max_outer = 1000 513 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],514 [max_outer,max_outer],[min_outer,max_outer]]420 polygon_outer = [[min_outer,min_outer], [max_outer,min_outer], 421 [max_outer,max_outer], [min_outer,max_outer]] 515 422 516 423 delta = 10 … … 518 425 min_inner1 = min_outer + delta 519 426 max_inner1 = max_outer - delta 520 inner1_polygon = [[min_inner1,min_inner1],[max_inner1,min_inner1], 521 [max_inner1,max_inner1],[min_inner1,max_inner1]] 522 523 524 density_inner2 = 1000 427 inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1], 428 [max_inner1,max_inner1], [min_inner1,max_inner1]] 429 430 density_inner2 = 1000 525 431 min_inner2 = min_outer + 2*delta 526 432 max_inner2 = max_outer - 2*delta 527 inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2],528 [max_inner2,max_inner2],[min_inner2,max_inner2]]529 530 boundary_tags = {'walls': [0,1],'bom':[2,3]}531 532 # Note the list order is important433 inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2], 434 [max_inner2,max_inner2], [min_inner2,max_inner2]] 435 436 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 437 438 # Note the list order is important 533 439 # The last region added will be the region triangle uses, 534 440 # if two regions points are in the same bounded area. 535 interior_regions = [(inner2_polygon, density_inner2),(inner1_polygon, density_inner1)] 441 interior_regions = [(inner2_polygon, density_inner2), 442 (inner1_polygon, density_inner1)] 536 443 create_mesh_from_regions(polygon_outer, 537 444 boundary_tags, … … 540 447 filename=file_name, 541 448 verbose=False) 542 449 543 450 m = importMeshFromFile(file_name) 544 #print "file_name",file_name 545 #print "len(m.meshTriangles",len(m.meshTriangles) 546 self.failUnless(len(m.getTriangulation()) <= 3000, 451 self.failUnless(len(m.getTriangulation()) <= 3000, 547 452 'Test mesh interface failed!') 548 549 453 self.failUnless(len(m.getTriangulation()) >= 2000, 550 454 'Test mesh interface failed!') … … 552 456 os.remove(file_name) 553 457 554 555 458 def test_create_mesh_from_regions_interior_regions(self): 556 """Test that create_mesh_from_regions fails when an interior region is557 outside bounding polygon. """558 559 560 # These are the absolute values 561 min_x = 10 459 '''Test that create_mesh_from_regions fails when an interior 460 region is outside bounding polygon. 461 ''' 462 463 # These are the absolute values 464 min_x = 10 562 465 min_y = 88 563 polygon = [[min_x,min_y], [1000,100],[1000,1000],[100,1000]]564 565 boundary_tags = {'walls': [0,1],'bom':[2,3]}566 # boundary_tags = {'walls':[0,1]} 466 polygon = [[min_x,min_y], [1000,100], [1000,1000], [100,1000]] 467 468 boundary_tags = {'walls': [0,1], 'bom': [2,3]} 469 567 470 # This one is inside bounding polygon - should pass 568 inner_polygon = [[800,400], [900,500],[800,600]]471 inner_polygon = [[800,400], [900,500], [800,600]] 569 472 570 473 interior_regions = [(inner_polygon, 5)] … … 574 477 interior_regions=interior_regions) 575 478 576 577 479 # This one sticks outside bounding polygon - should fail 578 inner_polygon = [[800,400], [900,500],[800,600], [200, 995]]579 inner_polygon1 = [[800,400], [1100,500],[800,600]]480 inner_polygon = [[800,400], [900,500], [800,600], [200, 995]] 481 inner_polygon1 = [[800,400], [1100,500], [800,600]] 580 482 interior_regions = [[inner_polygon, 50], [inner_polygon1, 50]] 581 483 582 583 584 484 try: 585 485 m = create_mesh_from_regions(polygon, … … 593 493 msg = 'Interior polygon sticking outside bounding polygon should ' 594 494 msg += 'cause an Exception to be raised' 595 raise msg495 raise Exception, msg 596 496 597 497 def test_create_mesh_from_regions_interior_regions1(self): 598 """Test that create_mesh_from_regions fails when an interior region is599 outside bounding polygon. """600 498 '''Test that create_mesh_from_regions fails 499 when an interior region is outside bounding polygon. 500 ''' 601 501 602 502 # These are the values 603 604 503 d0 = [310000, 7690000] 605 504 d1 = [280000, 7690000] … … 609 508 d5 = [300000, 7590000] 610 509 d6 = [340000, 7610000] 611 612 510 poly_all = [d0, d1, d2, d3, d4, d5, d6] 613 511 614 512 i0 = [304000, 7607000] 615 513 i1 = [302000, 7605000] … … 619 517 # i4 = [310000, 7580000] 620 518 i5 = [307000, 7606000] 621 622 519 poly_onslow = [i0, i1, i2, i3, i4, i5] 623 520 624 # Thevenard Island521 # Thevenard Island 625 522 j0 = [294000, 7629000] 626 523 j1 = [285000, 7625000] 627 524 j2 = [294000, 7621000] 628 525 j3 = [299000, 7625000] 629 630 526 poly_thevenard = [j0, j1, j2, j3] 631 527 632 # med res around onslow528 # med res around onslow 633 529 l0 = [300000, 7610000] 634 530 l1 = [285000, 7600000] 635 531 l2 = [300000, 7597500] 636 l3 = [310000, 7770000] # this one is outside637 # l3 = [310000, 7630000] # this one is NOT outside532 l3 = [310000, 7770000] # this one is outside 533 # l3 = [310000, 7630000] # this one is NOT outside 638 534 l4 = [315000, 7610000] 639 535 poly_coast = [l0, l1, l2, l3, l4] 640 536 641 # general coast and local area to onslow region537 # general coast and local area to onslow region 642 538 m0 = [270000, 7581000] 643 539 m1 = [300000, 7591000] … … 646 542 m4 = [290000, 7640000] 647 543 m5 = [260000, 7600000] 648 649 544 poly_region = [m0, m1, m2, m3, m4, m5] 650 545 651 546 # This one sticks outside bounding polygon - should fail 652 653 interior_regions = [[poly_onslow, 50000], [poly_region, 50000], [poly_coast,100000], [poly_thevenard, 100000]] 654 655 boundary_tags = {'walls':[0,1],'bom':[2]} 656 547 interior_regions = [[poly_onslow, 50000], [poly_region, 50000], 548 [poly_coast, 100000], [poly_thevenard, 100000]] 549 boundary_tags = {'walls': [0,1], 'bom': [2]} 550 657 551 try: 658 552 m = create_mesh_from_regions(poly_all, … … 666 560 msg = 'Interior polygon sticking outside bounding polygon should ' 667 561 msg += 'cause an Exception to be raised' 668 raise msg 669 670 562 raise Exception, msg 671 563 672 564 def FIXME_test_create_mesh_with_multiply_tagged_segments(self): 673 """Test that create_mesh_from_regions fails when565 '''Test that create_mesh_from_regions fails when 674 566 segments are listed repeatedly in boundary_tags. 675 """ 676 677 678 679 680 # These are the absolute values 681 min_x = 10 567 ''' 568 569 # These are the absolute values 570 min_x = 10 682 571 min_y = 88 683 polygon = [[min_x,min_y],[1000,100],[1000,1000],[100,1000]] 684 685 686 boundary_tags = {'walls':[0,1],'bom':[1,2]} 572 polygon = [[min_x,min_y], [1000,100], [1000,1000], [100,1000]] 573 boundary_tags = {'walls': [0,1], 'bom': [1,2]} 687 574 688 575 # This one is inside bounding polygon - should pass 689 inner_polygon = [[800,400],[900,500],[800,600]] 690 576 inner_polygon = [[800,400], [900,500], [800,600]] 691 577 interior_regions = [(inner_polygon, 5)] 692 578 m = create_mesh_from_regions(polygon, 693 579 boundary_tags, 694 580 10000000, 695 interior_regions=interior_regions, verbose=False)696 581 interior_regions=interior_regions, 582 verbose=False) 697 583 698 584 # This one sticks outside bounding polygon - should fail 699 inner_polygon = [[800,400], [900,500],[800,600]]585 inner_polygon = [[800,400], [900,500], [800,600]] 700 586 interior_regions = [(inner_polygon, 5)] 701 702 703 704 587 try: 705 588 m = create_mesh_from_regions(polygon, … … 712 595 msg = 'Tags are listed repeatedly, but create mesh from regions ' 713 596 msg += 'does not cause an Exception to be raised' 714 raise msg 715 716 717 597 raise Exception, msg 718 598 719 599 def test_create_mesh_from_regions_with_duplicate_verts(self): 720 721 # These are the absolute values 722 723 polygon_absolute = [[0.0,0.0], 724 [0,4.0], 725 [4.0,4.0], 726 [4.0,0.0], 727 [4.0,0.0]] 728 600 # These are the absolute values 601 polygon_absolute = [[0.0, 0.0], 602 [0, 4.0], 603 [4.0, 4.0], 604 [4.0, 0.0], 605 [4.0, 0.0]] 729 606 x_p = -10 730 607 y_p = -40 … … 732 609 geo_ref_poly = Geo_reference(zone, x_p, y_p) 733 610 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 734 735 boundary_tags = {'50':[0], 736 '40':[1], 737 '30':[2], 738 'no where seg':[3], 739 '20':[4] 740 } 741 611 boundary_tags = {'50': [0], 612 '40': [1], 613 '30': [2], 614 'no where seg': [3], 615 '20': [4]} 742 616 m = create_mesh_from_regions(polygon, 743 617 boundary_tags, 744 618 10000000, 745 poly_geo_reference=geo_ref_poly, verbose=False)746 747 748 fileName = "badmesh.tsh"619 poly_geo_reference=geo_ref_poly, 620 verbose=False) 621 622 fileName = 'badmesh.tsh' 749 623 #m.export_mesh_file(fileName) 750 751 624 752 625 def concept_create_mesh_from_regions_with_ungenerate(self): 753 626 x=0 754 627 y=0 755 mesh_geo = geo_reference=Geo_reference(56,x,y) 756 757 # These are the absolute values 758 polygon_absolute = [[0,0],[100,0],[100,100],[0,100]] 759 628 mesh_geo = geo_reference=Geo_reference(56, x, y) 629 630 # These are the absolute values 631 polygon_absolute = [[0,0], [100,0], [100,100], [0,100]] 760 632 x_p = -10 761 633 y_p = -40 … … 763 635 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 764 636 765 boundary_tags = {'walls': [0,1],'bom':[2]}766 767 inner1_polygon_absolute = [[10,10], [20,10],[20,20],[10,20]]768 inner1_polygon = geo_ref_poly. 769 change_points_geo_ref(inner1_polygon_absolute)770 771 inner2_polygon_absolute = [[30,30], [40,30],[40,40],[30,40]]772 inner2_polygon = geo_ref_poly. 773 change_points_geo_ref(inner2_polygon_absolute)774 637 boundary_tags = {'walls': [0,1], 'bom': [2]} 638 639 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 640 inner1_polygon = geo_ref_poly.\ 641 change_points_geo_ref(inner1_polygon_absolute) 642 643 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 644 inner2_polygon = geo_ref_poly.\ 645 change_points_geo_ref(inner2_polygon_absolute) 646 775 647 max_area = 10000000 776 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]648 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 777 649 m = create_mesh_from_regions(polygon, 778 650 boundary_tags, … … 781 653 poly_geo_reference=geo_ref_poly, 782 654 mesh_geo_reference=mesh_geo) 783 784 m.export_mesh_file('a_test_mesh_iknterface.tsh') 785 786 fileName = tempfile.mktemp( ".txt")787 file = open(fileName, "w")788 file.write( "1 ?? ??\n\655 656 m.export_mesh_file('a_test_mesh_iknterface.tsh') 657 658 fileName = tempfile.mktemp('.txt') 659 file = open(fileName, 'w') 660 file.write(' 1 ?? ??\n\ 789 661 90.0 90.0\n\ 790 662 81.0 90.0\n\ … … 799 671 10.0 80.0\n\ 800 672 END\n\ 801 END\n ")802 file.close() 803 673 END\n') 674 file.close() 675 804 676 m.import_ungenerate_file(fileName, tag='wall') 805 677 os.remove(fileName) 806 m.generate_mesh(maximum_triangle_area=max_area, verbose=False)678 m.generate_mesh(maximum_triangle_area=max_area, verbose=False) 807 679 m.export_mesh_file('b_test_mesh_iknterface.tsh') 808 680 809 681 def concept_ungenerateII(self): 810 811 682 from anuga.shallow_water import Domain, Reflective_boundary, \ 812 683 Dirichlet_boundary 684 813 685 x=0 814 686 y=0 815 mesh_geo = geo_reference=Geo_reference(56,x,y) 816 817 # These are the absolute values 818 polygon_absolute = [[0,0],[100,0],[100,100],[0,100]] 819 687 mesh_geo = geo_reference=Geo_reference(56, x, y) 688 689 # These are the absolute values 690 polygon_absolute = [[0,0], [100,0], [100,100], [0,100]] 820 691 x_p = -10 821 692 y_p = -40 … … 823 694 polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute) 824 695 825 boundary_tags = {'wall': [0,1,3],'wave':[2]}826 827 inner1_polygon_absolute = [[10,10], [20,10],[20,20],[10,20]]828 inner1_polygon = geo_ref_poly. 829 change_points_geo_ref(inner1_polygon_absolute)830 831 inner2_polygon_absolute = [[30,30], [40,30],[40,40],[30,40]]832 inner2_polygon = geo_ref_poly. 833 change_points_geo_ref(inner2_polygon_absolute)834 696 boundary_tags = {'wall': [0,1,3], 'wave': [2]} 697 698 inner1_polygon_absolute = [[10,10], [20,10], [20,20], [10,20]] 699 inner1_polygon = geo_ref_poly.\ 700 change_points_geo_ref(inner1_polygon_absolute) 701 702 inner2_polygon_absolute = [[30,30], [40,30], [40,40], [30,40]] 703 inner2_polygon = geo_ref_poly.\ 704 change_points_geo_ref(inner2_polygon_absolute) 705 835 706 max_area = 1 836 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]707 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 837 708 m = create_mesh_from_regions(polygon, 838 709 boundary_tags, … … 841 712 poly_geo_reference=geo_ref_poly, 842 713 mesh_geo_reference=mesh_geo) 843 844 m.export_mesh_file('a_test_mesh_iknterface.tsh') 845 846 fileName = tempfile.mktemp( ".txt")847 file = open(fileName, "w")848 file.write( "1 ?? ??\n\714 715 m.export_mesh_file('a_test_mesh_iknterface.tsh') 716 717 fileName = tempfile.mktemp('.txt') 718 file = open(fileName, 'w') 719 file.write(' 1 ?? ??\n\ 849 720 90.0 90.0\n\ 850 721 81.0 90.0\n\ … … 859 730 10.0 80.0\n\ 860 731 END\n\ 861 END\n ")862 file.close() 863 864 m.import_ungenerate_file(fileName) #, tag='wall')732 END\n') 733 file.close() 734 735 m.import_ungenerate_file(fileName) #, tag='wall') 865 736 os.remove(fileName) 866 m.generate_mesh(maximum_triangle_area=max_area, verbose=False)867 mesh_filename = "bento_b.tsh"737 m.generate_mesh(maximum_triangle_area=max_area, verbose=False) 738 mesh_filename = 'bento_b.tsh' 868 739 m.export_mesh_file(mesh_filename) 869 740 870 741 domain = Domain(mesh_filename, use_cache = False) 871 742 872 743 Br = Reflective_boundary(domain) 873 Bd = Dirichlet_boundary([3, 0,0])874 domain.set_boundary( {'wall': Br, 'wave': Bd})744 Bd = Dirichlet_boundary([3, 0, 0]) 745 domain.set_boundary({'wall': Br, 'wave': Bd}) 875 746 yieldstep = 0.1 876 747 finaltime = 10 877 for t in domain.evolve(yieldstep, finaltime): 748 for t in domain.evolve(yieldstep, finaltime): 878 749 domain.write_time() 879 750 880 751 def concept_ungenerateIII(self): 881 882 752 from anuga.shallow_water import Domain, Reflective_boundary, \ 883 753 Dirichlet_boundary 884 885 754 from anuga.pmesh.mesh_interface import create_mesh_from_regions 886 887 # These are the absolute values 888 polygon = [[0,0],[100,0],[100,100],[0,100]] 889 890 boundary_tags = {'wall':[0,1,3],'wave':[2]} 891 892 inner1_polygon = [[10,10],[20,10],[20,20],[10,20]] 893 894 895 inner2_polygon = [[30,30],[40,30],[40,40],[30,40]] 896 897 755 756 # These are the absolute values 757 polygon = [[0,0], [100,0], [100,100], [0,100]] 758 759 boundary_tags = {'wall': [0,1,3], 'wave': [2]} 760 inner1_polygon = [[10,10], [20,10], [20,20], [10,20]] 761 inner2_polygon = [[30,30], [40,30], [40,40], [30,40]] 762 898 763 max_area = 1 899 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)]764 interior_regions = [(inner1_polygon, 5), (inner2_polygon, 10)] 900 765 m = create_mesh_from_regions(polygon, 901 766 boundary_tags, 902 767 max_area, 903 768 interior_regions=interior_regions) 904 905 fileName = tempfile.mktemp( ".txt")906 file = open(fileName, "w")907 file.write( "1 ?? ??\n\769 770 fileName = tempfile.mktemp('.txt') 771 file = open(fileName, 'w') 772 file.write(' 1 ?? ??\n\ 908 773 90.0 90.0\n\ 909 774 81.0 90.0\n\ … … 918 783 10.0 80.0\n\ 919 784 END\n\ 920 END\n ")921 file.close() 922 923 m.import_ungenerate_file(fileName) 785 END\n') 786 file.close() 787 788 m.import_ungenerate_file(fileName) 924 789 os.remove(fileName) 925 m.generate_mesh(maximum_triangle_area=max_area, verbose=False)926 mesh_filename = "mesh.tsh"790 m.generate_mesh(maximum_triangle_area=max_area, verbose=False) 791 mesh_filename = 'mesh.tsh' 927 792 m.export_mesh_file(mesh_filename) 928 793 929 domain = Domain(mesh_filename, use_cache =False)930 794 domain = Domain(mesh_filename, use_cache=False) 795 931 796 Br = Reflective_boundary(domain) 932 Bd = Dirichlet_boundary([3, 0,0])933 domain.set_boundary( {'wall': Br, 'wave': Bd})797 Bd = Dirichlet_boundary([3, 0, 0]) 798 domain.set_boundary({'wall': Br, 'wave': Bd}) 934 799 yieldstep = 0.1 935 800 finaltime = 10 936 for t in domain.evolve(yieldstep, finaltime): 801 for t in domain.evolve(yieldstep, finaltime): 937 802 domain.write_time() 938 803 939 940 941 804 def test_create_mesh_from_regions_check_segs(self): 942 """Test that create_mesh_from_regions fails when an interior region is943 outside bounding polygon. """944 945 946 # These are the absolute values 947 min_x = 10 805 '''Test that create_mesh_from_regions fails 806 when an interior region is outside bounding polygon. 807 ''' 808 809 # These are the absolute values 810 min_x = 10 948 811 min_y = 88 949 polygon = [[min_x,min_y],[1000,100],[1000,1000],[100,1000]] 950 951 boundary_tags = {'walls':[0,1,3],'bom':[2]} 952 # boundary_tags = {'walls':[0,1]} 812 polygon = [[min_x,min_y], [1000,100], [1000,1000], [100,1000]] 813 boundary_tags = {'walls': [0,1,3], 'bom': [2]} 814 953 815 # This one is inside bounding polygon - should pass 954 inner_polygon = [[800,400],[900,500],[800,600]] 955 816 inner_polygon = [[800,400], [900,500], [800,600]] 956 817 interior_regions = [(inner_polygon, 5)] 957 818 m = create_mesh_from_regions(polygon, … … 960 821 interior_regions=interior_regions) 961 822 962 boundary_tags = {'walls':[0,1,3,4],'bom':[2]} 963 823 boundary_tags = {'walls': [0,1,3,4], 'bom': [2]} 964 824 try: 965 825 m = create_mesh_from_regions(polygon, … … 970 830 pass 971 831 else: 972 msg = ' segment out of bounds not caught '973 raise msg974 975 832 msg = 'Segment out of bounds not caught ' 833 raise Exception, msg 834 835 976 836 #------------------------------------------------------------- 977 837 if __name__ == "__main__": 978 838 suite = unittest.makeSuite(TestCase,'test') 979 #suite = unittest.makeSuite(TestCase,'test_create_mesh_from_regions_check_segs')980 839 runner = unittest.TextTestRunner() #verbosity=2) 981 840 runner.run(suite) 982 841
Note: See TracChangeset
for help on using the changeset viewer.