cdm/src/main/java/ucar/nc2/dataset/conv/CF1Convention.java
private void makeAtmLnCoordinate(NetcdfDataset ds, Variable v) {
    // get the formula attribute
    String formula = ds.findAttValueIgnoreCase(v, CF.formula_terms, null);
    if (null == formula) {
      String msg = " Need attribute 'formula_terms' on Variable " + v.getFullName() + "\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    // parse the formula string
    Variable p0Var = null, levelVar = null;
    StringTokenizer stoke = new StringTokenizer(formula, " :");
    while (stoke.hasMoreTokens()) {
      String toke = stoke.nextToken();
      if (toke.equalsIgnoreCase("p0")) {
        String name = stoke.nextToken();
        p0Var = ds.findVariable(name);
      } else if (toke.equalsIgnoreCase("lev")) {
        String name = stoke.nextToken();
        levelVar = ds.findVariable(name);
      }
    }

    if (null == p0Var) {
      String msg = " Need p0:varName on Variable " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    if (null == levelVar) {
      String msg = " Need lev:varName on Variable " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    String units = ds.findAttValueIgnoreCase(p0Var, CDM.UNITS, "hPa");

    // create the data and the variable
    try { // p(k) = p0 * exp(-lev(k))
      double p0 = p0Var.readScalarDouble();
      Array levelData = levelVar.read();
      Array pressureData = Array.factory(DataType.DOUBLE, levelData.getShape());
      IndexIterator ii = levelData.getIndexIterator();
      IndexIterator iip = pressureData.getIndexIterator();
      while (ii.hasNext()) {
        double val = p0 * Math.exp(-1.0 * ii.getDoubleNext());
        iip.setDoubleNext(val);
      }

      CoordinateAxis1D p = new CoordinateAxis1D(ds, null, v.getShortName() + "_pressure", DataType.DOUBLE,
              levelVar.getDimensionsString(), units,
              "Vertical Pressure coordinate synthesized from atmosphere_ln_pressure_coordinate formula");
      p.setCachedData(pressureData, false);
      p.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString()));
      p.addAttribute(new Attribute(_Coordinate.AliasForDimension, p.getDimensionsString()));
      ds.addVariable(null, p);
      parseInfo.format(" added Vertical Pressure coordinate %s from CF-1 %s%n", p.getFullName(), CF.atmosphere_ln_pressure_coordinate);

    } catch (IOException e) {
      String msg = " Unable to read variables from " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
    }

  }
private void makeAtmLnCoordinate(NetcdfDataset ds, Variable v) {
    // get the formula attribute
    String formula = ds.findAttValueIgnoreCase(v, CF.formula_terms, null);
    if (null == formula) {
      String msg = " Need attribute 'formula_terms' on Variable " + v.getFullName() + "\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    // parse the formula string
    Variable p0Var = null, levelVar = null;
    StringTokenizer stoke = new StringTokenizer(formula, " :");
    while (stoke.hasMoreTokens()) {
      String toke = stoke.nextToken();
      if (toke.equalsIgnoreCase("p0")) {
        String name = stoke.nextToken();
        p0Var = ds.findVariable(name);
      } else if (toke.equalsIgnoreCase("lev")) {
        String name = stoke.nextToken();
        levelVar = ds.findVariable(name);
      }
    }

    if (null == p0Var) {
      String msg = " Need p0:varName on Variable " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    if (null == levelVar) {
      String msg = " Need lev:varName on Variable " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
      return;
    }

    String units = ds.findAttValueIgnoreCase(p0Var, CDM.UNITS, "hPa");

    // create the data and the variable
    try { // p(k) = p0 * exp(-lev(k))
      double p0 = p0Var.readScalarDouble();
      Array levelData = levelVar.read();
      Array pressureData = Array.factory(DataType.DOUBLE, levelData.getShape());
      IndexIterator ii = levelData.getIndexIterator();
      IndexIterator iip = pressureData.getIndexIterator();
      while (ii.hasNext()) {
        double val = p0 * Math.exp(-1.0 * ii.getDoubleNext());
        iip.setDoubleNext(val);
      }

      CoordinateAxis1D p = new CoordinateAxis1D(ds, null, v.getShortName() + "_pressure", DataType.DOUBLE,
              levelVar.getDimensionsString(), units,
              "Vertical Pressure coordinate synthesized from atmosphere_ln_pressure_coordinate formula");
      p.setCachedData(pressureData, false);
      p.addAttribute(new Attribute(_Coordinate.AxisType, AxisType.Pressure.toString()));
      p.addAttribute(new Attribute(_Coordinate.AliasForDimension, p.getDimensionsString()));
      ds.addVariable(null, p);
      parseInfo.format(" added Vertical Pressure coordinate %s from CF-1 %s%n", p.getFullName(), CF.atmosphere_ln_pressure_coordinate);

    } catch (IOException e) {
      String msg = " Unable to read variables from " + v.getFullName() + " formula_terms\n";
      parseInfo.format(msg);
      userAdvice.format(msg);
    }

  }
private void makeAtmLnCoordinate ( NetcdfDataset ds , Variable v ) { // get the formula attribute
 String formula = ds . findAttValueIgnoreCase ( v , CF . formula_terms , null ) ; if ( null == formula ) { String msg = " Need attribute 'formula_terms' on Variable " + v . getFullName ( ) + "\n" ; parseInfo . format ( msg ) ; userAdvice . format ( msg ) ; return ; } // parse the formula string
 Variable p0Var = null , levelVar = null ; StringTokenizer stoke = new StringTokenizer ( formula , " :" ) ; while ( stoke . hasMoreTokens ( ) ) { String toke = stoke . nextToken ( ) ; if ( toke . equalsIgnoreCase ( "p0" ) ) { String name = stoke . nextToken ( ) ; p0Var = ds . findVariable ( name ) ; } else if ( toke . equalsIgnoreCase ( "lev" ) ) { String name = stoke . nextToken ( ) ; levelVar = ds . findVariable ( name ) ; } } if ( null == p0Var ) { String msg = " Need p0:varName on Variable " + v . getFullName ( ) + " formula_terms\n" ; parseInfo . format ( msg ) ; userAdvice . format ( msg ) ; return ; } if ( null == levelVar ) { String msg = " Need lev:varName on Variable " + v . getFullName ( ) + " formula_terms\n" ; parseInfo . format ( msg ) ; userAdvice . format ( msg ) ; return ; } String units = ds . findAttValueIgnoreCase ( p0Var , CDM . UNITS , "hPa" ) ; // create the data and the variable
 try { // p(k) = p0 * exp(-lev(k))
 double p0 = p0Var . readScalarDouble ( ) ; Array levelData = levelVar . read ( ) ; Array pressureData = Array . factory ( DataType . DOUBLE , levelData . getShape ( ) ) ; IndexIterator ii = levelData . getIndexIterator ( ) ; IndexIterator iip = pressureData . getIndexIterator ( ) ; while ( ii . hasNext ( ) ) { double val = p0 * Math . exp ( - 1.0 * ii . getDoubleNext ( ) ) ; iip . setDoubleNext ( val ) ; } CoordinateAxis1D p = new CoordinateAxis1D ( ds , null , v . getShortName ( ) + "_pressure" , DataType . DOUBLE , levelVar . getDimensionsString ( ) , units , "Vertical Pressure coordinate synthesized from atmosphere_ln_pressure_coordinate formula" ) ; p . setCachedData ( pressureData , false ) ; p . addAttribute ( new Attribute ( _Coordinate . AxisType , AxisType . Pressure . toString ( ) ) ) ; p . addAttribute ( new Attribute ( _Coordinate . AliasForDimension , p . getDimensionsString ( ) ) ) ; ds . addVariable ( null , p ) ; parseInfo . format ( " added Vertical Pressure coordinate %s from CF-1 %s%n" , p . getFullName ( ) , CF . atmosphere_ln_pressure_coordinate ) ; } catch ( IOException e ) { String msg = " Unable to read variables from " + v . getFullName ( ) + " formula_terms\n" ; parseInfo . format ( msg ) ; userAdvice . format ( msg ) ; } }
this is here because it doesnt fit into the 3D array thing.
this is here because it doesnt fit into the 3D array thing .