{
 "about": "Data of Learn lesson M4, Storage and coupled carriers (wave W3, 2026-11-03). The plant, its customers and every price are fictional and illustrative; wind and Prairie Town's demand follow the real hourly shapes of the Southwest Power Pool grid in 2025 (town_year.json, EIA-930). Conversion efficiencies carry their sources. The reference block is written by node _tests/learn/test_m04-storage-multienergy.js --write and re-solved by the same test on every run.",
 "plant": {
  "windMW": 100,
  "profileMethod": "power",
  "exportMW": 50,
  "importMW": 50,
  "note": "Illustrative: a 100 MW wind plant whose grid connection takes or gives at most 50 MW, selling and buying at Prairie Town's cost of one more MWh."
 },
 "town": {
  "demandPeakMW": 450,
  "note": "Prairie Town's grid price each hour, as in lesson 9: $0 while wind and sun are spilled, $40 when the combined-cycle is the last plant needed, $100 for the peaker (lesson 8's marginal cost)."
 },
 "weeks": [
  {
   "id": "winter",
   "label": "9–15 December 2025",
   "short": "Winter week",
   "date": "2025-12-09",
   "utcOffsetHours": -6,
   "heatPeakMW": 15
  },
  {
   "id": "summer",
   "label": "14–20 July 2025",
   "short": "Summer week",
   "date": "2025-07-14",
   "utcOffsetHours": -5,
   "heatPeakMW": 3
  }
 ],
 "battery": {
  "MW": 20,
  "MWh": 80,
  "eta": 0.8259,
  "source": {
   "label": "DOE, 2022 Grid Energy Storage Technology Cost and Performance Assessment, Table 4.4 (LFP, AC round trip 82.59%)",
   "url": "https://www.energy.gov/sites/default/files/2022-09/2022%20Grid%20Energy%20Storage%20Technology%20Cost%20and%20Performance%20Assessment.pdf",
   "as_of": "2022-08"
  }
 },
 "electrolyzer": {
  "MW": 20,
  "kWhPerKg": 57,
  "minLoad": 0.15,
  "heatShare": 0.2,
  "source": {
   "label": "DOE Hydrogen Program Record 24005, Table 1: about 57 kWh per kg, a PEM system figure, used here as an illustrative value for the alkaline unit",
   "url": "https://www.hydrogen.energy.gov/docs/hydrogenprogramlibraries/pdfs/24005-clean-hydrogen-production-cost-pem-electrolyzer.pdf",
   "as_of": "2024-05-20"
  },
  "loadSource": {
   "label": "IRENA, Green Hydrogen Cost Reduction (2020), Table 6: alkaline load range 15%–100%",
   "url": "https://www.irena.org/-/media/Files/IRENA/Agency/Publication/2020/Dec/IRENA_Green_hydrogen_cost_2020.pdf",
   "as_of": "2020-12"
  },
  "heatNote": "Illustrative: 20% of the electrolyzer's power input recovered as low-temperature heat.",
  "rangeSource": {
   "label": "IRENA, Green Hydrogen Cost Reduction (2020), Table 6: alkaline electrolyser systems use 50-78 kWh per kg (2020), so 57 kWh per kg lies inside the alkaline range",
   "url": "https://www.irena.org/-/media/Files/IRENA/Agency/Publication/2020/Dec/IRENA_Green_hydrogen_cost_2020.pdf",
   "as_of": "2020-12"
  }
 },
 "tank": {
  "kg": 4000,
  "minKg": 400,
  "note": "Illustrative: a 4,000 kg tank kept above 400 kg (a minimum pressure)."
 },
 "hydrogen": {
  "demandKgPerHour": 150,
  "truckPerKg": 2.5,
  "note": "Illustrative: a fertilizer plant takes 150 kg every hour; hydrogen trucked in from a gas reformer costs $2.50 per kg."
 },
 "heat": {
  "pumpMW": 5,
  "cop": 3,
  "storeMWh": 60,
  "lossPerDay": 0.02,
  "networkMW": 12,
  "boilerPerMWh": 15,
  "copSource": {
   "label": "DOE, Energy Saver Guide (2022), p. 16: heat pumps provide up to three times more heat than the energy they use",
   "url": "https://www.energy.gov/sites/default/files/2022-08/energy-saver-guide-2022.pdf",
   "as_of": "2022-07"
  },
  "note": "Illustrative: the town's heat network takes at most 12 MW of heat from the plant; a gas boiler at $15 per MWh of heat covers the rest; the heat store loses 2% a day. Heat demand follows the town's demand shape, scaled to a 15 MW winter peak and a 3 MW summer peak (hot water)."
 },
 "configs": [
  {
   "id": "nobat",
   "label": "Power only, no battery",
   "short": "No battery",
   "battery": false,
   "ez": false,
   "heat": false,
   "rec": false,
   "hidden": true
  },
  {
   "id": "power",
   "label": "Power only",
   "short": "Power",
   "battery": true,
   "ez": false,
   "heat": false,
   "rec": false
  },
  {
   "id": "h2",
   "label": "+ electrolyzer and tank",
   "short": "+ H₂",
   "battery": true,
   "ez": true,
   "heat": false,
   "rec": false
  },
  {
   "id": "heat",
   "label": "+ heat pump and heat store",
   "short": "+ heat",
   "battery": true,
   "ez": true,
   "heat": true,
   "rec": false
  },
  {
   "id": "all",
   "label": "+ waste heat from the electrolyzer",
   "short": "+ waste heat",
   "battery": true,
   "ez": true,
   "heat": true,
   "rec": true
  }
 ],
 "reference": {
  "about": "Written by node _tests/learn/test_m04-storage-multienergy.js --write; re-solved by the same test on every run. Costs in $ a week (negative: the plant earns), energy in MWh, hydrogen in kg.",
  "costs": {
   "winter": {
    "nobat": -96099.1,
    "power": -117379.1,
    "h2": -178649.2,
    "heat": -199688.8,
    "all": -200971.1
   },
   "summer": {
    "nobat": -161720.8,
    "power": -179587.9,
    "h2": -210068.7,
    "heat": -212759.4,
    "all": -215176
   }
  },
  "value": {
   "h2": {
    "winter": 61270.1,
    "summer": 30480.8
   },
   "heat": {
    "winter": 82309.7,
    "summer": 33171.5
   },
   "all": {
    "winter": 83592,
    "summer": 35588.1
   }
  },
  "on": {
   "cost": -172687.1
  },
  "binary": {
   "cost": -178649.2,
   "status": "optimal",
   "gap": 0
  },
  "flows": {
   "wind": 7753.1,
   "exp": 4902.7,
   "imp": 1352.6,
   "kg": 25200,
   "tr": 0,
   "hp": 1810,
   "boil": 130.9,
   "rec": 195.4
  },
  "priceHours": {
   "zero": 41,
   "cc": 123,
   "pk": 4
  },
  "size": {
   "cols": 2520,
   "rows": 1176
  },
  "series": {
   "winter": {
    "wind": [
     65.5,
     65.8,
     61.9,
     58,
     55.4,
     55.4,
     61.5,
     69.4,
     64.3,
     46.8,
     34.2,
     32.4,
     38,
     46.6,
     55.5,
     65.7,
     73.5,
     91.8,
     99.6,
     98.6,
     97.1,
     90.7,
     85.8,
     79.6,
     77,
     77.4,
     77.7,
     81.7,
     87.6,
     92.2,
     97.7,
     94.3,
     88.7,
     80.5,
     75.2,
     62.4,
     47.4,
     26.6,
     12.1,
     5,
     3.1,
     3.9,
     7.4,
     12.2,
     17.9,
     26.7,
     33.3,
     38,
     43.1,
     49.3,
     56.5,
     62.9,
     67.9,
     70.4,
     70.4,
     66.8,
     55.7,
     37.4,
     28.2,
     26.2,
     27.3,
     28,
     31.3,
     32.1,
     28.1,
     33,
     41.7,
     45.8,
     47.9,
     42.9,
     34.6,
     31.5,
     27.3,
     27,
     27.5,
     33.9,
     45.6,
     61,
     70.8,
     73.8,
     65.7,
     49.8,
     41.1,
     35.5,
     28,
     22.6,
     20.2,
     16.6,
     12.5,
     13.2,
     19.6,
     23.3,
     26.6,
     25.3,
     24.5,
     21.8,
     19.5,
     18.5,
     15.9,
     15.4,
     14.4,
     13.6,
     10.7,
     11.1,
     9.1,
     6.5,
     5.3,
     5.5,
     10.1,
     22.3,
     36.3,
     52.9,
     63.7,
     67,
     64.4,
     68.9,
     70.5,
     69.4,
     63.7,
     61.8,
     56.1,
     49.1,
     37.5,
     29.1,
     25.3,
     19.6,
     14.4,
     11.7,
     10.5,
     8.8,
     6.1,
     6.5,
     10.7,
     16.8,
     23.6,
     27.1,
     30.5,
     32.3,
     44.3,
     54.5,
     59.7,
     66.2,
     71.5,
     78.2,
     79.8,
     79.1,
     85.6,
     92.2,
     93,
     90.5,
     87.6,
     92.2,
     92,
     78.9,
     66.6,
     52.6,
     44.8,
     25.3,
     27.6,
     29.1,
     29.1,
     32.9,
     41,
     47,
     51.6,
     52.9,
     52.2,
     51.6
    ],
    "price": [
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     0,
     0,
     0,
     40,
     100,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40
    ],
    "heat": [
     11.97,
     11.85,
     11.81,
     11.85,
     12.03,
     12.47,
     13.23,
     13.64,
     13.43,
     13.02,
     12.69,
     12.42,
     12.18,
     12.03,
     11.89,
     11.89,
     12.1,
     12.59,
     12.75,
     12.67,
     12.55,
     12.3,
     11.85,
     11.44,
     11.21,
     11.09,
     11.08,
     11.15,
     11.37,
     11.83,
     12.61,
     13.06,
     13.02,
     12.8,
     12.63,
     12.42,
     12.18,
     12.03,
     11.89,
     11.89,
     12.1,
     12.63,
     12.88,
     12.92,
     12.9,
     12.69,
     12.34,
     11.97,
     11.76,
     11.66,
     11.64,
     11.74,
     11.93,
     12.42,
     13.15,
     13.6,
     13.5,
     13.13,
     12.84,
     12.57,
     12.3,
     12.16,
     12.01,
     11.97,
     12.1,
     12.47,
     12.63,
     12.59,
     12.57,
     12.34,
     11.95,
     11.6,
     11.37,
     11.29,
     11.27,
     11.37,
     11.6,
     12.1,
     12.84,
     13.31,
     13.27,
     13.12,
     12.88,
     12.65,
     12.44,
     12.3,
     12.2,
     12.22,
     12.4,
     12.75,
     12.86,
     12.82,
     12.78,
     12.67,
     12.45,
     12.14,
     11.93,
     11.79,
     11.74,
     11.77,
     11.91,
     12.12,
     12.44,
     12.8,
     13.02,
     13.08,
     13.04,
     12.92,
     12.75,
     12.59,
     12.57,
     12.77,
     13.06,
     13.5,
     13.66,
     13.68,
     13.66,
     13.56,
     13.35,
     13.15,
     13.04,
     12.96,
     12.94,
     13.02,
     13.17,
     13.41,
     13.72,
     14.07,
     14.24,
     14.11,
     13.85,
     13.6,
     13.33,
     13.08,
     12.92,
     12.96,
     13.31,
     14.03,
     14.3,
     14.38,
     14.32,
     14.13,
     13.76,
     13.41,
     13.21,
     13.13,
     13.12,
     13.21,
     13.43,
     13.87,
     14.57,
     15,
     14.84,
     14.48,
     14.07,
     13.72,
     13.41,
     12.44,
     12.18,
     12.18,
     12.34,
     12.78,
     13,
     13.08,
     13.08,
     13.04,
     12.69,
     12.4
    ]
   },
   "summer": {
    "wind": [
     14,
     13.1,
     11.2,
     9.1,
     7.3,
     5.4,
     3.9,
     2.7,
     1.3,
     14.6,
     13.3,
     12.7,
     13.1,
     13.8,
     13.5,
     15.7,
     17.2,
     18.5,
     20.2,
     22.1,
     26.1,
     32.1,
     36.9,
     40.7,
     44.6,
     44.6,
     43.3,
     42.9,
     44.3,
     44.1,
     43.5,
     39.5,
     23.4,
     21.3,
     26.5,
     36.9,
     44.7,
     48.5,
     49.7,
     54.2,
     56.1,
     56.7,
     57.3,
     58.2,
     62.4,
     64.6,
     67.4,
     71.3,
     73.7,
     65.4,
     58.3,
     53.3,
     53.5,
     52.5,
     47,
     37.2,
     26.6,
     25.8,
     21.2,
     17.6,
     14.9,
     14.6,
     16.3,
     18.1,
     19.2,
     21.5,
     26.8,
     35.4,
     38.6,
     41,
     43,
     48.3,
     56.1,
     53.5,
     41.6,
     34.7,
     31,
     27.4,
     22.2,
     16.9,
     13.4,
     11.4,
     9.8,
     7.7,
     5.3,
     3,
     2,
     1.5,
     1.6,
     2,
     3,
     3.9,
     5.4,
     8.6,
     12.1,
     18.1,
     22.6,
     24.5,
     22.8,
     23.8,
     22.9,
     20.2,
     16.2,
     11,
     7.5,
     6.4,
     5.8,
     6.8,
     12.3,
     19.9,
     27.5,
     34,
     38.9,
     39.1,
     37.7,
     37.5,
     42.5,
     58.9,
     66.5,
     68.4,
     73,
     72,
     71,
     67.4,
     69.5,
     69.1,
     64.3,
     62.6,
     56.1,
     52.8,
     50.2,
     45.9,
     43.4,
     47.1,
     51.9,
     56.4,
     58.5,
     58.9,
     61,
     64.7,
     69.1,
     78.8,
     82.9,
     84,
     80.5,
     74.8,
     68.1,
     64.1,
     59.4,
     56.7,
     54.6,
     53.6,
     48.5,
     45.9,
     38.5,
     28.7,
     23.4,
     24.1,
     28.3,
     33.1,
     38.3,
     39.4,
     42.3,
     46.2,
     57.4,
     68.9,
     77.9,
     80.1
    ],
    "price": [
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     100,
     100,
     100,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     0,
     0,
     0,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     40,
     100,
     100,
     40,
     40
    ],
    "heat": [
     1.97,
     1.88,
     1.82,
     1.79,
     1.79,
     1.83,
     1.89,
     1.99,
     2.12,
     2.21,
     2.33,
     2.44,
     2.54,
     2.64,
     2.69,
     2.75,
     2.78,
     2.78,
     2.74,
     2.68,
     2.57,
     2.49,
     2.37,
     2.24,
     2.11,
     2.04,
     1.97,
     1.92,
     1.91,
     1.95,
     2,
     2.08,
     2.2,
     2.33,
     2.47,
     2.65,
     2.75,
     2.86,
     2.92,
     2.97,
     3,
     3,
     2.97,
     2.89,
     2.78,
     2.68,
     2.54,
     2.38,
     2.24,
     2.14,
     2.07,
     2.02,
     2,
     2.01,
     2.05,
     2.12,
     2.21,
     2.33,
     2.46,
     2.59,
     2.71,
     2.81,
     2.87,
     2.92,
     2.93,
     2.92,
     2.88,
     2.79,
     2.67,
     2.56,
     2.42,
     2.27,
     2.15,
     2.07,
     2.01,
     1.96,
     1.92,
     1.94,
     1.99,
     2.05,
     2.13,
     2.21,
     2.3,
     2.38,
     2.45,
     2.52,
     2.57,
     2.63,
     2.66,
     2.67,
     2.64,
     2.58,
     2.49,
     2.43,
     2.31,
     2.17,
     2.06,
     1.97,
     1.91,
     1.88,
     1.87,
     1.9,
     1.95,
     2.02,
     2.11,
     2.21,
     2.34,
     2.47,
     2.6,
     2.71,
     2.79,
     2.85,
     2.88,
     2.87,
     2.82,
     2.73,
     2.63,
     2.55,
     2.44,
     2.3,
     2.19,
     2.1,
     2.04,
     1.99,
     1.96,
     1.95,
     1.94,
     2,
     2.13,
     2.27,
     2.41,
     2.54,
     2.65,
     2.75,
     2.83,
     2.89,
     2.95,
     2.95,
     2.91,
     2.82,
     2.71,
     2.62,
     2.49,
     2.36,
     2.24,
     2.15,
     2.07,
     2.02,
     1.98,
     1.96,
     1.95,
     1.98,
     2.1,
     2.25,
     2.39,
     2.54,
     2.66,
     2.77,
     2.84,
     2.88,
     2.91,
     2.93,
     2.92,
     2.86,
     2.76,
     2.67,
     2.55,
     2.4
    ]
   }
  },
  "hours": [
   {
    "id": "free",
    "t": 0,
    "label": "Tue 9 Dec, 00:00",
    "power": 0,
    "h2": 0,
    "heat": 0,
    "why": "Power is worth $0 here: one more MWh of wind could be neither sold nor used, so hydrogen and heat made from it are worth $0 too."
   },
   {
    "id": "pump",
    "t": 47,
    "label": "Wed 10 Dec, 23:00",
    "power": 40,
    "h2": 0,
    "heat": 13.3333,
    "why": "The heat pump sets heat's price: $40 ÷ 3 = $13.33 per MWh of heat. Hydrogen is worth $0: the tank links this hour to hours of curtailed wind."
   },
   {
    "id": "dear",
    "t": 126,
    "label": "Sun 14 Dec, 06:00",
    "power": 100,
    "h2": 2.1274,
    "heat": 15,
    "why": "Power is dear ($100 per MWh), so the boiler sets heat's price at $15, below $100 ÷ 3. Hydrogen is worth $2.13 per kg, set through the tank by other hours, below the $2.50 truck."
   }
  ]
 }
}
