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
}
i
static int i
Definition:
get_apps_defaults.c:110
k
int k
Definition:
mapp2h.h:48
maxhours
int maxhours
Definition:
mapper.c:57
prototypes.h
stn_values
Definition:
hydro_data.h:31
stn_values::clock
time_t clock
Definition:
hydro_data.h:32
stn_values::value
float value
Definition:
hydro_data.h:35
weigh
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
Generated by
1.9.1