global.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include <stdio.h>
  2. #define FILL 0x1
  3. #define DIR 0x2
  4. #define BELEV 0x4
  5. #define TOPIDX 0x8
  6. #define IDXSTATS 0x10
  7. #define OUTPUT 0x20
  8. #define BUFSIZE 1024
  9. #define ZERO 0.0000001
  10. #define TOLERANCE 0.00001
  11. #define MAXITER 20
  12. #define NTERMS 10
  13. /* file_io.c */
  14. void get_line(FILE * fp, char *buffer);
  15. void read_input(void);
  16. void write_output(void);
  17. /* topmodel.c */
  18. void create_topidxstats(char *topidx, int ntopidxclasses, char *outtopidxstats);
  19. double calculate_lambda(void);
  20. void initialize(void);
  21. void calculate_flows(void);
  22. double calculate_efficiency(void);
  23. void calculate_others(void);
  24. void run_topmodel(void);
  25. /* infiltration.c */
  26. double calculate_infiltration(int timestep, double R);
  27. /* Topographic index statistics file */
  28. struct topidxstats
  29. {
  30. /* misc.ntopidxclasses */
  31. double *atb;
  32. double *Aatb_r;
  33. };
  34. /* Parameters file */
  35. struct params
  36. {
  37. char *name;
  38. double A;
  39. double qs0;
  40. double lnTe;
  41. double m;
  42. double Sr0;
  43. double Srmax;
  44. double td;
  45. double vch;
  46. double vr;
  47. int infex;
  48. double K0;
  49. double psi;
  50. double dtheta;
  51. int nch;
  52. /* params.nch's */
  53. double *d;
  54. double *Ad_r;
  55. };
  56. /* Input file */
  57. struct input
  58. {
  59. int ntimesteps;
  60. double dt;
  61. /* input.ntimestep's */
  62. double *R;
  63. double *Ep;
  64. };
  65. /* File names */
  66. struct file
  67. {
  68. char *params;
  69. char *topidxstats;
  70. char *input;
  71. char *output;
  72. char *obsflow;
  73. };
  74. /* Miscellaneous TOPMODEL variables */
  75. struct misc
  76. {
  77. /* Number of non-null cells */
  78. int ncells;
  79. /* Number of topographic index classes */
  80. int ntopidxclasses;
  81. /* Model efficiency */
  82. double Em;
  83. int ndelays;
  84. int nreaches;
  85. double lnTe;
  86. double vch;
  87. double vr;
  88. double lambda;
  89. double qss;
  90. double qs0;
  91. double Qobs_peak;
  92. double Qt_peak;
  93. double Qobs_mean;
  94. double Qt_mean;
  95. int tobs_peak;
  96. int tt_peak;
  97. /* params.nch's */
  98. double *tch;
  99. /* misc.nreach's */
  100. double *Ad;
  101. /* input.ntimestep's */
  102. double *Qobs;
  103. double *Qt;
  104. double *qs; /* spatially constant? */
  105. double *S_mean;
  106. double *f;
  107. double *fex;
  108. /* input.ntimestep * (misc.ntopidxclasses + 1)'s */
  109. double **qt;
  110. double **qo;
  111. double **qv;
  112. /* input.ntimestep * misc.ntopidxclassess */
  113. double **Srz;
  114. double **Suz;
  115. double **S;
  116. double **Ea;
  117. double **ex;
  118. /* Miscellaneous variables */
  119. int timestep;
  120. int topidxclass;
  121. };
  122. #ifdef _MAIN_C_
  123. #define GLOBAL
  124. #else
  125. #define GLOBAL extern
  126. #endif
  127. GLOBAL struct params params;
  128. GLOBAL struct topidxstats topidxstats;
  129. GLOBAL struct input input;
  130. GLOBAL struct file file;
  131. GLOBAL struct misc misc;
  132. /* Miscellaneous variables */
  133. GLOBAL char buf[BUFSIZE];