/**
* Copyright (C) 2018 Adrien Hopkins
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
package sevenUnits.unit;
import java.util.Set;
import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.NamedObjectProduct;
import sevenUnits.utils.ObjectProduct;
/**
* All of the units, prefixes and dimensions that are used by the SI, as well as
* some outside the SI.
*
*
* This class does not include prefixed units. To obtain prefixed units, use
* {@link LinearUnit#withPrefix}:
*
*
* LinearUnit KILOMETRE = SI.METRE.withPrefix(SI.KILO);
*
*
*
* @author Adrien Hopkins
* @since 2019-10-16
*/
public final class Metric {
/// dimensions used by SI units
// base dimensions, as BaseDimensions
public static final class BaseDimensions {
public static final BaseDimension LENGTH = BaseDimension.valueOf("Length",
"L");
public static final BaseDimension MASS = BaseDimension.valueOf("Mass",
"M");
public static final BaseDimension TIME = BaseDimension.valueOf("Time",
"T");
public static final BaseDimension ELECTRIC_CURRENT = BaseDimension
.valueOf("Electric Current", "I");
public static final BaseDimension TEMPERATURE = BaseDimension
.valueOf("Temperature", "\u0398"); // theta symbol
public static final BaseDimension QUANTITY = BaseDimension
.valueOf("Quantity", "N");
public static final BaseDimension LUMINOUS_INTENSITY = BaseDimension
.valueOf("Luminous Intensity", "J");
public static final BaseDimension INFORMATION = BaseDimension
.valueOf("Information", "Info"); // non-SI
public static final BaseDimension CURRENCY = BaseDimension
.valueOf("Currency", "$$"); // non-SI
// You may NOT get SI.BaseDimensions instances!
private BaseDimensions() {
throw new AssertionError();
}
}
/// base units of the SI
// suppressing warnings since these are the same object, but in a different
/// form (class)
@SuppressWarnings("hiding")
public static final class BaseUnits {
public static final BaseUnit METRE = BaseUnit
.valueOf(BaseDimensions.LENGTH, "metre", "m");
public static final BaseUnit KILOGRAM = BaseUnit
.valueOf(BaseDimensions.MASS, "kilogram", "kg");
public static final BaseUnit SECOND = BaseUnit
.valueOf(BaseDimensions.TIME, "second", "s");
public static final BaseUnit AMPERE = BaseUnit
.valueOf(BaseDimensions.ELECTRIC_CURRENT, "ampere", "A");
public static final BaseUnit KELVIN = BaseUnit
.valueOf(BaseDimensions.TEMPERATURE, "kelvin", "K");
public static final BaseUnit MOLE = BaseUnit
.valueOf(BaseDimensions.QUANTITY, "mole", "mol");
public static final BaseUnit CANDELA = BaseUnit
.valueOf(BaseDimensions.LUMINOUS_INTENSITY, "candela", "cd");
public static final BaseUnit BIT = BaseUnit
.valueOf(BaseDimensions.INFORMATION, "bit", "b");
public static final BaseUnit DOLLAR = BaseUnit
.valueOf(BaseDimensions.CURRENCY, "dollar", "$");
public static final Set BASE_UNITS = Set.of(METRE, KILOGRAM,
SECOND, AMPERE, KELVIN, MOLE, CANDELA, BIT);
// You may NOT get SI.BaseUnits instances!
private BaseUnits() {
throw new AssertionError();
}
}
/**
* Constants that relate to the SI or other systems.
*
* @author Adrien Hopkins
* @since 2019-11-08
*/
public static final class Constants {
public static final LinearUnit EARTH_GRAVITY = METRE.dividedBy(SECOND)
.dividedBy(SECOND).times(9.80665);
}
// dimensions used in the SI, as ObjectProducts
public static final class Dimensions {
public static final ObjectProduct EMPTY = ObjectProduct
.empty();
public static final NamedObjectProduct LENGTH = ObjectProduct
.oneOf(BaseDimensions.LENGTH)
.withName(NameSymbol.of("Length", "L"));
public static final NamedObjectProduct MASS = ObjectProduct
.oneOf(BaseDimensions.MASS).withName(NameSymbol.of("Mass", "M"));
public static final NamedObjectProduct TIME = ObjectProduct
.oneOf(BaseDimensions.TIME).withName(NameSymbol.of("Time", "T"));
public static final NamedObjectProduct ELECTRIC_CURRENT = ObjectProduct
.oneOf(BaseDimensions.ELECTRIC_CURRENT)
.withName(NameSymbol.of("Current", "I"));
public static final NamedObjectProduct TEMPERATURE = ObjectProduct
.oneOf(BaseDimensions.TEMPERATURE)
.withName(NameSymbol.of("Temperature", "\u0398"));
public static final NamedObjectProduct QUANTITY = ObjectProduct
.oneOf(BaseDimensions.QUANTITY)
.withName(NameSymbol.of("Quantity", "N"));
public static final NamedObjectProduct LUMINOUS_INTENSITY = ObjectProduct
.oneOf(BaseDimensions.LUMINOUS_INTENSITY)
.withName(NameSymbol.of("Luminous Intensity", "J"));
public static final NamedObjectProduct INFORMATION = ObjectProduct
.oneOf(BaseDimensions.INFORMATION)
.withName(NameSymbol.ofName("Information"));
public static final NamedObjectProduct CURRENCY = ObjectProduct
.oneOf(BaseDimensions.CURRENCY)
.withName(NameSymbol.ofName("Currency"));
// derived dimensions without named SI units
public static final ObjectProduct AREA = LENGTH
.times(LENGTH);
public static final ObjectProduct VOLUME = AREA
.times(LENGTH);
public static final NamedObjectProduct VELOCITY = LENGTH
.dividedBy(TIME).withName(NameSymbol.ofName("Velocity"));
public static final ObjectProduct ACCELERATION = VELOCITY
.dividedBy(TIME);
public static final ObjectProduct WAVENUMBER = EMPTY
.dividedBy(LENGTH);
public static final ObjectProduct MASS_DENSITY = MASS
.dividedBy(VOLUME);
public static final ObjectProduct SURFACE_DENSITY = MASS
.dividedBy(AREA);
public static final ObjectProduct SPECIFIC_VOLUME = VOLUME
.dividedBy(MASS);
public static final ObjectProduct CURRENT_DENSITY = ELECTRIC_CURRENT
.dividedBy(AREA);
public static final ObjectProduct MAGNETIC_FIELD_STRENGTH = ELECTRIC_CURRENT
.dividedBy(LENGTH);
public static final ObjectProduct CONCENTRATION = QUANTITY
.dividedBy(VOLUME);
public static final ObjectProduct MASS_CONCENTRATION = CONCENTRATION
.times(MASS);
public static final ObjectProduct LUMINANCE = LUMINOUS_INTENSITY
.dividedBy(AREA);
public static final ObjectProduct REFRACTIVE_INDEX = VELOCITY
.dividedBy(VELOCITY);
public static final ObjectProduct REFRACTIVE_PERMEABILITY = EMPTY
.times(EMPTY);
public static final ObjectProduct ANGLE = LENGTH
.dividedBy(LENGTH);
public static final ObjectProduct SOLID_ANGLE = AREA
.dividedBy(AREA);
// derived dimensions with named SI units
public static final ObjectProduct FREQUENCY = EMPTY
.dividedBy(TIME);
public static final ObjectProduct FORCE = MASS
.times(ACCELERATION);
public static final ObjectProduct ENERGY = FORCE
.times(LENGTH);
public static final ObjectProduct POWER = ENERGY
.dividedBy(TIME);
public static final ObjectProduct ELECTRIC_CHARGE = ELECTRIC_CURRENT
.times(TIME);
public static final ObjectProduct VOLTAGE = ENERGY
.dividedBy(ELECTRIC_CHARGE);
public static final ObjectProduct CAPACITANCE = ELECTRIC_CHARGE
.dividedBy(VOLTAGE);
public static final ObjectProduct ELECTRIC_RESISTANCE = VOLTAGE
.dividedBy(ELECTRIC_CURRENT);
public static final ObjectProduct ELECTRIC_CONDUCTANCE = ELECTRIC_CURRENT
.dividedBy(VOLTAGE);
public static final ObjectProduct MAGNETIC_FLUX = VOLTAGE
.times(TIME);
public static final ObjectProduct MAGNETIC_FLUX_DENSITY = MAGNETIC_FLUX
.dividedBy(AREA);
public static final ObjectProduct INDUCTANCE = MAGNETIC_FLUX
.dividedBy(ELECTRIC_CURRENT);
public static final ObjectProduct LUMINOUS_FLUX = LUMINOUS_INTENSITY
.times(SOLID_ANGLE);
public static final ObjectProduct ILLUMINANCE = LUMINOUS_FLUX
.dividedBy(AREA);
public static final ObjectProduct SPECIFIC_ENERGY = ENERGY
.dividedBy(MASS);
public static final ObjectProduct CATALYTIC_ACTIVITY = QUANTITY
.dividedBy(TIME);
// You may NOT get SI.Dimension instances!
private Dimensions() {
throw new AssertionError();
}
}
/// The units of the SI
public static final LinearUnit ONE = LinearUnit
.valueOf(ObjectProduct.empty(), 1);
public static final LinearUnit METRE = BaseUnits.METRE.asLinearUnit()
.withName(NameSymbol.of("metre", "m", "meter"));
public static final LinearUnit KILOGRAM = BaseUnits.KILOGRAM.asLinearUnit()
.withName(NameSymbol.of("kilogram", "kg"));
public static final LinearUnit SECOND = BaseUnits.SECOND.asLinearUnit()
.withName(NameSymbol.of("second", "s", "sec"));
public static final LinearUnit AMPERE = BaseUnits.AMPERE.asLinearUnit()
.withName(NameSymbol.of("ampere", "A"));
public static final LinearUnit KELVIN = BaseUnits.KELVIN.asLinearUnit()
.withName(NameSymbol.of("kelvin", "K"));
public static final LinearUnit MOLE = BaseUnits.MOLE.asLinearUnit()
.withName(NameSymbol.of("mole", "mol"));
public static final LinearUnit CANDELA = BaseUnits.CANDELA.asLinearUnit()
.withName(NameSymbol.of("candela", "cd"));
public static final LinearUnit BIT = BaseUnits.BIT.asLinearUnit()
.withName(NameSymbol.of("bit", "b"));
public static final LinearUnit DOLLAR = BaseUnits.DOLLAR.asLinearUnit()
.withName(NameSymbol.of("dollar", "$"));
// Non-base units
public static final LinearUnit RADIAN = METRE.dividedBy(METRE)
.withName(NameSymbol.of("radian", "rad"));
public static final LinearUnit STERADIAN = RADIAN.times(RADIAN)
.withName(NameSymbol.of("steradian", "sr"));
public static final LinearUnit HERTZ = ONE.dividedBy(SECOND)
.withName(NameSymbol.of("hertz", "Hz"));
// for periodic phenomena
public static final LinearUnit NEWTON = KILOGRAM.times(METRE)
.dividedBy(SECOND.times(SECOND))
.withName(NameSymbol.of("newton", "N"));
public static final LinearUnit PASCAL = NEWTON.dividedBy(METRE.times(METRE))
.withName(NameSymbol.of("pascal", "Pa"));
public static final LinearUnit JOULE = NEWTON.times(METRE)
.withName(NameSymbol.of("joule", "J"));
public static final LinearUnit WATT = JOULE.dividedBy(SECOND)
.withName(NameSymbol.of("watt", "W"));
public static final LinearUnit COULOMB = AMPERE.times(SECOND)
.withName(NameSymbol.of("coulomb", "C"));
public static final LinearUnit VOLT = JOULE.dividedBy(COULOMB)
.withName(NameSymbol.of("volt", "V"));
public static final LinearUnit FARAD = COULOMB.dividedBy(VOLT)
.withName(NameSymbol.of("farad", "F"));
public static final LinearUnit OHM = VOLT.dividedBy(AMPERE)
.withName(NameSymbol.of("ohm", "\u03A9")); // omega
public static final LinearUnit SIEMENS = ONE.dividedBy(OHM)
.withName(NameSymbol.of("siemens", "S"));
public static final LinearUnit WEBER = VOLT.times(SECOND)
.withName(NameSymbol.of("weber", "Wb"));
public static final LinearUnit TESLA = WEBER.dividedBy(METRE.times(METRE))
.withName(NameSymbol.of("tesla", "T"));
public static final LinearUnit HENRY = WEBER.dividedBy(AMPERE)
.withName(NameSymbol.of("henry", "H"));
public static final LinearUnit LUMEN = CANDELA.times(STERADIAN)
.withName(NameSymbol.of("lumen", "lm"));
public static final LinearUnit LUX = LUMEN.dividedBy(METRE.times(METRE))
.withName(NameSymbol.of("lux", "lx"));
public static final LinearUnit BEQUEREL = ONE.dividedBy(SECOND)
.withName(NameSymbol.of("bequerel", "Bq"));
// for activity referred to a nucleotide
public static final LinearUnit GRAY = JOULE.dividedBy(KILOGRAM)
.withName(NameSymbol.of("grey", "Gy"));
// for absorbed dose
public static final LinearUnit SIEVERT = JOULE.dividedBy(KILOGRAM)
.withName(NameSymbol.of("sievert", "Sv"));
// for dose equivalent
public static final LinearUnit KATAL = MOLE.dividedBy(SECOND)
.withName(NameSymbol.of("katal", "kat"));
// common derived units included for convenience
public static final LinearUnit GRAM = KILOGRAM.dividedBy(1000)
.withName(NameSymbol.of("gram", "g"));
public static final LinearUnit SQUARE_METRE = METRE.toExponent(2)
.withName(NameSymbol.of("square metre", "m^2", "square meter",
"metre squared", "meter squared"));
public static final LinearUnit CUBIC_METRE = METRE.toExponent(3)
.withName(NameSymbol.of("cubic metre", "m^3", "cubic meter",
"metre cubed", "meter cubed"));
public static final LinearUnit METRE_PER_SECOND = METRE.dividedBy(SECOND)
.withName(
NameSymbol.of("metre per second", "m/s", "meter per second"));
// Non-SI units included for convenience
public static final Unit CELSIUS = Unit
.fromConversionFunctions(KELVIN.getBase(), tempK -> tempK - 273.15,
tempC -> tempC + 273.15)
.withName(NameSymbol.of("degree Celsius", "\u00B0C"));
public static final LinearUnit MINUTE = SECOND.times(60)
.withName(NameSymbol.of("minute", "min"));
public static final LinearUnit HOUR = MINUTE.times(60)
.withName(NameSymbol.of("hour", "h", "hr"));
public static final LinearUnit DAY = HOUR.times(60)
.withName(NameSymbol.of("day", "d"));
public static final LinearUnit KILOMETRE_PER_HOUR = METRE.times(1000)
.dividedBy(HOUR).withName(NameSymbol.of("kilometre per hour", "km/h",
"kilometer per hour"));
public static final LinearUnit DEGREE = RADIAN.times(360 / (2 * Math.PI))
.withName(NameSymbol.of("degree", "\u00B0", "deg"));
public static final LinearUnit ARCMINUTE = DEGREE.dividedBy(60)
.withName(NameSymbol.of("arcminute", "arcmin"));
public static final LinearUnit ARCSECOND = ARCMINUTE.dividedBy(60)
.withName(NameSymbol.of("arcsecond", "arcsec"));
public static final LinearUnit ASTRONOMICAL_UNIT = METRE
.times(149597870700.0)
.withName(NameSymbol.of("astronomical unit", "au"));
public static final LinearUnit PARSEC = ASTRONOMICAL_UNIT
.dividedBy(ARCSECOND).withName(NameSymbol.of("parsec", "pc"));
public static final LinearUnit HECTARE = METRE.times(METRE).times(10000.0)
.withName(NameSymbol.of("hectare", "ha"));
public static final LinearUnit LITRE = METRE.times(METRE).times(METRE)
.dividedBy(1000.0).withName(NameSymbol.of("litre", "L", "l", "liter"));
public static final LinearUnit TONNE = KILOGRAM.times(1000.0)
.withName(NameSymbol.of("tonne", "t", "metric ton"));
public static final LinearUnit DALTON = KILOGRAM.times(1.660539040e-27)
.withName(NameSymbol.of("dalton", "Da", "atomic unit", "u")); // approximate
// value
public static final LinearUnit ELECTRONVOLT = JOULE.times(1.602176634e-19)
.withName(NameSymbol.of("electron volt", "eV"));
public static final LinearUnit BYTE = BIT.times(8)
.withName(NameSymbol.of("byte", "B"));
public static final Unit NEPER = Unit.fromConversionFunctions(ONE.getBase(),
pr -> 0.5 * Math.log(pr), Np -> Math.exp(2 * Np))
.withName(NameSymbol.of("neper", "Np"));
public static final Unit BEL = Unit.fromConversionFunctions(ONE.getBase(),
pr -> Math.log10(pr), dB -> Math.pow(10, dB))
.withName(NameSymbol.of("bel", "B"));
public static final Unit DECIBEL = Unit
.fromConversionFunctions(ONE.getBase(), pr -> 10 * Math.log10(pr),
dB -> Math.pow(10, dB / 10))
.withName(NameSymbol.of("decibel", "dB"));
/// The prefixes of the SI
// expanding decimal prefixes
public static final UnitPrefix KILO = UnitPrefix.valueOf(1e3)
.withName(NameSymbol.of("kilo", "k", "K"));
public static final UnitPrefix MEGA = UnitPrefix.valueOf(1e6)
.withName(NameSymbol.of("mega", "M"));
public static final UnitPrefix GIGA = UnitPrefix.valueOf(1e9)
.withName(NameSymbol.of("giga", "G"));
public static final UnitPrefix TERA = UnitPrefix.valueOf(1e12)
.withName(NameSymbol.of("tera", "T"));
public static final UnitPrefix PETA = UnitPrefix.valueOf(1e15)
.withName(NameSymbol.of("peta", "P"));
public static final UnitPrefix EXA = UnitPrefix.valueOf(1e18)
.withName(NameSymbol.of("exa", "E"));
public static final UnitPrefix ZETTA = UnitPrefix.valueOf(1e21)
.withName(NameSymbol.of("zetta", "Z"));
public static final UnitPrefix YOTTA = UnitPrefix.valueOf(1e24)
.withName(NameSymbol.of("yotta", "Y"));
// contracting decimal prefixes
public static final UnitPrefix MILLI = UnitPrefix.valueOf(1e-3)
.withName(NameSymbol.of("milli", "m"));
public static final UnitPrefix MICRO = UnitPrefix.valueOf(1e-6)
.withName(NameSymbol.of("micro", "\u03BC", "u")); // mu
public static final UnitPrefix NANO = UnitPrefix.valueOf(1e-9)
.withName(NameSymbol.of("nano", "n"));
public static final UnitPrefix PICO = UnitPrefix.valueOf(1e-12)
.withName(NameSymbol.of("pico", "p"));
public static final UnitPrefix FEMTO = UnitPrefix.valueOf(1e-15)
.withName(NameSymbol.of("femto", "f"));
public static final UnitPrefix ATTO = UnitPrefix.valueOf(1e-18)
.withName(NameSymbol.of("atto", "a"));
public static final UnitPrefix ZEPTO = UnitPrefix.valueOf(1e-21)
.withName(NameSymbol.of("zepto", "z"));
public static final UnitPrefix YOCTO = UnitPrefix.valueOf(1e-24)
.withName(NameSymbol.of("yocto", "y"));
// prefixes that don't match the pattern of thousands
public static final UnitPrefix DEKA = UnitPrefix.valueOf(1e1)
.withName(NameSymbol.of("deka", "da", "deca", "D"));
public static final UnitPrefix HECTO = UnitPrefix.valueOf(1e2)
.withName(NameSymbol.of("hecto", "h", "H", "hekto"));
public static final UnitPrefix DECI = UnitPrefix.valueOf(1e-1)
.withName(NameSymbol.of("deci", "d"));
public static final UnitPrefix CENTI = UnitPrefix.valueOf(1e-2)
.withName(NameSymbol.of("centi", "c"));
public static final UnitPrefix KIBI = UnitPrefix.valueOf(1024)
.withName(NameSymbol.of("kibi", "Ki"));
public static final UnitPrefix MEBI = KIBI.times(1024)
.withName(NameSymbol.of("mebi", "Mi"));
public static final UnitPrefix GIBI = MEBI.times(1024)
.withName(NameSymbol.of("gibi", "Gi"));
public static final UnitPrefix TEBI = GIBI.times(1024)
.withName(NameSymbol.of("tebi", "Ti"));
public static final UnitPrefix PEBI = TEBI.times(1024)
.withName(NameSymbol.of("pebi", "Pi"));
public static final UnitPrefix EXBI = PEBI.times(1024)
.withName(NameSymbol.of("exbi", "Ei"));
// a few prefixed units
public static final LinearUnit MICROMETRE = Metric.METRE
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIMETRE = Metric.METRE
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOMETRE = Metric.METRE
.withPrefix(Metric.KILO);
public static final LinearUnit MEGAMETRE = Metric.METRE
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROLITRE = Metric.LITRE
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLILITRE = Metric.LITRE
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOLITRE = Metric.LITRE
.withPrefix(Metric.KILO);
public static final LinearUnit MEGALITRE = Metric.LITRE
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROSECOND = Metric.SECOND
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLISECOND = Metric.SECOND
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOSECOND = Metric.SECOND
.withPrefix(Metric.KILO);
public static final LinearUnit MEGASECOND = Metric.SECOND
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROGRAM = Metric.GRAM
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIGRAM = Metric.GRAM
.withPrefix(Metric.MILLI);
public static final LinearUnit MEGAGRAM = Metric.GRAM
.withPrefix(Metric.MEGA);
public static final LinearUnit MICRONEWTON = Metric.NEWTON
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLINEWTON = Metric.NEWTON
.withPrefix(Metric.MILLI);
public static final LinearUnit KILONEWTON = Metric.NEWTON
.withPrefix(Metric.KILO);
public static final LinearUnit MEGANEWTON = Metric.NEWTON
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROJOULE = Metric.JOULE
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIJOULE = Metric.JOULE
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOJOULE = Metric.JOULE
.withPrefix(Metric.KILO);
public static final LinearUnit MEGAJOULE = Metric.JOULE
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROWATT = Metric.WATT
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIWATT = Metric.WATT
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOWATT = Metric.WATT
.withPrefix(Metric.KILO);
public static final LinearUnit MEGAWATT = Metric.WATT
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROCOULOMB = Metric.COULOMB
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLICOULOMB = Metric.COULOMB
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOCOULOMB = Metric.COULOMB
.withPrefix(Metric.KILO);
public static final LinearUnit MEGACOULOMB = Metric.COULOMB
.withPrefix(Metric.MEGA);
public static final LinearUnit MICROAMPERE = Metric.AMPERE
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIAMPERE = Metric.AMPERE
.withPrefix(Metric.MILLI);
public static final LinearUnit MICROVOLT = Metric.VOLT
.withPrefix(Metric.MICRO);
public static final LinearUnit MILLIVOLT = Metric.VOLT
.withPrefix(Metric.MILLI);
public static final LinearUnit KILOVOLT = Metric.VOLT
.withPrefix(Metric.KILO);
public static final LinearUnit MEGAVOLT = Metric.VOLT
.withPrefix(Metric.MEGA);
public static final LinearUnit KILOOHM = Metric.OHM.withPrefix(Metric.KILO);
public static final LinearUnit MEGAOHM = Metric.OHM.withPrefix(Metric.MEGA);
// sets of prefixes
public static final Set ALL_PREFIXES = Set.of(DEKA, HECTO, KILO,
MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, DECI, CENTI, MILLI, MICRO,
NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO, KIBI, MEBI, GIBI, TEBI, PEBI,
EXBI);
public static final Set DECIMAL_PREFIXES = Set.of(DEKA, HECTO,
KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, DECI, CENTI, MILLI,
MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO);
public static final Set THOUSAND_PREFIXES = Set.of(KILO, MEGA,
GIGA, TERA, PETA, EXA, ZETTA, YOTTA, MILLI, MICRO, NANO, PICO, FEMTO,
ATTO, ZEPTO, YOCTO);
public static final Set MAGNIFYING_PREFIXES = Set.of(DEKA, HECTO,
KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, KIBI, MEBI, GIBI,
TEBI, PEBI, EXBI);
public static final Set REDUCING_PREFIXES = Set.of(DECI, CENTI,
MILLI, MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO);
// You may NOT get SI instances!
private Metric() {
throw new AssertionError();
}
}