source: anuga_work/development/friction_UA_flume_2006/run_dam.py @ 4051

Last change on this file since 4051 was 4051, checked in by duncan, 17 years ago

minor changes

File size: 5.8 KB
Line 
1"""Script for running a dam break simulation of U of Aberdeen's dam break tank.
2
3
4Ole Nielsen and Duncan Gray, GA - 2006
5
6
7Issues
8If running this is hand-set-up parallel, the python files are overwritten.
9
10"""
11#----------------------------------------------------------------------------
12# Import necessary modules
13#----------------------------------------------------------------------------
14
15# Standard modules
16import time
17from time import localtime, strftime
18import sys
19from shutil import copy
20from os import path, sep
21from os.path import dirname  #, basename
22
23# Related major packages
24from anuga.shallow_water import Domain, Reflective_boundary, \
25                            Dirichlet_boundary, Time_boundary, File_boundary
26from anuga.abstract_2d_finite_volumes.region import Set_region
27from anuga.fit_interpolate.interpolate import interpolate_sww2csv
28from anuga.abstract_2d_finite_volumes.util import start_screen_catcher, \
29     copy_code_files
30
31
32# Scenario specific imports
33import project                 # Definition of file names and polygons
34import create_mesh
35
36
37def main(friction, outputdir_name=None, is_trial_run=False):
38    basename = 'zz' + str(friction)
39    if is_trial_run is True:
40        outputdir_name += '_test'
41        yieldstep = 1
42        finaltime = 31
43    else:
44        yieldstep = 0.01
45        finaltime = 31
46           
47    pro_instance = project.Project(['data','flumes','dam_2006'],
48                                       outputdir_name=outputdir_name)
49    mesh_filename = pro_instance.meshdir + basename + '.msh'
50
51    #--------------------------------------------------------------------------
52    # Copy scripts to output directory and capture screen
53    # output to file
54    #--------------------------------------------------------------------------
55
56    # creates copy of code in output dir
57    print "The output dir is", pro_instance.outputdir
58    copy_code_files(pro_instance.outputdir,__file__,
59                    dirname(project.__file__) \
60                    + sep + project.__name__+'.py')
61    copy (pro_instance.codedir + 'run_dam.py',
62          pro_instance.outputdir + 'run_dam' + str(friction)+ '.py')
63    copy (pro_instance.codedir + 'create_mesh.py',
64          pro_instance.outputdir + 'create_mesh.py')
65    if is_trial_run is False:
66        start_screen_catcher(pro_instance.outputdir, int(friction*100))
67
68    print 'USER:    ', pro_instance.user
69    #-------------------------------------------------------------------------
70    # Create the triangular mesh
71    #-------------------------------------------------------------------------
72   
73    gate_position = 12.0
74    create_mesh.generate(mesh_filename,
75                         gate_position,
76                         is_coarse=is_trial_run) # this creates the mesh
77
78    head,tail = path.split(mesh_filename)
79    copy (mesh_filename,
80          pro_instance.outputdir + tail )
81    #-------------------------------------------------------------------------
82    # Setup computational domain
83    #-------------------------------------------------------------------------
84    domain = Domain(mesh_filename, use_cache = False, verbose = True)
85   
86
87    print 'Number of triangles = ', len(domain)
88    print 'The extent is ', domain.get_extent()
89    print domain.statistics()
90
91   
92    domain.set_name(basename)
93    domain.set_datadir(pro_instance.outputdir)
94    domain.set_quantities_to_be_stored(['stage', 'xmomentum', 'ymomentum'])
95    domain.set_minimum_storable_height(0.01)
96    #domain.set_store_vertices_uniquely(True)  # for writting to sww
97
98    #-------------------------------------------------------------------------
99    # Setup initial conditions
100    #-------------------------------------------------------------------------
101
102    domain.set_quantity('stage', 0.0)
103    domain.set_quantity('friction', friction) 
104    domain.set_quantity('elevation',0.0)
105
106    domain.set_quantity('elevation', filename = 'elevation.xya',
107                        alpha = 10.0,verbose = True, use_cache = True)
108   
109    print 'Available boundary tags', domain.get_boundary_tags()
110    domain.set_region('dam','stage',0.6,
111                                 location = 'unique vertices') 
112    #domain.set_region(Set_region('dam','stage',0.2,
113    #                             location = 'unique vertices'))
114
115    Br = Reflective_boundary(domain)
116    Bd = Dirichlet_boundary([0,0,0])  # to drain the water out.
117    domain.set_boundary( {'wall': Br, 'edge': Bd} )
118
119    #-------------------------------------------------------------------------
120    # Evolve system through time
121    #-------------------------------------------------------------------------
122    t0 = time.time()
123
124    for t in domain.evolve(yieldstep, finaltime):
125        domain.write_time()
126   
127        print 'That took %.2f seconds' %(time.time()-t0)
128        print 'finished'
129
130    points = [[2.8,0.225],  #-1.8m from SWL
131              [5.1,0.225],  #0.5m from SWL
132              [6.6,0.225],  #2m from SWL
133              [6.95,0.255], #2.35m from SWL
134              [7.6,0.255],  #3m from SWL
135              [8.1,0.255],  #3.5m from SWL
136              [9.1,0.255]  #4.5m from SWL
137              ]
138
139
140    #-------------------------------------------------------------------------
141    # Calculate gauge info
142    #-------------------------------------------------------------------------
143
144    interpolate_sww2csv(pro_instance.outputdir + basename +".sww",
145                        points,
146                        pro_instance.outputdir + "depth_manning_"+str(friction)+".csv",
147                        pro_instance.outputdir + "velocity_x.csv",
148                        pro_instance.outputdir + "velocity_y.csv")
149 
150    return pro_instance
151
152#-------------------------------------------------------------
153if __name__ == "__main__":
154     frictions = [0.04]
155     for i, friction in enumerate(frictions):
156         main(friction, is_trial_run = True, outputdir_name='friction_UA_2')
157
Note: See TracBrowser for help on using the repository browser.