erod.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /****************************************************************************
  2. *
  3. * MODULE: simwe library
  4. * AUTHOR(S): Helena Mitasova, Jaro Hofierka, Lubos Mitas:
  5. * PURPOSE: Hydrologic and sediment transport simulation (SIMWE)
  6. *
  7. * COPYRIGHT: (C) 2002 by the GRASS Development Team
  8. *
  9. * This program is free software under the GNU General Public
  10. * License (>=v2). Read the file COPYING that comes with GRASS
  11. * for details.
  12. *
  13. *****************************************************************************/
  14. /* erod.c (simlib), 20.nov.2002, JH */
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <math.h>
  18. #include <grass/gis.h>
  19. #include <grass/bitmap.h>
  20. #include <grass/linkm.h>
  21. #include <grass/waterglobs.h>
  22. /* divergence computation from a given field */
  23. void erod(double **hw)
  24. {
  25. /* hw = sigma or gamma */
  26. double dyp, dyn, dya, dxp, dxn, dxa;
  27. int k, l;
  28. int l1, lp, k1, kp, ln, kn, k2, l2;
  29. for (k = 0; k < my; k++) {
  30. for (l = 0; l < mx; l++) {
  31. lp = max(0, l - 2);
  32. l1 = lp + 1;
  33. kp = max(0, k - 2);
  34. k1 = kp + 1;
  35. ln = min(mx - 1, l + 1);
  36. l2 = ln - 1;
  37. kn = min(my - 1, k + 1);
  38. k2 = kn - 1;
  39. if (zz[k][l] != UNDEF || zz[k][ln] != UNDEF || zz[kp][l] != UNDEF || zz[k][lp] != UNDEF || zz[k][l1] != UNDEF || zz[k1][l] != UNDEF || zz[kn][l] != UNDEF) { /* jh fix */
  40. dxp = (v1[k][lp] * hw[k][lp] - v1[k][l1] * hw[k][l1]) / stepx;
  41. dxn = (v1[k][l2] * hw[k][l2] - v1[k][ln] * hw[k][ln]) / stepx;
  42. dxa = 0.5 * (dxp + dxn);
  43. dyp = (v2[kp][l] * hw[kp][l] - v2[k1][l] * hw[k1][l]) / stepy;
  44. dyn = (v2[k2][l] * hw[k2][l] - v2[kn][l] * hw[kn][l]) / stepy;
  45. dya = 0.5 * (dyp + dyn);
  46. er[k][l] = (dxa + dya) / deltap;
  47. }
  48. else
  49. er[k][l] = UNDEF;
  50. }
  51. }
  52. }