{
 "version": "0.1.0",
 "categories": [
  "Thermal and nuclear power plants",
  "Renewable energy systems",
  "Electrical grid and power electronics",
  "Energy storage",
  "Electric motors and generators",
  "Cars and road vehicles",
  "Rail transport",
  "Aircraft",
  "Bridges",
  "Heat exchangers and thermal equipment",
  "Home appliances",
  "Structural components and materials"
 ],
 "products": [
  {
   "id": "utility-onshore-wind-turbine",
   "archetype": "WIND",
   "category": "Renewable energy systems",
   "name": "Utility onshore wind turbine",
   "short": "A three-blade machine of a few megawatts on a tall steel tower",
   "blurb": "The workhorse of wind farms: three long blades turn a generator high on a tower where the wind is stronger and steadier. Set the rating, the rotor and the site's wind and see the power curve, a year of energy from the wind's statistics, the thrust on the tower and a simulated windy day.",
   "consts": {
    "vin": 3,
    "vout": 25,
    "tsr": 8
   },
   "aliases": [
    "wind turbine",
    "onshore wind turbine",
    "utility wind turbine",
    "onshore turbine",
    "wind generator",
    "windmill",
    "three-blade turbine",
    "wind farm turbine"
   ],
   "params": [
    {
     "k": "pr",
     "label": "Rated power",
     "unit": "MW",
     "dim": "power",
     "min": 0.5,
     "max": 8,
     "step": 0.05,
     "def": 2,
     "group": "Turbine",
     "roles": [
      "rated",
      "rating",
      "turbine"
     ]
    },
    {
     "k": "d",
     "label": "Rotor diameter",
     "unit": "m",
     "dim": "length",
     "min": 40,
     "max": 180,
     "step": 1,
     "def": 90,
     "group": "Turbine",
     "roles": [
      "rotor",
      "diameter",
      "rotor diameter",
      "blades"
     ]
    },
    {
     "k": "hub",
     "label": "Hub height",
     "unit": "m",
     "dim": "length",
     "min": 50,
     "max": 170,
     "step": 1,
     "def": 100,
     "group": "Turbine",
     "roles": [
      "hub",
      "hub height",
      "tower",
      "tall"
     ]
    },
    {
     "k": "cp",
     "label": "Peak power coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.3,
     "max": 0.5,
     "step": 0.005,
     "def": 0.45,
     "group": "Turbine",
     "roles": [
      "cp",
      "power coefficient"
     ]
    },
    {
     "k": "c",
     "label": "Site mean-wind scale at 10 m",
     "unit": "m/s",
     "dim": "speed",
     "min": 4,
     "max": 11,
     "step": 0.1,
     "def": 5.5,
     "group": "Site",
     "roles": [
      "mean wind",
      "site wind",
      "average wind",
      "weibull scale",
      "site mean"
     ]
    },
    {
     "k": "v",
     "label": "Wind speed now",
     "unit": "m/s",
     "dim": "speed",
     "min": 0,
     "max": 30,
     "step": 0.1,
     "def": 8,
     "group": "Site",
     "roles": [
      "at",
      "wind speed",
      "blowing"
     ]
    },
    {
     "k": "k",
     "label": "Weibull shape",
     "unit": "",
     "dim": "ratio",
     "min": 1.5,
     "max": 3,
     "step": 0.05,
     "def": 2,
     "group": "Site",
     "roles": [
      "shape",
      "weibull shape"
     ]
    },
    {
     "k": "alpha",
     "label": "Shear exponent",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 0.3,
     "step": 0.01,
     "def": 0.14,
     "group": "Site",
     "roles": [
      "shear",
      "shear exponent",
      "alpha"
     ]
    }
   ],
   "commands": [
    "a 2 MW wind turbine at 8 m/s",
    "wind turbine 90 m rotor, 100 m hub, site mean wind 7 m/s",
    "onshore wind turbine 3 MW with a 120 m rotor"
   ]
  },
  {
   "id": "large-onshore-wind-turbine",
   "archetype": "WIND",
   "category": "Renewable energy systems",
   "name": "Large onshore wind turbine",
   "short": "Very long blades that make low-wind sites pay",
   "blurb": "Newer onshore machines pair a modest generator with a huge rotor and a tall tower, so they reach full power in gentler winds and run at it for more of the year. Compare its capacity factor with the utility turbine's on the same site.",
   "consts": {
    "vin": 3,
    "vout": 22,
    "tsr": 9
   },
   "aliases": [
    "large onshore turbine",
    "large wind turbine",
    "low-wind turbine",
    "low wind turbine",
    "long-blade turbine",
    "big wind turbine",
    "low wind speed turbine"
   ],
   "params": [
    {
     "k": "pr",
     "label": "Rated power",
     "unit": "MW",
     "dim": "power",
     "min": 2,
     "max": 8,
     "step": 0.05,
     "def": 5.5,
     "group": "Turbine",
     "roles": [
      "rated",
      "rating",
      "turbine"
     ]
    },
    {
     "k": "d",
     "label": "Rotor diameter",
     "unit": "m",
     "dim": "length",
     "min": 100,
     "max": 180,
     "step": 1,
     "def": 160,
     "group": "Turbine",
     "roles": [
      "rotor",
      "diameter",
      "rotor diameter",
      "blades"
     ]
    },
    {
     "k": "hub",
     "label": "Hub height",
     "unit": "m",
     "dim": "length",
     "min": 90,
     "max": 170,
     "step": 1,
     "def": 140,
     "group": "Turbine",
     "roles": [
      "hub",
      "hub height",
      "tower",
      "tall"
     ]
    },
    {
     "k": "cp",
     "label": "Peak power coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.3,
     "max": 0.5,
     "step": 0.005,
     "def": 0.47,
     "group": "Turbine",
     "roles": [
      "cp",
      "power coefficient"
     ]
    },
    {
     "k": "c",
     "label": "Site mean-wind scale at 10 m",
     "unit": "m/s",
     "dim": "speed",
     "min": 4,
     "max": 9,
     "step": 0.1,
     "def": 5,
     "group": "Site",
     "roles": [
      "mean wind",
      "site wind",
      "average wind",
      "weibull scale",
      "site mean"
     ]
    },
    {
     "k": "v",
     "label": "Wind speed now",
     "unit": "m/s",
     "dim": "speed",
     "min": 0,
     "max": 30,
     "step": 0.1,
     "def": 7,
     "group": "Site",
     "roles": [
      "at",
      "wind speed",
      "blowing"
     ]
    },
    {
     "k": "k",
     "label": "Weibull shape",
     "unit": "",
     "dim": "ratio",
     "min": 1.5,
     "max": 3,
     "step": 0.05,
     "def": 2,
     "group": "Site",
     "roles": [
      "shape",
      "weibull shape"
     ]
    },
    {
     "k": "alpha",
     "label": "Shear exponent",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 0.3,
     "step": 0.01,
     "def": 0.16,
     "group": "Site",
     "roles": [
      "shear",
      "shear exponent",
      "alpha"
     ]
    }
   ],
   "commands": [
    "large onshore wind turbine 5.5 MW with a 160 m rotor",
    "large wind turbine for a low-wind site, site mean wind 5.5 m/s",
    "low-wind turbine 140 m hub at 7 m/s"
   ]
  },
  {
   "id": "offshore-fixed-bottom-wind-turbine",
   "archetype": "WIND",
   "category": "Renewable energy systems",
   "name": "Offshore fixed-bottom wind turbine",
   "short": "A giant rotor on a monopile in shallow seas",
   "blurb": "Out at sea the wind is stronger and smoother, with little shear, so offshore machines carry the largest rotors of all on piles driven into the seabed. Strong, steady wind gives them high capacity factors; the price is the thrust the pile must resist.",
   "consts": {
    "vin": 3.5,
    "vout": 25,
    "tsr": 9
   },
   "aliases": [
    "offshore wind turbine",
    "offshore turbine",
    "fixed-bottom offshore turbine",
    "monopile wind turbine",
    "monopile turbine",
    "sea wind turbine",
    "offshore wind"
   ],
   "params": [
    {
     "k": "pr",
     "label": "Rated power",
     "unit": "MW",
     "dim": "power",
     "min": 3,
     "max": 15,
     "step": 0.1,
     "def": 10,
     "group": "Turbine",
     "roles": [
      "rated",
      "rating",
      "turbine"
     ]
    },
    {
     "k": "d",
     "label": "Rotor diameter",
     "unit": "m",
     "dim": "length",
     "min": 120,
     "max": 240,
     "step": 1,
     "def": 190,
     "group": "Turbine",
     "roles": [
      "rotor",
      "diameter",
      "rotor diameter",
      "blades"
     ]
    },
    {
     "k": "hub",
     "label": "Hub height above sea",
     "unit": "m",
     "dim": "length",
     "min": 90,
     "max": 160,
     "step": 1,
     "def": 120,
     "group": "Turbine",
     "roles": [
      "hub",
      "hub height",
      "tower",
      "tall"
     ]
    },
    {
     "k": "cp",
     "label": "Peak power coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.3,
     "max": 0.5,
     "step": 0.005,
     "def": 0.47,
     "group": "Turbine",
     "roles": [
      "cp",
      "power coefficient"
     ]
    },
    {
     "k": "c",
     "label": "Site mean-wind scale at 10 m",
     "unit": "m/s",
     "dim": "speed",
     "min": 6,
     "max": 12,
     "step": 0.1,
     "def": 8,
     "group": "Site",
     "roles": [
      "mean wind",
      "site wind",
      "average wind",
      "weibull scale",
      "site mean"
     ]
    },
    {
     "k": "v",
     "label": "Wind speed now",
     "unit": "m/s",
     "dim": "speed",
     "min": 0,
     "max": 30,
     "step": 0.1,
     "def": 10,
     "group": "Site",
     "roles": [
      "at",
      "wind speed",
      "blowing"
     ]
    },
    {
     "k": "k",
     "label": "Weibull shape",
     "unit": "",
     "dim": "ratio",
     "min": 1.5,
     "max": 3,
     "step": 0.05,
     "def": 2.2,
     "group": "Site",
     "roles": [
      "shape",
      "weibull shape"
     ]
    },
    {
     "k": "alpha",
     "label": "Shear exponent",
     "unit": "",
     "dim": "ratio",
     "min": 0.06,
     "max": 0.2,
     "step": 0.01,
     "def": 0.1,
     "group": "Site",
     "roles": [
      "shear",
      "shear exponent",
      "alpha"
     ]
    }
   ],
   "commands": [
    "offshore wind turbine 10 MW with a 190 m rotor",
    "fixed-bottom offshore turbine 15 MW at 11 m/s",
    "monopile wind turbine, 130 m hub"
   ]
  },
  {
   "id": "small-residential-wind-turbine",
   "archetype": "WIND",
   "category": "Renewable energy systems",
   "name": "Small residential wind turbine",
   "short": "A few kilowatts on a mast beside a house",
   "blurb": "A small turbine sits low, where the wind is slow and gusty, and its energy grows with the cube of the speed, so the site matters more than the machine. See how few full-load hours a weak, sheltered site gives and how much a taller mast helps.",
   "consts": {
    "vin": 2.5,
    "vout": 25,
    "tsr": 6,
    "clear": 3
   },
   "aliases": [
    "small wind turbine",
    "home wind turbine",
    "residential wind turbine",
    "residential turbine",
    "domestic wind turbine",
    "micro wind turbine",
    "backyard wind turbine"
   ],
   "params": [
    {
     "k": "pr",
     "label": "Rated power",
     "unit": "kW",
     "dim": "power",
     "min": 1,
     "max": 20,
     "step": 0.1,
     "def": 5,
     "group": "Turbine",
     "roles": [
      "rated",
      "rating",
      "turbine"
     ]
    },
    {
     "k": "d",
     "label": "Rotor diameter",
     "unit": "m",
     "dim": "length",
     "min": 2,
     "max": 12,
     "step": 0.1,
     "def": 5.5,
     "group": "Turbine",
     "roles": [
      "rotor",
      "diameter",
      "rotor diameter",
      "blades"
     ]
    },
    {
     "k": "hub",
     "label": "Mast height",
     "unit": "m",
     "dim": "length",
     "min": 10,
     "max": 40,
     "step": 0.5,
     "def": 18,
     "group": "Turbine",
     "roles": [
      "hub",
      "mast",
      "tower",
      "tall"
     ]
    },
    {
     "k": "cp",
     "label": "Peak power coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.25,
     "max": 0.45,
     "step": 0.005,
     "def": 0.35,
     "group": "Turbine",
     "roles": [
      "cp",
      "power coefficient"
     ]
    },
    {
     "k": "c",
     "label": "Site mean-wind scale at 10 m",
     "unit": "m/s",
     "dim": "speed",
     "min": 3,
     "max": 8,
     "step": 0.1,
     "def": 4.5,
     "group": "Site",
     "roles": [
      "mean wind",
      "site wind",
      "average wind",
      "weibull scale",
      "site mean"
     ]
    },
    {
     "k": "v",
     "label": "Wind speed now",
     "unit": "m/s",
     "dim": "speed",
     "min": 0,
     "max": 30,
     "step": 0.1,
     "def": 8,
     "group": "Site",
     "roles": [
      "at",
      "wind speed",
      "blowing"
     ]
    },
    {
     "k": "k",
     "label": "Weibull shape",
     "unit": "",
     "dim": "ratio",
     "min": 1.5,
     "max": 3,
     "step": 0.05,
     "def": 2,
     "group": "Site",
     "roles": [
      "shape",
      "weibull shape"
     ]
    },
    {
     "k": "alpha",
     "label": "Shear exponent",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 0.4,
     "step": 0.01,
     "def": 0.25,
     "group": "Site",
     "roles": [
      "shear",
      "shear exponent",
      "alpha"
     ]
    }
   ],
   "commands": [
    "small wind turbine 5 kW for a house",
    "home wind turbine 3 kW with a 4 m rotor on an 18 m mast",
    "residential turbine at 6 m/s"
   ]
  },
  {
   "id": "tidal-stream-turbine",
   "archetype": "WIND",
   "category": "Renewable energy systems",
   "name": "Tidal stream turbine",
   "short": "An underwater rotor turned by fast tidal currents",
   "blurb": "Sea water is about 840 times denser than air, so a rotor a fraction the size of a wind turbine's makes megawatts in a current of only two or three metres a second. Tides are predictable, and the speed swings with the tide twice a day.",
   "consts": {
    "water": 1,
    "rho": 1025,
    "hub": 15,
    "alpha": 0,
    "vin": 0.8,
    "vout": 4.5,
    "tsr": 5
   },
   "aliases": [
    "tidal stream turbine",
    "tidal turbine",
    "tidal stream generator",
    "underwater turbine",
    "marine current turbine",
    "tidal energy turbine",
    "tidal stream rotor"
   ],
   "params": [
    {
     "k": "pr",
     "label": "Rated power",
     "unit": "MW",
     "dim": "power",
     "min": 0.1,
     "max": 3,
     "step": 0.05,
     "def": 1.5,
     "group": "Turbine",
     "roles": [
      "rated",
      "rating",
      "turbine"
     ]
    },
    {
     "k": "d",
     "label": "Rotor diameter",
     "unit": "m",
     "dim": "length",
     "min": 5,
     "max": 25,
     "step": 0.5,
     "def": 18,
     "group": "Turbine",
     "roles": [
      "rotor",
      "diameter",
      "rotor diameter",
      "blades"
     ]
    },
    {
     "k": "cp",
     "label": "Peak power coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.3,
     "max": 0.5,
     "step": 0.005,
     "def": 0.42,
     "group": "Turbine",
     "roles": [
      "cp",
      "power coefficient"
     ]
    },
    {
     "k": "c",
     "label": "Site current scale",
     "unit": "m/s",
     "dim": "speed",
     "min": 1,
     "max": 3.5,
     "step": 0.05,
     "def": 2,
     "group": "Site",
     "roles": [
      "mean current",
      "site current",
      "average current",
      "weibull scale"
     ]
    },
    {
     "k": "v",
     "label": "Current speed now",
     "unit": "m/s",
     "dim": "speed",
     "min": 0,
     "max": 5,
     "step": 0.05,
     "def": 2.5,
     "group": "Site",
     "roles": [
      "at",
      "flow speed",
      "current speed"
     ]
    },
    {
     "k": "k",
     "label": "Weibull shape",
     "unit": "",
     "dim": "ratio",
     "min": 1.5,
     "max": 4,
     "step": 0.05,
     "def": 2.5,
     "group": "Site",
     "roles": [
      "shape",
      "weibull shape"
     ]
    }
   ],
   "commands": [
    "tidal stream turbine 20 m rotor at 2.5 m/s",
    "tidal turbine 1.5 MW in a 2 m/s mean current",
    "underwater turbine 2 MW with an 18 m rotor"
   ]
  },
  {
   "id": "utility-scale-solar-pv-farm",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Utility-scale solar PV farm",
   "short": "Rows of fixed-tilt panels feeding the grid",
   "blurb": "Long rows of panels tilted towards the equator, spaced so they do not shade each other, feed large inverters. Change the latitude, tilt and inverter size and follow the sun across four clear days, the losses from sunlight to grid and the year's yield.",
   "consts": {
    "mode": "grid"
   },
   "aliases": [
    "solar farm",
    "solar park",
    "pv farm",
    "utility solar",
    "solar power plant",
    "pv plant",
    "ground-mounted solar",
    "utility-scale solar"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "DC rating",
     "unit": "MW",
     "dim": "power",
     "min": 1,
     "max": 500,
     "step": 1,
     "def": 50,
     "group": "Array",
     "roles": [
      "rating",
      "dc rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 35,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "tilt",
     "label": "Tilt",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 60,
     "step": 1,
     "def": 25,
     "group": "Array",
     "roles": [
      "tilt",
      "tilted"
     ]
    },
    {
     "k": "az",
     "label": "Azimuth (180 = south)",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 360,
     "step": 5,
     "def": 180,
     "group": "Array",
     "roles": [
      "azimuth",
      "orientation"
     ]
    },
    {
     "k": "g",
     "label": "Irradiance now",
     "unit": "W/m²",
     "dim": "irradiance",
     "min": 0,
     "max": 1200,
     "step": 10,
     "def": 1000,
     "group": "Conditions",
     "roles": [
      "irradiance",
      "sunlight"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 25,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "gamma",
     "label": "Power temperature coefficient",
     "unit": "%/°C",
     "dim": "ratio",
     "min": -0.5,
     "max": -0.25,
     "step": 0.01,
     "def": -0.35,
     "group": "Array",
     "roles": [
      "temperature coefficient"
     ]
    },
    {
     "k": "dcac",
     "label": "DC/AC ratio",
     "unit": "",
     "dim": "ratio",
     "min": 1,
     "max": 1.6,
     "step": 0.01,
     "def": 1.25,
     "group": "Inverter",
     "roles": [
      "dc/ac ratio",
      "dc/ac",
      "inverter ratio"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 25,
     "step": 0.5,
     "def": 14,
     "group": "Inverter",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "50 MW solar farm at latitude 35, tilt 25",
    "solar park 120 MW at latitude 40 facing south",
    "utility solar farm with a dc/ac ratio of 1.4"
   ]
  },
  {
   "id": "rooftop-solar-pv-system",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Rooftop solar PV system",
   "short": "A few kilowatts of panels on a house roof",
   "blurb": "Panels laid flat on a pitched roof take whatever tilt and direction the roof has. See how much a roof facing east or west loses against one facing the equator, how hot summer cells cut the output and what a small inverter clips.",
   "consts": {
    "mode": "grid",
    "layout": "roof"
   },
   "aliases": [
    "rooftop solar",
    "rooftop pv",
    "home solar",
    "home solar panels",
    "solar panels on a house",
    "house roof solar",
    "residential solar",
    "solar roof"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "DC rating",
     "unit": "kW",
     "dim": "power",
     "min": 1,
     "max": 20,
     "step": 0.1,
     "def": 6,
     "group": "Array",
     "roles": [
      "rating",
      "dc rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 51,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "tilt",
     "label": "Roof pitch",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 60,
     "step": 1,
     "def": 38,
     "group": "Array",
     "roles": [
      "tilt",
      "pitch",
      "roof pitch"
     ]
    },
    {
     "k": "az",
     "label": "Roof azimuth (180 = south)",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 360,
     "step": 5,
     "def": 180,
     "group": "Array",
     "roles": [
      "azimuth",
      "orientation"
     ]
    },
    {
     "k": "g",
     "label": "Irradiance now",
     "unit": "W/m²",
     "dim": "irradiance",
     "min": 0,
     "max": 1200,
     "step": 10,
     "def": 1000,
     "group": "Conditions",
     "roles": [
      "irradiance",
      "sunlight"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 25,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "gamma",
     "label": "Power temperature coefficient",
     "unit": "%/°C",
     "dim": "ratio",
     "min": -0.5,
     "max": -0.25,
     "step": 0.01,
     "def": -0.35,
     "group": "Array",
     "roles": [
      "temperature coefficient"
     ]
    },
    {
     "k": "dcac",
     "label": "DC/AC ratio",
     "unit": "",
     "dim": "ratio",
     "min": 1,
     "max": 1.5,
     "step": 0.01,
     "def": 1.1,
     "group": "Inverter",
     "roles": [
      "dc/ac ratio",
      "dc/ac",
      "inverter ratio"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 25,
     "step": 0.5,
     "def": 14,
     "group": "Inverter",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "rooftop solar 6 kW at latitude 51",
    "home solar panels 4 kW with tilt 30",
    "solar panels on a house roof, 8 kW, latitude 45"
   ]
  },
  {
   "id": "commercial-rooftop-pv",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Commercial rooftop PV",
   "short": "A low-tilt array covering a flat warehouse roof",
   "blurb": "On a big flat roof, panels sit at a shallow tilt in close rows to fit more of them and to keep wind loads down. A low tilt gives up some yearly energy but evens out summer and winter; the closer rows trade a little shading for much more power.",
   "consts": {
    "mode": "grid"
   },
   "aliases": [
    "commercial rooftop pv",
    "commercial rooftop solar",
    "warehouse roof solar",
    "flat roof solar",
    "flat roof solar array",
    "factory roof solar",
    "commercial solar"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "DC rating",
     "unit": "kW",
     "dim": "power",
     "min": 20,
     "max": 2000,
     "step": 5,
     "def": 250,
     "group": "Array",
     "roles": [
      "rating",
      "dc rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 45,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "tilt",
     "label": "Tilt",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 30,
     "step": 1,
     "def": 10,
     "group": "Array",
     "roles": [
      "tilt",
      "tilted"
     ]
    },
    {
     "k": "az",
     "label": "Azimuth (180 = south)",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 360,
     "step": 5,
     "def": 180,
     "group": "Array",
     "roles": [
      "azimuth",
      "orientation"
     ]
    },
    {
     "k": "g",
     "label": "Irradiance now",
     "unit": "W/m²",
     "dim": "irradiance",
     "min": 0,
     "max": 1200,
     "step": 10,
     "def": 1000,
     "group": "Conditions",
     "roles": [
      "irradiance",
      "sunlight"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 25,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "gamma",
     "label": "Power temperature coefficient",
     "unit": "%/°C",
     "dim": "ratio",
     "min": -0.5,
     "max": -0.25,
     "step": 0.01,
     "def": -0.35,
     "group": "Array",
     "roles": [
      "temperature coefficient"
     ]
    },
    {
     "k": "dcac",
     "label": "DC/AC ratio",
     "unit": "",
     "dim": "ratio",
     "min": 1,
     "max": 1.6,
     "step": 0.01,
     "def": 1.2,
     "group": "Inverter",
     "roles": [
      "dc/ac ratio",
      "dc/ac",
      "inverter ratio"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 25,
     "step": 0.5,
     "def": 12,
     "group": "Inverter",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "commercial rooftop pv 250 kW at latitude 45",
    "warehouse roof solar 500 kW with tilt 10",
    "flat roof solar array 1 MW"
   ]
  },
  {
   "id": "single-axis-tracking-pv-plant",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Single-axis tracking PV plant",
   "short": "Rows that turn east to west with the sun",
   "blurb": "Each row pivots on a north-south axis, facing east in the morning and west in the evening, so the panels meet the sun more squarely for longer. Compare the broad, flat-topped daily curve and the yearly gain with a fixed farm at the same latitude.",
   "consts": {
    "mode": "grid",
    "track": "single-axis"
   },
   "aliases": [
    "tracking solar",
    "solar trackers",
    "solar tracker farm",
    "tracking pv",
    "single-axis tracker",
    "tracking solar plant",
    "sun-tracking solar farm"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "DC rating",
     "unit": "MW",
     "dim": "power",
     "min": 1,
     "max": 500,
     "step": 1,
     "def": 100,
     "group": "Array",
     "roles": [
      "rating",
      "dc rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 33,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "g",
     "label": "Irradiance now",
     "unit": "W/m²",
     "dim": "irradiance",
     "min": 0,
     "max": 1200,
     "step": 10,
     "def": 1000,
     "group": "Conditions",
     "roles": [
      "irradiance",
      "sunlight"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 28,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "gamma",
     "label": "Power temperature coefficient",
     "unit": "%/°C",
     "dim": "ratio",
     "min": -0.5,
     "max": -0.25,
     "step": 0.01,
     "def": -0.35,
     "group": "Array",
     "roles": [
      "temperature coefficient"
     ]
    },
    {
     "k": "dcac",
     "label": "DC/AC ratio",
     "unit": "",
     "dim": "ratio",
     "min": 1,
     "max": 1.6,
     "step": 0.01,
     "def": 1.3,
     "group": "Inverter",
     "roles": [
      "dc/ac ratio",
      "dc/ac",
      "inverter ratio"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 25,
     "step": 0.5,
     "def": 13,
     "group": "Inverter",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "single-axis tracking pv plant 100 MW at latitude 33",
    "solar tracker farm 200 MW with a dc/ac ratio of 1.35",
    "tracking solar plant at latitude 25"
   ]
  },
  {
   "id": "off-grid-solar-home-system",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Off-grid solar home system",
   "short": "A panel and a battery powering a remote home",
   "blurb": "Far from any grid, a few hundred watts of panels charge a battery that runs lights, a phone charger and a fan. The design question is the darkest month: does the panel refill what the home uses each day, and how many cloudy days can the battery carry?",
   "consts": {
    "mode": "offgrid",
    "dcac": 1.0
   },
   "aliases": [
    "off-grid solar",
    "off-grid solar home system",
    "solar home system",
    "solar home kit",
    "off-grid pv",
    "standalone solar",
    "remote home solar"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "Panel rating",
     "unit": "W",
     "dim": "power",
     "min": 50,
     "max": 2000,
     "step": 10,
     "def": 300,
     "group": "Array",
     "roles": [
      "panel",
      "rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 10,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "tilt",
     "label": "Tilt",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 60,
     "step": 1,
     "def": 15,
     "group": "Array",
     "roles": [
      "tilt",
      "tilted"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 30,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "load",
     "label": "Daily load",
     "unit": "Wh",
     "dim": "energy",
     "min": 50,
     "max": 5000,
     "step": 10,
     "def": 800,
     "group": "Home",
     "roles": [
      "load",
      "per day",
      "daily",
      "use"
     ]
    },
    {
     "k": "batt",
     "label": "Battery",
     "unit": "Wh",
     "dim": "energy",
     "min": 100,
     "max": 20000,
     "step": 50,
     "def": 2400,
     "group": "Home",
     "roles": [
      "battery",
      "storage"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 30,
     "step": 0.5,
     "def": 15,
     "group": "Home",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "off-grid solar home system 300 W with 800 Wh load per day",
    "solar home kit 200 W with a 2 kWh battery",
    "off-grid solar for a remote home at latitude 5"
   ]
  },
  {
   "id": "solar-water-pump",
   "archetype": "PV",
   "category": "Renewable energy systems",
   "name": "Solar water pump",
   "short": "Panels driving a pump straight from the sun",
   "blurb": "A solar pump needs no battery: it simply lifts water while the sun shines and the tank or field stores it. The water per day follows from the energy, the height it is lifted and the pump's efficiency, and falls in the darkest month.",
   "consts": {
    "mode": "pump",
    "dcac": 1.0
   },
   "aliases": [
    "solar water pump",
    "solar pump",
    "solar irrigation pump",
    "pv pump",
    "solar powered pump",
    "solar well pump"
   ],
   "params": [
    {
     "k": "pdc",
     "label": "Panel rating",
     "unit": "kW",
     "dim": "power",
     "min": 0.2,
     "max": 20,
     "step": 0.1,
     "def": 2,
     "group": "Array",
     "roles": [
      "panel",
      "rating",
      "peak"
     ]
    },
    {
     "k": "lat",
     "label": "Latitude",
     "unit": "°",
     "dim": "ratio",
     "min": -60,
     "max": 60,
     "step": 0.5,
     "def": 20,
     "group": "Site",
     "roles": [
      "latitude"
     ]
    },
    {
     "k": "tilt",
     "label": "Tilt",
     "unit": "°",
     "dim": "ratio",
     "min": 0,
     "max": 60,
     "step": 1,
     "def": 20,
     "group": "Array",
     "roles": [
      "tilt",
      "tilted"
     ]
    },
    {
     "k": "tair",
     "label": "Air temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": -20,
     "max": 50,
     "step": 1,
     "def": 30,
     "group": "Conditions",
     "roles": [
      "air",
      "temperature",
      "ambient"
     ]
    },
    {
     "k": "head",
     "label": "Pumping head",
     "unit": "m",
     "dim": "length",
     "min": 2,
     "max": 150,
     "step": 1,
     "def": 30,
     "group": "Pump",
     "roles": [
      "head",
      "lift",
      "lifting",
      "deep",
      "well"
     ]
    },
    {
     "k": "need",
     "label": "Water needed per day",
     "unit": "m³",
     "dim": "volume",
     "min": 1,
     "max": 500,
     "step": 1,
     "def": 30,
     "group": "Pump",
     "roles": [
      "a day",
      "per day",
      "daily",
      "need"
     ]
    },
    {
     "k": "loss",
     "label": "System losses",
     "unit": "%",
     "dim": "percent",
     "min": 5,
     "max": 30,
     "step": 0.5,
     "def": 12,
     "group": "Pump",
     "roles": [
      "losses",
      "loss"
     ]
    },
    {
     "k": "sky",
     "label": "Average sky clearness",
     "unit": "%",
     "dim": "percent",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 75,
     "group": "Site",
     "roles": [
      "clearness",
      "sky",
      "sunny"
     ]
    }
   ],
   "commands": [
    "solar water pump 2 kW lifting water 30 m",
    "solar irrigation pump with 50 m head and 20 m3 a day",
    "pv pump 5 kW at latitude 15"
   ]
  },
  {
   "id": "lithium-ion-grid-battery",
   "archetype": "BATT",
   "category": "Energy storage",
   "name": "Lithium-ion grid battery",
   "short": "Containers of cells that shift energy from noon to evening",
   "blurb": "Shipping containers full of lithium-ion cells soak up cheap midday power and give it back in the evening peak. Build the pack from cells, then watch a day of charging and discharging, the heat at high power and the share of energy lost on the round trip.",
   "consts": {
    "duty": "grid"
   },
   "aliases": [
    "grid battery",
    "grid-scale battery",
    "battery energy storage system",
    "bess",
    "utility battery storage",
    "utility battery",
    "battery storage plant",
    "lithium-ion grid battery"
   ],
   "params": [
    {
     "k": "e",
     "label": "Energy",
     "unit": "MWh",
     "dim": "energy",
     "min": 1,
     "max": 1000,
     "step": 1,
     "def": 100,
     "group": "Pack",
     "roles": [
      "energy",
      "capacity",
      "storage"
     ]
    },
    {
     "k": "v",
     "label": "System voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 600,
     "max": 1500,
     "step": 10,
     "def": 1200,
     "group": "Pack",
     "roles": [
      "voltage",
      "volt"
     ]
    },
    {
     "k": "chem",
     "label": "Cell chemistry",
     "choices": [
      "LFP",
      "NMC"
     ],
     "def": "LFP",
     "group": "Cells",
     "roles": [
      "chemistry"
     ],
     "words": {
      "lithium iron phosphate": "LFP",
      "iron phosphate": "LFP",
      "nickel manganese cobalt": "NMC",
      "nickel-rich": "NMC"
     }
    },
    {
     "k": "qc",
     "label": "Cell capacity",
     "unit": "Ah",
     "dim": "charge",
     "min": 50,
     "max": 320,
     "step": 1,
     "def": 280,
     "group": "Cells",
     "roles": [
      "cell",
      "cells",
      "cell capacity"
     ]
    },
    {
     "k": "rc",
     "label": "Cell resistance",
     "unit": "mΩ",
     "dim": "resistance",
     "min": 0.1,
     "max": 5,
     "step": 0.05,
     "def": 0.25,
     "group": "Cells",
     "roles": [
      "resistance",
      "internal resistance"
     ]
    },
    {
     "k": "crate",
     "label": "C-rate",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 2,
     "step": 0.05,
     "def": 0.5,
     "group": "Use",
     "roles": [
      "c-rate",
      "c rate"
     ]
    },
    {
     "k": "dod",
     "label": "Depth of discharge",
     "unit": "%",
     "dim": "percent",
     "min": 50,
     "max": 100,
     "step": 1,
     "def": 90,
     "group": "Use",
     "roles": [
      "depth of discharge",
      "depth",
      "usable"
     ]
    }
   ],
   "commands": [
    "grid battery 100 MWh with a c-rate of 0.25",
    "lithium-ion grid battery 200 MWh at 1500 V",
    "utility battery storage 50 MWh with 90% depth of discharge"
   ]
  },
  {
   "id": "home-battery-storage",
   "archetype": "BATT",
   "category": "Energy storage",
   "name": "Home battery storage",
   "short": "A wall-mounted battery that keeps solar power for the evening",
   "blurb": "A home battery fills up from the roof panels while the house is empty and runs the evening lights, cooking and television. Follow the state of charge through a day and see how the chemistry and cell size set its weight and efficiency.",
   "consts": {
    "duty": "home"
   },
   "aliases": [
    "home battery",
    "home battery storage",
    "house battery",
    "domestic battery",
    "household battery",
    "home energy storage",
    "solar battery"
   ],
   "params": [
    {
     "k": "e",
     "label": "Energy",
     "unit": "kWh",
     "dim": "energy",
     "min": 2,
     "max": 30,
     "step": 0.5,
     "def": 13.5,
     "group": "Pack",
     "roles": [
      "energy",
      "capacity",
      "storage"
     ]
    },
    {
     "k": "v",
     "label": "System voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 48,
     "max": 450,
     "step": 1,
     "def": 350,
     "group": "Pack",
     "roles": [
      "voltage",
      "volt"
     ]
    },
    {
     "k": "chem",
     "label": "Cell chemistry",
     "choices": [
      "LFP",
      "NMC"
     ],
     "def": "LFP",
     "group": "Cells",
     "roles": [
      "chemistry"
     ],
     "words": {
      "lithium iron phosphate": "LFP",
      "iron phosphate": "LFP",
      "nickel manganese cobalt": "NMC",
      "nickel-rich": "NMC"
     }
    },
    {
     "k": "qc",
     "label": "Cell capacity",
     "unit": "Ah",
     "dim": "charge",
     "min": 10,
     "max": 150,
     "step": 1,
     "def": 40,
     "group": "Cells",
     "roles": [
      "cell",
      "cells",
      "cell capacity"
     ]
    },
    {
     "k": "rc",
     "label": "Cell resistance",
     "unit": "mΩ",
     "dim": "resistance",
     "min": 0.5,
     "max": 5,
     "step": 0.05,
     "def": 1,
     "group": "Cells",
     "roles": [
      "resistance",
      "internal resistance"
     ]
    },
    {
     "k": "crate",
     "label": "C-rate",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 1,
     "step": 0.01,
     "def": 0.37,
     "group": "Use",
     "roles": [
      "c-rate",
      "c rate"
     ]
    },
    {
     "k": "dod",
     "label": "Depth of discharge",
     "unit": "%",
     "dim": "percent",
     "min": 50,
     "max": 100,
     "step": 1,
     "def": 90,
     "group": "Use",
     "roles": [
      "depth of discharge",
      "depth",
      "usable"
     ]
    }
   ],
   "commands": [
    "home battery 13.5 kWh",
    "home battery storage 10 kWh at 48 V with LFP cells",
    "house battery for solar 20 kWh with a c-rate of 0.5"
   ]
  },
  {
   "id": "electric-car-battery-pack",
   "archetype": "BATT",
   "category": "Energy storage",
   "name": "Electric car battery pack",
   "short": "Thousands of cells under the floor of an electric car",
   "blurb": "An electric car's pack strings about a hundred cells in series for a high voltage and adds strings in parallel for range. Fast charging and hard driving mean high C-rates, so the resistive heat and the voltage drop matter as much as the energy stored.",
   "consts": {
    "duty": "drive"
   },
   "aliases": [
    "electric car battery pack",
    "ev battery pack",
    "ev battery",
    "car battery pack",
    "traction battery",
    "electric vehicle battery pack",
    "ev pack"
   ],
   "params": [
    {
     "k": "e",
     "label": "Energy",
     "unit": "kWh",
     "dim": "energy",
     "min": 20,
     "max": 150,
     "step": 1,
     "def": 75,
     "group": "Pack",
     "roles": [
      "energy",
      "capacity",
      "storage"
     ]
    },
    {
     "k": "v",
     "label": "System voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 300,
     "max": 900,
     "step": 5,
     "def": 400,
     "group": "Pack",
     "roles": [
      "voltage",
      "volt"
     ]
    },
    {
     "k": "chem",
     "label": "Cell chemistry",
     "choices": [
      "NMC",
      "LFP"
     ],
     "def": "NMC",
     "group": "Cells",
     "roles": [
      "chemistry"
     ],
     "words": {
      "lithium iron phosphate": "LFP",
      "iron phosphate": "LFP",
      "nickel manganese cobalt": "NMC",
      "nickel-rich": "NMC"
     }
    },
    {
     "k": "qc",
     "label": "Cell capacity",
     "unit": "Ah",
     "dim": "charge",
     "min": 20,
     "max": 100,
     "step": 1,
     "def": 47,
     "group": "Cells",
     "roles": [
      "cell",
      "cells",
      "cell capacity"
     ]
    },
    {
     "k": "rc",
     "label": "Cell resistance",
     "unit": "mΩ",
     "dim": "resistance",
     "min": 0.5,
     "max": 3,
     "step": 0.05,
     "def": 1,
     "group": "Cells",
     "roles": [
      "resistance",
      "internal resistance"
     ]
    },
    {
     "k": "crate",
     "label": "C-rate",
     "unit": "",
     "dim": "ratio",
     "min": 0.1,
     "max": 4,
     "step": 0.05,
     "def": 1.5,
     "group": "Use",
     "roles": [
      "c-rate",
      "c rate"
     ]
    },
    {
     "k": "dod",
     "label": "Depth of discharge",
     "unit": "%",
     "dim": "percent",
     "min": 50,
     "max": 100,
     "step": 1,
     "def": 90,
     "group": "Use",
     "roles": [
      "depth of discharge",
      "depth",
      "usable"
     ]
    }
   ],
   "commands": [
    "electric car battery pack 75 kWh at 400 V",
    "ev battery pack 100 kWh, 800 V, nmc cells",
    "traction battery with 60 Ah cells"
   ]
  },
  {
   "id": "pem-electrolyser",
   "archetype": "FC",
   "category": "Energy storage",
   "name": "PEM electrolyser",
   "short": "A membrane stack that splits water into hydrogen",
   "blurb": "A proton-exchange-membrane electrolyser pushes current through water across a thin polymer membrane: oxygen bubbles off one side, hydrogen off the other. The cell voltage decides the electricity per kilogram; run it on a day of sunshine and see how much hydrogen it makes.",
   "consts": {},
   "aliases": [
    "pem electrolyser",
    "pem electrolyzer",
    "electrolyser",
    "electrolyzer",
    "hydrogen electrolyser",
    "green hydrogen electrolyser",
    "water electrolyser",
    "electrolysis stack"
   ],
   "params": [
    {
     "k": "n",
     "label": "Cells in the stack",
     "unit": "",
     "dim": "count",
     "min": 10,
     "max": 400,
     "step": 1,
     "def": 150,
     "group": "Stack",
     "roles": [
      "cells",
      "cell"
     ]
    },
    {
     "k": "a",
     "label": "Cell area",
     "unit": "cm²",
     "dim": "area",
     "min": 100,
     "max": 3000,
     "step": 10,
     "def": 1500,
     "group": "Stack",
     "roles": [
      "area",
      "cell area"
     ]
    },
    {
     "k": "j",
     "label": "Current density",
     "unit": "A/cm²",
     "dim": "cdensity",
     "min": 0.1,
     "max": 3.5,
     "step": 0.05,
     "def": 2,
     "group": "Operation",
     "roles": [
      "current density",
      "at"
     ]
    },
    {
     "k": "t",
     "label": "Temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": 20,
     "max": 90,
     "step": 1,
     "def": 70,
     "group": "Operation",
     "roles": [
      "temperature",
      "at"
     ]
    },
    {
     "k": "asr",
     "label": "Area-specific resistance",
     "unit": "Ω·cm²",
     "dim": "ratio",
     "min": 0.05,
     "max": 0.4,
     "step": 0.005,
     "def": 0.15,
     "group": "Stack",
     "roles": [
      "resistance",
      "area-specific resistance"
     ]
    }
   ],
   "commands": [
    "pem electrolyser with 150 cells at 2 a/cm2",
    "pem electrolyzer 200 cells of 1500 cm2 at 80 c",
    "hydrogen electrolyser running at 1.5 a/cm2 and 60 c"
   ]
  },
  {
   "id": "three-phase-induction-motor",
   "archetype": "EMOT",
   "category": "Electric motors and generators",
   "name": "Three-phase induction motor",
   "short": "The workhorse of industry: a rotating field drags a cage rotor",
   "blurb": "Three windings fed a third of a cycle apart make a magnetic field that spins around the stator. The rotor's bars cut through it, carry induced current and are pulled along, always a little slower than the field. Set the supply, poles and slip and see torque, current, efficiency and the start-up.",
   "consts": {
    "kind": "induction",
    "phases": 3,
    "j": 0.1,
    "p_ref": 15
   },
   "aliases": [
    "three-phase induction motor",
    "three phase induction motor",
    "induction motor",
    "three-phase motor",
    "three phase motor",
    "squirrel cage motor",
    "cage motor",
    "pole motor",
    "asynchronous motor",
    "ac induction motor"
   ],
   "params": [
    {
     "k": "p",
     "label": "Rated power",
     "unit": "kW",
     "dim": "power",
     "min": 0.5,
     "max": 75,
     "step": 0.5,
     "def": 15,
     "group": "Rating",
     "roles": [
      "rated",
      "power",
      "output"
     ]
    },
    {
     "k": "v",
     "label": "Line voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 200,
     "max": 690,
     "step": 5,
     "def": 400,
     "group": "Supply",
     "roles": [
      "volt",
      "supply",
      "voltage"
     ]
    },
    {
     "k": "f",
     "label": "Frequency",
     "unit": "Hz",
     "dim": "frequency",
     "min": 50,
     "max": 60,
     "step": 10,
     "def": 50,
     "group": "Supply",
     "roles": [
      "frequency"
     ]
    },
    {
     "k": "poles",
     "label": "Poles",
     "unit": "",
     "dim": "count",
     "min": 2,
     "max": 12,
     "step": 2,
     "def": 4,
     "group": "Rating",
     "roles": [
      "pole",
      "poles"
     ]
    },
    {
     "k": "s",
     "label": "Slip",
     "unit": "",
     "dim": "ratio",
     "min": 0.005,
     "max": 0.2,
     "step": 0.001,
     "def": 0.03,
     "group": "Running point",
     "roles": [
      "slip"
     ]
    },
    {
     "k": "r1",
     "label": "Stator resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.05,
     "max": 3,
     "step": 0.01,
     "def": 0.3,
     "group": "Equivalent circuit",
     "roles": [
      "stator resistance"
     ]
    },
    {
     "k": "r2",
     "label": "Rotor resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.05,
     "max": 3,
     "step": 0.01,
     "def": 0.25,
     "group": "Equivalent circuit",
     "roles": [
      "rotor resistance"
     ]
    },
    {
     "k": "x1",
     "label": "Stator reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.2,
     "max": 5,
     "step": 0.05,
     "def": 0.8,
     "group": "Equivalent circuit",
     "roles": [
      "stator reactance"
     ]
    },
    {
     "k": "x2",
     "label": "Rotor reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.2,
     "max": 5,
     "step": 0.05,
     "def": 0.8,
     "group": "Equivalent circuit",
     "roles": [
      "rotor reactance"
     ]
    },
    {
     "k": "xm",
     "label": "Magnetising reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 5,
     "max": 200,
     "step": 1,
     "def": 30,
     "group": "Equivalent circuit",
     "roles": [
      "magnetising reactance",
      "magnetizing reactance"
     ]
    }
   ],
   "commands": [
    "15 kW 4-pole motor on 400 V 50 Hz",
    "three-phase induction motor 7.5 kW, slip 0.04, 60 Hz",
    "induction motor on 230 V 60 Hz with 2 poles"
   ]
  },
  {
   "id": "large-induction-motor",
   "archetype": "EMOT",
   "category": "Electric motors and generators",
   "name": "Large induction motor",
   "short": "A medium-voltage cage motor for pumps and compressors",
   "blurb": "Big pumps, fans and compressors are driven by induction motors of hundreds of kilowatts to several megawatts, fed at several kilovolts so the current stays manageable. They run at very small slip and high efficiency, but a direct start draws a heavy current and takes seconds to accelerate the load.",
   "consts": {
    "kind": "induction",
    "phases": 3,
    "j": 30,
    "p_ref": 1000
   },
   "aliases": [
    "large induction motor",
    "medium voltage motor",
    "medium-voltage motor",
    "mv motor",
    "hv motor",
    "compressor motor",
    "pump motor",
    "megawatt motor"
   ],
   "params": [
    {
     "k": "p",
     "label": "Rated power",
     "unit": "kW",
     "dim": "power",
     "min": 200,
     "max": 5000,
     "step": 10,
     "def": 1000,
     "group": "Rating",
     "roles": [
      "rated",
      "power",
      "output"
     ]
    },
    {
     "k": "v",
     "label": "Line voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 3300,
     "max": 11000,
     "step": 100,
     "def": 6600,
     "group": "Supply",
     "roles": [
      "volt",
      "supply",
      "voltage"
     ]
    },
    {
     "k": "f",
     "label": "Frequency",
     "unit": "Hz",
     "dim": "frequency",
     "min": 50,
     "max": 60,
     "step": 10,
     "def": 50,
     "group": "Supply",
     "roles": [
      "frequency"
     ]
    },
    {
     "k": "poles",
     "label": "Poles",
     "unit": "",
     "dim": "count",
     "min": 2,
     "max": 12,
     "step": 2,
     "def": 4,
     "group": "Rating",
     "roles": [
      "pole",
      "poles"
     ]
    },
    {
     "k": "s",
     "label": "Slip",
     "unit": "",
     "dim": "ratio",
     "min": 0.002,
     "max": 0.05,
     "step": 0.0005,
     "def": 0.009,
     "group": "Running point",
     "roles": [
      "slip"
     ]
    },
    {
     "k": "r1",
     "label": "Stator resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.05,
     "max": 3,
     "step": 0.01,
     "def": 0.4,
     "group": "Equivalent circuit",
     "roles": [
      "stator resistance"
     ]
    },
    {
     "k": "r2",
     "label": "Rotor resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.05,
     "max": 3,
     "step": 0.01,
     "def": 0.35,
     "group": "Equivalent circuit",
     "roles": [
      "rotor resistance"
     ]
    },
    {
     "k": "x1",
     "label": "Stator reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.5,
     "max": 15,
     "step": 0.1,
     "def": 3.5,
     "group": "Equivalent circuit",
     "roles": [
      "stator reactance"
     ]
    },
    {
     "k": "x2",
     "label": "Rotor reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.5,
     "max": 15,
     "step": 0.1,
     "def": 3.5,
     "group": "Equivalent circuit",
     "roles": [
      "rotor reactance"
     ]
    },
    {
     "k": "xm",
     "label": "Magnetising reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 30,
     "max": 500,
     "step": 5,
     "def": 120,
     "group": "Equivalent circuit",
     "roles": [
      "magnetising reactance",
      "magnetizing reactance"
     ]
    }
   ],
   "commands": [
    "large induction motor 1 MW 6.6 kV",
    "medium voltage motor 2 MW at 11 kV 60 Hz",
    "large induction motor 1500 kW 4-pole"
   ]
  },
  {
   "id": "single-phase-induction-motor",
   "archetype": "EMOT",
   "category": "Electric motors and generators",
   "name": "Single-phase induction motor",
   "short": "The household motor in fans, pumps and washing machines",
   "blurb": "A single-phase supply cannot make a rotating field by itself, so these motors add a capacitor-fed auxiliary winding to get going. Here the running motor is modelled simply, as one equivalent phase, which captures its current, torque and efficiency well enough to compare sizes and supplies.",
   "consts": {
    "kind": "induction",
    "phases": 1,
    "j": 0.002,
    "p_ref": 0.75
   },
   "aliases": [
    "single-phase induction motor",
    "single phase induction motor",
    "single-phase motor",
    "single phase motor",
    "capacitor motor",
    "capacitor-run motor",
    "household motor",
    "fan motor",
    "split-phase motor"
   ],
   "params": [
    {
     "k": "p",
     "label": "Rated power",
     "unit": "kW",
     "dim": "power",
     "min": 0.1,
     "max": 2.2,
     "step": 0.01,
     "def": 0.75,
     "group": "Rating",
     "roles": [
      "rated",
      "power",
      "output"
     ]
    },
    {
     "k": "v",
     "label": "Supply voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 100,
     "max": 240,
     "step": 5,
     "def": 230,
     "group": "Supply",
     "roles": [
      "volt",
      "supply",
      "voltage"
     ]
    },
    {
     "k": "f",
     "label": "Frequency",
     "unit": "Hz",
     "dim": "frequency",
     "min": 50,
     "max": 60,
     "step": 10,
     "def": 50,
     "group": "Supply",
     "roles": [
      "frequency"
     ]
    },
    {
     "k": "poles",
     "label": "Poles",
     "unit": "",
     "dim": "count",
     "min": 2,
     "max": 6,
     "step": 2,
     "def": 4,
     "group": "Rating",
     "roles": [
      "pole",
      "poles"
     ]
    },
    {
     "k": "s",
     "label": "Slip",
     "unit": "",
     "dim": "ratio",
     "min": 0.01,
     "max": 0.15,
     "step": 0.001,
     "def": 0.04,
     "group": "Running point",
     "roles": [
      "slip"
     ]
    },
    {
     "k": "r1",
     "label": "Main winding resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.5,
     "max": 10,
     "step": 0.05,
     "def": 2.5,
     "group": "Equivalent circuit",
     "roles": [
      "stator resistance",
      "winding resistance"
     ]
    },
    {
     "k": "r2",
     "label": "Rotor resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.5,
     "max": 10,
     "step": 0.05,
     "def": 2.4,
     "group": "Equivalent circuit",
     "roles": [
      "rotor resistance"
     ]
    },
    {
     "k": "x1",
     "label": "Stator reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 1,
     "max": 10,
     "step": 0.1,
     "def": 3,
     "group": "Equivalent circuit",
     "roles": [
      "stator reactance"
     ]
    },
    {
     "k": "x2",
     "label": "Rotor reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 1,
     "max": 10,
     "step": 0.1,
     "def": 3,
     "group": "Equivalent circuit",
     "roles": [
      "rotor reactance"
     ]
    },
    {
     "k": "xm",
     "label": "Magnetising reactance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 20,
     "max": 300,
     "step": 1,
     "def": 80,
     "group": "Equivalent circuit",
     "roles": [
      "magnetising reactance",
      "magnetizing reactance"
     ]
    }
   ],
   "commands": [
    "single-phase induction motor 0.75 kW on 230 V",
    "single-phase motor 120 V 60 Hz",
    "household fan motor 0.37 kW 4-pole"
   ]
  },
  {
   "id": "brushed-dc-motor",
   "archetype": "EMOT",
   "category": "Electric motors and generators",
   "name": "Brushed DC motor",
   "short": "Magnets, a spinning armature and a commutator",
   "blurb": "The simplest motor to control: speed follows the voltage, torque follows the current. Carbon brushes and a segmented commutator switch the armature coils as they turn, so the torque always pushes the same way. Change the supply, resistance and motor constant and watch the straight speed-torque line move.",
   "consts": {
    "kind": "dc",
    "tf": 0.004
   },
   "aliases": [
    "brushed dc motor",
    "brushed motor",
    "dc motor",
    "permanent magnet dc motor",
    "pmdc motor",
    "commutator motor",
    "toy motor",
    "hobby motor"
   ],
   "params": [
    {
     "k": "v",
     "label": "Supply voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 1.5,
     "max": 48,
     "step": 0.5,
     "def": 12,
     "group": "Supply",
     "roles": [
      "volt",
      "supply",
      "voltage"
     ]
    },
    {
     "k": "ra",
     "label": "Armature resistance",
     "unit": "Ω",
     "dim": "resistance",
     "min": 0.05,
     "max": 5,
     "step": 0.01,
     "def": 0.5,
     "group": "Motor",
     "roles": [
      "armature resistance",
      "resistance"
     ]
    },
    {
     "k": "k",
     "label": "Motor constant",
     "unit": "V·s/rad",
     "dim": "ratio",
     "min": 0.002,
     "max": 0.2,
     "step": 0.001,
     "def": 0.02,
     "group": "Motor",
     "roles": [
      "motor constant",
      "torque constant",
      "constant"
     ]
    },
    {
     "k": "tl",
     "label": "Load torque",
     "unit": "N·m",
     "dim": "torque",
     "min": 0,
     "max": 2,
     "step": 0.005,
     "def": 0.05,
     "group": "Load",
     "roles": [
      "load torque",
      "torque"
     ]
    },
    {
     "k": "la",
     "label": "Armature inductance",
     "unit": "mH",
     "dim": "inductance",
     "min": 0.02,
     "max": 10,
     "step": 0.01,
     "def": 0.5,
     "group": "Dynamics",
     "roles": [
      "inductance"
     ]
    },
    {
     "k": "jr",
     "label": "Rotor and load inertia",
     "unit": "kg·cm²",
     "dim": "inertia",
     "min": 0.05,
     "max": 20,
     "step": 0.05,
     "def": 0.5,
     "group": "Dynamics",
     "roles": [
      "inertia"
     ]
    }
   ],
   "commands": [
    "brushed dc motor 12 V",
    "brushed dc motor 24 V, armature resistance 0.8 Ω",
    "dc motor 6 V with motor constant 0.01"
   ]
  },
  {
   "id": "synchronous-generator-alternator",
   "archetype": "EMOT",
   "category": "Electric motors and generators",
   "name": "Synchronous generator (alternator)",
   "short": "The machine that turns a power station's shaft into grid power",
   "blurb": "A DC field on the rotor, spun by a turbine, sweeps past the three-phase stator winding and generates voltage locked to the grid frequency. How much field current you give it decides whether it also supplies reactive power, and how close it runs to slipping a pole. Explore its phasors and capability chart.",
   "consts": {
    "kind": "syncgen",
    "ra": 0.003
   },
   "aliases": [
    "synchronous generator",
    "alternator",
    "generator",
    "turbo generator",
    "turbogenerator",
    "power station generator",
    "hydro generator",
    "synchronous machine"
   ],
   "params": [
    {
     "k": "srat",
     "label": "Rating",
     "unit": "MVA",
     "dim": "apower",
     "min": 10,
     "max": 1500,
     "step": 5,
     "def": 500,
     "group": "Rating",
     "roles": [
      "rating",
      "rated"
     ]
    },
    {
     "k": "v",
     "label": "Terminal voltage (line)",
     "unit": "kV",
     "dim": "voltage",
     "min": 6,
     "max": 27,
     "step": 0.5,
     "def": 22,
     "group": "Rating",
     "roles": [
      "volt",
      "terminal",
      "voltage"
     ]
    },
    {
     "k": "f",
     "label": "Frequency",
     "unit": "Hz",
     "dim": "frequency",
     "min": 50,
     "max": 60,
     "step": 10,
     "def": 50,
     "group": "Rating",
     "roles": [
      "frequency"
     ]
    },
    {
     "k": "poles",
     "label": "Poles",
     "unit": "",
     "dim": "count",
     "min": 2,
     "max": 48,
     "step": 2,
     "def": 2,
     "group": "Rating",
     "roles": [
      "pole",
      "poles"
     ]
    },
    {
     "k": "xs",
     "label": "Synchronous reactance",
     "unit": "",
     "dim": "ratio",
     "min": 0.5,
     "max": 2.5,
     "step": 0.05,
     "def": 1.8,
     "group": "Machine",
     "roles": [
      "synchronous reactance",
      "reactance"
     ]
    },
    {
     "k": "load",
     "label": "Load (share of rated current)",
     "unit": "%",
     "dim": "percent",
     "min": 10,
     "max": 120,
     "step": 1,
     "def": 100,
     "group": "Running point",
     "roles": [
      "load",
      "loading"
     ]
    },
    {
     "k": "pf",
     "label": "Power factor",
     "unit": "",
     "dim": "ratio",
     "min": 0.7,
     "max": 1,
     "step": 0.01,
     "def": 0.85,
     "group": "Running point",
     "roles": [
      "power factor",
      "pf"
     ]
    },
    {
     "k": "mode",
     "label": "Power factor kind",
     "choices": [
      "lagging",
      "leading"
     ],
     "def": "lagging",
     "group": "Running point",
     "roles": [
      "kind"
     ],
     "words": {
      "over-excited": "lagging",
      "under-excited": "leading",
      "overexcited": "lagging",
      "underexcited": "leading"
     }
    }
   ],
   "commands": [
    "synchronous generator 500 MVA 22 kV",
    "alternator 200 MVA, 0.9 power factor",
    "synchronous generator 60 Hz with 4 poles"
   ]
  },
  {
   "id": "power-transformer",
   "archetype": "GRID",
   "category": "Electrical grid and power electronics",
   "name": "Power transformer",
   "short": "Steps transmission voltage down at a grid substation",
   "blurb": "A grid transformer is two windings on a shared steel core: the alternating flux links them, so voltage changes in the ratio of their turns while power passes through at well over 99% efficiency. See how its fixed core loss and load-dependent copper loss trade off, and how much the voltage sags under load.",
   "consts": {
    "kind": "transformer"
   },
   "aliases": [
    "power transformer",
    "grid transformer",
    "substation transformer",
    "step-down transformer",
    "transmission transformer",
    "large transformer",
    "auto transformer"
   ],
   "params": [
    {
     "k": "srat",
     "label": "Rating",
     "unit": "MVA",
     "dim": "apower",
     "min": 5,
     "max": 1000,
     "step": 5,
     "def": 100,
     "group": "Rating",
     "roles": [
      "rating",
      "rated"
     ]
    },
    {
     "k": "v1",
     "label": "Primary voltage",
     "unit": "kV",
     "dim": "voltage",
     "min": 66,
     "max": 500,
     "step": 1,
     "def": 132,
     "group": "Rating",
     "roles": [
      "primary",
      "hv"
     ]
    },
    {
     "k": "v2",
     "label": "Secondary voltage",
     "unit": "kV",
     "dim": "voltage",
     "min": 11,
     "max": 220,
     "step": 1,
     "def": 33,
     "group": "Rating",
     "roles": [
      "secondary",
      "lv"
     ]
    },
    {
     "k": "r",
     "label": "Winding resistance",
     "unit": "%",
     "dim": "percent",
     "min": 0.1,
     "max": 2,
     "step": 0.05,
     "def": 0.4,
     "group": "Equivalent circuit",
     "roles": [
      "resistance",
      "copper"
     ]
    },
    {
     "k": "x",
     "label": "Leakage reactance",
     "unit": "%",
     "dim": "percent",
     "min": 4,
     "max": 20,
     "step": 0.5,
     "def": 12,
     "group": "Equivalent circuit",
     "roles": [
      "reactance",
      "impedance"
     ]
    },
    {
     "k": "p0",
     "label": "Core loss",
     "unit": "%",
     "dim": "percent",
     "min": 0.02,
     "max": 0.3,
     "step": 0.01,
     "def": 0.06,
     "group": "Equivalent circuit",
     "roles": [
      "core loss",
      "no-load loss",
      "iron loss"
     ]
    },
    {
     "k": "load",
     "label": "Load",
     "unit": "%",
     "dim": "percent",
     "min": 0,
     "max": 125,
     "step": 1,
     "def": 80,
     "group": "Running point",
     "roles": [
      "load",
      "loaded"
     ]
    },
    {
     "k": "pf",
     "label": "Power factor (lagging)",
     "unit": "",
     "dim": "ratio",
     "min": 0.6,
     "max": 1,
     "step": 0.01,
     "def": 0.9,
     "group": "Running point",
     "roles": [
      "power factor",
      "pf"
     ]
    }
   ],
   "commands": [
    "power transformer 100 MVA, 132 kV primary, 33 kV secondary",
    "power transformer 250 MVA at 80% load",
    "grid transformer 60 MVA at 0.95 power factor"
   ]
  },
  {
   "id": "distribution-transformer",
   "archetype": "GRID",
   "category": "Electrical grid and power electronics",
   "name": "Distribution transformer",
   "short": "The last step down, to the voltage of homes and shops",
   "blurb": "Distribution transformers sit on poles and in street kiosks, bringing the local network's kilovolts down to the few hundred volts a building uses. They are energised all day but lightly loaded much of it, so their core loss matters as much as their efficiency at full load.",
   "consts": {
    "kind": "transformer"
   },
   "aliases": [
    "distribution transformer",
    "pole-mounted transformer",
    "pole transformer",
    "kiosk transformer",
    "padmount transformer",
    "pad-mounted transformer",
    "street transformer",
    "local transformer"
   ],
   "params": [
    {
     "k": "srat",
     "label": "Rating",
     "unit": "kVA",
     "dim": "apower",
     "min": 25,
     "max": 2500,
     "step": 5,
     "def": 400,
     "group": "Rating",
     "roles": [
      "rating",
      "rated"
     ]
    },
    {
     "k": "v1",
     "label": "Primary voltage",
     "unit": "kV",
     "dim": "voltage",
     "min": 3.3,
     "max": 33,
     "step": 0.1,
     "def": 11,
     "group": "Rating",
     "roles": [
      "primary",
      "hv"
     ]
    },
    {
     "k": "v2",
     "label": "Secondary voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 230,
     "max": 1000,
     "step": 5,
     "def": 400,
     "group": "Rating",
     "roles": [
      "secondary",
      "lv"
     ]
    },
    {
     "k": "r",
     "label": "Winding resistance",
     "unit": "%",
     "dim": "percent",
     "min": 0.5,
     "max": 2.5,
     "step": 0.05,
     "def": 1.1,
     "group": "Equivalent circuit",
     "roles": [
      "resistance",
      "copper"
     ]
    },
    {
     "k": "x",
     "label": "Leakage reactance",
     "unit": "%",
     "dim": "percent",
     "min": 3,
     "max": 7,
     "step": 0.1,
     "def": 4,
     "group": "Equivalent circuit",
     "roles": [
      "reactance",
      "impedance"
     ]
    },
    {
     "k": "p0",
     "label": "Core loss",
     "unit": "%",
     "dim": "percent",
     "min": 0.1,
     "max": 0.5,
     "step": 0.01,
     "def": 0.2,
     "group": "Equivalent circuit",
     "roles": [
      "core loss",
      "no-load loss",
      "iron loss"
     ]
    },
    {
     "k": "load",
     "label": "Load",
     "unit": "%",
     "dim": "percent",
     "min": 0,
     "max": 125,
     "step": 1,
     "def": 60,
     "group": "Running point",
     "roles": [
      "load",
      "loaded"
     ]
    },
    {
     "k": "pf",
     "label": "Power factor (lagging)",
     "unit": "",
     "dim": "ratio",
     "min": 0.6,
     "max": 1,
     "step": 0.01,
     "def": 0.9,
     "group": "Running point",
     "roles": [
      "power factor",
      "pf"
     ]
    }
   ],
   "commands": [
    "distribution transformer 400 kVA 11 kV",
    "pole-mounted transformer 100 kVA at 60% load",
    "distribution transformer 630 kVA, 0.95 power factor"
   ]
  },
  {
   "id": "high-voltage-overhead-transmission-line",
   "archetype": "GRID",
   "category": "Electrical grid and power electronics",
   "name": "High-voltage overhead transmission line",
   "short": "Hundreds of kilometres of conductor on lattice towers",
   "blurb": "Long lines carry bulk power between regions at hundreds of kilovolts, because losses fall with the square of the voltage. Over such distances the line's own inductance and capacitance matter: here it is solved as a long line, so you see the voltage profile, the sending-end conditions and even the rise on an unloaded line.",
   "consts": {
    "kind": "line"
   },
   "aliases": [
    "high-voltage overhead transmission line",
    "overhead line",
    "transmission line",
    "power line",
    "high-voltage line",
    "high voltage line",
    "hv line",
    "overhead transmission line",
    "pylon line"
   ],
   "params": [
    {
     "k": "v",
     "label": "Receiving-end voltage (line)",
     "unit": "kV",
     "dim": "voltage",
     "min": 66,
     "max": 765,
     "step": 1,
     "def": 400,
     "group": "Operation",
     "roles": [
      "volt",
      "voltage"
     ]
    },
    {
     "k": "p",
     "label": "Power delivered",
     "unit": "MW",
     "dim": "power",
     "min": 10,
     "max": 3000,
     "step": 10,
     "def": 500,
     "group": "Operation",
     "roles": [
      "carrying",
      "load",
      "power"
     ]
    },
    {
     "k": "pf",
     "label": "Power factor (lagging)",
     "unit": "",
     "dim": "ratio",
     "min": 0.8,
     "max": 1,
     "step": 0.01,
     "def": 0.95,
     "group": "Operation",
     "roles": [
      "power factor",
      "pf"
     ]
    },
    {
     "k": "l",
     "label": "Length",
     "unit": "km",
     "dim": "length",
     "min": 10,
     "max": 600,
     "step": 5,
     "def": 250,
     "group": "Line",
     "roles": [
      "long",
      "length",
      "over"
     ]
    },
    {
     "k": "r",
     "label": "Resistance per km",
     "unit": "Ω/km",
     "dim": "perlen",
     "min": 0.01,
     "max": 0.2,
     "step": 0.001,
     "def": 0.03,
     "group": "Line",
     "roles": [
      "resistance"
     ]
    },
    {
     "k": "x",
     "label": "Reactance per km",
     "unit": "Ω/km",
     "dim": "perlen",
     "min": 0.2,
     "max": 0.5,
     "step": 0.005,
     "def": 0.32,
     "group": "Line",
     "roles": [
      "reactance"
     ]
    },
    {
     "k": "b",
     "label": "Susceptance per km",
     "unit": "µS/km",
     "dim": "perlen",
     "min": 2,
     "max": 6,
     "step": 0.05,
     "def": 3.6,
     "group": "Line",
     "roles": [
      "susceptance"
     ]
    }
   ],
   "commands": [
    "400 kV overhead line 250 km carrying 500 MW",
    "transmission line 220 kV 150 km",
    "power line 500 MW at 0.95 power factor over 200 km"
   ]
  },
  {
   "id": "power-factor-correction-capacitor-bank",
   "archetype": "GRID",
   "category": "Electrical grid and power electronics",
   "name": "Power factor correction capacitor bank",
   "short": "Capacitors that supply a factory's reactive power on site",
   "blurb": "Motors draw magnetising current that does no work but still loads the cables and transformer. A bank of capacitors beside the load supplies that reactive current locally, so the supply carries less current for the same power. Size the bank for a target power factor and watch its steps switch through a day.",
   "consts": {
    "kind": "pfc"
   },
   "aliases": [
    "power factor correction capacitor bank",
    "capacitor bank",
    "power factor correction",
    "pfc bank",
    "pf correction",
    "power factor capacitor",
    "kvar bank",
    "reactive power compensation"
   ],
   "params": [
    {
     "k": "p",
     "label": "Load (active power)",
     "unit": "kW",
     "dim": "power",
     "min": 10,
     "max": 5000,
     "step": 10,
     "def": 500,
     "group": "Load",
     "roles": [
      "load",
      "power"
     ]
    },
    {
     "k": "v",
     "label": "Supply voltage (line)",
     "unit": "V",
     "dim": "voltage",
     "min": 230,
     "max": 11000,
     "step": 10,
     "def": 400,
     "group": "Load",
     "roles": [
      "volt",
      "supply",
      "voltage"
     ]
    },
    {
     "k": "pf1",
     "label": "Present power factor",
     "unit": "",
     "dim": "ratio",
     "min": 0.5,
     "max": 0.95,
     "step": 0.01,
     "def": 0.75,
     "group": "Correction",
     "roles": [
      "power factor",
      "pf",
      "present",
      "existing"
     ]
    },
    {
     "k": "pf2",
     "label": "Target power factor",
     "unit": "",
     "dim": "ratio",
     "min": 0.85,
     "max": 1,
     "step": 0.01,
     "def": 0.95,
     "group": "Correction",
     "roles": [
      "target",
      "corrected"
     ]
    },
    {
     "k": "f",
     "label": "Frequency",
     "unit": "Hz",
     "dim": "frequency",
     "min": 50,
     "max": 60,
     "step": 10,
     "def": 50,
     "group": "Load",
     "roles": [
      "frequency"
     ]
    },
    {
     "k": "steps",
     "label": "Switched steps",
     "unit": "",
     "dim": "count",
     "min": 1,
     "max": 12,
     "step": 1,
     "def": 6,
     "group": "Correction",
     "roles": [
      "steps",
      "stages"
     ]
    }
   ],
   "commands": [
    "capacitor bank for 500 kW at 0.75 power factor, target 0.95",
    "pf correction capacitor bank 400 V 200 kW",
    "capacitor bank 300 kW with 6 steps"
   ]
  },
  {
   "id": "petrol-family-car",
   "archetype": "VEH",
   "category": "Cars and road vehicles",
   "name": "Petrol family car",
   "short": "A five-seat hatchback with a petrol engine",
   "blurb": "The everyday car: a petrol engine turns roughly a third of its fuel into work at the wheels, and most of that goes into pushing air aside at motorway speed. Change the mass, the shape and the engine and see the fuel use, the range on a full tank, the acceleration and the top speed follow.",
   "consts": {
    "drive": "ice",
    "shape": "car",
    "len": 4.4,
    "height": 1.47,
    "wb": 2.65,
    "wheel": 0.64,
    "mu": 0.9,
    "fd": 0.6,
    "dens": 0.745,
    "lhv": 43.0,
    "co2": 3.17,
    "etad": 0.9,
    "vcap": 200,
    "range_goal": 600,
    "wkg_min": 40
   },
   "aliases": [
    "petrol family car",
    "family car",
    "petrol car",
    "car",
    "hatchback",
    "saloon car",
    "sedan",
    "gasoline car",
    "compact car"
   ],
   "params": [
    {
     "k": "m",
     "label": "Mass with driver",
     "unit": "kg",
     "dim": "mass",
     "min": 800,
     "max": 2500,
     "step": 10,
     "def": 1400,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.2,
     "max": 0.45,
     "step": 0.005,
     "def": 0.3,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area",
     "unit": "m²",
     "dim": "area",
     "min": 1.6,
     "max": 3.2,
     "step": 0.05,
     "def": 2.2,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.006,
     "max": 0.015,
     "step": 0.0005,
     "def": 0.01,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "pm",
     "label": "Engine power",
     "unit": "kW",
     "dim": "power",
     "min": 40,
     "max": 300,
     "step": 1,
     "def": 110,
     "group": "Powertrain",
     "roles": [
      "engine",
      "power"
     ]
    },
    {
     "k": "eng",
     "label": "Engine efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.2,
     "max": 0.42,
     "step": 0.01,
     "def": 0.3,
     "group": "Powertrain",
     "roles": [
      "engine efficiency",
      "thermal efficiency"
     ]
    },
    {
     "k": "tank",
     "label": "Fuel tank",
     "unit": "L",
     "dim": "volume",
     "min": 20,
     "max": 90,
     "step": 1,
     "def": 50,
     "group": "Powertrain",
     "roles": [
      "tank",
      "fuel"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 30,
     "max": 180,
     "step": 1,
     "def": 110,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Auxiliary load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 3000,
     "step": 50,
     "def": 500,
     "group": "Use",
     "roles": [
      "auxiliary",
      "air conditioning",
      "heating",
      "aux"
     ]
    }
   ],
   "commands": [
    "a car",
    "petrol family car 1400 kg at 120 km/h",
    "family car with a 60 L tank and a 96 kW engine"
   ]
  },
  {
   "id": "sports-car",
   "archetype": "VEH",
   "category": "Cars and road vehicles",
   "name": "Sports car",
   "short": "Low, light and powerful",
   "blurb": "A sports car trades space and economy for acceleration and grip: a big engine in a low, light body on wide tyres. At first the tyres limit how hard it can launch, then the engine's power takes over; drag sets the top speed. Try more power, less mass or a slipperier shape.",
   "consts": {
    "drive": "ice",
    "shape": "sports",
    "len": 4.5,
    "height": 1.25,
    "wb": 2.45,
    "wheel": 0.68,
    "mu": 1.05,
    "fd": 0.55,
    "dens": 0.745,
    "lhv": 43.0,
    "co2": 3.17,
    "etad": 0.9,
    "vcap": 320,
    "range_goal": 400,
    "wkg_min": 150
   },
   "aliases": [
    "sports car",
    "supercar",
    "sportscar",
    "coupe",
    "grand tourer",
    "performance car",
    "roadster"
   ],
   "params": [
    {
     "k": "m",
     "label": "Mass with driver",
     "unit": "kg",
     "dim": "mass",
     "min": 900,
     "max": 2200,
     "step": 10,
     "def": 1450,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.25,
     "max": 0.45,
     "step": 0.005,
     "def": 0.33,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area",
     "unit": "m²",
     "dim": "area",
     "min": 1.6,
     "max": 2.4,
     "step": 0.05,
     "def": 1.95,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.008,
     "max": 0.016,
     "step": 0.0005,
     "def": 0.011,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "pm",
     "label": "Engine power",
     "unit": "kW",
     "dim": "power",
     "min": 100,
     "max": 600,
     "step": 5,
     "def": 380,
     "group": "Powertrain",
     "roles": [
      "engine",
      "power"
     ]
    },
    {
     "k": "eng",
     "label": "Engine efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.22,
     "max": 0.4,
     "step": 0.01,
     "def": 0.3,
     "group": "Powertrain",
     "roles": [
      "engine efficiency",
      "thermal efficiency"
     ]
    },
    {
     "k": "tank",
     "label": "Fuel tank",
     "unit": "L",
     "dim": "volume",
     "min": 40,
     "max": 100,
     "step": 1,
     "def": 65,
     "group": "Powertrain",
     "roles": [
      "tank",
      "fuel"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 50,
     "max": 250,
     "step": 1,
     "def": 130,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Auxiliary load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 3000,
     "step": 50,
     "def": 500,
     "group": "Use",
     "roles": [
      "auxiliary",
      "air conditioning",
      "heating",
      "aux"
     ]
    }
   ],
   "commands": [
    "sports car with 300 kW and 1400 kg",
    "supercar with 450 kW at 150 km/h",
    "sports car with a drag coefficient of 0.3"
   ]
  },
  {
   "id": "heavy-goods-truck",
   "archetype": "VEH",
   "category": "Cars and road vehicles",
   "name": "Heavy goods truck",
   "short": "A diesel tractor unit pulling a 40-tonne trailer",
   "blurb": "A loaded articulated truck weighs as much as thirty cars, yet its diesel engine is the most efficient in road transport. Rolling resistance matters far more here than on a car, and the power-to-mass ratio is low, so hills and acceleration are slow. See how mass, drag and cruise speed set the fuel bill.",
   "consts": {
    "drive": "ice",
    "shape": "truck",
    "len": 16.5,
    "height": 4.0,
    "wb": 3.8,
    "wheel": 1.0,
    "mu": 0.7,
    "fd": 0.28,
    "dens": 0.835,
    "lhv": 42.8,
    "co2": 3.16,
    "etad": 0.9,
    "vcap": 90,
    "range_goal": 1200,
    "wkg_min": 6
   },
   "aliases": [
    "heavy goods truck",
    "lorry",
    "truck",
    "hgv",
    "articulated lorry",
    "semi truck",
    "tractor trailer",
    "big rig",
    "articulated truck"
   ],
   "params": [
    {
     "k": "m",
     "label": "Gross mass",
     "unit": "kg",
     "dim": "mass",
     "min": 10000,
     "max": 44000,
     "step": 100,
     "def": 40000,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight",
      "gross"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.45,
     "max": 0.8,
     "step": 0.01,
     "def": 0.6,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area",
     "unit": "m²",
     "dim": "area",
     "min": 7,
     "max": 11,
     "step": 0.1,
     "def": 10,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.004,
     "max": 0.009,
     "step": 0.0002,
     "def": 0.006,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "pm",
     "label": "Engine power",
     "unit": "kW",
     "dim": "power",
     "min": 150,
     "max": 550,
     "step": 5,
     "def": 330,
     "group": "Powertrain",
     "roles": [
      "engine",
      "power"
     ]
    },
    {
     "k": "eng",
     "label": "Engine efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.35,
     "max": 0.47,
     "step": 0.005,
     "def": 0.42,
     "group": "Powertrain",
     "roles": [
      "engine efficiency",
      "thermal efficiency"
     ]
    },
    {
     "k": "tank",
     "label": "Diesel tank",
     "unit": "L",
     "dim": "volume",
     "min": 200,
     "max": 1500,
     "step": 10,
     "def": 600,
     "group": "Powertrain",
     "roles": [
      "tank",
      "fuel",
      "diesel"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 50,
     "max": 90,
     "step": 1,
     "def": 85,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Auxiliary load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 10000,
     "step": 100,
     "def": 2000,
     "group": "Use",
     "roles": [
      "auxiliary",
      "air conditioning",
      "heating",
      "aux",
      "refrigeration"
     ]
    }
   ],
   "commands": [
    "heavy goods truck 40 t at 85 km/h",
    "lorry 36 t with a 330 kW engine",
    "hgv with an 800 L tank at 80 km/h"
   ]
  },
  {
   "id": "motorcycle",
   "archetype": "VEH",
   "category": "Cars and road vehicles",
   "name": "Motorcycle",
   "short": "Two wheels, one rider, a small engine",
   "blurb": "A motorcycle is light, so a modest engine gives brisk acceleration, but the rider sits upright in the wind and the drag area is surprisingly large for its size. Fuel use is low in town and climbs steeply with speed. Change the power, mass and fairing and watch the trade.",
   "consts": {
    "drive": "ice",
    "shape": "moto",
    "len": 2.15,
    "height": 1.15,
    "wb": 1.45,
    "wheel": 0.62,
    "mu": 1.0,
    "fd": 0.6,
    "dens": 0.745,
    "lhv": 43.0,
    "co2": 3.17,
    "etad": 0.88,
    "vcap": 260,
    "range_goal": 250,
    "wkg_min": 50
   },
   "aliases": [
    "motorcycle",
    "motorbike",
    "motor bike",
    "touring motorcycle",
    "sport bike",
    "two-wheeler",
    "naked bike"
   ],
   "params": [
    {
     "k": "m",
     "label": "Mass with rider",
     "unit": "kg",
     "dim": "mass",
     "min": 150,
     "max": 450,
     "step": 5,
     "def": 280,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.4,
     "max": 0.9,
     "step": 0.01,
     "def": 0.6,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area with rider",
     "unit": "m²",
     "dim": "area",
     "min": 0.4,
     "max": 0.9,
     "step": 0.01,
     "def": 0.6,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.012,
     "max": 0.025,
     "step": 0.0005,
     "def": 0.018,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "pm",
     "label": "Power",
     "unit": "kW",
     "dim": "power",
     "min": 5,
     "max": 150,
     "step": 1,
     "def": 70,
     "group": "Powertrain",
     "roles": [
      "power"
     ]
    },
    {
     "k": "eng",
     "label": "Engine efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.2,
     "max": 0.36,
     "step": 0.01,
     "def": 0.28,
     "group": "Powertrain",
     "roles": [
      "thermal efficiency"
     ]
    },
    {
     "k": "tank",
     "label": "Fuel tank",
     "unit": "L",
     "dim": "volume",
     "min": 5,
     "max": 30,
     "step": 0.5,
     "def": 17,
     "group": "Powertrain",
     "roles": [
      "tank",
      "fuel"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 30,
     "max": 180,
     "step": 1,
     "def": 100,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Auxiliary load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 500,
     "step": 10,
     "def": 100,
     "group": "Use",
     "roles": [
      "auxiliary",
      "lights",
      "aux"
     ]
    }
   ],
   "commands": [
    "motorcycle 200 kg with 50 kW power",
    "motorbike at 120 km/h with a 15 L tank",
    "motorcycle with 100 kW power and 250 kg"
   ]
  },
  {
   "id": "battery-electric-car",
   "archetype": "EDRV",
   "category": "Cars and road vehicles",
   "name": "Battery electric car",
   "short": "A battery under the floor and a motor at the wheels",
   "blurb": "An electric car turns about nine tenths of its battery energy into motion and wins back part of it when braking, so town driving is cheap and motorway speed, where drag dominates, is what costs range. Set the mass, battery, motor and cruise speed and follow range, acceleration and the charge used over a trip.",
   "consts": {
    "drive": "ev",
    "shape": "car",
    "len": 4.7,
    "height": 1.45,
    "wb": 2.88,
    "wheel": 0.68,
    "mu": 0.9,
    "fd": 0.5,
    "regen": 0.65,
    "usable": 0.95,
    "vcap": 200,
    "range_goal": 300,
    "pack_wh_kg": 160,
    "wkg_min": 40
   },
   "aliases": [
    "battery electric car",
    "electric car",
    "ev",
    "electric vehicle",
    "bev",
    "electric sedan",
    "electric hatchback"
   ],
   "params": [
    {
     "k": "m",
     "label": "Mass with driver",
     "unit": "kg",
     "dim": "mass",
     "min": 800,
     "max": 3000,
     "step": 10,
     "def": 1800,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.2,
     "max": 0.4,
     "step": 0.005,
     "def": 0.25,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area",
     "unit": "m²",
     "dim": "area",
     "min": 1.8,
     "max": 3.2,
     "step": 0.05,
     "def": 2.3,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.006,
     "max": 0.015,
     "step": 0.0005,
     "def": 0.009,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "e",
     "label": "Battery",
     "unit": "kWh",
     "dim": "energy",
     "min": 20,
     "max": 120,
     "step": 1,
     "def": 75,
     "group": "Powertrain",
     "roles": [
      "battery",
      "pack"
     ]
    },
    {
     "k": "pm",
     "label": "Motor power",
     "unit": "kW",
     "dim": "power",
     "min": 50,
     "max": 500,
     "step": 5,
     "def": 200,
     "group": "Powertrain",
     "roles": [
      "motor",
      "power"
     ]
    },
    {
     "k": "eta",
     "label": "Battery-to-wheel efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.8,
     "max": 0.95,
     "step": 0.005,
     "def": 0.9,
     "group": "Powertrain",
     "roles": [
      "drivetrain efficiency",
      "efficiency"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 30,
     "max": 180,
     "step": 1,
     "def": 110,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Auxiliary load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 5000,
     "step": 50,
     "def": 1000,
     "group": "Use",
     "roles": [
      "auxiliary",
      "air conditioning",
      "heating",
      "aux"
     ]
    }
   ],
   "commands": [
    "electric car 1800 kg 75 kWh, range at 110 km/h",
    "battery electric car with 60 kWh and a 150 kW motor",
    "ev at 130 km/h with 100 kWh"
   ]
  },
  {
   "id": "electric-bus",
   "archetype": "EDRV",
   "category": "Cars and road vehicles",
   "name": "Electric bus",
   "short": "A 12 m city bus running on batteries",
   "blurb": "A city bus stops every few hundred metres, which suits electric drive: each stop gives energy back through regenerative braking. Heating and air conditioning can then take a large share of the battery, especially in winter. Here the bus drives an urban stop-start cycle built from repeated short trips.",
   "consts": {
    "drive": "ev",
    "shape": "bus",
    "len": 12.0,
    "height": 3.2,
    "wb": 6.0,
    "wheel": 1.0,
    "mu": 0.7,
    "fd": 0.6,
    "regen": 0.7,
    "usable": 0.9,
    "cycle": "urban",
    "vcap": 70,
    "range_goal": 250,
    "pack_wh_kg": 140,
    "wkg_min": 8
   },
   "aliases": [
    "electric bus",
    "battery bus",
    "e-bus",
    "electric city bus",
    "zero-emission bus",
    "battery electric bus"
   ],
   "params": [
    {
     "k": "m",
     "label": "Mass with passengers",
     "unit": "kg",
     "dim": "mass",
     "min": 10000,
     "max": 30000,
     "step": 100,
     "def": 18000,
     "group": "Vehicle",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "cd",
     "label": "Drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.5,
     "max": 0.9,
     "step": 0.01,
     "def": 0.7,
     "group": "Vehicle",
     "roles": [
      "drag coefficient",
      "cd"
     ]
    },
    {
     "k": "a",
     "label": "Frontal area",
     "unit": "m²",
     "dim": "area",
     "min": 6,
     "max": 10,
     "step": 0.1,
     "def": 8.5,
     "group": "Vehicle",
     "roles": [
      "frontal area",
      "frontal"
     ]
    },
    {
     "k": "crr",
     "label": "Rolling resistance coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.005,
     "max": 0.012,
     "step": 0.0005,
     "def": 0.007,
     "group": "Vehicle",
     "roles": [
      "rolling resistance",
      "crr",
      "tyres"
     ]
    },
    {
     "k": "e",
     "label": "Battery",
     "unit": "kWh",
     "dim": "energy",
     "min": 100,
     "max": 700,
     "step": 5,
     "def": 350,
     "group": "Powertrain",
     "roles": [
      "battery",
      "pack"
     ]
    },
    {
     "k": "pm",
     "label": "Motor power",
     "unit": "kW",
     "dim": "power",
     "min": 100,
     "max": 400,
     "step": 5,
     "def": 250,
     "group": "Powertrain",
     "roles": [
      "motor",
      "power"
     ]
    },
    {
     "k": "eta",
     "label": "Battery-to-wheel efficiency",
     "unit": "",
     "dim": "ratio",
     "min": 0.8,
     "max": 0.94,
     "step": 0.005,
     "def": 0.88,
     "group": "Powertrain",
     "roles": [
      "drivetrain efficiency",
      "efficiency"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 20,
     "max": 80,
     "step": 1,
     "def": 50,
     "group": "Use",
     "roles": [
      "cruise",
      "at",
      "speed"
     ]
    },
    {
     "k": "aux",
     "label": "Heating and cooling load",
     "unit": "W",
     "dim": "power",
     "min": 0,
     "max": 30000,
     "step": 500,
     "def": 10000,
     "group": "Use",
     "roles": [
      "heating",
      "cooling",
      "air conditioning",
      "auxiliary",
      "hvac"
     ]
    }
   ],
   "commands": [
    "electric bus 18 t with 350 kWh",
    "battery bus at 40 km/h with 15 kW heating",
    "e-bus with a 250 kW motor and 500 kWh"
   ]
  },
  {
   "id": "high-speed-train",
   "archetype": "RAIL",
   "category": "Rail transport",
   "name": "High-speed train",
   "short": "Ten cars at 300 km/h between distant stations",
   "blurb": "A high-speed train spends most of a long run at line speed, where aerodynamic drag is the main resistance, so energy per seat rises quickly with speed. Starting and stopping take minutes and several kilometres. Set the power, line speed and station spacing and read the timetable and the energy bill.",
   "consts": {
    "r0": 0.0012,
    "cda": 12.0,
    "eta": 0.85,
    "regen": 0.6,
    "aux": 300,
    "dwell": 120,
    "cars": 10,
    "carlen": 20,
    "power": "ends"
   },
   "aliases": [
    "high-speed train",
    "high speed train",
    "bullet train",
    "high-speed rail",
    "express train",
    "intercity express",
    "hsr"
   ],
   "params": [
    {
     "k": "m",
     "label": "Train mass",
     "unit": "t",
     "dim": "mass",
     "min": 200,
     "max": 900,
     "step": 5,
     "def": 420,
     "group": "Train",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "p",
     "label": "Traction power",
     "unit": "MW",
     "dim": "power",
     "min": 2,
     "max": 20,
     "step": 0.1,
     "def": 8.8,
     "group": "Train",
     "roles": [
      "power",
      "traction"
     ]
    },
    {
     "k": "seats",
     "label": "Seats",
     "unit": "",
     "dim": "count",
     "min": 100,
     "max": 1300,
     "step": 10,
     "def": 500,
     "group": "Train",
     "roles": [
      "seats",
      "seat",
      "passengers"
     ]
    },
    {
     "k": "vmax",
     "label": "Line speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 160,
     "max": 360,
     "step": 5,
     "def": 300,
     "group": "Line",
     "roles": [
      "line speed",
      "top speed",
      "at",
      "max speed"
     ]
    },
    {
     "k": "dist",
     "label": "Station spacing",
     "unit": "km",
     "dim": "length",
     "min": 10,
     "max": 400,
     "step": 1,
     "def": 100,
     "group": "Line",
     "roles": [
      "apart",
      "spacing",
      "between stations",
      "stations"
     ]
    },
    {
     "k": "a",
     "label": "Acceleration limit",
     "unit": "m/s²",
     "dim": "ratio",
     "min": 0.2,
     "max": 1.0,
     "step": 0.05,
     "def": 0.5,
     "group": "Line",
     "roles": [
      "acceleration",
      "accelerating"
     ]
    },
    {
     "k": "b",
     "label": "Braking rate",
     "unit": "m/s²",
     "dim": "ratio",
     "min": 0.3,
     "max": 1.2,
     "step": 0.05,
     "def": 0.6,
     "group": "Line",
     "roles": [
      "braking",
      "deceleration"
     ]
    }
   ],
   "commands": [
    "high-speed train 300 km/h, stations 100 km apart",
    "high speed train with 8 MW and 600 seats",
    "bullet train 450 t at 320 km/h"
   ]
  },
  {
   "id": "metro-train",
   "archetype": "RAIL",
   "category": "Rail transport",
   "name": "Metro train",
   "short": "A six-car underground train with stops a kilometre apart",
   "blurb": "A metro train rarely cruises: with stations about a kilometre apart it is almost always accelerating or braking, so high acceleration and regenerative braking matter more than top speed. Change the spacing and see how the average speed and the number of trains per hour respond.",
   "consts": {
    "r0": 0.002,
    "cda": 8.0,
    "eta": 0.85,
    "regen": 0.8,
    "aux": 100,
    "dwell": 30,
    "cars": 6,
    "carlen": 20,
    "power": "distributed"
   },
   "aliases": [
    "metro train",
    "metro",
    "subway train",
    "subway",
    "underground train",
    "tube train",
    "rapid transit train"
   ],
   "params": [
    {
     "k": "m",
     "label": "Train mass",
     "unit": "t",
     "dim": "mass",
     "min": 80,
     "max": 400,
     "step": 5,
     "def": 200,
     "group": "Train",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "p",
     "label": "Traction power",
     "unit": "MW",
     "dim": "power",
     "min": 1,
     "max": 6,
     "step": 0.1,
     "def": 3,
     "group": "Train",
     "roles": [
      "power",
      "traction"
     ]
    },
    {
     "k": "seats",
     "label": "Seats",
     "unit": "",
     "dim": "count",
     "min": 100,
     "max": 600,
     "step": 10,
     "def": 250,
     "group": "Train",
     "roles": [
      "seats",
      "seat",
      "passengers"
     ]
    },
    {
     "k": "vmax",
     "label": "Line speed",
     "unit": "km/h",
     "dim": "speed",
     "min": 40,
     "max": 120,
     "step": 1,
     "def": 80,
     "group": "Line",
     "roles": [
      "line speed",
      "top speed",
      "at",
      "max speed"
     ]
    },
    {
     "k": "dist",
     "label": "Station spacing",
     "unit": "km",
     "dim": "length",
     "min": 0.4,
     "max": 4,
     "step": 0.05,
     "def": 1.2,
     "group": "Line",
     "roles": [
      "apart",
      "spacing",
      "between stations",
      "stations"
     ]
    },
    {
     "k": "a",
     "label": "Acceleration limit",
     "unit": "m/s²",
     "dim": "ratio",
     "min": 0.6,
     "max": 1.4,
     "step": 0.05,
     "def": 1.1,
     "group": "Line",
     "roles": [
      "acceleration",
      "accelerating"
     ]
    },
    {
     "k": "b",
     "label": "Braking rate",
     "unit": "m/s²",
     "dim": "ratio",
     "min": 0.6,
     "max": 1.3,
     "step": 0.05,
     "def": 1.0,
     "group": "Line",
     "roles": [
      "braking",
      "deceleration"
     ]
    }
   ],
   "commands": [
    "metro train with stations 1 km apart",
    "subway train 80 km/h, 1.5 km spacing",
    "underground train 300 seats at 90 km/h"
   ]
  },
  {
   "id": "narrow-body-jet-airliner",
   "archetype": "AIRC",
   "category": "Aircraft",
   "name": "Narrow-body jet airliner",
   "short": "A single-aisle twinjet for medium routes",
   "blurb": "The single-aisle twinjet carries most of the world's air travellers. It cruises high, where the thin air lowers drag, at the speed that balances lift-to-drag against engine efficiency. Set payload, fuel and the wing and read the range, the take-off run and the ceiling, with the payload-range trade drawn out.",
   "consts": {
    "kind": "jet",
    "mscale": 1000,
    "oew": 42,
    "mtow": 79,
    "plmax": 20,
    "fuelmax": 21,
    "e": 0.8,
    "clmax": 1.5,
    "clto": 2.2,
    "lapse": 0.8,
    "mmo": 0.82,
    "len": 39.5,
    "fw": 3.95,
    "taper": 0.25,
    "sweep": 25,
    "wingpos": 0.38,
    "htail": 0.36,
    "vtail": 0.2,
    "engines": "wing",
    "dihedral": 0.08
   },
   "aliases": [
    "narrow-body jet airliner",
    "narrow-body airliner",
    "narrow body airliner",
    "jet airliner",
    "airliner",
    "single-aisle airliner",
    "passenger jet",
    "medium-haul jet"
   ],
   "params": [
    {
     "k": "payload",
     "label": "Payload",
     "unit": "t",
     "dim": "mass",
     "min": 0,
     "max": 25,
     "step": 0.1,
     "def": 18,
     "group": "Mass",
     "roles": [
      "payload",
      "passengers",
      "cargo"
     ]
    },
    {
     "k": "fuel",
     "label": "Fuel",
     "unit": "t",
     "dim": "mass",
     "min": 2,
     "max": 21,
     "step": 0.1,
     "def": 15,
     "group": "Mass",
     "roles": [
      "fuel"
     ]
    },
    {
     "k": "s",
     "label": "Wing area",
     "unit": "m²",
     "dim": "area",
     "min": 90,
     "max": 160,
     "step": 1,
     "def": 125,
     "group": "Wing",
     "roles": [
      "wing",
      "wing area"
     ]
    },
    {
     "k": "ar",
     "label": "Aspect ratio",
     "unit": "",
     "dim": "ratio",
     "min": 7,
     "max": 12,
     "step": 0.1,
     "def": 9.5,
     "group": "Wing",
     "roles": [
      "aspect ratio",
      "aspect"
     ]
    },
    {
     "k": "cd0",
     "label": "Zero-lift drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.015,
     "max": 0.035,
     "step": 0.0005,
     "def": 0.022,
     "group": "Wing",
     "roles": [
      "zero-lift drag",
      "cd0",
      "parasite drag"
     ]
    },
    {
     "k": "h",
     "label": "Cruise height",
     "unit": "m",
     "dim": "length",
     "min": 3000,
     "max": 13000,
     "step": 100,
     "def": 11000,
     "group": "Flight",
     "roles": [
      "altitude",
      "height",
      "at",
      "cruise height"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed (true)",
     "unit": "km/h",
     "dim": "speed",
     "min": 500,
     "max": 950,
     "step": 5,
     "def": 830,
     "group": "Flight",
     "roles": [
      "cruise",
      "speed",
      "at"
     ]
    },
    {
     "k": "thr",
     "label": "Total take-off thrust",
     "unit": "kN",
     "dim": "force",
     "min": 150,
     "max": 320,
     "step": 1,
     "def": 240,
     "group": "Engines",
     "roles": [
      "thrust",
      "engines"
     ]
    },
    {
     "k": "tsfc",
     "label": "Cruise fuel per thrust",
     "unit": "g/kN·s",
     "dim": "ratio",
     "min": 12,
     "max": 22,
     "step": 0.1,
     "def": 16,
     "group": "Engines",
     "roles": [
      "tsfc",
      "fuel consumption"
     ]
    }
   ],
   "commands": [
    "narrow-body airliner with 18 t payload at 11000 m",
    "jet airliner 125 m2 wing, aspect ratio 9.5",
    "airliner with 15 t fuel at 850 km/h"
   ]
  },
  {
   "id": "business-jet",
   "archetype": "AIRC",
   "category": "Aircraft",
   "name": "Business jet",
   "short": "A small, fast jet with engines at the tail",
   "blurb": "A business jet flies higher and nearly as fast as an airliner with a handful of passengers, its engines mounted on the rear fuselage to keep the wing clean. Fuel makes up a big share of its take-off mass. Change the wing, the fuel and the cruise height and see range, ceiling and field length move.",
   "consts": {
    "kind": "jet",
    "mscale": 1000,
    "oew": 11.5,
    "mtow": 19.5,
    "plmax": 2.0,
    "fuelmax": 8,
    "e": 0.8,
    "clmax": 1.4,
    "clto": 1.9,
    "lapse": 0.8,
    "mmo": 0.85,
    "len": 21,
    "fw": 2.4,
    "taper": 0.35,
    "sweep": 28,
    "wingpos": 0.42,
    "htail": 0.33,
    "vtail": 0.22,
    "engines": "rear",
    "dihedral": 0.06
   },
   "aliases": [
    "business jet",
    "private jet",
    "bizjet",
    "executive jet",
    "corporate jet",
    "light jet"
   ],
   "params": [
    {
     "k": "payload",
     "label": "Payload",
     "unit": "t",
     "dim": "mass",
     "min": 0,
     "max": 2.5,
     "step": 0.05,
     "def": 1.0,
     "group": "Mass",
     "roles": [
      "payload",
      "passengers",
      "cargo"
     ]
    },
    {
     "k": "fuel",
     "label": "Fuel",
     "unit": "t",
     "dim": "mass",
     "min": 1,
     "max": 8,
     "step": 0.1,
     "def": 6,
     "group": "Mass",
     "roles": [
      "fuel"
     ]
    },
    {
     "k": "s",
     "label": "Wing area",
     "unit": "m²",
     "dim": "area",
     "min": 25,
     "max": 80,
     "step": 0.5,
     "def": 50,
     "group": "Wing",
     "roles": [
      "wing",
      "wing area"
     ]
    },
    {
     "k": "ar",
     "label": "Aspect ratio",
     "unit": "",
     "dim": "ratio",
     "min": 6,
     "max": 10,
     "step": 0.1,
     "def": 7.5,
     "group": "Wing",
     "roles": [
      "aspect ratio",
      "aspect"
     ]
    },
    {
     "k": "cd0",
     "label": "Zero-lift drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.015,
     "max": 0.035,
     "step": 0.0005,
     "def": 0.022,
     "group": "Wing",
     "roles": [
      "zero-lift drag",
      "cd0",
      "parasite drag"
     ]
    },
    {
     "k": "h",
     "label": "Cruise height",
     "unit": "m",
     "dim": "length",
     "min": 5000,
     "max": 15000,
     "step": 100,
     "def": 13000,
     "group": "Flight",
     "roles": [
      "altitude",
      "height",
      "at",
      "cruise height"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed (true)",
     "unit": "km/h",
     "dim": "speed",
     "min": 500,
     "max": 950,
     "step": 5,
     "def": 850,
     "group": "Flight",
     "roles": [
      "cruise",
      "speed",
      "at"
     ]
    },
    {
     "k": "thr",
     "label": "Total take-off thrust",
     "unit": "kN",
     "dim": "force",
     "min": 20,
     "max": 80,
     "step": 1,
     "def": 60,
     "group": "Engines",
     "roles": [
      "thrust",
      "engines"
     ]
    },
    {
     "k": "tsfc",
     "label": "Cruise fuel per thrust",
     "unit": "g/kN·s",
     "dim": "ratio",
     "min": 14,
     "max": 24,
     "step": 0.1,
     "def": 18,
     "group": "Engines",
     "roles": [
      "tsfc",
      "fuel consumption"
     ]
    }
   ],
   "commands": [
    "business jet with 1 t payload at 13000 m",
    "private jet with 6 t fuel and 60 kN thrust",
    "bizjet at 800 km/h"
   ]
  },
  {
   "id": "light-single-engine-aircraft",
   "archetype": "AIRC",
   "category": "Aircraft",
   "name": "Light single-engine aircraft",
   "short": "A four-seat piston trainer",
   "blurb": "The four-seat high-wing trainer is where most pilots learn: a piston engine turns a propeller, the wing is straight and thick, and it flies slow enough to land on a short grass strip. Change the engine, the wing and the load and read the range, the climb ceiling and the take-off run.",
   "consts": {
    "kind": "prop",
    "mscale": 1,
    "oew": 760,
    "mtow": 1160,
    "plmax": 400,
    "fuelmax": 160,
    "e": 0.75,
    "clmax": 1.6,
    "clto": 2.0,
    "eta_p": 0.8,
    "len": 8.3,
    "fw": 1.1,
    "taper": 0.7,
    "sweep": 0,
    "wingpos": 0.3,
    "htail": 0.32,
    "vtail": 0.2,
    "dihedral": 0.03
   },
   "aliases": [
    "light single-engine aircraft",
    "light aircraft",
    "single-engine aircraft",
    "piston aircraft",
    "trainer aircraft",
    "four-seat aircraft",
    "light plane"
   ],
   "params": [
    {
     "k": "payload",
     "label": "Payload",
     "unit": "kg",
     "dim": "mass",
     "min": 0,
     "max": 450,
     "step": 5,
     "def": 270,
     "group": "Mass",
     "roles": [
      "payload",
      "passengers",
      "people"
     ]
    },
    {
     "k": "fuel",
     "label": "Fuel",
     "unit": "kg",
     "dim": "mass",
     "min": 20,
     "max": 200,
     "step": 1,
     "def": 110,
     "group": "Mass",
     "roles": [
      "fuel"
     ]
    },
    {
     "k": "s",
     "label": "Wing area",
     "unit": "m²",
     "dim": "area",
     "min": 10,
     "max": 25,
     "step": 0.1,
     "def": 16.2,
     "group": "Wing",
     "roles": [
      "wing",
      "wing area"
     ]
    },
    {
     "k": "ar",
     "label": "Aspect ratio",
     "unit": "",
     "dim": "ratio",
     "min": 6,
     "max": 10,
     "step": 0.1,
     "def": 7.4,
     "group": "Wing",
     "roles": [
      "aspect ratio",
      "aspect"
     ]
    },
    {
     "k": "cd0",
     "label": "Zero-lift drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.02,
     "max": 0.05,
     "step": 0.0005,
     "def": 0.03,
     "group": "Wing",
     "roles": [
      "zero-lift drag",
      "cd0",
      "parasite drag"
     ]
    },
    {
     "k": "h",
     "label": "Cruise height",
     "unit": "m",
     "dim": "length",
     "min": 0,
     "max": 5000,
     "step": 50,
     "def": 2500,
     "group": "Flight",
     "roles": [
      "altitude",
      "height",
      "at",
      "cruise height"
     ]
    },
    {
     "k": "v",
     "label": "Cruise speed (true)",
     "unit": "km/h",
     "dim": "speed",
     "min": 120,
     "max": 300,
     "step": 1,
     "def": 220,
     "group": "Flight",
     "roles": [
      "cruise",
      "speed",
      "at"
     ]
    },
    {
     "k": "pw",
     "label": "Engine power",
     "unit": "kW",
     "dim": "power",
     "min": 60,
     "max": 250,
     "step": 1,
     "def": 120,
     "group": "Engine",
     "roles": [
      "engine",
      "power"
     ]
    },
    {
     "k": "bsfc",
     "label": "Fuel per unit energy",
     "unit": "g/kWh",
     "dim": "ratio",
     "min": 230,
     "max": 380,
     "step": 1,
     "def": 300,
     "group": "Engine",
     "roles": [
      "bsfc",
      "fuel consumption"
     ]
    }
   ],
   "commands": [
    "light aircraft 120 kW at 220 km/h",
    "single-engine aircraft with 300 kg payload and 120 kg fuel",
    "light plane cruising at 3000 m"
   ]
  },
  {
   "id": "glider-sailplane",
   "archetype": "AIRC",
   "category": "Aircraft",
   "name": "Glider (sailplane)",
   "short": "No engine: long wings and rising air",
   "blurb": "A sailplane has no engine; it trades height for distance and climbs again in rising air. Its very long, slender wings give glide ratios of 40 to 1 or better, so from a kilometre up it can cover forty kilometres of still air. Change the wing and the thermal strength and find the best speed to fly between thermals.",
   "consts": {
    "kind": "glider",
    "e": 0.9,
    "clmax": 1.4,
    "vne": 270,
    "len": 6.7,
    "fw": 0.65,
    "taper": 0.4,
    "sweep": 0,
    "wingpos": 0.35,
    "htail": 0.17,
    "vtail": 0.2,
    "dihedral": 0.05
   },
   "aliases": [
    "glider",
    "sailplane",
    "soaring glider",
    "competition glider",
    "glider sailplane",
    "gliding plane"
   ],
   "params": [
    {
     "k": "m",
     "label": "All-up mass",
     "unit": "kg",
     "dim": "mass",
     "min": 250,
     "max": 750,
     "step": 5,
     "def": 450,
     "group": "Mass",
     "roles": [
      "mass",
      "weighing",
      "weight"
     ]
    },
    {
     "k": "s",
     "label": "Wing area",
     "unit": "m²",
     "dim": "area",
     "min": 8,
     "max": 18,
     "step": 0.1,
     "def": 10.5,
     "group": "Wing",
     "roles": [
      "wing",
      "wing area"
     ]
    },
    {
     "k": "ar",
     "label": "Aspect ratio",
     "unit": "",
     "dim": "ratio",
     "min": 12,
     "max": 40,
     "step": 0.5,
     "def": 21,
     "group": "Wing",
     "roles": [
      "aspect ratio",
      "aspect"
     ]
    },
    {
     "k": "cd0",
     "label": "Zero-lift drag coefficient",
     "unit": "",
     "dim": "ratio",
     "min": 0.006,
     "max": 0.015,
     "step": 0.0002,
     "def": 0.009,
     "group": "Wing",
     "roles": [
      "zero-lift drag",
      "cd0",
      "parasite drag"
     ]
    },
    {
     "k": "h",
     "label": "Height to glide from",
     "unit": "m",
     "dim": "length",
     "min": 100,
     "max": 4000,
     "step": 50,
     "def": 1000,
     "group": "Flight",
     "roles": [
      "from",
      "height",
      "altitude",
      "launch"
     ]
    },
    {
     "k": "v",
     "label": "Airspeed",
     "unit": "km/h",
     "dim": "speed",
     "min": 70,
     "max": 250,
     "step": 1,
     "def": 110,
     "group": "Flight",
     "roles": [
      "airspeed",
      "speed",
      "at"
     ]
    },
    {
     "k": "climb",
     "label": "Average climb in thermals",
     "unit": "m/s",
     "dim": "speed",
     "min": 0.25,
     "max": 5,
     "step": 0.05,
     "def": 2,
     "group": "Flight",
     "roles": [
      "thermals",
      "thermal",
      "climb"
     ]
    }
   ],
   "commands": [
    "glider 450 kg with 2 m/s thermals",
    "sailplane with aspect ratio 25 from 1500 m",
    "glider at 120 km/h"
   ]
  },
  {
   "id": "warren-truss-bridge",
   "archetype": "TRUSS",
   "category": "Bridges",
   "name": "Warren truss bridge",
   "short": "Equal triangles carry the deck by tension and compression",
   "blurb": "A Warren truss uses a zigzag of diagonals between two chords, so every member is a straight bar that only pulls or pushes. Set the span, depth and panel count and the stiffness solution gives every member force, the deflection under load and which bar would buckle first.",
   "consts": {
    "pattern": "warren"
   },
   "aliases": [
    "warren truss",
    "warren bridge",
    "truss bridge",
    "triangulated truss",
    "steel truss bridge",
    "lattice girder",
    "truss",
    "warren girder"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 10,
     "max": 200,
     "step": 1,
     "def": 60,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "h",
     "label": "Depth",
     "unit": "m",
     "dim": "length",
     "min": 2,
     "max": 25,
     "step": 0.1,
     "def": 8,
     "group": "Geometry",
     "roles": [
      "deep",
      "depth",
      "high",
      "tall"
     ]
    },
    {
     "k": "panels",
     "label": "Panels",
     "unit": "",
     "dim": "count",
     "min": 4,
     "max": 20,
     "step": 1,
     "def": 8,
     "group": "Geometry",
     "roles": [
      "panel",
      "panels",
      "bays"
     ]
    },
    {
     "k": "p",
     "label": "Load at each panel point",
     "unit": "kN",
     "dim": "force",
     "min": 10,
     "max": 2000,
     "step": 5,
     "def": 200,
     "group": "Loads",
     "roles": [
      "load",
      "loads",
      "panel load",
      "panel point"
     ]
    },
    {
     "k": "a",
     "label": "Chord area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 1000,
     "step": 5,
     "def": 120,
     "group": "Members",
     "roles": [
      "chord",
      "chord area",
      "chords"
     ]
    },
    {
     "k": "ad",
     "label": "Diagonal area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 800,
     "step": 5,
     "def": 80,
     "group": "Members",
     "roles": [
      "diagonal",
      "diagonals",
      "web"
     ]
    },
    {
     "k": "mat",
     "label": "Steel grade",
     "choices": [
      "S275",
      "S355",
      "S460"
     ],
     "def": "S355",
     "group": "Members",
     "roles": [
      "steel",
      "grade"
     ],
     "words": {
      "mild steel": "S275",
      "high strength": "S460",
      "high-strength": "S460"
     }
    }
   ],
   "commands": [
    "warren truss bridge 60 m span 8 m deep",
    "warren truss 90 m span with 10 panels and 300 kN panel loads",
    "warren bridge 40 m long in S460 steel"
   ]
  },
  {
   "id": "pratt-truss-bridge",
   "archetype": "TRUSS",
   "category": "Bridges",
   "name": "Pratt truss bridge",
   "short": "Verticals in compression, diagonals in tension",
   "blurb": "In a Pratt truss the diagonals slope down towards the middle, so under the deck load they hang in tension while the shorter verticals push. Slender tension bars are efficient in steel, which made the pattern a favourite for railway bridges. Change the depth to find the lightest proportion.",
   "consts": {
    "pattern": "pratt"
   },
   "aliases": [
    "pratt truss",
    "pratt bridge",
    "pratt girder",
    "through truss",
    "railway truss",
    "n truss",
    "steel pratt truss"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 10,
     "max": 200,
     "step": 1,
     "def": 48,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "h",
     "label": "Depth",
     "unit": "m",
     "dim": "length",
     "min": 2,
     "max": 25,
     "step": 0.1,
     "def": 6,
     "group": "Geometry",
     "roles": [
      "deep",
      "depth",
      "high",
      "tall"
     ]
    },
    {
     "k": "panels",
     "label": "Panels (even)",
     "unit": "",
     "dim": "count",
     "min": 4,
     "max": 20,
     "step": 2,
     "def": 8,
     "group": "Geometry",
     "roles": [
      "panel",
      "panels",
      "bays"
     ]
    },
    {
     "k": "p",
     "label": "Load at each panel point",
     "unit": "kN",
     "dim": "force",
     "min": 10,
     "max": 2000,
     "step": 5,
     "def": 150,
     "group": "Loads",
     "roles": [
      "load",
      "loads",
      "panel load",
      "panel point"
     ]
    },
    {
     "k": "a",
     "label": "Chord area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 1000,
     "step": 5,
     "def": 100,
     "group": "Members",
     "roles": [
      "chord",
      "chord area",
      "chords"
     ]
    },
    {
     "k": "ad",
     "label": "Web member area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 800,
     "step": 5,
     "def": 70,
     "group": "Members",
     "roles": [
      "diagonal",
      "diagonals",
      "web",
      "verticals"
     ]
    },
    {
     "k": "mat",
     "label": "Steel grade",
     "choices": [
      "S275",
      "S355",
      "S460"
     ],
     "def": "S355",
     "group": "Members",
     "roles": [
      "steel",
      "grade"
     ],
     "words": {
      "mild steel": "S275",
      "high strength": "S460",
      "high-strength": "S460"
     }
    }
   ],
   "commands": [
    "pratt truss 40 m span with 150 kN panel loads",
    "pratt truss bridge 48 m span 6 m deep with 12 panels",
    "railway truss 80 m span 10 m deep"
   ]
  },
  {
   "id": "howe-truss-bridge",
   "archetype": "TRUSS",
   "category": "Bridges",
   "name": "Howe truss bridge",
   "short": "Diagonals push, verticals pull",
   "blurb": "The Howe truss mirrors the Pratt: its diagonals slope up towards the middle and work in compression, while the verticals carry tension. It suited timber bridges with iron rods as verticals. Compare it with the Pratt at the same span and see which members now govern by buckling.",
   "consts": {
    "pattern": "howe"
   },
   "aliases": [
    "howe truss",
    "howe bridge",
    "timber truss bridge",
    "howe girder",
    "covered bridge truss",
    "wooden truss bridge"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 10,
     "max": 200,
     "step": 1,
     "def": 36,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "h",
     "label": "Depth",
     "unit": "m",
     "dim": "length",
     "min": 2,
     "max": 25,
     "step": 0.1,
     "def": 5,
     "group": "Geometry",
     "roles": [
      "deep",
      "depth",
      "high",
      "tall"
     ]
    },
    {
     "k": "panels",
     "label": "Panels (even)",
     "unit": "",
     "dim": "count",
     "min": 4,
     "max": 20,
     "step": 2,
     "def": 8,
     "group": "Geometry",
     "roles": [
      "panel",
      "panels",
      "bays"
     ]
    },
    {
     "k": "p",
     "label": "Load at each panel point",
     "unit": "kN",
     "dim": "force",
     "min": 10,
     "max": 2000,
     "step": 5,
     "def": 120,
     "group": "Loads",
     "roles": [
      "load",
      "loads",
      "panel load",
      "panel point"
     ]
    },
    {
     "k": "a",
     "label": "Chord area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 1000,
     "step": 5,
     "def": 90,
     "group": "Members",
     "roles": [
      "chord",
      "chord area",
      "chords"
     ]
    },
    {
     "k": "ad",
     "label": "Web member area",
     "unit": "cm²",
     "dim": "area",
     "min": 10,
     "max": 800,
     "step": 5,
     "def": 80,
     "group": "Members",
     "roles": [
      "diagonal",
      "diagonals",
      "web",
      "verticals"
     ]
    },
    {
     "k": "mat",
     "label": "Steel grade",
     "choices": [
      "S275",
      "S355",
      "S460"
     ],
     "def": "S275",
     "group": "Members",
     "roles": [
      "steel",
      "grade"
     ],
     "words": {
      "mild steel": "S275",
      "high strength": "S460",
      "high-strength": "S460"
     }
    }
   ],
   "commands": [
    "howe truss bridge 36 m span",
    "howe truss 50 m span 6 m deep with 10 panels",
    "howe bridge with 200 kN panel loads"
   ]
  },
  {
   "id": "steel-girder-bridge",
   "archetype": "BEAM",
   "category": "Bridges",
   "name": "Steel girder bridge",
   "short": "Deep plate girders spanning between piers",
   "blurb": "A girder bridge carries its deck on deep steel I-beams that work in bending: the flanges take tension and compression, the web takes shear. Drag the span and watch the moment grow with its square and the deflection with its fourth power, then deepen the girder to win it back.",
   "consts": {},
   "aliases": [
    "girder bridge",
    "plate girder bridge",
    "steel girder",
    "plate girder",
    "beam bridge",
    "highway girder",
    "steel beam bridge"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 8,
     "max": 60,
     "step": 0.5,
     "def": 30,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "supp",
     "label": "Supports",
     "choices": [
      "simple",
      "fixed",
      "two-span"
     ],
     "def": "simple",
     "group": "Geometry",
     "roles": [
      "supports"
     ],
     "words": {
      "simply supported": "simple",
      "fixed ends": "fixed",
      "continuous": "two-span",
      "two spans": "two-span"
     }
    },
    {
     "k": "w",
     "label": "Deck load per girder",
     "unit": "kN/m",
     "dim": "lineload",
     "min": 0,
     "max": 200,
     "step": 1,
     "def": 40,
     "group": "Loads",
     "roles": [
      "deck load",
      "load",
      "distributed"
     ]
    },
    {
     "k": "pt",
     "label": "Axle load at mid-span",
     "unit": "kN",
     "dim": "force",
     "min": 0,
     "max": 1500,
     "step": 5,
     "def": 300,
     "group": "Loads",
     "roles": [
      "axle",
      "point load",
      "truck",
      "vehicle"
     ]
    },
    {
     "k": "d",
     "label": "Girder depth",
     "unit": "mm",
     "dim": "length",
     "min": 400,
     "max": 3000,
     "step": 10,
     "def": 1500,
     "group": "Section",
     "roles": [
      "deep",
      "depth",
      "girder depth"
     ]
    },
    {
     "k": "bf",
     "label": "Flange width",
     "unit": "mm",
     "dim": "length",
     "min": 150,
     "max": 1000,
     "step": 5,
     "def": 500,
     "group": "Section",
     "roles": [
      "flange width",
      "wide"
     ]
    },
    {
     "k": "tf",
     "label": "Flange thickness",
     "unit": "mm",
     "dim": "length",
     "min": 8,
     "max": 80,
     "step": 1,
     "def": 40,
     "group": "Section",
     "roles": [
      "flange thickness",
      "flange"
     ]
    },
    {
     "k": "tw",
     "label": "Web thickness",
     "unit": "mm",
     "dim": "length",
     "min": 6,
     "max": 40,
     "step": 1,
     "def": 16,
     "group": "Section",
     "roles": [
      "web thickness",
      "web"
     ]
    },
    {
     "k": "mat",
     "label": "Steel grade",
     "choices": [
      "S275",
      "S355",
      "S460"
     ],
     "def": "S355",
     "group": "Section",
     "roles": [
      "steel",
      "grade"
     ],
     "words": {
      "high strength": "S460",
      "high-strength": "S460"
     }
    }
   ],
   "commands": [
    "steel girder bridge 30 m span",
    "girder bridge 40 m span with a 1800 mm deep girder",
    "plate girder bridge two spans of 25 m with 50 kN/m deck load"
   ]
  },
  {
   "id": "footbridge",
   "archetype": "BEAM",
   "category": "Bridges",
   "name": "Footbridge",
   "short": "A light span for people, checked for walking vibration",
   "blurb": "A footbridge is light, so its strength is rarely the problem: a crowd walking at about two steps a second can make a lively span bounce. Besides stress and deflection, this one checks that the first vertical frequency stays above 3 Hz, out of reach of footfall.",
   "consts": {
    "check": "footfall"
   },
   "aliases": [
    "footbridge",
    "pedestrian bridge",
    "foot bridge",
    "walkway bridge",
    "cycle bridge",
    "pedestrian footbridge"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 5,
     "max": 50,
     "step": 0.5,
     "def": 20,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "supp",
     "label": "Supports",
     "choices": [
      "simple",
      "fixed",
      "two-span"
     ],
     "def": "simple",
     "group": "Geometry",
     "roles": [
      "supports"
     ],
     "words": {
      "simply supported": "simple",
      "fixed ends": "fixed",
      "continuous": "two-span",
      "two spans": "two-span"
     }
    },
    {
     "k": "w",
     "label": "Crowd and deck load per girder",
     "unit": "kN/m",
     "dim": "lineload",
     "min": 0,
     "max": 40,
     "step": 0.5,
     "def": 8,
     "group": "Loads",
     "roles": [
      "crowd",
      "load",
      "distributed"
     ]
    },
    {
     "k": "pt",
     "label": "Service vehicle at mid-span",
     "unit": "kN",
     "dim": "force",
     "min": 0,
     "max": 100,
     "step": 1,
     "def": 10,
     "group": "Loads",
     "roles": [
      "vehicle",
      "point load",
      "maintenance"
     ]
    },
    {
     "k": "d",
     "label": "Girder depth",
     "unit": "mm",
     "dim": "length",
     "min": 200,
     "max": 1500,
     "step": 10,
     "def": 700,
     "group": "Section",
     "roles": [
      "deep",
      "depth",
      "girder depth"
     ]
    },
    {
     "k": "bf",
     "label": "Flange width",
     "unit": "mm",
     "dim": "length",
     "min": 100,
     "max": 600,
     "step": 5,
     "def": 250,
     "group": "Section",
     "roles": [
      "flange width",
      "wide"
     ]
    },
    {
     "k": "tf",
     "label": "Flange thickness",
     "unit": "mm",
     "dim": "length",
     "min": 6,
     "max": 50,
     "step": 1,
     "def": 20,
     "group": "Section",
     "roles": [
      "flange thickness",
      "flange"
     ]
    },
    {
     "k": "tw",
     "label": "Web thickness",
     "unit": "mm",
     "dim": "length",
     "min": 5,
     "max": 30,
     "step": 1,
     "def": 10,
     "group": "Section",
     "roles": [
      "web thickness",
      "web"
     ]
    },
    {
     "k": "mat",
     "label": "Material",
     "choices": [
      "S355",
      "aluminium",
      "glulam"
     ],
     "def": "S355",
     "group": "Section",
     "roles": [
      "material"
     ],
     "words": {
      "steel": "S355",
      "aluminum": "aluminium",
      "timber": "glulam",
      "wood": "glulam",
      "wooden": "glulam"
     }
    }
   ],
   "commands": [
    "footbridge 20 m span",
    "aluminium pedestrian bridge 15 m long",
    "timber footbridge 12 m span with a 600 mm deep girder"
   ]
  },
  {
   "id": "steel-i-beam",
   "archetype": "BEAM",
   "category": "Structural components and materials",
   "name": "Steel I-beam",
   "short": "A rolled section in bending, on any support",
   "blurb": "The I-shape puts most of the steel in the flanges, far from the neutral axis, where bending stress is highest, and leaves a thin web for shear. Choose the supports, the loads and the section, and read the shear and moment diagrams, the stress across the depth and the deflection.",
   "consts": {},
   "aliases": [
    "i-beam",
    "i beam",
    "steel beam",
    "universal beam",
    "h-beam",
    "rolled steel joist",
    "rsj",
    "steel joist",
    "floor beam",
    "cantilever beam"
   ],
   "params": [
    {
     "k": "l",
     "label": "Span",
     "unit": "m",
     "dim": "length",
     "min": 1,
     "max": 20,
     "step": 0.1,
     "def": 6,
     "group": "Geometry",
     "roles": [
      "span",
      "long",
      "length"
     ]
    },
    {
     "k": "supp",
     "label": "Supports",
     "choices": [
      "simple",
      "fixed",
      "cantilever",
      "two-span"
     ],
     "def": "simple",
     "group": "Geometry",
     "roles": [
      "supports"
     ],
     "words": {
      "simply supported": "simple",
      "fixed ends": "fixed",
      "built-in": "fixed",
      "continuous": "two-span",
      "two spans": "two-span"
     }
    },
    {
     "k": "w",
     "label": "Distributed load",
     "unit": "kN/m",
     "dim": "lineload",
     "min": 0,
     "max": 100,
     "step": 0.5,
     "def": 15,
     "group": "Loads",
     "roles": [
      "load",
      "distributed",
      "udl"
     ]
    },
    {
     "k": "pt",
     "label": "Point load",
     "unit": "kN",
     "dim": "force",
     "min": 0,
     "max": 500,
     "step": 1,
     "def": 20,
     "group": "Loads",
     "roles": [
      "point load",
      "point",
      "concentrated"
     ]
    },
    {
     "k": "d",
     "label": "Depth",
     "unit": "mm",
     "dim": "length",
     "min": 100,
     "max": 1000,
     "step": 5,
     "def": 400,
     "group": "Section",
     "roles": [
      "deep",
      "depth"
     ]
    },
    {
     "k": "bf",
     "label": "Flange width",
     "unit": "mm",
     "dim": "length",
     "min": 50,
     "max": 450,
     "step": 5,
     "def": 180,
     "group": "Section",
     "roles": [
      "flange width",
      "wide"
     ]
    },
    {
     "k": "tf",
     "label": "Flange thickness",
     "unit": "mm",
     "dim": "length",
     "min": 5,
     "max": 40,
     "step": 0.5,
     "def": 13.5,
     "group": "Section",
     "roles": [
      "flange thickness",
      "flange"
     ]
    },
    {
     "k": "tw",
     "label": "Web thickness",
     "unit": "mm",
     "dim": "length",
     "min": 4,
     "max": 25,
     "step": 0.5,
     "def": 8.6,
     "group": "Section",
     "roles": [
      "web thickness",
      "web"
     ]
    },
    {
     "k": "mat",
     "label": "Steel grade",
     "choices": [
      "S235",
      "S275",
      "S355"
     ],
     "def": "S355",
     "group": "Section",
     "roles": [
      "steel",
      "grade"
     ],
     "words": {
      "mild steel": "S275"
     }
    }
   ],
   "commands": [
    "steel i-beam 6 m span with 15 kN/m",
    "i-beam cantilever 2.5 m long with a 10 kN point load",
    "universal beam 8 m span, 500 mm deep, fixed ends"
   ]
  },
  {
   "id": "shell-and-tube-heat-exchanger",
   "archetype": "HX",
   "category": "Heat exchangers and thermal equipment",
   "name": "Shell-and-tube heat exchanger",
   "short": "A tube bundle inside a shell, the workhorse of process plants",
   "blurb": "One fluid runs through a bundle of tubes, here in two passes, while the other is steered across them by baffles inside the shell. Set the inlet temperatures, the flows and the surface, and the effectiveness method gives the duty, both outlet temperatures and how much more surface a closer approach would need.",
   "consts": {
    "cold": "water",
    "drawing": "shell",
    "tube_d": 0.016,
    "tube_do": 0.019,
    "tube_l": 4.0,
    "passes": 2,
    "dp_max": 70
   },
   "aliases": [
    "shell and tube heat exchanger",
    "shell-and-tube exchanger",
    "shell and tube exchanger",
    "shell and tube",
    "tubular heat exchanger",
    "tube bundle exchanger",
    "oil cooler",
    "process heat exchanger",
    "heat exchanger"
   ],
   "params": [
    {
     "k": "th",
     "label": "Hot inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 40,
     "max": 250,
     "step": 1,
     "def": 120,
     "group": "Hot side",
     "roles": [
      "hot inlet",
      "hot",
      "from"
     ]
    },
    {
     "k": "mh",
     "label": "Hot flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.1,
     "max": 50,
     "step": 0.1,
     "def": 2,
     "group": "Hot side",
     "roles": [
      "hot flow",
      "oil flow",
      "of oil",
      "hot side"
     ]
    },
    {
     "k": "hot",
     "label": "Hot fluid (in the tubes)",
     "choices": [
      "oil",
      "glycol",
      "water"
     ],
     "def": "oil",
     "group": "Hot side",
     "roles": [
      "hot fluid"
     ],
     "words": {
      "hot water": "water",
      "coolant": "glycol",
      "antifreeze": "glycol",
      "thermal oil": "oil"
     }
    },
    {
     "k": "tc",
     "label": "Cold water inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 0,
     "max": 80,
     "step": 1,
     "def": 20,
     "group": "Cold side",
     "roles": [
      "cold inlet",
      "cold",
      "water at"
     ]
    },
    {
     "k": "mc",
     "label": "Cold water flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.1,
     "max": 50,
     "step": 0.1,
     "def": 3,
     "group": "Cold side",
     "roles": [
      "cold flow",
      "water flow",
      "of water",
      "cooling water"
     ]
    },
    {
     "k": "u",
     "label": "Overall coefficient U",
     "unit": "W/m²K",
     "dim": "htc",
     "min": 50,
     "max": 3000,
     "step": 10,
     "def": 350,
     "group": "Exchanger",
     "roles": [
      "u",
      "coefficient",
      "overall"
     ]
    },
    {
     "k": "area",
     "label": "Surface area",
     "unit": "m²",
     "dim": "area",
     "min": 1,
     "max": 500,
     "step": 0.5,
     "def": 20,
     "group": "Exchanger",
     "roles": [
      "area",
      "surface"
     ]
    },
    {
     "k": "arr",
     "label": "Flow arrangement",
     "choices": [
      "shell-and-tube",
      "counterflow",
      "parallel"
     ],
     "def": "shell-and-tube",
     "group": "Exchanger",
     "roles": [
      "arrangement"
     ],
     "words": {
      "counter flow": "counterflow",
      "counter-current": "counterflow",
      "countercurrent": "counterflow",
      "co-current": "parallel",
      "parallel flow": "parallel",
      "two pass": "shell-and-tube",
      "2-pass": "shell-and-tube"
     }
    }
   ],
   "commands": [
    "shell and tube heat exchanger 20 m2",
    "shell-and-tube exchanger cooling oil from 150 C, 3 kg/s cold flow",
    "shell and tube heat exchanger counterflow with U 500 W/m2K"
   ]
  },
  {
   "id": "plate-heat-exchanger",
   "archetype": "HX",
   "category": "Heat exchangers and thermal equipment",
   "name": "Plate heat exchanger",
   "short": "Thin pressed plates give a large surface in a small frame",
   "blurb": "Corrugated stainless plates are clamped in a frame with the two fluids in alternate gaps, so they flow in near-pure counterflow through very narrow channels. That gives high heat-transfer coefficients and a close approach in a compact unit, as in district heating and heat-pump circuits.",
   "consts": {
    "cold": "water",
    "drawing": "plate",
    "tube_d": 0.004,
    "tube_do": 0.02,
    "tube_l": 1.0,
    "passes": 1,
    "dp_max": 100
   },
   "aliases": [
    "plate heat exchanger",
    "plate exchanger",
    "brazed plate heat exchanger",
    "gasketed plate heat exchanger",
    "plate-type heat exchanger",
    "phe",
    "plate and frame exchanger"
   ],
   "params": [
    {
     "k": "th",
     "label": "Hot inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 30,
     "max": 150,
     "step": 1,
     "def": 70,
     "group": "Hot side",
     "roles": [
      "hot inlet",
      "hot",
      "from"
     ]
    },
    {
     "k": "mh",
     "label": "Hot flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.1,
     "max": 30,
     "step": 0.1,
     "def": 3,
     "group": "Hot side",
     "roles": [
      "hot flow",
      "hot side",
      "primary"
     ]
    },
    {
     "k": "hot",
     "label": "Hot fluid",
     "choices": [
      "water",
      "glycol"
     ],
     "def": "water",
     "group": "Hot side",
     "roles": [
      "hot fluid"
     ],
     "words": {
      "antifreeze": "glycol",
      "brine": "glycol"
     }
    },
    {
     "k": "tc",
     "label": "Cold inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 0,
     "max": 60,
     "step": 1,
     "def": 10,
     "group": "Cold side",
     "roles": [
      "cold inlet",
      "cold"
     ]
    },
    {
     "k": "mc",
     "label": "Cold flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.1,
     "max": 30,
     "step": 0.1,
     "def": 3,
     "group": "Cold side",
     "roles": [
      "cold flow",
      "cold side",
      "secondary"
     ]
    },
    {
     "k": "u",
     "label": "Overall coefficient U",
     "unit": "W/m²K",
     "dim": "htc",
     "min": 500,
     "max": 7000,
     "step": 50,
     "def": 3500,
     "group": "Exchanger",
     "roles": [
      "u",
      "coefficient",
      "overall"
     ]
    },
    {
     "k": "area",
     "label": "Plate area",
     "unit": "m²",
     "dim": "area",
     "min": 0.5,
     "max": 200,
     "step": 0.5,
     "def": 10,
     "group": "Exchanger",
     "roles": [
      "area",
      "surface"
     ]
    },
    {
     "k": "arr",
     "label": "Flow arrangement",
     "choices": [
      "counterflow",
      "parallel"
     ],
     "def": "counterflow",
     "group": "Exchanger",
     "roles": [
      "arrangement"
     ],
     "words": {
      "counter flow": "counterflow",
      "countercurrent": "counterflow",
      "co-current": "parallel",
      "parallel flow": "parallel"
     }
    }
   ],
   "commands": [
    "plate heat exchanger 10 m2 at 3500 W/m2K",
    "brazed plate heat exchanger 4 kg/s hot flow at 80 C",
    "plate heat exchanger with glycol, 20 m2"
   ]
  },
  {
   "id": "car-radiator",
   "archetype": "HX",
   "category": "Heat exchangers and thermal equipment",
   "name": "Car radiator",
   "short": "Finned tubes shed engine heat into the passing air",
   "blurb": "Hot coolant from the engine flows down flat tubes while air is pushed across the thin fins between them, the two streams crossing at right angles without mixing. The air side has by far the larger resistance, which is why a radiator is mostly fin.",
   "consts": {
    "hot": "glycol",
    "cold": "air",
    "arr": "crossflow",
    "drawing": "radiator",
    "tube_d": 0.004,
    "tube_do": 0.4,
    "tube_l": 0.5,
    "passes": 1,
    "dp_max": 30
   },
   "aliases": [
    "car radiator",
    "radiator",
    "engine radiator",
    "coolant radiator",
    "automotive radiator",
    "crossflow radiator",
    "truck radiator"
   ],
   "params": [
    {
     "k": "th",
     "label": "Coolant inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 60,
     "max": 120,
     "step": 1,
     "def": 95,
     "group": "Coolant",
     "roles": [
      "coolant at",
      "coolant temperature",
      "hot inlet",
      "hot"
     ]
    },
    {
     "k": "mh",
     "label": "Coolant flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.1,
     "max": 3,
     "step": 0.05,
     "def": 1,
     "group": "Coolant",
     "roles": [
      "coolant",
      "coolant flow",
      "pump"
     ]
    },
    {
     "k": "tc",
     "label": "Air inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": -10,
     "max": 50,
     "step": 1,
     "def": 30,
     "group": "Air",
     "roles": [
      "air at",
      "ambient",
      "cold"
     ]
    },
    {
     "k": "mc",
     "label": "Air flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 0.2,
     "max": 5,
     "step": 0.05,
     "def": 1.5,
     "group": "Air",
     "roles": [
      "air",
      "air flow",
      "fan"
     ]
    },
    {
     "k": "u",
     "label": "Overall coefficient U (air side)",
     "unit": "W/m²K",
     "dim": "htc",
     "min": 20,
     "max": 150,
     "step": 1,
     "def": 100,
     "group": "Core",
     "roles": [
      "u",
      "coefficient",
      "overall"
     ]
    },
    {
     "k": "area",
     "label": "Air-side area",
     "unit": "m²",
     "dim": "area",
     "min": 2,
     "max": 30,
     "step": 0.5,
     "def": 15,
     "group": "Core",
     "roles": [
      "area",
      "surface",
      "fin area"
     ]
    }
   ],
   "commands": [
    "car radiator 15 m2",
    "car radiator 1.2 kg/s coolant at 100 C",
    "radiator with 2 kg/s air at 35 C"
   ]
  },
  {
   "id": "electric-kettle",
   "archetype": "APPL",
   "category": "Home appliances",
   "name": "Electric kettle",
   "short": "A few kilowatts straight into the water",
   "blurb": "The element sits under the water, so almost all its heat goes where it is wanted; a bimetal switch feels the steam and turns it off at the boil. Change the power, the amount of water and its starting temperature to see the time, the current drawn and what a year of cups of tea costs.",
   "consts": {
    "kind": "kettle",
    "cp": 4186,
    "ua": 1.2,
    "set": 100,
    "ta": 20
   },
   "aliases": [
    "electric kettle",
    "kettle",
    "tea kettle",
    "water kettle",
    "cordless kettle",
    "jug kettle",
    "travel kettle"
   ],
   "params": [
    {
     "k": "p",
     "label": "Element power",
     "unit": "W",
     "dim": "power",
     "min": 500,
     "max": 3000,
     "step": 50,
     "def": 2200,
     "group": "Element",
     "roles": [
      "power",
      "element",
      "rated"
     ]
    },
    {
     "k": "v",
     "label": "Supply voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 110,
     "max": 240,
     "step": 1,
     "def": 230,
     "group": "Element",
     "roles": [
      "supply",
      "mains",
      "on"
     ]
    },
    {
     "k": "m",
     "label": "Water",
     "unit": "kg",
     "dim": "mass",
     "kg_per_l": 1.0,
     "min": 0.2,
     "max": 1.7,
     "step": 0.05,
     "def": 1.5,
     "group": "Load",
     "roles": [
      "water",
      "boiling",
      "of water",
      "fill"
     ]
    },
    {
     "k": "t0",
     "label": "Water start temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": 0,
     "max": 40,
     "step": 1,
     "def": 15,
     "group": "Load",
     "roles": [
      "from",
      "start",
      "tap"
     ]
    },
    {
     "k": "eta",
     "label": "Share of heat into the water",
     "unit": "",
     "dim": "ratio",
     "min": 0.6,
     "max": 0.95,
     "step": 0.01,
     "def": 0.85,
     "group": "Load",
     "roles": [
      "efficiency",
      "eta"
     ]
    },
    {
     "k": "price",
     "label": "Electricity price per kWh",
     "unit": "",
     "dim": "money",
     "min": 0,
     "max": 1,
     "step": 0.01,
     "def": 0.25,
     "group": "Running cost",
     "roles": [
      "price",
      "tariff",
      "per kwh"
     ]
    },
    {
     "k": "uses",
     "label": "Boils per day",
     "unit": "",
     "dim": "ratio",
     "min": 0,
     "max": 10,
     "step": 0.5,
     "def": 4,
     "group": "Running cost",
     "roles": [
      "boils",
      "per day",
      "times a day"
     ]
    }
   ],
   "commands": [
    "kettle 2.2 kW boiling 1.5 L",
    "kettle 2.2 kW boiling 1.5 L from 15 C",
    "electric kettle 3 kW on 230 V with 1 L of water"
   ]
  },
  {
   "id": "toaster",
   "archetype": "APPL",
   "category": "Home appliances",
   "name": "Toaster",
   "short": "Glowing ribbons brown the bread by radiation",
   "blurb": "Nichrome ribbons either side of each slot glow red hot and radiate onto the bread; the browning dial sets how long before the carriage springs up. Much of the heat escapes through the open top, which you can see in the energy split.",
   "consts": {
    "kind": "toaster",
    "cp": 3000,
    "ua": 1.0,
    "ta": 20
   },
   "aliases": [
    "toaster",
    "pop-up toaster",
    "bread toaster",
    "electric toaster",
    "two-slice toaster",
    "four-slice toaster",
    "toast maker"
   ],
   "params": [
    {
     "k": "p",
     "label": "Element power",
     "unit": "W",
     "dim": "power",
     "min": 500,
     "max": 2000,
     "step": 25,
     "def": 900,
     "group": "Element",
     "roles": [
      "power",
      "element",
      "rated"
     ]
    },
    {
     "k": "v",
     "label": "Supply voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 110,
     "max": 240,
     "step": 1,
     "def": 230,
     "group": "Element",
     "roles": [
      "supply",
      "mains",
      "on"
     ]
    },
    {
     "k": "m",
     "label": "Bread",
     "unit": "kg",
     "dim": "mass",
     "min": 0.03,
     "max": 0.25,
     "step": 0.005,
     "def": 0.08,
     "group": "Load",
     "roles": [
      "bread",
      "slices of",
      "load"
     ]
    },
    {
     "k": "set",
     "label": "Browning temperature",
     "unit": "°C",
     "dim": "temperature",
     "min": 110,
     "max": 180,
     "step": 1,
     "def": 150,
     "group": "Load",
     "roles": [
      "browning",
      "to",
      "brown"
     ]
    },
    {
     "k": "eta",
     "label": "Share of heat into the bread",
     "unit": "",
     "dim": "ratio",
     "min": 0.2,
     "max": 0.6,
     "step": 0.01,
     "def": 0.35,
     "group": "Load",
     "roles": [
      "efficiency",
      "eta"
     ]
    },
    {
     "k": "price",
     "label": "Electricity price per kWh",
     "unit": "",
     "dim": "money",
     "min": 0,
     "max": 1,
     "step": 0.01,
     "def": 0.25,
     "group": "Running cost",
     "roles": [
      "price",
      "tariff",
      "per kwh"
     ]
    },
    {
     "k": "uses",
     "label": "Uses per day",
     "unit": "",
     "dim": "ratio",
     "min": 0,
     "max": 6,
     "step": 0.5,
     "def": 1,
     "group": "Running cost",
     "roles": [
      "uses",
      "per day",
      "times a day"
     ]
    }
   ],
   "commands": [
    "toaster 900 W",
    "two slice toaster 1200 W browning to 160 C",
    "toaster on 120 V at 1000 W"
   ]
  },
  {
   "id": "electric-oven",
   "archetype": "APPL",
   "category": "Home appliances",
   "name": "Electric oven",
   "short": "An insulated box held at temperature by a thermostat",
   "blurb": "Elements heat an insulated steel cavity; once it reaches the setpoint the thermostat clicks them on and off to replace what leaks through the walls and door. Better insulation shortens nothing much at first but cuts the holding power, and with it most of a long bake's energy.",
   "consts": {
    "kind": "oven",
    "cp": 600,
    "eta": 0.95,
    "ta": 20,
    "band": 5
   },
   "aliases": [
    "electric oven",
    "oven",
    "fan oven",
    "built-in oven",
    "convection oven",
    "cooker oven",
    "baking oven"
   ],
   "params": [
    {
     "k": "p",
     "label": "Element power",
     "unit": "W",
     "dim": "power",
     "min": 1000,
     "max": 5000,
     "step": 50,
     "def": 2500,
     "group": "Element",
     "roles": [
      "power",
      "element",
      "rated"
     ]
    },
    {
     "k": "v",
     "label": "Supply voltage",
     "unit": "V",
     "dim": "voltage",
     "min": 110,
     "max": 240,
     "step": 1,
     "def": 230,
     "group": "Element",
     "roles": [
      "supply",
      "mains",
      "on"
     ]
    },
    {
     "k": "set",
     "label": "Setpoint",
     "unit": "°C",
     "dim": "temperature",
     "min": 50,
     "max": 275,
     "step": 5,
     "def": 200,
     "group": "Cooking",
     "roles": [
      "to",
      "at",
      "setpoint",
      "set to"
     ]
    },
    {
     "k": "cook",
     "label": "Cooking time after preheat",
     "unit": "min",
     "dim": "time",
     "min": 5,
     "max": 240,
     "step": 5,
     "def": 45,
     "group": "Cooking",
     "roles": [
      "for",
      "cooking",
      "bake"
     ]
    },
    {
     "k": "m",
     "label": "Cavity and food (heat-storing mass)",
     "unit": "kg",
     "dim": "mass",
     "min": 5,
     "max": 40,
     "step": 0.5,
     "def": 15,
     "group": "Oven",
     "roles": [
      "mass",
      "cavity",
      "food"
     ]
    },
    {
     "k": "ua",
     "label": "Wall and door loss UA",
     "unit": "W/K",
     "dim": "ua",
     "min": 1,
     "max": 8,
     "step": 0.1,
     "def": 2.5,
     "group": "Oven",
     "roles": [
      "insulation",
      "loss"
     ]
    },
    {
     "k": "price",
     "label": "Electricity price per kWh",
     "unit": "",
     "dim": "money",
     "min": 0,
     "max": 1,
     "step": 0.01,
     "def": 0.25,
     "group": "Running cost",
     "roles": [
      "price",
      "tariff",
      "per kwh"
     ]
    },
    {
     "k": "uses",
     "label": "Uses per day",
     "unit": "",
     "dim": "ratio",
     "min": 0,
     "max": 3,
     "step": 0.1,
     "def": 0.5,
     "group": "Running cost",
     "roles": [
      "uses",
      "per day",
      "times a day"
     ]
    }
   ],
   "commands": [
    "electric oven 2.5 kW preheating to 200 C",
    "oven at 180 C for 60 min",
    "fan oven 3.5 kW, 90 minutes at 220 C"
   ]
  },
  {
   "id": "pressurised-water-reactor",
   "archetype": "NUC",
   "category": "Thermal and nuclear power plants",
   "name": "Pressurised water reactor",
   "short": "Water under high pressure cools and moderates the core",
   "blurb": "Water at about 155 bar flows up through a core of uranium oxide fuel rods, slowing the neutrons and carrying the fission heat to steam generators without boiling. Size the core, the enrichment and the coolant flow, then follow what happens after a reactivity step and after shutdown.",
   "consts": {
    "f": 0.9,
    "p_res": 0.75,
    "eps": 1.03,
    "m2": 0.006,
    "cp": 5500,
    "tsat": 345,
    "tmelt": 2800,
    "tclad": 350,
    "beta": 0.0065,
    "lambda": 0.08,
    "gen": 2e-05,
    "rp": 0.0041,
    "rci": 0.00418,
    "rco": 0.00475,
    "kf": 3.0,
    "hgap": 10000,
    "kc": 16,
    "hfilm": 30000,
    "t_op_days": 365,
    "phi": 30000000000000.0,
    "pd_ref": 101000000.0,
    "vessel_gap": 0.6
   },
   "aliases": [
    "pressurised water reactor",
    "pressurized water reactor",
    "pwr",
    "pwr reactor",
    "light water reactor",
    "nuclear power reactor",
    "pressurised water nuclear reactor"
   ],
   "params": [
    {
     "k": "p",
     "label": "Thermal power",
     "unit": "MW",
     "dim": "power",
     "min": 100,
     "max": 4500,
     "step": 10,
     "def": 3400,
     "group": "Core",
     "roles": [
      "thermal",
      "power"
     ]
    },
    {
     "k": "r",
     "label": "Core radius",
     "unit": "m",
     "dim": "length",
     "min": 0.5,
     "max": 2.5,
     "step": 0.01,
     "def": 1.7,
     "group": "Core",
     "roles": [
      "radius",
      "core radius"
     ]
    },
    {
     "k": "hgt",
     "label": "Core height",
     "unit": "m",
     "dim": "length",
     "min": 1,
     "max": 4.5,
     "step": 0.05,
     "def": 3.7,
     "group": "Core",
     "roles": [
      "high",
      "height",
      "tall"
     ]
    },
    {
     "k": "enr",
     "label": "Enrichment",
     "unit": "%",
     "dim": "percent",
     "min": 1,
     "max": 5,
     "step": 0.05,
     "def": 4,
     "group": "Core",
     "roles": [
      "enrichment",
      "enriched"
     ]
    },
    {
     "k": "q",
     "label": "Average linear heat rate",
     "unit": "kW/m",
     "dim": "linpower",
     "min": 10,
     "max": 45,
     "step": 0.5,
     "def": 18,
     "group": "Fuel",
     "roles": [
      "linear heat rate",
      "heat rate"
     ]
    },
    {
     "k": "tin",
     "label": "Coolant inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 250,
     "max": 300,
     "step": 1,
     "def": 290,
     "group": "Coolant",
     "roles": [
      "inlet",
      "coolant"
     ]
    },
    {
     "k": "mdot",
     "label": "Coolant flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 1000,
     "max": 20000,
     "step": 100,
     "def": 17000,
     "group": "Coolant",
     "roles": [
      "flow",
      "coolant flow"
     ]
    },
    {
     "k": "rho",
     "label": "Reactivity step",
     "unit": "pcm",
     "dim": "ratio",
     "min": 10,
     "max": 500,
     "step": 5,
     "def": 100,
     "group": "Kinetics",
     "roles": [
      "pcm",
      "reactivity",
      "step"
     ]
    }
   ],
   "commands": [
    "pressurised water reactor 3400 MW thermal",
    "pwr 3000 MW with 4.5% enrichment",
    "pressurized water reactor core 1.6 m radius 3.6 m high"
   ]
  },
  {
   "id": "research-reactor",
   "archetype": "NUC",
   "category": "Thermal and nuclear power plants",
   "name": "Research reactor",
   "short": "A small core in an open pool, run for its neutrons",
   "blurb": "A compact core of highly enriched, low-temperature fuel sits at the bottom of an open pool of water, which cools it and shields the hall. It is run for its neutrons, to make medical isotopes, test materials and feed beam lines, so its power is small but its flux is high.",
   "consts": {
    "f": 0.85,
    "p_res": 0.95,
    "eps": 1.0,
    "m2": 0.0035,
    "cp": 4180,
    "tsat": 100,
    "tmelt": 600,
    "tclad": 110,
    "beta": 0.0076,
    "lambda": 0.08,
    "gen": 6e-05,
    "rp": 0.003,
    "rci": 0.00305,
    "rco": 0.0035,
    "kf": 15,
    "hgap": 30000,
    "kc": 180,
    "hfilm": 15000,
    "t_op_days": 30,
    "phi": 100000000000000.0,
    "pd_ref": 59000000.0,
    "vessel_gap": 0.8
   },
   "aliases": [
    "research reactor",
    "pool reactor",
    "pool-type reactor",
    "materials test reactor",
    "isotope production reactor",
    "neutron source reactor",
    "training reactor"
   ],
   "params": [
    {
     "k": "p",
     "label": "Thermal power",
     "unit": "MW",
     "dim": "power",
     "min": 1,
     "max": 30,
     "step": 0.5,
     "def": 10,
     "group": "Core",
     "roles": [
      "thermal",
      "power"
     ]
    },
    {
     "k": "r",
     "label": "Core radius",
     "unit": "m",
     "dim": "length",
     "min": 0.2,
     "max": 0.5,
     "step": 0.005,
     "def": 0.3,
     "group": "Core",
     "roles": [
      "radius",
      "core radius"
     ]
    },
    {
     "k": "hgt",
     "label": "Core height",
     "unit": "m",
     "dim": "length",
     "min": 0.4,
     "max": 0.9,
     "step": 0.01,
     "def": 0.6,
     "group": "Core",
     "roles": [
      "high",
      "height",
      "tall"
     ]
    },
    {
     "k": "enr",
     "label": "Enrichment",
     "unit": "%",
     "dim": "percent",
     "min": 10,
     "max": 20,
     "step": 0.05,
     "def": 19.75,
     "group": "Core",
     "roles": [
      "enrichment",
      "enriched"
     ]
    },
    {
     "k": "q",
     "label": "Average linear heat rate",
     "unit": "kW/m",
     "dim": "linpower",
     "min": 2,
     "max": 20,
     "step": 0.5,
     "def": 10,
     "group": "Fuel",
     "roles": [
      "linear heat rate",
      "heat rate"
     ]
    },
    {
     "k": "tin",
     "label": "Pool water inlet",
     "unit": "°C",
     "dim": "temperature",
     "min": 20,
     "max": 50,
     "step": 1,
     "def": 40,
     "group": "Coolant",
     "roles": [
      "inlet",
      "pool",
      "coolant"
     ]
    },
    {
     "k": "mdot",
     "label": "Coolant flow",
     "unit": "kg/s",
     "dim": "massflow",
     "min": 100,
     "max": 1500,
     "step": 10,
     "def": 500,
     "group": "Coolant",
     "roles": [
      "flow",
      "coolant flow"
     ]
    },
    {
     "k": "rho",
     "label": "Reactivity step",
     "unit": "pcm",
     "dim": "ratio",
     "min": 10,
     "max": 600,
     "step": 5,
     "def": 100,
     "group": "Kinetics",
     "roles": [
      "pcm",
      "reactivity",
      "step"
     ]
    }
   ],
   "commands": [
    "research reactor 10 MW",
    "pool research reactor 20 MW with 19.75% enrichment",
    "research reactor with a 200 pcm step"
   ]
  }
 ]
}
