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,1488 @@
|
|
|
1
|
+
"""Classes implementing general 2D triangular mesh with neighbour structure.
|
|
2
|
+
|
|
3
|
+
This structure is purely geometrical. Anything relating to quantities
|
|
4
|
+
or timestepping is implemented in subclass domain.py.
|
|
5
|
+
|
|
6
|
+
Ole Nielsen, Stephen Roberts, Duncan Gray, Christopher Zoppou
|
|
7
|
+
Geoscience Australia, 2004
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from general_mesh import General_mesh
|
|
11
|
+
from anuga.caching import cache
|
|
12
|
+
import anuga.utilities.log as log
|
|
13
|
+
|
|
14
|
+
from math import pi, sqrt
|
|
15
|
+
|
|
16
|
+
import numpy as num
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Mesh(General_mesh):
|
|
20
|
+
"""Collection of triangular elements (purely geometric)
|
|
21
|
+
|
|
22
|
+
A triangular element is defined in terms of three vertex ids,
|
|
23
|
+
ordered counter clock-wise,
|
|
24
|
+
each corresponding to a given coordinate set.
|
|
25
|
+
Vertices from different elements can point to the same
|
|
26
|
+
coordinate set.
|
|
27
|
+
|
|
28
|
+
Coordinate sets are implemented as an N x 2 numeric array containing
|
|
29
|
+
x and y coordinates.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
To instantiate:
|
|
33
|
+
Mesh(coordinates, triangles)
|
|
34
|
+
|
|
35
|
+
where
|
|
36
|
+
|
|
37
|
+
coordinates is either a list of 2-tuples or an Mx2 numeric array of
|
|
38
|
+
floats representing all x, y coordinates in the mesh.
|
|
39
|
+
|
|
40
|
+
triangles is either a list of 3-tuples or an Nx3 numeric array of
|
|
41
|
+
integers representing indices of all vertices in the mesh.
|
|
42
|
+
Each vertex is identified by its index i in [0, M-1].
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
a = [0.0, 0.0]
|
|
47
|
+
b = [0.0, 2.0]
|
|
48
|
+
c = [2.0,0.0]
|
|
49
|
+
e = [2.0, 2.0]
|
|
50
|
+
|
|
51
|
+
points = [a, b, c, e]
|
|
52
|
+
triangles = [ [1,0,2], [1,2,3] ] #bac, bce
|
|
53
|
+
mesh = Mesh(points, triangles)
|
|
54
|
+
|
|
55
|
+
#creates two triangles: bac and bce
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
Mesh takes the optional third argument boundary which is a
|
|
59
|
+
dictionary mapping from (element_id, edge_id) to boundary tag.
|
|
60
|
+
The default value is None which will assign the default_boundary_tag
|
|
61
|
+
as specified in config.py to all boundary edges.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
#FIXME: Maybe rename coordinates to points (as in a poly file)
|
|
65
|
+
#But keep 'vertex_coordinates'
|
|
66
|
+
|
|
67
|
+
#FIXME: Put in check for angles less than a set minimum
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def __init__(self, coordinates, triangles,
|
|
71
|
+
boundary=None,
|
|
72
|
+
tagged_elements=None,
|
|
73
|
+
geo_reference=None,
|
|
74
|
+
use_inscribed_circle=False,
|
|
75
|
+
verbose=False):
|
|
76
|
+
"""
|
|
77
|
+
Build Mesh
|
|
78
|
+
|
|
79
|
+
Input x,y coordinates (sequence of 2-tuples or Mx2 numeric array of floats)
|
|
80
|
+
triangles (sequence of 3-tuples or Nx3 numeric array of non-negative integers).
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
General_mesh.__init__(self, coordinates, triangles,
|
|
87
|
+
geo_reference=geo_reference,
|
|
88
|
+
use_inscribed_circle=use_inscribed_circle,
|
|
89
|
+
verbose=verbose)
|
|
90
|
+
|
|
91
|
+
if verbose: log.critical('Mesh: Initialising')
|
|
92
|
+
|
|
93
|
+
N = len(self) #Number_of_triangles
|
|
94
|
+
|
|
95
|
+
# Allocate arrays for neighbour data
|
|
96
|
+
|
|
97
|
+
self.neighbours = -1*num.ones((N, 3), num.int)
|
|
98
|
+
self.neighbour_edges = -1*num.ones((N, 3), num.int)
|
|
99
|
+
self.number_of_boundaries = num.zeros(N, num.int)
|
|
100
|
+
self.surrogate_neighbours = num.zeros((N, 3), num.int)
|
|
101
|
+
|
|
102
|
+
#Get x,y coordinates for all triangles and store
|
|
103
|
+
V = self.vertex_coordinates # Relative coordinates
|
|
104
|
+
|
|
105
|
+
# #Initialise each triangle
|
|
106
|
+
# if verbose: log.critical('Mesh: Computing centroids and radii')
|
|
107
|
+
# for i in range(N):
|
|
108
|
+
# if verbose and i % ((N+10)/10) == 0: log.critical('(%d/%d)' % (i, N))
|
|
109
|
+
#
|
|
110
|
+
# x0, y0 = V[3*i, :]
|
|
111
|
+
# x1, y1 = V[3*i+1, :]
|
|
112
|
+
# x2, y2 = V[3*i+2, :]
|
|
113
|
+
#
|
|
114
|
+
# #x0 = V[i, 0]; y0 = V[i, 1]
|
|
115
|
+
# #x1 = V[i, 2]; y1 = V[i, 3]
|
|
116
|
+
# #x2 = V[i, 4]; y2 = V[i, 5]
|
|
117
|
+
#
|
|
118
|
+
# #Compute centroid
|
|
119
|
+
# centroid = num.array([(x0 + x1 + x2)/3, (y0 + y1 + y2)/3], num.float)
|
|
120
|
+
# self.centroid_coordinates[i] = centroid
|
|
121
|
+
#
|
|
122
|
+
#
|
|
123
|
+
# if self.use_inscribed_circle == False:
|
|
124
|
+
# #OLD code. Computed radii may exceed that of an
|
|
125
|
+
# #inscribed circle
|
|
126
|
+
#
|
|
127
|
+
# #Midpoints
|
|
128
|
+
# m0 = num.array([(x1 + x2)/2, (y1 + y2)/2], num.float)
|
|
129
|
+
# m1 = num.array([(x0 + x2)/2, (y0 + y2)/2], num.float)
|
|
130
|
+
# m2 = num.array([(x1 + x0)/2, (y1 + y0)/2], num.float)
|
|
131
|
+
#
|
|
132
|
+
# #The radius is the distance from the centroid of
|
|
133
|
+
# #a triangle to the midpoint of the side of the triangle
|
|
134
|
+
# #closest to the centroid
|
|
135
|
+
# d0 = num.sqrt(num.sum( (centroid-m0)**2 ))
|
|
136
|
+
# d1 = num.sqrt(num.sum( (centroid-m1)**2 ))
|
|
137
|
+
# d2 = num.sqrt(num.sum( (centroid-m2)**2 ))
|
|
138
|
+
#
|
|
139
|
+
# self.radii[i] = min(d0, d1, d2)
|
|
140
|
+
#
|
|
141
|
+
# else:
|
|
142
|
+
# #NEW code added by Peter Row. True radius
|
|
143
|
+
# #of inscribed circle is computed
|
|
144
|
+
#
|
|
145
|
+
# a = num.sqrt((x0-x1)**2+(y0-y1)**2)
|
|
146
|
+
# b = num.sqrt((x1-x2)**2+(y1-y2)**2)
|
|
147
|
+
# c = num.sqrt((x2-x0)**2+(y2-y0)**2)
|
|
148
|
+
#
|
|
149
|
+
# self.radii[i]=2.0*self.areas[i]/(a+b+c)
|
|
150
|
+
#
|
|
151
|
+
#
|
|
152
|
+
# #Initialise Neighbours (-1 means that it is a boundary neighbour)
|
|
153
|
+
# self.neighbours[i, :] = [-1, -1, -1]
|
|
154
|
+
#
|
|
155
|
+
# #Initialise edge ids of neighbours
|
|
156
|
+
# #In case of boundaries this slot is not used
|
|
157
|
+
# self.neighbour_edges[i, :] = [-1, -1, -1]
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
#Build neighbour structure
|
|
161
|
+
if verbose: log.critical('Mesh: Building neigbour structure')
|
|
162
|
+
self.build_neighbour_structure()
|
|
163
|
+
|
|
164
|
+
#Build surrogate neighbour structure
|
|
165
|
+
if verbose: log.critical('Mesh: Building surrogate neigbour structure')
|
|
166
|
+
self.build_surrogate_neighbour_structure()
|
|
167
|
+
|
|
168
|
+
#Build boundary dictionary mapping (id, edge) to symbolic tags
|
|
169
|
+
if verbose: log.critical('Mesh: Building boundary dictionary')
|
|
170
|
+
self.build_boundary_dictionary(boundary)
|
|
171
|
+
|
|
172
|
+
#Update boundary_enumeration
|
|
173
|
+
self.build_boundary_neighbours()
|
|
174
|
+
|
|
175
|
+
#Build tagged element dictionary mapping (tag) to array of elements
|
|
176
|
+
if verbose: log.critical('Mesh: Building tagged elements dictionary')
|
|
177
|
+
self.build_tagged_elements_dictionary(tagged_elements)
|
|
178
|
+
|
|
179
|
+
# Build a list of vertices that are not connected to any triangles
|
|
180
|
+
self.lone_vertices = []
|
|
181
|
+
#Check that all vertices have been registered
|
|
182
|
+
for node, count in enumerate(self.number_of_triangles_per_node):
|
|
183
|
+
#msg = 'Node %d does not belong to an element.' %node
|
|
184
|
+
#assert count > 0, msg
|
|
185
|
+
if count == 0:
|
|
186
|
+
self.lone_vertices.append(node)
|
|
187
|
+
|
|
188
|
+
#Update boundary indices FIXME: OBSOLETE
|
|
189
|
+
#self.build_boundary_structure()
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
#FIXME check integrity?
|
|
194
|
+
if verbose: log.critical('Mesh: Done')
|
|
195
|
+
if verbose: log.timingInfo("finishMesh, '%s'" % log.CurrentDateTime())
|
|
196
|
+
if verbose: log.resource_usage_timing(log.logging.INFO, "finishMesh_")
|
|
197
|
+
|
|
198
|
+
def __repr__(self):
|
|
199
|
+
return General_mesh.__repr__(self) + ', %d boundary segments'\
|
|
200
|
+
%(len(self.boundary))
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def set_to_inscribed_circle(self,safety_factor = 1):
|
|
204
|
+
#FIXME phase out eventually
|
|
205
|
+
N = self.number_of_triangles
|
|
206
|
+
V = self.vertex_coordinates
|
|
207
|
+
|
|
208
|
+
#initialising min and max ratio
|
|
209
|
+
i=0
|
|
210
|
+
old_rad = self.radii[i]
|
|
211
|
+
x0 = V[i, 0]; y0 = V[i, 1]
|
|
212
|
+
x1 = V[i, 2]; y1 = V[i, 3]
|
|
213
|
+
x2 = V[i, 4]; y2 = V[i, 5]
|
|
214
|
+
a = num.sqrt((x0-x1)**2+(y0-y1)**2)
|
|
215
|
+
b = num.sqrt((x1-x2)**2+(y1-y2)**2)
|
|
216
|
+
c = num.sqrt((x2-x0)**2+(y2-y0)**2)
|
|
217
|
+
ratio = old_rad/self.radii[i]
|
|
218
|
+
max_ratio = ratio
|
|
219
|
+
min_ratio = ratio
|
|
220
|
+
|
|
221
|
+
for i in xrange(N):
|
|
222
|
+
old_rad = self.radii[i]
|
|
223
|
+
x0 = V[i, 0]; y0 = V[i, 1]
|
|
224
|
+
x1 = V[i, 2]; y1 = V[i, 3]
|
|
225
|
+
x2 = V[i, 4]; y2 = V[i, 5]
|
|
226
|
+
a = num.sqrt((x0-x1)**2+(y0-y1)**2)
|
|
227
|
+
b = num.sqrt((x1-x2)**2+(y1-y2)**2)
|
|
228
|
+
c = num.sqrt((x2-x0)**2+(y2-y0)**2)
|
|
229
|
+
self.radii[i]=self.areas[i]/(2*(a+b+c))*safety_factor
|
|
230
|
+
ratio = old_rad/self.radii[i]
|
|
231
|
+
if ratio >= max_ratio: max_ratio = ratio
|
|
232
|
+
if ratio <= min_ratio: min_ratio = ratio
|
|
233
|
+
return max_ratio,min_ratio
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def build_neighbour_structure_python(self):
|
|
238
|
+
"""Update all registered triangles to point to their neighbours.
|
|
239
|
+
|
|
240
|
+
Also, keep a tally of the number of boundaries for each triangle
|
|
241
|
+
|
|
242
|
+
Postconditions:
|
|
243
|
+
neighbours and neighbour_edges is populated
|
|
244
|
+
number_of_boundaries integer array is defined.
|
|
245
|
+
"""
|
|
246
|
+
|
|
247
|
+
#Step 1:
|
|
248
|
+
#Build dictionary mapping from segments (2-tuple of points)
|
|
249
|
+
#to left hand side edge (facing neighbouring triangle)
|
|
250
|
+
|
|
251
|
+
N = len(self) #Number_of_triangles
|
|
252
|
+
neighbourdict = {}
|
|
253
|
+
for i in range(N):
|
|
254
|
+
|
|
255
|
+
#Register all segments as keys mapping to current triangle
|
|
256
|
+
#and segment id
|
|
257
|
+
a = self.triangles[i, 0]
|
|
258
|
+
b = self.triangles[i, 1]
|
|
259
|
+
c = self.triangles[i, 2]
|
|
260
|
+
if neighbourdict.has_key((a,b)):
|
|
261
|
+
msg = "Edge 2 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[a,b][1],neighbourdict[a,b][0])
|
|
262
|
+
raise Exception(msg)
|
|
263
|
+
if neighbourdict.has_key((b,c)):
|
|
264
|
+
msg = "Edge 0 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[b,c][1],neighbourdict[b,c][0])
|
|
265
|
+
raise Exception(msg)
|
|
266
|
+
if neighbourdict.has_key((c,a)):
|
|
267
|
+
msg = "Edge 1 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[c,a][1],neighbourdict[c,a][0])
|
|
268
|
+
raise Exception(msg)
|
|
269
|
+
|
|
270
|
+
neighbourdict[a,b] = (i, 2) #(id, edge)
|
|
271
|
+
neighbourdict[b,c] = (i, 0) #(id, edge)
|
|
272
|
+
neighbourdict[c,a] = (i, 1) #(id, edge)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
#Step 2:
|
|
276
|
+
#Go through triangles again, but this time
|
|
277
|
+
#reverse direction of segments and lookup neighbours.
|
|
278
|
+
for i in range(N):
|
|
279
|
+
a = self.triangles[i, 0]
|
|
280
|
+
b = self.triangles[i, 1]
|
|
281
|
+
c = self.triangles[i, 2]
|
|
282
|
+
|
|
283
|
+
self.number_of_boundaries[i] = 3
|
|
284
|
+
if neighbourdict.has_key((b,a)):
|
|
285
|
+
self.neighbours[i, 2] = neighbourdict[b,a][0]
|
|
286
|
+
self.neighbour_edges[i, 2] = neighbourdict[b,a][1]
|
|
287
|
+
self.number_of_boundaries[i] -= 1
|
|
288
|
+
|
|
289
|
+
if neighbourdict.has_key((c,b)):
|
|
290
|
+
self.neighbours[i, 0] = neighbourdict[c,b][0]
|
|
291
|
+
self.neighbour_edges[i, 0] = neighbourdict[c,b][1]
|
|
292
|
+
self.number_of_boundaries[i] -= 1
|
|
293
|
+
|
|
294
|
+
if neighbourdict.has_key((a,c)):
|
|
295
|
+
self.neighbours[i, 1] = neighbourdict[a,c][0]
|
|
296
|
+
self.neighbour_edges[i, 1] = neighbourdict[a,c][1]
|
|
297
|
+
self.number_of_boundaries[i] -= 1
|
|
298
|
+
|
|
299
|
+
def build_neighbour_structure(self):
|
|
300
|
+
"""Update all registered triangles to point to their neighbours.
|
|
301
|
+
|
|
302
|
+
Also, keep a tally of the number of boundaries for each triangle
|
|
303
|
+
|
|
304
|
+
Postconditions:
|
|
305
|
+
neighbours and neighbour_edges is populated
|
|
306
|
+
number_of_boundaries integer array is defined.
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
import neighbour_table_ext
|
|
310
|
+
|
|
311
|
+
N = self.number_of_nodes
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
neighbour_table_ext.build_neighbour_structure(N,
|
|
315
|
+
self.triangles,
|
|
316
|
+
self.neighbours,
|
|
317
|
+
self.neighbour_edges,
|
|
318
|
+
self.number_of_boundaries)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def build_surrogate_neighbour_structure(self):
|
|
322
|
+
"""Build structure where each triangle edge points to its neighbours
|
|
323
|
+
if they exist. Otherwise point to the triangle itself.
|
|
324
|
+
|
|
325
|
+
The surrogate neighbour structure is useful for computing gradients
|
|
326
|
+
based on centroid values of neighbours.
|
|
327
|
+
|
|
328
|
+
Precondition: Neighbour structure is defined
|
|
329
|
+
Postcondition:
|
|
330
|
+
Surrogate neighbour structure is defined:
|
|
331
|
+
surrogate_neighbours: i0, i1, i2 where all i_k >= 0 point to
|
|
332
|
+
triangles.
|
|
333
|
+
|
|
334
|
+
"""
|
|
335
|
+
|
|
336
|
+
N = len(self) #Number of triangles
|
|
337
|
+
# for i in xrange(N):
|
|
338
|
+
# #Find all neighbouring volumes that are not boundaries
|
|
339
|
+
# for k in xrange(3):
|
|
340
|
+
# if self.neighbours[i, k] < 0:
|
|
341
|
+
# self.surrogate_neighbours[i, k] = i #Point this triangle
|
|
342
|
+
# else:
|
|
343
|
+
# self.surrogate_neighbours[i, k] = self.neighbours[i, k]
|
|
344
|
+
|
|
345
|
+
tmp_range = num.arange(N)
|
|
346
|
+
for k in xrange(3):
|
|
347
|
+
self.surrogate_neighbours[:,k] = \
|
|
348
|
+
num.where(self.neighbours[:,k]<0, tmp_range, self.neighbours[:, k])
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
def build_boundary_dictionary(self, boundary=None):
|
|
352
|
+
"""Build or check the dictionary of boundary tags.
|
|
353
|
+
self.boundary is a dictionary of tags,
|
|
354
|
+
keyed by volume id and edge:
|
|
355
|
+
{ (id, edge): tag, ... }
|
|
356
|
+
|
|
357
|
+
Postconditions:
|
|
358
|
+
self.boundary is defined.
|
|
359
|
+
"""
|
|
360
|
+
|
|
361
|
+
from anuga.config import default_boundary_tag
|
|
362
|
+
|
|
363
|
+
#arr_neighbours = num.array(self.neighbours)
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
if boundary is None:
|
|
367
|
+
boundary = {}
|
|
368
|
+
|
|
369
|
+
from neighbour_mesh_ext import boundary_dictionary_construct
|
|
370
|
+
boundary = boundary_dictionary_construct(len(self), default_boundary_tag, self.neighbours, boundary)
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
self.boundary = boundary
|
|
374
|
+
self.boundary_length = len(self.boundary)
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def build_boundary_dictionary_old(self, boundary = None):
|
|
379
|
+
"""Build or check the dictionary of boundary tags.
|
|
380
|
+
self.boundary is a dictionary of tags,
|
|
381
|
+
keyed by volume id and edge:
|
|
382
|
+
{ (id, edge): tag, ... }
|
|
383
|
+
|
|
384
|
+
Postconditions:
|
|
385
|
+
self.boundary is defined.
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
from anuga.config import default_boundary_tag
|
|
389
|
+
|
|
390
|
+
if boundary is None:
|
|
391
|
+
boundary = {}
|
|
392
|
+
for vol_id in xrange(len(self)):
|
|
393
|
+
for edge_id in xrange(0, 3):
|
|
394
|
+
if self.neighbours[vol_id, edge_id] < 0:
|
|
395
|
+
boundary[(vol_id, edge_id)] = default_boundary_tag
|
|
396
|
+
else:
|
|
397
|
+
#Check that all keys in given boundary exist
|
|
398
|
+
for vol_id, edge_id in boundary.keys():
|
|
399
|
+
msg = 'Segment (%d, %d) does not exist' %(vol_id, edge_id)
|
|
400
|
+
a, b = self.neighbours.shape
|
|
401
|
+
assert vol_id < a and edge_id < b, msg
|
|
402
|
+
|
|
403
|
+
#FIXME: This assert violates internal boundaries (delete it)
|
|
404
|
+
#msg = 'Segment (%d, %d) is not a boundary' %(vol_id, edge_id)
|
|
405
|
+
#assert self.neighbours[vol_id, edge_id] < 0, msg
|
|
406
|
+
|
|
407
|
+
#Check that all boundary segments are assigned a tag
|
|
408
|
+
for vol_id in xrange(len(self)):
|
|
409
|
+
for edge_id in xrange(0, 3):
|
|
410
|
+
if self.neighbours[vol_id, edge_id] < 0:
|
|
411
|
+
if not boundary.has_key( (vol_id, edge_id) ):
|
|
412
|
+
msg = 'WARNING: Given boundary does not contain '
|
|
413
|
+
msg += 'tags for edge (%d, %d). '\
|
|
414
|
+
%(vol_id, edge_id)
|
|
415
|
+
msg += 'Assigning default tag (%s).'\
|
|
416
|
+
%default_boundary_tag
|
|
417
|
+
|
|
418
|
+
#FIXME: Print only as per verbosity
|
|
419
|
+
|
|
420
|
+
#FIXME: Make this situation an error in the future
|
|
421
|
+
#and make another function which will
|
|
422
|
+
#enable default boundary-tags where
|
|
423
|
+
#tags a not specified
|
|
424
|
+
boundary[ (vol_id, edge_id) ] =\
|
|
425
|
+
default_boundary_tag
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
self.boundary = boundary
|
|
430
|
+
self.boundary_length = len(self.boundary)
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def build_tagged_elements_dictionary(self, tagged_elements = None):
|
|
434
|
+
"""Build the dictionary of element tags.
|
|
435
|
+
self.tagged_elements is a dictionary of element arrays,
|
|
436
|
+
keyed by tag:
|
|
437
|
+
{ (tag): [e1, e2, e3..] }
|
|
438
|
+
|
|
439
|
+
Postconditions:
|
|
440
|
+
self.element_tag is defined
|
|
441
|
+
"""
|
|
442
|
+
|
|
443
|
+
if tagged_elements is None:
|
|
444
|
+
tagged_elements = {}
|
|
445
|
+
else:
|
|
446
|
+
#Check that all keys in given boundary exist
|
|
447
|
+
for tag in tagged_elements.keys():
|
|
448
|
+
tagged_elements[tag] = num.array(tagged_elements[tag], num.int)
|
|
449
|
+
|
|
450
|
+
msg = 'Not all elements exist. '
|
|
451
|
+
assert max(tagged_elements[tag]) < len(self), msg
|
|
452
|
+
self.tagged_elements = tagged_elements
|
|
453
|
+
|
|
454
|
+
def get_tagged_elements(self):
|
|
455
|
+
return self.tagged_elements
|
|
456
|
+
|
|
457
|
+
# def build_boundary_structure(self):
|
|
458
|
+
# """Traverse boundary and
|
|
459
|
+
# enumerate neighbour indices from -1 and
|
|
460
|
+
# counting down.
|
|
461
|
+
#
|
|
462
|
+
# Precondition:
|
|
463
|
+
# self.boundary is defined.
|
|
464
|
+
# Post condition:
|
|
465
|
+
# neighbour array has unique negative indices for boundary
|
|
466
|
+
# boundary_segments array imposes an ordering on segments
|
|
467
|
+
# (not otherwise available from the dictionary)
|
|
468
|
+
#
|
|
469
|
+
# Note: If a segment is listed in the boundary dictionary
|
|
470
|
+
# it *will* become a boundary - even if there is a neighbouring triangle.
|
|
471
|
+
# This would be the case for internal boundaries
|
|
472
|
+
# """
|
|
473
|
+
#
|
|
474
|
+
# #FIXME: Now Obsolete - maybe use some comments from here in
|
|
475
|
+
# #domain.set_boundary
|
|
476
|
+
#
|
|
477
|
+
# if self.boundary is None:
|
|
478
|
+
# msg = 'Boundary dictionary must be defined before '
|
|
479
|
+
# msg += 'building boundary structure'
|
|
480
|
+
# raise Exception(msg)
|
|
481
|
+
#
|
|
482
|
+
#
|
|
483
|
+
# self.boundary_segments = self.boundary.keys()
|
|
484
|
+
# self.boundary_segments.sort()
|
|
485
|
+
#
|
|
486
|
+
# index = -1
|
|
487
|
+
# for id, edge in self.boundary_segments:
|
|
488
|
+
#
|
|
489
|
+
# #FIXME: One would detect internal boundaries as follows
|
|
490
|
+
# #if self.neighbours[id, edge] > -1:
|
|
491
|
+
# # log.critical('Internal boundary')
|
|
492
|
+
#
|
|
493
|
+
# self.neighbours[id, edge] = index
|
|
494
|
+
#
|
|
495
|
+
# self.boundary_enumeration[id,edge] = index
|
|
496
|
+
#
|
|
497
|
+
# index -= 1
|
|
498
|
+
#
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
def build_boundary_neighbours(self):
|
|
502
|
+
"""Traverse boundary and
|
|
503
|
+
enumerate neighbour indices from -1 and
|
|
504
|
+
counting down.
|
|
505
|
+
|
|
506
|
+
Precondition:
|
|
507
|
+
self.boundary is defined.
|
|
508
|
+
Post condition:
|
|
509
|
+
neighbours array has unique negative indices for boundary
|
|
510
|
+
boundary_segments array imposes an ordering on segments
|
|
511
|
+
(not otherwise available from the dictionary)
|
|
512
|
+
|
|
513
|
+
"""
|
|
514
|
+
|
|
515
|
+
if self.boundary is None:
|
|
516
|
+
msg = 'Boundary dictionary must be defined before '
|
|
517
|
+
msg += 'building boundary structure'
|
|
518
|
+
raise Exception(msg)
|
|
519
|
+
|
|
520
|
+
self.boundary_enumeration = {}
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
X = self.boundary.keys()
|
|
525
|
+
X.sort()
|
|
526
|
+
|
|
527
|
+
#print 'X', X
|
|
528
|
+
index = -1
|
|
529
|
+
for id, edge in X:
|
|
530
|
+
self.neighbours[id, edge] = index
|
|
531
|
+
|
|
532
|
+
self.boundary_enumeration[id,edge] = -index -1
|
|
533
|
+
|
|
534
|
+
index -= 1
|
|
535
|
+
|
|
536
|
+
# Now we know number of boundaries
|
|
537
|
+
M = len(self.boundary_enumeration)
|
|
538
|
+
self.boundary_cells = num.zeros((M,),num.int)
|
|
539
|
+
self.boundary_edges = num.zeros((M,),num.int)
|
|
540
|
+
|
|
541
|
+
for id, edge in X:
|
|
542
|
+
j = self.boundary_enumeration[id,edge]
|
|
543
|
+
self.boundary_cells[j] = id
|
|
544
|
+
self.boundary_edges[j] = edge
|
|
545
|
+
|
|
546
|
+
# For each tag create list of boundary edges
|
|
547
|
+
self.tag_boundary_cells = {}
|
|
548
|
+
|
|
549
|
+
tags = self.get_boundary_tags()
|
|
550
|
+
|
|
551
|
+
#print tags
|
|
552
|
+
|
|
553
|
+
for tag in tags:
|
|
554
|
+
self.tag_boundary_cells[tag] = []
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
for j in xrange(self.boundary_length):
|
|
558
|
+
id = self.boundary_cells[j]
|
|
559
|
+
edge = self.boundary_edges[j]
|
|
560
|
+
tag = self.boundary[id, edge]
|
|
561
|
+
#print tag, id, edge
|
|
562
|
+
self.tag_boundary_cells[tag].append(j)
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
#print self.tag_boundary_cells
|
|
566
|
+
|
|
567
|
+
def get_boundary_tags(self):
|
|
568
|
+
"""Return list of available boundary tags
|
|
569
|
+
"""
|
|
570
|
+
|
|
571
|
+
tags = {}
|
|
572
|
+
for v in self.boundary.values():
|
|
573
|
+
tags[v] = 1
|
|
574
|
+
|
|
575
|
+
return tags.keys()
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def get_boundary_polygon(self, verbose=False):
|
|
579
|
+
"""Return bounding polygon for mesh (counter clockwise)
|
|
580
|
+
|
|
581
|
+
Using the mesh boundary, derive a bounding polygon for this mesh.
|
|
582
|
+
If multiple vertex values are present (vertices stored uniquely),
|
|
583
|
+
the algorithm will select the path that contains the entire mesh.
|
|
584
|
+
|
|
585
|
+
All points are in absolute UTM coordinates
|
|
586
|
+
"""
|
|
587
|
+
|
|
588
|
+
from anuga.utilities.numerical_tools import angle, ensure_numeric
|
|
589
|
+
|
|
590
|
+
# Get mesh extent
|
|
591
|
+
xmin, xmax, ymin, ymax = self.get_extent(absolute=True)
|
|
592
|
+
pmin = ensure_numeric([xmin, ymin])
|
|
593
|
+
pmax = ensure_numeric([xmax, ymax])
|
|
594
|
+
|
|
595
|
+
# Assemble dictionary of boundary segments and choose starting point
|
|
596
|
+
segments = {}
|
|
597
|
+
inverse_segments = {}
|
|
598
|
+
p0 = None
|
|
599
|
+
|
|
600
|
+
# Start value across entire mesh
|
|
601
|
+
mindist = num.sqrt(num.sum((pmax-pmin)**2))
|
|
602
|
+
for i, edge_id in self.boundary.keys():
|
|
603
|
+
# Find vertex ids for boundary segment
|
|
604
|
+
if edge_id == 0: a = 1; b = 2
|
|
605
|
+
if edge_id == 1: a = 2; b = 0
|
|
606
|
+
if edge_id == 2: a = 0; b = 1
|
|
607
|
+
|
|
608
|
+
A = self.get_vertex_coordinate(i, a, absolute=True) # Start
|
|
609
|
+
B = self.get_vertex_coordinate(i, b, absolute=True) # End
|
|
610
|
+
|
|
611
|
+
# Take the point closest to pmin as starting point
|
|
612
|
+
# Note: Could be arbitrary, but nice to have
|
|
613
|
+
# a unique way of selecting
|
|
614
|
+
dist_A = num.sqrt(num.sum((A-pmin)**2))
|
|
615
|
+
dist_B = num.sqrt(num.sum((B-pmin)**2))
|
|
616
|
+
|
|
617
|
+
# Find lower leftmost point
|
|
618
|
+
if dist_A < mindist:
|
|
619
|
+
mindist = dist_A
|
|
620
|
+
p0 = A
|
|
621
|
+
if dist_B < mindist:
|
|
622
|
+
mindist = dist_B
|
|
623
|
+
p0 = B
|
|
624
|
+
|
|
625
|
+
# Sanity check
|
|
626
|
+
if p0 is None:
|
|
627
|
+
msg = 'Impossible: p0 is None!?'
|
|
628
|
+
raise Exception(msg)
|
|
629
|
+
|
|
630
|
+
# Register potential paths from A to B
|
|
631
|
+
if not segments.has_key(tuple(A)):
|
|
632
|
+
segments[tuple(A)] = [] # Empty list for candidate points
|
|
633
|
+
|
|
634
|
+
segments[tuple(A)].append(B)
|
|
635
|
+
|
|
636
|
+
# Start with smallest point and follow boundary (counter clock wise)
|
|
637
|
+
polygon = [list(p0)]# Storage for final boundary polygon
|
|
638
|
+
point_registry = {} # Keep track of storage to avoid multiple runs
|
|
639
|
+
# around boundary. This will only be the case if
|
|
640
|
+
# there are more than one candidate.
|
|
641
|
+
# FIXME (Ole): Perhaps we can do away with polygon
|
|
642
|
+
# and use only point_registry to save space.
|
|
643
|
+
|
|
644
|
+
point_registry[tuple(p0)] = 0
|
|
645
|
+
|
|
646
|
+
while len(point_registry) < len(self.boundary):
|
|
647
|
+
candidate_list = segments[tuple(p0)]
|
|
648
|
+
if len(candidate_list) > 1:
|
|
649
|
+
# Multiple points detected (this will be the case for meshes
|
|
650
|
+
# with duplicate points as those used for discontinuous
|
|
651
|
+
# triangles with vertices stored uniquely).
|
|
652
|
+
# Take the candidate that is furthest to the clockwise
|
|
653
|
+
# direction, as that will follow the boundary.
|
|
654
|
+
#
|
|
655
|
+
# This will also be the case for pathological triangles
|
|
656
|
+
# that have no neighbours.
|
|
657
|
+
|
|
658
|
+
if verbose:
|
|
659
|
+
log.critical('Point %s has multiple candidates: %s'
|
|
660
|
+
% (str(p0), candidate_list))
|
|
661
|
+
|
|
662
|
+
# Check that previous are not in candidate list
|
|
663
|
+
#for p in candidate_list:
|
|
664
|
+
# assert not allclose(p0, p)
|
|
665
|
+
|
|
666
|
+
# Choose vector against which all angles will be measured
|
|
667
|
+
if len(polygon) > 1:
|
|
668
|
+
v_prev = p0 - polygon[-2] # Vector that leads to p0
|
|
669
|
+
# from previous point
|
|
670
|
+
else:
|
|
671
|
+
# FIXME (Ole): What do we do if the first point has
|
|
672
|
+
# multiple candidates?
|
|
673
|
+
# Being the lower left corner, perhaps we can use the
|
|
674
|
+
# vector [1, 0], but I really don't know if this is
|
|
675
|
+
# completely watertight.
|
|
676
|
+
v_prev = [1.0, 0.0]
|
|
677
|
+
|
|
678
|
+
# Choose candidate with minimum angle
|
|
679
|
+
minimum_angle = 2*pi
|
|
680
|
+
for pc in candidate_list:
|
|
681
|
+
vc = pc-p0 # Candidate vector (from p0 to candidate pt)
|
|
682
|
+
|
|
683
|
+
# Angle between each candidate and the previous vector
|
|
684
|
+
# in [-pi, pi]
|
|
685
|
+
ac = angle(vc, v_prev)
|
|
686
|
+
if ac > pi:
|
|
687
|
+
# Give preference to angles on the right hand side
|
|
688
|
+
# of v_prev
|
|
689
|
+
ac = ac-2*pi
|
|
690
|
+
|
|
691
|
+
# Take the minimal angle corresponding to the
|
|
692
|
+
# rightmost vector
|
|
693
|
+
if ac < minimum_angle:
|
|
694
|
+
minimum_angle = ac
|
|
695
|
+
p1 = pc # Best candidate
|
|
696
|
+
|
|
697
|
+
if verbose is True:
|
|
698
|
+
log.critical(' Best candidate %s, angle %f'
|
|
699
|
+
% (p1, minimum_angle*180/pi))
|
|
700
|
+
else:
|
|
701
|
+
p1 = candidate_list[0]
|
|
702
|
+
|
|
703
|
+
if point_registry.has_key(tuple(p1)):
|
|
704
|
+
# We have reached a point already visited.
|
|
705
|
+
if num.allclose(p1, polygon[0]):
|
|
706
|
+
# If it is the initial point, the polygon is complete.
|
|
707
|
+
if verbose is True:
|
|
708
|
+
log.critical(' Stop criterion fulfilled at point %s'
|
|
709
|
+
% str(p1))
|
|
710
|
+
log.critical(str(polygon))
|
|
711
|
+
|
|
712
|
+
# We have completed the boundary polygon - yeehaa
|
|
713
|
+
break
|
|
714
|
+
else:
|
|
715
|
+
# The point already visited is not the initial point
|
|
716
|
+
# This would be a pathological triangle, but the
|
|
717
|
+
# algorithm must be able to deal with this
|
|
718
|
+
pass
|
|
719
|
+
|
|
720
|
+
else:
|
|
721
|
+
# We are still finding new points on the boundary
|
|
722
|
+
point_registry[tuple(p1)] = len(point_registry)
|
|
723
|
+
|
|
724
|
+
polygon.append(list(p1)) # De-numeric each point :-)
|
|
725
|
+
p0 = p1
|
|
726
|
+
|
|
727
|
+
return polygon
|
|
728
|
+
|
|
729
|
+
def check_integrity(self):
|
|
730
|
+
"""Check that triangles are internally consistent e.g.
|
|
731
|
+
that area corresponds to edgelengths, that vertices
|
|
732
|
+
are arranged in a counter-clockwise order, etc etc
|
|
733
|
+
Neighbour structure will be checked by class Mesh
|
|
734
|
+
"""
|
|
735
|
+
|
|
736
|
+
from anuga.config import epsilon
|
|
737
|
+
from anuga.utilities.numerical_tools import anglediff
|
|
738
|
+
|
|
739
|
+
N = len(self)
|
|
740
|
+
|
|
741
|
+
# Get x,y coordinates for all vertices for all triangles
|
|
742
|
+
V = self.get_vertex_coordinates()
|
|
743
|
+
|
|
744
|
+
# # Check each triangle
|
|
745
|
+
# for i in xrange(0):
|
|
746
|
+
#
|
|
747
|
+
# x0, y0 = V[3*i, :]
|
|
748
|
+
# x1, y1 = V[3*i+1, :]
|
|
749
|
+
# x2, y2 = V[3*i+2, :]
|
|
750
|
+
#
|
|
751
|
+
# # Check that area hasn't been compromised
|
|
752
|
+
# area = self.areas[i]
|
|
753
|
+
# ref = -((x1*y0-x0*y1)+(x2*y1-x1*y2)+(x0*y2-x2*y0))/2
|
|
754
|
+
# msg = 'Triangle %i (%f,%f), (%f,%f), (%f, %f)' % (i, x0,y0,x1,y1,x2,y2)
|
|
755
|
+
# msg += 'Wrong area: %f %f'\
|
|
756
|
+
# %(area, ref)
|
|
757
|
+
# assert abs((area - ref)/area) < epsilon, msg
|
|
758
|
+
#
|
|
759
|
+
# msg = 'Triangle %i (%f,%f), (%f,%f), (%f, %f)' % (i, x0,y0,x1,y1,x2,y2)
|
|
760
|
+
# msg += ' is degenerate: area == %f' % self.areas[i]
|
|
761
|
+
# assert area > 0.0, msg
|
|
762
|
+
#
|
|
763
|
+
# # Check that points are arranged in counter clock-wise order
|
|
764
|
+
# v0 = [x1-x0, y1-y0]
|
|
765
|
+
# v1 = [x2-x1, y2-y1]
|
|
766
|
+
# v2 = [x0-x2, y0-y2]
|
|
767
|
+
# a0 = anglediff(v1, v0)
|
|
768
|
+
# a1 = anglediff(v2, v1)
|
|
769
|
+
# a2 = anglediff(v0, v2)
|
|
770
|
+
#
|
|
771
|
+
# msg = '''Vertices (%s,%s), (%s,%s), (%s,%s) are not arranged
|
|
772
|
+
# in counter clockwise order''' %(x0, y0, x1, y1, x2, y2)
|
|
773
|
+
# assert a0 < pi and a1 < pi and a2 < pi, msg
|
|
774
|
+
#
|
|
775
|
+
# # Check that normals are orthogonal to edge vectors
|
|
776
|
+
# # Note that normal[k] lies opposite vertex k
|
|
777
|
+
#
|
|
778
|
+
# normal0 = self.normals[i, 0:2]
|
|
779
|
+
# normal1 = self.normals[i, 2:4]
|
|
780
|
+
# normal2 = self.normals[i, 4:6]
|
|
781
|
+
#
|
|
782
|
+
# for u, v in [ (v0, normal2), (v1, normal0), (v2, normal1) ]:
|
|
783
|
+
#
|
|
784
|
+
# # Normalise
|
|
785
|
+
# l_u = num.sqrt(u[0]*u[0] + u[1]*u[1])
|
|
786
|
+
# l_v = num.sqrt(v[0]*v[0] + v[1]*v[1])
|
|
787
|
+
#
|
|
788
|
+
# msg = 'Normal vector in triangle %d does not have unit length' %i
|
|
789
|
+
# assert num.allclose(l_v, 1), msg
|
|
790
|
+
#
|
|
791
|
+
# x = (u[0]*v[0] + u[1]*v[1])/l_u # Inner product
|
|
792
|
+
#
|
|
793
|
+
# msg = 'Normal vector (%f,%f) is not perpendicular to' %tuple(v)
|
|
794
|
+
# msg += ' edge (%f,%f) in triangle %d.' %(tuple(u) + (i,))
|
|
795
|
+
# msg += ' Inner product is %e.' %x
|
|
796
|
+
# assert x < epsilon, msg
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
# let's try numpy constructs
|
|
800
|
+
|
|
801
|
+
x0 = V[0::3, 0]
|
|
802
|
+
y0 = V[0::3, 1]
|
|
803
|
+
x1 = V[1::3, 0]
|
|
804
|
+
y1 = V[1::3, 1]
|
|
805
|
+
x2 = V[2::3, 0]
|
|
806
|
+
y2 = V[2::3, 1]
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
#print 'check areas'
|
|
810
|
+
area = self.areas
|
|
811
|
+
|
|
812
|
+
ref = -((x1*y0-x0*y1)+(x2*y1-x1*y2)+(x0*y2-x2*y0))/2
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
assert num.sum(num.abs((area - ref)/area)) < epsilon, 'Error in areas'
|
|
816
|
+
|
|
817
|
+
assert num.all(area > 0.0), 'A negative area'
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
tx0 = x2 - x1
|
|
821
|
+
ty0 = y2 - y1
|
|
822
|
+
a0 = num.sqrt(tx0**2 + ty0**2)
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
tx0 = tx0/a0
|
|
826
|
+
ty0 = ty0/a0
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
tx1 = x0 - x2
|
|
830
|
+
ty1 = y0 - y2
|
|
831
|
+
a1 = num.sqrt(tx1**2 + ty1**2)
|
|
832
|
+
tx1 = tx1/a1
|
|
833
|
+
ty1 = ty1/a1
|
|
834
|
+
|
|
835
|
+
tx2 = x1 - x0
|
|
836
|
+
ty2 = y1 - y0
|
|
837
|
+
a2 = num.sqrt(tx2**2 + ty2**2)
|
|
838
|
+
tx2 = tx2/a2
|
|
839
|
+
ty2 = ty2/a2
|
|
840
|
+
|
|
841
|
+
nx0 = self.normals[:,0]
|
|
842
|
+
ny0 = self.normals[:,1]
|
|
843
|
+
nx1 = self.normals[:,2]
|
|
844
|
+
ny1 = self.normals[:,3]
|
|
845
|
+
nx2 = self.normals[:,4]
|
|
846
|
+
ny2 = self.normals[:,5]
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
assert num.all(tx0*nx0 + ty0*ny0 < epsilon), 'Normal not perpendicular to edge'
|
|
850
|
+
assert num.all(tx1*nx1 + ty1*ny1 < epsilon), 'Normal not perpendicular to edge'
|
|
851
|
+
assert num.all(tx2*nx2 + ty2*ny2 < epsilon), 'Normal not perpendicular to edge'
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
#print 'check normals are unit length'
|
|
855
|
+
assert num.all(num.abs(nx0**2 + ny0**2 - 1) < epsilon), 'Normal are not normalised'
|
|
856
|
+
assert num.all(num.abs(nx1**2 + ny1**2 - 1) < epsilon), 'Normal are not normalised'
|
|
857
|
+
assert num.all(num.abs(nx2**2 + ny2**2 - 1) < epsilon), 'Normal are not normalised'
|
|
858
|
+
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
# check that neighbour of neighbour is self
|
|
863
|
+
|
|
864
|
+
# 0 neighbours
|
|
865
|
+
neighs = self.neighbours
|
|
866
|
+
ids = num.arange(len(neighs))
|
|
867
|
+
|
|
868
|
+
# 0 neighbours
|
|
869
|
+
nid = neighs[:,0]
|
|
870
|
+
eid = self.neighbour_edges[:,0]
|
|
871
|
+
nnid = num.argwhere(nid>-1).reshape(-1,)
|
|
872
|
+
nid = nid[nnid]
|
|
873
|
+
eid = eid[nnid]
|
|
874
|
+
id = ids[nnid]
|
|
875
|
+
|
|
876
|
+
assert num.all(neighs[nid,eid] == id)
|
|
877
|
+
|
|
878
|
+
# 1 neighbours
|
|
879
|
+
nid = neighs[:,1]
|
|
880
|
+
eid = self.neighbour_edges[:,1]
|
|
881
|
+
nnid = num.argwhere(nid>-1).reshape(-1,)
|
|
882
|
+
nid = nid[nnid]
|
|
883
|
+
eid = eid[nnid]
|
|
884
|
+
id = ids[nnid]
|
|
885
|
+
|
|
886
|
+
assert num.all(neighs[nid,eid] == id)
|
|
887
|
+
|
|
888
|
+
# 2 neighbours
|
|
889
|
+
nid = neighs[:,2]
|
|
890
|
+
eid = self.neighbour_edges[:,2]
|
|
891
|
+
nnid = num.argwhere(nid>-1).reshape(-1,)
|
|
892
|
+
nid = nid[nnid]
|
|
893
|
+
eid = eid[nnid]
|
|
894
|
+
id = ids[nnid]
|
|
895
|
+
|
|
896
|
+
assert num.all(neighs[nid,eid] == id)
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
# # Check neighbour structure
|
|
902
|
+
# for i in xrange(N):
|
|
903
|
+
# # For each triangle
|
|
904
|
+
#
|
|
905
|
+
# for k, neighbour_id in enumerate(self.neighbours[i,:]):
|
|
906
|
+
#
|
|
907
|
+
# #Assert that my neighbour's neighbour is me
|
|
908
|
+
# #Boundaries need not fulfill this
|
|
909
|
+
# if neighbour_id >= 0:
|
|
910
|
+
# edge = self.neighbour_edges[i, k]
|
|
911
|
+
# msg = 'Triangle %d has neighbour %d but it does not point back. \n' %(i,neighbour_id)
|
|
912
|
+
# msg += 'Only points to (%s)' %(self.neighbours[neighbour_id,:])
|
|
913
|
+
# assert self.neighbours[neighbour_id, edge] == i ,msg
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
#Check that all boundaries have
|
|
918
|
+
# unique, consecutive, negative indices
|
|
919
|
+
|
|
920
|
+
#L = len(self.boundary)
|
|
921
|
+
#for i in range(L):
|
|
922
|
+
# id, edge = self.boundary_segments[i]
|
|
923
|
+
# assert self.neighbours[id, edge] == -i-1
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
#NOTE: This assert doesn't hold true if there are internal boundaries
|
|
927
|
+
#FIXME: Look into this further.
|
|
928
|
+
#FIXME (Ole): In pyvolution mark 3 this is OK again
|
|
929
|
+
#NOTE: No longer works because neighbour structure is modified by
|
|
930
|
+
# domain set_boundary.
|
|
931
|
+
#for id, edge in self.boundary:
|
|
932
|
+
# assert self.neighbours[id,edge] < 0
|
|
933
|
+
#
|
|
934
|
+
#NOTE (Ole): I reckon this was resolved late 2004?
|
|
935
|
+
#
|
|
936
|
+
#See domain.set_boundary
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
#Check integrity of inverted triangle structure
|
|
941
|
+
|
|
942
|
+
V = self.vertex_value_indices[:] #Take a copy
|
|
943
|
+
V = num.sort(V)
|
|
944
|
+
assert num.allclose(V, range(3*N))
|
|
945
|
+
|
|
946
|
+
assert num.sum(self.number_of_triangles_per_node) ==\
|
|
947
|
+
len(self.vertex_value_indices)
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
# Check number of triangles per node
|
|
951
|
+
# count = [0]*self.number_of_nodes
|
|
952
|
+
# for triangle in self.triangles:
|
|
953
|
+
# for i in triangle:
|
|
954
|
+
# count[i] += 1
|
|
955
|
+
|
|
956
|
+
count = num.bincount(self.triangles.flat)
|
|
957
|
+
|
|
958
|
+
|
|
959
|
+
ncount = len(count)
|
|
960
|
+
#print len(count)
|
|
961
|
+
#print len(self.number_of_triangles_per_node)
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
number_of_lone_nodes = self.number_of_nodes - len(self.number_of_triangles_per_node)
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
assert num.allclose(count, self.number_of_triangles_per_node[:ncount])
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
from neighbour_mesh_ext import check_integrity_c
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
#print self.vertex_value_indices.shape
|
|
974
|
+
#print self.triangles.shape
|
|
975
|
+
#print self.node_index.shape
|
|
976
|
+
#print self.number_of_triangles_per_node.shape
|
|
977
|
+
|
|
978
|
+
check_integrity_c(self.vertex_value_indices,
|
|
979
|
+
self.triangles,
|
|
980
|
+
self.node_index,
|
|
981
|
+
self.number_of_triangles_per_node)
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
# # Check integrity of vertex_value_indices
|
|
986
|
+
# current_node = 0
|
|
987
|
+
# k = 0 # Track triangles touching on node
|
|
988
|
+
# for index in self.vertex_value_indices:
|
|
989
|
+
#
|
|
990
|
+
# if self.number_of_triangles_per_node[current_node] == 0:
|
|
991
|
+
# # Node is lone - i.e. not part of the mesh
|
|
992
|
+
# continue
|
|
993
|
+
#
|
|
994
|
+
# k += 1
|
|
995
|
+
#
|
|
996
|
+
# volume_id = index / 3
|
|
997
|
+
# vertex_id = index % 3
|
|
998
|
+
#
|
|
999
|
+
# msg = 'Triangle %d, vertex %d points to %d. Should have been %d'\
|
|
1000
|
+
# %(volume_id, vertex_id, self.triangles[volume_id, vertex_id], current_node)
|
|
1001
|
+
# assert self.triangles[volume_id, vertex_id] == current_node, msg
|
|
1002
|
+
#
|
|
1003
|
+
# if self.number_of_triangles_per_node[current_node] == k:
|
|
1004
|
+
# # Move on to next node
|
|
1005
|
+
# k = 0
|
|
1006
|
+
# current_node += 1
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
def get_lone_vertices(self):
|
|
1010
|
+
"""Return a list of vertices that are not connected to any triangles.
|
|
1011
|
+
|
|
1012
|
+
"""
|
|
1013
|
+
return self.lone_vertices
|
|
1014
|
+
|
|
1015
|
+
def get_centroid_coordinates(self, absolute=False):
|
|
1016
|
+
"""Return all centroid coordinates.
|
|
1017
|
+
Return all centroid coordinates for all triangles as an Nx2 array
|
|
1018
|
+
(ordered as x0, y0 for each triangle)
|
|
1019
|
+
|
|
1020
|
+
Boolean keyword argument absolute determines whether coordinates
|
|
1021
|
+
are to be made absolute by taking georeference into account
|
|
1022
|
+
Default is False as many parts of ANUGA expects relative coordinates.
|
|
1023
|
+
"""
|
|
1024
|
+
|
|
1025
|
+
V = self.centroid_coordinates
|
|
1026
|
+
if absolute is True:
|
|
1027
|
+
if not self.geo_reference.is_absolute():
|
|
1028
|
+
V = self.geo_reference.get_absolute(V)
|
|
1029
|
+
|
|
1030
|
+
return V
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
def get_radii(self):
|
|
1034
|
+
"""Return all radii.
|
|
1035
|
+
Return radius of inscribed cirle for all triangles
|
|
1036
|
+
"""
|
|
1037
|
+
return self.radii
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
def statistics(self, nbins=10):
|
|
1042
|
+
"""Output statistics about mesh
|
|
1043
|
+
"""
|
|
1044
|
+
|
|
1045
|
+
from anuga.utilities.numerical_tools import histogram, create_bins
|
|
1046
|
+
|
|
1047
|
+
vertex_coordinates = self.vertex_coordinates # Relative coordinates
|
|
1048
|
+
areas = self.areas
|
|
1049
|
+
x = vertex_coordinates[:,0]
|
|
1050
|
+
y = vertex_coordinates[:,1]
|
|
1051
|
+
|
|
1052
|
+
|
|
1053
|
+
#Setup 10 bins for area histogram
|
|
1054
|
+
#print "nbins",nbins
|
|
1055
|
+
bins = create_bins(areas, 10)
|
|
1056
|
+
#print "size bins",bins
|
|
1057
|
+
#m = max(areas)
|
|
1058
|
+
#bins = arange(0., m, m/10)
|
|
1059
|
+
hist = histogram(areas, bins)
|
|
1060
|
+
|
|
1061
|
+
str = '------------------------------------------------\n'
|
|
1062
|
+
str += 'Mesh statistics:\n'
|
|
1063
|
+
str += ' Number of triangles = %d\n' %len(self)
|
|
1064
|
+
str += ' Extent [m]:\n'
|
|
1065
|
+
str += ' x in [%8.5e, %8.5e]\n' %(num.amin(x), num.amax(x))
|
|
1066
|
+
str += ' y in [%8.5e, %8.5e]\n' % (num.amin(y), num.amax(y))
|
|
1067
|
+
str += ' Areas [m^2]:\n'
|
|
1068
|
+
str += ' A in [%8.5e, %8.5e]\n' %(num.amin(areas), num.amax(areas))
|
|
1069
|
+
str += ' number of distinct areas: %d\n' %(len(areas))
|
|
1070
|
+
str += ' Histogram:\n'
|
|
1071
|
+
|
|
1072
|
+
hi = bins[0]
|
|
1073
|
+
for i, count in enumerate(hist):
|
|
1074
|
+
lo = hi
|
|
1075
|
+
if i+1 < len(bins):
|
|
1076
|
+
#Open upper interval
|
|
1077
|
+
hi = bins[i+1]
|
|
1078
|
+
str += ' [%8.5e, %8.5e[: %d\n' %(lo, hi, count)
|
|
1079
|
+
else:
|
|
1080
|
+
#Closed upper interval
|
|
1081
|
+
hi = num.max(areas)
|
|
1082
|
+
str += ' [%8.5e, %8.5e]: %d\n' %(lo, hi, count)
|
|
1083
|
+
|
|
1084
|
+
N = len(areas)
|
|
1085
|
+
if N > 10:
|
|
1086
|
+
str += ' Percentiles (%g percent):\n' % (100/nbins)
|
|
1087
|
+
areas = areas.tolist()
|
|
1088
|
+
areas.sort()
|
|
1089
|
+
|
|
1090
|
+
k = 0
|
|
1091
|
+
lower = num.min(areas)
|
|
1092
|
+
for i, a in enumerate(areas):
|
|
1093
|
+
if i % (N/10) == 0 and i != 0: #For every 10% of the sorted areas
|
|
1094
|
+
str += ' %d triangles in [%8.5e, %8.5e]\n' %(i-k, lower, a)
|
|
1095
|
+
lower = a
|
|
1096
|
+
k = i
|
|
1097
|
+
|
|
1098
|
+
str += ' %d triangles in [%8.5e, %8.5e]\n'\
|
|
1099
|
+
%(N-k, lower, max(areas))
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
str += ' Boundary:\n'
|
|
1103
|
+
str += ' Number of boundary segments == %d\n' %(len(self.boundary))
|
|
1104
|
+
str += ' Boundary tags == %s\n' %self.get_boundary_tags()
|
|
1105
|
+
str += '------------------------------------------------\n'
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
return str
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
def get_triangle_containing_point(self, point):
|
|
1112
|
+
"""Return triangle id for triangle containing specified point (x,y)
|
|
1113
|
+
|
|
1114
|
+
If point isn't within mesh, raise exception
|
|
1115
|
+
|
|
1116
|
+
"""
|
|
1117
|
+
|
|
1118
|
+
# FIXME(Ole): This function is currently brute force
|
|
1119
|
+
# because I needed it for diagnostics.
|
|
1120
|
+
# We should make it fast - probably based on the
|
|
1121
|
+
# quad tree structure.
|
|
1122
|
+
from anuga.geometry.polygon import is_outside_polygon,\
|
|
1123
|
+
is_inside_polygon
|
|
1124
|
+
|
|
1125
|
+
polygon = self.get_boundary_polygon()
|
|
1126
|
+
|
|
1127
|
+
if is_outside_polygon(point, polygon):
|
|
1128
|
+
msg = 'Point %s is outside mesh' %str(point)
|
|
1129
|
+
raise Exception(msg)
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
V = self.get_vertex_coordinates(absolute=True)
|
|
1133
|
+
|
|
1134
|
+
# FIXME: Horrible brute force
|
|
1135
|
+
for i, triangle in enumerate(self.triangles):
|
|
1136
|
+
poly = V[3*i:3*i+3]
|
|
1137
|
+
|
|
1138
|
+
if is_inside_polygon(point, poly, closed=True):
|
|
1139
|
+
return i
|
|
1140
|
+
|
|
1141
|
+
msg = 'Point %s not found within a triangle' %str(point)
|
|
1142
|
+
raise Exception(msg)
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
def get_intersecting_segments(self, polyline,
|
|
1148
|
+
use_cache=False,
|
|
1149
|
+
verbose=False):
|
|
1150
|
+
"""Find edges intersected by polyline
|
|
1151
|
+
|
|
1152
|
+
Input:
|
|
1153
|
+
polyline - list of points forming a segmented line
|
|
1154
|
+
use_cache
|
|
1155
|
+
verbose
|
|
1156
|
+
|
|
1157
|
+
Output:
|
|
1158
|
+
list of instances of class Triangle_intersection
|
|
1159
|
+
|
|
1160
|
+
The polyline may break inside any triangle causing multiple
|
|
1161
|
+
segments per triangle - consequently the same triangle may
|
|
1162
|
+
appear in several entries.
|
|
1163
|
+
|
|
1164
|
+
If a polyline segment coincides with a triangle edge,
|
|
1165
|
+
the the entire shared segment will be used.
|
|
1166
|
+
Onle one of the triangles thus intersected will be used and that
|
|
1167
|
+
is the first one encountered.
|
|
1168
|
+
|
|
1169
|
+
Intersections with single vertices are ignored.
|
|
1170
|
+
|
|
1171
|
+
Resulting segments are unsorted
|
|
1172
|
+
"""
|
|
1173
|
+
|
|
1174
|
+
V = self.get_vertex_coordinates()
|
|
1175
|
+
N = len(self)
|
|
1176
|
+
|
|
1177
|
+
# Adjust polyline to mesh spatial origin
|
|
1178
|
+
polyline = self.geo_reference.get_relative(polyline)
|
|
1179
|
+
|
|
1180
|
+
if use_cache is True:
|
|
1181
|
+
segments = cache(get_intersecting_segments,
|
|
1182
|
+
(V, N, polyline),
|
|
1183
|
+
{'verbose': verbose},
|
|
1184
|
+
verbose=verbose)
|
|
1185
|
+
else:
|
|
1186
|
+
segments = get_intersecting_segments(V, N, polyline,
|
|
1187
|
+
verbose=verbose)
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
return segments
|
|
1191
|
+
|
|
1192
|
+
|
|
1193
|
+
|
|
1194
|
+
def get_triangle_neighbours(self, tri_id):
|
|
1195
|
+
""" Given a triangle id, Return an array of the
|
|
1196
|
+
3 neighbour triangle id's.
|
|
1197
|
+
|
|
1198
|
+
Negative returned triangle id's represent a boundary as a neighbour.
|
|
1199
|
+
|
|
1200
|
+
If the given triangle id is bad, return an empty list.
|
|
1201
|
+
"""
|
|
1202
|
+
|
|
1203
|
+
try:
|
|
1204
|
+
return self.neighbours[tri_id,:]
|
|
1205
|
+
except IndexError:
|
|
1206
|
+
return []
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
def get_interpolation_object(self):
|
|
1210
|
+
"""Get object I that will allow linear interpolation using this mesh
|
|
1211
|
+
|
|
1212
|
+
This is a time consuming process but it needs only to be
|
|
1213
|
+
once for the mesh.
|
|
1214
|
+
|
|
1215
|
+
Interpolation can then be done using
|
|
1216
|
+
|
|
1217
|
+
result = I.interpolate_block(vertex_values, interpolation_points)
|
|
1218
|
+
|
|
1219
|
+
where vertex values have been obtained from a quantity using
|
|
1220
|
+
vertex_values, triangles = self.get_vertex_values()
|
|
1221
|
+
"""
|
|
1222
|
+
|
|
1223
|
+
if hasattr(self, 'interpolation_object'):
|
|
1224
|
+
I = self.interpolation_object
|
|
1225
|
+
else:
|
|
1226
|
+
from anuga.fit_interpolate.interpolate import Interpolate
|
|
1227
|
+
|
|
1228
|
+
# Get discontinuous mesh - this will match internal
|
|
1229
|
+
# representation of vertex values
|
|
1230
|
+
triangles = self.get_disconnected_triangles()
|
|
1231
|
+
vertex_coordinates = self.get_vertex_coordinates()
|
|
1232
|
+
|
|
1233
|
+
I = Interpolate(vertex_coordinates, triangles)
|
|
1234
|
+
self.interpolation_object = I
|
|
1235
|
+
|
|
1236
|
+
return I
|
|
1237
|
+
|
|
1238
|
+
|
|
1239
|
+
class Triangle_intersection:
|
|
1240
|
+
"""Store information about line segments intersecting a triangle
|
|
1241
|
+
|
|
1242
|
+
Attributes are
|
|
1243
|
+
|
|
1244
|
+
segment: Line segment intersecting triangle [[x0,y0], [x1, y1]]
|
|
1245
|
+
normal: [a,b] right hand normal to segment
|
|
1246
|
+
length: Length of intersecting segment
|
|
1247
|
+
triangle_id: id (in mesh) of triangle being intersected
|
|
1248
|
+
|
|
1249
|
+
"""
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
def __init__(self,
|
|
1253
|
+
segment=None,
|
|
1254
|
+
normal=None,
|
|
1255
|
+
length=None,
|
|
1256
|
+
triangle_id=None):
|
|
1257
|
+
self.segment = segment
|
|
1258
|
+
self.normal = normal
|
|
1259
|
+
self.length = length
|
|
1260
|
+
self.triangle_id = triangle_id
|
|
1261
|
+
|
|
1262
|
+
|
|
1263
|
+
def __repr__(self):
|
|
1264
|
+
s = 'Triangle_intersection('
|
|
1265
|
+
s += 'segment=%s, normal=%s, length=%s, triangle_id=%s)'\
|
|
1266
|
+
%(self.segment,
|
|
1267
|
+
self.normal,
|
|
1268
|
+
self.length,
|
|
1269
|
+
self.triangle_id)
|
|
1270
|
+
|
|
1271
|
+
return s
|
|
1272
|
+
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
def _get_intersecting_segments(V, N, line,
|
|
1276
|
+
verbose=False):
|
|
1277
|
+
"""Find edges intersected by line
|
|
1278
|
+
|
|
1279
|
+
Input:
|
|
1280
|
+
V: Vertex coordinates as obtained by mesh.get_vertex_coordinates()
|
|
1281
|
+
N: Number of triangles in mesh
|
|
1282
|
+
line - list of two points forming a segmented line
|
|
1283
|
+
verbose
|
|
1284
|
+
Output:
|
|
1285
|
+
list of instances of class Triangle_intersection
|
|
1286
|
+
|
|
1287
|
+
This method is used by the public method
|
|
1288
|
+
get_intersecting_segments(self, polyline) which also contains
|
|
1289
|
+
more documentation.
|
|
1290
|
+
"""
|
|
1291
|
+
|
|
1292
|
+
from anuga.geometry.polygon import intersection
|
|
1293
|
+
from anuga.geometry.polygon import is_inside_polygon
|
|
1294
|
+
|
|
1295
|
+
msg = 'Line segment must contain exactly two points'
|
|
1296
|
+
assert len(line) == 2, msg
|
|
1297
|
+
|
|
1298
|
+
# Origin of intersecting line to be used for
|
|
1299
|
+
# establishing direction
|
|
1300
|
+
xi0 = line[0][0]
|
|
1301
|
+
eta0 = line[0][1]
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
# Check intersection with edge segments for all triangles
|
|
1305
|
+
# FIXME (Ole): This should be implemented in C
|
|
1306
|
+
triangle_intersections={} # Keep track of segments already done
|
|
1307
|
+
for i in range(N):
|
|
1308
|
+
# Get nodes and edge segments for each triangle
|
|
1309
|
+
x0, y0 = V[3*i, :]
|
|
1310
|
+
x1, y1 = V[3*i+1, :]
|
|
1311
|
+
x2, y2 = V[3*i+2, :]
|
|
1312
|
+
|
|
1313
|
+
|
|
1314
|
+
edge_segments = [[[x0,y0], [x1, y1]],
|
|
1315
|
+
[[x1,y1], [x2, y2]],
|
|
1316
|
+
[[x2,y2], [x0, y0]]]
|
|
1317
|
+
|
|
1318
|
+
# Find segments that are intersected by line
|
|
1319
|
+
|
|
1320
|
+
intersections = {} # Use dictionary to record points only once
|
|
1321
|
+
for edge in edge_segments:
|
|
1322
|
+
|
|
1323
|
+
status, value = intersection(line, edge)
|
|
1324
|
+
#if value is not None: log.critical('Triangle %d, status=%s, '
|
|
1325
|
+
# 'value=%s'
|
|
1326
|
+
# % (i, str(status), str(value)))
|
|
1327
|
+
|
|
1328
|
+
if status == 1:
|
|
1329
|
+
# Normal intersection of one edge or vertex
|
|
1330
|
+
intersections[tuple(value)] = i
|
|
1331
|
+
|
|
1332
|
+
# Exclude singular intersections with vertices
|
|
1333
|
+
#if not(allclose(value, edge[0]) or\
|
|
1334
|
+
# allclose(value, edge[1])):
|
|
1335
|
+
# intersections.append(value)
|
|
1336
|
+
|
|
1337
|
+
if status == 2:
|
|
1338
|
+
# Edge is sharing a segment with line
|
|
1339
|
+
|
|
1340
|
+
# This is usually covered by the two
|
|
1341
|
+
# vertices that would have been picked up
|
|
1342
|
+
# under status == 1.
|
|
1343
|
+
# However, if coinciding line stops partway
|
|
1344
|
+
# along this edge, it will be recorded here.
|
|
1345
|
+
intersections[tuple(value[0,:])] = i
|
|
1346
|
+
intersections[tuple(value[1,:])] = i
|
|
1347
|
+
|
|
1348
|
+
|
|
1349
|
+
if len(intersections) == 1:
|
|
1350
|
+
# Check if either line end point lies fully within this triangle
|
|
1351
|
+
# If this is the case accept that as one end of the intersecting
|
|
1352
|
+
# segment
|
|
1353
|
+
|
|
1354
|
+
poly = V[3*i:3*i+3]
|
|
1355
|
+
if is_inside_polygon(line[1], poly, closed=False):
|
|
1356
|
+
intersections[tuple(line[1])] = i
|
|
1357
|
+
elif is_inside_polygon(line[0], poly, closed=False):
|
|
1358
|
+
intersections[tuple(line[0])] = i
|
|
1359
|
+
else:
|
|
1360
|
+
# Ignore situations where one vertex is touch, for instance
|
|
1361
|
+
continue
|
|
1362
|
+
|
|
1363
|
+
|
|
1364
|
+
msg = 'There can be only two or no intersections'
|
|
1365
|
+
assert len(intersections) in [0,2], msg
|
|
1366
|
+
|
|
1367
|
+
|
|
1368
|
+
if len(intersections) == 2:
|
|
1369
|
+
|
|
1370
|
+
# Calculate attributes for this segment
|
|
1371
|
+
|
|
1372
|
+
|
|
1373
|
+
# End points of intersecting segment
|
|
1374
|
+
points = intersections.keys()
|
|
1375
|
+
x0, y0 = points[0]
|
|
1376
|
+
x1, y1 = points[1]
|
|
1377
|
+
|
|
1378
|
+
|
|
1379
|
+
# Determine which end point is closer to the origin of the line
|
|
1380
|
+
# This is necessary for determining the direction of
|
|
1381
|
+
# the line and the normals
|
|
1382
|
+
|
|
1383
|
+
# Distances from line origin to the two intersections
|
|
1384
|
+
z0 = num.array([x0 - xi0, y0 - eta0], num.float)
|
|
1385
|
+
z1 = num.array([x1 - xi0, y1 - eta0], num.float)
|
|
1386
|
+
d0 = num.sqrt(num.sum(z0**2))
|
|
1387
|
+
d1 = num.sqrt(num.sum(z1**2))
|
|
1388
|
+
|
|
1389
|
+
if d1 < d0:
|
|
1390
|
+
# Swap
|
|
1391
|
+
xi, eta = x0, y0
|
|
1392
|
+
x0, y0 = x1, y1
|
|
1393
|
+
x1, y1 = xi, eta
|
|
1394
|
+
|
|
1395
|
+
# (x0,y0) is now the origin of the intersecting segment
|
|
1396
|
+
|
|
1397
|
+
|
|
1398
|
+
# Normal direction:
|
|
1399
|
+
# Right hand side relative to line direction
|
|
1400
|
+
vector = num.array([x1 - x0, y1 - y0], num.float) # Segment vector
|
|
1401
|
+
length = num.sqrt(num.sum(vector**2)) # Segment length
|
|
1402
|
+
normal = num.array([vector[1], -vector[0]], num.float)/length
|
|
1403
|
+
|
|
1404
|
+
|
|
1405
|
+
segment = ((x0,y0), (x1, y1))
|
|
1406
|
+
T = Triangle_intersection(segment=segment,
|
|
1407
|
+
normal=normal,
|
|
1408
|
+
length=length,
|
|
1409
|
+
triangle_id=i)
|
|
1410
|
+
|
|
1411
|
+
|
|
1412
|
+
# Add segment unless it was done earlier
|
|
1413
|
+
if not triangle_intersections.has_key(segment):
|
|
1414
|
+
triangle_intersections[segment] = T
|
|
1415
|
+
|
|
1416
|
+
|
|
1417
|
+
# Return segments as a list
|
|
1418
|
+
return triangle_intersections.values()
|
|
1419
|
+
|
|
1420
|
+
|
|
1421
|
+
def get_intersecting_segments(V, N, polyline,
|
|
1422
|
+
verbose=False):
|
|
1423
|
+
"""Internal function to find edges intersected by Polyline
|
|
1424
|
+
|
|
1425
|
+
Input:
|
|
1426
|
+
V: Vertex coordinates as obtained by mesh.get_vertex_coordinates()
|
|
1427
|
+
N: Number of triangles in mesh
|
|
1428
|
+
polyline - list of points forming a segmented line
|
|
1429
|
+
verbose
|
|
1430
|
+
Output:
|
|
1431
|
+
list of instances of class Triangle_intersection
|
|
1432
|
+
|
|
1433
|
+
This method is used by the public method
|
|
1434
|
+
get_intersecting_segments(self, polyline) which also contains
|
|
1435
|
+
more documentation.
|
|
1436
|
+
"""
|
|
1437
|
+
|
|
1438
|
+
msg = 'Polyline must contain at least two points'
|
|
1439
|
+
assert len(polyline) >= 2, msg
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
# For all segments in polyline
|
|
1443
|
+
triangle_intersections = []
|
|
1444
|
+
for i, point0 in enumerate(polyline[:-1]):
|
|
1445
|
+
|
|
1446
|
+
point1 = polyline[i+1]
|
|
1447
|
+
if verbose:
|
|
1448
|
+
log.critical('Extracting mesh intersections from line:')
|
|
1449
|
+
log.critical('(%.2f, %.2f) - (%.2f, %.2f)'
|
|
1450
|
+
% (point0[0], point0[1], point1[0], point1[1]))
|
|
1451
|
+
|
|
1452
|
+
line = [point0, point1]
|
|
1453
|
+
triangle_intersections += _get_intersecting_segments(V, N, line,
|
|
1454
|
+
verbose=verbose)
|
|
1455
|
+
|
|
1456
|
+
|
|
1457
|
+
msg = 'No segments found'
|
|
1458
|
+
assert len(triangle_intersections) > 0, msg
|
|
1459
|
+
|
|
1460
|
+
|
|
1461
|
+
return triangle_intersections
|
|
1462
|
+
|
|
1463
|
+
|
|
1464
|
+
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
def segment_midpoints(segments):
|
|
1468
|
+
"""Calculate midpoints of all segments
|
|
1469
|
+
|
|
1470
|
+
Inputs:
|
|
1471
|
+
segments: List of instances of class Segment
|
|
1472
|
+
|
|
1473
|
+
Ouputs:
|
|
1474
|
+
midpoints: List of points
|
|
1475
|
+
"""
|
|
1476
|
+
|
|
1477
|
+
midpoints = []
|
|
1478
|
+
msg = 'Elements of input list to segment_midpoints must be of class Triangle_intersection'
|
|
1479
|
+
for segment in segments:
|
|
1480
|
+
assert isinstance(segment, Triangle_intersection), msg
|
|
1481
|
+
|
|
1482
|
+
midpoint = num.sum(num.array(segment.segment, num.float), axis=0)/2
|
|
1483
|
+
midpoints.append(midpoint)
|
|
1484
|
+
|
|
1485
|
+
return midpoints
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
|