Mapper
weigh.c
Go to the documentation of this file.
1 
2 
3 #include "prototypes.h"
4 
5 float weigh(struct stn_values *stn_values,int i,int inum,double fdif,
6  double mindif,int maxhours,int *sindex,double *svalue)
7 
8 {
9 
10 int k,maxk,bflag;
11 long maxtime,ldif;
12 float mdif,maxmdif,maxallowed;
13 
14 maxtime=(long)maxhours * 3600L;
15 maxallowed=5.0;
16 
17 maxk=200;
18 
19 /*check foreward in time */
20 
21 bflag=0;
22 
23 for(k=2;k<=maxk;k++) {
24 
25  if(i-k < 0)
26  break;
27 
28  if(i-k < *sindex)
29  break;
30 
31  ldif=stn_values[i-k].clock - stn_values[i].clock;
32  mdif=stn_values[i-k].value - stn_values[i].value;
33 
34  if(ldif > maxtime)
35  break;
36 
37  if(mdif < 0 ) {
38 
39  if(mdif < -maxallowed) {
40 
41  break;
42 
43  }
44 
45  bflag=1;
46  break;
47 
48  }
49 
50 
51  }
52 
53 /* check backward in time */
54 
55 maxmdif=0.0;
56 
57 for(k=1;k<=maxk;k++) {
58 
59  if(i+k >=inum)
60  break;
61 
62  ldif=stn_values[i].clock - stn_values[i+k].clock;
63  mdif=stn_values[i].value - stn_values[i+k].value;
64 /*
65 if(fdif > 2)
66 printf("%f %d %f %d %f\n",mdif,i,stn_values[i].value,i+k,stn_values[i+k].value);
67 */
68  if(mdif < -maxallowed) {
69 
70  return(fdif);
71 
72  }
73 
74  if(ldif > maxtime)
75  break;
76 
77  if(bflag==1 && mdif <= 0) {
78 
79  if((i-1) < *sindex)
80  return(0.0);
81 
82 
83  return(fdif);
84 
85  }
86 
87  if(mdif < maxmdif) {
88 
89  *svalue=stn_values[i+k].value;
90  *sindex=i+k;
91  maxmdif=mdif;
92 
93  }
94 
95  }
96 
97 if(maxmdif < 0.0) {
98 
99  if(fdif <= -maxmdif)
100  return(0.0);
101 
102  fdif=fdif+maxmdif;
103 
104  }
105 
106 
107 return(fdif);
108 
109 }
static int i
int k
Definition: mapp2h.h:48
int maxhours
Definition: mapper.c:57
time_t clock
Definition: hydro_data.h:32
float value
Definition: hydro_data.h:35
float weigh(struct stn_values *stn_values, int i, int inum, double fdif, double mindif, int maxhours, int *sindex, double *svalue)
Definition: weigh.c:5