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.
Files changed (870) hide show
  1. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.py +21 -0
  2. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.pyc +0 -0
  3. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.py +363 -0
  4. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.pyc +0 -0
  5. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.py +6 -0
  6. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.pyc +0 -0
  7. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.py +17 -0
  8. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.pyc +0 -0
  9. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.py +251 -0
  10. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.pyc +0 -0
  11. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.py +483 -0
  12. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.pyc +0 -0
  13. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.py +1080 -0
  14. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.pyc +0 -0
  15. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.py +865 -0
  16. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.pyc +0 -0
  17. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.py +862 -0
  18. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.pyc +0 -0
  19. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.py +2274 -0
  20. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.pyc +0 -0
  21. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.py +1011 -0
  22. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.pyc +0 -0
  23. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory_ext.pyd +0 -0
  24. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.py +1488 -0
  25. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.pyc +0 -0
  26. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh_ext.pyd +0 -0
  27. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_table_ext.pyd +0 -0
  28. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.py +299 -0
  29. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.pyc +0 -0
  30. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain_ext.pyd +0 -0
  31. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.py +2162 -0
  32. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.pyc +0 -0
  33. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity_ext.pyd +0 -0
  34. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.py +321 -0
  35. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.pyc +0 -0
  36. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.py +48 -0
  37. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.pyc +0 -0
  38. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.py +167 -0
  39. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.pyc +0 -0
  40. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/__init__.py +8 -0
  41. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/show_balanced_limiters.py +87 -0
  42. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ermapper.py +189 -0
  43. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_gauge.py +539 -0
  44. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_general_mesh.py +517 -0
  45. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_boundary_conditions.py +439 -0
  46. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_domain.py +907 -0
  47. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ghost.py +52 -0
  48. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_neighbour_mesh.py +1854 -0
  49. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_pmesh2domain.py +219 -0
  50. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_quantity.py +2859 -0
  51. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_region.py +99 -0
  52. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_tag_region.py +258 -0
  53. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_util.py +1632 -0
  54. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.py +928 -0
  55. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.pyc +0 -0
  56. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.py +12 -0
  57. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.pyc +0 -0
  58. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.py +298 -0
  59. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.pyc +0 -0
  60. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection_ext.pyd +0 -0
  61. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.py +27 -0
  62. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.pyc +0 -0
  63. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/__init__.py +8 -0
  64. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/test_advection.py +183 -0
  65. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.py +4 -0
  66. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.pyc +0 -0
  67. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.py +654 -0
  68. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.pyc +0 -0
  69. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.py +21 -0
  70. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.pyc +0 -0
  71. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/__init__.py +8 -0
  72. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/test_alpha_shape.py +402 -0
  73. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.py +46 -0
  74. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.pyc +0 -0
  75. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.py +18 -0
  76. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.pyc +0 -0
  77. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.py +2531 -0
  78. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.pyc +0 -0
  79. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.py +20 -0
  80. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.pyc +0 -0
  81. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.py +21 -0
  82. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.pyc +0 -0
  83. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/__init__.py +8 -0
  84. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/test_caching.py +895 -0
  85. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.py +82 -0
  86. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.pyc +0 -0
  87. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.py +273 -0
  88. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.pyc +0 -0
  89. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.py +6 -0
  90. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.pyc +0 -0
  91. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.py +478 -0
  92. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.pyc +0 -0
  93. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.py +250 -0
  94. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.pyc +0 -0
  95. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.py +128 -0
  96. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.pyc +0 -0
  97. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.py +233 -0
  98. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.pyc +0 -0
  99. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.py +21 -0
  100. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.pyc +0 -0
  101. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/__init__.py +8 -0
  102. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.csv +11 -0
  103. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.lic +17 -0
  104. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.csv +11 -0
  105. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.lic +17 -0
  106. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.csv +11 -0
  107. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.lic +17 -0
  108. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.lic +17 -0
  109. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.xls +0 -0
  110. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_geo_reference.py +716 -0
  111. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_lat_long_UTM_conversion.py +126 -0
  112. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_point.py +125 -0
  113. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_redfearn.py +508 -0
  114. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.py +9 -0
  115. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.pyc +0 -0
  116. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.py +1627 -0
  117. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.pyc +0 -0
  118. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.py +114 -0
  119. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.pyc +0 -0
  120. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.py +362 -0
  121. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.pyc +0 -0
  122. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.py +1630 -0
  123. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.pyc +0 -0
  124. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.py +21 -0
  125. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.pyc +0 -0
  126. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/__init__.py +8 -0
  127. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/culvert_polygons_example.py +38 -0
  128. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.csv +20 -0
  129. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.lic +17 -0
  130. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.csv +20 -0
  131. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.lic +17 -0
  132. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.lic +17 -0
  133. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.xls +0 -0
  134. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/run_culvert_flat_water_lev.py +173 -0
  135. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_class.py +812 -0
  136. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_polygons.py +84 -0
  137. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines.py +586 -0
  138. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_10pct.py +342 -0
  139. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_1pct.py +342 -0
  140. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_10pct.py +338 -0
  141. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_1pct.py +338 -0
  142. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_new_culvert_class.py +810 -0
  143. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.py +9 -0
  144. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.pyc +0 -0
  145. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.py +223 -0
  146. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.pyc +0 -0
  147. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.py +467 -0
  148. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.pyc +0 -0
  149. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.py +21 -0
  150. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.pyc +0 -0
  151. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/__init__.py +8 -0
  152. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_exposure.py +325 -0
  153. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_inundation_damage.py +610 -0
  154. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.py +130 -0
  155. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.pyc +0 -0
  156. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.py +193 -0
  157. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.pyc +0 -0
  158. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.py +54 -0
  159. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.pyc +0 -0
  160. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.py +399 -0
  161. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.pyc +0 -0
  162. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.py +120 -0
  163. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.pyc +0 -0
  164. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.py +266 -0
  165. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.pyc +0 -0
  166. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.py +29 -0
  167. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.pyc +0 -0
  168. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.py +27 -0
  169. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.pyc +0 -0
  170. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.py +293 -0
  171. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.pyc +0 -0
  172. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.py +1552 -0
  173. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.pyc +0 -0
  174. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/__init__.py +8 -0
  175. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_csv.py +413 -0
  176. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_mux.py +1539 -0
  177. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_read_sww.py +350 -0
  178. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_sww.py +560 -0
  179. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_ungenerate.py +283 -0
  180. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_urs.py +217 -0
  181. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.py +92 -0
  182. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.pyc +0 -0
  183. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.py +323 -0
  184. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.pyc +0 -0
  185. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs_ext.pyd +0 -0
  186. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.py +20 -0
  187. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.pyc +0 -0
  188. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.py +213 -0
  189. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.pyc +0 -0
  190. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/calc_grid_values_ext.pyd +0 -0
  191. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.py +165 -0
  192. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.pyc +0 -0
  193. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.py +90 -0
  194. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.pyc +0 -0
  195. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.py +145 -0
  196. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.pyc +0 -0
  197. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.py +357 -0
  198. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.pyc +0 -0
  199. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.py +327 -0
  200. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.pyc +0 -0
  201. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.py +436 -0
  202. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.pyc +0 -0
  203. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.py +367 -0
  204. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.pyc +0 -0
  205. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.py +122 -0
  206. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.pyc +0 -0
  207. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.py +181 -0
  208. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.pyc +0 -0
  209. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.py +29 -0
  210. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.pyc +0 -0
  211. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.py +141 -0
  212. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.pyc +0 -0
  213. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.py +321 -0
  214. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.pyc +0 -0
  215. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.py +550 -0
  216. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.pyc +0 -0
  217. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.py +547 -0
  218. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.pyc +0 -0
  219. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.py +175 -0
  220. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.pyc +0 -0
  221. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/__init__.py +8 -0
  222. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_2pts.py +249 -0
  223. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_csv2sts.py +118 -0
  224. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2array.py +121 -0
  225. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2dem.py +220 -0
  226. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2pts.py +411 -0
  227. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_file_conversion.py +953 -0
  228. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_grd2array.py +270 -0
  229. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_sww2dem.py +1882 -0
  230. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sts.py +2127 -0
  231. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sww.py +628 -0
  232. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.py +202 -0
  233. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.pyc +0 -0
  234. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.py +316 -0
  235. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.pyc +0 -0
  236. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.py +306 -0
  237. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.pyc +0 -0
  238. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.py +71 -0
  239. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.pyc +0 -0
  240. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.py +39 -0
  241. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.pyc +0 -0
  242. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.py +12 -0
  243. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.pyc +0 -0
  244. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.py +367 -0
  245. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.pyc +0 -0
  246. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.py +611 -0
  247. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.pyc +0 -0
  248. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fitsmooth.pyd +0 -0
  249. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.py +127 -0
  250. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.pyc +0 -0
  251. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.py +1144 -0
  252. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.pyc +0 -0
  253. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.py +305 -0
  254. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.pyc +0 -0
  255. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.py +79 -0
  256. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.pyc +0 -0
  257. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.py +131 -0
  258. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.pyc +0 -0
  259. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.py +37 -0
  260. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.pyc +0 -0
  261. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_fit.py +1150 -0
  262. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate.py +1952 -0
  263. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate2d.py +469 -0
  264. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_search_functions.py +236 -0
  265. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.py +66 -0
  266. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.pyc +0 -0
  267. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.py +11 -0
  268. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.pyc +0 -0
  269. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.py +133 -0
  270. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.pyc +0 -0
  271. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.py +1138 -0
  272. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.pyc +0 -0
  273. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_ext.pyd +0 -0
  274. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.py +133 -0
  275. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.pyc +0 -0
  276. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.py +190 -0
  277. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.pyc +0 -0
  278. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.py +27 -0
  279. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.pyc +0 -0
  280. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/__init__.py +8 -0
  281. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_geometry.py +110 -0
  282. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_polygon.py +1994 -0
  283. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.py +9 -0
  284. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.pyc +0 -0
  285. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.py +1698 -0
  286. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.pyc +0 -0
  287. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.py +21 -0
  288. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.pyc +0 -0
  289. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/tests/test_geospatial_data.py +1853 -0
  290. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.py +11 -0
  291. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.pyc +0 -0
  292. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.py +136 -0
  293. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.pyc +0 -0
  294. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.py +14 -0
  295. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.pyc +0 -0
  296. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.py +96 -0
  297. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.pyc +0 -0
  298. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.py +109 -0
  299. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.pyc +0 -0
  300. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.py +22 -0
  301. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.pyc +0 -0
  302. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/__init__.py +8 -0
  303. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m.lic +17 -0
  304. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m_all.lic +17 -0
  305. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_original.lic +17 -0
  306. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.asc +17 -0
  307. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.lic +17 -0
  308. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.asc +16 -0
  309. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.lic +17 -0
  310. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.asc +17 -0
  311. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.lic +17 -0
  312. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.asc +17 -0
  313. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.lic +17 -0
  314. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.asc +17 -0
  315. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.asc +17 -0
  316. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.lic +17 -0
  317. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.lic +17 -0
  318. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.asc +17 -0
  319. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.asc +17 -0
  320. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.lic +17 -0
  321. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.lic +17 -0
  322. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_maxasc.py +150 -0
  323. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_order_boundary.py +397 -0
  324. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.py +4 -0
  325. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.pyc +0 -0
  326. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.py +1073 -0
  327. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.pyc +0 -0
  328. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.py +21 -0
  329. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.pyc +0 -0
  330. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/tests/test_loadASCII.py +544 -0
  331. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.py +4 -0
  332. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.pyc +0 -0
  333. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.py +9 -0
  334. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.pyc +0 -0
  335. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.py +221 -0
  336. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.pyc +0 -0
  337. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine_c_layer.pyd +0 -0
  338. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.py +29 -0
  339. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.pyc +0 -0
  340. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/tests/test_generate_mesh.py +470 -0
  341. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.py +11 -0
  342. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.pyc +0 -0
  343. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.py +125 -0
  344. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.pyc +0 -0
  345. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.py +79 -0
  346. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.pyc +0 -0
  347. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.py +240 -0
  348. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.pyc +0 -0
  349. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.py +142 -0
  350. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.pyc +0 -0
  351. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.py +85 -0
  352. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.pyc +0 -0
  353. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.py +16 -0
  354. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.pyc +0 -0
  355. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.py +495 -0
  356. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.pyc +0 -0
  357. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.py +859 -0
  358. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.pyc +0 -0
  359. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.py +563 -0
  360. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.pyc +0 -0
  361. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator_ext.pyd +0 -0
  362. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.py +87 -0
  363. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.pyc +0 -0
  364. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator_ext.pyd +0 -0
  365. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.py +431 -0
  366. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.pyc +0 -0
  367. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.py +290 -0
  368. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.pyc +0 -0
  369. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.py +148 -0
  370. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.pyc +0 -0
  371. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.py +159 -0
  372. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.pyc +0 -0
  373. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.py +172 -0
  374. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.pyc +0 -0
  375. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.py +158 -0
  376. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.pyc +0 -0
  377. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.py +131 -0
  378. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.pyc +0 -0
  379. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.py +135 -0
  380. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.pyc +0 -0
  381. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.py +170 -0
  382. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.pyc +0 -0
  383. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.py +33 -0
  384. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.pyc +0 -0
  385. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_base_operator.py +51 -0
  386. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_boundary_flux_integral_operator.py +98 -0
  387. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_erosion_operators.py +344 -0
  388. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_kinematic_viscosity_operator.py +1366 -0
  389. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_rate_operators.py +888 -0
  390. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_elevation_operator.py +1034 -0
  391. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_quantity.py +511 -0
  392. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_stage_operator.py +491 -0
  393. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_w_uh_vh_operators.py +211 -0
  394. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.py +31 -0
  395. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.pyc +0 -0
  396. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.py +14 -0
  397. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.pyc +0 -0
  398. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.py +1682 -0
  399. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.pyc +0 -0
  400. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.py +205 -0
  401. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.pyc +0 -0
  402. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.py +467 -0
  403. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.pyc +0 -0
  404. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.py +332 -0
  405. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.pyc +0 -0
  406. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.py +283 -0
  407. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.pyc +0 -0
  408. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.py +207 -0
  409. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.pyc +0 -0
  410. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.py +605 -0
  411. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.pyc +0 -0
  412. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.py +228 -0
  413. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.pyc +0 -0
  414. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.py +281 -0
  415. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.pyc +0 -0
  416. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.py +230 -0
  417. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.pyc +0 -0
  418. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.py +445 -0
  419. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.pyc +0 -0
  420. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.py +959 -0
  421. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.pyc +0 -0
  422. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.py +282 -0
  423. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.pyc +0 -0
  424. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.py +1241 -0
  425. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.pyc +0 -0
  426. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.py +281 -0
  427. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.pyc +0 -0
  428. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.py +205 -0
  429. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.pyc +0 -0
  430. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.py +528 -0
  431. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.pyc +0 -0
  432. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.py +309 -0
  433. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.pyc +0 -0
  434. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.py +100 -0
  435. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.pyc +0 -0
  436. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.py +345 -0
  437. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.pyc +0 -0
  438. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.py +9253 -0
  439. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.pyc +0 -0
  440. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.py +671 -0
  441. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.pyc +0 -0
  442. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.py +389 -0
  443. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.pyc +0 -0
  444. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.py +80 -0
  445. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.pyc +0 -0
  446. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.py +4 -0
  447. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.pyc +0 -0
  448. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.py +24 -0
  449. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.pyc +0 -0
  450. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.py +8 -0
  451. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.pyc +0 -0
  452. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.py +24 -0
  453. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.pyc +0 -0
  454. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.py +1519 -0
  455. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.pyc +0 -0
  456. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.gif +0 -0
  457. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.lic +16 -0
  458. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.gif +0 -0
  459. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.lic +16 -0
  460. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.gif +0 -0
  461. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.lic +16 -0
  462. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.gif +0 -0
  463. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.lic +16 -0
  464. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.gif +0 -0
  465. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.lic +16 -0
  466. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.gif +0 -0
  467. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.lic +16 -0
  468. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.gif +0 -0
  469. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.lic +16 -0
  470. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.gif +0 -0
  471. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.lic +16 -0
  472. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.gif +0 -0
  473. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.lic +16 -0
  474. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.gif +0 -0
  475. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.lic +16 -0
  476. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.gif +0 -0
  477. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.lic +16 -0
  478. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.gif +0 -0
  479. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.lic +16 -0
  480. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.gif +0 -0
  481. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.lic +16 -0
  482. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.gif +0 -0
  483. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.lic +16 -0
  484. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.gif +0 -0
  485. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.lic +16 -0
  486. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.gif +0 -0
  487. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.lic +16 -0
  488. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.gif +0 -0
  489. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.lic +16 -0
  490. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.py +2416 -0
  491. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.pyc +0 -0
  492. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.py +373 -0
  493. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.pyc +0 -0
  494. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.py +130 -0
  495. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.pyc +0 -0
  496. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.py +43 -0
  497. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.pyc +0 -0
  498. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.py +22 -0
  499. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.pyc +0 -0
  500. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh.py +2129 -0
  501. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh_interface.py +988 -0
  502. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_meshquad.py +189 -0
  503. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.py +150 -0
  504. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.pyc +0 -0
  505. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.py +80 -0
  506. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.pyc +0 -0
  507. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.py +69 -0
  508. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.pyc +0 -0
  509. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.py +47 -0
  510. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.pyc +0 -0
  511. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.py +302 -0
  512. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.pyc +0 -0
  513. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.py +6 -0
  514. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.pyc +0 -0
  515. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/metis_ext.pyd +0 -0
  516. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.py +54 -0
  517. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.pyc +0 -0
  518. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/__init__.py +8 -0
  519. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/test_metis.py +141 -0
  520. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.py +49 -0
  521. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.pyc +0 -0
  522. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.py +12 -0
  523. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.pyc +0 -0
  524. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.py +1028 -0
  525. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.pyc +0 -0
  526. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.py +118 -0
  527. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.pyc +0 -0
  528. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.py +1339 -0
  529. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.pyc +0 -0
  530. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.py +101 -0
  531. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.pyc +0 -0
  532. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.py +37 -0
  533. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.pyc +0 -0
  534. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.py +3114 -0
  535. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.pyc +0 -0
  536. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_ext.pyd +0 -0
  537. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swDE1_domain_ext.pyd +0 -0
  538. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.py +576 -0
  539. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.pyc +0 -0
  540. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain_ext.pyd +0 -0
  541. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.py +652 -0
  542. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.pyc +0 -0
  543. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/__init__.py +8 -0
  544. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.csv +46 -0
  545. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.lic +17 -0
  546. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.csv +7855 -0
  547. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.lic +17 -0
  548. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.csv +17 -0
  549. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.lic +17 -0
  550. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_DE1_domain.py +111 -0
  551. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_data_manager.py +879 -0
  552. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_forcing.py +2271 -0
  553. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_loadsave.py +212 -0
  554. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_local_extrapolation_and_flux_updating.py +114 -0
  555. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_most2nc.py +52 -0
  556. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_shallow_water_domain.py +8670 -0
  557. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_swb2_domain.py +106 -0
  558. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_sww_interrogate.py +888 -0
  559. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_system.py +193 -0
  560. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-e-mux2 +0 -0
  561. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-n-mux2 +0 -0
  562. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-z-mux2 +0 -0
  563. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.lic +55 -0
  564. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-e-mux2 +0 -0
  565. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-n-mux2 +0 -0
  566. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-z-mux2 +0 -0
  567. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.lic +55 -0
  568. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-e-mux2 +0 -0
  569. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-n-mux2 +0 -0
  570. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-z-mux2 +0 -0
  571. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.lic +55 -0
  572. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.csv +252 -0
  573. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.lic +25 -0
  574. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.csv +252 -0
  575. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.lic +25 -0
  576. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.csv +252 -0
  577. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.lic +25 -0
  578. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.csv +252 -0
  579. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.lic +25 -0
  580. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.csv +252 -0
  581. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.lic +25 -0
  582. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.csv +252 -0
  583. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.lic +25 -0
  584. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.csv +252 -0
  585. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.lic +25 -0
  586. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.csv +252 -0
  587. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.lic +25 -0
  588. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.csv +252 -0
  589. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.lic +25 -0
  590. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.csv +252 -0
  591. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.lic +25 -0
  592. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.csv +252 -0
  593. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.lic +25 -0
  594. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.csv +252 -0
  595. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.lic +25 -0
  596. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.csv +252 -0
  597. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.lic +25 -0
  598. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.csv +252 -0
  599. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.lic +25 -0
  600. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.csv +252 -0
  601. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.lic +25 -0
  602. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.csv +252 -0
  603. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.lic +25 -0
  604. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.csv +252 -0
  605. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.lic +25 -0
  606. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.csv +252 -0
  607. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.lic +25 -0
  608. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.csv +252 -0
  609. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.lic +25 -0
  610. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.csv +252 -0
  611. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.lic +25 -0
  612. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.csv +252 -0
  613. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.lic +25 -0
  614. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.csv +252 -0
  615. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.lic +25 -0
  616. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.csv +252 -0
  617. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.lic +25 -0
  618. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.csv +252 -0
  619. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.lic +25 -0
  620. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.csv +252 -0
  621. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.lic +25 -0
  622. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.csv +252 -0
  623. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.lic +25 -0
  624. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.csv +252 -0
  625. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.lic +25 -0
  626. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.csv +252 -0
  627. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.lic +25 -0
  628. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.csv +252 -0
  629. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.lic +25 -0
  630. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.csv +252 -0
  631. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.lic +25 -0
  632. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.csv +252 -0
  633. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.lic +25 -0
  634. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.csv +252 -0
  635. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.lic +25 -0
  636. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.csv +252 -0
  637. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.lic +25 -0
  638. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.csv +252 -0
  639. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.lic +25 -0
  640. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.csv +252 -0
  641. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.lic +25 -0
  642. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.csv +252 -0
  643. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.lic +25 -0
  644. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.csv +252 -0
  645. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.lic +25 -0
  646. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.csv +252 -0
  647. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.lic +25 -0
  648. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.csv +252 -0
  649. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.lic +25 -0
  650. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.csv +252 -0
  651. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.lic +25 -0
  652. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.lic +18 -0
  653. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.txt +6 -0
  654. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.csv +252 -0
  655. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.lic +25 -0
  656. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.csv +252 -0
  657. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.lic +25 -0
  658. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.csv +252 -0
  659. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.lic +25 -0
  660. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.csv +252 -0
  661. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.lic +25 -0
  662. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.csv +252 -0
  663. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.lic +25 -0
  664. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.csv +252 -0
  665. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.lic +25 -0
  666. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.csv +252 -0
  667. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.lic +25 -0
  668. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.csv +252 -0
  669. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.lic +25 -0
  670. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.csv +252 -0
  671. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.lic +25 -0
  672. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.csv +252 -0
  673. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.lic +25 -0
  674. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.csv +252 -0
  675. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.lic +25 -0
  676. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.csv +252 -0
  677. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.lic +25 -0
  678. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.csv +252 -0
  679. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.lic +25 -0
  680. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.csv +252 -0
  681. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.lic +25 -0
  682. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.csv +252 -0
  683. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.lic +25 -0
  684. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.csv +252 -0
  685. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.lic +25 -0
  686. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.csv +252 -0
  687. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.lic +25 -0
  688. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.csv +252 -0
  689. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.lic +25 -0
  690. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.csv +252 -0
  691. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.lic +25 -0
  692. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.csv +252 -0
  693. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.lic +25 -0
  694. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.py +65 -0
  695. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.pyc +0 -0
  696. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.py +5 -0
  697. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.pyc +0 -0
  698. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.py +380 -0
  699. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.pyc +0 -0
  700. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.py +245 -0
  701. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.pyc +0 -0
  702. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.py +305 -0
  703. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.pyc +0 -0
  704. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.py +289 -0
  705. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.pyc +0 -0
  706. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.py +146 -0
  707. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.pyc +0 -0
  708. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.py +229 -0
  709. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.pyc +0 -0
  710. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.py +431 -0
  711. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.pyc +0 -0
  712. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.py +169 -0
  713. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.pyc +0 -0
  714. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.py +738 -0
  715. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.pyc +0 -0
  716. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.py +24 -0
  717. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.pyc +0 -0
  718. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.py +757 -0
  719. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.pyc +0 -0
  720. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/hecras_bridge_table.csv +105 -0
  721. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.lic +17 -0
  722. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.tms +0 -0
  723. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.lic +17 -0
  724. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.tms +0 -0
  725. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/test_hydrograph.tms +0 -0
  726. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_box_operator.py +2623 -0
  727. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_pipe_operator.py +482 -0
  728. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_inlet_operator.py +311 -0
  729. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_internal_boundary_functions.py +96 -0
  730. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_riverwall_structure.py +619 -0
  731. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_weir_orifice_trapezoid_operator.py +650 -0
  732. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.py +387 -0
  733. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.pyc +0 -0
  734. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.py +282 -0
  735. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.pyc +0 -0
  736. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.py +13 -0
  737. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.pyc +0 -0
  738. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.py +147 -0
  739. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.pyc +0 -0
  740. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.py +559 -0
  741. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.pyc +0 -0
  742. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.py +347 -0
  743. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.pyc +0 -0
  744. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.py +27 -0
  745. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.pyc +0 -0
  746. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.py +467 -0
  747. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.pyc +0 -0
  748. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.lic +23 -0
  749. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.txt +36 -0
  750. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.lic +23 -0
  751. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.txt +36 -0
  752. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.lic +23 -0
  753. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.txt +36 -0
  754. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/okada_tsunami_octave_95.txt +101 -0
  755. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_eq.py +67 -0
  756. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_okada_tsunami.py +439 -0
  757. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_smf.py +143 -0
  758. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_tsunami_okada.py +303 -0
  759. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.py +1885 -0
  760. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.pyc +0 -0
  761. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.py +11 -0
  762. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.pyc +0 -0
  763. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.py +76 -0
  764. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.pyc +0 -0
  765. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_ext.pyd +0 -0
  766. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.py +327 -0
  767. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.pyc +0 -0
  768. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.py +497 -0
  769. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.pyc +0 -0
  770. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.py +121 -0
  771. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.pyc +0 -0
  772. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.py +404 -0
  773. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.pyc +0 -0
  774. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.py +52 -0
  775. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.pyc +0 -0
  776. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.py +308 -0
  777. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.pyc +0 -0
  778. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.py +117 -0
  779. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.pyc +0 -0
  780. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.py +318 -0
  781. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.pyc +0 -0
  782. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.py +414 -0
  783. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.pyc +0 -0
  784. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.py +77 -0
  785. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.pyc +0 -0
  786. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.py +106 -0
  787. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.pyc +0 -0
  788. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.py +457 -0
  789. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.pyc +0 -0
  790. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.py +16 -0
  791. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.pyc +0 -0
  792. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.py +397 -0
  793. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.pyc +0 -0
  794. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.py +67 -0
  795. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.pyc +0 -0
  796. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.py +26 -0
  797. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.pyc +0 -0
  798. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.py +1237 -0
  799. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.pyc +0 -0
  800. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quad_tree_ext.pyd +0 -0
  801. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.py +612 -0
  802. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.pyc +0 -0
  803. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.py +164 -0
  804. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.pyc +0 -0
  805. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.py +70 -0
  806. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.pyc +0 -0
  807. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.py +39 -0
  808. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.pyc +0 -0
  809. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.py +398 -0
  810. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.pyc +0 -0
  811. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_ext.pyd +0 -0
  812. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_matrix_ext.pyd +0 -0
  813. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.py +1394 -0
  814. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.pyc +0 -0
  815. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.py +820 -0
  816. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.pyc +0 -0
  817. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.py +646 -0
  818. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.pyc +0 -0
  819. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.py +60 -0
  820. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.pyc +0 -0
  821. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.csv +4 -0
  822. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.lic +17 -0
  823. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.lic +17 -0
  824. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.png +0 -0
  825. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.csv +669 -0
  826. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.lic +33 -0
  827. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.csv +5 -0
  828. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.lic +17 -0
  829. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_cg_solve.py +569 -0
  830. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_csv_tools.py +435 -0
  831. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_data_audit.py +393 -0
  832. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_file_utils.py +157 -0
  833. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_function_utils.py +65 -0
  834. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_log_analyser.py +89 -0
  835. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_mem_time_equation.py +47 -0
  836. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_numerical_tools.py +616 -0
  837. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_plot_utils.py +455 -0
  838. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_quantity_setting_functions.py +369 -0
  839. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_sparse.py +215 -0
  840. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_spatialInputUtil.py +418 -0
  841. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_system_tools.py +483 -0
  842. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_xml_tools.py +316 -0
  843. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/util_ext.pyd +0 -0
  844. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.py +219 -0
  845. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.pyc +0 -0
  846. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.py +326 -0
  847. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.pyc +0 -0
  848. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.py +15 -0
  849. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.pyc +0 -0
  850. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.py +1429 -0
  851. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.pyc +0 -0
  852. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.py +24 -0
  853. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.pyc +0 -0
  854. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.py +38 -0
  855. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.pyc +0 -0
  856. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.py +51 -0
  857. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.pyc +0 -0
  858. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.py +17 -0
  859. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.pyc +0 -0
  860. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.py +22 -0
  861. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.pyc +0 -0
  862. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.py +55 -0
  863. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.pyc +0 -0
  864. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.py +11 -0
  865. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.pyc +0 -0
  866. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/PKG-INFO +117 -0
  867. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/SOURCES.txt +1329 -0
  868. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/dependency_links.txt +1 -0
  869. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/not-zip-safe +1 -0
  870. 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
+