global.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <math.h>
  6. #include <time.h>
  7. #include <grass/gis.h>
  8. #include <grass/raster.h>
  9. #define FILL 0x1
  10. #define DIR 0x2
  11. #define BELEV 0x4
  12. #define TOPIDX 0x8
  13. #define IDXSTATS 0x10
  14. #define OUTPUT 0x20
  15. #define BUFSIZE 1024
  16. #define ZERO 0.0000001
  17. #define TOLERANCE 0.00001
  18. #define MAXITER 20
  19. #define NTERMS 10
  20. /* check_ready.c */
  21. int check_ready(void);
  22. int check_required(void);
  23. int check_names(void);
  24. int check_io(void);
  25. /* misc.c */
  26. void gregion(void);
  27. void depressionless(void);
  28. void basin_elevation(void);
  29. void top_index(void);
  30. /* file_io.c */
  31. void get_line(FILE * fp, char *buffer);
  32. void read_inputs(void);
  33. void write_outputs(void);
  34. /* topmodel.c */
  35. double get_lambda(void);
  36. void initialize(void);
  37. void implement(void);
  38. double get_Em(void);
  39. void others(void);
  40. void topmodel(void);
  41. /* infiltration.c */
  42. double get_f(double t, double R);
  43. /* Topographic index statistics file */
  44. struct idxstats
  45. {
  46. /* misc.nidxclass's */
  47. double *atb, *Aatb_r;
  48. };
  49. /* Parameters file */
  50. struct params
  51. {
  52. char *name;
  53. double A, qs0, lnTe, m, Sr0, Srmax, td, vch, vr;
  54. int infex;
  55. double K0, psi, dtheta;
  56. int nch;
  57. /* params.nch's */
  58. double *d, *Ad_r;
  59. };
  60. /* Input file */
  61. struct input
  62. {
  63. int ntimestep;
  64. double dt;
  65. /* input.ntimestep's */
  66. double *R, *Ep;
  67. };
  68. /* Map names */
  69. struct map
  70. {
  71. char *basin, *elev, *belev, *fill, *dir, *topidx;
  72. };
  73. /* File names */
  74. struct file
  75. {
  76. char *idxstats, *params, *input, *output, *Qobs;
  77. };
  78. /* Miscellaneous TOPMODEL variables */
  79. struct misc
  80. {
  81. /* Number of non-null cells */
  82. int ncell;
  83. /* Number of topographic index classes */
  84. int nidxclass;
  85. /* Model efficiency */
  86. double Em;
  87. int ndelay, nreach;
  88. double lnTe, vch, vr;
  89. double lambda;
  90. double qss, qs0;
  91. double Qobs_peak, Qt_peak, Qobs_mean, Qt_mean;
  92. int tobs_peak, tt_peak;
  93. /* params.nch's */
  94. double *tch;
  95. /* misc.nreach's */
  96. double *Ad;
  97. /* input.ntimestep's */
  98. double *Qobs;
  99. double *Qt;
  100. double *qs; /* spatially constant? */
  101. double *S_mean;
  102. double *f;
  103. double *fex;
  104. /* input.ntimestep * (misc.nidxclass + 1)'s */
  105. double **qt, **qo, **qv;
  106. /* input.ntimestep * misc.nidxclass's */
  107. double **Srz, **Suz;
  108. double **S;
  109. double **Ea;
  110. double **ex;
  111. /* Miscellaneous variables */
  112. int timestep, idxclass;
  113. };
  114. struct flg
  115. {
  116. /* Input flag */
  117. char input;
  118. /* Overwrite flag */
  119. char overwr;
  120. /* Overwrite list */
  121. int overwrlist;
  122. };
  123. extern struct idxstats idxstats;
  124. extern struct params params;
  125. extern struct input input;
  126. extern struct map map;
  127. extern struct file file;
  128. extern struct misc misc;
  129. extern struct flg flg;
  130. /* Miscellaneous variables */
  131. extern const char *mapset;
  132. extern char buf[BUFSIZE];