anuga 1.3.5__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.py +363 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.py +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.py +251 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.py +483 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.py +1080 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.py +865 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.py +862 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.py +2274 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.py +1011 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.py +1488 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_table_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.py +299 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.py +2162 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.py +321 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.py +48 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.py +167 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/show_balanced_limiters.py +87 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ermapper.py +189 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_gauge.py +539 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_general_mesh.py +517 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_boundary_conditions.py +439 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_domain.py +907 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ghost.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_neighbour_mesh.py +1854 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_pmesh2domain.py +219 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_quantity.py +2859 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_region.py +99 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_tag_region.py +258 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_util.py +1632 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.py +928 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.py +298 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/test_advection.py +183 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.py +654 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/test_alpha_shape.py +402 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.py +46 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.py +18 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.py +2531 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.py +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/test_caching.py +895 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.py +82 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.py +273 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.py +478 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.py +250 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.py +128 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.py +233 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.xls +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_geo_reference.py +716 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_lat_long_UTM_conversion.py +126 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_point.py +125 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_redfearn.py +508 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.py +1627 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.py +114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.py +362 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.py +1630 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/culvert_polygons_example.py +38 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.csv +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.csv +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.xls +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/run_culvert_flat_water_lev.py +173 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_class.py +812 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_polygons.py +84 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines.py +586 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_10pct.py +342 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_1pct.py +342 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_10pct.py +338 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_1pct.py +338 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_new_culvert_class.py +810 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.py +223 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_exposure.py +325 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_inundation_damage.py +610 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.py +130 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.py +193 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.py +54 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.py +399 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.py +120 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.py +266 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.py +293 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.py +1552 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_csv.py +413 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_mux.py +1539 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_read_sww.py +350 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_sww.py +560 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_ungenerate.py +283 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_urs.py +217 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.py +92 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.py +323 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.py +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.py +213 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/calc_grid_values_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.py +165 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.py +90 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.py +145 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.py +357 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.py +327 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.py +436 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.py +367 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.py +122 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.py +181 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.py +141 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.py +321 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.py +550 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.py +547 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.py +175 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_2pts.py +249 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_csv2sts.py +118 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2array.py +121 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2dem.py +220 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2pts.py +411 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_file_conversion.py +953 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_grd2array.py +270 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_sww2dem.py +1882 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sts.py +2127 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sww.py +628 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.py +202 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.py +316 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.py +306 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.py +71 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.py +39 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.py +367 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.py +611 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fitsmooth.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.py +127 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.py +1144 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.py +305 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.py +79 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.py +131 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.py +37 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_fit.py +1150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate.py +1952 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate2d.py +469 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_search_functions.py +236 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.py +66 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.py +133 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.py +1138 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.py +133 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.py +190 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_geometry.py +110 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_polygon.py +1994 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.py +1698 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/tests/test_geospatial_data.py +1853 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.py +136 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.py +14 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.py +96 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.py +109 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m_all.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_original.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.asc +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_maxasc.py +150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_order_boundary.py +397 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.py +1073 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/tests/test_loadASCII.py +544 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.py +221 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine_c_layer.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/tests/test_generate_mesh.py +470 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.py +125 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.py +79 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.py +240 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.py +142 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.py +85 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.py +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.py +495 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.py +859 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.py +563 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.py +87 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.py +431 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.py +290 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.py +148 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.py +159 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.py +172 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.py +158 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.py +131 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.py +135 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.py +170 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.py +33 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_base_operator.py +51 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_boundary_flux_integral_operator.py +98 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_erosion_operators.py +344 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_kinematic_viscosity_operator.py +1366 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_rate_operators.py +888 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_elevation_operator.py +1034 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_quantity.py +511 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_stage_operator.py +491 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_w_uh_vh_operators.py +211 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.py +31 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.py +14 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.py +1682 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.py +205 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.py +332 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.py +283 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.py +207 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.py +605 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.py +228 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.py +281 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.py +230 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.py +445 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.py +959 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.py +282 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.py +1241 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.py +281 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.py +205 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.py +528 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.py +309 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.py +100 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.py +345 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.py +9253 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.py +671 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.py +389 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.py +80 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.py +1519 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.py +2416 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.py +373 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.py +130 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.py +43 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh.py +2129 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh_interface.py +988 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_meshquad.py +189 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.py +150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.py +80 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.py +69 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.py +47 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.py +302 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/metis_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.py +54 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/test_metis.py +141 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.py +49 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.py +1028 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.py +118 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.py +1339 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.py +101 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.py +37 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.py +3114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swDE1_domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.py +576 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.py +652 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.csv +46 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.csv +7855 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.csv +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_DE1_domain.py +111 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_data_manager.py +879 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_forcing.py +2271 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_loadsave.py +212 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_local_extrapolation_and_flux_updating.py +114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_most2nc.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_shallow_water_domain.py +8670 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_swb2_domain.py +106 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_sww_interrogate.py +888 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_system.py +193 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.lic +18 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.txt +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.py +65 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.py +5 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.py +380 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.py +245 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.py +305 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.py +289 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.py +146 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.py +229 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.py +431 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.py +169 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.py +738 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.py +757 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/hecras_bridge_table.csv +105 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/test_hydrograph.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_box_operator.py +2623 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_pipe_operator.py +482 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_inlet_operator.py +311 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_internal_boundary_functions.py +96 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_riverwall_structure.py +619 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_weir_orifice_trapezoid_operator.py +650 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.py +387 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.py +282 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.py +13 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.py +147 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.py +559 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.py +347 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/okada_tsunami_octave_95.txt +101 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_eq.py +67 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_okada_tsunami.py +439 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_smf.py +143 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_tsunami_okada.py +303 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.py +1885 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.py +76 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.py +327 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.py +497 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.py +121 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.py +404 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.py +308 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.py +117 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.py +318 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.py +414 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.py +77 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.py +106 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.py +457 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.py +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.py +397 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.py +67 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.py +26 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.py +1237 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quad_tree_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.py +612 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.py +164 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.py +70 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.py +39 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.py +398 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_matrix_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.py +1394 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.py +820 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.py +646 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.py +60 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.csv +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.png +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.csv +669 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.lic +33 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.csv +5 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_cg_solve.py +569 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_csv_tools.py +435 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_data_audit.py +393 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_file_utils.py +157 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_function_utils.py +65 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_log_analyser.py +89 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_mem_time_equation.py +47 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_numerical_tools.py +616 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_plot_utils.py +455 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_quantity_setting_functions.py +369 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_sparse.py +215 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_spatialInputUtil.py +418 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_system_tools.py +483 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_xml_tools.py +316 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/util_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.py +219 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.py +326 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.py +15 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.py +1429 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.py +38 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.py +51 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.py +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.py +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/PKG-INFO +117 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/SOURCES.txt +1329 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/dependency_links.txt +1 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/not-zip-safe +1 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,2274 @@
|
|
|
1
|
+
"""Class Domain - 2D triangular domains for finite-volume computations of
|
|
2
|
+
conservation laws.
|
|
3
|
+
|
|
4
|
+
This is the base class for various domain models, such as: the Advection
|
|
5
|
+
implementation is a simple algorithm, mainly for testing purposes, and
|
|
6
|
+
the standard Shallow Water Wave domain (simply known as Domain) is the
|
|
7
|
+
standard for realistic simulation.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Copyright 2004
|
|
11
|
+
Ole Nielsen, Stephen Roberts, Duncan Gray
|
|
12
|
+
Geoscience Australia
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from time import time as walltime
|
|
16
|
+
|
|
17
|
+
from anuga.abstract_2d_finite_volumes.neighbour_mesh import Mesh
|
|
18
|
+
from pmesh2domain import pmesh_to_domain
|
|
19
|
+
from tag_region import Set_tag_region as region_set_tag_region
|
|
20
|
+
from anuga.geometry.polygon import inside_polygon
|
|
21
|
+
from anuga.abstract_2d_finite_volumes.util import get_textual_float
|
|
22
|
+
from quantity import Quantity
|
|
23
|
+
import anuga.utilities.log as log
|
|
24
|
+
|
|
25
|
+
import numpy as num
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class Generic_Domain:
|
|
32
|
+
'''
|
|
33
|
+
Generic computational Domain constructor.
|
|
34
|
+
'''
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def __init__(self, source=None,
|
|
38
|
+
triangles=None,
|
|
39
|
+
boundary=None,
|
|
40
|
+
conserved_quantities=None,
|
|
41
|
+
evolved_quantities=None,
|
|
42
|
+
other_quantities=None,
|
|
43
|
+
tagged_elements=None,
|
|
44
|
+
geo_reference=None,
|
|
45
|
+
use_inscribed_circle=False,
|
|
46
|
+
mesh_filename=None,
|
|
47
|
+
use_cache=False,
|
|
48
|
+
verbose=False,
|
|
49
|
+
full_send_dict=None,
|
|
50
|
+
ghost_recv_dict=None,
|
|
51
|
+
starttime=0.0,
|
|
52
|
+
processor=0,
|
|
53
|
+
numproc=1,
|
|
54
|
+
number_of_full_nodes=None,
|
|
55
|
+
number_of_full_triangles=None,
|
|
56
|
+
ghost_layer_width=2):
|
|
57
|
+
|
|
58
|
+
"""Instantiate generic computational Domain.
|
|
59
|
+
|
|
60
|
+
Input:
|
|
61
|
+
source: Either a mesh filename or coordinates of mesh vertices.
|
|
62
|
+
If it is a filename values specified for triangles will
|
|
63
|
+
be overridden.
|
|
64
|
+
triangles: Mesh connectivity (see mesh.py for more information)
|
|
65
|
+
boundary: See mesh.py for more information
|
|
66
|
+
|
|
67
|
+
conserved_quantities: List of quantity names entering the
|
|
68
|
+
conservation equations
|
|
69
|
+
evolved_quantities: List of all quantities that evolve
|
|
70
|
+
other_quantities: List of other quantity names
|
|
71
|
+
|
|
72
|
+
tagged_elements:
|
|
73
|
+
...
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
if verbose: log.critical('Domain: Initialising')
|
|
77
|
+
|
|
78
|
+
# FIXME SR: This is a bug
|
|
79
|
+
number_of_full_nodes=None
|
|
80
|
+
number_of_full_triangles=None
|
|
81
|
+
|
|
82
|
+
# Determine whether source is a mesh filename or coordinates
|
|
83
|
+
if isinstance(source, basestring):
|
|
84
|
+
mesh_filename = source
|
|
85
|
+
else:
|
|
86
|
+
coordinates = source
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# In case a filename has been specified, extract content
|
|
91
|
+
if mesh_filename is not None:
|
|
92
|
+
|
|
93
|
+
coordinates, triangles, boundary, vertex_quantity_dict, \
|
|
94
|
+
tagged_elements, geo_reference = \
|
|
95
|
+
pmesh_to_domain(file_name=mesh_filename,
|
|
96
|
+
use_cache=use_cache,
|
|
97
|
+
verbose=verbose)
|
|
98
|
+
|
|
99
|
+
# Initialise underlying mesh structure
|
|
100
|
+
self.mesh = Mesh(coordinates, triangles,
|
|
101
|
+
boundary=boundary,
|
|
102
|
+
tagged_elements=tagged_elements,
|
|
103
|
+
geo_reference=geo_reference,
|
|
104
|
+
use_inscribed_circle=use_inscribed_circle,
|
|
105
|
+
#number_of_full_nodes=number_of_full_nodes,
|
|
106
|
+
#number_of_full_triangles=number_of_full_triangles,
|
|
107
|
+
verbose=verbose)
|
|
108
|
+
|
|
109
|
+
if verbose: log.critical('Domain: Expose mesh attributes')
|
|
110
|
+
|
|
111
|
+
# Expose Mesh attributes (FIXME: Maybe turn into methods)
|
|
112
|
+
self.triangles = self.mesh.triangles
|
|
113
|
+
self.centroid_coordinates = self.mesh.centroid_coordinates
|
|
114
|
+
self.vertex_coordinates = self.mesh.vertex_coordinates
|
|
115
|
+
self.edge_coordinates = self.mesh.edge_midpoint_coordinates
|
|
116
|
+
self.boundary = self.mesh.boundary
|
|
117
|
+
self.boundary_enumeration = self.mesh.boundary_enumeration
|
|
118
|
+
self.boundary_cells = self.mesh.boundary_cells
|
|
119
|
+
self.boundary_edges = self.mesh.boundary_edges
|
|
120
|
+
self.neighbours = self.mesh.neighbours
|
|
121
|
+
self.surrogate_neighbours = self.mesh.surrogate_neighbours
|
|
122
|
+
self.neighbour_edges = self.mesh.neighbour_edges
|
|
123
|
+
self.normals = self.mesh.normals
|
|
124
|
+
self.edgelengths = self.mesh.edgelengths
|
|
125
|
+
self.radii = self.mesh.radii
|
|
126
|
+
self.areas = self.mesh.areas
|
|
127
|
+
|
|
128
|
+
self.number_of_boundaries = self.mesh.number_of_boundaries
|
|
129
|
+
self.boundary_length = self.mesh.boundary_length
|
|
130
|
+
self.tag_boundary_cells = self.mesh.tag_boundary_cells
|
|
131
|
+
#self.number_of_full_nodes = self.mesh.number_of_full_nodes
|
|
132
|
+
#self.number_of_full_triangles = self.mesh.number_of_full_triangles
|
|
133
|
+
self.number_of_triangles_per_node = \
|
|
134
|
+
self.mesh.number_of_triangles_per_node
|
|
135
|
+
self.node_index = self.mesh.node_index
|
|
136
|
+
self.vertex_value_indices = self.mesh.vertex_value_indices
|
|
137
|
+
self.number_of_triangles = self.mesh.number_of_triangles
|
|
138
|
+
self.number_of_nodes = self.mesh.number_of_nodes
|
|
139
|
+
|
|
140
|
+
self.geo_reference = self.mesh.geo_reference
|
|
141
|
+
|
|
142
|
+
self.verbose = verbose
|
|
143
|
+
|
|
144
|
+
if verbose: log.critical('Domain: Expose quantity names and types')
|
|
145
|
+
# List of quantity names entering the conservation equations
|
|
146
|
+
if conserved_quantities is None:
|
|
147
|
+
self.conserved_quantities = []
|
|
148
|
+
else:
|
|
149
|
+
self.conserved_quantities = conserved_quantities
|
|
150
|
+
|
|
151
|
+
if evolved_quantities is None:
|
|
152
|
+
self.evolved_quantities = self.conserved_quantities
|
|
153
|
+
else:
|
|
154
|
+
self.evolved_quantities = evolved_quantities
|
|
155
|
+
|
|
156
|
+
# List of other quantity names
|
|
157
|
+
if other_quantities is None:
|
|
158
|
+
self.other_quantities = []
|
|
159
|
+
else:
|
|
160
|
+
self.other_quantities = other_quantities
|
|
161
|
+
|
|
162
|
+
# Test that conserved_quantities are stored in the first entries of
|
|
163
|
+
# evolved_quantities
|
|
164
|
+
for i, quantity in enumerate(self.conserved_quantities):
|
|
165
|
+
msg = 'The conserved quantities must be the first entries of '
|
|
166
|
+
msg += 'evolved_quantities'
|
|
167
|
+
assert quantity == self.evolved_quantities[i], msg
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
if verbose: log.critical('Domain: Build Quantities')
|
|
171
|
+
# Build dictionary of Quantity instances keyed by quantity names
|
|
172
|
+
self.quantities = {}
|
|
173
|
+
|
|
174
|
+
for name in self.evolved_quantities:
|
|
175
|
+
#self.quantities[name] = Quantity(self, name=name)
|
|
176
|
+
Quantity(self, name=name, register=True)
|
|
177
|
+
for name in self.other_quantities:
|
|
178
|
+
#self.quantities[name] = Quantity(self, name=name)
|
|
179
|
+
Quantity(self, name=name , register=True)
|
|
180
|
+
|
|
181
|
+
# Create an empty list for forcing terms
|
|
182
|
+
self.forcing_terms = []
|
|
183
|
+
|
|
184
|
+
# Create an empty list for fractional step operators
|
|
185
|
+
self.fractional_step_operators = []
|
|
186
|
+
self.fractional_step_volume_integral=0.
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
# by default domain is not parallel
|
|
190
|
+
self.parallel = False
|
|
191
|
+
|
|
192
|
+
self.number_of_global_triangles = self.number_of_triangles
|
|
193
|
+
self.number_of_global_nodes = self.number_of_nodes
|
|
194
|
+
|
|
195
|
+
# Setup the ghost cell communication
|
|
196
|
+
if full_send_dict is None:
|
|
197
|
+
self.full_send_dict = {}
|
|
198
|
+
else:
|
|
199
|
+
self.full_send_dict = full_send_dict
|
|
200
|
+
|
|
201
|
+
# List of other quantity names
|
|
202
|
+
if ghost_recv_dict is None:
|
|
203
|
+
self.ghost_recv_dict = {}
|
|
204
|
+
else:
|
|
205
|
+
self.ghost_recv_dict = ghost_recv_dict
|
|
206
|
+
|
|
207
|
+
self.processor = processor
|
|
208
|
+
self.numproc = numproc
|
|
209
|
+
self.ghost_layer_width = ghost_layer_width
|
|
210
|
+
self.communication_time = 0.0
|
|
211
|
+
self.communication_reduce_time = 0.0
|
|
212
|
+
self.communication_broadcast_time = 0.0
|
|
213
|
+
|
|
214
|
+
# Setup Communication Buffers
|
|
215
|
+
if verbose: log.critical('Domain: Set up communication buffers ')
|
|
216
|
+
self.nsys = len(self.conserved_quantities)
|
|
217
|
+
for key in self.full_send_dict:
|
|
218
|
+
buffer_shape = self.full_send_dict[key][0].shape[0]
|
|
219
|
+
self.full_send_dict[key].append(num.zeros((buffer_shape, self.nsys),
|
|
220
|
+
num.float))
|
|
221
|
+
|
|
222
|
+
for key in self.ghost_recv_dict:
|
|
223
|
+
buffer_shape = self.ghost_recv_dict[key][0].shape[0]
|
|
224
|
+
self.ghost_recv_dict[key].append( \
|
|
225
|
+
num.zeros((buffer_shape, self.nsys),
|
|
226
|
+
num.float))
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# Setup triangle full flag
|
|
230
|
+
if verbose: log.critical('Domain: Set up triangle/node full flags ')
|
|
231
|
+
N = len(self) #number_of_elements
|
|
232
|
+
self.number_of_elements = N
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
# =1 for full
|
|
236
|
+
# =0 for ghost
|
|
237
|
+
self.tri_full_flag = num.ones(N, num.int)
|
|
238
|
+
|
|
239
|
+
for i in self.ghost_recv_dict.keys():
|
|
240
|
+
id = self.ghost_recv_dict[i][0]
|
|
241
|
+
self.tri_full_flag[id] = 0
|
|
242
|
+
|
|
243
|
+
self.number_of_full_triangles = int(num.sum(self.tri_full_flag))
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
# Identify full nodes as those that intersect a full triangle.
|
|
247
|
+
|
|
248
|
+
Vol_ids = self.vertex_value_indices/3
|
|
249
|
+
|
|
250
|
+
# want this
|
|
251
|
+
# W = num.repeat(self.tri_full_flag, 3)
|
|
252
|
+
# but without creating extra memeory
|
|
253
|
+
# Got this
|
|
254
|
+
# b = np.lib.stride_tricks.as_strided(a, (1000, a.size), (0, a.itemsize))
|
|
255
|
+
# from
|
|
256
|
+
# http://stackoverflow.com/questions/5564098/repeat-numpy-array-without-replicating-data
|
|
257
|
+
a = self.tri_full_flag
|
|
258
|
+
b = num.lib.stride_tricks.as_strided(a, (a.size, 3), (a.itemsize,0))
|
|
259
|
+
W = b.flat
|
|
260
|
+
|
|
261
|
+
# print a
|
|
262
|
+
# print a.itemsize
|
|
263
|
+
# print list(b)
|
|
264
|
+
# print num.repeat(self.tri_full_flag, 3)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
self.node_full_flag = num.minimum(num.bincount(self.triangles.flat, weights = W).astype(num.int), 1)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
#FIXME SR: The following line leads to a nasty segmentation fault!
|
|
271
|
+
#self.number_of_full_nodes = int(num.sum(self.node_full_flag))
|
|
272
|
+
|
|
273
|
+
self.number_of_full_nodes = self.number_of_nodes
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
# Test the assumption that all full triangles are stored before
|
|
277
|
+
# the ghost triangles.
|
|
278
|
+
#if not num.allclose(self.tri_full_flag[:self.number_of_full_nodes], 1):
|
|
279
|
+
# log.critical('WARNING: Not all full triangles are stored before '
|
|
280
|
+
# 'ghost triangles')
|
|
281
|
+
|
|
282
|
+
# Defaults
|
|
283
|
+
if verbose: log.critical('Domain: Set defaults')
|
|
284
|
+
|
|
285
|
+
from anuga.config import max_smallsteps, beta_w, epsilon
|
|
286
|
+
from anuga.config import CFL
|
|
287
|
+
from anuga.config import timestepping_method
|
|
288
|
+
from anuga.config import protect_against_isolated_degenerate_timesteps
|
|
289
|
+
from anuga.config import default_order
|
|
290
|
+
from anuga.config import max_timestep, min_timestep
|
|
291
|
+
from anuga.config import g
|
|
292
|
+
|
|
293
|
+
self.g = g
|
|
294
|
+
self.beta_w = beta_w
|
|
295
|
+
self.epsilon = epsilon
|
|
296
|
+
self.protect_against_isolated_degenerate_timesteps = \
|
|
297
|
+
protect_against_isolated_degenerate_timesteps
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
self.centroid_transmissive_bc = False
|
|
301
|
+
self.set_default_order(default_order)
|
|
302
|
+
|
|
303
|
+
self.smallsteps = 0
|
|
304
|
+
self.max_smallsteps = max_smallsteps
|
|
305
|
+
self.number_of_steps = 0
|
|
306
|
+
self.number_of_first_order_steps = 0
|
|
307
|
+
self.CFL = CFL
|
|
308
|
+
self.set_timestepping_method(timestepping_method)
|
|
309
|
+
self.set_beta(beta_w)
|
|
310
|
+
self.set_evolve_max_timestep(max_timestep)
|
|
311
|
+
self.set_evolve_min_timestep(min_timestep)
|
|
312
|
+
self.boundary_map = None # Will be populated by set_boundary
|
|
313
|
+
|
|
314
|
+
# Model time
|
|
315
|
+
self.finaltime = None
|
|
316
|
+
self.recorded_min_timestep = self.recorded_max_timestep = 0.0
|
|
317
|
+
self.starttime = starttime # Physical starttime if any
|
|
318
|
+
self.time = self.starttime
|
|
319
|
+
self.timestep = 0.0
|
|
320
|
+
self.flux_timestep = 0.0
|
|
321
|
+
self.evolved_called = False
|
|
322
|
+
|
|
323
|
+
self.last_walltime = walltime()
|
|
324
|
+
|
|
325
|
+
# Monitoring
|
|
326
|
+
self.quantities_to_be_monitored = None
|
|
327
|
+
self.monitor_polygon = None
|
|
328
|
+
self.monitor_time_interval = None
|
|
329
|
+
self.monitor_indices = None
|
|
330
|
+
|
|
331
|
+
# Checkpointing and storage
|
|
332
|
+
from anuga.config import default_datadir
|
|
333
|
+
|
|
334
|
+
self.datadir = default_datadir
|
|
335
|
+
self.simulation_name = 'domain'
|
|
336
|
+
self.checkpoint = False
|
|
337
|
+
|
|
338
|
+
if verbose: log.critical('Domain: Set work arrays')
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
# To avoid calculating the flux across each edge twice, keep an integer
|
|
342
|
+
# (boolean) array, to be used during the flux calculation.
|
|
343
|
+
N = len(self) # Number_of_triangles
|
|
344
|
+
self.already_computed_flux = num.zeros((N, 3), num.int)
|
|
345
|
+
|
|
346
|
+
self.work_centroid_values = num.zeros(N, num.float)
|
|
347
|
+
|
|
348
|
+
# Storage for maximal speeds computed for each triangle by
|
|
349
|
+
# compute_fluxes.
|
|
350
|
+
# This is used for diagnostics only (reset at every yieldstep)
|
|
351
|
+
self.max_speed = num.zeros(N, num.float)
|
|
352
|
+
|
|
353
|
+
if mesh_filename is not None:
|
|
354
|
+
# If the mesh file passed any quantity values,
|
|
355
|
+
# initialise with these values.
|
|
356
|
+
if verbose: log.critical('Domain: Initialising quantity values')
|
|
357
|
+
self.set_quantity_vertices_dict(vertex_quantity_dict)
|
|
358
|
+
|
|
359
|
+
if verbose: log.critical('Domain: Done')
|
|
360
|
+
|
|
361
|
+
######
|
|
362
|
+
# Expose underlying Mesh functionality
|
|
363
|
+
######
|
|
364
|
+
|
|
365
|
+
def __len__(self):
|
|
366
|
+
return len(self.mesh)
|
|
367
|
+
|
|
368
|
+
def get_centroid_coordinates(self, *args, **kwargs):
|
|
369
|
+
return self.mesh.get_centroid_coordinates(*args, **kwargs)
|
|
370
|
+
|
|
371
|
+
def get_radii(self, *args, **kwargs):
|
|
372
|
+
return self.mesh.get_radii(*args, **kwargs)
|
|
373
|
+
|
|
374
|
+
def get_areas(self, *args, **kwargs):
|
|
375
|
+
return self.mesh.get_areas(*args, **kwargs)
|
|
376
|
+
|
|
377
|
+
def get_area(self, *args, **kwargs):
|
|
378
|
+
return self.mesh.get_area(*args, **kwargs)
|
|
379
|
+
|
|
380
|
+
def get_vertex_coordinates(self, *args, **kwargs):
|
|
381
|
+
return self.mesh.get_vertex_coordinates(*args, **kwargs)
|
|
382
|
+
|
|
383
|
+
def get_vertex_coordinate(self, *args, **kwargs):
|
|
384
|
+
return self.mesh.get_vertex_coordinate(*args, **kwargs)
|
|
385
|
+
|
|
386
|
+
def get_edge_midpoint_coordinates(self, *args, **kwargs):
|
|
387
|
+
return self.mesh.get_edge_midpoint_coordinates(*args, **kwargs)
|
|
388
|
+
|
|
389
|
+
def get_edge_midpoint_coordinate(self, *args, **kwargs):
|
|
390
|
+
return self.mesh.get_edge_midpoint_coordinate(*args, **kwargs)
|
|
391
|
+
|
|
392
|
+
def get_triangles(self, *args, **kwargs):
|
|
393
|
+
return self.mesh.get_triangles(*args, **kwargs)
|
|
394
|
+
|
|
395
|
+
def get_nodes(self, *args, **kwargs):
|
|
396
|
+
return self.mesh.get_nodes(*args, **kwargs)
|
|
397
|
+
|
|
398
|
+
def get_number_of_nodes(self, *args, **kwargs):
|
|
399
|
+
return self.mesh.get_number_of_nodes(*args, **kwargs)
|
|
400
|
+
|
|
401
|
+
def get_number_of_triangles(self, *args, **kwargs):
|
|
402
|
+
return self.mesh.get_number_of_triangles(*args, **kwargs)
|
|
403
|
+
|
|
404
|
+
def get_normal(self, *args, **kwargs):
|
|
405
|
+
return self.mesh.get_normal(*args, **kwargs)
|
|
406
|
+
|
|
407
|
+
def get_triangle_containing_point(self, *args, **kwargs):
|
|
408
|
+
return self.mesh.get_triangle_containing_point(*args, **kwargs)
|
|
409
|
+
|
|
410
|
+
def get_intersecting_segments(self, *args, **kwargs):
|
|
411
|
+
return self.mesh.get_intersecting_segments(*args, **kwargs)
|
|
412
|
+
|
|
413
|
+
def get_disconnected_triangles(self, *args, **kwargs):
|
|
414
|
+
return self.mesh.get_disconnected_triangles(*args, **kwargs)
|
|
415
|
+
|
|
416
|
+
def get_boundary_tags(self, *args, **kwargs):
|
|
417
|
+
return self.mesh.get_boundary_tags(*args, **kwargs)
|
|
418
|
+
|
|
419
|
+
def get_boundary_polygon(self, *args, **kwargs):
|
|
420
|
+
return self.mesh.get_boundary_polygon(*args, **kwargs)
|
|
421
|
+
|
|
422
|
+
# FIXME(Ole): This doesn't seem to be required
|
|
423
|
+
def get_number_of_triangles_per_node(self, *args, **kwargs):
|
|
424
|
+
return self.mesh.get_number_of_triangles_per_node(*args, **kwargs)
|
|
425
|
+
|
|
426
|
+
def get_triangles_and_vertices_per_node(self, *args, **kwargs):
|
|
427
|
+
return self.mesh.get_triangles_and_vertices_per_node(*args, **kwargs)
|
|
428
|
+
|
|
429
|
+
def get_interpolation_object(self, *args, **kwargs):
|
|
430
|
+
return self.mesh.get_interpolation_object(*args, **kwargs)
|
|
431
|
+
|
|
432
|
+
def get_tagged_elements(self, *args, **kwargs):
|
|
433
|
+
return self.mesh.get_tagged_elements(*args, **kwargs)
|
|
434
|
+
|
|
435
|
+
def get_lone_vertices(self, *args, **kwargs):
|
|
436
|
+
return self.mesh.get_lone_vertices(*args, **kwargs)
|
|
437
|
+
|
|
438
|
+
def get_unique_vertices(self, *args, **kwargs):
|
|
439
|
+
return self.mesh.get_unique_vertices(*args, **kwargs)
|
|
440
|
+
|
|
441
|
+
def get_georeference(self, *args, **kwargs):
|
|
442
|
+
return self.mesh.get_georeference(*args, **kwargs)
|
|
443
|
+
|
|
444
|
+
def set_georeference(self, *args, **kwargs):
|
|
445
|
+
self.mesh.set_georeference(*args, **kwargs)
|
|
446
|
+
|
|
447
|
+
def build_tagged_elements_dictionary(self, *args, **kwargs):
|
|
448
|
+
self.mesh.build_tagged_elements_dictionary(*args, **kwargs)
|
|
449
|
+
|
|
450
|
+
def statistics(self, *args, **kwargs):
|
|
451
|
+
return self.mesh.statistics(*args, **kwargs)
|
|
452
|
+
|
|
453
|
+
def print_statistics(self, *args, **kwargs):
|
|
454
|
+
print self.statistics(*args, **kwargs)
|
|
455
|
+
|
|
456
|
+
def get_extent(self, *args, **kwargs):
|
|
457
|
+
return self.mesh.get_extent(*args, **kwargs)
|
|
458
|
+
|
|
459
|
+
def get_conserved_quantities(self, vol_id,
|
|
460
|
+
vertex=None,
|
|
461
|
+
edge=None):
|
|
462
|
+
"""Get conserved quantities at volume vol_id.
|
|
463
|
+
|
|
464
|
+
If vertex is specified use it as index for vertex values
|
|
465
|
+
If edge is specified use it as index for edge values
|
|
466
|
+
If neither are specified use centroid values
|
|
467
|
+
If both are specified an exeception is raised
|
|
468
|
+
|
|
469
|
+
Return value: Vector of length == number_of_conserved quantities
|
|
470
|
+
"""
|
|
471
|
+
|
|
472
|
+
if not (vertex is None or edge is None):
|
|
473
|
+
msg = 'Values for both vertex and edge was specified.'
|
|
474
|
+
msg += 'Only one (or none) is allowed.'
|
|
475
|
+
raise Exception(msg)
|
|
476
|
+
|
|
477
|
+
q = num.zeros(len(self.conserved_quantities), num.float)
|
|
478
|
+
|
|
479
|
+
for i, name in enumerate(self.conserved_quantities):
|
|
480
|
+
Q = self.quantities[name]
|
|
481
|
+
if vertex is not None:
|
|
482
|
+
q[i] = Q.vertex_values[vol_id, vertex]
|
|
483
|
+
elif edge is not None:
|
|
484
|
+
q[i] = Q.edge_values[vol_id, edge]
|
|
485
|
+
else:
|
|
486
|
+
q[i] = Q.centroid_values[vol_id]
|
|
487
|
+
|
|
488
|
+
return q
|
|
489
|
+
|
|
490
|
+
def get_evolved_quantities(self, vol_id,
|
|
491
|
+
vertex=None,
|
|
492
|
+
edge=None):
|
|
493
|
+
"""Get evolved quantities at volume vol_id.
|
|
494
|
+
|
|
495
|
+
If vertex is specified use it as index for vertex values
|
|
496
|
+
If edge is specified use it as index for edge values
|
|
497
|
+
If neither are specified use centroid values
|
|
498
|
+
If both are specified an exeception is raised
|
|
499
|
+
|
|
500
|
+
Return value: Vector of length == number_of_conserved quantities
|
|
501
|
+
"""
|
|
502
|
+
|
|
503
|
+
if not (vertex is None or edge is None):
|
|
504
|
+
msg = 'Values for both vertex and edge was specified.'
|
|
505
|
+
msg += 'Only one (or none) is allowed.'
|
|
506
|
+
raise Exception(msg)
|
|
507
|
+
|
|
508
|
+
q = num.zeros(len(self.evolved_quantities), num.float)
|
|
509
|
+
|
|
510
|
+
for i, name in enumerate(self.evolved_quantities):
|
|
511
|
+
Q = self.quantities[name]
|
|
512
|
+
if vertex is not None:
|
|
513
|
+
q[i] = Q.vertex_values[vol_id, vertex]
|
|
514
|
+
elif edge is not None:
|
|
515
|
+
q[i] = Q.edge_values[vol_id, edge]
|
|
516
|
+
else:
|
|
517
|
+
q[i] = Q.centroid_values[vol_id]
|
|
518
|
+
|
|
519
|
+
return q
|
|
520
|
+
|
|
521
|
+
def get_CFL(self):
|
|
522
|
+
"""get CFL
|
|
523
|
+
"""
|
|
524
|
+
|
|
525
|
+
return self.CFL
|
|
526
|
+
|
|
527
|
+
def get_cfl(self):
|
|
528
|
+
"""get CFL
|
|
529
|
+
"""
|
|
530
|
+
|
|
531
|
+
return self.CFL
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
def set_CFL(self, cfl=1.0):
|
|
535
|
+
"""Set CFL parameter, warn if greater than 2.0
|
|
536
|
+
"""
|
|
537
|
+
if cfl > 2.0:
|
|
538
|
+
self.CFL = cfl
|
|
539
|
+
msg = 'Setting CFL > 2.0'
|
|
540
|
+
import warnings
|
|
541
|
+
warnings.warn(msg)
|
|
542
|
+
#log.warning(msg)
|
|
543
|
+
|
|
544
|
+
assert cfl > 0.0
|
|
545
|
+
self.CFL = cfl
|
|
546
|
+
|
|
547
|
+
set_cfl = set_CFL
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
def set_time(self, time=0.0):
|
|
551
|
+
"""Set the model time (seconds)."""
|
|
552
|
+
|
|
553
|
+
# FIXME: this is setting the relative time
|
|
554
|
+
# Note that get_time and set_time are now not symmetric
|
|
555
|
+
|
|
556
|
+
self.time = time
|
|
557
|
+
|
|
558
|
+
def get_time(self):
|
|
559
|
+
"""Get the absolute model time (seconds)."""
|
|
560
|
+
|
|
561
|
+
return self.time
|
|
562
|
+
|
|
563
|
+
def get_timestep(self):
|
|
564
|
+
"""et current timestep (seconds)."""
|
|
565
|
+
|
|
566
|
+
return self.timestep
|
|
567
|
+
|
|
568
|
+
def set_beta(self, beta):
|
|
569
|
+
"""Set default beta for limiting."""
|
|
570
|
+
|
|
571
|
+
self.beta = beta
|
|
572
|
+
for name in self.quantities:
|
|
573
|
+
Q = self.quantities[name]
|
|
574
|
+
Q.set_beta(beta)
|
|
575
|
+
|
|
576
|
+
def get_beta(self):
|
|
577
|
+
"""Get default beta for limiting."""
|
|
578
|
+
|
|
579
|
+
return self.beta
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
def set_centroid_transmissive_bc(self, flag):
|
|
583
|
+
"""Set behaviour of the transmissive boundary condition, namely
|
|
584
|
+
calculate the BC using the centroid value of neighbouring cell
|
|
585
|
+
or the calculated edge value.
|
|
586
|
+
|
|
587
|
+
Centroid value is safer.
|
|
588
|
+
|
|
589
|
+
Some of the limiters (extrapolate_second_order_and_limit_by_edge)
|
|
590
|
+
don't limit boundary edge values (so that linear functions are reconstructed),
|
|
591
|
+
|
|
592
|
+
In this case it is possible for a run away inflow to occur at a transmissive
|
|
593
|
+
boundary. In this case set centroid_transmissive_bc to True"""
|
|
594
|
+
|
|
595
|
+
self.centroid_transmissive_bc = flag
|
|
596
|
+
|
|
597
|
+
def get_centroid_transmissive_bc(self):
|
|
598
|
+
"""Get value of centroid_transmissive_bc flag."""
|
|
599
|
+
|
|
600
|
+
return self.centroid_transmissive_bc
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
def set_evolve_max_timestep(self, max_timestep):
|
|
604
|
+
"""Set default max_timestep for evolving."""
|
|
605
|
+
|
|
606
|
+
self.evolve_max_timestep = max_timestep
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
def get_evolve_max_timestep(self):
|
|
610
|
+
"""Set default max_timestep for evolving."""
|
|
611
|
+
|
|
612
|
+
return self.evolve_max_timestep
|
|
613
|
+
|
|
614
|
+
def set_evolve_min_timestep(self, min_timestep):
|
|
615
|
+
"""Set default min_timestep for evolving."""
|
|
616
|
+
|
|
617
|
+
self.evolve_min_timestep = min_timestep
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
def get_evolve_min_timestep(self):
|
|
621
|
+
"""Set default max_timestep for evolving."""
|
|
622
|
+
|
|
623
|
+
return self.evolve_min_timestep
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
def set_default_order(self, n):
|
|
628
|
+
"""Set default (spatial) order to either 1 or 2."""
|
|
629
|
+
|
|
630
|
+
msg = 'Default order must be either 1 or 2. I got %s' % n
|
|
631
|
+
assert n in [1,2], msg
|
|
632
|
+
|
|
633
|
+
self.default_order = n
|
|
634
|
+
self._order_ = self.default_order
|
|
635
|
+
|
|
636
|
+
def set_quantity_vertices_dict(self, quantity_dict):
|
|
637
|
+
"""Set values for named quantities.
|
|
638
|
+
Supplied dictionary contains name/value pairs:
|
|
639
|
+
|
|
640
|
+
name: Name of quantity
|
|
641
|
+
value: Compatible list, numeric array, const or function (see below)
|
|
642
|
+
|
|
643
|
+
The values will be stored in elements following their internal ordering.
|
|
644
|
+
"""
|
|
645
|
+
|
|
646
|
+
# FIXME: Could we name this a bit more intuitively
|
|
647
|
+
# E.g. set_quantities_from_dictionary
|
|
648
|
+
for key in quantity_dict.keys():
|
|
649
|
+
self.set_quantity(key, quantity_dict[key], location='vertices')
|
|
650
|
+
|
|
651
|
+
def set_quantity(self, name,
|
|
652
|
+
*args, **kwargs):
|
|
653
|
+
"""Set values for named quantity
|
|
654
|
+
|
|
655
|
+
One keyword argument is documented here:
|
|
656
|
+
expression = None, # Arbitrary expression
|
|
657
|
+
|
|
658
|
+
expression:
|
|
659
|
+
Arbitrary expression involving quantity names
|
|
660
|
+
|
|
661
|
+
See Quantity.set_values for further documentation.
|
|
662
|
+
"""
|
|
663
|
+
|
|
664
|
+
# Do the expression stuff
|
|
665
|
+
if kwargs.has_key('expression'):
|
|
666
|
+
expression = kwargs['expression']
|
|
667
|
+
del kwargs['expression']
|
|
668
|
+
|
|
669
|
+
Q = self.create_quantity_from_expression(expression)
|
|
670
|
+
kwargs['quantity'] = Q
|
|
671
|
+
|
|
672
|
+
# Assign values
|
|
673
|
+
self.quantities[name].set_values(*args, **kwargs)
|
|
674
|
+
|
|
675
|
+
def add_quantity(self, name,
|
|
676
|
+
*args, **kwargs):
|
|
677
|
+
"""Add values to a named quantity
|
|
678
|
+
|
|
679
|
+
E.g add_quantity('elevation', X)
|
|
680
|
+
|
|
681
|
+
Option are the same as in set_quantity.
|
|
682
|
+
"""
|
|
683
|
+
|
|
684
|
+
# Do the expression stuff
|
|
685
|
+
if kwargs.has_key('expression'):
|
|
686
|
+
expression = kwargs['expression']
|
|
687
|
+
Q2 = self.create_quantity_from_expression(expression)
|
|
688
|
+
else:
|
|
689
|
+
# Create new temporary quantity
|
|
690
|
+
Q2 = Quantity(self)
|
|
691
|
+
|
|
692
|
+
# Assign specified values to temporary quantity
|
|
693
|
+
Q2.set_values(*args, **kwargs)
|
|
694
|
+
|
|
695
|
+
# Add temporary quantity to named quantity
|
|
696
|
+
Q1 = self.get_quantity(name)
|
|
697
|
+
self.set_quantity(name, Q1 + Q2)
|
|
698
|
+
|
|
699
|
+
def minimum_quantity(self, name,
|
|
700
|
+
*args, **kwargs):
|
|
701
|
+
"""min of values to a named quantity
|
|
702
|
+
|
|
703
|
+
E.g minimum_quantity('elevation', X)
|
|
704
|
+
|
|
705
|
+
Option are the same as in set_quantity.
|
|
706
|
+
"""
|
|
707
|
+
|
|
708
|
+
# Do the expression stuff
|
|
709
|
+
if kwargs.has_key('expression'):
|
|
710
|
+
expression = kwargs['expression']
|
|
711
|
+
Q2 = self.create_quantity_from_expression(expression)
|
|
712
|
+
else:
|
|
713
|
+
# Create new temporary quantity
|
|
714
|
+
Q2 = Quantity(self)
|
|
715
|
+
|
|
716
|
+
# Assign specified values to temporary quantity
|
|
717
|
+
Q2.set_values(*args, **kwargs)
|
|
718
|
+
|
|
719
|
+
# MIn temporary quantity to named quantity
|
|
720
|
+
Q1 = self.get_quantity(name)
|
|
721
|
+
self.set_quantity(name, Q1.minimum(Q2))
|
|
722
|
+
|
|
723
|
+
def maximum_quantity(self, name,
|
|
724
|
+
*args, **kwargs):
|
|
725
|
+
"""max of values to a named quantity
|
|
726
|
+
|
|
727
|
+
E.g maximum_quantity('elevation', X)
|
|
728
|
+
|
|
729
|
+
Option are the same as in set_quantity.
|
|
730
|
+
"""
|
|
731
|
+
|
|
732
|
+
# Do the expression stuff
|
|
733
|
+
if kwargs.has_key('expression'):
|
|
734
|
+
expression = kwargs['expression']
|
|
735
|
+
Q2 = self.create_quantity_from_expression(expression)
|
|
736
|
+
else:
|
|
737
|
+
# Create new temporary quantity
|
|
738
|
+
Q2 = Quantity(self)
|
|
739
|
+
|
|
740
|
+
# Assign specified values to temporary quantity
|
|
741
|
+
Q2.set_values(*args, **kwargs)
|
|
742
|
+
|
|
743
|
+
# Max temporary quantity to named quantity
|
|
744
|
+
Q1 = self.get_quantity(name)
|
|
745
|
+
self.set_quantity(name, Q1.maximum(Q2))
|
|
746
|
+
|
|
747
|
+
def get_quantity_names(self):
|
|
748
|
+
"""Get a list of all the quantity names that this domain is aware of.
|
|
749
|
+
Any value in the result should be a valid input to get_quantity.
|
|
750
|
+
"""
|
|
751
|
+
|
|
752
|
+
return self.quantities.keys()
|
|
753
|
+
|
|
754
|
+
def get_quantity(self, name,
|
|
755
|
+
location='vertices',
|
|
756
|
+
indices = None):
|
|
757
|
+
"""Get pointer to quantity object.
|
|
758
|
+
|
|
759
|
+
name: Name of quantity
|
|
760
|
+
|
|
761
|
+
See methods inside the quantity object for more options
|
|
762
|
+
|
|
763
|
+
FIXME: clean input args
|
|
764
|
+
"""
|
|
765
|
+
|
|
766
|
+
return self.quantities[name] #.get_values( location, indices = indices)
|
|
767
|
+
|
|
768
|
+
def create_quantity_from_expression(self, expression):
|
|
769
|
+
"""Create new quantity from other quantities using arbitrary expression.
|
|
770
|
+
|
|
771
|
+
Combine existing quantities in domain using expression and return
|
|
772
|
+
result as a new quantity.
|
|
773
|
+
|
|
774
|
+
Note, the new quantity could e.g. be used in set_quantity
|
|
775
|
+
|
|
776
|
+
Valid expressions are limited to operators defined in class Quantity
|
|
777
|
+
|
|
778
|
+
Examples creating derived quantities:
|
|
779
|
+
Depth = domain.create_quantity_from_expression('stage-elevation')
|
|
780
|
+
exp = '(xmomentum*xmomentum + ymomentum*ymomentum)**0.5'
|
|
781
|
+
Absolute_momentum = domain.create_quantity_from_expression(exp)
|
|
782
|
+
"""
|
|
783
|
+
|
|
784
|
+
from anuga.abstract_2d_finite_volumes.util import\
|
|
785
|
+
apply_expression_to_dictionary
|
|
786
|
+
|
|
787
|
+
return apply_expression_to_dictionary(expression, self.quantities)
|
|
788
|
+
|
|
789
|
+
def set_boundary(self, boundary_map):
|
|
790
|
+
"""Associate boundary objects with tagged boundary segments.
|
|
791
|
+
|
|
792
|
+
Input: boundary_map is a dictionary of boundary objects keyed
|
|
793
|
+
by symbolic tags to matched against tags in the internal dictionary
|
|
794
|
+
self.boundary.
|
|
795
|
+
|
|
796
|
+
As result one pointer to a boundary object is stored for each vertex
|
|
797
|
+
in the list self.boundary_objects.
|
|
798
|
+
More entries may point to the same boundary object
|
|
799
|
+
|
|
800
|
+
Schematically the mapping is from two dictionaries to one list
|
|
801
|
+
where the index is used as pointer to the boundary_values arrays
|
|
802
|
+
within each quantity.
|
|
803
|
+
|
|
804
|
+
self.boundary: (vol_id, edge_id): tag
|
|
805
|
+
boundary_map (input): tag: boundary_object
|
|
806
|
+
----------------------------------------------
|
|
807
|
+
self.boundary_objects: ((vol_id, edge_id), boundary_object)
|
|
808
|
+
|
|
809
|
+
Pre-condition:
|
|
810
|
+
self.boundary has been built.
|
|
811
|
+
|
|
812
|
+
Post-condition:
|
|
813
|
+
self.boundary_objects is built
|
|
814
|
+
|
|
815
|
+
If a tag from the domain doesn't appear in the input dictionary an
|
|
816
|
+
exception is raised.
|
|
817
|
+
However, if a tag is not used to the domain, no error is thrown.
|
|
818
|
+
FIXME: This would lead to implementation of a default boundary condition
|
|
819
|
+
|
|
820
|
+
Note: If a segment is listed in the boundary dictionary and if it is
|
|
821
|
+
not None, it *will* become a boundary - even if there is a neighbouring
|
|
822
|
+
triangle. This would be the case for internal boundaries.
|
|
823
|
+
|
|
824
|
+
Boundary objects that are None will be skipped.
|
|
825
|
+
|
|
826
|
+
If a boundary_map has already been set (i.e. set_boundary has been
|
|
827
|
+
called before), the old boundary map will be updated with new values.
|
|
828
|
+
The new map need not define all boundary tags, and can thus change only
|
|
829
|
+
those that are needed.
|
|
830
|
+
|
|
831
|
+
FIXME: If set_boundary is called multiple times and if Boundary
|
|
832
|
+
object is changed into None, the neighbour structure will not be
|
|
833
|
+
restored!!!
|
|
834
|
+
"""
|
|
835
|
+
|
|
836
|
+
if self.boundary_map is None:
|
|
837
|
+
# This the first call to set_boundary. Store
|
|
838
|
+
# map for later updates and for use with boundary_stats.
|
|
839
|
+
self.boundary_map = boundary_map
|
|
840
|
+
else:
|
|
841
|
+
# This is a modification of an already existing map
|
|
842
|
+
# Update map an proceed normally
|
|
843
|
+
for key in boundary_map.keys():
|
|
844
|
+
self.boundary_map[key] = boundary_map[key]
|
|
845
|
+
|
|
846
|
+
# FIXME (Ole): Try to remove the sorting and fix test_mesh.py
|
|
847
|
+
x = self.boundary.keys()
|
|
848
|
+
x.sort()
|
|
849
|
+
|
|
850
|
+
# Loop through edges that lie on the boundary and associate them with
|
|
851
|
+
# callable boundary objects depending on their tags
|
|
852
|
+
self.boundary_objects = []
|
|
853
|
+
for k, (vol_id, edge_id) in enumerate(x):
|
|
854
|
+
tag = self.boundary[(vol_id, edge_id)]
|
|
855
|
+
|
|
856
|
+
if self.boundary_map.has_key(tag):
|
|
857
|
+
B = self.boundary_map[tag] # Get callable boundary object
|
|
858
|
+
|
|
859
|
+
if B is not None:
|
|
860
|
+
self.boundary_objects.append(((vol_id, edge_id), B))
|
|
861
|
+
#self.neighbours[vol_id, edge_id] = \
|
|
862
|
+
#-len(self.boundary_objects)
|
|
863
|
+
else:
|
|
864
|
+
pass
|
|
865
|
+
#FIXME: Check and perhaps fix neighbour structure
|
|
866
|
+
else:
|
|
867
|
+
msg = 'ERROR (domain.py): Tag "%s" has not been ' %tag
|
|
868
|
+
msg += 'bound to a boundary object.\n'
|
|
869
|
+
msg += 'All boundary tags defined in domain must appear '
|
|
870
|
+
msg += 'in set_boundary.\n'
|
|
871
|
+
msg += 'The tags are: %s' %self.get_boundary_tags()
|
|
872
|
+
raise Exception(msg)
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
# Add a flag which can be used to distinguish flux boundaries within
|
|
877
|
+
# compute_fluxes_central
|
|
878
|
+
# Initialise to zero (which means 'not a flux_boundary')
|
|
879
|
+
self.boundary_flux_type = self.boundary_edges*0
|
|
880
|
+
|
|
881
|
+
# HACK to set the values of domain.boundary_flux
|
|
882
|
+
for k, ((vol_id, edge_id), B) in enumerate(self.boundary_objects):
|
|
883
|
+
# If Boundary set to Compute_fluxes_boundary identify as flux boundary
|
|
884
|
+
#print vol_id, edge_id, B
|
|
885
|
+
|
|
886
|
+
import anuga
|
|
887
|
+
if ( isinstance(B,anuga.Compute_fluxes_boundary) ):
|
|
888
|
+
self.boundary_flux_type[k]=1
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
##
|
|
892
|
+
# @brief Set quantities based on a regional tag.
|
|
893
|
+
# @param args
|
|
894
|
+
# @param kwargs
|
|
895
|
+
def set_tag_region(self, *args, **kwargs):
|
|
896
|
+
"""Set quantities based on a regional tag.
|
|
897
|
+
|
|
898
|
+
It is most often called with the following parameters;
|
|
899
|
+
(self, tag, quantity, X, location='vertices')
|
|
900
|
+
tag: the name of the regional tag used to specify the region
|
|
901
|
+
quantity: Name of quantity to change
|
|
902
|
+
X: const or function - how the quantity is changed
|
|
903
|
+
location: Where values are to be stored.
|
|
904
|
+
Permissible options are: vertices, centroid and unique vertices
|
|
905
|
+
|
|
906
|
+
A callable region class or a list of callable region classes
|
|
907
|
+
can also be passed into this function.
|
|
908
|
+
"""
|
|
909
|
+
|
|
910
|
+
if len(args) == 1:
|
|
911
|
+
self._set_tag_region(*args, **kwargs)
|
|
912
|
+
else:
|
|
913
|
+
# Assume it is arguments for the region.set_region function
|
|
914
|
+
func = region_set_tag_region(*args, **kwargs)
|
|
915
|
+
self._set_tag_region(func)
|
|
916
|
+
|
|
917
|
+
def _set_tag_region(self, functions):
|
|
918
|
+
# coerce to an iterable (list or tuple)
|
|
919
|
+
if not isinstance(functions, (list, tuple)):
|
|
920
|
+
functions = [functions]
|
|
921
|
+
|
|
922
|
+
# The order of functions in the list is used.
|
|
923
|
+
tagged_elements = self.get_tagged_elements()
|
|
924
|
+
for function in functions:
|
|
925
|
+
for tag in tagged_elements.keys():
|
|
926
|
+
function(tag, tagged_elements[tag], self)
|
|
927
|
+
|
|
928
|
+
def set_quantities_to_be_monitored(self, q,
|
|
929
|
+
polygon=None,
|
|
930
|
+
time_interval=None):
|
|
931
|
+
"""Specify which quantities will be monitored for extrema.
|
|
932
|
+
|
|
933
|
+
q must be either:
|
|
934
|
+
- the name of a quantity or derived quantity such as 'stage-elevation'
|
|
935
|
+
- a list of quantity names
|
|
936
|
+
- None
|
|
937
|
+
|
|
938
|
+
In the two first cases, the named quantities will be monitored at
|
|
939
|
+
each internal timestep
|
|
940
|
+
|
|
941
|
+
If q is None, monitoring will be switched off altogether.
|
|
942
|
+
|
|
943
|
+
polygon (if specified) will only monitor triangles inside polygon.
|
|
944
|
+
If omitted all triangles will be included.
|
|
945
|
+
|
|
946
|
+
time_interval, if specified, will restrict monitoring to time steps in
|
|
947
|
+
that interval. If omitted all timesteps will be included.
|
|
948
|
+
"""
|
|
949
|
+
|
|
950
|
+
from anuga.abstract_2d_finite_volumes.util import\
|
|
951
|
+
apply_expression_to_dictionary
|
|
952
|
+
|
|
953
|
+
if q is None:
|
|
954
|
+
self.quantities_to_be_monitored = None
|
|
955
|
+
self.monitor_polygon = None
|
|
956
|
+
self.monitor_time_interval = None
|
|
957
|
+
self.monitor_indices = None
|
|
958
|
+
return
|
|
959
|
+
|
|
960
|
+
# coerce 'q' to a list if it's a string
|
|
961
|
+
if isinstance(q, basestring):
|
|
962
|
+
q = [q]
|
|
963
|
+
|
|
964
|
+
# Check correctness and initialise
|
|
965
|
+
self.quantities_to_be_monitored = {}
|
|
966
|
+
for quantity_name in q:
|
|
967
|
+
msg = 'Quantity %s is not a valid conserved quantity' \
|
|
968
|
+
% quantity_name
|
|
969
|
+
|
|
970
|
+
if not quantity_name in self.quantities:
|
|
971
|
+
# See if this expression is valid
|
|
972
|
+
apply_expression_to_dictionary(quantity_name, self.quantities)
|
|
973
|
+
|
|
974
|
+
# Initialise extrema information
|
|
975
|
+
info_block = {'min': None, # Min value
|
|
976
|
+
'max': None, # Max value
|
|
977
|
+
'min_location': None, # Argmin (x, y)
|
|
978
|
+
'max_location': None, # Argmax (x, y)
|
|
979
|
+
'min_time': None, # Argmin (t)
|
|
980
|
+
'max_time': None} # Argmax (t)
|
|
981
|
+
|
|
982
|
+
self.quantities_to_be_monitored[quantity_name] = info_block
|
|
983
|
+
|
|
984
|
+
if polygon is not None:
|
|
985
|
+
# Check input
|
|
986
|
+
if isinstance(polygon, basestring):
|
|
987
|
+
# Check if multiple quantities were accidentally
|
|
988
|
+
# given as separate argument rather than a list.
|
|
989
|
+
msg = ('Multiple quantities must be specified in a list. '
|
|
990
|
+
'Not as multiple arguments. '
|
|
991
|
+
'I got "%s" as a second argument') % polygon
|
|
992
|
+
|
|
993
|
+
if polygon in self.quantities:
|
|
994
|
+
raise Exception(msg)
|
|
995
|
+
|
|
996
|
+
try:
|
|
997
|
+
apply_expression_to_dictionary(polygon, self.quantities)
|
|
998
|
+
except:
|
|
999
|
+
# At least polygon wasn't expression involving quantitites
|
|
1000
|
+
pass
|
|
1001
|
+
else:
|
|
1002
|
+
raise Exception(msg)
|
|
1003
|
+
|
|
1004
|
+
# In any case, we don't allow polygon to be a string
|
|
1005
|
+
msg = ('argument "polygon" must not be a string: '
|
|
1006
|
+
'I got polygon="%s"') % polygon
|
|
1007
|
+
raise Exception(msg)
|
|
1008
|
+
|
|
1009
|
+
# Get indices for centroids that are inside polygon
|
|
1010
|
+
points = self.get_centroid_coordinates(absolute=True)
|
|
1011
|
+
self.monitor_indices = inside_polygon(points, polygon)
|
|
1012
|
+
|
|
1013
|
+
if time_interval is not None:
|
|
1014
|
+
assert len(time_interval) == 2
|
|
1015
|
+
|
|
1016
|
+
self.monitor_polygon = polygon
|
|
1017
|
+
self.monitor_time_interval = time_interval
|
|
1018
|
+
|
|
1019
|
+
def check_integrity(self):
|
|
1020
|
+
self.mesh.check_integrity()
|
|
1021
|
+
|
|
1022
|
+
for quantity in self.conserved_quantities:
|
|
1023
|
+
msg = 'Conserved quantities must be a subset of all quantities'
|
|
1024
|
+
assert quantity in self.quantities, msg
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
for i, quantity in enumerate(self.conserved_quantities):
|
|
1028
|
+
msg = 'Conserved quantities must be the first entries '
|
|
1029
|
+
msg += 'of evolved_quantities'
|
|
1030
|
+
assert quantity == self.evolved_quantities[i], msg
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
def write_time(self, track_speeds=False):
|
|
1034
|
+
log.critical(self.timestepping_statistics(track_speeds))
|
|
1035
|
+
|
|
1036
|
+
def timestepping_statistics(self, track_speeds=False,
|
|
1037
|
+
triangle_id=None):
|
|
1038
|
+
"""Return string with time stepping statistics
|
|
1039
|
+
|
|
1040
|
+
Optional boolean keyword track_speeds decides whether to report
|
|
1041
|
+
location of smallest timestep as well as a histogram and percentile
|
|
1042
|
+
report.
|
|
1043
|
+
|
|
1044
|
+
Optional keyword triangle_id can be used to specify a particular
|
|
1045
|
+
triangle rather than the one with the largest speed.
|
|
1046
|
+
"""
|
|
1047
|
+
|
|
1048
|
+
from anuga.utilities.numerical_tools import histogram, create_bins
|
|
1049
|
+
|
|
1050
|
+
# qwidth determines the the width of the text field used for quantities
|
|
1051
|
+
qwidth = self.qwidth = 12
|
|
1052
|
+
|
|
1053
|
+
msg = ''
|
|
1054
|
+
|
|
1055
|
+
model_time = self.get_time()
|
|
1056
|
+
|
|
1057
|
+
if self.recorded_min_timestep == self.recorded_max_timestep:
|
|
1058
|
+
msg += 'Time = %.4f, delta t = %.8f, steps=%d' \
|
|
1059
|
+
% (model_time, self.recorded_min_timestep, \
|
|
1060
|
+
self.number_of_steps)
|
|
1061
|
+
elif self.recorded_min_timestep > self.recorded_max_timestep:
|
|
1062
|
+
msg += 'Time = %.4f, steps=%d' \
|
|
1063
|
+
% (model_time, self.number_of_steps)
|
|
1064
|
+
else:
|
|
1065
|
+
msg += 'Time = %.4f, delta t in [%.8f, %.8f], steps=%d' \
|
|
1066
|
+
% (model_time, self.recorded_min_timestep,
|
|
1067
|
+
self.recorded_max_timestep, self.number_of_steps)
|
|
1068
|
+
|
|
1069
|
+
msg += ' (%ds)' % (walltime() - self.last_walltime)
|
|
1070
|
+
self.last_walltime = walltime()
|
|
1071
|
+
|
|
1072
|
+
if track_speeds is True:
|
|
1073
|
+
msg += '\n'
|
|
1074
|
+
|
|
1075
|
+
# Setup 10 bins for speed histogram
|
|
1076
|
+
bins = create_bins(self.max_speed, 10)
|
|
1077
|
+
hist = histogram(self.max_speed, bins)
|
|
1078
|
+
|
|
1079
|
+
msg += '------------------------------------------------\n'
|
|
1080
|
+
msg += ' Speeds in [%f, %f]\n' % (num.min(self.max_speed),
|
|
1081
|
+
num.max(self.max_speed))
|
|
1082
|
+
msg += ' Histogram:\n'
|
|
1083
|
+
|
|
1084
|
+
hi = bins[0]
|
|
1085
|
+
for i, count in enumerate(hist):
|
|
1086
|
+
lo = hi
|
|
1087
|
+
if i+1 < len(bins):
|
|
1088
|
+
# Open upper interval
|
|
1089
|
+
hi = bins[i+1]
|
|
1090
|
+
msg += ' [%f, %f[: %d\n' % (lo, hi, count)
|
|
1091
|
+
else:
|
|
1092
|
+
# Closed upper interval
|
|
1093
|
+
hi = num.max(self.max_speed)
|
|
1094
|
+
msg += ' [%f, %f]: %d\n' % (lo, hi, count)
|
|
1095
|
+
|
|
1096
|
+
N = len(self.max_speed.flat)
|
|
1097
|
+
if N > 10:
|
|
1098
|
+
msg += ' Percentiles (10%):\n'
|
|
1099
|
+
#speed = self.max_speed.tolist()
|
|
1100
|
+
#speed.sort()
|
|
1101
|
+
speed = num.sort(self.max_speed)
|
|
1102
|
+
|
|
1103
|
+
k = 0
|
|
1104
|
+
lower = num.min(speed)
|
|
1105
|
+
for i, a in enumerate(speed):
|
|
1106
|
+
if i % (N/10) == 0 and i != 0:
|
|
1107
|
+
# For every 10% of the sorted speeds
|
|
1108
|
+
msg += ' %d speeds in [%f, %f]\n' % (i-k, lower, a)
|
|
1109
|
+
lower = a
|
|
1110
|
+
k = i
|
|
1111
|
+
|
|
1112
|
+
msg += ' %d speeds in [%f, %f]\n'\
|
|
1113
|
+
% (N-k, lower, max(speed))
|
|
1114
|
+
|
|
1115
|
+
# Find index of largest computed flux speed
|
|
1116
|
+
if triangle_id is None:
|
|
1117
|
+
k = self.k = num.argmax(self.max_speed)
|
|
1118
|
+
else:
|
|
1119
|
+
errmsg = 'Triangle_id %d does not exist in mesh: %s' \
|
|
1120
|
+
% (triangle_id, str(self))
|
|
1121
|
+
assert 0 <= triangle_id < len(self), errmsg
|
|
1122
|
+
k = self.k = triangle_id
|
|
1123
|
+
|
|
1124
|
+
x, y = self.get_centroid_coordinates(absolute=True)[k]
|
|
1125
|
+
radius = self.get_radii()[k]
|
|
1126
|
+
area = self.get_areas()[k]
|
|
1127
|
+
max_speed = self.max_speed[k]
|
|
1128
|
+
|
|
1129
|
+
msg += ' Triangle #%d with centroid (%.4f, %.4f), ' % (k, x, y)
|
|
1130
|
+
msg += 'area = %.4f and radius = %.4f ' % (area, radius)
|
|
1131
|
+
if triangle_id is None:
|
|
1132
|
+
msg += 'had the largest computed speed: %.6f m/s ' % (max_speed)
|
|
1133
|
+
else:
|
|
1134
|
+
msg += 'had computed speed: %.6f m/s ' % (max_speed)
|
|
1135
|
+
|
|
1136
|
+
if max_speed > 0.0:
|
|
1137
|
+
msg += '(timestep=%.6f)\n' % (radius/max_speed)
|
|
1138
|
+
else:
|
|
1139
|
+
msg += '(timestep=%.6f)\n' % (0)
|
|
1140
|
+
|
|
1141
|
+
# Report all quantity values at vertices, edges and centroid
|
|
1142
|
+
msg += ' Quantity'
|
|
1143
|
+
msg += '------------\n'
|
|
1144
|
+
for name in self.quantities:
|
|
1145
|
+
q = self.quantities[name]
|
|
1146
|
+
|
|
1147
|
+
V = q.get_values(location='vertices', indices=[k])[0]
|
|
1148
|
+
E = q.get_values(location='edges', indices=[k])[0]
|
|
1149
|
+
C = q.get_values(location='centroids', indices=[k])
|
|
1150
|
+
|
|
1151
|
+
s = ' %s: vertex_values = %.4f,\t %.4f,\t %.4f\n' \
|
|
1152
|
+
% (name.ljust(qwidth), V[0], V[1], V[2])
|
|
1153
|
+
|
|
1154
|
+
s += ' %s: edge_values = %.4f,\t %.4f,\t %.4f\n' \
|
|
1155
|
+
% (name.ljust(qwidth), E[0], E[1], E[2])
|
|
1156
|
+
|
|
1157
|
+
s += ' %s: centroid_value = %.4f\n' \
|
|
1158
|
+
% (name.ljust(qwidth), C[0])
|
|
1159
|
+
|
|
1160
|
+
msg += s
|
|
1161
|
+
|
|
1162
|
+
return msg
|
|
1163
|
+
|
|
1164
|
+
def print_timestepping_statistics(self, track_speeds=False,
|
|
1165
|
+
triangle_id=None):
|
|
1166
|
+
print self.timestepping_statistics(track_speeds,
|
|
1167
|
+
triangle_id)
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
def print_boundary_statistics(self, quantities=None, tags=None):
|
|
1172
|
+
print self.boundary_statistics(quantities, tags)
|
|
1173
|
+
|
|
1174
|
+
def write_boundary_statistics(self, quantities=None, tags=None):
|
|
1175
|
+
log.critical(self.boundary_statistics(quantities, tags))
|
|
1176
|
+
|
|
1177
|
+
def boundary_statistics(self, quantities=None,
|
|
1178
|
+
tags=None):
|
|
1179
|
+
"""Output statistics about boundary forcing at each timestep
|
|
1180
|
+
|
|
1181
|
+
Input:
|
|
1182
|
+
quantities: either None, a string or a list of strings naming the
|
|
1183
|
+
quantities to be reported
|
|
1184
|
+
tags: either None, a string or a list of strings naming the
|
|
1185
|
+
tags to be reported
|
|
1186
|
+
|
|
1187
|
+
Example output:
|
|
1188
|
+
Tag 'wall':
|
|
1189
|
+
stage in [2, 5.5]
|
|
1190
|
+
xmomentum in []
|
|
1191
|
+
ymomentum in []
|
|
1192
|
+
Tag 'ocean'
|
|
1193
|
+
|
|
1194
|
+
If quantities are specified only report on those. Otherwise take all
|
|
1195
|
+
conserved quantities.
|
|
1196
|
+
If tags are specified only report on those, otherwise take all tags.
|
|
1197
|
+
"""
|
|
1198
|
+
|
|
1199
|
+
import types, string
|
|
1200
|
+
|
|
1201
|
+
# Input checks
|
|
1202
|
+
if quantities is None:
|
|
1203
|
+
quantities = self.evolved_quantities
|
|
1204
|
+
elif isinstance(quantities, basestring):
|
|
1205
|
+
quantities = [quantities] #Turn it into a list
|
|
1206
|
+
|
|
1207
|
+
msg = ('Keyword argument quantities must be either None, '
|
|
1208
|
+
'string or list. I got %s') % str(quantities)
|
|
1209
|
+
assert isinstance(quantities, list), msg
|
|
1210
|
+
|
|
1211
|
+
if tags is None:
|
|
1212
|
+
tags = self.get_boundary_tags()
|
|
1213
|
+
elif isinstance(tags, basestring):
|
|
1214
|
+
tags = [tags] #Turn it into a list
|
|
1215
|
+
|
|
1216
|
+
msg = ('Keyword argument tags must be either None, '
|
|
1217
|
+
'string or list. I got %s') % str(tags)
|
|
1218
|
+
assert isinstance(tags, list), msg
|
|
1219
|
+
|
|
1220
|
+
# Determine width of longest quantity name (for cosmetic purposes)
|
|
1221
|
+
maxwidth = 0
|
|
1222
|
+
for name in quantities:
|
|
1223
|
+
w = len(name)
|
|
1224
|
+
if w > maxwidth:
|
|
1225
|
+
maxwidth = w
|
|
1226
|
+
|
|
1227
|
+
# Output statistics
|
|
1228
|
+
msg = 'Boundary values at time %.4f:\n' % self.get_time()
|
|
1229
|
+
for tag in tags:
|
|
1230
|
+
msg += ' %s:\n' % tag
|
|
1231
|
+
|
|
1232
|
+
for name in quantities:
|
|
1233
|
+
q = self.quantities[name]
|
|
1234
|
+
|
|
1235
|
+
# Find range of boundary values for tag and q
|
|
1236
|
+
maxval = minval = None
|
|
1237
|
+
for i, ((vol_id,edge_id),B) in enumerate(self.boundary_objects):
|
|
1238
|
+
if self.boundary[(vol_id, edge_id)] == tag:
|
|
1239
|
+
v = q.boundary_values[i]
|
|
1240
|
+
if minval is None or v < minval: minval = v
|
|
1241
|
+
if maxval is None or v > maxval: maxval = v
|
|
1242
|
+
|
|
1243
|
+
if minval is None or maxval is None:
|
|
1244
|
+
msg += (' Sorry no information available about'
|
|
1245
|
+
' tag %s and quantity %s\n') % (tag, name)
|
|
1246
|
+
else:
|
|
1247
|
+
msg += ' %s in [%12.8f, %12.8f]\n' \
|
|
1248
|
+
% (string.ljust(name, maxwidth), minval, maxval)
|
|
1249
|
+
|
|
1250
|
+
return msg
|
|
1251
|
+
|
|
1252
|
+
def update_extrema(self):
|
|
1253
|
+
"""Update extrema if requested by set_quantities_to_be_monitored.
|
|
1254
|
+
This data is used for reporting e.g. by running
|
|
1255
|
+
print domain.quantity_statistics()
|
|
1256
|
+
and may also stored in output files (see data_manager in shallow_water)
|
|
1257
|
+
"""
|
|
1258
|
+
|
|
1259
|
+
# Define a tolerance for extremum computations
|
|
1260
|
+
from anuga.config import single_precision as epsilon
|
|
1261
|
+
|
|
1262
|
+
if self.quantities_to_be_monitored is None:
|
|
1263
|
+
return
|
|
1264
|
+
|
|
1265
|
+
# Observe time interval restriction if any
|
|
1266
|
+
if self.monitor_time_interval is not None and\
|
|
1267
|
+
(self.get_time() < self.monitor_time_interval[0] or\
|
|
1268
|
+
self.get_time() > self.monitor_time_interval[1]):
|
|
1269
|
+
return
|
|
1270
|
+
|
|
1271
|
+
# Update extrema for each specified quantity subject to
|
|
1272
|
+
# polygon restriction (via monitor_indices).
|
|
1273
|
+
for quantity_name in self.quantities_to_be_monitored:
|
|
1274
|
+
|
|
1275
|
+
if quantity_name in self.quantities:
|
|
1276
|
+
Q = self.get_quantity(quantity_name)
|
|
1277
|
+
else:
|
|
1278
|
+
Q = self.create_quantity_from_expression(quantity_name)
|
|
1279
|
+
|
|
1280
|
+
info_block = self.quantities_to_be_monitored[quantity_name]
|
|
1281
|
+
|
|
1282
|
+
# Update maximum
|
|
1283
|
+
# (n > None is always True, but we check explicitly because
|
|
1284
|
+
# of the epsilon)
|
|
1285
|
+
maxval = Q.get_maximum_value(self.monitor_indices)
|
|
1286
|
+
if info_block['max'] is None or \
|
|
1287
|
+
maxval > info_block['max'] + epsilon:
|
|
1288
|
+
info_block['max'] = maxval
|
|
1289
|
+
maxloc = Q.get_maximum_location()
|
|
1290
|
+
info_block['max_location'] = maxloc
|
|
1291
|
+
info_block['max_time'] = self.get_time()
|
|
1292
|
+
|
|
1293
|
+
# Update minimum
|
|
1294
|
+
minval = Q.get_minimum_value(self.monitor_indices)
|
|
1295
|
+
if info_block['min'] is None or \
|
|
1296
|
+
minval < info_block['min'] - epsilon:
|
|
1297
|
+
info_block['min'] = minval
|
|
1298
|
+
minloc = Q.get_minimum_location()
|
|
1299
|
+
info_block['min_location'] = minloc
|
|
1300
|
+
info_block['min_time'] = self.get_time()
|
|
1301
|
+
|
|
1302
|
+
def quantity_statistics(self, precision='%.4f'):
|
|
1303
|
+
"""Return string with statistics about quantities for
|
|
1304
|
+
printing or logging
|
|
1305
|
+
|
|
1306
|
+
Quantities reported are specified through method
|
|
1307
|
+
|
|
1308
|
+
set_quantities_to_be_monitored
|
|
1309
|
+
"""
|
|
1310
|
+
|
|
1311
|
+
maxlen = 128 # Max length of polygon string representation
|
|
1312
|
+
|
|
1313
|
+
# Output statistics
|
|
1314
|
+
msg = 'Monitored quantities at time %.4f:\n' % self.get_time()
|
|
1315
|
+
if self.monitor_polygon is not None:
|
|
1316
|
+
p_str = str(self.monitor_polygon)
|
|
1317
|
+
msg += '- Restricted by polygon: %s' % p_str[:maxlen]
|
|
1318
|
+
if len(p_str) >= maxlen:
|
|
1319
|
+
msg += '...\n'
|
|
1320
|
+
else:
|
|
1321
|
+
msg += '\n'
|
|
1322
|
+
|
|
1323
|
+
if self.monitor_time_interval is not None:
|
|
1324
|
+
msg += '- Restricted by time interval: %s\n' \
|
|
1325
|
+
% str(self.monitor_time_interval)
|
|
1326
|
+
time_interval_start = self.monitor_time_interval[0]
|
|
1327
|
+
else:
|
|
1328
|
+
time_interval_start = 0.0
|
|
1329
|
+
|
|
1330
|
+
for quantity_name, info in self.quantities_to_be_monitored.items():
|
|
1331
|
+
msg += ' %s:\n' % quantity_name
|
|
1332
|
+
|
|
1333
|
+
msg += ' values since time = %.2f in [%s, %s]\n' \
|
|
1334
|
+
% (time_interval_start,
|
|
1335
|
+
get_textual_float(info['min'], precision),
|
|
1336
|
+
get_textual_float(info['max'], precision))
|
|
1337
|
+
|
|
1338
|
+
msg += ' minimum attained at time = %s, location = %s\n' \
|
|
1339
|
+
% (get_textual_float(info['min_time'], precision),
|
|
1340
|
+
get_textual_float(info['min_location'], precision))
|
|
1341
|
+
|
|
1342
|
+
msg += ' maximum attained at time = %s, location = %s\n' \
|
|
1343
|
+
% (get_textual_float(info['max_time'], precision),
|
|
1344
|
+
get_textual_float(info['max_location'], precision))
|
|
1345
|
+
|
|
1346
|
+
return msg
|
|
1347
|
+
|
|
1348
|
+
def get_timestepping_method(self):
|
|
1349
|
+
return self.timestepping_method
|
|
1350
|
+
|
|
1351
|
+
def set_timestepping_method(self, timestepping_method):
|
|
1352
|
+
methods = ['euler', 'rk2', 'rk3']
|
|
1353
|
+
substeps= [ 1 , 2 , 3 ] # Number of calls to compute_fluxes within the timestep
|
|
1354
|
+
if timestepping_method in methods:
|
|
1355
|
+
self.timestepping_method = timestepping_method
|
|
1356
|
+
self.timestep_fluxcalls = substeps[methods.index(timestepping_method)]
|
|
1357
|
+
return
|
|
1358
|
+
if timestepping_method in [1,2,3]:
|
|
1359
|
+
self.timestepping_method = methods[timestepping_method-1]
|
|
1360
|
+
self.timestep_fluxcalls = substeps[timestepping_method-1]
|
|
1361
|
+
return
|
|
1362
|
+
|
|
1363
|
+
msg = '%s is an incorrect timestepping type' % timestepping_method
|
|
1364
|
+
raise Exception(msg)
|
|
1365
|
+
|
|
1366
|
+
def get_name(self):
|
|
1367
|
+
return self.simulation_name
|
|
1368
|
+
|
|
1369
|
+
def set_name(self, name=None, timestamp=False):
|
|
1370
|
+
"""Assign a name to this simulation.
|
|
1371
|
+
This will be used to identify the output sww file.
|
|
1372
|
+
Without parameters the name will be derived from the script file,
|
|
1373
|
+
ie run_simulation.py -> output_run_simulation.sww
|
|
1374
|
+
"""
|
|
1375
|
+
|
|
1376
|
+
import os
|
|
1377
|
+
import inspect
|
|
1378
|
+
|
|
1379
|
+
if name is None:
|
|
1380
|
+
frame = inspect.currentframe()
|
|
1381
|
+
script_name = inspect.getouterframes(frame)[1][1]
|
|
1382
|
+
name = 'output_'+os.path.splitext(script_name)[0]
|
|
1383
|
+
|
|
1384
|
+
# remove any '.sww' end
|
|
1385
|
+
if name.endswith('.sww'):
|
|
1386
|
+
name = name[:-4]
|
|
1387
|
+
|
|
1388
|
+
|
|
1389
|
+
from time import localtime, strftime, gmtime
|
|
1390
|
+
time = strftime('%Y%m%d_%H%M%S',localtime())
|
|
1391
|
+
|
|
1392
|
+
if timestamp:
|
|
1393
|
+
name = name+'_'+time
|
|
1394
|
+
|
|
1395
|
+
self.simulation_name = name
|
|
1396
|
+
|
|
1397
|
+
def get_datadir(self):
|
|
1398
|
+
return self.datadir
|
|
1399
|
+
|
|
1400
|
+
def set_datadir(self, name):
|
|
1401
|
+
self.datadir = name
|
|
1402
|
+
|
|
1403
|
+
def get_starttime(self):
|
|
1404
|
+
return self.starttime
|
|
1405
|
+
|
|
1406
|
+
def set_starttime(self, time):
|
|
1407
|
+
self.starttime = float(time)
|
|
1408
|
+
self.set_time(self.starttime)
|
|
1409
|
+
|
|
1410
|
+
|
|
1411
|
+
|
|
1412
|
+
'''
|
|
1413
|
+
Outputs domain triangulation, full triangles are shown in green while ghost triangles are shown in blue.
|
|
1414
|
+
The default filename is "domain.png"
|
|
1415
|
+
'''
|
|
1416
|
+
def dump_triangulation(self, filename="domain.png"):
|
|
1417
|
+
# Get vertex coordinates, partition full and ghost triangles based on self.tri_full_flag
|
|
1418
|
+
|
|
1419
|
+
try:
|
|
1420
|
+
import matplotlib
|
|
1421
|
+
matplotlib.use('Agg')
|
|
1422
|
+
import matplotlib.pyplot as plt
|
|
1423
|
+
import matplotlib.tri as tri
|
|
1424
|
+
except:
|
|
1425
|
+
print "Couldn't import module from matplotlib, probably you need to update matplotlib"
|
|
1426
|
+
raise
|
|
1427
|
+
|
|
1428
|
+
vertices = self.get_vertex_coordinates()
|
|
1429
|
+
full_mask = num.repeat(self.tri_full_flag == 1, 3)
|
|
1430
|
+
ghost_mask = num.repeat(self.tri_full_flag == 0, 3)
|
|
1431
|
+
|
|
1432
|
+
|
|
1433
|
+
# Gather full and ghost nodes
|
|
1434
|
+
fx = vertices[full_mask,0]
|
|
1435
|
+
fy = vertices[full_mask,1]
|
|
1436
|
+
gx = vertices[ghost_mask,0]
|
|
1437
|
+
gy = vertices[ghost_mask,1]
|
|
1438
|
+
|
|
1439
|
+
|
|
1440
|
+
# Plot full triangles
|
|
1441
|
+
n = int(len(fx)/3)
|
|
1442
|
+
|
|
1443
|
+
triang = num.array(range(0,3*n))
|
|
1444
|
+
triang.shape = (n, 3)
|
|
1445
|
+
plt.triplot(fx, fy, triang, 'g-')
|
|
1446
|
+
|
|
1447
|
+
# Plot ghost triangles
|
|
1448
|
+
n = int(len(gx)/3)
|
|
1449
|
+
if n > 0:
|
|
1450
|
+
triang = num.array(range(0,3*n))
|
|
1451
|
+
triang.shape = (n, 3)
|
|
1452
|
+
plt.triplot(gx, gy, triang, 'b--')
|
|
1453
|
+
|
|
1454
|
+
# Save triangulation to location pointed by filename
|
|
1455
|
+
plt.savefig(filename)
|
|
1456
|
+
|
|
1457
|
+
|
|
1458
|
+
|
|
1459
|
+
################################################################################
|
|
1460
|
+
# Main components of evolve
|
|
1461
|
+
################################################################################
|
|
1462
|
+
|
|
1463
|
+
def evolve(self, yieldstep=None,
|
|
1464
|
+
finaltime=None,
|
|
1465
|
+
duration=None,
|
|
1466
|
+
skip_initial_step=False):
|
|
1467
|
+
"""Evolve model through time starting from self.starttime.
|
|
1468
|
+
|
|
1469
|
+
yieldstep: Interval between yields where results are stored,
|
|
1470
|
+
statistics written and domain inspected or
|
|
1471
|
+
possibly modified. If omitted the internal predefined
|
|
1472
|
+
max timestep is used.
|
|
1473
|
+
Internally, smaller timesteps may be taken.
|
|
1474
|
+
|
|
1475
|
+
duration: Duration of simulation
|
|
1476
|
+
|
|
1477
|
+
finaltime: Time where simulation should end. This is currently
|
|
1478
|
+
relative time. So it's the same as duration.
|
|
1479
|
+
|
|
1480
|
+
If both duration and finaltime are given an exception is thrown.
|
|
1481
|
+
|
|
1482
|
+
skip_initial_step: Boolean flag that decides whether the first
|
|
1483
|
+
yield step is skipped or not. This is useful for example to avoid
|
|
1484
|
+
duplicate steps when multiple evolve processes are dove tailed.
|
|
1485
|
+
|
|
1486
|
+
Evolve is implemented as a generator and is to be called as such, e.g.
|
|
1487
|
+
|
|
1488
|
+
for t in domain.evolve(yieldstep, finaltime):
|
|
1489
|
+
<Do something with domain and t>
|
|
1490
|
+
|
|
1491
|
+
All times are given in seconds
|
|
1492
|
+
"""
|
|
1493
|
+
|
|
1494
|
+
from anuga.config import epsilon
|
|
1495
|
+
|
|
1496
|
+
# FIXME: Maybe lump into a larger check prior to evolving
|
|
1497
|
+
msg = ('Boundary tags must be bound to boundary objects before '
|
|
1498
|
+
'evolving system, '
|
|
1499
|
+
'e.g. using the method set_boundary.\n'
|
|
1500
|
+
'This system has the boundary tags %s '
|
|
1501
|
+
% self.get_boundary_tags())
|
|
1502
|
+
assert hasattr(self, 'boundary_objects'), msg
|
|
1503
|
+
|
|
1504
|
+
|
|
1505
|
+
if self.evolved_called:
|
|
1506
|
+
skip_initial_step = True
|
|
1507
|
+
|
|
1508
|
+
self.evolved_called = True
|
|
1509
|
+
|
|
1510
|
+
# We assume evolve has already been called so we should now
|
|
1511
|
+
# set starttime to match actual time
|
|
1512
|
+
|
|
1513
|
+
if skip_initial_step:
|
|
1514
|
+
self.set_starttime(self.get_time())
|
|
1515
|
+
|
|
1516
|
+
|
|
1517
|
+
# This can happen on the first call to evolve
|
|
1518
|
+
if self.get_time() != self.get_starttime():
|
|
1519
|
+
self.set_time(self.get_starttime())
|
|
1520
|
+
|
|
1521
|
+
if yieldstep is None:
|
|
1522
|
+
yieldstep = self.evolve_max_timestep
|
|
1523
|
+
else:
|
|
1524
|
+
yieldstep = float(yieldstep)
|
|
1525
|
+
|
|
1526
|
+
self._order_ = self.default_order
|
|
1527
|
+
|
|
1528
|
+
|
|
1529
|
+
|
|
1530
|
+
if finaltime is not None and duration is not None:
|
|
1531
|
+
msg = 'Only one of finaltime and duration may be specified'
|
|
1532
|
+
raise Exception(msg)
|
|
1533
|
+
else:
|
|
1534
|
+
if finaltime is not None:
|
|
1535
|
+
self.finaltime = float(finaltime)
|
|
1536
|
+
if duration is not None:
|
|
1537
|
+
self.finaltime = self.starttime + float(duration)
|
|
1538
|
+
|
|
1539
|
+
assert self.finaltime >= self.get_starttime(), 'finaltime is less than starttime!'
|
|
1540
|
+
|
|
1541
|
+
N = len(self) # Number of triangles
|
|
1542
|
+
self.yieldtime = self.get_time() + yieldstep # set next yield time
|
|
1543
|
+
|
|
1544
|
+
# Initialise interval of timestep sizes (for reporting only)
|
|
1545
|
+
# Note that we set recorded_min_timestep to be large so that it comes
|
|
1546
|
+
# down through the evolution, similarly recorded_max_timestep
|
|
1547
|
+
self.recorded_min_timestep = self.evolve_max_timestep
|
|
1548
|
+
self.recorded_max_timestep = self.evolve_min_timestep
|
|
1549
|
+
self.number_of_steps = 0
|
|
1550
|
+
self.number_of_first_order_steps = 0
|
|
1551
|
+
|
|
1552
|
+
# Update centroid values of conserved quantites to satisfy
|
|
1553
|
+
# special conditions
|
|
1554
|
+
#self.update_special_conditions()
|
|
1555
|
+
|
|
1556
|
+
# Update ghosts to ensure all centroid values are available
|
|
1557
|
+
self.update_ghosts()
|
|
1558
|
+
|
|
1559
|
+
|
|
1560
|
+
# Initial update of vertex and edge values
|
|
1561
|
+
self.distribute_to_vertices_and_edges()
|
|
1562
|
+
|
|
1563
|
+
|
|
1564
|
+
# Initial update boundary values
|
|
1565
|
+
self.update_boundary()
|
|
1566
|
+
|
|
1567
|
+
|
|
1568
|
+
# Update extrema if necessary (for reporting)
|
|
1569
|
+
self.update_extrema()
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
|
|
1573
|
+
# Or maybe restore from latest checkpoint
|
|
1574
|
+
#if self.checkpoint is True:
|
|
1575
|
+
# self.goto_latest_checkpoint()
|
|
1576
|
+
|
|
1577
|
+
if skip_initial_step is False:
|
|
1578
|
+
yield(self.get_time()) # Yield initial values
|
|
1579
|
+
|
|
1580
|
+
while True:
|
|
1581
|
+
|
|
1582
|
+
initial_time = self.get_time()
|
|
1583
|
+
|
|
1584
|
+
#==========================================
|
|
1585
|
+
# Apply fluid flow fractional step
|
|
1586
|
+
#==========================================
|
|
1587
|
+
if self.get_timestepping_method() == 'euler':
|
|
1588
|
+
self.evolve_one_euler_step(yieldstep, self.finaltime)
|
|
1589
|
+
|
|
1590
|
+
elif self.get_timestepping_method() == 'rk2':
|
|
1591
|
+
self.evolve_one_rk2_step(yieldstep, self.finaltime)
|
|
1592
|
+
|
|
1593
|
+
elif self.get_timestepping_method() == 'rk3':
|
|
1594
|
+
self.evolve_one_rk3_step(yieldstep, self.finaltime)
|
|
1595
|
+
|
|
1596
|
+
#==========================================
|
|
1597
|
+
# Apply other fractional steps
|
|
1598
|
+
#==========================================
|
|
1599
|
+
self.apply_fractional_steps()
|
|
1600
|
+
|
|
1601
|
+
#==========================================
|
|
1602
|
+
# Centroid Values of variables should be ok,
|
|
1603
|
+
# so now setup quantites etc for output
|
|
1604
|
+
#==========================================
|
|
1605
|
+
|
|
1606
|
+
# Update time
|
|
1607
|
+
self.set_time(initial_time + self.timestep)
|
|
1608
|
+
|
|
1609
|
+
# Update ghosts
|
|
1610
|
+
self.update_ghosts()
|
|
1611
|
+
|
|
1612
|
+
# Update vertex and edge values
|
|
1613
|
+
self.distribute_to_vertices_and_edges()
|
|
1614
|
+
|
|
1615
|
+
# Update boundary values
|
|
1616
|
+
self.update_boundary()
|
|
1617
|
+
|
|
1618
|
+
# Update any other quantities that might be useful
|
|
1619
|
+
# self.update_other_quantities()
|
|
1620
|
+
|
|
1621
|
+
# Update extrema if necessary (for reporting)
|
|
1622
|
+
self.update_extrema()
|
|
1623
|
+
|
|
1624
|
+
self.number_of_steps += 1
|
|
1625
|
+
|
|
1626
|
+
if self._order_ == 1:
|
|
1627
|
+
self.number_of_first_order_steps += 1
|
|
1628
|
+
|
|
1629
|
+
|
|
1630
|
+
|
|
1631
|
+
# Yield results
|
|
1632
|
+
if self.finaltime is not None and self.get_time() >= self.finaltime-epsilon:
|
|
1633
|
+
|
|
1634
|
+
if self.get_time() > self.finaltime:
|
|
1635
|
+
# FIXME (Ole, 30 April 2006): Do we need this check?
|
|
1636
|
+
# Probably not (Ole, 18 September 2008).
|
|
1637
|
+
# Now changed to Exception.
|
|
1638
|
+
msg = ('WARNING (domain.py): time overshot finaltime. ')
|
|
1639
|
+
raise Exception(msg)
|
|
1640
|
+
|
|
1641
|
+
# Log and then Yield final time and stop
|
|
1642
|
+
self.set_time(self.finaltime)
|
|
1643
|
+
self.log_operator_timestepping_statistics()
|
|
1644
|
+
yield(self.get_time())
|
|
1645
|
+
break
|
|
1646
|
+
|
|
1647
|
+
# if we are at the next yield point
|
|
1648
|
+
if self.get_time() >= self.yieldtime:
|
|
1649
|
+
# Yield (intermediate) time and allow inspection of domain
|
|
1650
|
+
#if self.checkpoint is True:
|
|
1651
|
+
# self.store_checkpoint()
|
|
1652
|
+
# self.delete_old_checkpoints()
|
|
1653
|
+
|
|
1654
|
+
# Log and then Pass control on to outer loop for more specific actions
|
|
1655
|
+
self.log_operator_timestepping_statistics()
|
|
1656
|
+
yield(self.get_time())
|
|
1657
|
+
|
|
1658
|
+
# Reinitialise
|
|
1659
|
+
self.yieldtime += yieldstep # move to next yield
|
|
1660
|
+
self.recorded_min_timestep = self.evolve_max_timestep
|
|
1661
|
+
self.recorded_max_timestep = self.evolve_min_timestep
|
|
1662
|
+
self.number_of_steps = 0
|
|
1663
|
+
self.number_of_first_order_steps = 0
|
|
1664
|
+
self.max_speed = num.zeros(N, num.float)
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
def evolve_one_euler_step(self, yieldstep, finaltime):
|
|
1668
|
+
"""One Euler Time Step
|
|
1669
|
+
Q^{n+1} = E(h) Q^n
|
|
1670
|
+
|
|
1671
|
+
Assumes that centroid values have been extrapolated to vertices and edges
|
|
1672
|
+
"""
|
|
1673
|
+
|
|
1674
|
+
# Compute fluxes across each element edge
|
|
1675
|
+
self.compute_fluxes()
|
|
1676
|
+
|
|
1677
|
+
# Compute forcing terms
|
|
1678
|
+
self.compute_forcing_terms()
|
|
1679
|
+
|
|
1680
|
+
# Update timestep to fit yieldstep and finaltime
|
|
1681
|
+
self.update_timestep(yieldstep, finaltime)
|
|
1682
|
+
|
|
1683
|
+
if self.max_flux_update_frequency is not 1:
|
|
1684
|
+
# Update flux_update_frequency using the new timestep
|
|
1685
|
+
self.compute_flux_update_frequency()
|
|
1686
|
+
|
|
1687
|
+
# Update conserved quantities
|
|
1688
|
+
self.update_conserved_quantities()
|
|
1689
|
+
|
|
1690
|
+
# Update special conditions
|
|
1691
|
+
#self.update_special_conditions()
|
|
1692
|
+
|
|
1693
|
+
# Update ghosts
|
|
1694
|
+
#self.update_ghosts()
|
|
1695
|
+
|
|
1696
|
+
|
|
1697
|
+
|
|
1698
|
+
|
|
1699
|
+
def evolve_one_rk2_step(self, yieldstep, finaltime):
|
|
1700
|
+
"""One 2nd order RK timestep
|
|
1701
|
+
Q^{n+1} = 0.5 Q^n + 0.5 E(h)^2 Q^n
|
|
1702
|
+
"""
|
|
1703
|
+
|
|
1704
|
+
# Save initial initial conserved quantities values
|
|
1705
|
+
self.backup_conserved_quantities()
|
|
1706
|
+
|
|
1707
|
+
######
|
|
1708
|
+
# First euler step
|
|
1709
|
+
######
|
|
1710
|
+
|
|
1711
|
+
# Compute fluxes across each element edge
|
|
1712
|
+
self.compute_fluxes()
|
|
1713
|
+
|
|
1714
|
+
# Compute forcing terms
|
|
1715
|
+
self.compute_forcing_terms()
|
|
1716
|
+
|
|
1717
|
+
# Update timestep to fit yieldstep and finaltime
|
|
1718
|
+
self.update_timestep(yieldstep, finaltime)
|
|
1719
|
+
|
|
1720
|
+
# Update centroid values of conserved quantities
|
|
1721
|
+
self.update_conserved_quantities()
|
|
1722
|
+
|
|
1723
|
+
# Update special conditions
|
|
1724
|
+
#self.update_special_conditions()
|
|
1725
|
+
|
|
1726
|
+
# Update time
|
|
1727
|
+
self.set_time(self.get_time() + self.timestep)
|
|
1728
|
+
|
|
1729
|
+
# Update ghosts
|
|
1730
|
+
if self.ghost_layer_width < 4:
|
|
1731
|
+
self.update_ghosts()
|
|
1732
|
+
|
|
1733
|
+
# Update vertex and edge values
|
|
1734
|
+
self.distribute_to_vertices_and_edges()
|
|
1735
|
+
|
|
1736
|
+
# Update boundary values
|
|
1737
|
+
self.update_boundary()
|
|
1738
|
+
|
|
1739
|
+
######
|
|
1740
|
+
# Second Euler step using the same timestep
|
|
1741
|
+
# calculated in the first step. Might lead to
|
|
1742
|
+
# stability problems but we have not seen any
|
|
1743
|
+
# example.
|
|
1744
|
+
######
|
|
1745
|
+
|
|
1746
|
+
# Compute fluxes across each element edge
|
|
1747
|
+
self.compute_fluxes()
|
|
1748
|
+
|
|
1749
|
+
# Compute forcing terms
|
|
1750
|
+
self.compute_forcing_terms()
|
|
1751
|
+
|
|
1752
|
+
# Update conserved quantities
|
|
1753
|
+
self.update_conserved_quantities()
|
|
1754
|
+
|
|
1755
|
+
######
|
|
1756
|
+
# Combine initial and final values
|
|
1757
|
+
# of conserved quantities and cleanup
|
|
1758
|
+
######
|
|
1759
|
+
|
|
1760
|
+
# Combine steps
|
|
1761
|
+
self.saxpy_conserved_quantities(0.5, 0.5)
|
|
1762
|
+
|
|
1763
|
+
# Update special conditions
|
|
1764
|
+
#self.update_special_conditions()
|
|
1765
|
+
|
|
1766
|
+
# Update ghosts
|
|
1767
|
+
#self.update_ghosts()
|
|
1768
|
+
|
|
1769
|
+
|
|
1770
|
+
def evolve_one_rk3_step(self, yieldstep, finaltime):
|
|
1771
|
+
"""One 3rd order RK timestep
|
|
1772
|
+
Q^(1) = 3/4 Q^n + 1/4 E(h)^2 Q^n (at time t^n + h/2)
|
|
1773
|
+
Q^{n+1} = 1/3 Q^n + 2/3 E(h) Q^(1) (at time t^{n+1})
|
|
1774
|
+
"""
|
|
1775
|
+
|
|
1776
|
+
# Save initial initial conserved quantities values
|
|
1777
|
+
self.backup_conserved_quantities()
|
|
1778
|
+
|
|
1779
|
+
initial_time = self.get_time()
|
|
1780
|
+
|
|
1781
|
+
######
|
|
1782
|
+
# First euler step
|
|
1783
|
+
######
|
|
1784
|
+
|
|
1785
|
+
# Compute fluxes across each element edge
|
|
1786
|
+
self.compute_fluxes()
|
|
1787
|
+
|
|
1788
|
+
# Compute forcing terms
|
|
1789
|
+
self.compute_forcing_terms()
|
|
1790
|
+
|
|
1791
|
+
# Update timestep to fit yieldstep and finaltime
|
|
1792
|
+
self.update_timestep(yieldstep, finaltime)
|
|
1793
|
+
|
|
1794
|
+
# Update conserved quantities
|
|
1795
|
+
self.update_conserved_quantities()
|
|
1796
|
+
|
|
1797
|
+
# Update special conditions
|
|
1798
|
+
#self.update_special_conditions()
|
|
1799
|
+
|
|
1800
|
+
# Update time
|
|
1801
|
+
self.set_time(self.time + self.timestep)
|
|
1802
|
+
|
|
1803
|
+
# Update ghosts
|
|
1804
|
+
self.update_ghosts()
|
|
1805
|
+
|
|
1806
|
+
# Update vertex and edge values
|
|
1807
|
+
self.distribute_to_vertices_and_edges()
|
|
1808
|
+
|
|
1809
|
+
# Update boundary values
|
|
1810
|
+
self.update_boundary()
|
|
1811
|
+
|
|
1812
|
+
######
|
|
1813
|
+
# Second Euler step using the same timestep
|
|
1814
|
+
# calculated in the first step. Might lead to
|
|
1815
|
+
# stability problems but we have not seen any
|
|
1816
|
+
# example.
|
|
1817
|
+
######
|
|
1818
|
+
|
|
1819
|
+
# Compute fluxes across each element edge
|
|
1820
|
+
self.compute_fluxes()
|
|
1821
|
+
|
|
1822
|
+
# Compute forcing terms
|
|
1823
|
+
self.compute_forcing_terms()
|
|
1824
|
+
|
|
1825
|
+
# Update conserved quantities
|
|
1826
|
+
self.update_conserved_quantities()
|
|
1827
|
+
|
|
1828
|
+
######
|
|
1829
|
+
# Combine steps to obtain intermediate
|
|
1830
|
+
# solution at time t^n + 0.5 h
|
|
1831
|
+
######
|
|
1832
|
+
|
|
1833
|
+
# Combine steps
|
|
1834
|
+
self.saxpy_conserved_quantities(0.25, 0.75)
|
|
1835
|
+
|
|
1836
|
+
# Update special conditions
|
|
1837
|
+
#self.update_special_conditions()
|
|
1838
|
+
|
|
1839
|
+
# Set substep time
|
|
1840
|
+
self.set_time(initial_time + self.timestep*0.5)
|
|
1841
|
+
|
|
1842
|
+
# Update ghosts
|
|
1843
|
+
self.update_ghosts()
|
|
1844
|
+
|
|
1845
|
+
# Update vertex and edge values
|
|
1846
|
+
self.distribute_to_vertices_and_edges()
|
|
1847
|
+
|
|
1848
|
+
# Update boundary values
|
|
1849
|
+
self.update_boundary()
|
|
1850
|
+
|
|
1851
|
+
######
|
|
1852
|
+
# Third Euler step
|
|
1853
|
+
######
|
|
1854
|
+
|
|
1855
|
+
# Compute fluxes across each element edge
|
|
1856
|
+
self.compute_fluxes()
|
|
1857
|
+
|
|
1858
|
+
# Compute forcing terms
|
|
1859
|
+
self.compute_forcing_terms()
|
|
1860
|
+
|
|
1861
|
+
# Update conserved quantities
|
|
1862
|
+
self.update_conserved_quantities()
|
|
1863
|
+
|
|
1864
|
+
######
|
|
1865
|
+
# Combine final and initial values
|
|
1866
|
+
# and cleanup
|
|
1867
|
+
######
|
|
1868
|
+
|
|
1869
|
+
# Combine steps
|
|
1870
|
+
self.saxpy_conserved_quantities(2.0/3.0, 1.0/3.0)
|
|
1871
|
+
|
|
1872
|
+
|
|
1873
|
+
# Update special conditions
|
|
1874
|
+
#self.update_special_conditions()
|
|
1875
|
+
|
|
1876
|
+
|
|
1877
|
+
# Set new time
|
|
1878
|
+
self.set_time(initial_time + self.timestep)
|
|
1879
|
+
|
|
1880
|
+
# Update ghosts
|
|
1881
|
+
#self.update_ghosts()
|
|
1882
|
+
|
|
1883
|
+
|
|
1884
|
+
def evolve_to_end(self, finaltime=1.0):
|
|
1885
|
+
"""Iterate evolve all the way to the end."""
|
|
1886
|
+
|
|
1887
|
+
for _ in self.evolve(yieldstep=None, finaltime=finaltime):
|
|
1888
|
+
pass
|
|
1889
|
+
|
|
1890
|
+
def backup_conserved_quantities(self):
|
|
1891
|
+
|
|
1892
|
+
# Backup conserved_quantities centroid values
|
|
1893
|
+
for name in self.conserved_quantities:
|
|
1894
|
+
Q = self.quantities[name]
|
|
1895
|
+
Q.backup_centroid_values()
|
|
1896
|
+
|
|
1897
|
+
def saxpy_conserved_quantities(self, a, b):
|
|
1898
|
+
|
|
1899
|
+
# Backup conserved_quantities centroid values
|
|
1900
|
+
for name in self.conserved_quantities:
|
|
1901
|
+
Q = self.quantities[name]
|
|
1902
|
+
Q.saxpy_centroid_values(a, b)
|
|
1903
|
+
|
|
1904
|
+
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
def conserved_values_to_evolved_values(self, q_cons, q_evol):
|
|
1908
|
+
"""Needs to be overridden by Domain subclass
|
|
1909
|
+
"""
|
|
1910
|
+
|
|
1911
|
+
if len(q_cons) == len(q_evol):
|
|
1912
|
+
q_evol[:] = q_cons
|
|
1913
|
+
else:
|
|
1914
|
+
msg = 'Method conserved_values_to_evolved_values must be overridden'
|
|
1915
|
+
msg += ' by Domain subclass'
|
|
1916
|
+
raise Exception(msg)
|
|
1917
|
+
|
|
1918
|
+
return q_evol
|
|
1919
|
+
|
|
1920
|
+
def update_boundary_old(self):
|
|
1921
|
+
"""Go through list of boundary objects and update boundary values
|
|
1922
|
+
for all conserved quantities on boundary.
|
|
1923
|
+
It is assumed that the ordering of conserved quantities is
|
|
1924
|
+
consistent between the domain and the boundary object, i.e.
|
|
1925
|
+
the jth element of vector q must correspond to the jth conserved
|
|
1926
|
+
quantity in domain.
|
|
1927
|
+
"""
|
|
1928
|
+
|
|
1929
|
+
# FIXME: Update only those that change (if that can be worked out)
|
|
1930
|
+
# FIXME: Boundary objects should not include ghost nodes.
|
|
1931
|
+
for i, ((vol_id, edge_id), B) in enumerate(self.boundary_objects):
|
|
1932
|
+
if B is None:
|
|
1933
|
+
log.critical('WARNING: Ignored boundary segment (None)')
|
|
1934
|
+
else:
|
|
1935
|
+
q_bdry = B.evaluate(vol_id, edge_id)
|
|
1936
|
+
|
|
1937
|
+
if len(q_bdry) == len(self.evolved_quantities):
|
|
1938
|
+
# conserved and evolved quantities are the same
|
|
1939
|
+
q_evol = q_bdry
|
|
1940
|
+
elif len(q_bdry) == len(self.conserved_quantities):
|
|
1941
|
+
# boundary just returns conserved quantities
|
|
1942
|
+
# Need to calculate all the evolved quantities
|
|
1943
|
+
# Use default conversion
|
|
1944
|
+
|
|
1945
|
+
q_evol = self.get_evolved_quantities(vol_id, edge = edge_id)
|
|
1946
|
+
|
|
1947
|
+
q_evol = self.conserved_values_to_evolved_values \
|
|
1948
|
+
(q_bdry, q_evol)
|
|
1949
|
+
else:
|
|
1950
|
+
msg = 'Boundary must return array of either conserved'
|
|
1951
|
+
msg += ' or evolved quantities'
|
|
1952
|
+
raise Exception(msg)
|
|
1953
|
+
|
|
1954
|
+
for j, name in enumerate(self.evolved_quantities):
|
|
1955
|
+
Q = self.quantities[name]
|
|
1956
|
+
Q.boundary_values[i] = q_evol[j]
|
|
1957
|
+
|
|
1958
|
+
|
|
1959
|
+
def update_boundary_old_2(self):
|
|
1960
|
+
"""Go through list of boundary objects and update boundary values
|
|
1961
|
+
for all conserved quantities on boundary.
|
|
1962
|
+
It is assumed that the ordering of conserved quantities is
|
|
1963
|
+
consistent between the domain and the boundary object, i.e.
|
|
1964
|
+
the jth element of vector q must correspond to the jth conserved
|
|
1965
|
+
quantity in domain.
|
|
1966
|
+
"""
|
|
1967
|
+
|
|
1968
|
+
|
|
1969
|
+
for i in range(self.boundary_length):
|
|
1970
|
+
vol_id = self.boundary_cells[i]
|
|
1971
|
+
edge_id = self.boundary_edges[i]
|
|
1972
|
+
blah, B = self.boundary_objects[i]
|
|
1973
|
+
|
|
1974
|
+
if B is None:
|
|
1975
|
+
log.critical('WARNING: Ignored boundary segment (None)')
|
|
1976
|
+
else:
|
|
1977
|
+
q_bdry = B.evaluate(vol_id, edge_id)
|
|
1978
|
+
|
|
1979
|
+
if len(q_bdry) == len(self.evolved_quantities):
|
|
1980
|
+
# conserved and evolved quantities are the same
|
|
1981
|
+
q_evol = q_bdry
|
|
1982
|
+
elif len(q_bdry) == len(self.conserved_quantities):
|
|
1983
|
+
# boundary just returns conserved quantities
|
|
1984
|
+
# Need to calculate all the evolved quantities
|
|
1985
|
+
# Use default conversion
|
|
1986
|
+
|
|
1987
|
+
q_evol = self.get_evolved_quantities(vol_id, edge = edge_id)
|
|
1988
|
+
|
|
1989
|
+
q_evol = self.conserved_values_to_evolved_values \
|
|
1990
|
+
(q_bdry, q_evol)
|
|
1991
|
+
else:
|
|
1992
|
+
msg = 'Boundary must return array of either conserved'
|
|
1993
|
+
msg += ' or evolved quantities'
|
|
1994
|
+
raise Exception(msg)
|
|
1995
|
+
|
|
1996
|
+
for j, name in enumerate(self.evolved_quantities):
|
|
1997
|
+
Q = self.quantities[name]
|
|
1998
|
+
Q.boundary_values[i] = q_evol[j]
|
|
1999
|
+
|
|
2000
|
+
|
|
2001
|
+
|
|
2002
|
+
def update_boundary(self):
|
|
2003
|
+
"""Go through list of boundary objects and update boundary values
|
|
2004
|
+
for all conserved quantities on boundary.
|
|
2005
|
+
It is assumed that the ordering of conserved quantities is
|
|
2006
|
+
consistent between the domain and the boundary object, i.e.
|
|
2007
|
+
the jth element of vector q must correspond to the jth conserved
|
|
2008
|
+
quantity in domain.
|
|
2009
|
+
"""
|
|
2010
|
+
|
|
2011
|
+
for tag in self.tag_boundary_cells:
|
|
2012
|
+
|
|
2013
|
+
#print tag
|
|
2014
|
+
|
|
2015
|
+
B = self.boundary_map[tag]
|
|
2016
|
+
|
|
2017
|
+
if B is None:
|
|
2018
|
+
continue
|
|
2019
|
+
|
|
2020
|
+
boundary_segment_edges = self.tag_boundary_cells[tag]
|
|
2021
|
+
|
|
2022
|
+
B.evaluate_segment(self, boundary_segment_edges)
|
|
2023
|
+
|
|
2024
|
+
|
|
2025
|
+
def compute_fluxes(self):
|
|
2026
|
+
msg = 'Method compute_fluxes must be overridden by Domain subclass'
|
|
2027
|
+
raise Exception(msg)
|
|
2028
|
+
|
|
2029
|
+
|
|
2030
|
+
def apply_fractional_steps(self):
|
|
2031
|
+
|
|
2032
|
+
for operator in self.fractional_step_operators:
|
|
2033
|
+
operator()
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
def log_operator_timestepping_statistics(self):
|
|
2037
|
+
for operator in self.fractional_step_operators:
|
|
2038
|
+
operator.log_timestepping_statistics()
|
|
2039
|
+
|
|
2040
|
+
def print_operator_timestepping_statistics(self):
|
|
2041
|
+
for operator in self.fractional_step_operators:
|
|
2042
|
+
operator.print_timestepping_statistics()
|
|
2043
|
+
|
|
2044
|
+
def print_operator_statistics(self):
|
|
2045
|
+
for operator in self.fractional_step_operators:
|
|
2046
|
+
operator.print_statistics()
|
|
2047
|
+
|
|
2048
|
+
|
|
2049
|
+
def set_fractional_step_operator(self,operator):
|
|
2050
|
+
|
|
2051
|
+
self.fractional_step_operators.append(operator)
|
|
2052
|
+
|
|
2053
|
+
def update_timestep(self, yieldstep, finaltime):
|
|
2054
|
+
|
|
2055
|
+
# Protect against degenerate timesteps arising from isolated
|
|
2056
|
+
# triangles
|
|
2057
|
+
self.apply_protection_against_isolated_degenerate_timesteps()
|
|
2058
|
+
|
|
2059
|
+
# self.timestep is calculated from speed of characteristics
|
|
2060
|
+
# Apply CFL condition here
|
|
2061
|
+
timestep = min(self.CFL*self.flux_timestep, self.evolve_max_timestep)
|
|
2062
|
+
|
|
2063
|
+
# Record maximal and minimal values of timestep for reporting
|
|
2064
|
+
self.recorded_max_timestep = max(timestep, self.recorded_max_timestep)
|
|
2065
|
+
self.recorded_min_timestep = min(timestep, self.recorded_min_timestep)
|
|
2066
|
+
|
|
2067
|
+
# Protect against degenerate time steps
|
|
2068
|
+
if timestep < self.evolve_min_timestep:
|
|
2069
|
+
# Number of consecutive small steps taken b4 taking action
|
|
2070
|
+
self.smallsteps += 1
|
|
2071
|
+
|
|
2072
|
+
if self.smallsteps > self.max_smallsteps:
|
|
2073
|
+
self.smallsteps = 0 # Reset
|
|
2074
|
+
|
|
2075
|
+
if self._order_ == 1:
|
|
2076
|
+
msg = 'WARNING: Too small timestep %.16f reached ' \
|
|
2077
|
+
% timestep
|
|
2078
|
+
msg += 'even after %d steps of 1 order scheme' \
|
|
2079
|
+
% self.max_smallsteps
|
|
2080
|
+
log.critical(msg)
|
|
2081
|
+
timestep = self.evolve_min_timestep # Try enforce min_step
|
|
2082
|
+
|
|
2083
|
+
stats = self.timestepping_statistics(track_speeds=True)
|
|
2084
|
+
log.critical(stats)
|
|
2085
|
+
|
|
2086
|
+
raise Exception(msg)
|
|
2087
|
+
else:
|
|
2088
|
+
# Try to overcome situation by switching to 1 order
|
|
2089
|
+
self._order_ = 1
|
|
2090
|
+
else:
|
|
2091
|
+
self.smallsteps = 0
|
|
2092
|
+
if self._order_ == 1 and self.default_order == 2:
|
|
2093
|
+
self._order_ = 2
|
|
2094
|
+
|
|
2095
|
+
# Ensure that final time is not exceeded
|
|
2096
|
+
if finaltime is not None and self.get_time() + timestep > finaltime :
|
|
2097
|
+
timestep = finaltime - self.get_time()
|
|
2098
|
+
|
|
2099
|
+
# Ensure that model time is aligned with yieldsteps
|
|
2100
|
+
if self.get_time() + timestep > self.yieldtime:
|
|
2101
|
+
timestep = self.yieldtime - self.get_time()
|
|
2102
|
+
|
|
2103
|
+
self.timestep = timestep
|
|
2104
|
+
|
|
2105
|
+
def compute_forcing_terms(self):
|
|
2106
|
+
"""If there are any forcing functions driving the system
|
|
2107
|
+
they should be defined in Domain subclass and appended to
|
|
2108
|
+
the list self.forcing_terms
|
|
2109
|
+
"""
|
|
2110
|
+
|
|
2111
|
+
# The parameter self.flux_timestep should be updated
|
|
2112
|
+
# by the forcing_terms to ensure stability
|
|
2113
|
+
|
|
2114
|
+
for f in self.forcing_terms:
|
|
2115
|
+
f(self)
|
|
2116
|
+
|
|
2117
|
+
|
|
2118
|
+
def update_conserved_quantities(self):
|
|
2119
|
+
"""Update vectors of conserved quantities using previously
|
|
2120
|
+
computed fluxes and specified forcing functions.
|
|
2121
|
+
"""
|
|
2122
|
+
|
|
2123
|
+
N = len(self) # Number_of_triangles
|
|
2124
|
+
d = len(self.conserved_quantities)
|
|
2125
|
+
|
|
2126
|
+
timestep = self.timestep
|
|
2127
|
+
|
|
2128
|
+
#print 'Generic Update conserved quantities'
|
|
2129
|
+
# Update conserved_quantities
|
|
2130
|
+
for name in self.conserved_quantities:
|
|
2131
|
+
Q = self.quantities[name]
|
|
2132
|
+
Q.update(timestep)
|
|
2133
|
+
|
|
2134
|
+
|
|
2135
|
+
|
|
2136
|
+
|
|
2137
|
+
# Note that Q.explicit_update is reset by compute_fluxes
|
|
2138
|
+
# Where is Q.semi_implicit_update reset?
|
|
2139
|
+
# It is reset in quantity_ext.c
|
|
2140
|
+
|
|
2141
|
+
def update_ghosts(self):
|
|
2142
|
+
# We must send the information from the full cells and
|
|
2143
|
+
# receive the information for the ghost cells
|
|
2144
|
+
# We have a list with ghosts expecting updates
|
|
2145
|
+
|
|
2146
|
+
#Update of ghost cells
|
|
2147
|
+
iproc = self.processor
|
|
2148
|
+
if self.full_send_dict.has_key(iproc):
|
|
2149
|
+
|
|
2150
|
+
# now store full as local id, global id, value
|
|
2151
|
+
Idf = self.full_send_dict[iproc][0]
|
|
2152
|
+
|
|
2153
|
+
# now store ghost as local id, global id, value
|
|
2154
|
+
Idg = self.ghost_recv_dict[iproc][0]
|
|
2155
|
+
|
|
2156
|
+
for i, q in enumerate(self.conserved_quantities):
|
|
2157
|
+
Q_cv = self.quantities[q].centroid_values
|
|
2158
|
+
num.put(Q_cv, Idg, num.take(Q_cv, Idf, axis=0))
|
|
2159
|
+
|
|
2160
|
+
# def update_special_conditions(self):
|
|
2161
|
+
# """There may be a need to change the values of the conserved
|
|
2162
|
+
# quantities to satisfy special conditions at the very lowest level
|
|
2163
|
+
# the fluid flow calculation
|
|
2164
|
+
# """
|
|
2165
|
+
#
|
|
2166
|
+
# pass
|
|
2167
|
+
|
|
2168
|
+
|
|
2169
|
+
def update_other_quantities(self):
|
|
2170
|
+
""" There may be a need to calculates some of the other quantities
|
|
2171
|
+
based on the new values of conserved quantities
|
|
2172
|
+
"""
|
|
2173
|
+
|
|
2174
|
+
pass
|
|
2175
|
+
|
|
2176
|
+
def distribute_to_vertices_and_edges(self):
|
|
2177
|
+
"""Extrapolate conserved quantities from centroid to
|
|
2178
|
+
vertices and edge-midpoints for each volume
|
|
2179
|
+
|
|
2180
|
+
Default implementation is straight first order,
|
|
2181
|
+
i.e. constant values throughout each element and
|
|
2182
|
+
no reference to non-conserved quantities.
|
|
2183
|
+
"""
|
|
2184
|
+
|
|
2185
|
+
for name in self.conserved_quantities:
|
|
2186
|
+
Q = self.quantities[name]
|
|
2187
|
+
if self._order_ == 1:
|
|
2188
|
+
Q.extrapolate_first_order()
|
|
2189
|
+
elif self._order_ == 2:
|
|
2190
|
+
Q.extrapolate_second_order()
|
|
2191
|
+
else:
|
|
2192
|
+
raise Exception('Unknown order: %s' % str(self._order_))
|
|
2193
|
+
|
|
2194
|
+
|
|
2195
|
+
def centroid_norm(self, quantity, normfunc):
|
|
2196
|
+
"""Calculate the norm of the centroid values of a specific quantity,
|
|
2197
|
+
using normfunc.
|
|
2198
|
+
|
|
2199
|
+
normfunc should take a list to a float.
|
|
2200
|
+
|
|
2201
|
+
common normfuncs are provided in the module utilities.norms
|
|
2202
|
+
"""
|
|
2203
|
+
|
|
2204
|
+
return normfunc(self.quantities[quantity].centroid_values)
|
|
2205
|
+
|
|
2206
|
+
|
|
2207
|
+
|
|
2208
|
+
def apply_protection_against_isolated_degenerate_timesteps(self):
|
|
2209
|
+
|
|
2210
|
+
# FIXME (Steve): This should be in shallow_water as it assumes x and y
|
|
2211
|
+
# momentum
|
|
2212
|
+
if self.protect_against_isolated_degenerate_timesteps is False:
|
|
2213
|
+
return
|
|
2214
|
+
|
|
2215
|
+
# FIXME (Ole): Make this configurable
|
|
2216
|
+
if num.max(self.max_speed) < 10.0:
|
|
2217
|
+
return
|
|
2218
|
+
|
|
2219
|
+
# Setup 10 bins for speed histogram
|
|
2220
|
+
from anuga.utilities.numerical_tools import histogram, create_bins
|
|
2221
|
+
|
|
2222
|
+
bins = create_bins(self.max_speed, 10)
|
|
2223
|
+
hist = histogram(self.max_speed, bins)
|
|
2224
|
+
|
|
2225
|
+
# Look for characteristic signature
|
|
2226
|
+
if len(hist) > 1 and hist[-1] > 0 and \
|
|
2227
|
+
hist[4] == hist[5] == hist[6] == hist[7] == hist[8] == 0:
|
|
2228
|
+
# Danger of isolated degenerate triangles
|
|
2229
|
+
|
|
2230
|
+
# Find triangles in last bin
|
|
2231
|
+
# FIXME - speed up using numeric package
|
|
2232
|
+
d = 0
|
|
2233
|
+
for i in range(self.number_of_triangles):
|
|
2234
|
+
if self.max_speed[i] > bins[-1]:
|
|
2235
|
+
msg = 'Time=%f: Ignoring isolated high ' % self.get_time()
|
|
2236
|
+
msg += 'speed triangle '
|
|
2237
|
+
msg += '#%d of %d with max speed=%f' \
|
|
2238
|
+
% (i, self.number_of_triangles, self.max_speed[i])
|
|
2239
|
+
|
|
2240
|
+
self.get_quantity('xmomentum').\
|
|
2241
|
+
set_values(0.0, indices=[i])
|
|
2242
|
+
self.get_quantity('ymomentum').\
|
|
2243
|
+
set_values(0.0, indices=[i])
|
|
2244
|
+
self.max_speed[i]=0.0
|
|
2245
|
+
d += 1
|
|
2246
|
+
|
|
2247
|
+
|
|
2248
|
+
######
|
|
2249
|
+
# Initialise module
|
|
2250
|
+
######
|
|
2251
|
+
|
|
2252
|
+
# Optimisation with psyco
|
|
2253
|
+
#from anuga.config import use_psyco
|
|
2254
|
+
|
|
2255
|
+
#if use_psyco:
|
|
2256
|
+
#try:
|
|
2257
|
+
#import psyco
|
|
2258
|
+
#except:
|
|
2259
|
+
#import os
|
|
2260
|
+
#if os.name == 'posix' and os.uname()[4] in ['x86_64', 'ia64']:
|
|
2261
|
+
#pass
|
|
2262
|
+
## Psyco isn't supported on 64 bit systems, but it doesn't matter
|
|
2263
|
+
#else:
|
|
2264
|
+
#log.critical('WARNING: psyco (speedup) could not be imported, '
|
|
2265
|
+
#'you may want to consider installing it')
|
|
2266
|
+
#else:
|
|
2267
|
+
#psyco.bind(Generic_Domain.update_boundary)
|
|
2268
|
+
##psyco.bind(Domain.update_timestep) # Not worth it
|
|
2269
|
+
#psyco.bind(Generic_Domain.update_conserved_quantities)
|
|
2270
|
+
#psyco.bind(Generic_Domain.distribute_to_vertices_and_edges)
|
|
2271
|
+
|
|
2272
|
+
|
|
2273
|
+
if __name__ == "__main__":
|
|
2274
|
+
pass
|