source: trunk/anuga_work/development/saman_flume/create_mesh.py @ 7924

Last change on this file since 7924 was 4444, checked in by duncan, 18 years ago

saman's flume

File size: 4.2 KB
Line 
1"""Create mesh for University of Queensland dam break flume
2"""
3
4from math import cos, radians
5from anuga.pmesh.mesh import *
6from anuga.coordinate_transforms.geo_reference import Geo_reference
7
8
9#Basic geometry
10xslope = 2.5
11
12def generate(mesh_filename, beach_angle, toe_to_nails_distance,
13             is_coarse = True):
14    """
15    Generate mesh for Saman's flume flume.
16    The gate position is the distance from the right wall of the wave tank
17    to the gate.
18   
19    """
20    #Basic geometry
21   
22    xright  = 5.25 
23    ybottom = 0
24    ytop    = 0.30
25    xdam = 0.0
26    xleft = -0.5
27    #xslope = self.xslope
28   
29    nails_length_x = 0.15 
30
31    xnailsleft = xslope + toe_to_nails_distance*cos(radians(beach_angle))
32    xnailsright = xslope + (toe_to_nails_distance+ nails_length_x) \
33                  *cos(radians(beach_angle))
34
35   
36
37    #Outline
38    point_sw = [xleft, ybottom]
39    point_se = [xright, ybottom]
40    point_nw = [xleft, ytop]   
41    point_ne = [xright, ytop]
42
43    # Dam seperation (left)
44    point_dam_top = [xdam, ytop]
45    point_dam_bottom = [xdam, ybottom]   
46
47    # slope seperation (middle)
48    point_slope_top = [xslope, ytop]
49    point_slope_bottom = [xslope, ybottom]
50   
51    # nail seperation (after slope, left)
52    point_nails_left_top = [xnailsleft, ytop]
53    point_nails_left_bottom = [xnailsleft, ybottom]
54   
55    # nail seperation (after slope, right)
56    point_nails_right_top = [xnailsright, ytop]
57    point_nails_right_bottom = [xnailsright, ybottom]
58     
59
60    m = Mesh()
61
62    #Boundary
63    points = [point_sw,   #se
64              point_nw,
65              point_dam_top,
66              point_slope_top,
67              point_nails_left_top,
68              point_nails_right_top,
69              point_ne, 
70              point_se,
71              point_nails_right_bottom,
72              point_nails_left_bottom,
73              point_slope_bottom,
74              point_dam_bottom
75              ]
76   
77    segments = [[0,1], [1,2], [2,3],
78                [3,4 ],[4,5], [5,6],[6,7],[7,8],
79                [8,9], [9,10],[10,11],[11,0],#The outer border
80                [2,11],    #dam Separator
81                [3,10],        # slope separator
82                [4,9],        # nails left separator
83                [5,8]]        # nails right separator
84   
85    segment_tags = {'wall':[0,1,2,3,5,6,7,8,9,10,11],'edge':[4]} 
86       
87    m.add_points_and_segments(points, segments, segment_tags)
88
89   
90    if is_coarse == True:
91        #nails_max_area = 0.001
92        general_max_area = 0.01
93        segment_count = 8
94        nails_x = 2
95        nails_y = 5
96        nail_spacing = 0.060  # distance between nail centers
97        nail_radius = 0.01
98    else:
99        #nails_max_area = 0.000001
100        general_max_area = 0.0001
101        segment_count = 20
102        nails_x = 8
103        nails_y = 19
104        nail_spacing = 0.015  # distance between nail centers
105        nail_radius = 0.0025
106
107    #Add the nails
108    for x_i in range(1,nails_x + 1):
109        for y_i in range(1,nails_y + 1):
110            center_point = (xnailsleft+(x_i*nail_spacing), y_i*nail_spacing)
111            m.add_circle(center_point, radius = nail_radius,
112                         segment_count = segment_count,
113                         tag = 'wall',
114                         hole = True)
115             
116   
117    # this is the location of the reservoir region.
118    dam = m.add_region(-0.0000001,(ytop - ybottom)/2)
119    dam.setTag("dam")
120   
121    # this is the location of the slope region, before the nails.
122    slope = m.add_region(xslope + 0.0000001,(ytop - ybottom)/2)
123    slope.setTag("slope")
124   
125    # this is the location of the slope region, after the nails.
126    slope = m.add_region(xnailsright + 0.0000001,(ytop - ybottom)/2)
127    slope.setTag("slope")
128
129    # this is the location of the nails region, after the nails.
130    nails = m.add_region(xnailsleft + 0.0000001,(ytop - ybottom)/2)
131    nails.setTag("nails")
132    #nails.setMaxArea(nails_max_area)
133   
134   
135    m.generate_mesh(maximum_triangle_area=general_max_area)
136
137    m.export_mesh_file(mesh_filename)
138    print "mesh created"
139
140#-------------------------------------------------------------
141if __name__ == "__main__":
142    generate("aa.tsh", beach_angle = 15, toe_to_nails_distance = 1.0,
143             is_coarse = False)
Note: See TracBrowser for help on using the repository browser.