grib/src/main/java/ucar/nc2/grib/grib1/tables/FnmocTables.java
@Nullable
  private HashMap<Integer, VertCoordType> readFnmocTable3(String path) {
    try (InputStream is = GribResourceReader.getInputStream(path)) {
      SAXBuilder builder = new SAXBuilder();
      org.jdom2.Document doc = builder.build(is);
      Element root = doc.getRootElement();

      HashMap<Integer, VertCoordType> result = new HashMap<>(200);
      Element fnmocTable = root.getChild("fnmocTable");
      List<Element> params = fnmocTable.getChildren("entry");
      for (Element elem1 : params) {
        int code = Integer.parseInt(elem1.getChildText("grib1Id"));
        if (code < 129) continue;
        String desc = elem1.getChildText("description");
        String abbrev = elem1.getChildText("name");
        String units = elem1.getChildText("units");
        if (units == null) units = (code == 219) ? "Pa" : "";
        String datum = elem1.getChildText("datum");
        boolean isLayer = elem1.getChild("isLayer") != null;
        boolean isPositiveUp = elem1.getChild("isPositiveUp")  != null;
        VertCoordType lt = new VertCoordType(code, desc, abbrev, units, datum, isPositiveUp, isLayer);
        result.put(code, lt);
      }

      return result;  // all at once - thread safe

    } catch (IOException | JDOMException e) {
      logger.error("Cant read FnmocTable3 = " + path, e);
      return null;
    }
  }
@Nullable
  private HashMap<Integer, VertCoordType> readFnmocTable3(String path) {
    try (InputStream is = GribResourceReader.getInputStream(path)) {
      SAXBuilder builder = new SAXBuilder();
      org.jdom2.Document doc = builder.build(is);
      Element root = doc.getRootElement();

      HashMap<Integer, VertCoordType> result = new HashMap<>(200);
      Element fnmocTable = root.getChild("fnmocTable");
      List<Element> params = fnmocTable.getChildren("entry");
      for (Element elem1 : params) {
        int code = Integer.parseInt(elem1.getChildText("grib1Id"));
        if (code < 129) continue;
        String desc = elem1.getChildText("description");
        String abbrev = elem1.getChildText("name");
        String units = elem1.getChildText("units");
        if (units == null) units = (code == 219) ? "Pa" : "";
        String datum = elem1.getChildText("datum");
        boolean isLayer = elem1.getChild("isLayer") != null;
        boolean isPositiveUp = elem1.getChild("isPositiveUp")  != null;
        VertCoordType lt = new VertCoordType(code, desc, abbrev, units, datum, isPositiveUp, isLayer);
        result.put(code, lt);
      }

      return result;  // all at once - thread safe

    } catch (IOException | JDOMException e) {
      logger.error("Cant read FnmocTable3 = " + path, e);
      return null;
    }
  }
/*
<entry>
<grib1Id>222</grib1Id>
<fnmocId>mid_cld</fnmocId>
<name>mid_cld</name>
<description>middle cloud layer</description>
<status>deprecated</status>
</entry>

<fnmocTable>
<entry>
<grib1Id>001</grib1Id>
<fnmocId>surface</fnmocId>
<name>surface</name>
<description>ground or water surface (the atmosphere's lower boundary, land/sea surface)</description>
<status>current</status>
</entry>