Skip to content

Add kind to all units #67

@adrfantini

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 },
}

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