benchmark_r_slope_aspect.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """Benchmarking of r.slope aspect
  2. @author Aaron Saw Min Sern
  3. """
  4. from grass.exceptions import CalledModuleError
  5. from grass.pygrass.modules import Module
  6. from subprocess import DEVNULL
  7. import grass.benchmark as bm
  8. def main():
  9. results = []
  10. # Users can add more or modify existing reference maps
  11. benchmark(7071, "r.slope.aspect_50M", results)
  12. benchmark(10000, "r.slope.aspect_100M", results)
  13. benchmark(14142, "r.slope.aspect_200M", results)
  14. benchmark(20000, "r.slope.aspect_400M", results)
  15. bm.nprocs_plot(results, filename="r_slope_aspect_benchmark_size.svg")
  16. def benchmark(size, label, results):
  17. reference = "r_slope_aspect_reference_map"
  18. slope = "benchmark_slope"
  19. aspect = "benchmark_aspect"
  20. pcurv = "benchmark_pcurv"
  21. tcurv = "benchmark_tcurv"
  22. generate_map(rows=size, cols=size, fname=reference)
  23. module = Module(
  24. "r.slope.aspect",
  25. elevation=reference,
  26. slope=slope,
  27. aspect=aspect,
  28. pcurvature=pcurv,
  29. tcurvature=tcurv,
  30. run_=False,
  31. stdout_=DEVNULL,
  32. overwrite=True,
  33. )
  34. results.append(bm.benchmark_nprocs(module, label=label, max_nprocs=16, repeat=3))
  35. Module("g.remove", quiet=True, flags="f", type="raster", name=reference)
  36. Module("g.remove", quiet=True, flags="f", type="raster", name=slope)
  37. Module("g.remove", quiet=True, flags="f", type="raster", name=aspect)
  38. Module("g.remove", quiet=True, flags="f", type="raster", name=pcurv)
  39. Module("g.remove", quiet=True, flags="f", type="raster", name=tcurv)
  40. def generate_map(rows, cols, fname):
  41. Module("g.region", flags="p", s=0, n=rows, w=0, e=cols, res=1)
  42. # Generate using r.random.surface if r.surf.fractal fails
  43. try:
  44. print("Generating reference map using r.surf.fractal...")
  45. Module("r.surf.fractal", output=fname)
  46. except CalledModuleError:
  47. print("r.surf.fractal fails, using r.random.surface instead...")
  48. Module("r.random.surface", output=fname)
  49. if __name__ == "__main__":
  50. main()