test_r_terraflow.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. """
  20. cls.del_temp_region()
  21. def setUp(cls):
  22. """Create input data for steady state groundwater flow computation
  23. """
  24. if not os.path.exists(cls.testdir):
  25. os.mkdir(cls.testdir)
  26. def test_univar_mfd(cls):
  27. #compute a steady state groundwater flow
  28. cls.assertModule("r.terraflow", overwrite=True, verbose=True,
  29. elevation=cls.elevation, filled='terra_flooded',
  30. direction='terra_flowdir', swatershed='terra_sink',
  31. accumulation='terra_flowaccum', tci='terra_tci',
  32. directory=cls.testdir, stats=cls.teststats)
  33. # Output of r.univar -g
  34. terra_flooded_univar="""n=2025000
  35. null_cells=0
  36. cells=2025000
  37. min=55.5787925720215
  38. max=156.329864501953
  39. range=100.751071929932
  40. mean=110.466900511132
  41. mean_of_abs=110.466900511132
  42. stddev=20.2568412316924
  43. variance=410.339616685993
  44. coeff_var=18.3374758755462
  45. sum=223695473.535042"""
  46. terra_flowdir_univar="""n=2025000
  47. null_cells=0
  48. cells=2025000
  49. min=0
  50. max=255
  51. range=255
  52. mean=114.239481481481
  53. mean_of_abs=114.239481481481
  54. stddev=84.9304048144913
  55. variance=7213.17366195336
  56. coeff_var=74.344179186649
  57. sum=231334950"""
  58. terra_sink_univar="""n=2025000
  59. null_cells=0
  60. cells=2025000
  61. min=0
  62. max=7945
  63. range=7945
  64. mean=3716.98878864198
  65. mean_of_abs=3716.98878864198
  66. stddev=2352.78190064133
  67. variance=5535582.67198542
  68. coeff_var=63.2980628790363
  69. sum=7526902297"""
  70. terra_flowaccum_univar="""n=2025000
  71. null_cells=0
  72. cells=2025000
  73. min=1
  74. max=638570.4375
  75. range=638569.4375
  76. mean=644.701550164795
  77. mean_of_abs=644.701550164795
  78. stddev=10616.1468932394
  79. variance=112702574.858836
  80. coeff_var=1646.67618536449
  81. sum=1305520639.08371"""
  82. terra_tci_univar="""n=2025000
  83. null_cells=0
  84. cells=2025000
  85. min=1.07463788986206
  86. max=16.7091903686523
  87. range=15.6345524787903
  88. mean=4.11934358476421
  89. mean_of_abs=4.11934358476421
  90. stddev=1.97140337926634
  91. variance=3.88643128378274
  92. coeff_var=47.8572213922083
  93. sum=8341670.75914752"""
  94. #cls.assertRasterFitsUnivar(raster="terra_flooded", reference=terra_flooded_univar, precision=3)
  95. cls.assertRasterFitsUnivar(raster="terra_flowdir", reference=terra_flowdir_univar, precision=3)
  96. cls.assertRasterFitsUnivar(raster="terra_sink", reference=terra_sink_univar, precision=3)
  97. cls.assertRasterFitsUnivar(raster="terra_flowaccum", reference=terra_flowaccum_univar, precision=3)
  98. cls.assertRasterFitsUnivar(raster="terra_tci", reference=terra_tci_univar, precision=3)
  99. if __name__ == '__main__':
  100. from grass.gunittest.main import test
  101. test()