/* bidaily.c (igr:3/8/89) Calculates 0 and 12Z daily ice velocities from 3-hourly buoy files which already contain x, y, pressures, and temperature. */ #include #include #define BAD -999.9 main() { int id_now, id_num, year, jday, jday0, jday12, hour; double lat, lon, r, theta, lat12, lon12, x0=0.0, y0=0.0, x24, y24; double xminus12, yminus12, x12, y12, lat0, lon0; double t_sum12=0, t_sum0=0; int t_n12=0, t_n0=0, t_flag0=0, t_flag12=0; double Vx, Vy, x, y, rday, p, p0, p12, t, t0, t12; double dayminus12, day0, day12, day24; double centimeters=(110.949*100000.0), second=(24.0*60.0*60.0); char id_str[20]; FILE *out, *fopen(); /* Crunch through data. */ fscanf(stdin,"%d%lf%d%d%lf%lf%lf%lf%lf%lf", &id_num,&rday,&hour,&year,&lat,&lon,&x,&y,&p,&t); if (feof(stdin) ) exit(1); x /= 110.949; y /= 110.949; sprintf(id_str,"BIDAILY/%d-%d",id_num,year); out = fopen(id_str,"w"); sprintf(id_str,"%d",id_num); do { if ( t > BAD && hour != 12 ) { t_sum0 += t; t_n0++; } if ( t > BAD && hour != 0 ) { t_sum12 += t; t_n12++; } if ( hour == 12 ) { lat12 = lat; lon12 = lon; jday12 = rday; p12 = p; if ( xminus12 == 0.0 && yminus12 == 0.0 ) { xminus12 = x; yminus12 = y; dayminus12 = rday; if ( t > BAD ) { t_sum0 = t; t_n0 = 1; } else { t_sum0 = 0; t_n0 = 0; } } else { x12 = x; y12 = y; day12 = rday; Vx = (x12-xminus12) * centimeters / second; Vy = (y12-yminus12) * centimeters / second; if ( t_n0 > 0 ) t0 = t_sum0/t_n0; else t0 = BAD; if ( t > BAD ) { t_sum0 = t; t_n0 = 1; } else { t_sum0 = 0; t_n0 = 0; } if ( day12 == ( dayminus12 + 1 ) && jday0 == (int)day12 ) fprintf(out, "%s %d %d 0 %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %d\n", id_str,year,jday0,lat0,lon0,x0,y0,Vx,Vy,p0,t0,t_flag0); xminus12 = x12; yminus12 = y12; dayminus12 = day12; } } else if ( hour == 0 ) { lat0 = lat; lon0 = lon; jday0 = rday; p0 = p; if ( x0 == 0.0 && y0 == 0.0 ) { x0 = x; y0 = y; day0 = rday; if ( t > BAD ) { t_sum12 = t; t_n12 = 1; } else { t_sum12 = 0; t_n12 = 0; } } else { x24 = x; y24 = y; day24 = rday; Vx = (x24-x0) * centimeters / second; Vy = (y24-y0) * centimeters / second; if ( t_n12 > 0 ) t12 = t_sum12/t_n12; else t12 = BAD; if ( t > BAD ) { t_sum12 = t; t_n12 = 1; } else { t_sum12 = 0; t_n12 = 0; } if ( day24 == ( day0 + 1 ) && jday12 == (int)day0 ) fprintf(out, "%s %d %d 12 %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %.5lf %d\n", id_str,year,jday12,lat12,lon12,xminus12,yminus12,Vx,Vy,p12,t12, t_flag12); x0 = x24; y0 = y24; day0 = day24; } } fscanf(stdin,"%d%lf%d%d%lf%lf%lf%lf%lf%lf", &id_num,&rday,&hour,&year,&lat,&lon,&x,&y,&p,&t); if (feof(stdin) ) exit(1); x /= 110.949; y /= 110.949; } while ( 1 ); }