Skip to content

Add kind to all units #67

Description

@adrfantini

It is often useful to know what kind an unit is.
For example, take the Henry, unit for inductance.

Its definition in unitmath is:

  {
    name: 'henry',
    value: 1,
    offset: 0,
    dimension: { MASS: 1, LENGTH: 2, TIME: -2, CURRENT: -2 },
    prefixGroup: {
      '': 1,
      deca: 10,
      hecto: 100,
      kilo: 1000,
      mega: 1000000,
      giga: 1000000000,
      tera: 1000000000000,
      peta: 1000000000000000,
      exa: 1000000000000000000,
      zetta: 1e+21,
      yotta: 1e+24,
      deci: 0.1,
      centi: 0.01,
      milli: 0.001,
      micro: 0.000001,
      nano: 1e-9,
      pico: 1e-12,
      femto: 1e-15,
      atto: 1e-18,
      zepto: 1e-21,
      yocto: 1e-24
    },
    formatPrefixes: [ 'micro', 'milli', '' ],
    basePrefix: undefined
  }

I would propose to add a field called kind with value INDUCTANCE.
This would allow to simplify whenever you know the kind of a unit, and want to see the available alternatives, e.g. when selecting units for a quantity in a user interface.

Here's an (incomplete!) list of kinds compiled from the defined units and wikipedia:

{
  UNITLESS: { UNITLESS: 1 },
  CURRENCY: { UNITLESS: 1 },
  LENGTH: { LENGTH: 1 },
  AREA: { LENGTH: 2 },
  VOLUME: { LENGTH: 3 },
  TIME: { TIME: 1 },
  TEMPERATURE: { TEMPERATURE: 1 },
  POWER: { MASS: 1, LENGTH: 2, TIME: -3 },
  PRESSURE: { MASS: 1, LENGTH: -1, TIME: -2 },
  FORCE: { MASS: 1, LENGTH: 1, TIME: -2 },
  ENERGY: { MASS: 1, LENGTH: 2, TIME: -2 },
  MASS: { MASS: 1 },
  CURRENT: { CURRENT: 1 },
  CAPACITANCE: { MASS: -1, LENGTH: -2, TIME: 4, CURRENT: 2 },
  INDUCTANCE: { MASS: 1, LENGTH: 2, TIME: -2, CURRENT: -2 },
  IRRADIANCE: { MASS: 1, TIME: -3 }, // added unit kind (W/m²) - COMPOSED UNIT! might consider not supporting
  RESISTANCE: { MASS: 1, LENGTH: 2, TIME: -3, CURRENT: -2 },
  POTENTIAL: { MASS: 1, LENGTH: 2, TIME: -3, CURRENT: -1 },
  ACCELERATION: { LENGTH: 1, TIME: -2 },
  SPEED: { LENGTH: 1, TIME: -1 },
  VOLUMETRIC_FLOW: { LENGTH: 3, TIME: -1 },
  INFORMATION_RATE: { BIT: 1, TIME: -1 },
  INFORMATION: { BIT: 1 },
  ANGULAR_VELOCITY: { ANGLE: 1, TIME: -1 },
  ANGULAR_ACCELERATION: { ANGLE: 1, TIME: -1 },
  ANGLE: { ANGLE: 1 },
  FREQUENCY: { TIME: -1 },
  CHARGE: { CURRENT: 1, TIME: 1 },
  SOLID_ANGLE: { SOLID_ANGLE: 1 },
  RESISTIVITY: { MASS: 1, LENGTH: 3, TIME: -3, CURRENT: -2 }, // added unit kind (ohm meter) - COMPOSED UNIT! might consider not supporting
  CONDUCTANCE: { MASS: -1, LENGTH: -2, TIME: 3, CURRENT: 2 },
  DENSITY: { MASS: 1, LENGTH: -3 },
  MAGNETISM: { MASS: 1, LENGTH: 0, TIME: -2, CURRENT: -1 },
  LUMINOUS_INTENSITY: { LUMINOUS_INTENSITY: 1 },
  LUMINOUS_FLUX: { LUMINOUS_INTENSITY: 1, SOLID_ANGLE: 1 },
  YANK: { MASS: 1, LENGTH: 1, TIME: -3 },
  VISCOSITY: { MASS: 1, LENGTH: -1, TIME: -1 },
  MOMENTUM: { MASS: 1, LENGTH: 1, TIME: -1 },
  ANGULAR_MOMENTUM: { MASS: 1, LENGTH: 2, TIME: -1 },
  AREA_DENSITY: { MASS: 1, LENGTH: -2 },
  RADIATION_EXPOSURE: { LENGTH: -2, TIME: 1 },
  MAGNETIC_FLUX: { MASS: 1, LENGTH: 2, TIME: -2, CURRENT: -1 }, // added unit kind (weber) - https://github.com/ericman314/UnitMath/issues/65
  ACTIVITY: { TIME: -1 }, // missing unit (Bequerel) - https://github.com/ericman314/UnitMath/issues/65
  MOLAR_CONCENTRATION: { LENGTH: -3, AMOUNT_OF_SUBSTANCE: 1 },
  SUBSTANCE: { AMOUNT_OF_SUBSTANCE: 1 },
  ILLUMINANCE: { LUMINOUS_INTENSITY: 1, SOLID_ANGLE: 1, LENGTH: -2 }, // corrected from original unitmath (lux) - https://github.com/ericman314/UnitMath/issues/66
  ELASTANCE: { MASS: 1, LENGTH: 2, TIME: -4, CURRENT: -2 },
  SPECIFIC_VOLUME: { LENGTH: 3, MASS: -1 },
  JOLT: { LENGTH: 1, TIME: -3 },
  SNAP: { LENGTH: 1, TIME: -4 },
  RADIATION: { LENGTH: 2, TIME: -2 },
  WAVENUMBER: { LENGTH: -1 },
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions