test_r_terraflow.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. """Test check stability of results from r.terraflow
  2. @author Stefan Blumentrath, NINA
  3. """
  4. import os
  5. import tempfile
  6. from grass.gunittest.case import TestCase
  7. class TestTerraflow(TestCase):
  8. elevation = "elevation"
  9. testdir = os.path.join(tempfile.gettempdir(), "terraflow_test")
  10. teststats = os.path.join(tempfile.gettempdir(), "terraflow_test_stats.txt")
  11. @classmethod
  12. def setUpClass(cls):
  13. """Use temporary region settings"""
  14. cls.use_temp_region()
  15. cls.runModule("g.region", flags="p", raster=cls.elevation)
  16. @classmethod
  17. def tearDownClass(cls):
  18. """!Remove the temporary region"""
  19. cls.del_temp_region()
  20. def setUp(cls):
  21. """Create input data for steady state groundwater flow computation"""
  22. if not os.path.exists(cls.testdir):
  23. os.mkdir(cls.testdir)
  24. def test_univar_mfd(cls):
  25. # compute a steady state groundwater flow
  26. cls.assertModule(
  27. "r.terraflow",
  28. overwrite=True,
  29. verbose=True,
  30. elevation=cls.elevation,
  31. filled="terra_flooded",
  32. direction="terra_flowdir",
  33. swatershed="terra_sink",
  34. accumulation="terra_flowaccum",
  35. tci="terra_tci",
  36. directory=cls.testdir,
  37. stats=cls.teststats,
  38. )
  39. # Output of r.univar -g
  40. terra_flooded_univar = """n=2025000
  41. null_cells=0
  42. cells=2025000
  43. min=55.5787925720215
  44. max=156.329864501953
  45. range=100.751071929932
  46. mean=110.466900511132
  47. mean_of_abs=110.466900511132
  48. stddev=20.2568412316924
  49. variance=410.339616685993
  50. coeff_var=18.3374758755462
  51. sum=223695473.535042"""
  52. terra_flowdir_univar = """n=2025000
  53. null_cells=0
  54. cells=2025000
  55. min=0
  56. max=255
  57. range=255
  58. mean=114.239481481481
  59. mean_of_abs=114.239481481481
  60. stddev=84.9304048144913
  61. variance=7213.17366195336
  62. coeff_var=74.344179186649
  63. sum=231334950"""
  64. terra_sink_univar = """n=2025000
  65. null_cells=0
  66. cells=2025000
  67. min=0
  68. max=7945
  69. range=7945
  70. mean=3716.98878864198
  71. mean_of_abs=3716.98878864198
  72. stddev=2352.78190064133
  73. variance=5535582.67198542
  74. coeff_var=63.2980628790363
  75. sum=7526902297"""
  76. terra_flowaccum_univar = """n=2025000
  77. null_cells=0
  78. cells=2025000
  79. min=1
  80. max=638570.4375
  81. range=638569.4375
  82. mean=644.701550164795
  83. mean_of_abs=644.701550164795
  84. stddev=10616.1468932394
  85. variance=112702574.858836
  86. coeff_var=1646.67618536449
  87. sum=1305520639.08371"""
  88. terra_tci_univar = """n=2025000
  89. null_cells=0
  90. cells=2025000
  91. min=1.07463788986206
  92. max=16.7091903686523
  93. range=15.6345524787903
  94. mean=4.11934358476421
  95. mean_of_abs=4.11934358476421
  96. stddev=1.97140337926634
  97. variance=3.88643128378274
  98. coeff_var=47.8572213922083
  99. sum=8341670.75914752"""
  100. # cls.assertRasterFitsUnivar(raster="terra_flooded", reference=terra_flooded_univar, precision=3)
  101. cls.assertRasterFitsUnivar(
  102. raster="terra_flowdir", reference=terra_flowdir_univar, precision=3
  103. )
  104. cls.assertRasterFitsUnivar(
  105. raster="terra_sink", reference=terra_sink_univar, precision=3
  106. )
  107. cls.assertRasterFitsUnivar(
  108. raster="terra_flowaccum", reference=terra_flowaccum_univar, precision=3
  109. )
  110. cls.assertRasterFitsUnivar(
  111. raster="terra_tci", reference=terra_tci_univar, precision=3
  112. )
  113. if __name__ == "__main__":
  114. from grass.gunittest.main import test
  115. test()