source: anuga_validation/performance_tests/okushiri/run_okushiri_profile.py @ 4685

Last change on this file since 4685 was 4685, checked in by ole, 17 years ago

Implemented optimisation excluding dry cells from flux calculation.
All tests pass and the script run_okushiri_profile.py reports an improvement
in compute_fluxes from 11.25s to 8.58s or 24% faster.
The overall computation was about 40s, so this optimisation improved the
total running time for the problem in question by 7%.

This partially addresses ticket:135

File size: 3.0 KB
Line 
1"""Validation of the AnuGA implementation of the shallow water wave equation.
2
3This script sets up Okushiri Island benchmark as published at the
4
5THE THIRD INTERNATIONAL WORKSHOP ON LONG-WAVE RUNUP MODELS
6June 17-18 2004
7Wrigley Marine Science Center
8Catalina Island, California
9http://www.cee.cornell.edu/longwave/
10
11
12The validation data was downloaded and made available in this directory
13for convenience but the original data is available at
14http://www.cee.cornell.edu/longwave/index.cfm?page=benchmark&problem=2
15where a detailed description of the problem is also available.
16
17
18Run create_okushiri.py to process the boundary condition and build a the
19mesh before running this script.
20
21"""
22
23# Module imports
24from anuga.shallow_water import Domain
25from anuga.shallow_water import Reflective_boundary
26from anuga.shallow_water import Transmissive_Momentum_Set_Stage_boundary
27from anuga.abstract_2d_finite_volumes.util import file_function
28
29import project
30
31
32#-------------------------
33# Create Domain from mesh
34#-------------------------
35domain = Domain(project.mesh_filename, use_cache=True, verbose=True)
36print domain.statistics()
37
38
39#-------------------------
40# Initial Conditions
41#-------------------------
42domain.set_quantity('friction', 0.0)
43domain.set_quantity('stage', 0.0)
44domain.set_quantity('elevation',
45                    filename=project.bathymetry_filename,
46                    alpha=0.02,                   
47                    verbose=True,
48                    use_cache=True)
49
50
51#-------------------------
52# Set simulation parameters
53#-------------------------
54domain.set_name(project.output_filename)  # Name of output sww file
55domain.set_default_order(2)               # Apply second order scheme
56domain.set_all_limiters(0.9)              # Max second order scheme (old lim)
57domain.set_minimum_storable_height(0.001) # Don't store w < 0.001m
58domain.set_maximum_allowed_speed(0.1)     # Allow a little runoff (0.1 is OK)
59domain.set_store_vertices_uniquely(False)
60#domain.set_quantities_to_be_stored(None)
61
62# New slope limiter and first order h-limiter
63# (this in planned to be the default!)
64domain.beta_h = 0.0
65domain.tight_slope_limiters = 1 # Run time invariant in this case
66
67#-------------------------
68# Boundary Conditions
69#-------------------------
70
71# Create boundary function from timeseries provided in file
72function = file_function(project.boundary_filename,
73                         domain, verbose=True)
74
75# Create and assign boundary objects
76Bts = Transmissive_Momentum_Set_Stage_boundary(domain, function)
77Br = Reflective_boundary(domain)
78domain.set_boundary({'wave': Bts, 'wall': Br})
79
80# Select optimisation
81domain.optimise_dry_cells = True
82
83#-------------------------
84# Evolve through time
85#-------------------------
86import time
87t0 = time.time()
88
89s = 'for t in domain.evolve(yieldstep = 0.05, finaltime = 2): domain.write_time()'
90
91import profile, pstats
92FN = 'profile.dat'
93
94profile.run(s, FN)
95
96print 'That took %.2f seconds' %(time.time()-t0)
97
98S = pstats.Stats(FN)
99#S.sort_stats('time').print_stats(20)
100s = S.sort_stats('cumulative').print_stats(30)
101
102print s
103
Note: See TracBrowser for help on using the repository browser.