{
  "node": {
    "id": "term:heat-transfer-modes",
    "type": "Term",
    "label": "Heat transfer modes",
    "properties": {
      "id": "heat-transfer-modes",
      "name": "Heat transfer modes",
      "aka": [
        "conduction",
        "convection",
        "thermal radiation"
      ],
      "section": "topic-thermal",
      "definition": "The three ways heat moves: conduction through solids and still fluids, convection carried by a moving fluid, and radiation emitted as infrared by every warm surface. In a pack, conduction takes heat from the cell into the cooling plate and convection carries it away in the coolant; radiation matters mainly at the high temperatures of thermal runaway.",
      "related": [
        "thermal-conductivity",
        "heat-transfer-coefficient",
        "thermography",
        "cooling-plate",
        "thermal-propagation"
      ],
      "url": "https://lemonergy.com/learn/glossary/heat-transfer-modes/",
      "mentions": [
        "thermal-runaway"
      ]
    }
  },
  "edges": [
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:edge-cooling-plate",
      "source": "term:heat-transfer-modes",
      "target": "block:edge-cooling-plate",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:initial-temperature-constraint",
      "source": "term:heat-transfer-modes",
      "target": "block:initial-temperature-constraint",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:liquid-reservoir",
      "source": "term:heat-transfer-modes",
      "target": "block:liquid-reservoir",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:parallel-cooling-plate",
      "source": "term:heat-transfer-modes",
      "target": "block:parallel-cooling-plate",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:phase-change-mass",
      "source": "term:heat-transfer-modes",
      "target": "block:phase-change-mass",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-conductor",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-conductor",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-controlled-heat-source",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-controlled-heat-source",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-controlled-temperature-source",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-controlled-temperature-source",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-convection",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-convection",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-flow-sensor",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-flow-sensor",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-heat-source",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-heat-source",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-insulator",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-insulator",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-mass",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-mass",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-radiation",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-radiation",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-reference",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-reference",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-resistance",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-resistance",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-temperature-sensor",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-temperature-sensor",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-temperature-source",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-temperature-source",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:thermal-variable-resistance",
      "source": "term:heat-transfer-modes",
      "target": "block:thermal-variable-resistance",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usesBlock/term:heat-transfer-modes/block:u-cooling-plate",
      "source": "term:heat-transfer-modes",
      "target": "block:u-cooling-plate",
      "type": "usesBlock",
      "properties": {
        "sourceFile": "studio-help-catalog.json",
        "scope": "Declared interface quantity or semantic operation; not a numerical validation claim"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-electrothermal-resistor",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-electrothermal-resistor",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-conductor",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-conductor",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-convection",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-convection",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-mass",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-mass",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-reference",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-reference",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-resistance",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-resistance",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-radiation",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-radiation",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-variable-resistance",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-variable-resistance",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-insulator",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-insulator",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-flow-sensor",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-flow-sensor",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-temperature-sensor",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-temperature-sensor",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-controlled-heat-source",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-controlled-heat-source",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-controlled-temperature-source",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-controlled-temperature-source",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-heat-source",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-heat-source",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-thermal-temperature-source",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-thermal-temperature-source",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-phase-change-mass",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-phase-change-mass",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:heat-transfer-modes/workflow:native-initial-temperature-constraint",
      "source": "term:heat-transfer-modes",
      "target": "workflow:native-initial-temperature-constraint",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:belongsTo/term:heat-transfer-modes/topic:topic-thermal",
      "source": "term:heat-transfer-modes",
      "target": "topic:topic-thermal",
      "type": "belongsTo",
      "properties": {
        "sourceFile": "terms.json"
      }
    },
    {
      "id": "edge:relatedTo/term:heat-transfer-modes/term:thermal-conductivity",
      "source": "term:heat-transfer-modes",
      "target": "term:thermal-conductivity",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:heat-transfer-modes/term:heat-transfer-coefficient",
      "source": "term:heat-transfer-modes",
      "target": "term:heat-transfer-coefficient",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:heat-transfer-modes/term:thermography",
      "source": "term:heat-transfer-modes",
      "target": "term:thermography",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:heat-transfer-modes/term:cooling-plate",
      "source": "term:heat-transfer-modes",
      "target": "term:cooling-plate",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:heat-transfer-modes/term:thermal-propagation",
      "source": "term:heat-transfer-modes",
      "target": "term:thermal-propagation",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:mentions/heat-transfer-modes/thermal-runaway",
      "source": "term:heat-transfer-modes",
      "target": "term:thermal-runaway",
      "type": "mentions",
      "properties": {
        "sourceFile": "terms.json",
        "method": "build_glossary.mention_index + mentions",
        "field": "definition",
        "meaning": "Text mention; not a causal claim"
      }
    },
    {
      "id": "edge:cites/term:heat-transfer-modes/reference:openstax-heat",
      "source": "term:heat-transfer-modes",
      "target": "reference:openstax-heat",
      "type": "cites",
      "properties": {
        "sourceFile": "wiki-references.json",
        "scope": "direct technical reference"
      }
    }
  ],
  "neighbors": [
    {
      "id": "block:edge-cooling-plate",
      "type": "Block",
      "label": "Edge-cooled plate",
      "properties": {
        "id": "edge-cooling-plate",
        "name": "Edge-cooled plate",
        "kind": "studio",
        "summary": "A plate with four thermal contacts and a defined coolant path. Explore which body connects to each contact and how pressure drives coolant through the plate.",
        "behavior": "Four metal temperature nodes form a fixed 2 × 2 conduction mesh with four thermal contact ports. Coolant follows one two-segment edge path. Metal and coolant have finite heat storage. Pressure difference drives reversible mass and enthalpy transport; hydraulic dissipation enters the coolant energy balance. Each liquid boundary requires an explicit pressure/temperature reservoir.",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal A: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal B: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "h1",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 1 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h2",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 2 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h3",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 3 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h4",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 4 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "massFlow",
            "direction": "output",
            "unit": "kg/s",
            "description": "Total coolant mass flow. Positive means A to B; negative means B to A. Parallel channels contribute to the total."
          },
          {
            "name": "pressureDrop",
            "direction": "output",
            "unit": "Pa",
            "description": "Boundary A pressure minus boundary B pressure. Its sign determines coolant direction."
          },
          {
            "name": "hydraulicPower",
            "direction": "output",
            "unit": "W",
            "description": "Pressure-work dissipation entering the coolant as heat: total mass flow × pressure drop / density."
          },
          {
            "name": "contactHeat",
            "direction": "output",
            "unit": "W",
            "description": "Sum of heat entering the plate through h1 to h4. Positive when the connected bodies deliver heat to the plate."
          },
          {
            "name": "outletTemperature",
            "direction": "output",
            "unit": "K",
            "description": "Coolant temperature leaving the downstream end of the plate, following the actual flow direction. Parallel-channel outlet temperatures are averaged."
          },
          {
            "name": "storedEnergy",
            "direction": "output",
            "unit": "J",
            "description": "Change in metal plus coolant sensible energy relative to their configured initial temperatures."
          }
        ],
        "parameters": [
          {
            "key": "plateCapacityJK",
            "label": "Total plate heat capacity",
            "unit": "J/K",
            "default": 900,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total plate heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantCapacityJK",
            "label": "Total coolant heat capacity",
            "unit": "J/K",
            "default": 420,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total coolant heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "plateConductanceWK",
            "label": "Conductance between metal nodes",
            "unit": "W/K",
            "default": 10,
            "min": 0,
            "max": 1000000,
            "description": "Conductance between metal nodes. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "contactConductanceWK",
            "label": "Thermal contact conductance",
            "unit": "W/K",
            "default": 100,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Thermal contact conductance. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantConductanceWK",
            "label": "Metal-to-coolant conductance per segment",
            "unit": "W/K per segment",
            "default": 20,
            "min": 0,
            "max": 1000000000,
            "description": "Metal-to-coolant conductance per segment. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "hydraulicResistance",
            "label": "Hydraulic resistance per channel",
            "unit": "Pa s/kg per channel",
            "default": 1000000,
            "min": 0.001,
            "max": 1000000000000000,
            "description": "Hydraulic resistance per channel. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "specificHeatJkgK",
            "label": "Coolant specific heat",
            "unit": "J/(kg K)",
            "default": 4200,
            "min": 1,
            "max": 1000000,
            "description": "Coolant specific heat. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "densityKgM3",
            "label": "Coolant density",
            "unit": "kg/m3",
            "default": 1000,
            "min": 1,
            "max": 100000,
            "description": "Coolant density. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialPlateTemperatureK",
            "label": "Initial plate temperature",
            "unit": "K",
            "default": 310,
            "min": 0,
            "max": 5000,
            "description": "Initial plate temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialCoolantTemperatureK",
            "label": "Initial coolant temperature",
            "unit": "K",
            "default": 300,
            "min": 0,
            "max": 5000,
            "description": "Initial coolant temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          }
        ],
        "equations": [
          "mass flow per channel = (pressureA-pressureB)/hydraulicResistance",
          "contact heat[j] = contactConductance*(contactTemperature[j]-plateTemperature[j])",
          "metal heat capacity per node = plateCapacity/4",
          "hydraulicPower = totalMassFlow*(pressureA-pressureB)/density",
          "coolant heat capacity*dT/dt = metal-to-coolant heat + advective enthalpy + hydraulic heat"
        ],
        "example": {
          "title": "Edge-cooled plate worked example",
          "text": "The bundled model connects four thermal masses initially at 320 K to a 310 K plate, with 300 K coolant reservoirs at 200 kPa and 100 kPa. With channel resistance 10^6 Pa s/kg, the total flow is 0.1 kg/s and hydraulic dissipation is 10 W. After 0.2 s all four loads cool below their initial temperature. The loads cool from stored sensible heat; no continuous heater is attached.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-edge",
          "label": "Open Studio example",
          "checks": [
            {
              "port": "massFlow",
              "label": "Total coolant mass flow",
              "atS": 0.2,
              "value": 0.1,
              "unit": "kg/s",
              "tolerance": 1e-06
            },
            {
              "port": "hydraulicPower",
              "label": "Hydraulic dissipation",
              "atS": 0.2,
              "value": 10,
              "unit": "W",
              "tolerance": 1e-06
            }
          ],
          "inputs": [
            {
              "port": "a",
              "label": "Inlet boundary pressure",
              "value": 200000,
              "unit": "Pa"
            },
            {
              "port": "b",
              "label": "Outlet boundary pressure",
              "value": 100000,
              "unit": "Pa"
            }
          ]
        },
        "limits": [
          "Fixed 2 × 2 metal mesh and the stated coolant path. Constant properties and single-phase incompressible coolant. No arbitrary liquid junction solver, configurable grid, resolved channel geometry or phase change."
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "references": [
          "openstax-heat"
        ],
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-edge-cooling-plate"
        ],
        "connectionGuide": {
          "kind": "cooling-plate",
          "title": "Trace the cooling connections",
          "summary": "Select a contact to explain its pin. Open a warm body or boundary to follow that connection into its own reference.",
          "paths": [
            [
              1,
              3
            ]
          ],
          "concepts": [
            {
              "id": "coolant",
              "label": "Coolant"
            },
            {
              "id": "thermal-mass",
              "label": "Thermal mass"
            },
            {
              "id": "heat-transfer-modes",
              "label": "Heat transfer"
            },
            {
              "id": "thermal-model",
              "label": "Thermal model"
            }
          ]
        },
        "type": "edge-cooling-plate",
        "implementationId": "edge-cooling-plate",
        "url": "https://lemonergy.com/learn/glossary/blocks/edge-cooling-plate/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/edge-cooling-plate/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-cooling-edge"
          ]
        },
        "studioHelp": {
          "type": "edge-cooling-plate",
          "namespace": "physical",
          "slug": "edge-cooling-plate",
          "canonicalSlug": "edge-cooling-plate",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "edge-cooling-plate",
            "name": "Edge-cooled plate",
            "domain": "thermal",
            "family": "cooling",
            "operation": "Exchanges heat between four plate zones, attached bodies and coolant flowing through the declared channel path.",
            "mechanism": [
              "Thermal contacts",
              "Metal and coolant storage",
              "Coolant transport"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal B",
                "net": null,
                "peers": []
              },
              {
                "id": "h1",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h2",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-right thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h3",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h4",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-right thermal contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "liquid-reservoir",
                "label": "Coolant pressure and temperature boundary"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M50 5V60Q50 75 70 75H130Q150 75 150 60V5"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "contactHeat1",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat1",
                "unit": "W"
              },
              {
                "id": "contactHeat2",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat2",
                "unit": "W"
              },
              {
                "id": "contactHeat3",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat3",
                "unit": "W"
              },
              {
                "id": "contactHeat4",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat4",
                "unit": "W"
              },
              {
                "id": "storedEnergy",
                "quantity": "energy",
                "declared": true,
                "consumers": [],
                "label": "stored Energy",
                "unit": "J"
              },
              {
                "id": "massFlow",
                "quantity": "mass-rate",
                "declared": true,
                "consumers": [],
                "label": "mass Flow",
                "unit": "kg/s"
              },
              {
                "id": "pressureDrop",
                "quantity": "pressure",
                "declared": true,
                "consumers": [],
                "label": "pressure Drop",
                "unit": "Pa"
              },
              {
                "id": "hydraulicPower",
                "quantity": "power",
                "declared": true,
                "consumers": [],
                "label": "hydraulic Power",
                "unit": "W"
              },
              {
                "id": "contactHeat",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat",
                "unit": "W"
              },
              {
                "id": "outletTemperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "outlet Temperature",
                "unit": "K"
              }
            ],
            "parameters": [
              {
                "id": "plateCapacityJK",
                "default": 900,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 900
              },
              {
                "id": "coolantCapacityJK",
                "default": 420,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 420
              },
              {
                "id": "plateConductanceWK",
                "default": 10,
                "unit": "W/K",
                "min": 0,
                "max": 1000000,
                "value": 10
              },
              {
                "id": "contactConductanceWK",
                "default": 100,
                "unit": "W/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 100
              },
              {
                "id": "coolantConductanceWK",
                "default": 20,
                "unit": "W/K per segment",
                "min": 0,
                "max": 1000000000,
                "value": 20
              },
              {
                "id": "hydraulicResistance",
                "default": 1000000,
                "unit": "Pa s/kg per channel",
                "min": 0.001,
                "max": 1000000000000000,
                "value": 1000000
              },
              {
                "id": "specificHeatJkgK",
                "default": 4200,
                "unit": "J/(kg K)",
                "min": 1,
                "max": 1000000,
                "value": 4200
              },
              {
                "id": "densityKgM3",
                "default": 1000,
                "unit": "kg/m3",
                "min": 1,
                "max": 100000,
                "value": 1000
              },
              {
                "id": "initialPlateTemperatureK",
                "default": 310,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 310
              },
              {
                "id": "initialCoolantTemperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:initial-temperature-constraint",
      "type": "Block",
      "label": "Insulated branch with initial temperature target",
      "properties": {
        "id": "initial-temperature-constraint",
        "name": "Insulated branch with initial temperature target",
        "kind": "studio",
        "summary": "Zero heat transfer; initializes directly attached unspecified thermal storage temperatures and verifies the consistent initial difference",
        "behavior": "Conserving component solved simultaneously with the connected network. Zero heat transfer; initializes directly attached unspecified thermal storage temperatures and verifies the consistent initial difference",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "initialDifferenceK",
            "label": "Initial temperature difference",
            "unit": "K difference",
            "default": 0,
            "description": "Requested initial temperature at a minus temperature at b.",
            "min": -5000,
            "max": 5000
          }
        ],
        "equations": [
          "Q̇ = 0",
          "Ta(0) − Tb(0) = requested initial difference, subject to consistent storage initialization"
        ],
        "example": {
          "title": "Insulated branch with initial temperature target worked example",
          "text": "Editable first-party network. constraint: initialDifferenceK=20. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-initial-temperature-constraint",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "initialDifferenceK",
              "label": "Initial temperature difference",
              "value": 20,
              "unit": "K difference"
            }
          ],
          "checks": [
            {
              "port": "constraint/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 0,
              "unit": "W",
              "tolerance": 1e-10
            },
            {
              "port": "constraint/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "constraint/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "Zero heat transfer; initializes directly attached unspecified thermal storage temperatures and verifies the consistent initial difference",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-initial-temperature-constraint"
        ],
        "type": "initial-temperature-constraint",
        "implementationId": "initial-temperature-constraint",
        "url": "https://lemonergy.com/learn/glossary/blocks/initial-temperature-constraint/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/initial-temperature-constraint/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-initial-temperature-constraint"
          ]
        },
        "studioHelp": {
          "type": "initial-temperature-constraint",
          "namespace": "physical",
          "slug": "initial-temperature-constraint",
          "canonicalSlug": "initial-temperature-constraint",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "initial-temperature-constraint",
            "name": "Insulated branch with initial temperature target",
            "domain": "thermal",
            "family": "initial",
            "operation": "Passes no heat and applies an initial temperature-difference target to directly attached storage. It does not hold that difference during the run.",
            "mechanism": [
              "Initial temperature target",
              "Initial consistency",
              "Zero heat transfer"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-source",
                "label": "Temperature difference source"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 40,
                  "r": 30
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M100 20V40L118 50M10 40H70M130 40H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "initialDifferenceK",
                "default": 0,
                "unit": "K difference",
                "min": -5000,
                "max": 5000,
                "value": 0
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:liquid-reservoir",
      "type": "Block",
      "label": "Coolant pressure and temperature boundary",
      "properties": {
        "id": "liquid-reservoir",
        "name": "Coolant pressure and temperature boundary",
        "kind": "studio",
        "summary": "Fixes pressure and inflowing coolant temperature at one liquid terminal. In the plate example, inlet and outlet are two instances of this same boundary.",
        "behavior": "This ideal boundary supplies or receives coolant while holding its configured pressure and inflow temperature. A pressure difference across the cooling plate determines the flow. When flow reverses, the receiving boundary becomes the supplying boundary. Outgoing coolant carries the plate outlet temperature; the receiving boundary does not clamp that outlet temperature.",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Thermal-liquid terminal connecting this boundary to a cooling plate. The boundary fixes pressure and the temperature used when coolant flows out of the boundary. Mass and enthalpy reaction flows balance the connected plate."
          },
          {
            "name": "pressure",
            "direction": "output",
            "unit": "Pa",
            "description": "The configured absolute pressure at this boundary."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "The configured inflow temperature, not a measurement of returning coolant."
          },
          {
            "name": "massFlow",
            "direction": "output",
            "unit": "kg/s",
            "description": "Net mass flow into this boundary. Negative when it supplies the plate; positive when it receives returning coolant."
          },
          {
            "name": "enthalpyFlow",
            "direction": "output",
            "unit": "W",
            "description": "Net advected enthalpy flow into this boundary. Returning coolant uses its plate outlet temperature."
          }
        ],
        "parameters": [
          {
            "key": "pressurePa",
            "label": "Boundary pressure",
            "unit": "Pa",
            "default": 101325,
            "min": 1,
            "max": 1000000000.0,
            "description": "Absolute pressure held at this liquid node. Set a pressure difference between the two boundaries to drive coolant flow."
          },
          {
            "key": "temperatureK",
            "label": "Coolant supply temperature",
            "unit": "K",
            "default": 300,
            "min": 0,
            "max": 5000,
            "description": "Temperature of coolant supplied by this boundary. It is used as the inlet condition only when flow leaves this boundary."
          }
        ],
        "equations": [
          "pressure = pressurePa",
          "inflow temperature = temperatureK",
          "boundary massFlow + mass flow leaving the boundary = 0"
        ],
        "example": {
          "title": "Two boundaries in the U-channel plate example",
          "text": "The existing U-channel example sets inlet to 200000 Pa and outlet to 100000 Pa, both at 300 K. The plate carries 0.1 kg/s from inlet to outlet. These checks describe the boundary within the released plate network, not a separate standalone validation.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-u",
          "label": "Open Studio example",
          "checks": [
            {
              "port": "inlet/pressure",
              "label": "Supply boundary pressure",
              "atS": 0,
              "value": 200000,
              "unit": "Pa",
              "tolerance": 1e-06
            },
            {
              "port": "inlet/temperature",
              "label": "Supply coolant temperature",
              "atS": 0,
              "value": 300,
              "unit": "K",
              "tolerance": 1e-06
            },
            {
              "port": "inlet/massFlow",
              "label": "Mass supplied by inlet boundary",
              "atS": 0,
              "value": -0.1,
              "unit": "kg/s",
              "tolerance": 1e-09
            }
          ]
        },
        "limits": [
          "Ideal fixed pressure and inflow temperature, not a finite tank, pump or radiator model. Each coolant node requires exactly one explicit boundary in the current bounded plate solver.",
          "Boundary checks reuse the existing released U-channel network; they are synthetic model checks, not measured equipment data."
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "references": [
          "openstax-heat"
        ],
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-edge-cooling-plate",
          "native-parallel-cooling-plate",
          "native-u-cooling-plate"
        ],
        "connectionGuide": {
          "kind": "boundary",
          "title": "What inlet and outlet actually mean",
          "summary": "Both are coolant boundary blocks. Their names describe the example role; their pressures determine the actual direction.",
          "concepts": [
            {
              "id": "coolant",
              "label": "Coolant"
            },
            {
              "id": "thermal-mass",
              "label": "Thermal mass"
            },
            {
              "id": "heat-transfer-modes",
              "label": "Heat transfer"
            },
            {
              "id": "thermal-model",
              "label": "Thermal model"
            }
          ]
        },
        "type": "liquid-reservoir",
        "implementationId": "liquid-reservoir",
        "url": "https://lemonergy.com/learn/glossary/blocks/liquid-reservoir/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/liquid-reservoir/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-cooling-u"
          ]
        },
        "studioHelp": {
          "type": "liquid-reservoir",
          "namespace": "physical",
          "slug": "liquid-reservoir",
          "canonicalSlug": "liquid-reservoir",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "liquid-reservoir",
            "name": "Coolant pressure and temperature boundary",
            "domain": "thermal-liquid",
            "family": "fluid-boundary",
            "operation": "Sets an ideal coolant pressure and temperature boundary and supplies or receives mass and energy.",
            "mechanism": [
              "Pressure and temperature",
              "Coolant boundary",
              "Mass and energy reaction"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant pressure and temperature boundary",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "u-cooling-plate",
                "label": "U-channel plate"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M190 40H140M140 10V70M65 10H140M65 70H140M75 25H125M75 55H125"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "massFlow",
                "quantity": "mass-rate",
                "declared": true,
                "consumers": [],
                "label": "mass Flow",
                "unit": "kg/s"
              },
              {
                "id": "enthalpyFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "enthalpy Flow",
                "unit": "W"
              },
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "pressure",
                "quantity": "pressure",
                "declared": true,
                "consumers": [],
                "label": "pressure",
                "unit": "Pa"
              }
            ],
            "parameters": [
              {
                "id": "pressurePa",
                "default": 101325,
                "unit": "Pa",
                "min": 1,
                "max": 1000000000,
                "value": 101325
              },
              {
                "id": "temperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:parallel-cooling-plate",
      "type": "Block",
      "label": "Parallel-channel plate",
      "properties": {
        "id": "parallel-cooling-plate",
        "name": "Parallel-channel plate",
        "kind": "studio",
        "summary": "A plate with four thermal contacts and a defined coolant path. Explore which body connects to each contact and how pressure drives coolant through the plate.",
        "behavior": "Four metal temperature nodes form a fixed 2 × 2 conduction mesh with four thermal contact ports. Coolant follows two parallel two-segment paths. Metal and coolant have finite heat storage. Pressure difference drives reversible mass and enthalpy transport; hydraulic dissipation enters the coolant energy balance. Each liquid boundary requires an explicit pressure/temperature reservoir.",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal A: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal B: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "h1",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 1 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h2",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 2 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h3",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 3 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h4",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 4 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "massFlow",
            "direction": "output",
            "unit": "kg/s",
            "description": "Total coolant mass flow. Positive means A to B; negative means B to A. Parallel channels contribute to the total."
          },
          {
            "name": "pressureDrop",
            "direction": "output",
            "unit": "Pa",
            "description": "Boundary A pressure minus boundary B pressure. Its sign determines coolant direction."
          },
          {
            "name": "hydraulicPower",
            "direction": "output",
            "unit": "W",
            "description": "Pressure-work dissipation entering the coolant as heat: total mass flow × pressure drop / density."
          },
          {
            "name": "contactHeat",
            "direction": "output",
            "unit": "W",
            "description": "Sum of heat entering the plate through h1 to h4. Positive when the connected bodies deliver heat to the plate."
          },
          {
            "name": "outletTemperature",
            "direction": "output",
            "unit": "K",
            "description": "Coolant temperature leaving the downstream end of the plate, following the actual flow direction. Parallel-channel outlet temperatures are averaged."
          },
          {
            "name": "storedEnergy",
            "direction": "output",
            "unit": "J",
            "description": "Change in metal plus coolant sensible energy relative to their configured initial temperatures."
          }
        ],
        "parameters": [
          {
            "key": "plateCapacityJK",
            "label": "Total plate heat capacity",
            "unit": "J/K",
            "default": 900,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total plate heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantCapacityJK",
            "label": "Total coolant heat capacity",
            "unit": "J/K",
            "default": 420,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total coolant heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "plateConductanceWK",
            "label": "Conductance between metal nodes",
            "unit": "W/K",
            "default": 10,
            "min": 0,
            "max": 1000000,
            "description": "Conductance between metal nodes. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "contactConductanceWK",
            "label": "Thermal contact conductance",
            "unit": "W/K",
            "default": 100,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Thermal contact conductance. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantConductanceWK",
            "label": "Metal-to-coolant conductance per segment",
            "unit": "W/K per segment",
            "default": 20,
            "min": 0,
            "max": 1000000000,
            "description": "Metal-to-coolant conductance per segment. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "hydraulicResistance",
            "label": "Hydraulic resistance per channel",
            "unit": "Pa s/kg per channel",
            "default": 1000000,
            "min": 0.001,
            "max": 1000000000000000,
            "description": "Hydraulic resistance per channel. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "specificHeatJkgK",
            "label": "Coolant specific heat",
            "unit": "J/(kg K)",
            "default": 4200,
            "min": 1,
            "max": 1000000,
            "description": "Coolant specific heat. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "densityKgM3",
            "label": "Coolant density",
            "unit": "kg/m3",
            "default": 1000,
            "min": 1,
            "max": 100000,
            "description": "Coolant density. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialPlateTemperatureK",
            "label": "Initial plate temperature",
            "unit": "K",
            "default": 310,
            "min": 0,
            "max": 5000,
            "description": "Initial plate temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialCoolantTemperatureK",
            "label": "Initial coolant temperature",
            "unit": "K",
            "default": 300,
            "min": 0,
            "max": 5000,
            "description": "Initial coolant temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          }
        ],
        "equations": [
          "mass flow per channel = (pressureA-pressureB)/hydraulicResistance",
          "contact heat[j] = contactConductance*(contactTemperature[j]-plateTemperature[j])",
          "metal heat capacity per node = plateCapacity/4",
          "hydraulicPower = totalMassFlow*(pressureA-pressureB)/density",
          "coolant heat capacity*dT/dt = metal-to-coolant heat + advective enthalpy + hydraulic heat"
        ],
        "example": {
          "title": "Parallel-channel plate worked example",
          "text": "The bundled model connects four thermal masses initially at 320 K to a 310 K plate, with 300 K coolant reservoirs at 200 kPa and 100 kPa. With channel resistance 10^6 Pa s/kg, the total flow is 0.2 kg/s and hydraulic dissipation is 20 W. After 0.2 s all four loads cool below their initial temperature. The loads cool from stored sensible heat; no continuous heater is attached.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-parallel",
          "label": "Open Studio example",
          "checks": [
            {
              "port": "massFlow",
              "label": "Total coolant mass flow",
              "atS": 0.2,
              "value": 0.2,
              "unit": "kg/s",
              "tolerance": 1e-06
            },
            {
              "port": "hydraulicPower",
              "label": "Hydraulic dissipation",
              "atS": 0.2,
              "value": 20,
              "unit": "W",
              "tolerance": 1e-06
            }
          ],
          "inputs": [
            {
              "port": "a",
              "label": "Inlet boundary pressure",
              "value": 200000,
              "unit": "Pa"
            },
            {
              "port": "b",
              "label": "Outlet boundary pressure",
              "value": 100000,
              "unit": "Pa"
            }
          ]
        },
        "limits": [
          "Fixed 2 × 2 metal mesh and the stated coolant path. Constant properties and single-phase incompressible coolant. No arbitrary liquid junction solver, configurable grid, resolved channel geometry or phase change."
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "references": [
          "openstax-heat"
        ],
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-parallel-cooling-plate"
        ],
        "connectionGuide": {
          "kind": "cooling-plate",
          "title": "Trace the cooling connections",
          "summary": "Select a contact to explain its pin. Open a warm body or boundary to follow that connection into its own reference.",
          "paths": [
            [
              1,
              3
            ],
            [
              2,
              4
            ]
          ],
          "concepts": [
            {
              "id": "coolant",
              "label": "Coolant"
            },
            {
              "id": "thermal-mass",
              "label": "Thermal mass"
            },
            {
              "id": "heat-transfer-modes",
              "label": "Heat transfer"
            },
            {
              "id": "thermal-model",
              "label": "Thermal model"
            }
          ]
        },
        "type": "parallel-cooling-plate",
        "implementationId": "parallel-cooling-plate",
        "url": "https://lemonergy.com/learn/glossary/blocks/parallel-cooling-plate/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/parallel-cooling-plate/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-cooling-parallel"
          ]
        },
        "studioHelp": {
          "type": "parallel-cooling-plate",
          "namespace": "physical",
          "slug": "parallel-cooling-plate",
          "canonicalSlug": "parallel-cooling-plate",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "parallel-cooling-plate",
            "name": "Parallel-channel plate",
            "domain": "thermal",
            "family": "cooling",
            "operation": "Exchanges heat between four plate zones, attached bodies and coolant flowing through the declared channel path.",
            "mechanism": [
              "Thermal contacts",
              "Metal and coolant storage",
              "Coolant transport"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal B",
                "net": null,
                "peers": []
              },
              {
                "id": "h1",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h2",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-right thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h3",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h4",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-right thermal contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "liquid-reservoir",
                "label": "Coolant pressure and temperature boundary"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M50 5V60Q50 75 70 75H130Q150 75 150 60V5"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "contactHeat1",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat1",
                "unit": "W"
              },
              {
                "id": "contactHeat2",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat2",
                "unit": "W"
              },
              {
                "id": "contactHeat3",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat3",
                "unit": "W"
              },
              {
                "id": "contactHeat4",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat4",
                "unit": "W"
              },
              {
                "id": "storedEnergy",
                "quantity": "energy",
                "declared": true,
                "consumers": [],
                "label": "stored Energy",
                "unit": "J"
              },
              {
                "id": "massFlow",
                "quantity": "mass-rate",
                "declared": true,
                "consumers": [],
                "label": "mass Flow",
                "unit": "kg/s"
              },
              {
                "id": "pressureDrop",
                "quantity": "pressure",
                "declared": true,
                "consumers": [],
                "label": "pressure Drop",
                "unit": "Pa"
              },
              {
                "id": "hydraulicPower",
                "quantity": "power",
                "declared": true,
                "consumers": [],
                "label": "hydraulic Power",
                "unit": "W"
              },
              {
                "id": "contactHeat",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat",
                "unit": "W"
              },
              {
                "id": "outletTemperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "outlet Temperature",
                "unit": "K"
              }
            ],
            "parameters": [
              {
                "id": "plateCapacityJK",
                "default": 900,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 900
              },
              {
                "id": "coolantCapacityJK",
                "default": 420,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 420
              },
              {
                "id": "plateConductanceWK",
                "default": 10,
                "unit": "W/K",
                "min": 0,
                "max": 1000000,
                "value": 10
              },
              {
                "id": "contactConductanceWK",
                "default": 100,
                "unit": "W/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 100
              },
              {
                "id": "coolantConductanceWK",
                "default": 20,
                "unit": "W/K per segment",
                "min": 0,
                "max": 1000000000,
                "value": 20
              },
              {
                "id": "hydraulicResistance",
                "default": 1000000,
                "unit": "Pa s/kg per channel",
                "min": 0.001,
                "max": 1000000000000000,
                "value": 1000000
              },
              {
                "id": "specificHeatJkgK",
                "default": 4200,
                "unit": "J/(kg K)",
                "min": 1,
                "max": 1000000,
                "value": 4200
              },
              {
                "id": "densityKgM3",
                "default": 1000,
                "unit": "kg/m3",
                "min": 1,
                "max": 100000,
                "value": 1000
              },
              {
                "id": "initialPlateTemperatureK",
                "default": 310,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 310
              },
              {
                "id": "initialCoolantTemperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:phase-change-mass",
      "type": "Block",
      "label": "Phase-change thermal mass",
      "properties": {
        "id": "phase-change-mass",
        "name": "Phase-change thermal mass",
        "kind": "studio",
        "summary": "Enthalpy storage with a finite linear melting interval; constant sensible heat capacity, no supercooling or hysteresis",
        "behavior": "Conserving component solved simultaneously with the connected network. Enthalpy storage with a finite linear melting interval; constant sensible heat capacity, no supercooling or hysteresis",
        "ports": [
          {
            "name": "h",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "liquidFraction",
            "direction": "output",
            "unit": "fraction",
            "description": "Recorded liquid fraction measurement from the conserving simulation."
          },
          {
            "name": "storedEnergy",
            "direction": "output",
            "unit": "J",
            "description": "Recorded stored energy measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "massKg",
            "label": "Mass",
            "unit": "kg",
            "default": 1,
            "description": "Material mass that contributes sensible and, where enabled, latent heat storage.",
            "min": 1e-09,
            "max": 1000000000
          },
          {
            "key": "specificHeatJkgK",
            "label": "Specific heat capacity",
            "unit": "J/(kg K)",
            "default": 2000,
            "description": "Sensible heat required per unit mass and kelvin.",
            "min": 1e-06,
            "max": 1000000000
          },
          {
            "key": "latentHeatJkg",
            "label": "Latent heat",
            "unit": "J/kg",
            "default": 200000,
            "description": "Energy per unit mass stored while the liquid fraction changes from zero to one.",
            "min": 0,
            "max": 1000000000
          },
          {
            "key": "solidusK",
            "label": "Solidus temperature",
            "unit": "K",
            "default": 330,
            "description": "Temperature at which melting begins in the finite transition interval.",
            "min": 0,
            "max": 5000
          },
          {
            "key": "liquidusK",
            "label": "Liquidus temperature",
            "unit": "K",
            "default": 334,
            "description": "Temperature at which the model is fully liquid.",
            "min": 0,
            "max": 5000
          },
          {
            "key": "initialTemperatureK",
            "label": "Initial temperature",
            "unit": "K",
            "default": 300,
            "description": "Absolute initial temperature of the thermal storage.",
            "min": 0,
            "max": 5000
          }
        ],
        "equations": [
          "H = m cp T + m latentHeat × liquidFraction",
          "liquidFraction = clip((T − solidus)/(liquidus − solidus), 0, 1)",
          "dH/dt = Σ Q̇in"
        ],
        "example": {
          "title": "Phase-change thermal mass worked example",
          "text": "Editable first-party network. mass: specificHeatJkgK=2; mass: latentHeatJkg=100; mass: solidusK=310; mass: liquidusK=320; mass: initialTemperatureK=310; heater: heatFlowW=12. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-phase-change-mass",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "massKg",
              "label": "Mass",
              "value": 1,
              "unit": "kg"
            },
            {
              "port": "specificHeatJkgK",
              "label": "Specific heat capacity",
              "value": 2,
              "unit": "J/(kg K)"
            },
            {
              "port": "latentHeatJkg",
              "label": "Latent heat",
              "value": 100,
              "unit": "J/kg"
            },
            {
              "port": "solidusK",
              "label": "Solidus temperature",
              "value": 310,
              "unit": "K"
            }
          ],
          "checks": [
            {
              "port": "mass/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 311,
              "unit": "K",
              "tolerance": 0.00031100000000000273
            },
            {
              "port": "mass/liquidFraction",
              "label": "liquidFraction",
              "atS": 1,
              "value": 0.1,
              "unit": "fraction",
              "tolerance": 1.0000000000020123e-07
            },
            {
              "port": "mass/storedEnergy",
              "label": "storedEnergy",
              "atS": 1,
              "value": 12,
              "unit": "J",
              "tolerance": 1.2000000000020007e-05
            }
          ]
        },
        "limits": [
          "Enthalpy storage with a finite linear melting interval; constant sensible heat capacity, no supercooling or hysteresis",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "physical-phase",
          "openstax-heat"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-phase-change-mass"
        ],
        "type": "phase-change-mass",
        "implementationId": "phase-change-mass",
        "url": "https://lemonergy.com/learn/glossary/blocks/phase-change-mass/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/phase-change-mass/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-phase-change-mass"
          ]
        },
        "studioHelp": {
          "type": "phase-change-mass",
          "namespace": "physical",
          "slug": "phase-change-mass",
          "canonicalSlug": "phase-change-mass",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "phase-change-mass",
            "name": "Phase-change thermal mass",
            "domain": "thermal",
            "family": "thermal-storage",
            "operation": "Stores sensible and latent heat across a finite melting interval; temperature and liquid fraction follow its enthalpy.",
            "mechanism": [
              "Heat exchange",
              "Sensible and latent storage",
              "Temperature and liquid fraction"
            ],
            "ports": [
              {
                "id": "h",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Enthalpy-storage thermal contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-heat-source",
                "label": "Heat flow source"
              }
            ],
            "symbol": [
              {
                "tag": "rect",
                "attrs": {
                  "x": 65,
                  "y": 10,
                  "width": 70,
                  "height": 60,
                  "rx": 3
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H65M80 20V60M100 20V60M120 20V60"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "storedEnergy",
                "quantity": "energy",
                "declared": true,
                "consumers": [],
                "label": "stored Energy",
                "unit": "J"
              },
              {
                "id": "liquidFraction",
                "quantity": "fraction",
                "declared": true,
                "consumers": [],
                "label": "liquid Fraction",
                "unit": "fraction"
              }
            ],
            "parameters": [
              {
                "id": "massKg",
                "default": 1,
                "unit": "kg",
                "min": 1e-09,
                "max": 1000000000,
                "value": 1
              },
              {
                "id": "specificHeatJkgK",
                "default": 2000,
                "unit": "J/(kg K)",
                "min": 1e-06,
                "max": 1000000000,
                "value": 2000
              },
              {
                "id": "latentHeatJkg",
                "default": 200000,
                "unit": "J/kg",
                "min": 0,
                "max": 1000000000,
                "value": 200000
              },
              {
                "id": "solidusK",
                "default": 330,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 330
              },
              {
                "id": "liquidusK",
                "default": 334,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 334
              },
              {
                "id": "initialTemperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-conductor",
      "type": "Block",
      "label": "Thermal conductor",
      "properties": {
        "id": "thermal-conductor",
        "name": "Thermal conductor",
        "kind": "studio",
        "summary": "One-dimensional lumped Fourier conductance",
        "behavior": "Conserving component solved simultaneously with the connected network. One-dimensional lumped Fourier conductance",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "conductivityWmK",
            "label": "Thermal conductivity",
            "unit": "W/(m K)",
            "default": 200,
            "description": "Material conductivity used by the one-dimensional conduction law.",
            "min": 0,
            "max": 1000000
          },
          {
            "key": "areaM2",
            "label": "Exchange area",
            "unit": "m2",
            "default": 0.001,
            "description": "Area used by the declared heat-transfer or parallel-plate field equation.",
            "min": 1e-12,
            "max": 1000000
          },
          {
            "key": "lengthM",
            "label": "Conduction length",
            "unit": "m",
            "default": 0.01,
            "description": "Distance through the conducting material.",
            "min": 1e-12,
            "max": 1000000
          }
        ],
        "equations": [
          "Q̇a→b = k A (Ta − Tb)/length"
        ],
        "example": {
          "title": "Thermal conductor worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-conductor",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "conductivityWmK",
              "label": "Thermal conductivity",
              "value": 200,
              "unit": "W/(m K)"
            },
            {
              "port": "areaM2",
              "label": "Exchange area",
              "value": 0.001,
              "unit": "m2"
            },
            {
              "port": "lengthM",
              "label": "Conduction length",
              "value": 0.01,
              "unit": "m"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 400,
              "unit": "W",
              "tolerance": 0.00039999999999999996
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "One-dimensional lumped Fourier conductance",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-conductor"
        ],
        "type": "thermal-conductor",
        "implementationId": "thermal-conductor",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-conductor/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-conductor/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-conductor"
          ]
        },
        "studioHelp": {
          "type": "thermal-conductor",
          "namespace": "physical",
          "slug": "thermal-conductor",
          "canonicalSlug": "thermal-conductor",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-conductor",
            "name": "Thermal conductor",
            "domain": "thermal",
            "family": "thermal-transfer",
            "operation": "Transfers heat by a lumped conductance set by conductivity, area and length.",
            "mechanism": [
              "Temperature difference",
              "Material conductance",
              "Heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 25H75L90 15L105 35L120 25H190M10 55H75L90 45L105 65L120 55H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "conductivityWmK",
                "default": 200,
                "unit": "W/(m K)",
                "min": 0,
                "max": 1000000,
                "value": 200
              },
              {
                "id": "areaM2",
                "default": 0.001,
                "unit": "m2",
                "min": 1e-12,
                "max": 1000000,
                "value": 0.001
              },
              {
                "id": "lengthM",
                "default": 0.01,
                "unit": "m",
                "min": 1e-12,
                "max": 1000000,
                "value": 0.01
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-controlled-heat-source",
      "type": "Block",
      "label": "Controlled heat flow source",
      "properties": {
        "id": "thermal-controlled-heat-source",
        "name": "Controlled heat flow source",
        "kind": "studio",
        "summary": "Ideal commanded heat transfer from a to b",
        "behavior": "Conserving component solved simultaneously with the connected network. Ideal commanded heat transfer from a to b",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "heatFlowW",
            "label": "Heat flow",
            "unit": "W",
            "default": 100,
            "description": "Heat transferred from terminal a to terminal b.",
            "min": -1000000000000,
            "max": 1000000000000
          }
        ],
        "equations": [
          "Q̇a→b = commanded heat flow"
        ],
        "example": {
          "title": "Controlled heat flow source worked example",
          "text": "Editable first-party network. heater: heatFlowW=100; command: before=100; command: after=200; command: atS=0.5. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-heat-source",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "heatFlowW",
              "label": "Heat flow",
              "value": 100,
              "unit": "W"
            }
          ],
          "checks": [
            {
              "port": "heater/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 200,
              "unit": "W",
              "tolerance": 0.00019999999999999998
            },
            {
              "port": "heater/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 0,
              "unit": "K",
              "tolerance": 1e-10
            },
            {
              "port": "heater/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": -300.15,
              "unit": "K",
              "tolerance": 0.0003001500000000037
            }
          ]
        },
        "limits": [
          "Ideal commanded heat transfer from a to b",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-controlled-heat-source"
        ],
        "type": "thermal-controlled-heat-source",
        "implementationId": "thermal-controlled-heat-source",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-controlled-heat-source/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-controlled-heat-source/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-heat-source"
          ]
        },
        "studioHelp": {
          "type": "thermal-controlled-heat-source",
          "namespace": "physical",
          "slug": "thermal-controlled-heat-source",
          "canonicalSlug": "thermal-controlled-heat-source",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-controlled-heat-source",
            "name": "Controlled heat flow source",
            "domain": "thermal",
            "family": "heat-source",
            "operation": "Transfers the configured or commanded heat flow from a to b; negative values reverse that transfer.",
            "mechanism": [
              "Heat-flow setting",
              "Energy transfer a → b"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-reference",
                "label": "Thermal reference"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 40,
                  "r": 30
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H70M130 40H190M85 55C70 40 105 40 90 20M110 55C95 40 130 40 115 20"
                }
              }
            ],
            "selection": {},
            "commands": [
              {
                "id": "command",
                "label": "Heat-flow setting",
                "quantity": "heat",
                "unit": "W",
                "active": true,
                "summary": "Heat-flow setting is a directed heat input to this component, expressed in W. Its binding supplies information; it is not a conserving connection.",
                "source": null,
                "target": null
              }
            ],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "heatFlowW",
                "default": 100,
                "unit": "W",
                "min": -1000000000000,
                "max": 1000000000000,
                "value": 100
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-controlled-temperature-source",
      "type": "Block",
      "label": "Controlled temperature difference source",
      "properties": {
        "id": "thermal-controlled-temperature-source",
        "name": "Controlled temperature difference source",
        "kind": "studio",
        "summary": "Ideal commanded Tb-Ta with solved reaction heat flow",
        "behavior": "Conserving component solved simultaneously with the connected network. Ideal commanded Tb-Ta with solved reaction heat flow",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "branchHeatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded branchHeatFlow measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "differenceK",
            "label": "Temperature difference",
            "unit": "K difference",
            "default": 300,
            "description": "Temperature at terminal b minus temperature at terminal a.",
            "min": -5000,
            "max": 5000
          }
        ],
        "equations": [
          "Tb − Ta = commanded temperature difference"
        ],
        "example": {
          "title": "Controlled temperature difference source worked example",
          "text": "Editable first-party network. target: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-temperature-source",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "differenceK",
              "label": "Temperature difference",
              "value": 320,
              "unit": "K difference"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 0,
              "unit": "K",
              "tolerance": 1e-10
            },
            {
              "port": "target/branchHeatFlow",
              "label": "branchHeatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            }
          ]
        },
        "limits": [
          "Ideal commanded Tb-Ta with solved reaction heat flow",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-controlled-temperature-source"
        ],
        "type": "thermal-controlled-temperature-source",
        "implementationId": "thermal-controlled-temperature-source",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-controlled-temperature-source/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-controlled-temperature-source/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-temperature-source"
          ]
        },
        "studioHelp": {
          "type": "thermal-controlled-temperature-source",
          "namespace": "physical",
          "slug": "thermal-controlled-temperature-source",
          "canonicalSlug": "thermal-controlled-temperature-source",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-controlled-temperature-source",
            "name": "Controlled temperature difference source",
            "domain": "thermal",
            "family": "temperature-source",
            "operation": "Imposes temperature at b minus temperature at a; the network solves the reaction heat flow needed to enforce it.",
            "mechanism": [
              "Temperature difference",
              "Imposed Tb − Ta",
              "Solved heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-reference",
                "label": "Thermal reference"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 53,
                  "r": 12
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M93 43V14A7 7 0 0 1 107 14V43M100 48V19M10 40H65M135 40H190"
                }
              }
            ],
            "selection": {},
            "commands": [
              {
                "id": "command",
                "label": "Temperature difference",
                "quantity": "temperature-difference",
                "unit": "K difference",
                "active": true,
                "summary": "Temperature difference is a directed temperature-difference input to this component, expressed in K difference. Its binding supplies information; it is not a conserving connection.",
                "source": null,
                "target": null
              }
            ],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "differenceK",
                "default": 300,
                "unit": "K difference",
                "min": -5000,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-convection",
      "type": "Block",
      "label": "Thermal convection",
      "properties": {
        "id": "thermal-convection",
        "name": "Thermal convection",
        "kind": "studio",
        "summary": "Prescribed lumped film coefficient; no resolved fluid dynamics",
        "behavior": "Conserving component solved simultaneously with the connected network. Prescribed lumped film coefficient; no resolved fluid dynamics",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "coefficientWm2K",
            "label": "Convection coefficient",
            "unit": "W/(m2 K)",
            "default": 10,
            "description": "Prescribed heat-transfer coefficient multiplying area and temperature difference.",
            "min": 0,
            "max": 1000000000
          },
          {
            "key": "areaM2",
            "label": "Exchange area",
            "unit": "m2",
            "default": 0.2,
            "description": "Area used by the declared heat-transfer or parallel-plate field equation.",
            "min": 1e-12,
            "max": 1000000
          }
        ],
        "equations": [
          "Q̇a→b = h A (Ta − Tb)"
        ],
        "example": {
          "title": "Thermal convection worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-convection",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "coefficientWm2K",
              "label": "Convection coefficient",
              "value": 10,
              "unit": "W/(m2 K)"
            },
            {
              "port": "areaM2",
              "label": "Exchange area",
              "value": 0.2,
              "unit": "m2"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 40,
              "unit": "W",
              "tolerance": 3.9999999999999996e-05
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "Prescribed lumped film coefficient; no resolved fluid dynamics",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-convection"
        ],
        "type": "thermal-convection",
        "implementationId": "thermal-convection",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-convection/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-convection/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-convection"
          ]
        },
        "studioHelp": {
          "type": "thermal-convection",
          "namespace": "physical",
          "slug": "thermal-convection",
          "canonicalSlug": "thermal-convection",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-convection",
            "name": "Thermal convection",
            "domain": "thermal",
            "family": "thermal-transfer",
            "operation": "Transfers heat using a prescribed film coefficient and area; it does not solve the surrounding fluid.",
            "mechanism": [
              "Temperature difference",
              "Film coefficient × area",
              "Heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 25H75L90 15L105 35L120 25H190M10 55H75L90 45L105 65L120 55H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "coefficientWm2K",
                "default": 10,
                "unit": "W/(m2 K)",
                "min": 0,
                "max": 1000000000,
                "value": 10
              },
              {
                "id": "areaM2",
                "default": 0.2,
                "unit": "m2",
                "min": 1e-12,
                "max": 1000000,
                "value": 0.2
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-flow-sensor",
      "type": "Block",
      "label": "Heat flow sensor",
      "properties": {
        "id": "thermal-flow-sensor",
        "name": "Heat flow sensor",
        "kind": "studio",
        "summary": "Ideal inline sensor with zero temperature drop; positive flow a to b",
        "behavior": "Conserving component solved simultaneously with the connected network. Ideal inline sensor with zero temperature drop; positive flow a to b",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "branchHeatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded branchHeatFlow measurement from the conserving simulation."
          }
        ],
        "parameters": [],
        "equations": [
          "Ta = Tb",
          "Q̇a→b is solved by the connected heat balance"
        ],
        "example": {
          "title": "Heat flow sensor worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-flow-sensor",
          "label": "Open Studio example",
          "inputs": [],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/branchHeatFlow",
              "label": "branchHeatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            }
          ]
        },
        "limits": [
          "Ideal inline sensor with zero temperature drop; positive flow a to b",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-flow-sensor"
        ],
        "type": "thermal-flow-sensor",
        "implementationId": "thermal-flow-sensor",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-flow-sensor/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-flow-sensor/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-flow-sensor"
          ]
        },
        "studioHelp": {
          "type": "thermal-flow-sensor",
          "namespace": "physical",
          "slug": "thermal-flow-sensor",
          "canonicalSlug": "thermal-flow-sensor",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-flow-sensor",
            "name": "Heat flow sensor",
            "domain": "thermal",
            "family": "sensor",
            "operation": "Measures series heat flow with zero temperature difference across its terminals. Positive measured flow is a to b.",
            "mechanism": [
              "Series thermal branch",
              "Zero temperature drop",
              "Heat-flow signal"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              },
              {
                "type": "thermal-conductor",
                "label": "Thermal conductor"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 40,
                  "r": 30
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H70M130 40H190M100 40L116 22M80 52A24 24 0 0 1 120 52"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": []
          }
        }
      }
    },
    {
      "id": "block:thermal-heat-source",
      "type": "Block",
      "label": "Heat flow source",
      "properties": {
        "id": "thermal-heat-source",
        "name": "Heat flow source",
        "kind": "studio",
        "summary": "Ideal configured heat transfer from a to b",
        "behavior": "Conserving component solved simultaneously with the connected network. Ideal configured heat transfer from a to b",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "heatFlowW",
            "label": "Heat flow",
            "unit": "W",
            "default": 100,
            "description": "Heat transferred from terminal a to terminal b.",
            "min": -1000000000000,
            "max": 1000000000000
          }
        ],
        "equations": [
          "Q̇a→b = configured heat flow"
        ],
        "example": {
          "title": "Heat flow source worked example",
          "text": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-heat-source",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "heatFlowW",
              "label": "Heat flow",
              "value": 100,
              "unit": "W"
            }
          ],
          "checks": [
            {
              "port": "heater/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 100,
              "unit": "W",
              "tolerance": 9.999999999999999e-05
            },
            {
              "port": "heater/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 0,
              "unit": "K",
              "tolerance": 1e-10
            },
            {
              "port": "heater/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": -300.1,
              "unit": "K",
              "tolerance": 0.0003001000000000015
            }
          ]
        },
        "limits": [
          "Ideal configured heat transfer from a to b",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-heat-source"
        ],
        "type": "thermal-heat-source",
        "implementationId": "thermal-heat-source",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-heat-source/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-heat-source/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-heat-source"
          ]
        },
        "studioHelp": {
          "type": "thermal-heat-source",
          "namespace": "physical",
          "slug": "thermal-heat-source",
          "canonicalSlug": "thermal-heat-source",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-heat-source",
            "name": "Heat flow source",
            "domain": "thermal",
            "family": "heat-source",
            "operation": "Transfers the configured or commanded heat flow from a to b; negative values reverse that transfer.",
            "mechanism": [
              "Heat-flow setting",
              "Energy transfer a → b"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-reference",
                "label": "Thermal reference"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 40,
                  "r": 30
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H70M130 40H190M85 55C70 40 105 40 90 20M110 55C95 40 130 40 115 20"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "heatFlowW",
                "default": 100,
                "unit": "W",
                "min": -1000000000000,
                "max": 1000000000000,
                "value": 100
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-insulator",
      "type": "Block",
      "label": "Insulated thermal port",
      "properties": {
        "id": "thermal-insulator",
        "name": "Insulated thermal port",
        "kind": "studio",
        "summary": "Zero heat-flow termination with unconstrained temperature",
        "behavior": "Conserving component solved simultaneously with the connected network. Zero heat-flow termination with unconstrained temperature",
        "ports": [
          {
            "name": "h",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          }
        ],
        "parameters": [],
        "equations": [
          "Q̇ = 0"
        ],
        "example": {
          "title": "Insulated thermal port worked example",
          "text": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-insulator",
          "label": "Open Studio example",
          "inputs": [],
          "checks": [
            {
              "port": "insulator/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 0,
              "unit": "W",
              "tolerance": 1e-10
            },
            {
              "port": "insulator/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 300.1,
              "unit": "K",
              "tolerance": 0.0003001000000000015
            }
          ]
        },
        "limits": [
          "Zero heat-flow termination with unconstrained temperature",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-insulator"
        ],
        "type": "thermal-insulator",
        "implementationId": "thermal-insulator",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-insulator/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-insulator/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-insulator"
          ]
        },
        "studioHelp": {
          "type": "thermal-insulator",
          "namespace": "physical",
          "slug": "thermal-insulator",
          "canonicalSlug": "thermal-insulator",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-insulator",
            "name": "Insulated thermal port",
            "domain": "thermal",
            "family": "open",
            "operation": "Terminates a thermal pin with zero heat flow without fixing its temperature.",
            "mechanism": [
              "Thermal contact",
              "No heat transfer"
            ],
            "ports": [
              {
                "id": "h",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Insulated thermal contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-reference",
                "label": "Thermal reference"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H80M120 40H190"
                }
              },
              {
                "tag": "circle",
                "attrs": {
                  "cx": 85,
                  "cy": 40,
                  "r": 5
                }
              },
              {
                "tag": "circle",
                "attrs": {
                  "cx": 115,
                  "cy": 40,
                  "r": 5
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": []
          }
        }
      }
    },
    {
      "id": "block:thermal-mass",
      "type": "Block",
      "label": "Thermal mass",
      "properties": {
        "id": "thermal-mass",
        "name": "Thermal mass",
        "kind": "studio",
        "summary": "Constant heat capacity with conserved sensible energy",
        "behavior": "Conserving component solved simultaneously with the connected network. Constant heat capacity with conserved sensible energy",
        "ports": [
          {
            "name": "h",
            "direction": "terminal",
            "unit": "K; W",
            "description": "Thermal conserving terminal. It shares the connected node temperature and exchanges heat in watts. Incoming heat raises the body temperature according to mass × specific heat; outgoing heat lowers it. The thermal mass does not generate heat by itself."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "storedEnergy",
            "direction": "output",
            "unit": "J",
            "description": "Recorded stored energy measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "massKg",
            "label": "Mass",
            "unit": "kg",
            "default": 1,
            "description": "Material mass that contributes sensible and, where enabled, latent heat storage.",
            "min": 1e-09,
            "max": 1000000000
          },
          {
            "key": "specificHeatJkgK",
            "label": "Specific heat capacity",
            "unit": "J/(kg K)",
            "default": 1000,
            "description": "Sensible heat required per unit mass and kelvin.",
            "min": 1e-06,
            "max": 1000000000
          },
          {
            "key": "initialTemperatureK",
            "label": "Initial temperature",
            "unit": "K",
            "default": 300,
            "description": "Absolute initial temperature of the thermal storage.",
            "min": 0,
            "max": 5000
          }
        ],
        "equations": [
          "m cp dT/dt = Σ Q̇in"
        ],
        "example": {
          "title": "Thermal mass worked example",
          "text": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-mass",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "massKg",
              "label": "Mass",
              "value": 1,
              "unit": "kg"
            },
            {
              "port": "specificHeatJkgK",
              "label": "Specific heat capacity",
              "value": 1000,
              "unit": "J/(kg K)"
            },
            {
              "port": "initialTemperatureK",
              "label": "Initial temperature",
              "value": 300,
              "unit": "K"
            }
          ],
          "checks": [
            {
              "port": "mass/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 300.1,
              "unit": "K",
              "tolerance": 0.0003001000000000015
            },
            {
              "port": "mass/storedEnergy",
              "label": "storedEnergy",
              "atS": 1,
              "value": 100,
              "unit": "J",
              "tolerance": 0.00010000000000159174
            }
          ]
        },
        "limits": [
          "Constant heat capacity with conserved sensible energy",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-mass",
          "native-edge-cooling-plate",
          "native-parallel-cooling-plate",
          "native-u-cooling-plate"
        ],
        "connectionGuide": {
          "kind": "thermal-mass",
          "title": "A load is a body with stored heat",
          "summary": "In the plate example, load1 to load4 are passive thermal masses. Their temperatures change as heat crosses their h terminals.",
          "concepts": [
            {
              "id": "thermal-mass",
              "label": "Thermal mass"
            },
            {
              "id": "heat-transfer-modes",
              "label": "Heat transfer"
            },
            {
              "id": "thermal-model",
              "label": "Thermal model"
            },
            {
              "id": "specific-heat-capacity",
              "label": "Specific heat capacity"
            }
          ]
        },
        "type": "thermal-mass",
        "implementationId": "thermal-mass",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-mass/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-mass/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-mass"
          ]
        },
        "studioHelp": {
          "type": "thermal-mass",
          "namespace": "physical",
          "slug": "thermal-mass",
          "canonicalSlug": "thermal-mass",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-mass",
            "name": "Thermal mass",
            "domain": "thermal",
            "family": "thermal-storage",
            "operation": "Stores sensible heat; net heat input changes temperature according to mass times specific heat.",
            "mechanism": [
              "Net heat flow",
              "Heat capacity",
              "Temperature"
            ],
            "ports": [
              {
                "id": "h",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Stored-heat body contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-heat-source",
                "label": "Heat flow source"
              },
              {
                "type": "thermal-conductor",
                "label": "Thermal conductor"
              }
            ],
            "symbol": [
              {
                "tag": "rect",
                "attrs": {
                  "x": 65,
                  "y": 10,
                  "width": 70,
                  "height": 60,
                  "rx": 3
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H65M80 20V60M100 20V60M120 20V60"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "storedEnergy",
                "quantity": "energy",
                "declared": true,
                "consumers": [],
                "label": "stored Energy",
                "unit": "J"
              }
            ],
            "parameters": [
              {
                "id": "massKg",
                "default": 1,
                "unit": "kg",
                "min": 1e-09,
                "max": 1000000000,
                "value": 1
              },
              {
                "id": "specificHeatJkgK",
                "default": 1000,
                "unit": "J/(kg K)",
                "min": 1e-06,
                "max": 1000000000,
                "value": 1000
              },
              {
                "id": "initialTemperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-radiation",
      "type": "Block",
      "label": "Thermal radiation",
      "properties": {
        "id": "thermal-radiation",
        "name": "Thermal radiation",
        "kind": "studio",
        "summary": "Effective two-body Stefan-Boltzmann exchange at absolute temperatures",
        "behavior": "Conserving component solved simultaneously with the connected network. Effective two-body Stefan-Boltzmann exchange at absolute temperatures",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "emissivity",
            "label": "Effective emissivity",
            "unit": "fraction",
            "default": 0.8,
            "description": "Effective surface emissivity used in radiative heat exchange.",
            "min": 0,
            "max": 1
          },
          {
            "key": "viewFactor",
            "label": "Effective view factor",
            "unit": "fraction",
            "default": 1,
            "description": "Fraction of radiative exchange represented between the two modeled surfaces.",
            "min": 0,
            "max": 1
          },
          {
            "key": "areaM2",
            "label": "Exchange area",
            "unit": "m2",
            "default": 0.02,
            "description": "Area used by the declared heat-transfer or parallel-plate field equation.",
            "min": 1e-12,
            "max": 1000000
          }
        ],
        "equations": [
          "Q̇a→b = ε F σ A (Ta⁴ − Tb⁴)"
        ],
        "example": {
          "title": "Thermal radiation worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-radiation",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "emissivity",
              "label": "Effective emissivity",
              "value": 0.8,
              "unit": "fraction"
            },
            {
              "port": "viewFactor",
              "label": "Effective view factor",
              "value": 1,
              "unit": "fraction"
            },
            {
              "port": "areaM2",
              "label": "Exchange area",
              "value": 0.02,
              "unit": "m2"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 2.1645044,
              "unit": "W",
              "tolerance": 2.1645043958220922e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "Effective two-body Stefan-Boltzmann exchange at absolute temperatures",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-radiation"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-radiation"
        ],
        "type": "thermal-radiation",
        "implementationId": "thermal-radiation",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-radiation/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-radiation/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-radiation"
          ]
        },
        "studioHelp": {
          "type": "thermal-radiation",
          "namespace": "physical",
          "slug": "thermal-radiation",
          "canonicalSlug": "thermal-radiation",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-radiation",
            "name": "Thermal radiation",
            "domain": "thermal",
            "family": "thermal-transfer",
            "operation": "Exchanges heat according to absolute temperatures to the fourth power, emissivity, area and view factor.",
            "mechanism": [
              "Absolute temperatures",
              "Radiative exchange",
              "Heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 25H75L90 15L105 35L120 25H190M10 55H75L90 45L105 65L120 55H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "emissivity",
                "default": 0.8,
                "unit": "fraction",
                "min": 0,
                "max": 1,
                "value": 0.8
              },
              {
                "id": "viewFactor",
                "default": 1,
                "unit": "fraction",
                "min": 0,
                "max": 1,
                "value": 1
              },
              {
                "id": "areaM2",
                "default": 0.02,
                "unit": "m2",
                "min": 1e-12,
                "max": 1000000,
                "value": 0.02
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-reference",
      "type": "Block",
      "label": "Thermal reference",
      "properties": {
        "id": "thermal-reference",
        "name": "Thermal reference",
        "kind": "studio",
        "summary": "Absolute-zero temperature datum; not an ambient-temperature boundary",
        "behavior": "Conserving component solved simultaneously with the connected network. Absolute-zero temperature datum; not an ambient-temperature boundary",
        "ports": [
          {
            "name": "h",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "reactionHeat",
            "direction": "output",
            "unit": "W",
            "description": "Recorded reactionHeat measurement from the conserving simulation."
          }
        ],
        "parameters": [],
        "equations": [
          "T = 0 K"
        ],
        "example": {
          "title": "Thermal reference worked example",
          "text": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-reference",
          "label": "Open Studio example",
          "inputs": [],
          "checks": [
            {
              "port": "reference/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 0,
              "unit": "K",
              "tolerance": 1e-10
            },
            {
              "port": "reference/reactionHeat",
              "label": "reactionHeat",
              "atS": 1,
              "value": 100,
              "unit": "W",
              "tolerance": 9.999999999999999e-05
            }
          ]
        },
        "limits": [
          "Absolute-zero temperature datum; not an ambient-temperature boundary",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-reference"
        ],
        "type": "thermal-reference",
        "implementationId": "thermal-reference",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-reference/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-reference/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-reference"
          ]
        },
        "studioHelp": {
          "type": "thermal-reference",
          "namespace": "physical",
          "slug": "thermal-reference",
          "canonicalSlug": "thermal-reference",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-reference",
            "name": "Thermal reference",
            "domain": "thermal",
            "family": "reference",
            "operation": "Provides an absolute-zero temperature datum; an ambient boundary requires a temperature source.",
            "mechanism": [
              "Absolute temperature datum",
              "T = 0 K"
            ],
            "ports": [
              {
                "id": "h",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Absolute-zero thermal reference",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-temperature-source",
                "label": "Temperature difference source"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M100 5V35M65 35H135M75 47H125M88 59H112"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "reactionHeat",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "reaction Heat",
                "unit": "W"
              }
            ],
            "parameters": []
          }
        }
      }
    },
    {
      "id": "block:thermal-resistance",
      "type": "Block",
      "label": "Thermal resistance",
      "properties": {
        "id": "thermal-resistance",
        "name": "Thermal resistance",
        "kind": "studio",
        "summary": "Finite linear two-port thermal resistance",
        "behavior": "Conserving component solved simultaneously with the connected network. Finite linear two-port thermal resistance",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "resistanceKW",
            "label": "Thermal resistance",
            "unit": "K/W",
            "default": 2,
            "description": "Temperature difference required per unit heat flow.",
            "min": 1e-09,
            "max": 1000000000000
          }
        ],
        "equations": [
          "Q̇a→b = (Ta − Tb)/Rthermal"
        ],
        "example": {
          "title": "Thermal resistance worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-resistance",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "resistanceKW",
              "label": "Thermal resistance",
              "value": 2,
              "unit": "K/W"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "Finite linear two-port thermal resistance",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-resistance"
        ],
        "type": "thermal-resistance",
        "implementationId": "thermal-resistance",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-resistance/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-resistance/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-resistance"
          ]
        },
        "studioHelp": {
          "type": "thermal-resistance",
          "namespace": "physical",
          "slug": "thermal-resistance",
          "canonicalSlug": "thermal-resistance",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-resistance",
            "name": "Thermal resistance",
            "domain": "thermal",
            "family": "thermal-transfer",
            "operation": "Transfers heat in proportion to temperature difference divided by thermal resistance.",
            "mechanism": [
              "Temperature difference",
              "Thermal resistance",
              "Heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 25H75L90 15L105 35L120 25H190M10 55H75L90 45L105 65L120 55H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "resistanceKW",
                "default": 2,
                "unit": "K/W",
                "min": 1e-09,
                "max": 1000000000000,
                "value": 2
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-temperature-sensor",
      "type": "Block",
      "label": "Temperature sensor",
      "properties": {
        "id": "thermal-temperature-sensor",
        "name": "Temperature sensor",
        "kind": "studio",
        "summary": "Nonloading absolute temperature at a and temperature difference a minus b",
        "behavior": "Conserving component solved simultaneously with the connected network. Nonloading absolute temperature at a and temperature difference a minus b",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "temperatureDifference",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperatureDifference measurement from the conserving simulation."
          }
        ],
        "parameters": [],
        "equations": [
          "Tmeasured = Ta",
          "ΔTmeasured = Ta − Tb",
          "Q̇ = 0"
        ],
        "example": {
          "title": "Temperature sensor worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-sensor",
          "label": "Open Studio example",
          "inputs": [],
          "checks": [
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/temperatureDifference",
              "label": "temperatureDifference",
              "atS": 1,
              "value": 20,
              "unit": "K",
              "tolerance": 1.9999999999999998e-05
            }
          ]
        },
        "limits": [
          "Nonloading absolute temperature at a and temperature difference a minus b",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-temperature-sensor"
        ],
        "type": "thermal-temperature-sensor",
        "implementationId": "thermal-temperature-sensor",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-temperature-sensor/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-temperature-sensor/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-sensor"
          ]
        },
        "studioHelp": {
          "type": "thermal-temperature-sensor",
          "namespace": "physical",
          "slug": "thermal-temperature-sensor",
          "canonicalSlug": "thermal-temperature-sensor",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-temperature-sensor",
            "name": "Temperature sensor",
            "domain": "thermal",
            "family": "sensor",
            "operation": "Measures temperature at a and the difference a minus b without transferring heat.",
            "mechanism": [
              "Two temperatures",
              "Nonloading measurement",
              "Temperature signals"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-flow-sensor",
                "label": "Heat flow sensor"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 40,
                  "r": 30
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 40H70M130 40H190M100 40L116 22M80 52A24 24 0 0 1 120 52"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              }
            ],
            "parameters": []
          }
        }
      }
    },
    {
      "id": "block:thermal-temperature-source",
      "type": "Block",
      "label": "Temperature difference source",
      "properties": {
        "id": "thermal-temperature-source",
        "name": "Temperature difference source",
        "kind": "studio",
        "summary": "Ideal constraint Tb-Ta; reaction heat flow is solved, not prescribed",
        "behavior": "Conserving component solved simultaneously with the connected network. Ideal constraint Tb-Ta; reaction heat flow is solved, not prescribed",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "branchHeatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded branchHeatFlow measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "differenceK",
            "label": "Temperature difference",
            "unit": "K difference",
            "default": 300,
            "description": "Temperature at terminal b minus temperature at terminal a.",
            "min": -5000,
            "max": 5000
          }
        ],
        "equations": [
          "Tb − Ta = configured temperature difference"
        ],
        "example": {
          "title": "Temperature difference source worked example",
          "text": "Editable first-party network. target: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-source",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "differenceK",
              "label": "Temperature difference",
              "value": 320,
              "unit": "K difference"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 0,
              "unit": "K",
              "tolerance": 1e-10
            },
            {
              "port": "target/branchHeatFlow",
              "label": "branchHeatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            }
          ]
        },
        "limits": [
          "Ideal constraint Tb-Ta; reaction heat flow is solved, not prescribed",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-temperature-source"
        ],
        "type": "thermal-temperature-source",
        "implementationId": "thermal-temperature-source",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-temperature-source/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-temperature-source/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-source"
          ]
        },
        "studioHelp": {
          "type": "thermal-temperature-source",
          "namespace": "physical",
          "slug": "thermal-temperature-source",
          "canonicalSlug": "thermal-temperature-source",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-temperature-source",
            "name": "Temperature difference source",
            "domain": "thermal",
            "family": "temperature-source",
            "operation": "Imposes temperature at b minus temperature at a; the network solves the reaction heat flow needed to enforce it.",
            "mechanism": [
              "Temperature difference",
              "Imposed Tb − Ta",
              "Solved heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-reference",
                "label": "Thermal reference"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "circle",
                "attrs": {
                  "cx": 100,
                  "cy": 53,
                  "r": 12
                }
              },
              {
                "tag": "path",
                "attrs": {
                  "d": "M93 43V14A7 7 0 0 1 107 14V43M100 48V19M10 40H65M135 40H190"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              }
            ],
            "parameters": [
              {
                "id": "differenceK",
                "default": 300,
                "unit": "K difference",
                "min": -5000,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:thermal-variable-resistance",
      "type": "Block",
      "label": "Controlled thermal resistance",
      "properties": {
        "id": "thermal-variable-resistance",
        "name": "Controlled thermal resistance",
        "kind": "studio",
        "summary": "Live thermal resistance with declared positive floor and limited-command diagnostic",
        "behavior": "Conserving component solved simultaneously with the connected network. Live thermal resistance with declared positive floor and limited-command diagnostic",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "K; W",
            "description": "thermal conserving connection; absolute temperature with balanced heat flow."
          },
          {
            "name": "heatFlow",
            "direction": "output",
            "unit": "W",
            "description": "Recorded heat flow measurement from the conserving simulation."
          },
          {
            "name": "temperature",
            "direction": "output",
            "unit": "K",
            "description": "Recorded temperature measurement from the conserving simulation."
          },
          {
            "name": "limited",
            "direction": "output",
            "unit": "fraction",
            "description": "Recorded limited measurement from the conserving simulation."
          }
        ],
        "parameters": [
          {
            "key": "resistanceKW",
            "label": "Thermal resistance",
            "unit": "K/W",
            "default": 2,
            "description": "Temperature difference required per unit heat flow.",
            "min": 1e-09,
            "max": 1000000000000
          },
          {
            "key": "minimumResistanceKW",
            "label": "Minimum thermal resistance",
            "unit": "K/W",
            "default": 1e-06,
            "description": "Positive floor applied to the commanded thermal resistance.",
            "min": 1e-12,
            "max": 1000000000
          }
        ],
        "equations": [
          "R = max(Rcommand, Rmin)",
          "Q̇a→b = (Ta − Tb)/R"
        ],
        "example": {
          "title": "Controlled thermal resistance worked example",
          "text": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-variable-resistance",
          "label": "Open Studio example",
          "inputs": [
            {
              "port": "resistanceKW",
              "label": "Thermal resistance",
              "value": 2,
              "unit": "K/W"
            },
            {
              "port": "minimumResistanceKW",
              "label": "Minimum thermal resistance",
              "value": 1e-06,
              "unit": "K/W"
            }
          ],
          "checks": [
            {
              "port": "target/heatFlow",
              "label": "heatFlow",
              "atS": 1,
              "value": 10,
              "unit": "W",
              "tolerance": 9.999999999999999e-06
            },
            {
              "port": "target/temperature",
              "label": "temperature",
              "atS": 1,
              "value": 320,
              "unit": "K",
              "tolerance": 0.00031999999999999997
            },
            {
              "port": "target/limited",
              "label": "limited",
              "atS": 1,
              "value": 0,
              "unit": "fraction",
              "tolerance": 1e-10
            }
          ]
        },
        "limits": [
          "Live thermal resistance with declared positive floor and limited-command diagnostic",
          "Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run."
        ],
        "references": [
          "openstax-heat",
          "physical-enthalpy"
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-thermal-variable-resistance"
        ],
        "type": "thermal-variable-resistance",
        "implementationId": "thermal-variable-resistance",
        "url": "https://lemonergy.com/learn/glossary/blocks/thermal-variable-resistance/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/thermal-variable-resistance/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-thermal-variable-resistance"
          ]
        },
        "studioHelp": {
          "type": "thermal-variable-resistance",
          "namespace": "physical",
          "slug": "thermal-variable-resistance",
          "canonicalSlug": "thermal-variable-resistance",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "thermal-variable-resistance",
            "name": "Controlled thermal resistance",
            "domain": "thermal",
            "family": "thermal-transfer",
            "operation": "Transfers heat through a commanded thermal resistance with a positive lower bound.",
            "mechanism": [
              "Resistance command",
              "Temperature difference",
              "Heat flow"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Thermal side B",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              },
              {
                "type": "thermal-temperature-sensor",
                "label": "Temperature sensor"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M10 25H75L90 15L105 35L120 25H190M10 55H75L90 45L105 65L120 55H190"
                }
              }
            ],
            "selection": {},
            "commands": [
              {
                "id": "resistance",
                "label": "Resistance command",
                "quantity": "thermal-resistance",
                "unit": "K/W",
                "active": true,
                "summary": "Resistance command is a directed thermal-resistance input to this component, expressed in K/W. Its binding supplies information; it is not a conserving connection.",
                "source": null,
                "target": null
              }
            ],
            "outputs": [
              {
                "id": "temperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "temperature",
                "unit": "K"
              },
              {
                "id": "temperatureDifference",
                "quantity": "temperature-difference",
                "declared": true,
                "consumers": [],
                "label": "temperature Difference",
                "unit": "K difference"
              },
              {
                "id": "heatFlow",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "heat Flow",
                "unit": "W"
              },
              {
                "id": "resistance",
                "quantity": "thermal-resistance",
                "declared": true,
                "consumers": [],
                "label": "resistance",
                "unit": "K/W"
              },
              {
                "id": "limited",
                "quantity": "fraction",
                "declared": true,
                "consumers": [],
                "label": "limited",
                "unit": "fraction"
              }
            ],
            "parameters": [
              {
                "id": "resistanceKW",
                "default": 2,
                "unit": "K/W",
                "min": 1e-09,
                "max": 1000000000000,
                "value": 2
              },
              {
                "id": "minimumResistanceKW",
                "default": 1e-06,
                "unit": "K/W",
                "min": 1e-12,
                "max": 1000000000,
                "value": 1e-06
              }
            ]
          }
        }
      }
    },
    {
      "id": "block:u-cooling-plate",
      "type": "Block",
      "label": "U-channel plate",
      "properties": {
        "id": "u-cooling-plate",
        "name": "U-channel plate",
        "kind": "studio",
        "summary": "A plate with four thermal contacts and a defined coolant path. Explore which body connects to each contact and how pressure drives coolant through the plate.",
        "behavior": "Four metal temperature nodes form a fixed 2 × 2 conduction mesh with four thermal contact ports. Coolant follows one four-segment U path. Metal and coolant have finite heat storage. Pressure difference drives reversible mass and enthalpy transport; hydraulic dissipation enters the coolant energy balance. Each liquid boundary requires an explicit pressure/temperature reservoir.",
        "ports": [
          {
            "name": "a",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal A: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "b",
            "direction": "terminal",
            "unit": "Pa / kg/s / K / W",
            "description": "Coolant terminal B: connects to a pressure and temperature boundary. The connected node shares pressure and carries mass and enthalpy flow. Positive plate massFlow is A to B; negative massFlow reverses the inlet and outlet roles."
          },
          {
            "name": "h1",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 1 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h2",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 2 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h3",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 3 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "h4",
            "direction": "terminal",
            "unit": "K / W",
            "description": "Thermal contact for metal zone 4 in the fixed 2 × 2 plate mesh. Connect the h pin of a thermal mass here. Heat enters the plate when the connected body is warmer than this zone; heat can reverse. This is a temperature/heat-flow connection, not a coolant port."
          },
          {
            "name": "massFlow",
            "direction": "output",
            "unit": "kg/s",
            "description": "Total coolant mass flow. Positive means A to B; negative means B to A. Parallel channels contribute to the total."
          },
          {
            "name": "pressureDrop",
            "direction": "output",
            "unit": "Pa",
            "description": "Boundary A pressure minus boundary B pressure. Its sign determines coolant direction."
          },
          {
            "name": "hydraulicPower",
            "direction": "output",
            "unit": "W",
            "description": "Pressure-work dissipation entering the coolant as heat: total mass flow × pressure drop / density."
          },
          {
            "name": "contactHeat",
            "direction": "output",
            "unit": "W",
            "description": "Sum of heat entering the plate through h1 to h4. Positive when the connected bodies deliver heat to the plate."
          },
          {
            "name": "outletTemperature",
            "direction": "output",
            "unit": "K",
            "description": "Coolant temperature leaving the downstream end of the plate, following the actual flow direction. Parallel-channel outlet temperatures are averaged."
          },
          {
            "name": "storedEnergy",
            "direction": "output",
            "unit": "J",
            "description": "Change in metal plus coolant sensible energy relative to their configured initial temperatures."
          }
        ],
        "parameters": [
          {
            "key": "plateCapacityJK",
            "label": "Total plate heat capacity",
            "unit": "J/K",
            "default": 900,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total plate heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantCapacityJK",
            "label": "Total coolant heat capacity",
            "unit": "J/K",
            "default": 420,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Total coolant heat capacity. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "plateConductanceWK",
            "label": "Conductance between metal nodes",
            "unit": "W/K",
            "default": 10,
            "min": 0,
            "max": 1000000,
            "description": "Conductance between metal nodes. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "contactConductanceWK",
            "label": "Thermal contact conductance",
            "unit": "W/K",
            "default": 100,
            "min": 1e-06,
            "max": 1000000000,
            "description": "Thermal contact conductance. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "coolantConductanceWK",
            "label": "Metal-to-coolant conductance per segment",
            "unit": "W/K per segment",
            "default": 20,
            "min": 0,
            "max": 1000000000,
            "description": "Metal-to-coolant conductance per segment. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "hydraulicResistance",
            "label": "Hydraulic resistance per channel",
            "unit": "Pa s/kg per channel",
            "default": 1000000,
            "min": 0.001,
            "max": 1000000000000000,
            "description": "Hydraulic resistance per channel. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "specificHeatJkgK",
            "label": "Coolant specific heat",
            "unit": "J/(kg K)",
            "default": 4200,
            "min": 1,
            "max": 1000000,
            "description": "Coolant specific heat. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "densityKgM3",
            "label": "Coolant density",
            "unit": "kg/m3",
            "default": 1000,
            "min": 1,
            "max": 100000,
            "description": "Coolant density. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialPlateTemperatureK",
            "label": "Initial plate temperature",
            "unit": "K",
            "default": 310,
            "min": 0,
            "max": 5000,
            "description": "Initial plate temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          },
          {
            "key": "initialCoolantTemperatureK",
            "label": "Initial coolant temperature",
            "unit": "K",
            "default": 300,
            "min": 0,
            "max": 5000,
            "description": "Initial coolant temperature. Numerical bounds are model-validation limits, not physical operating ratings."
          }
        ],
        "equations": [
          "mass flow per channel = (pressureA-pressureB)/hydraulicResistance",
          "contact heat[j] = contactConductance*(contactTemperature[j]-plateTemperature[j])",
          "metal heat capacity per node = plateCapacity/4",
          "hydraulicPower = totalMassFlow*(pressureA-pressureB)/density",
          "coolant heat capacity*dT/dt = metal-to-coolant heat + advective enthalpy + hydraulic heat"
        ],
        "example": {
          "title": "U-channel plate worked example",
          "text": "The bundled model connects four thermal masses initially at 320 K to a 310 K plate, with 300 K coolant reservoirs at 200 kPa and 100 kPa. With channel resistance 10^6 Pa s/kg, the total flow is 0.1 kg/s and hydraulic dissipation is 10 W. After 0.2 s all four loads cool below their initial temperature. The loads cool from stored sensible heat; no continuous heater is attached.",
          "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-u",
          "label": "Open Studio example",
          "checks": [
            {
              "port": "massFlow",
              "label": "Total coolant mass flow",
              "atS": 0.2,
              "value": 0.1,
              "unit": "kg/s",
              "tolerance": 1e-06
            },
            {
              "port": "hydraulicPower",
              "label": "Hydraulic dissipation",
              "atS": 0.2,
              "value": 10,
              "unit": "W",
              "tolerance": 1e-06
            }
          ],
          "inputs": [
            {
              "port": "a",
              "label": "Inlet boundary pressure",
              "value": 200000,
              "unit": "Pa"
            },
            {
              "port": "b",
              "label": "Outlet boundary pressure",
              "value": 100000,
              "unit": "Pa"
            }
          ]
        },
        "limits": [
          "Fixed 2 × 2 metal mesh and the stated coolant path. Constant properties and single-phase incompressible coolant. No arbitrary liquid junction solver, configurable grid, resolved channel geometry or phase change."
        ],
        "availability": {
          "status": "released",
          "label": "Available in Lemonergy Studio",
          "detail": "The bundled example is available in the production release verified on 28 October 2026. The parameters and examples here are synthetic teaching fixtures, not a characterized cell or a validated operating limit."
        },
        "references": [
          "openstax-heat"
        ],
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ],
        "sourceRepository": "Lemonergy Studio public contract",
        "sourceRevision": "verification-2026-10-27",
        "caseIds": [
          "native-u-cooling-plate"
        ],
        "connectionGuide": {
          "kind": "cooling-plate",
          "title": "Trace the cooling connections",
          "summary": "Select a contact to explain its pin. Open a warm body or boundary to follow that connection into its own reference.",
          "paths": [
            [
              1,
              3,
              4,
              2
            ]
          ],
          "concepts": [
            {
              "id": "coolant",
              "label": "Coolant"
            },
            {
              "id": "thermal-mass",
              "label": "Thermal mass"
            },
            {
              "id": "heat-transfer-modes",
              "label": "Heat transfer"
            },
            {
              "id": "thermal-model",
              "label": "Thermal model"
            }
          ]
        },
        "type": "u-cooling-plate",
        "implementationId": "u-cooling-plate",
        "url": "https://lemonergy.com/learn/glossary/blocks/u-cooling-plate/",
        "documentationUrl": "https://lemonergy.com/learn/glossary/blocks/u-cooling-plate/",
        "sourceFile": "block-library.json",
        "reviewed": "2026-10-27",
        "releaseEvidence": {
          "environment": "production",
          "status": "verified",
          "revision": "e76cadfc203e15eb41f3478d8b1044a5b851953d",
          "verifiedOn": "2026-10-28",
          "exampleUrls": [
            "https://design.lemonergy.com/cosim.html?example=physical-cooling-u"
          ]
        },
        "studioHelp": {
          "type": "u-cooling-plate",
          "namespace": "physical",
          "slug": "u-cooling-plate",
          "canonicalSlug": "u-cooling-plate",
          "existing": true,
          "dynamic": false,
          "scene": {
            "kind": "component",
            "componentId": "reference",
            "type": "u-cooling-plate",
            "name": "U-channel plate",
            "domain": "thermal",
            "family": "cooling",
            "operation": "Exchanges heat between four plate zones, attached bodies and coolant flowing through the declared channel path.",
            "mechanism": [
              "Thermal contacts",
              "Metal and coolant storage",
              "Coolant transport"
            ],
            "ports": [
              {
                "id": "a",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal A",
                "net": null,
                "peers": []
              },
              {
                "id": "b",
                "domain": "thermal-liquid",
                "kind": "conserving",
                "label": "Coolant terminal B",
                "net": null,
                "peers": []
              },
              {
                "id": "h1",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h2",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Upper-right thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h3",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-left thermal contact",
                "net": null,
                "peers": []
              },
              {
                "id": "h4",
                "domain": "thermal",
                "kind": "conserving",
                "label": "Lower-right thermal contact",
                "net": null,
                "peers": []
              }
            ],
            "terms": [
              {
                "type": "liquid-reservoir",
                "label": "Coolant pressure and temperature boundary"
              },
              {
                "type": "thermal-mass",
                "label": "Thermal mass"
              }
            ],
            "symbol": [
              {
                "tag": "path",
                "attrs": {
                  "d": "M50 5V60Q50 75 70 75H130Q150 75 150 60V5"
                }
              }
            ],
            "selection": {},
            "commands": [],
            "outputs": [
              {
                "id": "contactHeat1",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat1",
                "unit": "W"
              },
              {
                "id": "contactHeat2",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat2",
                "unit": "W"
              },
              {
                "id": "contactHeat3",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat3",
                "unit": "W"
              },
              {
                "id": "contactHeat4",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat4",
                "unit": "W"
              },
              {
                "id": "storedEnergy",
                "quantity": "energy",
                "declared": true,
                "consumers": [],
                "label": "stored Energy",
                "unit": "J"
              },
              {
                "id": "massFlow",
                "quantity": "mass-rate",
                "declared": true,
                "consumers": [],
                "label": "mass Flow",
                "unit": "kg/s"
              },
              {
                "id": "pressureDrop",
                "quantity": "pressure",
                "declared": true,
                "consumers": [],
                "label": "pressure Drop",
                "unit": "Pa"
              },
              {
                "id": "hydraulicPower",
                "quantity": "power",
                "declared": true,
                "consumers": [],
                "label": "hydraulic Power",
                "unit": "W"
              },
              {
                "id": "contactHeat",
                "quantity": "heat",
                "declared": true,
                "consumers": [],
                "label": "contact Heat",
                "unit": "W"
              },
              {
                "id": "outletTemperature",
                "quantity": "temperature",
                "declared": true,
                "consumers": [],
                "label": "outlet Temperature",
                "unit": "K"
              }
            ],
            "parameters": [
              {
                "id": "plateCapacityJK",
                "default": 900,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 900
              },
              {
                "id": "coolantCapacityJK",
                "default": 420,
                "unit": "J/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 420
              },
              {
                "id": "plateConductanceWK",
                "default": 10,
                "unit": "W/K",
                "min": 0,
                "max": 1000000,
                "value": 10
              },
              {
                "id": "contactConductanceWK",
                "default": 100,
                "unit": "W/K",
                "min": 1e-06,
                "max": 1000000000,
                "value": 100
              },
              {
                "id": "coolantConductanceWK",
                "default": 20,
                "unit": "W/K per segment",
                "min": 0,
                "max": 1000000000,
                "value": 20
              },
              {
                "id": "hydraulicResistance",
                "default": 1000000,
                "unit": "Pa s/kg per channel",
                "min": 0.001,
                "max": 1000000000000000,
                "value": 1000000
              },
              {
                "id": "specificHeatJkgK",
                "default": 4200,
                "unit": "J/(kg K)",
                "min": 1,
                "max": 1000000,
                "value": 4200
              },
              {
                "id": "densityKgM3",
                "default": 1000,
                "unit": "kg/m3",
                "min": 1,
                "max": 100000,
                "value": 1000
              },
              {
                "id": "initialPlateTemperatureK",
                "default": 310,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 310
              },
              {
                "id": "initialCoolantTemperatureK",
                "default": 300,
                "unit": "K",
                "min": 0,
                "max": 5000,
                "value": 300
              }
            ]
          }
        }
      }
    },
    {
      "id": "workflow:native-electrothermal-resistor",
      "type": "Workflow",
      "label": "Electrothermal resistor worked example",
      "properties": {
        "id": "native-electrothermal-resistor",
        "title": "Electrothermal resistor worked example",
        "kind": "studio",
        "summary": "Linear temperature coefficient with positive floor; all electrical dissipation enters the thermal port",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. supply: voltageV=12; hot-boundary: differenceK=350; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Linear temperature coefficient with positive floor; all electrical dissipation enters the thermal port Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-electrothermal-resistor",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-conductor",
      "type": "Workflow",
      "label": "Thermal conductor worked example",
      "properties": {
        "id": "native-thermal-conductor",
        "title": "Thermal conductor worked example",
        "kind": "studio",
        "summary": "One-dimensional lumped Fourier conductance",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "One-dimensional lumped Fourier conductance Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-conductor",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-convection",
      "type": "Workflow",
      "label": "Thermal convection worked example",
      "properties": {
        "id": "native-thermal-convection",
        "title": "Thermal convection worked example",
        "kind": "studio",
        "summary": "Prescribed lumped film coefficient; no resolved fluid dynamics",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Prescribed lumped film coefficient; no resolved fluid dynamics Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-convection",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-mass",
      "type": "Workflow",
      "label": "Thermal mass worked example",
      "properties": {
        "id": "native-thermal-mass",
        "title": "Thermal mass worked example",
        "kind": "studio",
        "summary": "Constant heat capacity with conserved sensible energy",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Constant heat capacity with conserved sensible energy Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-mass",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-reference",
      "type": "Workflow",
      "label": "Thermal reference worked example",
      "properties": {
        "id": "native-thermal-reference",
        "title": "Thermal reference worked example",
        "kind": "studio",
        "summary": "Absolute-zero temperature datum; not an ambient-temperature boundary",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Absolute-zero temperature datum; not an ambient-temperature boundary Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-reference",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-resistance",
      "type": "Workflow",
      "label": "Thermal resistance worked example",
      "properties": {
        "id": "native-thermal-resistance",
        "title": "Thermal resistance worked example",
        "kind": "studio",
        "summary": "Finite linear two-port thermal resistance",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Finite linear two-port thermal resistance Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-resistance",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-radiation",
      "type": "Workflow",
      "label": "Thermal radiation worked example",
      "properties": {
        "id": "native-thermal-radiation",
        "title": "Thermal radiation worked example",
        "kind": "studio",
        "summary": "Effective two-body Stefan-Boltzmann exchange at absolute temperatures",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Effective two-body Stefan-Boltzmann exchange at absolute temperatures Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-radiation",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-variable-resistance",
      "type": "Workflow",
      "label": "Controlled thermal resistance worked example",
      "properties": {
        "id": "native-thermal-variable-resistance",
        "title": "Controlled thermal resistance worked example",
        "kind": "studio",
        "summary": "Live thermal resistance with declared positive floor and limited-command diagnostic",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Live thermal resistance with declared positive floor and limited-command diagnostic Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-variable-resistance",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-insulator",
      "type": "Workflow",
      "label": "Insulated thermal port worked example",
      "properties": {
        "id": "native-thermal-insulator",
        "title": "Insulated thermal port worked example",
        "kind": "studio",
        "summary": "Zero heat-flow termination with unconstrained temperature",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Zero heat-flow termination with unconstrained temperature Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-insulator",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-flow-sensor",
      "type": "Workflow",
      "label": "Heat flow sensor worked example",
      "properties": {
        "id": "native-thermal-flow-sensor",
        "title": "Heat flow sensor worked example",
        "kind": "studio",
        "summary": "Ideal inline sensor with zero temperature drop; positive flow a to b",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Ideal inline sensor with zero temperature drop; positive flow a to b Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-flow-sensor",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-temperature-sensor",
      "type": "Workflow",
      "label": "Temperature sensor worked example",
      "properties": {
        "id": "native-thermal-temperature-sensor",
        "title": "Temperature sensor worked example",
        "kind": "studio",
        "summary": "Nonloading absolute temperature at a and temperature difference a minus b",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. hot-boundary: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Nonloading absolute temperature at a and temperature difference a minus b Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-sensor",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-controlled-heat-source",
      "type": "Workflow",
      "label": "Controlled heat flow source worked example",
      "properties": {
        "id": "native-thermal-controlled-heat-source",
        "title": "Controlled heat flow source worked example",
        "kind": "studio",
        "summary": "Ideal commanded heat transfer from a to b",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. heater: heatFlowW=100; command: before=100; command: after=200; command: atS=0.5. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Ideal commanded heat transfer from a to b Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-heat-source",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-controlled-temperature-source",
      "type": "Workflow",
      "label": "Controlled temperature difference source worked example",
      "properties": {
        "id": "native-thermal-controlled-temperature-source",
        "title": "Controlled temperature difference source worked example",
        "kind": "studio",
        "summary": "Ideal commanded Tb-Ta with solved reaction heat flow",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. target: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Ideal commanded Tb-Ta with solved reaction heat flow Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-controlled-temperature-source",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-heat-source",
      "type": "Workflow",
      "label": "Heat flow source worked example",
      "properties": {
        "id": "native-thermal-heat-source",
        "title": "Heat flow source worked example",
        "kind": "studio",
        "summary": "Ideal configured heat transfer from a to b",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. heater: heatFlowW=100. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Ideal configured heat transfer from a to b Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-heat-source",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-thermal-temperature-source",
      "type": "Workflow",
      "label": "Temperature difference source worked example",
      "properties": {
        "id": "native-thermal-temperature-source",
        "title": "Temperature difference source worked example",
        "kind": "studio",
        "summary": "Ideal constraint Tb-Ta; reaction heat flow is solved, not prescribed",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. target: differenceK=320; cold-boundary: differenceK=300. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Ideal constraint Tb-Ta; reaction heat flow is solved, not prescribed Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-thermal-temperature-source",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-phase-change-mass",
      "type": "Workflow",
      "label": "Phase-change thermal mass worked example",
      "properties": {
        "id": "native-phase-change-mass",
        "title": "Phase-change thermal mass worked example",
        "kind": "studio",
        "summary": "Enthalpy storage with a finite linear melting interval; constant sensible heat capacity, no supercooling or hysteresis",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. mass: specificHeatJkgK=2; mass: latentHeatJkg=100; mass: solidusK=310; mass: liquidusK=320; mass: initialTemperatureK=310; heater: heatFlowW=12. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Enthalpy storage with a finite linear melting interval; constant sensible heat capacity, no supercooling or hysteresis Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-phase-change-mass",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-initial-temperature-constraint",
      "type": "Workflow",
      "label": "Insulated branch with initial temperature target worked example",
      "properties": {
        "id": "native-initial-temperature-constraint",
        "title": "Insulated branch with initial temperature target worked example",
        "kind": "studio",
        "summary": "Zero heat transfer; initializes directly attached unspecified thermal storage temperatures and verifies the consistent initial difference",
        "steps": [
          "Review the interface, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare outputs with the numerical checks; change one input and run again."
        ],
        "example": "Editable first-party network. constraint: initialDifferenceK=20. Checks below were verified in the native execution engine.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Zero heat transfer; initializes directly attached unspecified thermal storage temperatures and verifies the consistent initial difference Demonstration parameters are not calibrated hardware data. Singular or incompatible ideal constraints and unsupported state ranges stop the run.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-initial-temperature-constraint",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "topic:topic-thermal",
      "type": "Topic",
      "label": "Thermal management and heat transfer",
      "properties": {
        "id": "topic-thermal",
        "name": "Thermal management and heat transfer",
        "lede": "How heat is made, moved and removed in cells and packs, and the hardware that keeps a battery at the right temperature.",
        "context": "Select spatial detail for the question.",
        "example": "Equal total heat in different layouts can produce different gradients. Average temperature can miss a hot spot.",
        "lesson_url": "https://lemonergy.com/learn/fundamentals/battery-aging/",
        "lesson_label": "Open temperature and aging"
      }
    },
    {
      "id": "term:thermal-conductivity",
      "type": "Term",
      "label": "Thermal conductivity",
      "properties": {
        "id": "thermal-conductivity",
        "name": "Thermal conductivity",
        "abbr": "k",
        "aka": [
          "λ",
          "through-plane conductivity",
          "in-plane conductivity"
        ],
        "section": "topic-thermal",
        "definition": "How readily a material conducts heat: the heat flux per unit temperature gradient. Cells are strongly anisotropic — around 25–45 W/(m·K) in-plane, along the metal foils, but below 1 W/(m·K) through-plane, across separators and coatings — so the side a cell is cooled from decides how hot its core runs.",
        "formula": "q″ = −k·dT/dx",
        "unit": "W/(m·K)",
        "related": [
          "thermal-resistance",
          "thermal-diffusivity",
          "thermal-characterisation",
          "thermal-interface-material",
          "biot-number",
          "thermal-model"
        ],
        "example": {
          "title": "Calculate a slab heat flow",
          "text": "An illustrative 2 mm layer with k = 1 W/(m·K), area 0.01 m² and a 10 K temperature difference transfers 50 W in steady one-dimensional conduction. Contact resistances and edge losses are omitted."
        },
        "url": "https://lemonergy.com/learn/glossary/thermal-conductivity/",
        "mentions": [
          "heat-flux",
          "thermal-gradient"
        ]
      }
    },
    {
      "id": "term:heat-transfer-coefficient",
      "type": "Term",
      "label": "Heat transfer coefficient",
      "properties": {
        "id": "heat-transfer-coefficient",
        "name": "Heat transfer coefficient",
        "abbr": "h",
        "aka": [
          "convection coefficient",
          "film coefficient"
        ],
        "section": "topic-thermal",
        "definition": "The heat carried away per unit area per kelvin of difference between a surface and the fluid passing it. Typical values are 5–25 W/(m²·K) for still air, 25–250 for forced air and hundreds to thousands for pumped liquid, which is why fast-charging packs are liquid-cooled. Thermal models use it as their cooling boundary.",
        "formula": "Q = h·A·ΔT",
        "unit": "W/(m²·K)",
        "related": [
          "heat-transfer-modes",
          "heat-flux",
          "biot-number",
          "thermal-model",
          "cooling-plate",
          "coolant"
        ],
        "example": {
          "title": "Estimate convective cooling",
          "text": "For an illustrative h = 20 W/(m²·K), area 0.1 m² and surface-to-fluid temperature difference 10 K, hAΔT gives 20 W of cooling. The coefficient depends on the actual flow and geometry."
        },
        "url": "https://lemonergy.com/learn/glossary/heat-transfer-coefficient/",
        "mentions": []
      }
    },
    {
      "id": "term:thermography",
      "type": "Term",
      "label": "Thermography",
      "properties": {
        "id": "thermography",
        "name": "Thermography",
        "aka": [
          "infrared thermography",
          "thermal imaging",
          "IR camera"
        ],
        "section": "topic-thermal",
        "definition": "Imaging surface temperature with an infrared camera, which converts the radiation a surface emits into a temperature map. It reveals hot welds, busbar joints and uneven cell heating at a glance, but bare metal reflects more than it emits, so shiny surfaces are usually coated matt black before measuring.",
        "related": [
          "hot-spot",
          "heat-transfer-modes",
          "temperature-sensor",
          "thermal-gradient",
          "laser-welding"
        ],
        "url": "https://lemonergy.com/learn/glossary/thermography/",
        "mentions": [
          "busbar"
        ]
      }
    },
    {
      "id": "term:cooling-plate",
      "type": "Term",
      "label": "Cooling plate",
      "properties": {
        "id": "cooling-plate",
        "name": "Cooling plate",
        "aka": [
          "cold plate"
        ],
        "section": "topic-thermal",
        "definition": "A flat aluminium channel assembly under or between the cells through which coolant, usually a water–glycol mix, is pumped. Heat crosses from cell to plate through a thermal interface material; the plate also sets the pack’s temperature uniformity.",
        "related": [
          "thermal-management",
          "thermal-interface-material",
          "immersion-cooling"
        ],
        "url": "https://lemonergy.com/learn/glossary/cooling-plate/",
        "mentions": [
          "thermal-gradient",
          "coolant"
        ]
      }
    },
    {
      "id": "term:thermal-propagation",
      "type": "Term",
      "label": "Thermal propagation",
      "properties": {
        "id": "thermal-propagation",
        "name": "Thermal propagation",
        "section": "topic-safety",
        "definition": "Thermal runaway spreading from one cell to its neighbours through conducted heat, hot gas and flame. Pack designs are judged by whether, and how slowly, a single failing cell takes the rest with it.",
        "related": [
          "thermal-runaway",
          "thermal-barrier",
          "venting",
          "module",
          "propagation-test"
        ],
        "url": "https://lemonergy.com/learn/glossary/thermal-propagation/",
        "mentions": []
      }
    },
    {
      "id": "term:thermal-runaway",
      "type": "Term",
      "label": "Thermal runaway",
      "properties": {
        "id": "thermal-runaway",
        "name": "Thermal runaway",
        "section": "topic-safety",
        "definition": "Self-accelerating heating in a cell: heat speeds up reactions that release more heat, until the cell vents, catches fire or ruptures. An internal short, overcharge or external heating can trigger it.",
        "related": [
          "onset-temperature",
          "thermal-propagation",
          "venting",
          "separator-shutdown",
          "thermal-runaway-energy",
          "exothermic"
        ],
        "lesson": "fundamentals/cell-anatomy/#short-circuit",
        "url": "https://lemonergy.com/learn/glossary/thermal-runaway/",
        "mentions": [
          "overcharge"
        ]
      }
    },
    {
      "id": "reference:openstax-heat",
      "type": "Reference",
      "label": "University Physics Volume 2, §1.6: Mechanisms of Heat Transfer",
      "properties": {
        "title": "University Physics Volume 2, §1.6: Mechanisms of Heat Transfer",
        "publisher": "OpenStax, Rice University",
        "url": "https://openstax.org/books/university-physics-volume-2/pages/1-6-mechanisms-of-heat-transfer",
        "type": "Textbook section",
        "scope": "Conduction, convection, radiation and thermal resistance.",
        "accessed": "2026-10-27"
      }
    }
  ]
}
