source: anuga_work/production/newcastle_2006/run_newcastle_slide.py @ 4186

Last change on this file since 4186 was 4186, checked in by sexton, 18 years ago

updates to slide modelling based on recent discussions with PMD (basically change in locations for potential slides and more accurate locations for the historical events, plus more accurate depth measurements)

File size: 7.9 KB
Line 
1"""Script for running a tsunami inundation scenario for Newcastle, NSW, Australia.
2
3Source data such as elevation and boundary data is assumed to be available in
4directories specified by project_slide.py
5The output sww file is stored in project_slide.outputtimedir
6
7The scenario is defined by a triangular mesh created from project_slide.polygon,
8the elevation data and a tsunami wave generated by s submarine mass failure.
9
10Ole Nielsen and Duncan Gray, GA - 2005 and Nick Bartzis, GA - 2006
11"""
12
13#-------------------------------------------------------------------------------
14# Import necessary modules
15#-------------------------------------------------------------------------------
16
17# Standard modules
18import os
19import time
20from shutil import copy
21from os.path import dirname, basename
22from os import mkdir, access, F_OK, sep
23import sys
24
25# Related major packages
26from anuga.shallow_water import Domain, Reflective_boundary, Dirichlet_boundary
27from anuga.shallow_water.data_manager import convert_dem_from_ascii2netcdf, dem2pts
28from anuga.geospatial_data.geospatial_data import *
29from anuga.abstract_2d_finite_volumes.util import start_screen_catcher, copy_code_files
30
31# Application specific imports
32import project_slide              # Definition of file names and polygons
33
34#-------------------------------------------------------------------------------
35# Copy scripts to time stamped output directory and capture screen
36# output to file
37#-------------------------------------------------------------------------------
38
39# creates copy of code in output dir
40copy_code_files(project_slide.outputtimedir,__file__,dirname(project_slide.__file__)+sep+ project_slide.__name__+'.py' )
41myid = 0
42numprocs = 1
43start_screen_catcher(project_slide.outputtimedir, myid, numprocs)
44
45print 'USER:    ', project_slide.user
46
47#-------------------------------------------------------------------------------
48# Preparation of topographic data
49#
50# Convert ASC 2 DEM 2 PTS using source data and store result in source data
51#-------------------------------------------------------------------------------
52
53# filenames
54nsw_dem_name = project_slide.nsw_dem_name
55meshname = project_slide.meshname+'.msh'
56
57# creates DEM from asc data
58convert_dem_from_ascii2netcdf(nsw_dem_name, use_cache=True, verbose=True)
59
60#creates pts file for onshore DEM
61dem2pts(nsw_dem_name,
62        easting_min=project_slide.eastingmin_nsw,
63        easting_max=project_slide.eastingmax_nsw,
64        northing_min=project_slide.northingmin_nsw,
65        northing_max= project_slide.northingmax_nsw,
66        use_cache=True, verbose=True)
67
68print 'create offshore'
69G11 = Geospatial_data(file_name = project_slide.offshore_dem_name2 + '.xya')+\
70      Geospatial_data(file_name = project_slide.offshore_dem_name3 + '.xya')
71G12 = Geospatial_data(file_name = project_slide.offshore_dem_name4 + '.xya')+\
72      Geospatial_data(file_name = project_slide.offshore_dem_name5 + '.xya')+\
73      Geospatial_data(file_name = project_slide.offshore_dem_name6 + '.xya')+\
74      Geospatial_data(file_name = project_slide.offshore_dem_name7 + '.xya')+\
75      Geospatial_data(file_name = project_slide.offshore_dem_name8 + '.xya')+\
76      Geospatial_data(file_name = project_slide.offshore_dem_name9 + '.xya')
77print 'create onshore'
78G4 = Geospatial_data(file_name = project_slide.nsw_dem_name + '.pts')
79print 'add'
80G = G11.clip(Geospatial_data(project_slide.poly_surveyclip)) +\
81    G12.clip(Geospatial_data(project_slide.polyAll)) +\
82    (G4.clip(Geospatial_data(project_slide.polyAll)).clip_outside(Geospatial_data(project_slide.poly_surveyclip)))
83print 'export points'
84G.export_points_file(project_slide.combined_dem_name + '.pts')
85#G.export_points_file(project_slide.combined_dem_name + '.xya')
86
87
88#----------------------------------------------------------------------------
89# Create the triangular mesh based on overall clipping polygon with a tagged
90# boundary and interior regions defined in project_slide.py along with
91# resolutions (maximal area of per triangle) for each polygon
92#-------------------------------------------------------------------------------
93
94from anuga.pmesh.mesh_interface import create_mesh_from_regions
95remainder_res = 500000
96local_res = 50000
97newcastle_res = 1000
98interior_regions = [[project_slide.poly_local, local_res],
99                    [project_slide.poly_newcastle, newcastle_res]]
100
101from caching import cache
102_ = cache(create_mesh_from_regions,
103          project_slide.polyAll,
104           {'boundary_tags': {'e0': [0], 'e1': [1], 'e2': [2],
105                              'e3': [3], 'e4':[4], 'e5': [5]},
106           'maximum_triangle_area': remainder_res,
107           'filename': meshname,
108           'interior_regions': interior_regions},
109          verbose = True, evaluate=False)
110print 'created mesh'
111
112#-------------------------------------------------------------------------------                                 
113# Setup computational domain
114#-------------------------------------------------------------------------------                                 
115domain = Domain(meshname, use_cache = True, verbose = True)
116
117print 'Number of triangles = ', len(domain)
118print 'The extent is ', domain.get_extent()
119print domain.statistics()
120
121domain.set_name(project_slide.basename)
122domain.set_datadir(project_slide.outputtimedir)
123domain.set_quantities_to_be_stored(['stage', 'xmomentum', 'ymomentum'])
124domain.set_minimum_storable_height(0.01)
125
126#-------------------------------------------------------------------------------                                 
127# Setup initial conditions
128#-------------------------------------------------------------------------------
129
130tide = 0.0
131domain.set_quantity('stage', tide)
132domain.set_quantity('friction', 0.0) 
133domain.set_quantity('elevation', 
134                    filename = project_slide.combined_dem_name + '.pts',
135                    use_cache = True,
136                    verbose = True,
137                    alpha = 0.1
138                    )
139
140#-------------------------------------------------------------------------------
141# Set up scenario (tsunami_source is a callable object used with set_quantity)
142#-------------------------------------------------------------------------------
143from smf import slide_tsunami
144
145tsunami_source = slide_tsunami(length=project_slide.yacaaba_length,
146                               width=project_slide.yacaaba_width,
147                               depth=project_slide.yacaaba_depth,
148                               slope=project_slide.yacaaba_slope,
149                               thickness=project_slide.yacaaba_thickness, 
150                               x0=project_slide.slide_origin_yacaaba_a[0], 
151                               y0=project_slide.slide_origin_yacaaba_a[1], 
152                               alpha=project_slide.yacaaba_alpha, 
153                               domain=domain)
154
155#-------------------------------------------------------------------------------                                 
156# Setup boundary conditions
157#-------------------------------------------------------------------------------
158print 'Available boundary tags', domain.get_boundary_tags()
159
160Br = Reflective_boundary(domain)
161Bd = Dirichlet_boundary([tide,0,0])
162
163domain.set_boundary( {'e0': Bd,  'e1': Bd, 'e2': Bd, 'e3': Bd,
164                      'e4': Bd, 'e5': Bd} )
165
166
167#-------------------------------------------------------------------------------                                 
168# Evolve system through time
169#-------------------------------------------------------------------------------
170import time
171t0 = time.time()
172from Numeric import allclose
173from anuga.abstract_2d_finite_volumes.quantity import Quantity
174
175for t in domain.evolve(yieldstep = 30, finaltime = 5000): 
176    domain.write_time()
177    domain.write_boundary_statistics(tags = 'e14')
178    stagestep = domain.get_quantity('stage') 
179
180    if allclose(t, 30):
181        slide = Quantity(domain)
182        slide.set_values(tsunami_source)
183        domain.set_quantity('stage', slide + stagestep)
184   
185print 'That took %.2f seconds' %(time.time()-t0)
186
187print 'finished'
Note: See TracBrowser for help on using the repository browser.