Changeset 5790
- Timestamp:
- Sep 26, 2008, 11:25:31 AM (16 years ago)
- Location:
- anuga_work/production/carnarvon
- Files:
-
- 5 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_work/production/carnarvon/build_carnarvon.py
r5755 r5790 1 """Script for running tsunami inundation scenario for Dampier, WA, Australia. 1 """ 2 Script for building the elevation data to run a tsunami inundation scenario 3 for geraldton, WA, Australia. 2 4 3 Source data such as elevation and boundary data is assumed to be available in 4 directories specified by project.py 5 The output sww file is stored in project.output_time_dir5 Input: elevation data from project.py 6 Output: pts file stored in project.topographies_dir 7 The run_geraldton.py is reliant on the output of this script. 6 8 7 The scenario is defined by a triangular mesh created from project.polygon,8 the elevation data and a simulated submarine landslide.9 10 Ole Nielsen and Duncan Gray, GA - 2005 and Jane Sexton, Nick Bartzis, GA - 200611 9 """ 12 10 … … 27 25 from anuga.shallow_water.data_manager import convert_dem_from_ascii2netcdf, dem2pts 28 26 from anuga.geospatial_data.geospatial_data import * 29 from anuga.shallow_water.data_manager import start_screen_catcher, copy_code_files ,store_parameters27 from anuga.shallow_water.data_manager import start_screen_catcher, copy_code_files 30 28 31 29 # Application specific imports … … 42 40 start_screen_catcher(project.output_build_time_dir) 43 41 44 print 'USER: ', project.user42 print 'USER: ', project.user 45 43 46 44 #------------------------------------------------------------------------------- … … 51 49 # Fine pts file to be clipped to area of interest 52 50 #------------------------------------------------------------------------------- 53 print "project.poly_all",project.poly_all54 print "project.combined_dir_name",project.combined_dir_name51 print "project.poly_all", project.poly_all 52 print "project.combined_dir_name", project.combined_dir_name 55 53 56 # topographydirectory filenames54 # input elevation directory filenames 57 55 onshore_in_dir_name = project.onshore_in_dir_name 58 56 coast_in_dir_name = project.coast_in_dir_name … … 61 59 offshore_in_dir_name2 = project.offshore_in_dir_name2 62 60 61 # output elevation directory filenames 63 62 onshore_dir_name = project.onshore_dir_name 64 63 coast_dir_name = project.coast_dir_name 65 66 64 offshore_dir_name = project.offshore_dir_name 67 65 offshore_dir_name1 = project.offshore_dir_name1 … … 70 68 71 69 # creates DEM from asc data 72 print "creates DEMs from asc iidata"70 print "creates DEMs from asc data" 73 71 convert_dem_from_ascii2netcdf(onshore_in_dir_name, basename_out=onshore_dir_name, use_cache=True, verbose=True) 74 72 75 # creates pts file for onshore DEM73 # creates pts file for onshore DEM 76 74 print "creates pts file for onshore DEM" 77 dem2pts(onshore_dir_name, 78 # easting_min=project.eastingmin, 79 # easting_max=project.eastingmax, 80 # northing_min=project.northingmin, 81 # northing_max= project.northingmax, 82 use_cache=True, 83 verbose=True) 75 dem2pts(onshore_dir_name ,use_cache=True,verbose=True) 84 76 85 #creates pts file for island DEM 86 #dem2pts(island_dir_name, use_cache=True, verbose=True) 77 # create onshore pts files 78 print'create Geospatial data1 objects from topographies' 79 G1 = Geospatial_data(file_name = onshore_dir_name + '.pts') 87 80 88 print'create Geospatial data1 objects from topographies' 89 G1 = Geospatial_data(file_name = onshore_dir_name + '.pts',verbose=True) 90 G2 = Geospatial_data(file_name = coast_in_dir_name + '.txt',verbose=True) 81 # create coastal and offshore txt files 82 print'create Geospatial data4 objects from topographies' 83 G_coast = Geospatial_data(file_name = coast_in_dir_name) 84 print'create Geospatial data5 objects from topographies' 85 G_off1 = Geospatial_data(file_name = offshore_in_dir_name) 86 print'create Geospatial data6 objects from topographies' 87 G_off2 = Geospatial_data(file_name = offshore_in_dir_name1) 88 print'create Geospatial data7 objects from topographies' 89 G_off3 = Geospatial_data(file_name = offshore_in_dir_name2) 91 90 92 G_off = Geospatial_data(file_name = offshore_in_dir_name + '.txt',verbose=True) 93 G_off1 = Geospatial_data(file_name = offshore_in_dir_name1 + '.txt',verbose=True) 94 G_off2 = Geospatial_data(file_name = offshore_in_dir_name2 + '.txt',verbose=True) 91 #------------------------------------------------------------------------------- 92 # Combine, clip and export dataset 93 #------------------------------------------------------------------------------- 94 95 print 'add all bathymetry files' 96 G_off = G_off1 + G_off2 + G_off3 97 print 'clipping data to coast' 98 G_ocean = G_off.clip(project.poly_ocean, verbose=True) #mainland 99 G_ocean_b = G_ocean.clip_outside(project.poly_island1, verbose=True) #bernier 100 G_ocean_bd = G_ocean_b.clip_outside(project.poly_island2, verbose=True) #dorne 101 102 G1_clip_m = G1.clip(project.poly_mainland, verbose=True) 103 G1_clip_b = G1.clip(project.poly_island1, verbose=True) 104 G1_clip_d = G1.clip(project.poly_island2, verbose=True) 105 95 106 print'add all geospatial objects' 96 G = G1 + G2 + G_off + G_off1 + G_off2 97 98 print'clip combined geospatial object by bounding polygon' 99 G_clipped = G.clip(project.poly_all) 107 G = G1_clip_m+ G1_clip_b+G1_clip_d+ G_coast + G_ocean_bd 100 108 101 109 print'export combined DEM file' 102 110 if access(project.topographies_dir,F_OK) == 0: 103 111 mkdir (project.topographies_dir) 104 G_clipped.export_points_file(project.combined_dir_name + '.txt') 112 G.export_points_file(project.combined_dir_name + '.pts') 113 #G.export_points_file(project.combined_dir_name + '.txt') #Use for comparision in ARC 105 114 106 print'project.combined_dir_name + .txt',project.combined_dir_name + '.txt'107 108 ###-------------------------------------------------------------------------109 ### Convert URS to SWW file for boundary conditions110 ###-------------------------------------------------------------------------111 ##print 'starting to create boundary conditions'112 ##from anuga.shallow_water.data_manager import urs2sww, urs_ungridded2sww113 ##114 ##boundaries_in_dir_name = project.boundaries_in_dir_name115 ##print 'boundaries_in_dir_name',project.boundaries_in_dir_name116 ##117 ##118 ###import sys; sys.exit()119 ##120 ##urs_ungridded2sww(project.boundaries_in_dir_name, project.boundaries_in_dir_name,121 ## verbose=True, mint=4000, maxt=80000, zscale=1)122 ## -
anuga_work/production/carnarvon/export_results.py
r5755 r5790 7 7 8 8 9 time_dir = '20080908_154507_run_final_0.0_polyline_alpha0.1_kvanputt' 9 #time_dir = '20080908_154507_run_final_0.0_polyline_alpha0.1_kvanputt' 10 time_dir = '20080909_123144_run_final_0.0_polyline_alpha0.1_kvanputt' 10 11 11 12 -
anuga_work/production/carnarvon/get_gauges.py
r5755 r5790 14 14 compress,zeros,fabs,take 15 15 fid = NetCDFFile(filename+'.sts', 'r') #Open existing file for read 16 permutation = fid.variables['permutation'][:] 16 17 x = fid.variables['x'][:]+fid.xllcorner #x-coordinates of vertices 17 18 y = fid.variables['y'][:]+fid.yllcorner #y-coordinates of vertices … … 19 20 time=fid.variables['time'][:]+fid.starttime 20 21 elevation=fid.variables['elevation'][:] 21 print 'hello', fid.variables.keys() 22 23 22 24 23 basename='sts_gauge' 25 24 quantity_names=['stage','xmomentum','ymomentum'] … … 29 28 30 29 maxname = 'max_sts_stage.csv' 31 fid_max = open(project.boundaries_dir +sep+maxname,'w')32 s = ' x, y, max_stage \n'30 fid_max = open(project.boundaries_dir_event+sep+maxname,'w') 31 s = 'index, x, y, max_stage \n' 33 32 fid_max.write(s) 34 33 for j in range(len(x)): 35 locx=int(x[j]) 36 locy=int(y[j]) 34 index= permutation[j] 37 35 stage = quantities['stage'][:,j] 38 36 xmomentum = quantities['xmomentum'][:,j] 39 37 ymomentum = quantities['ymomentum'][:,j] 40 38 41 s = '% .6f, %.6f, %.6f\n' %(x[j], y[j], max(stage))39 s = '%d, %.6f, %.6f, %.6f\n' %(index, x[j], y[j], max(stage)) 42 40 fid_max.write(s) 43 41 44 fid_sts = open(project.boundaries_dir +sep+basename+'_'+str(locx)+'_'+str(locy)+'.csv', 'w')42 fid_sts = open(project.boundaries_dir_event+sep+basename+'_'+ str(index)+'.csv', 'w') 45 43 s = 'time, stage, xmomentum, ymomentum \n' 46 44 fid_sts.write(s) … … 56 54 return quantities,elevation,time 57 55 58 quantities,elevation,time=get_sts_gauge_data(os.path.join(project.boundaries_dir ,project.scenario_name),verbose=False)56 quantities,elevation,time=get_sts_gauge_data(os.path.join(project.boundaries_dir_event,project.scenario_name),verbose=False) 59 57 60 58 print len(elevation), len(quantities['stage'][0,:]) -
anuga_work/production/carnarvon/project.py
r5755 r5790 1 # -*- coding: cp1252 -*- 2 """Common filenames and locations for topographic data, meshes and outputs. 1 """Common filenames and locations for elevation, meshes and outputs. 2 This script is the heart of all scripts in the folder 3 3 """ 4 #------------------------------------------------------------------------------ 5 # Import necessary modules 6 #------------------------------------------------------------------------------ 4 7 5 8 from os import sep, environ, getenv, getcwd … … 8 11 from time import localtime, strftime, gmtime 9 12 from anuga.utilities.polygon import read_polygon, plot_polygons, is_inside_polygon, number_mesh_triangles 10 #from anuga.coordinate_transforms.redfearn import degminsec2decimal_degrees, convert_points_from_latlon_to_utm11 13 from anuga.utilities.system_tools import get_user_name, get_host_name 12 14 from anuga.shallow_water.data_manager import urs2sts,create_sts_boundary 13 15 from anuga.utilities.polygon import read_polygon, plot_polygons, polygon_area, is_inside_polygon 14 16 15 # file and system info 16 #--------------------------------- 17 #codename = 'project.py' 17 #------------------------------------------------------------------------------ 18 # Directory setup 19 #------------------------------------------------------------------------------ 20 # Note: INUNDATIONHOME is the inundation directory, not the data directory. 18 21 19 22 home = getenv('INUNDATIONHOME') + sep +'data'+sep #Sandpit's parent diruser = get_user_name() … … 22 25 host = get_host_name() 23 26 24 # INUNDATIONHOME is the inundation directory, not the data directory. 25 26 #time stuff 27 time = strftime('%Y%m%d_%H%M%S',localtime()) #gets time for new dir 28 gtime = strftime('%Y%m%d_%H%M%S',gmtime()) #gets time for new dir 27 # determines time for setting up output directories 28 time = strftime('%Y%m%d_%H%M%S',localtime()) 29 gtime = strftime('%Y%m%d_%H%M%S',gmtime()) 29 30 build_time = time+'_build' 30 31 run_time = time+'_run' 31 print 'gtime: ', gtime 32 33 #Making assumptions about the location of scenario data 32 33 #------------------------------------------------------------------------------ 34 # Initial Conditions 35 #------------------------------------------------------------------------------ 36 37 # this section needs to be updated to reflect the modelled community. 38 # Note, the user needs to set up the directory system accordingly 34 39 state = 'western_australia' 35 40 scenario_name = 'carnarvon' 36 41 scenario = 'carnarvon_tsunami_scenario' 37 42 38 39 tide = 0.0 #1.0 40 41 alpha = 0.1 42 friction=0.01 43 starttime=0 44 finaltime=1000 45 export_cellsize=25 46 setup='final' 47 source='polyline' 43 # Model specific parameters. One or all can be changed each time the 44 # run_scenario script is executed 45 tide = 0 #0.6 46 #event_number = 27255 # linked to hazard map 47 event_number = 27283 48 alpha = 0.1 # smoothing parameter for mesh 49 friction=0.01 # manning's friction coefficient 50 starttime=0 51 finaltime=80000 # final time for simulation 52 53 setup='final' # Final can be replaced with trial or basic. 54 # Either will result in a coarser mesh that will allow a 55 # faster, but less accurate, simulation. 48 56 49 57 if setup =='trial': … … 63 71 yieldstep=60 64 72 65 dir_comment='_'+setup+'_'+str(tide)+'_'+str(source)+'_'+ 'alpha' +str(alpha)+'_'+str(user) 66 67 # onshore data provided by WA DLI 68 onshore_name = 'bathy250_clipland' # original 69 70 # AHO + DPI data + colin French coastline 71 coast_name = 'DPI_coastlineP' 72 offshore_name = 'Shark_Bay_Clip' 73 offshore_name1 = 'XYAHD_Clip' 74 offshore_name2 = 'DPI_data' 75 76 77 #final topo name 78 combined_name = scenario_name+'_combined_elevation' 79 combined_smaller_name = scenario_name+'_combined_elevation_smaller' 80 73 #------------------------------------------------------------------------------ 74 # Output Filename 75 #------------------------------------------------------------------------------ 76 # Important to distinguish each run - ensure str(user) is included! 77 # Note, the user is free to include as many parameters as desired 78 dir_comment='_'+setup+'_'+str(tide)+'_'+str(event_number)+'_'+ 'alpha' +str(alpha)+'_'+str(user) 79 80 #------------------------------------------------------------------------------ 81 # Input Data 82 #------------------------------------------------------------------------------ 83 84 # elevation data used in build_carnarvon.py 85 # onshore data: format ascii grid with accompanying projection file 86 onshore_name = 'dem_onshore' 87 # coastline: format x,y,elevation (with title) 88 coast_name = 'coastline.txt' 89 # bathymetry: format x,y,elevation (with title) 90 offshore_name = 'Shark_Bay_Clip.txt' 91 offshore_name1 = 'XYAHD_Clip.txt' 92 offshore_name2 = 'DPI_data.txt' 93 94 # gauges - used in get_timeseries.py 95 gauge_name = 'carnarvon.csv' 96 gauge_name2 = 'thinned_MGA50.csv' 97 98 # BOUNDING POLYGON - used in build_boundary.py and run_carnarvon.py respectively 99 # NOTE: when files are put together the points must be in sequence - for ease go clockwise! 100 # Check the run_carnarvon.py for boundary_tags 101 # thinned ordering file from Hazard Map: format is index,latitude,longitude (with title) 102 order_filename = 'thinned_boundary_ordering.txt' 103 #landward bounding points 104 landward = 'landward_bounding_polygon.txt' 105 106 #------------------------------------------------------------------------------ 107 # Output Elevation Data 108 #------------------------------------------------------------------------------ 109 # Output filename for elevation 110 # this is a combination of all the data (utilisied in build_boundary) 111 combined_name ='carnarvon_combined_elevation' 112 combined_smaller_name = 'carnarvon_combined_elevation_smaller' 113 114 #------------------------------------------------------------------------------ 115 # Directory Structure 116 #------------------------------------------------------------------------------ 81 117 anuga_dir = home+state+sep+scenario+sep+'anuga'+sep 82 83 118 topographies_in_dir = home+state+sep+scenario+sep+'elevation_final'+sep+'points'+sep 84 119 topographies_dir = anuga_dir+'topographies'+sep 85 86 # input topo file location 120 polygons_dir = anuga_dir+'polygons'+sep 121 tide_dir = anuga_dir+'tide_data'+sep 122 boundaries_dir = anuga_dir+'boundaries'+ sep 123 output_dir = anuga_dir+'outputs'+sep 124 gauges_dir = anuga_dir+'gauges'+sep 125 meshes_dir = anuga_dir+'meshes'+sep 126 127 #------------------------------------------------------------------------------ 128 # Location of input and output data 129 #------------------------------------------------------------------------------ 130 # where the input data sits 87 131 onshore_in_dir_name = topographies_in_dir + onshore_name 88 89 132 coast_in_dir_name = topographies_in_dir + coast_name 90 133 offshore_in_dir_name = topographies_in_dir + offshore_name … … 92 135 offshore_in_dir_name2 = topographies_in_dir + offshore_name2 93 136 137 # where the output data sits 94 138 onshore_dir_name = topographies_dir + onshore_name 95 96 139 coast_dir_name = topographies_dir + coast_name 97 140 offshore_dir_name = topographies_dir + offshore_name … … 99 142 offshore_dir_name2 = topographies_dir + offshore_name2 100 143 101 # final topo files144 # where the combined elevation file sits 102 145 combined_dir_name = topographies_dir + combined_name 103 #combined_time_dir_name = topographies_time_dir + combined_name104 146 combined_smaller_name_dir = topographies_dir + combined_smaller_name 105 #combined_time_dir_final_name = topographies_time_dir + combined_final_name 106 107 meshes_dir = anuga_dir+'meshes'+sep 108 meshes_dir_name = meshes_dir + scenario_name 109 110 polygons_dir = anuga_dir+'polygons'+sep 111 tide_dir = anuga_dir+'tide_data'+sep 112 113 114 #boundaries_source = '1' 115 116 if source=='polyline': 117 boundaries_name = 'perth_3103_28052008' #polyline gun 118 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'polyline'+sep+'1_10000'+sep 119 120 if source=='test': 121 boundaries_name = 'other' #polyline 122 boundaries_in_dir = anuga_dir+'boundaries'+sep 123 124 125 #boundaries locations 126 boundaries_in_dir_name = boundaries_in_dir + boundaries_name 127 boundaries_dir = anuga_dir+'boundaries'+sep 128 boundaries_dir_name = boundaries_dir + scenario_name # what it creates??? 147 148 # where the mesh sits (this is created during the run_carnarvon.py) 149 meshes_dir_name = meshes_dir + scenario_name+'.msh' 150 151 # where the boundary ordering files sit (this is used within build_boundary.py) 152 order_filename_dir = boundaries_dir + order_filename 153 154 # where the landward points of boundary extent sit (this is used within run_carnarvon.py) 155 landward_dir = boundaries_dir + landward 156 157 # where the event sts files sits (this is created during the build_boundary.py) 158 boundaries_dir_event = boundaries_dir + str(event_number) + sep 129 159 boundaries_dir_mux = muxhome 130 160 131 #output locations 132 output_dir = anuga_dir+'outputs'+sep 133 output_build_time_dir = anuga_dir+'outputs'+sep+build_time+dir_comment+sep 134 output_run_time_dir = anuga_dir+'outputs'+sep+run_time+dir_comment+sep 161 # where the directory of the output filename sits 162 output_build_time_dir = output_dir+build_time+dir_comment+sep #used for build_carnarvon.py 163 output_run_time_dir = output_dir+run_time+dir_comment+sep #used for run_carnarvon.py 135 164 output_run_time_dir_name = output_run_time_dir + scenario_name #Used by post processing 136 165 137 vertex_filename = output_run_time_dir + 'mesh_vertex.csv' 138 139 #gauges 140 gauge_name = 'carnarvon.csv' 141 142 gauges_dir = home+sep+state+sep+scenario+sep+'anuga'+sep+'gauges'+sep 143 beach_gauges = gauges_dir + 'beach_gauges.csv' 144 gauges_dir_name = gauges_dir + gauge_name 145 146 ##buildings_filename = gauges_dir + 'Perth_resA.csv' 147 ##buildings_filename_out = 'Perth_res_Project_modified.csv' 148 149 ############################### 166 #w here the directory of the gauges sit 167 gauges_dir_name = gauges_dir + gauge_name #used for get_timeseries.py 168 gauges_dir_name2 = gauges_dir + gauge_name2 #used for get_timeseries.py 169 170 #------------------------------------------------------------------------------ 150 171 # Interior region definitions 151 ############################### 152 153 #Initial bounding polygon for data clipping 172 #------------------------------------------------------------------------------ 173 174 #Land, to set the initial stage/water to be offcoast only 175 #Land and Ocean to clip data 176 poly_mainland=read_polygon(polygons_dir +'land_initial_condition.csv') 177 poly_island1=read_polygon(polygons_dir +'land_initial_condition_bernier.csv') 178 poly_island2=read_polygon(polygons_dir +'land_initial_condition_dorne.csv') 179 poly_ocean=read_polygon(polygons_dir +'ocean_initial_condition.csv') 180 181 # Initial bounding polygon for data clipping 154 182 poly_all = read_polygon(polygons_dir+'poly_all.csv') 155 183 res_poly_all = 100000*res_factor 156 184 157 # Polygon designed158 poly_ internal_20 = read_polygon(polygons_dir+'Carnarvon20m.csv')159 res_ internal_20 = 25000*res_factor160 161 # Polygon designed to162 poly_ internal_5 = read_polygon(polygons_dir+'Carnarvon5m.csv')163 res_ internal_5 =500*res_factor164 165 # Polygon designed to166 poly_ internal_10 = read_polygon(polygons_dir+'Carnarvon10m.csv')167 res_ internal_10 = 1500*res_factor168 169 # Polygon designed to incorporate170 poly_ island_20= read_polygon(polygons_dir+'Island20m.csv')171 res_ island_20= 50000*res_factor172 173 174 interior_regions = [[poly_ internal_20,res_internal_20],[poly_internal_5,res_internal_5]175 ,[poly_ island_20,res_island_20],[poly_internal_10,res_internal_10]]185 # Area of Interest 1 (carnarvon) 186 poly_aoi1 = read_polygon(polygons_dir+'Carnarvon5m.csv') 187 res_aoi1 = 500*res_factor 188 189 # Area of Significance 1 (carnarvon) 190 poly_aos1 = read_polygon(polygons_dir+'Carnarvon10m.csv') 191 res_aos1 = 1500*res_factor 192 193 # Shallow water 1 194 poly_sw1 = read_polygon(polygons_dir+'Carnarvon20m.csv') 195 res_sw1 = 25000*res_factor 196 197 # Shallow water 2 198 poly_sw2 = read_polygon(polygons_dir+'Island20m.csv') 199 res_sw2 = 50000*res_factor 200 201 # Combined all regions, must check that all are included! 202 interior_regions = [[poly_aoi1,res_aoi1],[poly_aos1,res_aos1] 203 ,[poly_sw1,res_sw1],[poly_sw2,res_sw2]] 176 204 177 205 178 206 trigs_min = number_mesh_triangles(interior_regions, poly_all, res_poly_all) 179 print 'min numbertriangles', trigs_min207 print 'min estimated number of triangles', trigs_min 180 208 181 182 poly_mainland = read_polygon(polygons_dir+'initial_condition.csv') 183 184 ################################################################### 209 #------------------------------------------------------------------------------ 185 210 # Clipping regions for export to asc and regions for clipping data 186 ################################################################### 187 188 211 # Final inundation maps should only be created in regions of the finest mesh 212 #------------------------------------------------------------------------------ 213 214 # carnarvon CBD extract ascii grid 215 ##xminCBD = 216 ##xmaxCBD = 217 ##yminCBD = 218 ##ymaxCBD = -
anuga_work/production/carnarvon/run_carnarvon.py
r5755 r5790 1 """Script for running tsunami inundation scenario for Dampier, WA, Australia. 2 3 Source data such as elevation and boundary data is assumed to be available in 4 directories specified by project.py 5 The output sww file is stored in project.output_run_time_dir 1 """Script for running a tsunami inundation scenario for carnarvon, WA, Australia. 6 2 7 3 The scenario is defined by a triangular mesh created from project.polygon, 8 the elevation data and a simulated tsunami generated with URS code. 9 10 Ole Nielsen and Duncan Gray, GA - 2005 and Jane Sexton, Nick Bartzis, GA - 2006 4 the elevation data is compiled into a pts file through build_carnarvon.py 5 and a simulated tsunami is generated through an sts file from build_boundary.py. 6 7 Input: sts file (build_boundary.py for respective event) 8 pts file (build_carnarvon.py) 9 information from project file 10 Outputs: sww file stored in project.output_run_time_dir 11 The export_results_all.py and get_timeseries.py is reliant 12 on the outputs of this script 13 14 Ole Nielsen and Duncan Gray, GA - 2005, Jane Sexton, Nick Bartzis, GA - 2006 15 Ole Nielsen, Jane Sexton and Kristy Van Putten - 2008 11 16 """ 12 17 … … 32 37 from Numeric import allclose 33 38 from anuga.shallow_water.data_manager import export_grid, create_sts_boundary 34 35 39 from anuga.pmesh.mesh_interface import create_mesh_from_regions 36 40 from anuga.shallow_water.data_manager import start_screen_catcher, copy_code_files,store_parameters 37 #from anuga_parallel.parallel_api import distribute, numprocs, myid, barrier38 41 from anuga_parallel.parallel_abstraction import get_processor_name 39 42 from anuga.caching import myhash … … 42 45 from anuga.utilities.polygon import read_polygon, plot_polygons, polygon_area, is_inside_polygon 43 46 from anuga.geospatial_data.geospatial_data import find_optimal_smoothing_parameter 44 47 from polygon import Polygon_function 48 45 49 # Application specific imports 46 import project 50 import project # Definition of file names and polygons 47 51 numprocs = 1 48 52 myid = 0 … … 50 54 def run_model(**kwargs): 51 55 52 53 56 #------------------------------------------------------------------------------ 54 57 # Copy scripts to time stamped output directory and capture screen … … 58 61 59 62 #copy script must be before screen_catcher 60 #print kwargs61 63 62 64 print 'output_dir',kwargs['output_dir'] 63 if myid == 0: 64 copy_code_files(kwargs['output_dir'],__file__, 65 dirname(project.__file__)+sep+ project.__name__+'.py' ) 66 67 store_parameters(**kwargs) 68 69 # barrier() 65 66 copy_code_files(kwargs['output_dir'],__file__, 67 dirname(project.__file__)+sep+ project.__name__+'.py' ) 68 69 store_parameters(**kwargs) 70 70 71 71 start_screen_catcher(kwargs['output_dir'], myid, numprocs) 72 72 73 73 print "Processor Name:",get_processor_name() 74 75 74 76 75 #----------------------------------------------------------------------- … … 79 78 80 79 # Read in boundary from ordered sts file 81 urs_bounding_polygon=create_sts_boundary(os.path.join(project.boundaries_dir ,project.scenario_name))80 urs_bounding_polygon=create_sts_boundary(os.path.join(project.boundaries_dir_event,project.scenario_name)) 82 81 83 82 # Reading the landward defined points, this incorporates the original clipping 84 83 # polygon minus the 100m contour 85 landward_bounding_polygon = read_polygon(project. boundaries_dir+'landward_bounding_polygon.txt')84 landward_bounding_polygon = read_polygon(project.landward_dir) 86 85 87 86 # Combine sts polyline with landward points … … 90 89 # counting segments 91 90 N = len(urs_bounding_polygon)-1 92 boundary_tags={'back': [N+1,N+2,N+3], 'side': [N,N+4],'ocean': range(N)} 93 94 91 92 # boundary tags refer to project.landward 4 points equals 5 segments start at N 93 boundary_tags={'back': [N+1,N+2,N+3], 'side': [N,N+4],'ocean': range(N)} 94 95 95 #-------------------------------------------------------------------------- 96 # Create the triangular mesh based on overall clipping polygon with a 97 # tagged 96 # Create the triangular mesh based on overall clipping polygon with a tagged 98 97 # boundary and interior regions defined in project.py along with 99 98 # resolutions (maximal area of per triangle) for each polygon 100 99 #-------------------------------------------------------------------------- 101 100 102 # IMPORTANT don't cache create_mesh_from_region and Domain(mesh....) as it101 # IMPORTANT don't cache create_mesh_from_region and Domain(mesh....) as it 103 102 # causes problems with the ability to cache set quantity which takes alot of times 104 if myid == 0: 105 106 print 'start create mesh from regions' 107 108 create_mesh_from_regions(bounding_polygon, 109 boundary_tags=boundary_tags, 110 maximum_triangle_area=project.res_poly_all, 111 interior_regions=project.interior_regions, 112 filename=project.meshes_dir_name+'.msh', 113 use_cache=True, 114 verbose=True) 115 # barrier() 116 117 ## covariance_value,alpha = find_optimal_smoothing_parameter (data_file= kwargs['elevation_file'], 118 ## alpha_list=[0.001, 0.01, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5], 119 ## mesh_file = project.meshes_dir_name+'.msh') 120 ## print 'optimal alpha', covariance_value,alpha 121 103 104 print 'start create mesh from regions' 105 106 create_mesh_from_regions(bounding_polygon, 107 boundary_tags=boundary_tags, 108 maximum_triangle_area=project.res_poly_all, 109 interior_regions=project.interior_regions, 110 filename=project.meshes_dir_name, 111 use_cache=True, 112 verbose=True) 113 122 114 #------------------------------------------------------------------------- 123 115 # Setup computational domain … … 125 117 print 'Setup computational domain' 126 118 127 domain = Domain(project.meshes_dir_name +'.msh', use_cache=False, verbose=True)119 domain = Domain(project.meshes_dir_name, use_cache=False, verbose=True) 128 120 print 'memory usage before del domain',mem_usage() 129 121 … … 137 129 # Setup initial conditions 138 130 #------------------------------------------------------------------------- 139 if myid == 0: 140 141 print 'Setup initial conditions' 142 143 from polygon import Polygon_function 144 #following sets the stage/water to be offcoast only 145 IC = Polygon_function( [(project.poly_mainland, 0)], default = kwargs['tide'], 146 geo_reference = domain.geo_reference) 147 domain.set_quantity('stage', IC) 148 #domain.set_quantity('stage',kwargs['tide'] ) 149 domain.set_quantity('friction', kwargs['friction']) 150 151 print 'Start Set quantity',kwargs['elevation_file'] 152 153 domain.set_quantity('elevation', 154 filename = kwargs['elevation_file'], 155 use_cache = False, 156 verbose = True, 157 alpha = kwargs['alpha']) 158 print 'Finished Set quantity' 159 #barrier() 160 131 print 'Setup initial conditions' 132 133 # sets the initial stage in the offcoast region only 134 IC = Polygon_function( [(project.poly_mainland, 0),(project.poly_island1, 0) 135 ,(project.poly_island2, 0)], default = kwargs['tide'], 136 geo_reference = domain.geo_reference) 137 domain.set_quantity('stage', IC) 138 #domain.set_quantity('stage',kwargs['tide'] ) 139 domain.set_quantity('friction', kwargs['friction']) 140 141 print 'Start Set quantity',kwargs['elevation_file'] 142 143 domain.set_quantity('elevation', 144 filename = kwargs['elevation_file'], 145 use_cache = False, 146 verbose = True, 147 alpha = kwargs['alpha']) 148 print 'Finished Set quantity' 149 150 ## #------------------------------------------------------ 151 ## # Distribute domain to implement parallelism !!! 161 152 ## #------------------------------------------------------ 162 ## # Create x,y,z file of mesh vertex!!!163 ## #------------------------------------------------------164 ## coord = domain.get_vertex_coordinates()165 ## depth = domain.get_quantity('elevation')166 ##167 ## # Write vertex coordinates to file168 ## filename=project.vertex_filename169 ## fid=open(filename,'w')170 ## fid.write('x (m), y (m), z(m)\n')171 ## for i in range(len(coord)):172 ## pt=coord[i]173 ## x=pt[0]174 ## y=pt[1]175 ## z=depth[i]176 ## fid.write('%.6f,%.6f,%.6f\n' %(x, y, z))177 153 ## 178 179 #------------------------------------------------------ 180 # Distribute domain to implement parallelism !!! 181 #------------------------------------------------------ 182 183 if numprocs > 1: 184 domain=distribute(domain) 154 ## if numprocs > 1: 155 ## domain=distribute(domain) 185 156 186 157 #------------------------------------------------------ … … 188 159 #------------------------------------------------------ 189 160 print 'domain id', id(domain) 190 domain.set_name(kwargs[' aa_scenario_name'])161 domain.set_name(kwargs['scenario_name']) 191 162 domain.set_datadir(kwargs['output_dir']) 192 domain.set_default_order(2) # Apply second order scheme193 domain.set_minimum_storable_height(0.01) # Don't store anything less than 1cm163 domain.set_default_order(2) # Apply second order scheme 164 domain.set_minimum_storable_height(0.01) # Don't store anything less than 1cm 194 165 domain.set_store_vertices_uniquely(False) 195 166 domain.set_quantities_to_be_stored(['stage', 'xmomentum', 'ymomentum']) … … 203 174 print 'domain id', id(domain) 204 175 205 boundary_urs_out=project.boundaries_dir_ name176 boundary_urs_out=project.boundaries_dir_event + sep + project.scenario_name 206 177 207 178 Br = Reflective_boundary(domain) … … 235 206 domain.write_boundary_statistics(tags = 'ocean') 236 207 208 # these outputs should be checked with the resultant inundation map 237 209 x, y = domain.get_maximum_inundation_location() 238 210 q = domain.get_maximum_inundation_elevation() 239 240 211 print 'Maximum runup observed at (%.2f, %.2f) with elevation %.2f' %(x,y,q) 241 212 242 print ' Thattook %.2f seconds' %(time.time()-t0)213 print 'Simulation took %.2f seconds' %(time.time()-t0) 243 214 244 215 #kwargs 'completed' must be added to write the final parameters to file 245 216 kwargs['completed']=str(time.time()-t0) 246 247 if myid==0: 248 store_parameters(**kwargs) 249 # barrier 250 217 218 store_parameters(**kwargs) 219 251 220 print 'memory usage before del domain1',mem_usage() 252 221 … … 256 225 257 226 kwargs={} 258 kwargs['est_num_trigs']=project.trigs_min259 kwargs['num_cpu']=numprocs260 kwargs['host']=project.host261 kwargs['res_factor']=project.res_factor262 kwargs['starttime']=project.starttime263 kwargs['yieldstep']=project.yieldstep264 227 kwargs['finaltime']=project.finaltime 265 266 228 kwargs['output_dir']=project.output_run_time_dir 267 kwargs['elevation_file']=project.combined_dir_name+'.txt' 268 kwargs['boundary_file']=project.boundaries_in_dir_name + '.sww' 269 kwargs['file_name']=project.home+'detail.csv' 270 kwargs['aa_scenario_name']=project.scenario_name 271 kwargs['ab_time']=project.time 272 kwargs['res_factor']= project.res_factor 229 kwargs['elevation_file']=project.combined_dir_name+'.pts' 230 kwargs['scenario_name']=project.scenario_name 273 231 kwargs['tide']=project.tide 274 kwargs['user']=project.user275 232 kwargs['alpha'] = project.alpha 276 233 kwargs['friction']=project.friction 277 kwargs['time_thinning'] = project.time_thinning 278 kwargs['dir_comment']=project.dir_comment 279 kwargs['export_cellsize']=project.export_cellsize 280 281 234 #kwargs['num_cpu']=numprocs 235 #kwargs['host']=project.host 236 #kwargs['starttime']=project.starttime 237 #kwargs['yieldstep']=project.yieldstep 238 #kwargs['user']=project.user 239 #kwargs['time_thinning'] = project.time_thinning 240 282 241 run_model(**kwargs) 283 242 284 #barrier243
Note: See TracChangeset
for help on using the changeset viewer.