Changeset 4544
- Timestamp:
- Jun 15, 2007, 4:47:03 PM (17 years ago)
- Location:
- anuga_work/production
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_work/production/broome_2006/project_urs.py
r4542 r4544 41 41 finaltime=25000 42 42 setup='final' 43 extra='exmouth'43 source='dampier' 44 44 45 45 if setup =='trial': … … 59 59 yieldstep=60 60 60 61 dir_comment='_'+setup+'_'+str(tide)+'_'+str( extra)+'_'+str(user)61 dir_comment='_'+setup+'_'+str(tide)+'_'+str(source)+'_'+str(user) 62 62 63 63 # onshore data from 30m DTED level 2 … … 105 105 tide_dir = anuga_dir+'tide_data'+sep 106 106 107 #boundaries locations 108 #boundaries_name = 'broome_3854_17042007' #dampier 109 boundaries_name = 'broome_3103_18052007' #exmouth 110 #boundaries_name = 'broome_3859_16052007' #onslow 107 if source =='dampier': 108 boundaries_name = 'broome_3854_17042007' #Dampier gun 109 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'dampier'+sep+'1_10000'+sep 111 110 112 #boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'1_10000'+sep 113 #boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'dampier'+sep+'1_10000'+sep 114 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'exmouth'+sep+'1_10000'+sep 115 #boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'onslow_hedland_broome'+sep+'1_10000'+sep 111 if source=='onslow': 112 boundaries_name = 'broome_3859_16052007' #onslow_hedland_broome gun 113 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'onslow_hedland_broome'+sep+'1_10000'+sep 114 115 if source=='exmouth': 116 boundaries_name = 'broome_3103_18052007' #exmouth gun 117 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'exmouth'+sep+'1_10000'+sep 118 116 119 boundaries_in_dir_name = boundaries_in_dir + boundaries_name 117 120 boundaries_dir = anuga_dir+'boundaries'+sep … … 120 123 #output locations 121 124 output_dir = anuga_dir+'outputs'+sep 122 output_build_time_dir = output_dir+build_time+ sep125 output_build_time_dir = output_dir+build_time+'_'+source+sep 123 126 output_run_time_dir = output_dir +run_time+dir_comment+sep 124 output_run_time_dir = output_dir +'20070605_234438_run_final_0_exmouth_nbartzis'+sep125 #output_run_time_dir_name = output_run_time_dir + scenario_name #Used by post processing127 #output_run_time_dir = output_dir +'20070605_234438_run_final_0_exmouth_nbartzis'+sep 128 output_run_time_dir_name = output_run_time_dir + scenario_name #Used by post processing 126 129 127 130 #gauges … … 155 158 res_1 = 5000*res_factor 156 159 157 poly_2 = read_polygon(polygons_dir+'broome_south_coast_inside_extent.csv') 160 #poly_2 = read_polygon(polygons_dir+'broome_south_coast_inside_extent.csv') 161 poly_2 = read_polygon(polygons_dir+'broome_south_coast_not_town_pts_new.csv') 158 162 res_2 = 5000*res_factor 159 163 160 poly_3 = read_polygon(polygons_dir+'Broome_town_pts.csv') 164 #poly_3 = read_polygon(polygons_dir+'Broome_town_pts.csv') 165 poly_3 = read_polygon(polygons_dir+'broome_town_new_pts.csv') 161 166 res_3 = 2000*res_factor 162 167 163 poly_4 = read_polygon(polygons_dir+'Broome_inner_town_pts.csv') 168 #poly_4 = read_polygon(polygons_dir+'Broome_inner_town_pts.csv') 169 poly_4 = read_polygon(polygons_dir+'broome_inner_town_pts.csv') 164 170 res_4 = 500*res_factor 165 171 -
anuga_work/production/broome_2006/run_broome_urs.py
r4542 r4544 44 44 def run_model(**kwargs): 45 45 46 tide = kwargs['tide']47 alpha = kwargs['alpha']48 friction = kwargs['friction']49 time_thinning = kwargs['time_thinning']50 scenario_name = kwargs['aa_scenario_name']46 # tide = kwargs['tide'] 47 # alpha = kwargs['alpha'] 48 # friction = kwargs['friction'] 49 # time_thinning = kwargs['time_thinning'] 50 # scenario_name = kwargs['aa_scenario_name'] 51 51 52 52 … … 58 58 59 59 #copy script must be before screen_catcher 60 print 'tide', tide60 print 'tide',kwargs['tide'] 61 61 kwargs['est_num_trigs']=project_urs.trigs_min 62 62 kwargs['num_cpu']=numprocs … … 141 141 from polygon import Polygon_function 142 142 #following sets the stage/water to be offcoast only 143 IC = Polygon_function( [(project_urs.poly_mainland, -1.0)], default = tide,143 IC = Polygon_function( [(project_urs.poly_mainland, -1.0)], default = kwargs['tide'], 144 144 geo_reference = domain.geo_reference) 145 145 domain.set_quantity('stage', IC) 146 domain.set_quantity('friction', friction)146 domain.set_quantity('friction', kwargs['friction']) 147 147 148 148 print 'Start Set quantity' … … 152 152 use_cache = True, 153 153 verbose = True, 154 alpha = alpha)154 alpha = kwargs['alpha']) 155 155 print 'Finished Set quantity' 156 156 barrier() … … 168 168 #------------------------------------------------------ 169 169 print 'domain id', id(domain) 170 domain.set_name( scenario_name)170 domain.set_name(kwargs['aa_scenario_name']) 171 171 domain.set_datadir(kwargs['output_dir']) 172 172 domain.set_default_order(2) # Apply second order scheme … … 187 187 188 188 Bf = Field_boundary(kwargs['boundary_file'], 189 domain, time_thinning= time_thinning, mean_stage=tide,189 domain, time_thinning=kwargs['time_thinning'], mean_stage=kwargs['tide'], 190 190 use_cache=True, verbose=True) 191 191 … … 195 195 196 196 Br = Reflective_boundary(domain) 197 Bd = Dirichlet_boundary([ tide,0,0])197 Bd = Dirichlet_boundary([kwargs['tide'],0,0]) 198 198 199 199 print'set_boundary' -
anuga_work/production/dampier_2006/build_dampier.py
r4357 r4544 36 36 37 37 # Application specific imports 38 import project # Definition of file names and polygons38 import project_urs # Definition of file names and polygons 39 39 40 40 #------------------------------------------------------------------------------ … … 42 42 # output to file 43 43 #------------------------------------------------------------------------------ 44 copy_code_files(project .output_build_time_dir,__file__,45 dirname(project .__file__)+sep+ project.__name__+'.py' )44 copy_code_files(project_urs.output_build_time_dir,__file__, 45 dirname(project_urs.__file__)+sep+ project_urs.__name__+'.py' ) 46 46 47 start_screen_catcher(project .output_build_time_dir)47 start_screen_catcher(project_urs.output_build_time_dir) 48 48 print "Processor Name:",get_processor_name() 49 49 50 print 'USER: ', project .user50 print 'USER: ', project_urs.user 51 51 52 52 #------------------------------------------------------------------------------- … … 57 57 # Fine pts file to be clipped to area of interest 58 58 #------------------------------------------------------------------------------- 59 print"project .combined_dir_name",project.combined_dir_name59 print"project_urs.combined_dir_name",project_urs.combined_dir_name 60 60 61 61 # topography directory filenames 62 onshore_in_dir_name = project .onshore_in_dir_name63 coast_in_dir_name = project .coast_in_dir_name64 offshore_in_dir_name = project .offshore_in_dir_name65 offshore1_in_dir_name = project .offshore1_in_dir_name66 offshore2_in_dir_name = project .offshore2_in_dir_name62 onshore_in_dir_name = project_urs.onshore_in_dir_name 63 coast_in_dir_name = project_urs.coast_in_dir_name 64 offshore_in_dir_name = project_urs.offshore_in_dir_name 65 offshore1_in_dir_name = project_urs.offshore1_in_dir_name 66 offshore2_in_dir_name = project_urs.offshore2_in_dir_name 67 67 68 onshore_dir_name = project .onshore_dir_name69 coast_dir_name = project .coast_dir_name70 offshore_dir_name = project .offshore_dir_name71 offshore1_dir_name = project .offshore1_dir_name72 offshore2_dir_name = project .offshore2_dir_name68 onshore_dir_name = project_urs.onshore_dir_name 69 coast_dir_name = project_urs.coast_dir_name 70 offshore_dir_name = project_urs.offshore_dir_name 71 offshore1_dir_name = project_urs.offshore1_dir_name 72 offshore2_dir_name = project_urs.offshore2_dir_name 73 73 ''' 74 74 # creates DEM from asc data … … 113 113 114 114 print'clip combined geospatial object by bounding polygon' 115 G_clipped = G.clip(project .poly_all)115 G_clipped = G.clip(project_urs.poly_all) 116 116 #FIXME: add a clip function to pts 117 117 #print'shape of clipped data', G_clipped.get_data_points().shape 118 118 119 119 print'export combined DEM file' 120 if access(project .topographies_dir,F_OK) == 0:121 mkdir (project .topographies_dir)122 G_clipped.export_points_file(project .combined_dir_name + '.pts')123 #G_clipped.export_points_file(project .combined_dir_name + '.txt')120 if access(project_urs.topographies_dir,F_OK) == 0: 121 mkdir (project_urs.topographies_dir) 122 G_clipped.export_points_file(project_urs.combined_dir_name + '.pts') 123 #G_clipped.export_points_file(project_urs.combined_dir_name + '.txt') 124 124 125 125 print'split combined data set' … … 127 127 128 128 print'export split DEM file' 129 G_small.export_points_file(project .combined_dir_name + '_small' + '.pts')130 G_other.export_points_file(project .combined_dir_name + '_other' + '.pts')129 G_small.export_points_file(project_urs.combined_dir_name + '_small' + '.pts') 130 G_other.export_points_file(project_urs.combined_dir_name + '_other' + '.pts') 131 131 132 print 'start reading:',project .combined_smaller_dir_name + '.txt'133 G = Geospatial_data(file_name = project .combined_smaller_dir_name + '.txt')132 print 'start reading:',project_urs.combined_smaller_dir_name + '.txt' 133 G = Geospatial_data(file_name = project_urs.combined_smaller_dir_name + '.txt') 134 134 print 'start split' 135 135 G_smallest, G_other = G.split(0.1,True) 136 136 137 print 'start export',project .combined_smallest_dir_name + '.txt'138 #G.export_points_file(project .combined_smaller_dir_name + '.txt')139 #G_smallest.export_points_file(project .combined_smallest_dir_name + '.txt')137 print 'start export',project_urs.combined_smallest_dir_name + '.txt' 138 #G.export_points_file(project_urs.combined_smaller_dir_name + '.txt') 139 #G_smallest.export_points_file(project_urs.combined_smallest_dir_name + '.txt') 140 140 ''' 141 141 #------------------------------------------------------------------------- 142 142 # Convert URS to SWW file for boundary conditions 143 143 #------------------------------------------------------------------------- 144 ''' 144 145 print 'starting to create boundary conditions' 145 boundaries_in_dir_name = project .boundaries_in_dir_name146 boundaries_in_dir_name = project_urs.boundaries_in_dir_name 146 147 147 148 from anuga.shallow_water.data_manager import urs2sww 148 149 149 print 'minlat=project .north_boundary, maxlat=project.south_boundary',project.north_boundary, project.south_boundary150 print 'minlon= project .west_boundary, maxlon=project.east_boundary',project.west_boundary, project.east_boundary150 print 'minlat=project_urs.north_boundary, maxlat=project_urs.south_boundary',project_urs.north_boundary, project_urs.south_boundary 151 print 'minlon= project_urs.west_boundary, maxlon=project_urs.east_boundary',project_urs.west_boundary, project_urs.east_boundary 151 152 152 153 #import sys; sys.exit() 153 154 154 #if access(project .boundaries_dir,F_OK) == 0:155 # mkdir (project .boundaries_dir)155 #if access(project_urs.boundaries_dir,F_OK) == 0: 156 # mkdir (project_urs.boundaries_dir) 156 157 157 158 from caching import cache 158 159 cache(urs2sww, 159 160 (boundaries_in_dir_name, 160 project .boundaries_dir_name+'a'),161 project_urs.boundaries_dir_name+'a'), 161 162 {'verbose': True, 162 'minlat': project .south_boundary,163 'maxlat': project .north_boundary,164 'minlon': project .west_boundary,165 'maxlon': project .east_boundary,163 'minlat': project_urs.south_boundary, 164 'maxlat': project_urs.north_boundary, 165 'minlon': project_urs.west_boundary, 166 'maxlon': project_urs.east_boundary, 166 167 'mint': 5000, 'maxt': 35000, 167 168 # 'origin': domain.geo_reference.get_origin(), 168 # 'mean_stage': project .tide,169 # 'mean_stage': project_urs.tide, 169 170 'zscale': 1, #Enhance tsunami 170 171 'fail_on_NaN': False}, 171 172 verbose = True, 172 173 ) 173 # dependencies = source_dir + project.boundary_basename + '.sww') 174 # dependencies = source_dir + project_urs.boundary_basename + '.sww') 175 ''' 176 print 'starting to create boundary conditions' 177 from anuga.shallow_water.data_manager import urs2sww, urs_ungridded2sww 178 179 print 'boundaries_in_dir_name',project_urs.boundaries_in_dir_name 180 181 urs_ungridded2sww(project_urs.boundaries_in_dir_name, project_urs.boundaries_in_dir_name, 182 verbose=True, mint=4000, maxt=35000, zscale=1) 174 183 175 184 176 185 177 186 178 -
anuga_work/production/dampier_2006/project_urs.py
r4542 r4544 25 25 26 26 #tide = -2.5 27 #tide = 0.028 tide = 2.427 tide = 0.0 28 #tide = 2.4 29 29 30 30 #Maybe will try to make project a class to allow these parameters to be passed in. … … 34 34 finaltime=25000 35 35 setup='final' 36 source=' onslow'36 source='exmouth' 37 37 38 38 if setup =='trial': … … 113 113 114 114 if source =='dampier': 115 boundaries_name = ' pt_hedland_3854_17042007' #Dampier gun115 boundaries_name = 'dampier' #Dampier gun 116 116 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'dampier'+sep+'1_10000'+sep 117 117 118 118 if source=='onslow': 119 boundaries_name = ' pt_hedland_3859_16052007' #onslow_hedland_broome gun119 boundaries_name = 'dampier_3859_16052007' #onslow_hedland_broome gun 120 120 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'onslow_hedland_broome'+sep+'1_10000'+sep 121 121 122 122 if source=='exmouth': 123 boundaries_name = ' pt_hedland_3103_18052007' #exmouth gun123 boundaries_name = 'dampier_3103_18052007' #exmouth gun 124 124 boundaries_in_dir = anuga_dir+'boundaries'+sep+'urs'+sep+'exmouth'+sep+'1_10000'+sep 125 125 -
anuga_work/production/exmouth_2006/project.py
r4542 r4544 38 38 starttime=3600 39 39 finaltime=25000 40 setup=' store'40 setup='final' 41 41 extra='dampier' 42 42 … … 157 157 158 158 159 poly_coast = read_polygon(polygons_dir+'pts_coast.csv') 159 poly_coast = read_polygon(polygons_dir+'coast_new_pts.csv') 160 #poly_coast = read_polygon(polygons_dir+'pts_coast.csv') 160 161 res_coast = 10000*res_factor 161 162 … … 163 164 #res_0 = 20000*res_factor 164 165 165 poly_coast2 = read_polygon(polygons_dir+'pts_coast2.csv') 166 poly_coast2 = read_polygon(polygons_dir+'coast2_new_pts.csv') 167 #poly_coast2 = read_polygon(polygons_dir+'pts_coast2.csv') 166 168 #res_0 = 20000*res_factor 167 169 … … 169 171 #res_0 = 20000*res_factor 170 172 171 poly_exmouth = read_polygon(polygons_dir+'pts_exmouth.csv') 173 poly_exmouth = read_polygon(polygons_dir+'exmouth_new_pts.csv') 174 #poly_exmouth = read_polygon(polygons_dir+'pts_exmouth.csv') 172 175 res_exmouth = 500*res_factor 176 177 poly_exmouth_south = read_polygon(polygons_dir+'exmouth_south_pts.csv') 178 #res_exmouth = 500*res_factor 179 180 poly_carpark1 = read_polygon(polygons_dir+'carpark1_pts.csv') 181 #res_exmouth = 500*res_factor 182 183 poly_carpark2 = read_polygon(polygons_dir+'carpark2_pts.csv') 184 #res_exmouth = 500*res_factor 185 186 poly_carpark3 = read_polygon(polygons_dir+'carpark3_pts.csv') 187 #res_exmouth = 500*res_factor 173 188 174 189 poly_nth_defence = read_polygon(polygons_dir+'pts_nth_defence.csv') 175 190 res_nth_defence = 5000*res_factor 176 191 177 poly_middle = read_polygon(polygons_dir+'pts_middle.csv') 192 poly_middle = read_polygon(polygons_dir+'middle_new_pts.csv') 193 #poly_middle = read_polygon(polygons_dir+'pts_middle.csv') 178 194 res_middle = 30000*res_factor 179 195 … … 183 199 interior_regions = [[poly_coast,res_coast],[poly_coast1,res_coast],[poly_coast2,res_coast] 184 200 ,[poly_coast3,res_coast],[poly_middle,res_middle],[poly_exmouth,res_exmouth] 185 ,[poly_nth_defence,res_nth_defence],[poly_airport,res_airport]] 201 ,[poly_exmouth_south,res_exmouth],[poly_carpark1,res_exmouth],[poly_carpark2,res_exmouth] 202 ,[poly_carpark3,res_exmouth],[poly_nth_defence,res_nth_defence],[poly_airport,res_airport]] 186 203 187 204 trigs_min = number_mesh_triangles(interior_regions, poly_all, res_poly_all) -
anuga_work/production/onslow_2006/project_urs.py
r4542 r4544 142 142 #output locations 143 143 output_dir = anuga_dir+'outputs'+sep 144 output_build_time_dir = output_dir+build_time+ sep144 output_build_time_dir = output_dir+build_time+'_'+source+sep 145 145 output_run_time_dir = output_dir +run_time+dir_comment+sep 146 #output_run_time_dir = output_dir +'200706 08_062811_run_final_1.5_exmouth_nbartzis'+sep146 #output_run_time_dir = output_dir +'20070613_034754_run_final_1.5_dampier_nbartzis'+sep 147 147 output_run_time_dir_name = output_run_time_dir + scenario_name #Used by post processing 148 148 -
anuga_work/production/onslow_2006/run_onslow_urs.py
r4542 r4544 45 45 def run_model(**kwargs): 46 46 47 scenario_name = kwargs['aa_scenario_name']47 # scenario_name = kwargs['aa_scenario_name'] 48 48 49 49 #------------------------------------------------------------------------------ … … 66 66 # kwargs['bathy_file']=project_urs.combined_small_dir_name + '.txt' 67 67 kwargs['boundary_file']=project_urs.boundaries_in_dir_name + '.sww' 68 68 ''' 69 start_screen_catcher(kwargs['output_dir'], myid, numprocs) 70 69 71 print 'output_dir',kwargs['output_dir'] 70 72 if myid == 0: … … 75 77 76 78 barrier() 77 78 start_screen_catcher(kwargs['output_dir'], myid, numprocs)79 79 80 80 print "Processor Name:",get_processor_name() … … 224 224 225 225 kwargs['completed']=str(time.time()-t0) 226 227 if myid == 0:228 store_parameters(**kwargs)226 ''' 227 # if myid == 0: 228 # store_parameters(**kwargs) 229 229 230 230 231 231 swwfile = kwargs['output_dir']+kwargs['aa_scenario_name'] 232 232 print 'swwfile',swwfile 233 ''' 233 234 export_grid(swwfile, extra_name_out = 'town', 234 235 # quantities = ['depth'], # '(xmomentum**2 + ymomentum**2)**0.5' defaults to elevation … … 246 247 datum = 'WGS84', 247 248 format = 'asc') 248 249 ''' 249 250 buildings_filename = project_urs.buildings_filename 250 251 buildings_filename_out = project_urs.buildings_filename_out -
anuga_work/production/pt_hedland_2006/project_urs.py
r4542 r4544 38 38 finaltime=25000 39 39 setup='final' 40 source=' onslow'40 source='exmouth' 41 41 42 42 if setup =='trial': -
anuga_work/production/pt_hedland_2006/run_pt_hedland_urs.py
r4542 r4544 43 43 def run_model(**kwargs): 44 44 45 tide = kwargs['tide'] 46 alpha = kwargs['alpha'] 47 friction = kwargs['friction'] 48 time_thinning = kwargs['time_thinning'] 49 scenario_name = kwargs['aa_scenario_name'] 50 51 #------------------------------------------------------------------------------ 52 # Copy scripts to time stamped output directory and capture screen 53 # output to file 54 #------------------------------------------------------------------------------ 55 56 #copy script must be before screen_catcher 57 print 'tide',tide 45 print 'tide',kwargs['tide'] 58 46 kwargs['est_num_trigs']=project_urs.trigs_min 59 47 kwargs['num_cpu']=numprocs … … 66 54 kwargs['output_dir']=project_urs.output_run_time_dir 67 55 kwargs['bathy_file']=project_urs.combined_dir_name + '.txt' 68 # kwargs['bathy_file']=project_urs.combined_small_dir_name + '.pts'69 56 kwargs['boundary_file']=project_urs.boundaries_in_dir_name + '.sww' 70 # kwargs['Completed']='' 57 58 #------------------------------------------------------------------------------ 59 # Copy scripts to time stamped output directory and capture screen 60 # output to file 61 #------------------------------------------------------------------------------ 71 62 72 63 start_screen_catcher(kwargs['output_dir'], myid, numprocs) … … 133 124 from polygon import Polygon_function 134 125 #following sets the stage/water to be offcoast only 135 IC = Polygon_function( [(project_urs.poly_mainland, -1.0)], default = tide,126 IC = Polygon_function( [(project_urs.poly_mainland, -1.0)], default = kwargs['tide'], 136 127 geo_reference = domain.geo_reference) 137 128 domain.set_quantity('stage', IC) 138 domain.set_quantity('friction', friction)129 domain.set_quantity('friction', kwargs['friction']) 139 130 140 131 print 'Start Set quantity' … … 144 135 use_cache = True, 145 136 verbose = True, 146 alpha = alpha)137 alpha = kwargs['alpha']) 147 138 print 'Finished Set quantity' 148 139 barrier() … … 159 150 #------------------------------------------------------ 160 151 print 'domain id', id(domain) 161 domain.set_name( scenario_name)152 domain.set_name(kwargs['aa_scenario_name']) 162 153 domain.set_datadir(kwargs['output_dir']) 163 154 domain.set_default_order(2) # Apply second order scheme … … 165 156 domain.set_store_vertices_uniquely(False) 166 157 domain.set_quantities_to_be_stored(['stage', 'xmomentum', 'ymomentum']) 167 domain.set_maximum_allowed_speed(0.1) # Allow a little runoff (0.1 is OK)168 print 'domain id', id(domain)169 domain.beta_h = 0170 #domain.limit2007 = 1 158 # domain.set_maximum_allowed_speed(0.1) # Allow a little runoff (0.1 is OK) 159 domain.beta_h = 0 #sets the surface of the triangle to follow the bathy 160 #domain.H0=0.01 #controls the flux limiter (limiter2007) 161 #domain.limit2007 = 1 #minimises creep 171 162 172 163 #------------------------------------------------------------------------- … … 178 169 179 170 Bf = Field_boundary(kwargs['boundary_file'], 180 domain, time_thinning= time_thinning, mean_stage=tide,171 domain, time_thinning=kwargs['time_thinning'], mean_stage=kwargs['tide'], 181 172 use_cache=True, verbose=True) 182 173 … … 186 177 187 178 Br = Reflective_boundary(domain) 188 Bd = Dirichlet_boundary([ tide,0,0])179 Bd = Dirichlet_boundary([kwargs['tide'],0,0]) 189 180 190 181 print'set_boundary'
Note: See TracChangeset
for help on using the changeset viewer.