/* aero_sub.f -- translated by f2c (version 20100827). You must link the resulting object file with libf2c: on Microsoft Windows system, link with libf2c.lib; on Linux or Unix systems, link with .../path/to/libf2c.a -lm or, if you install libf2c.a in a standard place, with -lf2c -lm -- in that order, at the end of the command line, as in cc *.o -lf2c -lm Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., http://www.netlib.org/f2c/libf2c.zip */ #include #include "f2c.h" int aerdt (int ihx, int idx, int ilx, int nx, int *ista, int iyy, int imm, int imiss, float rmiss, int *icheck, float *p, int *iz, float *t, int *iu, int *id, float *s){ int i; long ihx_long, idx_long, ilx_long, nx_long, iyy_long, imm_long, imiss_long; long *ista_long, *icheck_long, *iz_long, *iu_long, *id_long; ista_long = malloc(nx*sizeof(long)); icheck_long = malloc(ihx*idx*nx*sizeof(long)); iz_long = malloc(ihx*idx*ilx*nx*sizeof(long)); iu_long = malloc(ihx*idx*ilx*nx*sizeof(long)); id_long = malloc(ihx*idx*ilx*nx*sizeof(long)); ihx_long = ihx; idx_long = idx; ilx_long = ilx; nx_long = nx; iyy_long = iyy; imm_long = imm; imiss_long = imiss; for (i=0; i<=nx-1; i++){ ista_long[i] = ista[i]; } aerdt_(&ihx_long, &idx_long, &ilx_long, &nx_long, ista_long, &iyy_long, &imm_long, &imiss_long, &rmiss, icheck_long, p, iz_long, t, iu_long, id_long, s); for (i=0; i<=ihx*idx*nx-1; i++){ icheck[i] = icheck_long[i]; } for (i=0; i<=ihx*idx*ilx*nx-1; i++){ iz[i] = iz_long[i]; iu[i] = iu_long[i]; id[i] = id_long[i]; } free (ista_long); free (icheck_long); free (iz_long); free (iu_long); free (id_long); return 0; } /* Table of constant values */ static integer c__1 = 1; static integer c__4 = 4; static integer c__2 = 2; static integer c__6 = 6; /* Subroutine */ int aerdt_(integer *ihx, integer *idx, integer *ilx, integer *nx, integer *ista, integer *iyy, integer *imm, integer *imiss, real * rmiss, integer *icheck, real *p, integer *iz, real *t, integer *iu, integer *id, real *s) { /* System generated locals */ integer icheck_dim1, icheck_dim2, icheck_offset, iz_dim1, iz_dim2, iz_dim3, iz_offset, iu_dim1, iu_dim2, iu_dim3, iu_offset, id_dim1, id_dim2, id_dim3, id_offset, p_dim1, p_dim2, p_dim3, p_offset, t_dim1, t_dim2, t_dim3, t_offset, s_dim1, s_dim2, s_dim3, s_offset, i__1, i__2, i__3, i__4; char ch__1[80]; olist o__1; cllist cl__1; /* Builtin functions */ integer f_open(olist *), s_rdue(cilist *), do_uio(integer *, char *, ftnlen), e_rdue(void), f_clos(cllist *); /* Local variables */ static integer i__, n, il, nn, id1[26]; static shortint id2[26]; static integer is1[26], it1[26], iu1[26]; static shortint it2[26], iu2[26], is2[26]; static integer iz1[26]; static shortint iz2[26]; static integer idd, ihh, ihh1, imd1; static shortint imd2, ihh2; extern shortint inv2_(shortint *); static shortint iyy2; extern /* Character */ VOID aerf_(char *, ftnlen, integer *, integer *); static shortint idma2, idmb2, idmc2[26], idmd2[26]; static integer ista1; static shortint ista2; extern integer ipstan_(integer *); /* Fortran I/O blocks */ static cilist io___6 = { 1, 10, 0, 0, 0 }; /* Parameter adjustments */ s_dim1 = *ihx; s_dim2 = *idx; s_dim3 = *ilx; s_offset = 1 + s_dim1 * (1 + s_dim2 * (1 + s_dim3)); s -= s_offset; id_dim1 = *ihx; id_dim2 = *idx; id_dim3 = *ilx; id_offset = 1 + id_dim1 * (1 + id_dim2 * (1 + id_dim3)); id -= id_offset; iu_dim1 = *ihx; iu_dim2 = *idx; iu_dim3 = *ilx; iu_offset = 1 + iu_dim1 * (1 + iu_dim2 * (1 + iu_dim3)); iu -= iu_offset; t_dim1 = *ihx; t_dim2 = *idx; t_dim3 = *ilx; t_offset = 1 + t_dim1 * (1 + t_dim2 * (1 + t_dim3)); t -= t_offset; iz_dim1 = *ihx; iz_dim2 = *idx; iz_dim3 = *ilx; iz_offset = 1 + iz_dim1 * (1 + iz_dim2 * (1 + iz_dim3)); iz -= iz_offset; p_dim1 = *ihx; p_dim2 = *idx; p_dim3 = *ilx; p_offset = 1 + p_dim1 * (1 + p_dim2 * (1 + p_dim3)); p -= p_offset; icheck_dim1 = *ihx; icheck_dim2 = *idx; icheck_offset = 1 + icheck_dim1 * (1 + icheck_dim2); icheck -= icheck_offset; --ista; /* Function Body */ i__1 = *nx; for (n = 1; n <= i__1; ++n) { i__2 = *idx; for (idd = 1; idd <= i__2; ++idd) { i__3 = *ihx; for (ihh = 1; ihh <= i__3; ++ihh) { icheck[ihh + (idd + n * icheck_dim2) * icheck_dim1] = 0; i__4 = *ilx; for (il = 1; il <= i__4; ++il) { p[ihh + (idd + (il + n * p_dim3) * p_dim2) * p_dim1] = * rmiss; iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1] = *imiss; t[ihh + (idd + (il + n * t_dim3) * t_dim2) * t_dim1] = * rmiss; iu[ihh + (idd + (il + n * iu_dim3) * iu_dim2) * iu_dim1] = *imiss; id[ihh + (idd + (il + n * id_dim3) * id_dim2) * id_dim1] = *imiss; s[ihh + (idd + (il + n * s_dim3) * s_dim2) * s_dim1] = * rmiss; /* L14: */ } /* L13: */ } /* L12: */ } /* L11: */ } o__1.oerr = 1; o__1.ounit = 10; o__1.ofnmlen = 80; aerf_(ch__1, (ftnlen)80, iyy, imm); o__1.ofnm = ch__1; o__1.orl = 512; o__1.osta = "OLD"; o__1.oacc = "DIRECT"; o__1.ofm = "UNFORMATTED"; o__1.oblnk = 0; i__1 = f_open(&o__1); if (i__1 != 0) { goto L29; } i__ = 1; L21: io___6.cirec = i__; i__1 = s_rdue(&io___6); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&ista2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&iyy2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&imd2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&ihh2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&idma2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&idmb2, (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } for (il = 1; il <= 26; ++il) { i__1 = do_uio(&c__1, (char *)&iz2[il - 1], (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&it2[il - 1], (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&iu2[il - 1], (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&id2[il - 1], (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&is2[il - 1], (ftnlen)sizeof(shortint)); if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&idmc2[il - 1], (ftnlen)sizeof(shortint)) ; if (i__1 != 0) { goto L29; } i__1 = do_uio(&c__1, (char *)&idmd2[il - 1], (ftnlen)sizeof(shortint)) ; if (i__1 != 0) { goto L29; } } i__1 = e_rdue(); if (i__1 != 0) { goto L29; } ista1 = inv2_(&ista2) + 47000; n = 0; i__1 = *nx; for (nn = 1; nn <= i__1; ++nn) { if (ista1 == ista[nn]) { n = nn; goto L49; } /* L41: */ } L49: imd1 = inv2_(&imd2); idd = imd1 % 100; ihh1 = inv2_(&ihh2); ihh = 0; if (ihh1 == 3) { ihh = 1; } if (ihh1 == 9) { ihh = 2; } if (ihh1 == 15) { ihh = 3; } if (ihh1 == 21) { ihh = 4; } if (n != 0 && il != 0 && ihh != 0) { i__1 = *ilx; for (il = 1; il <= i__1; ++il) { icheck[ihh + (idd + n * icheck_dim2) * icheck_dim1] = 1; iz1[il - 1] = inv2_(&iz2[il - 1]); it1[il - 1] = inv2_(&it2[il - 1]); iu1[il - 1] = inv2_(&iu2[il - 1]); id1[il - 1] = inv2_(&id2[il - 1]); is1[il - 1] = inv2_(&is2[il - 1]); if (il == 1) { if (iz1[il - 1] != -32767 && iz1[il - 1] != -32766) { p[ihh + (idd + (il + n * p_dim3) * p_dim2) * p_dim1] = ( real) iz1[il - 1] * .1f; } else { p[ihh + (idd + (il + n * p_dim3) * p_dim2) * p_dim1] = * rmiss; } iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1] = 0; } else { i__2 = il - 1; p[ihh + (idd + (il + n * p_dim3) * p_dim2) * p_dim1] = (real) ipstan_(&i__2); if (iz1[il - 1] != -32767 && iz1[il - 1] != -32766) { iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1] = iz1[il - 1]; if (p[ihh + (idd + (il + n * p_dim3) * p_dim2) * p_dim1] <= p[ihh + (idd + (n * p_dim3 + 1) * p_dim2) * p_dim1] && iz1[il - 1] < 0) { iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1] = 30000 - iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1]; } } else { iz[ihh + (idd + (il + n * iz_dim3) * iz_dim2) * iz_dim1] = *imiss; } } if (it1[il - 1] != -32767 && it1[il - 1] != -32766) { t[ihh + (idd + (il + n * t_dim3) * t_dim2) * t_dim1] = (real) it1[il - 1] * .1f; } else { t[ihh + (idd + (il + n * t_dim3) * t_dim2) * t_dim1] = *rmiss; } if (iu1[il - 1] != -32767 && iu1[il - 1] != -32766) { iu[ihh + (idd + (il + n * iu_dim3) * iu_dim2) * iu_dim1] = iu1[il - 1]; } else { iu[ihh + (idd + (il + n * iu_dim3) * iu_dim2) * iu_dim1] = * imiss; } if (id1[il - 1] != -32767 && id1[il - 1] != -32766) { id[ihh + (idd + (il + n * id_dim3) * id_dim2) * id_dim1] = id1[il - 1]; } else { id[ihh + (idd + (il + n * id_dim3) * id_dim2) * id_dim1] = * imiss; } if (is1[il - 1] != -32767 && is1[il - 1] != -32766) { s[ihh + (idd + (il + n * s_dim3) * s_dim2) * s_dim1] = (real) is1[il - 1] * .1f; } else { s[ihh + (idd + (il + n * s_dim3) * s_dim2) * s_dim1] = *rmiss; } /* L31: */ } } ++i__; goto L21; L29: cl__1.cerr = 0; cl__1.cunit = 10; cl__1.csta = 0; f_clos(&cl__1); return 0; } /* aerdt_ */ /* Character */ VOID aerf_(char *ret_val, ftnlen ret_val_len, integer *iy, integer *im) { /* System generated locals */ address a__1[4], a__2[2], a__3[6]; integer i__1[4], i__2[2], i__3[6]; char ch__2[1], ch__3[1], ch__4[1], ch__5[1]; /* Builtin functions */ /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen), s_cat(char *, char **, integer *, integer *, ftnlen); integer s_cmp(char *, char *, ftnlen, ftnlen); /* Local variables */ static char cm[2], cy[4], cy2[2]; s_copy(ret_val, " ", (ftnlen)80, (ftnlen)1); /* Writing concatenation */ *(unsigned char *)&ch__2[0] = *iy / 1000 % 10 + 48; i__1[0] = 1, a__1[0] = ch__2; *(unsigned char *)&ch__3[0] = *iy / 100 % 10 + 48; i__1[1] = 1, a__1[1] = ch__3; *(unsigned char *)&ch__4[0] = *iy / 10 % 10 + 48; i__1[2] = 1, a__1[2] = ch__4; *(unsigned char *)&ch__5[0] = *iy % 10 + 48; i__1[3] = 1, a__1[3] = ch__5; s_cat(cy, a__1, i__1, &c__4, (ftnlen)4); /* Writing concatenation */ *(unsigned char *)&ch__2[0] = *iy / 10 % 10 + 48; i__2[0] = 1, a__2[0] = ch__2; *(unsigned char *)&ch__3[0] = *iy % 10 + 48; i__2[1] = 1, a__2[1] = ch__3; s_cat(cy2, a__2, i__2, &c__2, (ftnlen)2); /* Writing concatenation */ *(unsigned char *)&ch__2[0] = *im / 10 % 10 + 48; i__2[0] = 1, a__2[0] = ch__2; *(unsigned char *)&ch__3[0] = *im % 10 + 48; i__2[1] = 1, a__2[1] = ch__3; s_cat(cm, a__2, i__2, &c__2, (ftnlen)2); if (*iy >= 1988 && *iy <= 1990) { /* Writing concatenation */ i__1[0] = 31, a__1[0] = "CD1988/UPPERAIR/SONDE/DATA/KOSO"; i__1[1] = 2, a__1[1] = cy2; i__1[2] = 2, a__1[2] = cm; i__1[3] = 4, a__1[3] = ".SPL"; s_cat(ret_val, a__1, i__1, &c__4, (ftnlen)80); } if (*iy >= 1991 && *iy <= 1994) { /* Writing concatenation */ i__1[0] = 31, a__1[0] = "CD1991/UPPERAIR/SONDE/DATA/KOSO"; i__1[1] = 2, a__1[1] = cy2; i__1[2] = 2, a__1[2] = cm; i__1[3] = 4, a__1[3] = ".SPL"; s_cat(ret_val, a__1, i__1, &c__4, (ftnlen)80); } if (*iy >= 1995 && *iy <= 1997) { /* Writing concatenation */ i__3[0] = 2, a__3[0] = "CD"; i__3[1] = 4, a__3[1] = cy; i__3[2] = 25, a__3[2] = "/UPPERAIR/SONDE/DATA/KOSO"; i__3[3] = 2, a__3[3] = cy2; i__3[4] = 2, a__3[4] = cm; i__3[5] = 4, a__3[5] = ".SPL"; s_cat(ret_val, a__3, i__3, &c__6, (ftnlen)80); } if (*iy >= 1998 && *iy <= 1999) { /* Writing concatenation */ i__3[0] = 2, a__3[0] = "CD"; i__3[1] = 4, a__3[1] = cy; i__3[2] = 25, a__3[2] = "/upperair/sonde/data/koso"; i__3[3] = 2, a__3[3] = cy2; i__3[4] = 2, a__3[4] = cm; i__3[5] = 4, a__3[5] = ".spl"; s_cat(ret_val, a__3, i__3, &c__6, (ftnlen)80); } if (*iy >= 2000) { /* Writing concatenation */ i__3[0] = 2, a__3[0] = "CD"; i__3[1] = 4, a__3[1] = cy; i__3[2] = 23, a__3[2] = "/upperair/sonde/data/ks"; i__3[3] = 4, a__3[3] = cy; i__3[4] = 2, a__3[4] = cm; i__3[5] = 4, a__3[5] = ".spl"; s_cat(ret_val, a__3, i__3, &c__6, (ftnlen)80); } if (s_cmp(ret_val, " ", (ftnlen)80, (ftnlen)1) != 0) { /* Writing concatenation */ i__2[0] = 5, a__2[0] = "Aero/"; i__2[1] = 80, a__2[1] = ret_val; s_cat(ret_val, a__2, i__2, &c__2, (ftnlen)80); } return ; } /* aerf_ */ integer ipstan_(integer *il) { /* System generated locals */ integer ret_val; if (*il == 1) { ret_val = 1000; } if (*il == 2) { ret_val = 925; } if (*il == 3) { ret_val = 900; } if (*il == 4) { ret_val = 850; } if (*il == 5) { ret_val = 800; } if (*il == 6) { ret_val = 700; } if (*il == 7) { ret_val = 600; } if (*il == 8) { ret_val = 500; } if (*il == 9) { ret_val = 400; } if (*il == 10) { ret_val = 350; } if (*il == 11) { ret_val = 300; } if (*il == 12) { ret_val = 250; } if (*il == 13) { ret_val = 200; } if (*il == 14) { ret_val = 175; } if (*il == 15) { ret_val = 150; } if (*il == 16) { ret_val = 125; } if (*il == 17) { ret_val = 100; } if (*il == 18) { ret_val = 70; } if (*il == 19) { ret_val = 50; } if (*il == 20) { ret_val = 40; } if (*il == 21) { ret_val = 30; } if (*il == 22) { ret_val = 20; } if (*il == 23) { ret_val = 15; } if (*il == 24) { ret_val = 10; } if (*il == 25) { ret_val = 5; } return ret_val; } /* ipstan_ */ shortint inv2_(shortint *i__) { /* System generated locals */ shortint ret_val; /* Local variables */ static shortint i1, i2; static integer n1; if (*i__ >= 0) { n1 = *i__; } else { n1 = *i__ + 65536; } i1 = (shortint) (n1 / 256); i2 = (shortint) (n1 % 256); /* -- For big-endian format -- */ /* INV2 = 256*I2 + I1 */ /* -- For little-endian format -- */ ret_val = (shortint) ((i1 << 8) + i2); return ret_val; } /* inv2_ */