Mapper
get_tstation_list.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 void get_tstation_list(char *fname,int smonth,int emonth)
4 
5 {
6 
7  extern char station_climo_file[100];
8  extern char tstation_list_custom_file[100];
9  extern struct dval dval;
10  int i,ier,sflag,field,j,xadd,yadd;
11  extern struct station tstation[1000];
12  extern int max_tstations;
13  FILE *fp;
14  char *p,kbuf[200],hb5[10],parm[10];
15  double dist1,dist2,dist,sorted[30];
16  int m,l,h,k;
17  int kk;
18  float lat,lon;
19  float conv=.0174;
20  long t,u;
21  float elev;
22  float f[15];
23  int tabval;
24 
25  max_tstations=0;
26 
27  fp=fopen(fname,"r");
28 
29  if(fp==NULL) {
30 
31  printf("could not open %s\n",fname);
32  exit(1);
33 
34  }
35 
36  i=0;
37 
38  tabval='\t';
39  for(;;) {
40 
41  p=fgets(kbuf,120,fp);
42  if(p==NULL)
43  break;
44 
45  if(i==1000)
46  break;
47 
48  p=strchr(kbuf,'\n');
49 
50  if(p!=NULL)
51  *p=0;
52 
53  j=0;
54  while(kbuf[j] != 0) {
55 
56  if(kbuf[j]=='\t')
57  kbuf[j]=' ';
58 
59  j++;
60 
61  }
62 
63  tstation[i].hb5=calloc(10,sizeof(char));
64  tstation[i].name=calloc(50,sizeof(char));
65  tstation[i].parm=calloc(10,sizeof(char));
66  tstation[i].cparm=calloc(10,sizeof(char));
67  tstation[i].max=calloc(12,sizeof(float));
68  tstation[i].min=calloc(12,sizeof(float));
69  tstation[i].index=calloc(20,sizeof(short int));
70 
71  ier=sscanf(kbuf,"%s %s %f %f %f %d ",tstation[i].hb5,
72  tstation[i].parm,&tstation[i].lat,
73  &tstation[i].lon,&elev,&tstation[i].tip);
74 
75  tstation[i].elev=(int)elev;
76 
77  if(strncasecmp("TAI",tstation[i].parm,3)!=0)
78  continue;
79 
80 
81  for(m=0;m<i;m++) {
82 
83  if(strcmp(tstation[i].hb5,tstation[m].hb5)==0 &&
84  tstation[i].parm[4]==tstation[m].parm[4]){
85 
86  /* printf("duplicate tstation %s\n",tstation[i].hb5);
87  */
88  break;
89 
90  }
91 
92  }
93 
94 
95  if(ier != 6)
96  continue;
97 
98 
99 
100  lat=tstation[i].lat;
101  lon=tstation[i].lon;
102 
103  t=dval.a * cos(lat*conv)/(1+sin(lat*conv))
104  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
105 
106  tstation[i].x=t;
107 
108  u=dval.a * cos(lat*conv)/(1+sin(lat*conv))
109  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
110 
111  tstation[i].y=u;
112 
113  sflag=1;
114  field=0;
115  for(j=0;j<strlen(kbuf);j++) {
116 
117  if(kbuf[j] !=' ' && sflag==1) {
118  sflag=0;
119  field++;
120 
121  }
122 
123  else if(kbuf[j]==' ')
124  sflag=1;
125 
126  if(field==7) {
127 
128  kbuf[j+49]=0;
129 
130  strcpy(tstation[i].name,&kbuf[j]);
131  break;
132 
133  }
134 
135  }
136 
137  i++;
138 
139  }
140 
141 max_tstations=i;
142 
143 fclose(fp);
144 
145 for(i=0;i<max_tstations;i++){
146 
147  for(m=0;m<12;m++) {
148 
149  tstation[i].max[m]=-99;
150  tstation[i].min[m]=-99;
151 
152  }
153 
154 }
155 
156 fp=NULL;
157 if(station_climo_file[0]!=0)
158  fp=fopen(station_climo_file,"r");
159 
160 if(fp==NULL) {
161 
162  for(i=0;i<max_tstations;i++) {
163 
164  for(k=0;k<12;k++) {
165 
166  ier=is_good(k,smonth,emonth);
167 
168  if(ier == -1)
169  continue;
170 
171  tstation[i].max[k]=(get_lmaxmin(tstation[i].lat,tstation[i].lon,k,0)/10);
172 
173  if(tstation[i].max[k] < 0)
174  printf("No max temp climatology for %s\n",tstation[i].hb5);
175 
176  strcpy(tstation[i].cparm,"TAIPBXM");
177 
178  tstation[i].min[k]=(get_lmaxmin(tstation[i].lat,tstation[i].lon,k,1)/10);
179 
180  if(tstation[i].min[k] < 0)
181  printf("No min temp climatology for %s\n",tstation[i].hb5);
182 
183 
184  }
185 
186  }
187 
188 }
189 
190 else {
191 
192  for(;;) {
193 
194  p=fgets(kbuf,200,fp);
195  if(p==NULL)
196  break;
197 
198  ier=sscanf(kbuf,"%s %s %f %f %f %f %f %f %f %f %f %f %f %f",
199  hb5,parm,&f[0],&f[1],&f[2],&f[3],&f[4],&f[5],&f[6],&f[7],&f[8],
200  &f[9],&f[10],&f[11]);
201 
202  if(ier != 14)
203  continue;
204 
205  for(i=0;i<max_tstations;i++) {
206 
207  if(strcmp(tstation[i].hb5,hb5)==0 &&
208  tstation[i].parm[4]==parm[4]) {
209 
210  if(parm[5]=='X') {
211 
212  for(m=0;m<12;m++)
213  tstation[i].max[m]=f[m];
214 
215  }
216 
217  else if(parm[5]=='N') {
218 
219  for(m=0;m<12;m++)
220  tstation[i].min[m]=f[m];
221 
222  }
223 
224  strcpy(tstation[i].cparm,parm);
225 
226  }
227 
228  }
229 
230 
231  }
232 
233  rewind(fp);
234 
235  for(;;) {
236 
237  p=fgets(kbuf,200,fp);
238  if(p==NULL)
239  break;
240 
241  ier=sscanf(kbuf,"%s %s %f %f %f %f %f %f %f %f %f %f %f %f",
242  hb5,parm,&f[0],&f[1],&f[2],&f[3],&f[4],&f[5],&f[6],&f[7],&f[8],
243  &f[9],&f[10],&f[11]);
244 
245  if(ier != 14)
246  continue;
247 
248  if(strncmp(parm,"TAIPB",5) != 0 &&
249  strncmp(parm,"TAIRZ",5) != 0)
250  continue;
251 
252  for(i=0;i<max_tstations;i++) {
253 
254  if(strcmp(tstation[i].hb5,hb5)==0 &&
255  ((parm[5]=='X' && tstation[i].max[0] < 0) ||
256  (parm[5]=='N' && tstation[i].min[0] < 0) ||
257  strncmp(tstation[i].cparm,"TAIPB",5)==0)) {
258 
259  if(parm[5]=='X') {
260 
261  for(m=0;m<12;m++)
262  tstation[i].max[m]=f[m];
263 
264  }
265 
266  else if(parm[5]=='N') {
267 
268  for(m=0;m<12;m++)
269  tstation[i].min[m]=f[m];
270 
271  }
272 
273  strcpy(tstation[i].cparm,parm);
274 
275 
276  }
277 
278  }
279 
280 
281  }
282 
283 fclose(fp);
284 
285 }
286 
287 strcpy(kbuf,fname);
288 strcat(kbuf,".tcustom");
289 strcpy(tstation_list_custom_file,kbuf);
290 
291 fp=fopen(kbuf,"r");
292 
293 if(fp!=NULL) {
294 
295  for(;;) {
296 
297  p=fgets(kbuf,80,fp);
298  if(p==NULL)
299  break;
300 
301  p=strchr(kbuf,'\n');
302  *p=0;
303 
304  ier=sscanf(kbuf,"%s %s %d %d",hb5,parm,&xadd,&yadd);
305 
306  for(j=0;j<max_tstations;j++) {
307 
308  if(strcmp(hb5,tstation[j].hb5)==0) {
309 
310  if(strncmp(parm,tstation[j].parm,3)==0 &&
311  parm[4]==tstation[j].parm[4]) {
312 
313  tstation[j].xadd=xadd;
314  tstation[j].yadd=yadd;
315  break;
316 
317  }
318 
319  }
320 
321  }
322  }
323 
324  fclose(fp);
325 
326  }
327 
328 for(i=0;i<max_tstations;i++) {
329 
330  for(l=0;l<20;l++)
331  sorted[l]=9999999;
332 
333  for(m=0;m<max_tstations;m++) {
334 
335  if(i==m)
336  continue;
337 
338  dist1=tstation[i].lat-tstation[m].lat;
339 
340  dist2=(tstation[i].lon-tstation[m].lon)*
341  cos((tstation[i].lat+tstation[m].lat)/2*conv);
342 
343  dist=pow(dist1,2)+pow(dist2,2);
344 
345  for(l=0;l<20;l++) {
346 
347  if(dist < sorted[l]) {
348 
349  for(h=19; h > l; h--) {
350 
351  sorted[h]=sorted[h-1];
352 
353  tstation[i].index[h]=
354  tstation[i].index[h-1];
355 
356  }
357 
358  sorted[l]=dist;
359 
360  tstation[i].index[l]=m;
361 
362  break;
363 
364  }
365 
366 
367  }
368 
369  }
370 
371  }
372 
373 return;
374 
375 }
376 
377 
378 
379 
380 
381 
char name[35][30]
Definition: borshef.c:10
static int i
float get_lmaxmin(float lat, float lon, int mon, int type)
Definition: get_lmaxmin.c:3
void get_tstation_list(char *fname, int smonth, int emonth)
int is_good(int k, int smonth, int emonth)
Definition: is_good.c:4
fclose(fp)
printf("fbuf is %s\n", fbuf)
fp
Definition: make_NEXRAD.c:339
int j
Definition: mapp2h.h:48
int elev
Definition: mapp2h.h:48
double lat
Definition: mapp2h.h:41
double lon
Definition: mapp2h.h:41
int k
Definition: mapp2h.h:48
int max
Definition: rateint.c:95
char fname[100]
Definition: send_afos.c:6
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
Definition: misc.h:296
float lat
Definition: misc.h:303
int x
Definition: misc.h:307
char hb5[10]
Definition: misc.h:299
int tip
Definition: misc.h:306
float lon
Definition: misc.h:304
char name[50]
Definition: misc.h:300
float * min
Definition: misc_new.h:466
int y
Definition: misc.h:308
int yadd
Definition: misc.h:310
short int index[30]
Definition: misc.h:302
float * max
Definition: misc_new.h:465
int elev
Definition: misc.h:305
char parm[10]
Definition: misc.h:301
char * cparm
Definition: misc_new.h:470
int xadd
Definition: misc.h:309