示例#1
0
  /**
   * _more_
   *
   * @param ilat _more_
   * @param ilon _more_
   * @param ipos _more_
   * @return _more_
   */
  int aodtv72_setlocation(float ilat, float ilon, int ipos)
        /*
         * set current storm center location within from AODT library memory Inputs
         * : AODT library current storm center latitude and longitude values and
         * location positioning method : 1-forecast interpolation 2-laplacian
         * technique 3-warm spot 4-extrapolation Outputs: none Return : -21 :
         * invalid storm center position 21 : user selected storm center position 22
         * : auto selected storm center position
         */
      {
    int iret;

    /* assign current storm center latitude value to AODT library variable */
    odtcurrent_v72IR.latitude = ilat;
    /* assign current storm center longitude value to AODT library variable */
    odtcurrent_v72IR.longitude = ilon;
    /* assign current storm center positioning flag to AODT library variable */
    odtcurrent_v72IR.autopos = ipos;
    if ((odtcurrent_v72IR.longitude < -180.) || (odtcurrent_v72IR.longitude > 180.)) {
      iret = -21;
    }
    if ((odtcurrent_v72IR.latitude < -90.) || (odtcurrent_v72IR.latitude > 90.)) {
      iret = -21;
    }

    iret = 21; /* user selected image location */
    if (ipos >= 1) {
      iret = 22;
    }

    return iret;
  }
示例#2
0
  /**
   * _more_
   *
   * @param datetime _more_
   * @param sat _more_
   * @return _more_
   */
  int aodtv72_setIRimageinfo(double datetime, int sat)
        /*
         * set IR image date/time within AODT library memory Inputs : AODT library
         * IR image date/time/satellite information Outputs: none Return : 0 : o.k.
         */
      {
    /* assign IR image date to AODT library variable */
    odtcurrent_v72IR.date = datetime;

    /* assign IR image satellite type to AODT library variable */
    odtcurrent_v72IR.sattype = sat;

    return 0;
  }
示例#3
0
  /**
   * _more_
   *
   * @param idomain _more_
   * @return _more_
   */
  public int aodtv72_calcintensity(int idomain)
        /*
         * Compute intensity values CI, Final T#, and Raw T#. Inputs : global
         * structure odtcurrent_v72 containing current analysis Outputs : none
         * Return : 71 : storm is over land 0 : o.k.
         */
      {
    int iok;
    int iret;
    int strength;

    if ((odtcurrent_v72IR.land == 1)) {
      iok = aodtv72_initcurrent(true, odtcurrent_v72IR);
      iret = 71;
    } else {
      /* calculate current Raw T# value */
      odtcurrent_v72IR.Traw = aodtv72_Tnoraw(odtcurrent_v72IR, idomain);
      odtcurrent_v72IR.TrawO = odtcurrent_v72IR.Traw;
      /* check for spot analysis or full analysis using history file */
      /* if(hfile_v72==(char *)NULL) { */
      if (true) {
        /* perform spot analysis (only Traw) */
        odtcurrent_v72IR.Tfinal = odtcurrent_v72IR.Traw;
        odtcurrent_v72IR.Tfinal3 = odtcurrent_v72IR.Traw;
        odtcurrent_v72IR.CI = odtcurrent_v72IR.Traw;
        odtcurrent_v72IR.CIadjp =
            aodtv72_latbias(
                odtcurrent_v72IR.CI,
                odtcurrent_v72IR.latitude,
                odtcurrent_v72IR.longitude,
                odtcurrent_v72IR);
        /*
         * printf("%f %f %f   %f\n",odtcurrent_v72IR.CI,odtcurrent_v72IR.
         * latitude
         * ,odtcurrent_v72->IR.longitude,odtcurrent_v72->IR.CIadjp);
         */
        odtcurrent_v72IR.rule9 = 0;
        /* odtcurrent_v72->IR.TIEraw=aodtv72_TIEmodel(); */
        /* odtcurrent_v72->IR.TIEavg=odtcurrent_v72->IR.TIEraw; */
        /* odtcurrent_v72->IR.TIEflag=aodtv72_tieflag(); */
      } else {
      }

      iret = 0;
    }

    return iret;
  }
示例#4
0
  /**
   * _more_
   *
   * @param initval _more_
   * @param latitude _more_
   * @param longitude _more_
   * @param odtcurrent_v72IR _more_
   * @return _more_
   */
  float aodtv72_latbias(
      float initval, float latitude, float longitude, StormAODTInfo.IRData odtcurrent_v72IR)
        /*
         * Apply Latitude Bias Adjustment to CI value Inputs : initval - initial CI
         * value latitude - current latitude of storm Outputs : adjusted MSLP value
         * as return value
         */
      {
    float initvalp;

    float initvalpx;
    float value; /* lat bias adjustement amount (0.00-1.00) */
    int sceneflag; /*
						 * contains lat bias adjustment flag 0=no adjustment
						 * 1=intermediate adjustment (6 hours) 2=full adjustment
						 */

    sceneflag = aodtv72_scenesearch(0); /*
											 * 0 means search for EIR based
											 * parameters... cdo, etc
											 */
    value = 1.0f; /* this value should be return from scenesearch() */
    /* printf("sceneflag=%d  value=%f\n",sceneflag,value); */
    odtcurrent_v72IR.LBflag = sceneflag;
    /* initvalp=aodtv72_getpwval(0,initval); TLO */
    initvalp = 0.0f;
    if (sceneflag >= 2) {
      /* EIR scene */
      if ((latitude >= 0.0) && ((longitude >= -100.0) && (longitude <= -40.0))) {
        /* do not make adjustment in N Indian Ocean */
        return initvalp;
      }
      /* apply bias adjustment to pressure */
      /* initvalp=-1.0*value*(-20.60822+(0.88463*A_ABS(latitude))); */
      initvalp = value * (7.325f - (0.302f * Math.abs(latitude)));
    }

    return initvalp;
  }
示例#5
0
  /**
   * _more_
   *
   * @param satgrid _more_
   * @param cenlat _more_
   * @param cenlon _more_
   * @param posm _more_
   * @param curdate _more_
   * @param cursat _more_
   * @param g_domain _more_
   * @return _more_
   */
  public StormAODTInfo.IRData aodtv72_drive(
      FlatField satgrid,
      float cenlat,
      float cenlon,
      int posm,
      double curdate,
      int cursat,
      String g_domain,
      int satId,
      int satChannel,
      boolean isTemperature) {

    float ftmps, flats, flons, cenlon2;

    int radius, irad, np, ii, jj, length;
    int idomain = 0;

    /*
     * Set miscoptions flags in AODT
     */

    int eyeSize = -99;
    oland_v72 = 0; /* allow AODT operation over land */
    osearch_v72 = false; /* search for maximum curved band position */
    rmwsizeman_v72 = eyeSize; /* eye size parameter */
    odtcurrent_v72IR = new StormAODTInfo.IRData();
    odtcurrent_v72IR.domain = idomain_v72;

    /*
     * Set initial classification flag and value in AODT
     */

    ostartstr_v72 = 0; /* user defined initial classification flag */
    osstr_v72 = 0.0f; /* starting initial classification value */

    /*
     * Set image date/time info in AODT
     */

    int iaodt = aodtv72_setIRimageinfo(curdate, cursat);

    /*
     * Get storm center lat/lon
     */
    if (lauto == true) {
      // aodtv72_runautomode( nauto, fauto, imagefile, &cenlat, &cenlon,
      // &posm );
    }

    /*
     * Set center location in AODT positioning method (1=interpolation,
     * 4=extrapolation, 0=error)
     */
    // posm = 1;
    aodtv72_setlocation(cenlat, cenlon, posm);

    /*
     * Set domain FLAG in AODT
     */

    if (g_domain.equalsIgnoreCase("AUTO")) {
      idomain = 0;
    }
    if (g_domain.equalsIgnoreCase("Atlantic")) {
      idomain = 1;
    }
    if (g_domain.equalsIgnoreCase("Pacific")) {
      idomain = 2;
    }
    if (g_domain.equalsIgnoreCase("Indian")) {
      idomain = 2;
    }

    iaodt = aodtv72_setdomain(idomain);

    /*
     * Retrieve temperatures from image. This to be done in IDV
     */

    GridUtil.Grid2D g2d = null;
    float[][] temps = null;
    float[][][] satimage = null;
    float[][] lons = null;
    float[][] lats = null;
    int numx = 123;
    int numy = 123;

    try {
      g2d = GridUtil.makeGrid2D(satgrid);
      lons = g2d.getlons();
      lats = g2d.getlats();

    } catch (Exception re) {
    }

    /* now spatial subset numx by numy */
    GridUtil.Grid2D g2d1 = spatialSubset(g2d, cenlat, cenlon, numx, numy);

    satimage = g2d1.getvalues();
    float[][] temp0 = satimage[0];
    int imsorc = satId, imtype = satChannel;

    if (isTemperature) temps = temp0;
    else temps = im_gvtota(numx, numy, temp0, imsorc, imtype);

    /*
     * Load the IR image information in AODT init areadata_v72
     */

    aodtv72_loadIRimage(temps, g2d1.getlats(), g2d1.getlons(), numx, numy);

    /*
     * Set eye and cloud temperature values in AODT, return position for IR
     * image data read
     */

    StormAODTInfo.IRData tvIR = aodtv72_seteyecloudtemp(StormAODTInfo.keyerM_v72, areadata_v72);

    odtcurrent_v72IR.warmt = tvIR.warmt;
    odtcurrent_v72IR.warmlatitude = tvIR.warmlatitude;
    odtcurrent_v72IR.warmlongitude = tvIR.warmlongitude;
    odtcurrent_v72IR.eyet = tvIR.eyet;
    odtcurrent_v72IR.cwcloudt = tvIR.cwcloudt;
    odtcurrent_v72IR.cwring = tvIR.cwring;

    /*
     * Determine scene type Set scene type
     */

    float[] oscen = StormAODTSceneType.aodtv72_calcscene(odtcurrent_v72IR, areadata_v72);

    odtcurrent_v72IR.cloudt = oscen[0];
    odtcurrent_v72IR.cloudt2 = oscen[1];
    odtcurrent_v72IR.eyestdv = oscen[2];
    odtcurrent_v72IR.cloudsymave = oscen[3];
    odtcurrent_v72IR.eyefft = (int) oscen[4];
    odtcurrent_v72IR.cloudfft = (int) oscen[5];
    // { alst, Aaveext, Estdveye, Aavesym, eyecnt, rngcnt};
    float[] oscen1 =
        StormAODTSceneType.aodtv72_classify(
            odtcurrent_v72IR, rmwsizeman_v72, areadata_v72, osstr_v72, osearch_v72);

    odtcurrent_v72IR.eyescene = (int) oscen1[0];
    odtcurrent_v72IR.cloudscene = (int) oscen1[1];
    odtcurrent_v72IR.eyesceneold = -1;
    odtcurrent_v72IR.cloudsceneold = -1;
    odtcurrent_v72IR.eyecdosize = oscen1[2];
    odtcurrent_v72IR.ringcb = (int) oscen1[3];
    odtcurrent_v72IR.ringcbval = (int) oscen1[4];
    odtcurrent_v72IR.ringcbvalmax = (int) oscen1[5];
    odtcurrent_v72IR.ringcblatmax = oscen1[6];
    odtcurrent_v72IR.ringcblonmax = oscen1[7];
    odtcurrent_v72IR.rmw = oscen1[8];

    /*
     * Determine intensity
     */

    iaodt = aodtv72_calcintensity(idomain);
    if (iaodt == 71) {
      throw new IllegalStateException("center location is over land");
    }

    /*
     * Print out all diagnostic messages to screen
     */
    return odtcurrent_v72IR;
  }
示例#6
0
  /**
   * Compute initial Raw T-Number value using original Dvorak rules
   *
   * @param odtcurrent
   * @param idomain_v72
   * @return return value is Raw T#
   */
  float aodtv72_Tnoraw(StormAODTInfo.IRData odtcurrent, int idomain_v72)
        /*
         * Compute initial Raw T-Number value using original Dvorak rules Inputs :
         * global structure odtcurrent_v72 containing current analysis Outputs :
         * return value is Raw T#
         *
         * ODT SCENE/TEMPERATURE TABLE BD | WMG OW DG MG LG B W CMG CDG | TEMP |30.0
         * 0.0 -30.0 -42.0 -54.0 -64.0 -70.0 -76.0 -80.0+|
         * ---------------------------------------------------------------| Atl EYE
         * | 3.5 4.0 4.5 4.5 5.0 5.5 6.0 6.5 7.0 | EMBC | 3.5 3.5 4.0 4.0 4.5 4.5
         * 5.0 5.0 5.0 | CDO | 3.0 3.0 3.5 4.0 4.5 4.5 4.5 5.0 5.0 |
         * ---------------------------------------------------------------| Pac EYE
         * | 4.0 4.0 4.0 4.5 4.5 5.0 5.5 6.0 6.5 | EMBC | 3.5 3.5 4.0 4.0 4.5 4.5
         * 5.0 5.0 5.0 | CDO | 3.0 3.5 3.5 4.0 4.5 4.5 4.5 4.5 5.0 |
         * ---------------------------------------------------------------| Cat diff
         * | 0 1 2 3 4 5 6 7 8 | add | 0.0 0.0 0.0 0.0 0.0-->0.5 0.5-->1.0 1.5 |
         * (old) add |-0.5 -0.5 0.0 0.0-->0.5 0.5 0.5-->1.0 1.0 | (new)
         * ---------------------------------------------------------------|
         */
      {

    double[][] eno = {
      {
        1.00, 2.00, 3.25, 4.00, 4.75, 5.50, 5.90, 6.50, 7.00, 7.50, 8.00
      }, /* original plus adjusted > CDG+ */
      {1.50, 2.25, 3.30, 3.85, 4.50, 5.00, 5.40, 5.75, 6.25, 6.50, 7.00}
    }; /* adjusted based */
    double[][] cdo = {
      {2.00, 2.40, 3.25, 3.50, 3.75, 4.00, 4.10, 4.20, 4.30, 4.40, 4.70},
      {2.05, 2.40, 3.00, 3.20, 3.40, 3.55, 3.65, 3.75, 3.80, 3.90, 4.10}
    };
    double[] curbnd = {1.0, 1.5, 2.5, 3.0, 3.5, 4.0, 4.5};
    double[] shrdst = {0.0, 35.0, 50.0, 80.0, 110.0, 140.0};
    double[] shrcat = {3.5, 3.0, 2.5, 2.25, 2.0, 1.5};

    double[][] diffchk = {
      {0.0, 0.5, 1.2, 1.7, 2.2, 2.7, 0.0, 0.0, 0.1, 0.5}, /*
																	 * shear
																	 * scene
																	 * types...
																	 * original
																	 * Rule 8
																	 * rules
																	 */
      {0.0, 0.5, 1.7, 2.2, 2.7, 3.2, 0.0, 0.0, 0.1, 0.5}, /*
																	 * eye scene
																	 * types...
																	 * add 0.5
																	 * to Rule 8
																	 * rules
																	 */
      {0.0, 0.5, 0.7, 1.2, 1.7, 2.2, 0.0, 0.0, 0.1, 0.5}
    }; /*
        * other
        * scene
        * types
        * ...
        * subtract
        * 0.5
        * from
        * Rule
        * 8
        * rules
        */
    double eyeadjfacEYE[] = {0.011, 0.015}; /*
												 * modified wpac value to be
												 * closer to atlantic
												 */
    double symadjfacEYE[] = {-0.015, -0.015};
    double dgraysizefacCLD[] = {0.002, 0.001};
    double symadjfacCLD[] = {-0.030, -0.015};

    int diffchkcat;
    int ixx, cloudcat, eyecat, diffcat, rp, xrp, rb;
    float incval, lastci, lasttno, lastr9, lastraw;
    float xpart, xparteye, xaddtno, eyeadj, spart, ddvor, dvorchart, ciadj;
    float sdist, cloudtemp, eyetemp, fftcloud;
    float t1val, t6val, t12val, t18val, t24val, delt1, delt6, delt12, delt18, delt24;
    float t1valraw, t1valrawx, txvalmin, txvalmax;
    double curtime, xtime, firsttime, firstlandtime;
    double ttime1, ttime6, ttime12, ttime18, ttime24, t1valrawxtime;
    StormAODTInfo.IRData odthistory, prevrec;
    boolean oceancheck, adjustshear, firstland;
    boolean t1found = false, t6found = false, t12found = false, t18found = false, t24found = false;
    boolean first6hrs = false;
    float symadj, dgraysizeadj, deltaT;

    cloudtemp = odtcurrent.cloudt;
    eyetemp = odtcurrent.eyet;
    cloudcat = 0;
    eyecat = 0;
    lastci = 4.0f;
    xpart = 0.0f;

    for (ixx = 0; ixx < 10; ixx++) {
      /* compute cloud category */
      if ((cloudtemp <= StormAODTInfo.ebd_v72[ixx])
          && (cloudtemp > StormAODTInfo.ebd_v72[ixx + 1])) {
        cloudcat = ixx;
        xpart =
            (float) (cloudtemp - StormAODTInfo.ebd_v72[cloudcat])
                / (float) (StormAODTInfo.ebd_v72[cloudcat + 1] - StormAODTInfo.ebd_v72[cloudcat]);
      }
      /* compute eye category for eye adjustment */
      if ((eyetemp <= StormAODTInfo.ebd_v72[ixx]) && (eyetemp > StormAODTInfo.ebd_v72[ixx + 1])) {
        eyecat = ixx;
      }
      /* eyetemp=Math.min(0.0,eyetemp); */
    }
    if (odtcurrent.eyescene == 1) {
      /* for pinhole eye, determine what storm should be seeing */
      /*
       * eyetemp=pinhole(odtcurrent_v72->IR.latitude,odtcurrent_v72->IR.longitude
       * ,eyetemp);
       */
      /*
       * eyetemp=(9.0-eyetemp)/2.0; / this matches DT used at NHC (jack
       * beven)
       */
      eyetemp = (float) (eyetemp - 9.0) / 2.0f; /*
													 * between +9C (beven) and
													 * measured eye temp (turk)
													 */
      odtcurrent.eyet = eyetemp;
    }

    /* category difference between eye and cloud region */
    diffcat = Math.max(0, cloudcat - eyecat);

    /* if scenetype is EYE */
    rp = odtcurrent.ringcbval;
    rb = odtcurrent.ringcb;
    fftcloud = odtcurrent.cloudfft;

    if (odtcurrent.cloudscene == 3) {
      /* CURVED BAND */
      rp = Math.min(30, rp + 1); /* added 1 for testing */
      xrp = rp / 5;
      incval = 0.1f;
      if (xrp == 1) {
        incval = 0.2f;
      }
      ddvor = (float) curbnd[xrp];
      xaddtno = incval * (float) (rp - (xrp * 5));
      /*
       * printf("rp=%d  xrp=%d  rb=%d  ddvor=%f  xaddtno=%f\n",rp,xrp,rb,ddvor
       * ,xaddtno);
       */
      ddvor = ddvor + xaddtno;
      if (rb == 5) {
        ddvor = Math.min(4.0f, ddvor + 0.5f);
      }
      if (rb == 6) {
        ddvor = Math.min(4.5f, ddvor + 1.0f);
      }
      diffchkcat = 2; /* added for test - non-eye/shear cases */
    } else if (odtcurrent.cloudscene == 4) {
      /* POSSIBLE SHEAR -- new definition from NHC */
      ixx = 0;
      ddvor = 1.0f;
      sdist = odtcurrent.eyecdosize; /* shear distance */
      while (ixx < 5) {
        if ((sdist >= shrdst[ixx]) && (sdist < shrdst[ixx + 1])) {
          spart = (float) ((sdist - shrdst[ixx]) / (shrdst[ixx + 1] - shrdst[ixx]));
          xaddtno = (float) ((spart * (shrcat[ixx + 1] - shrcat[ixx])));
          ddvor = (float) (shrcat[ixx] + xaddtno);
          ixx = 5;
        } else {
          ixx++;
        }
      }
      diffchkcat = 0; /* added for test - shear cases */
    } else {
      /* EYE or NO EYE */
      if (odtcurrent.eyescene <= 2) {
        /* EYE */
        xaddtno = (float) (xpart * (eno[idomain_v72][cloudcat + 1] - eno[idomain_v72][cloudcat]));
        /*
         * cloud category must be white (-70C) or below for full
         * adjustment; value will be merged in starting at black (-64C)
         * / if(cloudcat<5) { / gray shades / xparteye=0.00; } else
         * if(cloudcat==5) { / black / xparteye=xpart; } else { / white
         * and colder / xparteye=1.00; }
         */
        eyeadj = (float) eyeadjfacEYE[idomain_v72] * (eyetemp - cloudtemp);
        /* symadj=-0.02*(odtcurrent_v72->IR.cloudsymave); */
        symadj = (float) symadjfacEYE[idomain_v72] * (odtcurrent.cloudsymave);
        /*
         * printf("EYE : cloudsymave=%f  symadj=%f\n",odtcurrent_v72->IR.
         * cloudsymave,symadj);
         */
        ddvor = (float) eno[idomain_v72][cloudcat] + xaddtno + eyeadj + symadj;
        /*
         * printf("EYE : xaddtno=%f  eyeadj=%f  symadj=%f   ddvor=%f\n",xaddtno
         * ,eyeadj,symadj,ddvor);
         */
        ddvor = Math.min(ddvor, 9.0f);
        /* printf("ddvor=%f\n",ddvor); */
        if (odtcurrent.eyescene == 2) {
          ddvor = Math.min(ddvor - 0.5f, 6.5f); /* LARGE EYE adjustment */
        }
        /*
         * if(odtcurrent_v72->IR.eyescene==3)
         * ddvor=Math.min(ddvor-0.5,6.0); / LARGE RAGGED EYE adjustment
         */
        diffchkcat = 1; /* added for test - eye cases */
        /* printf("ddvor=%f\n",ddvor); */
      } else {
        /* NO EYE */
        /* CDO */
        xaddtno = (float) (xpart * (cdo[idomain_v72][cloudcat + 1] - cdo[idomain_v72][cloudcat]));
        /* dgraysizeadj=0.002*odtcurrent_v72->IR.eyecdosize; */
        dgraysizeadj = (float) dgraysizefacCLD[idomain_v72] * odtcurrent.eyecdosize;
        /*
         * printf("CDO : dgraysize=%f  symadj=%f\n",odtcurrent_v72->IR.eyecdosize
         * ,dgraysizeadj);
         */
        /* symadj=-0.03*(odtcurrent_v72->IR.cloudsymave); */
        symadj = (float) symadjfacCLD[idomain_v72] * (odtcurrent.cloudsymave);
        /*
         * printf("CDO : cloudsymave=%f  symadj=%f\n",odtcurrent_v72->IR.
         * cloudsymave,symadj);
         */
        ddvor = (float) cdo[idomain_v72][cloudcat] + xaddtno + dgraysizeadj + symadj;
        ddvor = ddvor - 0.1f; /* bias adjustment */
        /*
         * printf("CDO : xaddtno=%f dgraysizeadj=%f  symadj=%f   ddvor=%f\n"
         * ,xaddtno,dgraysizeadj,symadj,ddvor);
         */
        ciadj = 0.0f;
        if (odtcurrent.cloudscene == 0) {
            /* CDO */
          if (lastci >= 4.5) {
            ciadj = Math.max(0.0f, Math.min(1.0f, lastci - 4.5f));
          }
          if (lastci <= 3.0) {
            ciadj = Math.min(0.0f, Math.max(-1.0f, lastci - 3.0f));
          }
          /* printf("CDO : lastci=%f   xaddtno=%f\n",lastci,ciadj); */
          ddvor = ddvor + ciadj;
        }
        if (odtcurrent.cloudscene == 1) {
            /* EMBEDDED CENTER */
          ciadj = Math.max(0.0f, Math.min(1.5f, lastci - 4.0f));
          /* printf("EMBC : lastci=%f   xaddtno=%f\n",lastci,ciadj); */
          ddvor = ddvor + ciadj; /* changed from 0.5 */
        }
        if (odtcurrent.cloudscene == 2) {
            /* IRREGULAR CDO (PT=3.5) */
          ddvor = ddvor + 0.3f; /* additional IrrCDO bias adjustment */
          ddvor = Math.min(3.5f, Math.max(2.5f, ddvor));
        }
        diffchkcat = 2; /* added for test - non-eye/shear cases */
      }
    }

    dvorchart = ((float) (int) (ddvor * 10.0f)) / 10.0f;
    // odtcurrent_v72IR.TrawO=dvorchart;

    return dvorchart;
  }
示例#7
0
  /**
   * _more_
   *
   * @param redo _more_
   * @param odtcurrent_v72IR _more_
   * @return _more_
   */
  int aodtv72_initcurrent(boolean redo, StormAODTInfo.IRData odtcurrent_v72IR)
        /*
         * initialize odtcurrent_v72 array or reset values for land interaction
         * situations
         */
      {
    int b, bb;
    // char comm[50]="\0";

    if (!redo) {
      // odtcurrent_v72=(struct odtdata *)malloc(sizeof(struct odtdata));
      odtcurrent_v72IR.latitude = 999.99f;
      odtcurrent_v72IR.longitude = 999.99f;
      odtcurrent_v72IR.land = 0;
      odtcurrent_v72IR.autopos = 0;
      // strcpy(odtcurrent_v72IR.comment,comm);
      // diagnostics_v72=(char *)calloc((size_t)50000,sizeof(char));
      // hfile_v72=(char *)calloc((size_t)200,sizeof(char));
      // fixfile_v72=(char *)calloc((size_t)200,sizeof(char));

      // b=sizeof(float);
      // bb=sizeof(double);
      // fcstlat_v72=(float *)calloc((size_t)5,b);
      // fcstlon_v72=(float *)calloc((size_t)5,b);
      // fcsttime_v72=(double *)calloc((size_t)5,bb);
    }

    odtcurrent_v72IR.Traw = 0.0f;
    odtcurrent_v72IR.TrawO = 0.0f;
    odtcurrent_v72IR.Tfinal = 0.0f;
    odtcurrent_v72IR.Tfinal3 = 0.0f;
    odtcurrent_v72IR.CI = 0.0f;
    odtcurrent_v72IR.eyet = 99.99f;
    odtcurrent_v72IR.warmt = 99.99f;
    odtcurrent_v72IR.cloudt = 99.99f;
    odtcurrent_v72IR.cloudt2 = 99.99f;
    odtcurrent_v72IR.cwcloudt = 99.99f;
    odtcurrent_v72IR.warmlatitude = 999.99f;
    odtcurrent_v72IR.warmlongitude = 999.99f;
    odtcurrent_v72IR.eyecdosize = 0.0f;
    odtcurrent_v72IR.eyestdv = 0.0f;
    odtcurrent_v72IR.cloudsymave = 0.0f;
    odtcurrent_v72IR.eyescene = 0;
    odtcurrent_v72IR.cloudscene = 0;
    odtcurrent_v72IR.eyesceneold = -1;
    odtcurrent_v72IR.cloudsceneold = -1;
    odtcurrent_v72IR.rule9 = 0;
    odtcurrent_v72IR.rule8 = 0;
    odtcurrent_v72IR.LBflag = 0;
    odtcurrent_v72IR.rapiddiss = 0;
    odtcurrent_v72IR.eyefft = 0;
    odtcurrent_v72IR.cloudfft = 0;
    odtcurrent_v72IR.cwring = 0;
    odtcurrent_v72IR.ringcb = 0;
    odtcurrent_v72IR.ringcbval = 0;
    odtcurrent_v72IR.ringcbvalmax = 0;
    odtcurrent_v72IR.CIadjp = 0.0f;
    odtcurrent_v72IR.rmw = -99.9f;
    /* odtcurrent_v72->IR.TIEflag=0; */
    /* odtcurrent_v72->IR.TIEraw=0.0; */
    /* odtcurrent_v72->IR.TIEavg=0.0; */
    /* odtcurrent_v72->IR.sst=-99.9; */
    // if(!redo) odtcurrent_v72->nextrec=NULL; /* added by CDB */

    return 0;
  }