source: anuga_core/source/anuga/examples/island.py @ 3876

Last change on this file since 3876 was 3876, checked in by steve, 17 years ago

Added parameter alpha_balance to config.py to deal with large jumps in bed

File size: 4.1 KB
RevLine 
[2638]1"""Example of shallow water wave equation.
2
3Island surrounded by water.
4This example investigates onshore 'creep'
5
6"""
7
8
9#------------------------------------------------------------------------------
10# Import necessary modules
11#------------------------------------------------------------------------------
12
13# Standard modules
14from math import exp
15
16# Application specific imports
[3560]17from anuga.abstract_2d_finite_volumes.mesh_factory import rectangular
[3563]18from anuga.shallow_water import Domain, Reflective_boundary, Dirichlet_boundary
[3514]19from anuga.pmesh.mesh_interface import create_mesh_from_regions
20from anuga.utilities.polygon import Polygon_function, read_polygon
[2638]21
[3560]22from anuga.abstract_2d_finite_volumes.quantity import Quantity
[2638]23from Numeric import allclose
24
25#------------------------------------------------------------------------------
26# Setup computational domain
27#------------------------------------------------------------------------------
28
29#Create basic mesh
30create_mesh_from_regions( [[0,0], [100,0], [100,100], [0,100]],
31                          boundary_tags = {'bottom': [0],
32                                           'right': [1],
33                                           'top': [2],
34                                           'left': [3]},
[3719]35                          maximum_triangle_area = 1.0,
[2649]36                          filename = 'island.msh' ,
[3719]37                          interior_regions=[ ([[50,25], [70,25], [70,75], [50,75]], 1.0)]
[3876]38                          #interior_holes=[[[50,25], [70,25], [70,75], [50,75]]],
[2638]39                          )
40
41
42
43#Create shallow water domain
44domain = Domain(mesh_filename = 'island.msh')
45domain.smooth = False
46domain.set_name('island')
[3876]47domain.default_order = 2
[2638]48
49
50#I tried to introduce this parameter top control the h-limiter,
51#but it doesn't remove the 'lapping water'
52#NEW (ON): I think it has been fixed (or at least reduced significantly) now
53#
54# beta_h == 1.0 means that the largest gradients (on h) are allowed
55# beta_h == 0.0 means that constant (1st order) gradients are introduced
56# on h. This is equivalent to the constant depth used previously.
[3876]57domain.beta_h     = 0.5
58domain.beta_w_dry = 0.0
59domain.alpha_balance = 10.0
60domain.minimum_allowed_height = 1.0e-4 
61domain.maximum_allowed_speed = 100.0 
62domain.minimum_storable_height = 1.0e-4 
63domain.visualise_wet_dry_cutoff = 5.0e-2
[2638]64
65#------------------------------------------------------------------------------
66# Setup initial conditions
67#------------------------------------------------------------------------------
68
69def island(x, y):
70    z = 0*x
71    for i in range(len(x)):
[3876]72        z[i] = 20*exp( -((x[i]-50)**2 + (y[i]-50)**2)/100 )
[2638]73
74        #z[i] += 0.5*exp( -((x[i]-10)**2 + (y[i]-10)**2)/50 )
75
76    return z
77
78def slump(x, y):
79    z = 0*x
80    for i in range(len(x)):
81        z[i] -= 0.7*exp( -((x[i]-10)**2 + (y[i]-10)**2)/200 )
82
83    return z
84
[3876]85stage_value = 15.0
[2648]86#domain.set_quantity('friction', 0.1)  #Honky dory
[3876]87domain.set_quantity('friction', 0.01)     #Creep
[2638]88domain.set_quantity('elevation', island)
[3876]89domain.set_quantity('stage', stage_value)
[2648]90domain.max_timestep = 0.01
[2638]91
92
93#------------------------------------------------------------------------------
94# Setup boundary conditions (all reflective)
95#------------------------------------------------------------------------------
96
97Br = Reflective_boundary(domain)
[3876]98Bd = Dirichlet_boundary([stage_value, 0, 0])
[2638]99
[3876]100domain.set_boundary({'left': Bd, 'right': Bd, 'top': Bd, 'bottom': Bd, 'exterior': Br})
[2638]101domain.check_integrity()
102
[3719]103domain.initialise_visualiser()
[2638]104#------------------------------------------------------------------------------
105# Evolve system through time
106#------------------------------------------------------------------------------
107
108import time
109for t in domain.evolve(yieldstep = 1, finaltime = 100):
110    domain.write_time()
111    #if allclose(t, 100):
112    #    Q = domain.get_quantity('stage')
113    #    Q_s = Quantity(domain)
114    #    Q_s.set_values(slump)
115    #    domain.set_quantity('stage', Q + Q_s)
116    #print '    Volume: ', domain.get_quantity('stage').get_integral()
117
118print 'Done'
Note: See TracBrowser for help on using the repository browser.