Mapper
get_rain.c
Go to the documentation of this file.
1 #include "prototypes.h"
2 
3 float get_rain(struct stn_values *stn_values,char *pc,int inum,time_t etime,time_t btime,struct rainfall *r)
4 
5 {
6 
7 float val;
8 int ier;
9 struct tm *tm;
10 int isave;
11 int i;
12 int zdate;
13 
14 if(pc[2]=='D') {
15 
16  ier=-1;
17  tm=gmtime(&etime);
18 
19  zdate=(tm->tm_year+1900)*10000+(tm->tm_mon+1)*100+tm->tm_mday;
20 
21  for(i=0;i<inum;i++) {
22 
23  if(stn_values[i].zdate == zdate &&
24  stn_values[i].ztime/10000 > 11 &&
25  stn_values[i].ztime/10000 < 14 ) {
26 
27  ier=1;
28  r->rn=stn_values[i].value;
29 
30  /* printf("found daily rain %d %f\n",stn_values[i].zdate,r->rn); */
31 
32  break;
33  }
34 
35  }
36 
37  }
38 
39 if(pc[2]=='H') {
40 
41  r->maxtdif=1L*3600L;
42  r->maxgap=3.0;
43  ier=hourly_rain(stn_values,inum,etime,btime,r);
44 
45  }
46 
47 else if(strncmp(&pc[3],"RG",2)==0) {
48 
49  r->maxtdif=7L*3600L;
50  r->firstdif=1L*3600L;
51  r->maxgap=3.0;
52  ier=domsat_rain(stn_values,inum,etime,btime,r);
53 
54 
55  }
56 
57 else if(strncmp(&pc[3],"RP",2)==0) {
58 
59  r->maxtdif=7L*3600L;
60  r->firstdif=1L*3600L;
61  r->maxgap=3.0;
62  ier=domsat_rain(stn_values,inum,etime,btime,r);
63 
64  }
65 
66 else if(strncmp(&pc[3],"RR",2)==0) {
67 
68  r->maxtdif=36L*3600L;
69  r->maxgap=2.0;
70  ier=alert_rain(stn_values,inum,etime,btime,r);
71 
72  }
73 
74 else if(strncmp(&pc[3],"RM",2)==0) {
75 
76 
77  r->maxtdif=6L*3600L;
78  r->maxgap=5.0;
79  r->firstdif=1L*3600L;
80 
81  if((etime-btime)/3600 == 24) {
82 
83 
84  etime=etime-4*3600;
85  btime=btime-4*3600;
86  r->maxtdif=6L*3600L;
87  r->maxgap=5.0;
88  r->firstdif=1L*3600L;
89 
90 
91  }
92 
93  ier=snotel_rain(stn_values,inum,etime,btime,r);
94 
95 
96  if(r->rn > 0 && (etime-btime)/3600 == 24) {
97 
98  isave=(r->rn*10);
99  r->rn=(float)isave/10;
100 
101 
102  }
103 
104  }
105 
106 r->ier=ier;
107 
108 if(ier != 1)
109  val=-99;
110 
111 else
112  val=r->rn;
113 
114 
115 if(val >= 0 && val < .005)
116  val=0;
117 
118 return(val);
119 
120 }
alert_rain(struct stn_values *stn_values, int inum, time_t tstart, time_t tstop, struct rainfall *r)
Definition: alert_rain.c:16
static int i
int domsat_rain(struct stn_values *stn_values, int inum, time_t tstart, time_t tstop, struct rainfall *r)
Definition: domsat_rain.c:26
int isave
Definition: edit_stations.c:8
float get_rain(struct stn_values *stn_values, char *pc, int inum, time_t etime, time_t btime, struct rainfall *r)
Definition: get_rain.c:3
hourly_rain(struct stn_values *stn_values, int inum, time_t tstart, time_t tstop, struct rainfall *r)
Definition: hourly_rain.c:15
int snotel_rain(struct stn_values *, int, time_t, time_t, struct rainfall *)
Definition: snotel_rain.c:26
int maxtdif
Definition: hydro_data.h:24
float rn
Definition: hydro_data.h:18
float maxgap
Definition: hydro_data.h:26
int firstdif
Definition: hydro_data.h:25
int ier
Definition: hydro_data.h:27
float value
Definition: hydro_data.h:35