Mapper
get_isohyet_coord_new.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 char *mon[]={"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
4 
5 void get_isohyet_coord(char *fname,int smonth,int emonth)
6 
7 {
8 
9  extern int isohyets_used;
10  int i,j,ier,maxj,maxi,max_value,k,kk;
11  float lat,lon;
12  extern struct isoh *isoh;
13  FILE *fp;
14  char *p,kbuf[20000],fbuf[100];
16  int m;
17  int oldk;
18 
19  max_value=0;
20 
21  isoh=(struct isoh *) calloc(1,sizeof(struct isoh));
22  if(isoh==NULL) {
23 
24  printf("could not allocate isoh space\n");
25  exit(1);
26 
27  }
28 
29  strcpy(fbuf,fname);
30  strcat(fbuf,"jan");
31 
32  fp=fopen(fbuf,"r");
33 
34  if(fp==NULL) {
35 
36  printf("could not open %s\n",fname);
37  exit(1);
38 
39  }
40 
41 
42  p=fgets(kbuf,80,fp);
43 
44  ier=sscanf(kbuf,"%f %f %f %f %f %f",&max_lat,&max_lon,&total_lat,
46 
47  fclose(fp);
48 
49  delta_lat=delta_lat/60.;
50  delta_lon=delta_lon/60.;
51 
52  maxi=(total_lon/delta_lon+.00001);
53  maxj=(total_lat/delta_lat+.00001);
54 
55 printf("maxi maxj %d %d\n",maxi,maxj);
56 
57  isoh->maxi=maxi;
58  isoh->maxj=maxj;
65 
66  isoh->coord=(struct coord**) calloc(maxi,sizeof(struct coord *));
67 
68  isoh->value=(short int***) calloc(24,sizeof(short int **));
69 
70  if(isoh->coord==NULL || isoh->value==NULL) {
71 
72  printf("no memory for isoh array\n");
73  exit(1);
74 
75  }
76 
77  for(k=0;k<24;k++) {
78 
79  isoh->value[k]=(short int **)calloc(maxi,sizeof(short int *));
80 
81  if(isoh->value[k]==NULL) {
82 
83  printf("no memory for isoh array\n");
84  exit(1);
85 
86  }
87 
88  }
89 
90 for(i=0;i<maxi;i++) {
91 
92  isoh->coord[i]=(struct coord *) calloc(maxj,sizeof(struct coord));
93 
94  if(isoh->coord[i]==NULL) {
95 
96  printf("no memory for isoh array\n");
97  exit(1);
98 
99  }
100 
101  for(k=0;k<12;k++) {
102 
103  isoh->value[k][i]=(short int *) calloc(maxj,sizeof(short int));
104 
105  if(isoh->value[k][i]==NULL) {
106 
107  printf("no memory for isoh array\n");
108  exit(1);
109 
110  }
111 
112  isoh->value[k+12][i]=(short int *) calloc(maxj,sizeof(short int));
113 
114  if(isoh->value[k+12][i]==NULL) {
115 
116  printf("no memory for isoh array\n");
117  exit(1);
118 
119  }
120 
121  }
122 
123  }
124 
125 /*create screen coordinates */
126 
127 /* j increments latitude i increments longitude */
128 
129  for(j=0;j<maxj;j++) {
130 
131  for(i=0;i<maxi;i++) {
132 
133  lat=max_lat-(float)j*delta_lat;
134  lon=max_lon-(float)i*delta_lon;
135 
137 
138  }
139 
140 }
141 
142 for(k=0;k<12;k++) {
143 
144  ier=is_good(k,smonth,emonth);
145 
146  if(ier==-1)
147  continue;
148 
149  sprintf(fbuf,"%s%s",fname,mon[k]);
150 
151  fp=fopen(fbuf,"r");
152 
153  if(fp==NULL) {
154 
155  printf("could not open %s\n",fbuf);
156  exit(1);
157 
158  }
159 
160  p=fgets(kbuf,80,fp);
161 
162 /* read in data file */
163 /* i is longitude j is latitude */
164 
165  for(j=0;j<maxj;j++) {
166 
167  fread(kbuf,sizeof(char),maxi*5,fp);
168  kbuf[maxi*5]=0;
169  kk=0;
170 
171 /* read in longitude records */
172 
173  for(i=0;i<maxi;i++) {
174 
175  isoh->value[k][i][j]=atoi(&kbuf[kk]);
176 
177  kk=kk+5;
178 
179  }
180 
181 }
182 
183 fclose(fp);
184 
185 }
186 
187  oldk=-1;
188 
189  for(kk=0;kk<12;kk++) {
190 
191  if(kk < 3)
192  k=9+kk;
193 
194  else
195  k=kk-3;
196 
197  if(oldk==-1) {
198 
199  for(j=0;j<maxj;j++) {
200  for(i=0;i<maxi;i++) {
201 
202  isoh->value[k+12][i][j]= isoh->value[k][i][j] ;
203 
204  }
205  }
206 
207  }
208 
209  else {
210 
211  for(j=0;j<maxj;j++) {
212  for(i=0;i<maxi;i++) {
213 
214 
215  isoh->value[k+12][i][j]= isoh->value[k][i][j] + isoh->value[oldk][i][j];
216 
217  }
218  }
219 
220  }
221 
222  oldk=k+12;
223 
224  }
225 
226 isohyets_used=1;
227 return;
228 
229 }
230 void get_isoh_pixels(int i, int j, float lat,float lon)
231 
232  {
233 
234  extern struct dval dval;
235  long r,s;
236  float conv=.0174;
237  extern struct isoh *isoh;
238 
239  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
240  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
241 
242  isoh->coord[i][j].x=r;
243 
244  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
245  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
246 
247  isoh->coord[i][j].y=s;
248 
249  return;
250 
251  }
252 
253 
254 
255 
256 
257 
258 
259 
260 
261 
262 
263 
264 
265 
266 
267 
268 
269 
270 
static int i
char fbuf[100]
Definition: decode_HDP.c:2
char * mon[]
void get_isohyet_coord(char *fname, int smonth, int emonth)
void get_isoh_pixels(int i, int j, float lat, float lon)
int is_good(int k, int smonth, int emonth)
Definition: is_good.c:4
fclose(fp)
sprintf(fbuf,"/usr/mapper/nexrad/ngrid.%02d-%02d-%02d-%02d", year, month, day, hour)
printf("fbuf is %s\n", fbuf)
fp
Definition: make_NEXRAD.c:339
int j
Definition: mapp2h.h:48
double lat
Definition: mapp2h.h:41
double lon
Definition: mapp2h.h:41
int k
Definition: mapp2h.h:48
struct isoh * isoh
Definition: mapper.c:144
double max_lat
Definition: mapper.c:22
char fname[100]
Definition: send_afos.c:6
Definition: misc.h:495
short int y
Definition: misc.h:498
short int x
Definition: misc.h:497
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:538
float delta_lon
Definition: misc.h:549
float max_lon
Definition: misc.h:545
struct coord ** coord
Definition: misc.h:540
float max_lat
Definition: misc.h:544
int maxi
Definition: misc.h:542
float total_lon
Definition: misc.h:547
float total_lat
Definition: misc.h:546
short int *** value
Definition: misc.h:541
float delta_lat
Definition: misc.h:548
int maxj
Definition: misc.h:543