/* VisAD system for interactive analysis and visualization of numerical data. Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and Tommy Jasmin. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ package visad.jmet; import visad.*; import visad.data.units.*; /** * Class for defining a few common atmospheric science units which don't * conform to the standards used by the VisAD netCDF Units package. * Use the makeSymbol method to return a "proper" unit symbol from a * common one (ex: input mph to get mi/h). Also allows one to input * a common symbol in upper case (MPH) and get the proper one back (mi/h). * @author Tom Whittaker, SSEC */ public class MetUnits { static { try { UnitsDB du = DefaultUnitsDB.instance(); Unit hpa = du.get("hPa"); hpa = hpa.clone("hPa"); du.putSymbol("HPA", hpa); du.putSymbol("hPa", hpa); du.putSymbol("MB", hpa); du.putSymbol("mb", hpa); Unit pvu = Parser.parse("10-6 m2 s-1K kg-1"); pvu = pvu.clone("PVU"); du.putSymbol("PVU",pvu); du.putSymbol("pvu",pvu); } catch (Exception e) { System.err.println("Unable to update UnitsDB"); } } /** * Create a 'proper' unit symbol from a common one (ie: mph -> mi/h instead * of milliphots) * * @param commonSymbol is the String of the original unit name * * @return commonSymbol converted to "proper" symbol or commonSymbol if * unknown */ public static String makeSymbol(String commonSymbol) { if (commonSymbol == null) return null; String in = commonSymbol.trim(); String out = in; if (in.equalsIgnoreCase("m")) { out = "m"; } else if (in.equalsIgnoreCase("sec")) { out = "s"; } else if (in.equalsIgnoreCase("mps")) { out = "m/s"; } else if (in.equalsIgnoreCase("mph")) { out = "mi/h"; } else if (in.equalsIgnoreCase("kph")) { out = "km/h"; } else if (in.equalsIgnoreCase("fps")) { out = "ft/s"; } else if (in.equalsIgnoreCase("km")) { out = "km"; } else if (in.equalsIgnoreCase("dm")) { out = "dm"; } else if (in.equalsIgnoreCase("cm")) { out = "cm"; } else if (in.equalsIgnoreCase("mm")) { out = "mm"; } else if (in.equalsIgnoreCase("mi")) { out = "mi"; } else if (in.equalsIgnoreCase("pa")) { out = "Pa"; } else if (in.equalsIgnoreCase("nmi")) { out = "nmi"; } else if (in.equalsIgnoreCase("in")) { out = "in"; } else if (in.equalsIgnoreCase("deg")) { out = "deg"; } else if (in.equalsIgnoreCase("yd")) { out = "yd"; } else if (in.equalsIgnoreCase("ft")) { out = "ft"; } else if (in.equalsIgnoreCase("f")) { out = "degF"; } else if (in.equalsIgnoreCase("c")) { out = "degC"; } else if (in.equalsIgnoreCase("k")) { out = "K"; } else if (in.equalsIgnoreCase("inhg")) { out = "inhg"; } else if (in.equalsIgnoreCase("kt")) { out = "kt"; } else if (in.equalsIgnoreCase("kts")) { out = "kt"; } else if (in.equalsIgnoreCase("g/kg")) { out = "g/kg"; } else if (in.equalsIgnoreCase("degrees n")) { out = "degrees_north"; } else if (in.equalsIgnoreCase("degrees e")) { out = "degrees_east"; } else if (in.equalsIgnoreCase("degree n")) { out = "degrees_north"; } else if (in.equalsIgnoreCase("degree e")) { out = "degrees_east"; } else if (in.equalsIgnoreCase("degree e")) { out = "degrees_east"; } else if (in.equalsIgnoreCase("degree k")) { out = "K"; } else if (in.equalsIgnoreCase("degrees k")) { out = "K"; } else if (in.equalsIgnoreCase("degree c")) { out = "Celsius"; } else if (in.equalsIgnoreCase("degrees c")) { out = "Celsius"; } else if (in.equalsIgnoreCase("degree f")) { out = "Fahrenheit"; } else if (in.equalsIgnoreCase("degrees f")) { out = "Fahrenheit"; } else if (in.equalsIgnoreCase("gp m")) { out = "gpm"; } else if (in.equalsIgnoreCase("gp_m")) { out = "gpm"; } else if (in.equalsIgnoreCase("kg")) { out = "kg"; } // handle Kg // the following are decidedly McIDAS else if (in.equalsIgnoreCase("paps")) { out = "Pa/s"; } else if (in.equalsIgnoreCase("mgps")) { out = "km^2(kg/s)"; } else if (in.equalsIgnoreCase("m2s2")) { out = "m^2/s^2"; } else if (in.equalsIgnoreCase("kpm")) { out = "K/m"; } else if (in.equalsIgnoreCase("m2ps")) { out = "m^2/s"; } else if (in.equalsIgnoreCase("gpkg")) { out = "g/kg"; } else if (in.equalsIgnoreCase("kgm2")) { out = "mm"; } else if (in.equalsIgnoreCase("kgm3")) { out = "kg/m^3"; } else if (in.equalsIgnoreCase("mmps")) { out = "mm/s"; } else if (in.equalsIgnoreCase("ps")) { out = "s-1"; } else if (in.equalsIgnoreCase("wpm2")) { out = "W/m^2"; } else if (in.equalsIgnoreCase("nm2")) { out = "N/m^2"; } else if (in.equalsIgnoreCase("kgps")) { out = "kg/kg/s"; } else if (in.equalsIgnoreCase("ps2")) { out = "s^-2"; } else if (in.equalsIgnoreCase("pspm")) { out = "s^-1m^-1"; } else if (in.equalsIgnoreCase("jpkg")) { out = "J/kg"; } else if (in.equalsIgnoreCase("kgkg")) { out = "kg/kg"; } else if (in.equalsIgnoreCase("psps")) { out = "s^-1"; } else if (in.equalsIgnoreCase("kps")) { out = "K/s"; } else if (in.equalsIgnoreCase("k ft")) { out ="k ft"; } else if (in.equalsIgnoreCase("1/sr")) { out = "sr-1"; } else if (in.equalsIgnoreCase("mw**")) { out = "mW/m^2/sr/cm-1"; } else if (in.equalsIgnoreCase("mwm2")) { out = "mW/m^2/sr/cm-1"; } else if (in.equalsIgnoreCase("wm**")) { out = "W/m^2/sr/micron"; } else if (in.equalsIgnoreCase("wp**")) { out = "W/m^2/sr"; } else if (in.equalsIgnoreCase("mb")) { out = "hPa"; } else if (in.equalsIgnoreCase("mbag")) { out = "hPa"; } else if (in.equalsIgnoreCase("dbz")) { out = "dBz"; } // the following handle (rightly or wrongly) converting mass/area to length else if (in.equalsIgnoreCase("kg/m**2")) { out = "mm"; } else if (in.equalsIgnoreCase("kg/m2")) { out = "mm"; } else if (in.equalsIgnoreCase("kg/m^2")) { out = "mm"; } else if (in.equalsIgnoreCase("kg m-2")) { out = "mm"; } else if (in.equalsIgnoreCase("kg.m-2")) { out = "mm"; } else if (in.equalsIgnoreCase("kg/m**2/s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg/m**2s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg/m2/s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg/m2s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg/m^2/s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg/m^2s")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg m-2 s-1")) { out = "mm/s"; } else if (in.equalsIgnoreCase("kg.m-2.s-1")) { out = "mm/s"; } // and a few more else if (in.equalsIgnoreCase("W/m**2")) { out = "W/m^2"; } else if (in.equalsIgnoreCase("W/m**2s")) { out = "W/m^2/s"; } return out; } }