source: trunk/anuga_core/anuga/__init__.py @ 9673

Last change on this file since 9673 was 9667, checked in by steve, 10 years ago

Cleanup anuga/init.py file

  • Property svn:keywords set to Revision
File size: 14.7 KB
Line 
1""" ANUGA models the effect of tsunamis and flooding upon a terrain mesh.
2    In typical usage, a Domain class is created for a particular piece of
3    terrain. Boundary conditions are specified for the domain, such as inflow
4    and outflow, and then the simulation is run.
5
6    This is the public API to ANUGA. It provides a toolkit of often-used
7    modules, which can be used directly by including the following line in
8    the user's code:
9
10    import anuga
11       
12    This usage pattern abstracts away the internal heirarchy of the ANUGA
13    system, allowing the user to concentrate on writing simulations without
14    searching through the ANUGA source tree for the functions that they need.
15   
16    Also, it isolates the user from "under-the-hood" refactorings.
17"""
18
19#-----------------------------------------------------
20# Make selected classes available directly
21#-----------------------------------------------------
22
23
24
25
26# PEP0440 compatible formatted version, see:
27# https://www.python.org/dev/peps/pep-0440/
28#
29# Generic release markers:
30# X.Y
31# X.Y.Z # For bugfix releases
32#
33# Admissible pre-release markers:
34# X.YaN # Alpha release
35# X.YbN # Beta release
36# X.YrcN # Release Candidate
37# X.Y # Final release
38#
39# Dev branch marker is: 'X.Y.dev' or 'X.Y.devN' where N is an integer.
40#
41__version__ = '1.3.6'
42
43__svn_revision__ = filter(str.isdigit, "$Revision: 9667 $")
44
45
46
47# We first need to detect if we're being called as part of the anuga setup
48# procedure itself in a reliable manner.
49try:
50    __ANUGA_SETUP__
51except NameError:
52    __ANUGA_SETUP__ = False
53
54   
55if __ANUGA_SETUP__:
56    import sys as _sys
57    _sys.stderr.write('Running from anuga source directory.\n')
58    del _sys
59else:
60
61    try:
62        from anuga.__config__ import show as show_config
63    except ImportError:
64        msg = """Error importing anuga: you should not try to import anuga from
65        its source directory; please exit the anuga source tree, and relaunch
66        your python interpreter from there."""
67        raise ImportError(msg)
68       
69       
70    #------------------------------------------
71    # Hacky Code to allow binary install on windows
72    # without a compiler by packaging the mingw
73    # runtime libraries
74    #-----------------------------------------
75
76   
77    # At runtime, If mingw not installed add mingw dlls folder to path
78    import sys
79    import os
80    if sys.platform == 'win32':
81        MinGW = False
82        import subprocess
83        try:
84            output = subprocess.check_output('gcc -dumpmachine', shell=True)
85            MinGW = 'mingw' in output
86        except Exception as e:
87            pass
88       
89        if not MinGW:
90            (folder, tail) = os.path.split(__file__)
91            runtime_dir = os.path.join(os.path.abspath(folder), 'runtime_libs')
92            os.environ['PATH'] = runtime_dir + ';' + os.environ['PATH']
93   
94   
95    #---------------------------------
96    # Setup the nose tester from numpy
97    #---------------------------------
98    from numpy.testing import Tester
99    test = Tester().test
100   
101    #--------------------------------
102    # Important basic classes
103    #--------------------------------
104    from anuga.shallow_water.shallow_water_domain import Domain
105    from anuga.abstract_2d_finite_volumes.quantity import Quantity
106    from anuga.abstract_2d_finite_volumes.region import Region
107    from anuga.geospatial_data.geospatial_data import Geospatial_data
108    from anuga.operators.base_operator import Operator
109    from anuga.structures.structure_operator import Structure_operator
110
111
112    from anuga.abstract_2d_finite_volumes.generic_domain import Generic_Domain
113    from anuga.abstract_2d_finite_volumes.neighbour_mesh import Mesh
114    #------------------------------------------------------------------------------
115    # Miscellaneous
116    #------------------------------------------------------------------------------
117    from anuga.abstract_2d_finite_volumes.util import file_function, \
118                                            sww2timeseries, sww2csv_gauges, \
119                                            csv2timeseries_graphs
120
121    from anuga.abstract_2d_finite_volumes.mesh_factory import rectangular_cross, \
122                                                        rectangular
123
124    from anuga.file.csv_file import load_csv_as_building_polygons,  \
125                                    load_csv_as_polygons
126
127    from anuga.file.sts import create_sts_boundary
128
129    from anuga.file.ungenerate import load_ungenerate
130
131    from anuga.geometry.polygon import read_polygon
132    from anuga.geometry.polygon import plot_polygons
133    from anuga.geometry.polygon import inside_polygon
134    from anuga.geometry.polygon import polygon_area
135    from anuga.geometry.polygon_function import Polygon_function
136
137    from anuga.abstract_2d_finite_volumes.pmesh2domain import \
138                                                pmesh_to_domain_instance
139
140    from anuga.utilities.system_tools import file_length
141    from anuga.utilities.sww_merge import sww_merge_parallel as sww_merge
142    from anuga.utilities.file_utils import copy_code_files
143    from anuga.utilities.numerical_tools import safe_acos as acos
144    import anuga.utilities.plot_utils as plot_utils
145
146
147    from anuga.caching import cache
148    from os.path import join
149    from anuga.config import indent
150
151
152
153    #----------------------------
154    # Parallel api
155    #----------------------------
156    ## from anuga_parallel.parallel_api import distribute
157    ## from anuga_parallel.parallel_api import myid, numprocs, get_processor_name
158    ## from anuga_parallel.parallel_api import send, receive
159    ## from anuga_parallel.parallel_api import pypar_available, barrier, finalize
160
161    ## if pypar_available:
162    ##     from anuga_parallel.parallel_api import sequential_distribute_dump
163    ##     from anuga_parallel.parallel_api import sequential_distribute_load
164
165    from anuga.parallel.parallel_api import distribute
166    from anuga.parallel.parallel_api import myid, numprocs, get_processor_name
167    from anuga.parallel.parallel_api import send, receive
168    from anuga.parallel.parallel_api import pypar_available, barrier, finalize
169
170    if pypar_available:
171        from anuga.parallel.parallel_api import sequential_distribute_dump
172        from anuga.parallel.parallel_api import sequential_distribute_load
173
174
175    #-----------------------------
176    # Checkpointing
177    #-----------------------------
178    from anuga.shallow_water.checkpoint import load_checkpoint_file
179
180
181    #-----------------------------
182    # SwW Standard Boundaries
183    #-----------------------------
184    from anuga.shallow_water.boundaries import File_boundary
185    from anuga.shallow_water.boundaries import Reflective_boundary
186    from anuga.shallow_water.boundaries import Field_boundary
187    from anuga.shallow_water.boundaries import \
188                        Time_stage_zero_momentum_boundary
189    from anuga.shallow_water.boundaries import \
190                        Transmissive_stage_zero_momentum_boundary
191    from anuga.shallow_water.boundaries import \
192                        Transmissive_momentum_set_stage_boundary
193    from anuga.shallow_water.boundaries import \
194                        Transmissive_n_momentum_zero_t_momentum_set_stage_boundary
195    from anuga.shallow_water.boundaries import \
196                        Flather_external_stage_zero_velocity_boundary
197    from anuga.abstract_2d_finite_volumes.generic_boundary_conditions import \
198                        Compute_fluxes_boundary
199
200
201    #-----------------------------
202    # General Boundaries
203    #-----------------------------
204    from anuga.abstract_2d_finite_volumes.generic_boundary_conditions \
205                                import Dirichlet_boundary
206    from anuga.abstract_2d_finite_volumes.generic_boundary_conditions \
207                                import Time_boundary
208    from anuga.abstract_2d_finite_volumes.generic_boundary_conditions \
209                                import Time_space_boundary
210    from anuga.abstract_2d_finite_volumes.generic_boundary_conditions \
211                                import Transmissive_boundary
212
213
214
215    #-----------------------------
216    # Shallow Water Tsunamis
217    #-----------------------------
218
219    from anuga.tsunami_source.smf import slide_tsunami, slump_tsunami
220
221
222
223    #-----------------------------
224    # Forcing
225    # These are old, should use operators
226    #-----------------------------
227    from anuga.shallow_water.forcing import Inflow, Rainfall, Wind_stress
228
229
230
231    #-----------------------------
232    # File conversion utilities
233    #-----------------------------
234    from anuga.file_conversion.file_conversion import sww2obj, \
235                        timefile2netcdf, tsh2sww
236    from anuga.file_conversion.urs2nc import urs2nc
237    from anuga.file_conversion.urs2sww import urs2sww 
238    from anuga.file_conversion.urs2sts import urs2sts
239    from anuga.file_conversion.dem2pts import dem2pts                   
240    from anuga.file_conversion.esri2sww import esri2sww   
241    from anuga.file_conversion.sww2dem import sww2dem, sww2dem_batch
242    from anuga.file_conversion.asc2dem import asc2dem
243    from anuga.file_conversion.xya2pts import xya2pts     
244    from anuga.file_conversion.ferret2sww import ferret2sww     
245    from anuga.file_conversion.dem2dem import dem2dem
246    from anuga.file_conversion.sww2array import sww2array
247
248    #-----------------------------
249    # Parsing arguments
250    #-----------------------------
251    from anuga.utilities.argparsing import create_standard_parser
252    from anuga.utilities.argparsing import parse_standard_args
253
254
255    def get_args():
256        """ Explicitly parse the argument list using standard anuga arguments
257
258        Don't use this if you want to setup your own parser
259        """
260        parser = create_standard_parser()
261        return parser.parse_args()
262
263
264    #-----------------------------
265    # Running Script
266    #-----------------------------
267    from anuga.utilities.run_anuga_script import run_script as run_anuga_script
268
269
270    #-----------------------------
271    # Mesh API
272    #-----------------------------
273    from anuga.pmesh.mesh_interface import create_mesh_from_regions
274
275    #-----------------------------
276    # SWW file access
277    #-----------------------------
278    from anuga.shallow_water.sww_interrogate import get_flow_through_cross_section
279
280    #---------------------------
281    # Operators
282    #---------------------------
283    from anuga.operators.kinematic_viscosity_operator import Kinematic_viscosity_operator
284
285    from anuga.operators.rate_operators import Rate_operator
286    from anuga.operators.set_friction_operators import Depth_friction_operator
287
288    from anuga.operators.set_elevation_operator import Set_elevation_operator
289    from anuga.operators.set_quantity_operator import Set_quantity_operator
290    from anuga.operators.set_stage_operator import Set_stage_operator
291
292    from anuga.operators.set_elevation import Set_elevation
293    from anuga.operators.set_quantity import Set_quantity
294
295    from anuga.operators.erosion_operators import Bed_shear_erosion_operator
296    from anuga.operators.erosion_operators import Flat_slice_erosion_operator
297    from anuga.operators.erosion_operators import Flat_fill_slice_erosion_operator
298
299    #---------------------------
300    # Structure Operators
301    #---------------------------
302
303
304    if pypar_available:
305        from anuga.parallel.parallel_operator_factory import Inlet_operator
306        from anuga.parallel.parallel_operator_factory import Boyd_box_operator
307        from anuga.parallel.parallel_operator_factory import Boyd_pipe_operator
308        from anuga.parallel.parallel_operator_factory import Weir_orifice_trapezoid_operator
309        from anuga.parallel.parallel_operator_factory import Internal_boundary_operator
310    else:
311        from anuga.structures.inlet_operator import Inlet_operator
312        from anuga.structures.boyd_box_operator import Boyd_box_operator
313        from anuga.structures.boyd_pipe_operator import Boyd_pipe_operator
314        from anuga.structures.weir_orifice_trapezoid_operator import Weir_orifice_trapezoid_operator
315        from anuga.structures.internal_boundary_operator import Internal_boundary_operator
316
317
318    #----------------------------
319    # Parallel distribute
320    #----------------------------
321
322
323    #----------------------------
324    #
325    #Added by Petar Milevski 10/09/2013
326    #import time, os
327
328    from anuga.utilities.model_tools import get_polygon_from_single_file
329    from anuga.utilities.model_tools import get_polygons_from_Mid_Mif
330    from anuga.utilities.model_tools import get_polygon_list_from_files
331    from anuga.utilities.model_tools import get_polygon_dictionary
332    from anuga.utilities.model_tools import get_polygon_value_list
333    from anuga.utilities.model_tools import read_polygon_dir
334    from anuga.utilities.model_tools import read_hole_dir_multi_files_with_single_poly
335    from anuga.utilities.model_tools import read_multi_poly_file
336    from anuga.utilities.model_tools import read_hole_dir_single_file_with_multi_poly
337    from anuga.utilities.model_tools import read_multi_poly_file_value
338    from anuga.utilities.model_tools import Create_culvert_bridge_Operator
339
340
341    #---------------------------
342    # User Access Functions
343    #---------------------------
344
345    from anuga.utilities.system_tools import get_user_name, get_host_name, \
346        get_revision_number
347    from anuga.utilities.mem_time_equation import estimate_time_mem
348
349
350    #-------------------------
351    # create domain functions
352    #-------------------------
353    from anuga.extras import create_domain_from_regions
354    from anuga.extras import create_domain_from_file
355    from anuga.extras import rectangular_cross_domain
356
357   
358    #import logging as log
359    from anuga.utilities import log
360
361    from anuga.config import g
362    from anuga.config import velocity_protection
363   
364## if use_psyco:
365##     # try using psyco if available
366##     try:
367##         import psyco
368##     except:
369##         import os
370##         import sys
371##         if os.name == 'posix' and os.uname()[4] in ['x86_64', 'ia64']:
372##             pass
373##             # Psyco isn't supported on 64 bit systems, but it doesn't matter
374##         elif sys.version[:3] == '2.7' :
375##             pass
376##             # Psyco isn't available for python 2.7 (16/05/2011)
377##         else:
378##             log.critical('WARNING: psyco (speedup) could not be imported, '
379##                          'you may want to consider installing it')
380##     else:
381##         psyco.full() # aggressively compile everything
382##         #psyco.background() # attempt to profile code - only compile most used
383       
384
385
386
387
Note: See TracBrowser for help on using the repository browser.