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