source: trunk/anuga_core/source/anuga/config.py @ 9341

Last change on this file since 9341 was 9265, checked in by steve, 11 years ago

Moving checkpoint.py to shallow_water

File size: 10.6 KB
RevLine 
[4837]1"""Module where global ANUGA model parameters and default values are set
[4376]2"""
3
[6105]4import os
5import sys
6
[7276]7
[6086]8################################################################################
[4837]9# Numerical constants
[6086]10################################################################################
11
12epsilon = 1.0e-12                    # Smallest number - used for safe division
13max_float = 1.0e36                   # Largest number - used to initialise
14                                     # (max, min) ranges
15default_smoothing_parameter = 0.001  # Default alpha for penalised
16                                     # least squares fitting
17single_precision = 1.0e-6            # Smallest single precision number
[7055]18velocity_protection = 1.0e-6         # Used to compute velocity from momentum
19                                     # See section 7.4 on Flux limiting
20                                     # in the user manual
21                           
[5436]22
[6086]23################################################################################
24# Standard filenames, directories and system parameters used by ANUGA
25################################################################################
26
[4837]27pmesh_filename = '.\\pmesh'
28version_filename = 'stored_version_info.py'
29default_datadir = '.'
[7055]30time_format = '%d/%m/%y %H:%M:%S'    # Used with timefile2netcdf
31umask = 002  # Controls file and directory permission created by anuga (UNIX)
[4837]32default_boundary_tag = 'exterior' 
[4376]33
[4837]34# Major revision number for use with create_distribution
35# and update_anuga_user_guide
[9265]36major_revision = '1.3.1'
[4376]37
[6086]38################################################################################
39# Physical constants
40################################################################################
[4376]41
[4837]42manning = 0.03  # Manning's friction coefficient
43#g = 9.80665    # Gravity - FIXME reinstate this and fix unit tests.
[4376]44g = 9.8
[7865]45#g(phi) = 9780313 * (1 + 0.0053024 sin(phi)**2 - 0.000 0059 sin(2*phi)**2)
46# micro m/s**2, where phi is the latitude
[4376]47#The 'official' average is 9.80665
48
[6086]49eta_w = 3.0e-3 # Wind stress coefficient
50rho_a = 1.2e-3 # Atmospheric density
51rho_w = 1023   # Fluid density [kg/m^3] (rho_w = 1023 for salt water)
[4376]52
[6086]53################################################################################
[4837]54# Limiters - used with linear reconstruction of vertex
55# values from centroid values
[6086]56################################################################################
[8404]57# Note the individual beta values are set in domain.set_flow_method which also sets
58# the timestepping method
[4837]59
[8404]60beta_w = 1.0
[4768]61
[4376]62# Alpha_balance controls how limiters are balanced between deep and shallow.
[6086]63# A large value will favour the deep water limiters, allowing the a closer hug
64# to the coastline.  This will minimise 'creep' but at the same time cause
65# smaller time steps
[4376]66# Range:
67alpha_balance = 2.0 
68
69# Flag use of new limiters.
[4631]70# tight_slope_limiters = 0 means use old limiters (e.g. for some tests)
71# tight_slope_limiters = 1 means use new limiters that hug the bathymetry closer
[5181]72tight_slope_limiters = True
[4376]73
[9148]74use_edge_limiter = False    # The edge limiter is better, but most runs have been
75                            # using vertex limiting. Validations passed with this
76                            # one True 9th May 2008, but many unit tests need
77                            # backward compatibility flag set FIXME(Ole).
[8353]78
[5315]79# Use centroid velocities to reconstruct momentum at vertices in
80# very shallow water
[5313]81# This option has a first order flavour to it, but we still have second order
[5315]82# reconstruction of stage and this option only applies in
83# balance_deep_and_shallow when
[5313]84# alpha < 1 so in deeper water the full second order scheme is used.
[5290]85#
[5303]86# This option is good with tight_slope_limiters, especially for large domains.
[5313]87use_centroid_velocities = True
[5957]88       
89# FIXME (Ole) Maybe get rid of order altogether and use beta_w
[6258]90default_order = 2
[4376]91
[8308]92# Option to use velocity extrapolation instead of momentum extrapolation in the
93# routine domain.extrapolate_second_order_sw
[8402]94extrapolate_velocity_second_order=True
[8308]95
[8377]96# Option to setup compute_fluxes_method
[8538]97# Currently "original' and 'wb_1' to 'wb_3' and 'tsunami'
[8402]98compute_fluxes_method = 'wb_2'
[8377]99
[8538]100# Option to setup distribute_to_vertices_and_edges_method
101# Currently "original' and 'tsunami'
102distribute_to_vertices_and_edges_method = 'original'
103
[6086]104################################################################################
[8390]105# Friction Method
106################################################################################
107
[8406]108sloped_mannings_function = False
[8390]109
110################################################################################
[4837]111# Timestepping
[6086]112################################################################################
[4376]113
[4837]114CFL = 1.0  # CFL condition assigned to domain.CFL - controls timestep size
115     
[8404]116# Choose type of timestepping and spatial reconstruction method
[4712]117
[8404]118timestepping_method = 1
119
120# For shallow water we have a method that sets both timestepping and spatial reconstruction and
121# beta values. In this case the settings for timestepping_method will be overriden
122
[8418]123#flow_algorithm = '1_0'    # 1st order euler and conservative piecewise constant spatial reconstruction
124flow_algorithm = '1_5'  # 1st order euler and conservative piecewise linear spatial reconstruction
125#flow_algorithm = '1_75' # 1st order euler and more aggressive piecewise linear spatial reconstruction
126#flow_algorithm = '2_0'    # 2nd order TVD scheme and more aggressive piecewise linear spatial reconstruction
127#flow_algorithm = '2.5'  # 3rd order TVD scheme and more aggressive piecewise linear spatial reconstruction
[9056]128#flow_algorithm = 'tsunami' # 2nd order space and time, well balanced inc at wet-dry fronts, porosity-type alg
[9125]129#flow_algorithm = 'DE0' # 1st order time 2nd order space, discontinuous elevation, well balanced + better shallow flows than 'tsunami'
[9056]130#flow_algorithm = 'DE1' # 2nd order space and time, discontinuous elevation, well balanced + better shallow flows than 'tsunami'
[8404]131
132
133
[5162]134# rk2 is a little more stable than euler, so rk2 timestepping
135# can deal with a larger beta when slope limiting the reconstructed
136# solution. The large beta is needed if solving problems sensitive
137# to numerical diffusion, like a small forced wave in an ocean
138beta_euler = 1.0
139beta_rk2   = 1.6
140
[4677]141# Option to search for signatures where isolated triangles are
142# responsible for a small global timestep.
143# Treating these by limiting their momenta may help speed up the
144# overall computation.
145# This facility is experimental.
[4805]146# protect_against_isolated_degenerate_timesteps = False
[4677]147protect_against_isolated_degenerate_timesteps = False
[4376]148
[4837]149min_timestep = 1.0e-6 # Minimal timestep accepted in ANUGA
150max_timestep = 1.0e+3
[6086]151max_smallsteps = 50   # Max number of degenerate steps allowed b4
152                      # trying first order
[4376]153
[6086]154# Perhaps minimal timestep could be based on the geometry as follows:
155# Define maximal possible speed in open water v_max, e.g. 500m/s (soundspeed?)
156# Then work out minimal internal distance in mesh r_min and set
157# min_timestep = r_min/v_max
[4837]158#
[6086]159# Max speeds are calculated in the flux function as
[4837]160#
[6086]161# lambda = v +/- sqrt(gh)
[4837]162#
163# so with 500 m/s, h ~ 500^2/g = 2500 m well out of the domain of the
164# shallow water wave equation
165#
[6086]166# The actual soundspeed can be as high as 1530m/s
[7865]167# (see http://staff.washington.edu/aganse/public.projects/
168#            clustering/clustering.html),
[6086]169# but that would only happen with h>225000m in this equation. Why ?
170# The maximal speed we specify is really related to the max speed
171# of surface pertubation
[4837]172#
[6086]173# v_max = 100 #For use in domain_ext.c
174# sound_speed = 500
[4376]175
[6086]176################################################################################
[4837]177# Ranges specific to the shallow water wave equation
[6086]178# These control maximal and minimal values of quantities
179################################################################################
[4376]180
[4837]181# Water depth below which it is considered to be 0 in the model
[8970]182minimum_allowed_height = 1.0e-05 
[4376]183
[4837]184# Water depth below which it is *stored* as 0
[8970]185minimum_storable_height = 1.0e-03
[4376]186
[4805]187# FIXME (Ole): Redefine this parameter to control maximal speeds in general
188# and associate it with protect_against_isolated_degenerate_timesteps = True
[4732]189maximum_allowed_speed = 0.0 # Maximal particle speed of water
190#maximum_allowed_speed = 1.0 # Maximal particle speed of water
[6086]191                             # Too large (100) creates 'flopping' water
192                             # Too small (0) creates 'creep'
[7276]193
[4837]194maximum_froude_number = 100.0 # To be used in limiters.
[4376]195
[6086]196################################################################################
[4837]197# Performance parameters used to invoke various optimisations
[6086]198################################################################################
[4815]199
[8404]200use_psyco = False      # Use psyco optimisations
[4376]201
[4837]202optimise_dry_cells = True # Exclude dry and still cells from flux computation
203optimised_gradient_limiter = True # Use hardwired gradient limiter
204
[8808]205points_file_block_line_size = 5e7 # Number of lines read in from a points file
[4376]206                                  # when blocking
[4502]207
[6086]208################################################################################
[7276]209# NetCDF-specific type constants.  Used when defining NetCDF file variables.
210################################################################################
211
212netcdf_char = 'c'
213netcdf_byte = 'b'
214netcdf_int = 'i'
215netcdf_float = 'd'
216netcdf_float64 = 'd'
217netcdf_float32 = 'f'
218
219################################################################################
[6086]220# Dynamically-defined constants.
221################################################################################
[4685]222
[6086]223# Determine if we can read/write large NetCDF files
[8823]224netcdf_mode_w = 'w'
225netcdf_mode_a = 'a'
[6086]226netcdf_mode_r = 'r'
[4837]227
[8974]228
229indent = '    '
230
[6105]231# Code to set the write mode depending on
232# whether Scientific.IO supports large NetCDF files
[7276]233s = """
[7454]234import os, tempfile
[8780]235from anuga.file.netcdf import NetCDFFile
[7454]236
237filename = tempfile.mktemp('.nc')
238
239fid = NetCDFFile(filename, 'wl')
[7276]240fid.close()
[7454]241os.remove(filename)
[7276]242"""
[4837]243
[8780]244"""
[6105]245# Need to run in a separate process due an
246# error with older versions of Scientific.IO
247if sys.platform == 'win32':
248    null = 'NUL'
249else:
250    null = '/dev/null'
[6106]251cmd = 'python -c "%s" 2> %s' % (s, null)
252err = os.system(cmd)
[6105]253
[6106]254if err != 0:
[6105]255    # The Python script s failed e.g. with a segfault
256    # which means that large file support is
257    # definitely not supported
258    pass
259else:   
260    # Try the import within this process
261    try:
262        exec(s)
263    except IOError:
[6108]264        # NetCDFFile does not segfault but it does not
265        # support large file support   
[6105]266        pass
[6106]267    else:
268        # Set the default mode to large file support
[7277]269        #netcdf_mode_w = 'w4' # Future use of HDF5       
270        netcdf_mode_w = 'wl' # Large NetCDF (new default 30/6/2009)
271        #netcdf_mode_w = 'w'   # Old style NetCDF used by OSG viewer
272
[8780]273"""
Note: See TracBrowser for help on using the repository browser.