source: anuga_core/source/anuga/config.py @ 6106

Last change on this file since 6106 was 6106, checked in by ole, 15 years ago

Got test for large NetCDF support in config.py to work on Windows as well - however, Win shows an error dialog that needs a click.
Otherwise it works fine. Someone please tell us how you can stop Windows doing that!

File size: 8.5 KB
Line 
1"""Module where global ANUGA model parameters and default values are set
2"""
3
4import os
5import sys
6
7################################################################################
8# Numerical constants
9################################################################################
10
11epsilon = 1.0e-12                    # Smallest number - used for safe division
12max_float = 1.0e36                   # Largest number - used to initialise
13                                     # (max, min) ranges
14default_smoothing_parameter = 0.001  # Default alpha for penalised
15                                     # least squares fitting
16single_precision = 1.0e-6            # Smallest single precision number
17velocity_protection = 1.0e-6                                     
18
19################################################################################
20# Standard filenames, directories and system parameters used by ANUGA
21################################################################################
22
23pmesh_filename = '.\\pmesh'
24version_filename = 'stored_version_info.py'
25default_datadir = '.'
26time_format = '%d/%m/%y %H:%M:%S'
27umask = 002  # Controls file and directory permission created by anuga
28default_boundary_tag = 'exterior' 
29
30# Major revision number for use with create_distribution
31# and update_anuga_user_guide
32major_revision = '1.0beta'
33
34################################################################################
35# Physical constants
36################################################################################
37
38manning = 0.03  # Manning's friction coefficient
39#g = 9.80665    # Gravity - FIXME reinstate this and fix unit tests.
40g = 9.8
41#g(phi) = 9780313 * (1 + 0.0053024 sin(phi)**2 - 0.000 0059 sin(2*phi)**2) micro m/s**2, where phi is the latitude
42#The 'official' average is 9.80665
43
44eta_w = 3.0e-3 # Wind stress coefficient
45rho_a = 1.2e-3 # Atmospheric density
46rho_w = 1023   # Fluid density [kg/m^3] (rho_w = 1023 for salt water)
47
48################################################################################
49# Limiters - used with linear reconstruction of vertex
50# values from centroid values
51################################################################################
52
53# Betas [0;1] control the allowed steepness of gradient for second order
54# extrapolations. Values of 1 allow the steepes gradients while
55# lower values are more conservative. Values of 0 correspond to
56# 1'st order extrapolations.
57#
58
59# There are separate betas for the w, uh, and vh limiters
60# I think these are better SR but they conflict with the unit tests!
61beta_w      = 1.0
62beta_w_dry  = 0.2
63beta_uh     = 1.0
64beta_uh_dry = 0.2
65beta_vh     = 1.0
66beta_vh_dry = 0.2
67
68# Alpha_balance controls how limiters are balanced between deep and shallow.
69# A large value will favour the deep water limiters, allowing the a closer hug
70# to the coastline.  This will minimise 'creep' but at the same time cause
71# smaller time steps
72# Range:
73alpha_balance = 2.0 
74
75# Flag use of new limiters.
76# tight_slope_limiters = 0 means use old limiters (e.g. for some tests)
77# tight_slope_limiters = 1 means use new limiters that hug the bathymetry closer
78tight_slope_limiters = True
79
80# Use centroid velocities to reconstruct momentum at vertices in
81# very shallow water
82# This option has a first order flavour to it, but we still have second order
83# reconstruction of stage and this option only applies in
84# balance_deep_and_shallow when
85# alpha < 1 so in deeper water the full second order scheme is used.
86#
87# This option is good with tight_slope_limiters, especially for large domains.
88use_centroid_velocities = True
89       
90# FIXME (Ole) Maybe get rid of order altogether and use beta_w
91# ... and isn't it about time we make the default 2?
92default_order = 1
93
94################################################################################
95# Timestepping
96################################################################################
97
98CFL = 1.0  # CFL condition assigned to domain.CFL - controls timestep size
99     
100# Choose type of timestepping,
101#timestepping_method = 'rk2'   # 2nd Order TVD scheme
102timestepping_method = 'euler' # 1st order euler
103
104# rk2 is a little more stable than euler, so rk2 timestepping
105# can deal with a larger beta when slope limiting the reconstructed
106# solution. The large beta is needed if solving problems sensitive
107# to numerical diffusion, like a small forced wave in an ocean
108beta_euler = 1.0
109beta_rk2   = 1.6
110
111# Option to search for signatures where isolated triangles are
112# responsible for a small global timestep.
113# Treating these by limiting their momenta may help speed up the
114# overall computation.
115# This facility is experimental.
116# protect_against_isolated_degenerate_timesteps = False
117protect_against_isolated_degenerate_timesteps = False
118
119min_timestep = 1.0e-6 # Minimal timestep accepted in ANUGA
120max_timestep = 1.0e+3
121max_smallsteps = 50   # Max number of degenerate steps allowed b4
122                      # trying first order
123
124# Perhaps minimal timestep could be based on the geometry as follows:
125# Define maximal possible speed in open water v_max, e.g. 500m/s (soundspeed?)
126# Then work out minimal internal distance in mesh r_min and set
127# min_timestep = r_min/v_max
128#
129# Max speeds are calculated in the flux function as
130#
131# lambda = v +/- sqrt(gh)
132#
133# so with 500 m/s, h ~ 500^2/g = 2500 m well out of the domain of the
134# shallow water wave equation
135#
136# The actual soundspeed can be as high as 1530m/s
137# (see http://staff.washington.edu/aganse/public.projects/clustering/clustering.html),
138# but that would only happen with h>225000m in this equation. Why ?
139# The maximal speed we specify is really related to the max speed
140# of surface pertubation
141#
142# v_max = 100 #For use in domain_ext.c
143# sound_speed = 500
144
145################################################################################
146# Ranges specific to the shallow water wave equation
147# These control maximal and minimal values of quantities
148################################################################################
149
150# Water depth below which it is considered to be 0 in the model
151minimum_allowed_height = 1.0e-3 
152
153# Water depth below which it is *stored* as 0
154minimum_storable_height = 1.0e-5
155
156# FIXME (Ole): Redefine this parameter to control maximal speeds in general
157# and associate it with protect_against_isolated_degenerate_timesteps = True
158maximum_allowed_speed = 0.0 # Maximal particle speed of water
159#maximum_allowed_speed = 1.0 # Maximal particle speed of water
160                             # Too large (100) creates 'flopping' water
161                             # Too small (0) creates 'creep'
162                           
163maximum_froude_number = 100.0 # To be used in limiters.
164
165################################################################################
166# Performance parameters used to invoke various optimisations
167################################################################################
168
169use_extensions = True # Use C-extensions
170use_psyco = True      # Use psyco optimisations
171
172optimise_dry_cells = True # Exclude dry and still cells from flux computation
173optimised_gradient_limiter = True # Use hardwired gradient limiter
174use_edge_limiter = False  # The edge limiter is better, but most runs have been
175                          # using vertex limiting. Validations passed with this
176                          # one True 9th May 2008, but many unit tests need
177                          # backward compatibility flag set FIXME(Ole).
178
179points_file_block_line_size = 500 # Number of lines read in from a points file
180                                  # when blocking
181
182################################################################################
183# Dynamically-defined constants.
184################################################################################
185
186# Determine if we can read/write large NetCDF files
187
188netcdf_mode_w = 'w'
189netcdf_mode_a = 'a'
190netcdf_mode_r = 'r'
191
192# Code to set the write mode depending on
193# whether Scientific.IO supports large NetCDF files
194s = """from Scientific.IO.NetCDF import NetCDFFile; fid = NetCDFFile('tmpfilenamexx', 'wl')"""
195
196# Need to run in a separate process due an
197# error with older versions of Scientific.IO
198if sys.platform == 'win32':
199    null = 'NUL'
200else:
201    null = '/dev/null'
202cmd = 'python -c "%s" 2> %s' % (s, null)
203err = os.system(cmd)
204#print 'OK, err =', err
205
206if err != 0:
207    # The Python script s failed e.g. with a segfault
208    # which means that large file support is
209    # definitely not supported
210    pass
211else:   
212    # Try the import within this process
213    try:
214        exec(s)
215    except IOError:
216        # Large file support is not supported   
217        pass
218    else:
219        # Set the default mode to large file support
220        netcdf_mode_w = 'wl'
Note: See TracBrowser for help on using the repository browser.