Mapper
get_basin_data_new.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 void get_basin_data(char *basin_file,char *climo_file,char *hrap_file)
4 
5 {
6 extern struct tag tag[20];
7 extern char forecast_basin_file[100];
8 extern struct station station[3000];
9 extern struct map map[1500];
10 extern struct dval dval;
11 FILE *fr,*fp;
12 char *p,ibuf[200];
13 int ib,ier,l,numpts,ip,x,y,ip2,ip3,ip4,zones,i,maxib,dum;
14 double lat,lon;
15 long r,s;
16 float conv=.0174;
17 char bchar[10];
18 char hb5[10],parm[10],wfo[10];
19 int m;
20 float f[20];
21 int len,numzones;
22 char zone[5];
23 int ll;
24 int mm;
25 float amapvalue;
26 
27 if(basin_file[0]==0 ) {
28 
29  printf("no basin_file specified\n");
30  exit(1);
31 
32  }
33 
34 if(hrap_file[0]==0 ) {
35 
36  printf("no basin_file specified\n");
37  exit(1);
38 
39  }
40 
41 fr=fopen(basin_file,"r");
42 
43 if(fr==NULL) {
44 
45  printf("could not open basin_file %s\n",basin_file);
46 
47  exit(1);
48 
49  }
50 
51 fp=fopen(hrap_file,"r");
52 
53 if(fp==NULL) {
54 
55  printf("could not open hrap_file %s\n",hrap_file);
56 
57  exit(1);
58 
59  }
60 
61 ib=0;
62 
63 for(;;) {
64 
65  p=fgets(ibuf,80,fr);
66 
67  if(p==NULL)
68  break;
69 
70  p=strstr(ibuf,"END");
71 
72  if(p!=NULL)
73  continue;
74 
75  p=strchr(ibuf,'\n');
76  if(p!=NULL)
77  *p=0;
78 
79  ier=sscanf(ibuf,"%d %d %s",&numpts,&dum,map[ib].hb5);
80 
81  map[ib].basin_points=numpts;
82 
83  map[ib].basin=calloc(numpts,sizeof(XPoint));
84 
85  ll=0;
86 
87  for(l=0;l<numpts;l++) {
88 
89  p=fgets(ibuf,80,fr);
90 
91  if(p==NULL)
92  break;
93 
94  p=strstr(ibuf,"END");
95 
96  if(p!=NULL)
97  break;
98 
99  ier=sscanf(ibuf,"%lf %lf",&lon,&lat);
100 
101  lon=-lon;
102 
103  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
104  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
105 
106  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
107  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
108 
109  map[ib].basin[l].x=r;
110  map[ib].basin[l].y=s;
111  ll++;
112 
113  }
114 
116 /*
117  if(p==NULL)
118  p=fgets(ibuf,80,fr); */
119 
120  ib++;
121 
122  }
123 
124 map[ib].hb5[0]=0;
125 maxib=ib;
126 
127 for(ib=0;ib<maxib;ib++) {
128 
129  map[ib].gz=calloc(200,sizeof(float));
130  map[ib].uz=calloc(200,sizeof(float));
131  map[ib].mz=calloc(200,sizeof(float));
132  map[ib].lz=calloc(200,sizeof(float));
133  map[ib].gzc=calloc(24,sizeof(float));
134  map[ib].uzc=calloc(24,sizeof(float));
135  map[ib].mzc=calloc(24,sizeof(float));
136  map[ib].lzc=calloc(24,sizeof(float));
137  map[ib].zgz=calloc(200,sizeof(float));
138  map[ib].zuz=calloc(200,sizeof(float));
139  map[ib].zmz=calloc(200,sizeof(float));
140  map[ib].zlz=calloc(200,sizeof(float));
141  map[ib].tgz=calloc(200,sizeof(float));
142  map[ib].tuz=calloc(200,sizeof(float));
143  map[ib].tmz=calloc(200,sizeof(float));
144  map[ib].tlz=calloc(200,sizeof(float));
145  map[ib].maps_done=calloc(200,sizeof(int));
146  map[ib].tmaps_done=calloc(200,sizeof(int));
147  map[ib].zmaps_done=calloc(200,sizeof(int));
148 
149  for(m=0;m < 200;m++) {
150 
151  map[ib].gz[m]=-1;
152  map[ib].uz[m]=-1;
153  map[ib].mz[m]=-1;
154  map[ib].lz[m]=-1;
155  map[ib].zgz[m]=-1;
156  map[ib].zuz[m]=-1;
157  map[ib].zmz[m]=-1;
158  map[ib].zlz[m]=-1;
159  map[ib].tgz[m]=-999;
160  map[ib].tuz[m]=-999;
161  map[ib].tmz[m]=-999;
162  map[ib].tlz[m]=-999;
163  map[ib].maps_done[m]=-1;
164  map[ib].tmaps_done[m]=-1;
165  map[ib].zmaps_done[m]=-1;
166 
167  }
168 
169 }
170 
171 for(ib=0;ib<maxib;ib++) {
172 
173  p=fgets(ibuf,80,fp);
174 
175 
176  if(p==NULL)
177  break;
178 
179  p=strchr(ibuf,'\n');
180  if(p!=NULL)
181  *p=0;
182 
183  ier=sscanf(ibuf,"%d %d %*s %s",&numpts,&zones,bchar);
184 
185  strcpy(map[ib].bchar,bchar);
186 
187  map[ib].hrap_points=numpts;
188 
189  map[ib].hrap_data=calloc(numpts,sizeof(struct hrap_data));
190 
191  for(mm=0;mm<4;mm++)
192  map[ib].zones[mm]=-1;
193 
194  for(l=0;l<numpts;l++) {
195 
196  for(mm=0;mm<4;mm++)
197  map[ib].hrap_data[l].zone[mm]=-1;
198 
199  p=fgets(ibuf,100,fp);
200 
201  if(p==NULL)
202  break;
203 
204  ier=sscanf(ibuf,"%d %d %d %d %d %d\n",&x,&y,&ip,&ip2,&ip3,&ip4);
205 
206  if(ip < 0 || ip > 4) {
207 
208  printf("hrap error\n");
209  exit(1);
210 
211  }
212 
213  map[ib].hrap_data[l].x=x;
214  map[ib].hrap_data[l].y=y;
215  map[ib].hrap_data[l].zone[ip-1]=1;
216  map[ib].zones[0]=1;
217 
218  if(ier>=4) {
219 
220  if(ip2 < 0 || ip2 > 4) {
221 
222  printf("hrap error\n");
223  exit(1);
224 
225  }
226 
227  map[ib].hrap_data[l].zone[ip2-1]=1;
228  map[ib].zones[ip2-1]=1;
229 
230  }
231 
232 
233  if(ier>=5) {
234 
235  if(ip3 < 0 || ip3 > 4) {
236 
237  printf("hrap error\n");
238  exit(1);
239 
240  }
241 
242  map[ib].hrap_data[l].zone[ip3-1]=1;
243  map[ib].zones[ip3-1]=1;
244 
245  }
246 
247  if(ier>=6) {
248 
249  if(ip4 < 0 || ip4 > 4) {
250 
251  printf("hrap error\n");
252  exit(1);
253 
254  }
255 
256  map[ib].hrap_data[l].zone[ip4-1]=1;
257  map[ib].zones[ip4-1]=1;
258 
259  }
260 
261  }
262 
263 
264 
265  }
266 
267 fclose(fr);
268 fclose(fp);
269 
270 /* get climotology if needed */
271 
272 /* initialize climo data */
273 
274 for(i=0;i<maxib;i++) {
275 
276  for(m=0;m<24;m++) {
277 
278  map[i].lzc[m]=-99;
279  map[i].mzc[m]=-99;
280  map[i].uzc[m]=-99;
281  map[i].gzc[m]=-99;
282 
283  }
284 
285  }
286 
287 if(climo_file[0] != 0) {
288 
289  fp=fopen(climo_file,"r");
290 
291  if(fp==NULL) {
292 
293  printf("could not open %s\n",climo_file);
294 
295  exit(1);
296 
297  }
298 
299  for(;;) {
300 
301  p=fgets(ibuf,200,fp);
302  if(p==NULL)
303  break;
304 
305 
306  ier=sscanf(ibuf,"%s %s %f %f %f %f %f %f %f %f %f %f %f %f",
307  hb5,parm,&f[0],&f[1],&f[2],&f[3],&f[4],&f[5],&f[6],&f[7],&f[8],
308  &f[9],&f[10],&f[11]);
309 
310  if(ier != 14)
311  continue;
312 
313 
314  for(i=0;i<maxib;i++) {
315 
316  len=strlen(map[i].hb5);
317 
318  if(strncmp(map[i].hb5,hb5,len)==0) {
319 
320  numzones=0;
321 
322  for(l=0;l < 4;l++) {
323 
324  if(map[i].zones[l] < 0)
325  continue;
326 
327  numzones++;
328 
329  }
330 
331  zone[0]=hb5[len];
332  zone[1]=0;
333 
334  if(zone[0]==0) {
335 
336  map[i].lzc[0]=f[8];
337  map[i].lzc[1]=f[7];
338  map[i].lzc[2]=f[6];
339  map[i].lzc[3]=f[5];
340  map[i].lzc[4]=f[4];
341  map[i].lzc[5]=f[3];
342  map[i].lzc[6]=f[2];
343  map[i].lzc[7]=f[1];
344  map[i].lzc[8]=f[0];
345  map[i].lzc[9]=f[11];
346  map[i].lzc[10]=f[10];
347  map[i].lzc[11]=f[9];
348 
349  amapvalue=0;
350 
351  for(m=11;m>=0;m--) {
352 
353  amapvalue=amapvalue + map[i].lzc[m];
354 
355  map[i].lzc[m+12]=amapvalue;
356 
357  }
358 
359 
360  /* need to build seasonal climo here */
361 
362 
363 
364  }
365 
366  }
367 
368 
369  }
370 
371  }
372 
373  fclose(fp);
374 
375  }
376 
377 /* initialize basins as always on */
378 
379 for(ib=0;ib<maxib;ib++)
380  map[ib].owner=9999;
381 
382 
383 if(forecast_basin_file[0] == 0 )
384  return;
385 
386 fr=fopen(forecast_basin_file,"r");
387 if(fr==NULL)
388  return;
389 
390 for(;;) {
391 
392  p=fgets(ibuf,80,fr);
393 
394  if(p==NULL)
395  break;
396 
397  p=strchr(ibuf,'\n');
398  if(p!=NULL)
399  *p=0;
400 
401  ier=sscanf(ibuf,"%s %s",hb5,wfo);
402 
403  for(ib=0;ib<maxib;ib++) {
404 
405  if(strcasecmp(map[ib].hb5,hb5)==0) {
406 
407  for(m=0;m<20;m++) {
408 
409  if(strcmp(wfo,tag[m].wfo)==0) {
410 
411  map[ib].owner=m;
412 
413  break;
414 
415  }
416 
417 
418  }
419 
420  if(m==20)
421  map[ib].owner=-1;
422 
423  }
424 
425  }
426 
427  }
428 
429 
430 
431 return;
432 
433 }
434 
435 
static int i
void get_basin_data(char *basin_file, char *climo_file, char *hrap_file)
fclose(fp)
printf("fbuf is %s\n", fbuf)
fp
Definition: make_NEXRAD.c:339
double lat
Definition: mapp2h.h:41
double lon
Definition: mapp2h.h:41
HRAP ll
Definition: mapp2h.h:53
char hrap_file[100]
Definition: mapper.c:19
ib
Definition: shleap.cc:46
Definition: misc.h:470
double lo
Definition: misc.h:475
double a
Definition: misc.h:472
double yo
Definition: misc.h:474
double xo
Definition: misc.h:473
int zone[4]
Definition: misc.h:232
int x
Definition: misc.h:230
int y
Definition: misc.h:231
Definition: misc.h:236
float * lzc
Definition: misc_new.h:333
char hb5[10]
Definition: misc.h:238
int * tmaps_done
Definition: misc_new.h:325
float * tgz
Definition: misc_new.h:338
float lz[200]
Definition: misc.h:250
int owner
Definition: misc_new.h:322
float uz[200]
Definition: misc.h:248
struct hrap_data * hrap_data
Definition: misc.h:245
int basin_points
Definition: misc.h:240
float * gzc
Definition: misc_new.h:330
int hrap_points
Definition: misc.h:244
float * mzc
Definition: misc_new.h:332
int zones[4]
Definition: misc.h:241
float * zgz
Definition: misc_new.h:334
float * tuz
Definition: misc_new.h:339
float * tmz
Definition: misc_new.h:340
float gz[200]
Definition: misc.h:247
float mz[200]
Definition: misc.h:249
int maps_done[200]
Definition: misc.h:246
float * zuz
Definition: misc_new.h:335
float * zlz
Definition: misc_new.h:337
XPoint * basin
Definition: misc.h:243
float * tlz
Definition: misc_new.h:341
int * zmaps_done
Definition: misc_new.h:324
float * zmz
Definition: misc_new.h:336
float * uzc
Definition: misc_new.h:331
Definition: misc.h:296
Definition: misc_new.h:61