{
  "node": {
    "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"
        ]
      }
    }
  },
  "incoming": [
    {
      "id": "edge:usesBlock/native-edge-cooling-plate/1",
      "type": "usesBlock",
      "source": "workflow:native-edge-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 1,
        "name": "Coolant inlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 200 kPa and 300 K at plate a; supplies coolant for the positive pressure difference."
      }
    },
    {
      "id": "edge:usesBlock/native-edge-cooling-plate/2",
      "type": "usesBlock",
      "source": "workflow:native-edge-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Coolant outlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 100 kPa at plate b; receives coolant. Its 300 K supply temperature is used if flow reverses."
      }
    },
    {
      "id": "edge:usesBlock/native-parallel-cooling-plate/1",
      "type": "usesBlock",
      "source": "workflow:native-parallel-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 1,
        "name": "Coolant inlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 200 kPa and 300 K at plate a; supplies coolant for the positive pressure difference."
      }
    },
    {
      "id": "edge:usesBlock/native-parallel-cooling-plate/2",
      "type": "usesBlock",
      "source": "workflow:native-parallel-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Coolant outlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 100 kPa at plate b; receives coolant. Its 300 K supply temperature is used if flow reverses."
      }
    },
    {
      "id": "edge:usesBlock/native-u-cooling-plate/1",
      "type": "usesBlock",
      "source": "workflow:native-u-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 1,
        "name": "Coolant inlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 200 kPa and 300 K at plate a; supplies coolant for the positive pressure difference."
      }
    },
    {
      "id": "edge:usesBlock/native-u-cooling-plate/2",
      "type": "usesBlock",
      "source": "workflow:native-u-cooling-plate",
      "target": "block:liquid-reservoir",
      "properties": {
        "sourceFile": "wiki-blocks.json",
        "position": 2,
        "name": "Coolant outlet boundary",
        "type": "liquid-reservoir",
        "role": "Sets 100 kPa at plate b; receives coolant. Its 300 K supply temperature is used if flow reverses."
      }
    }
  ],
  "outgoing": [
    {
      "id": "edge:cites/block:liquid-reservoir/reference:openstax-heat",
      "type": "cites",
      "source": "block:liquid-reservoir",
      "target": "reference:openstax-heat",
      "properties": {
        "sourceFile": "block-library.json",
        "scope": "Scientific or mathematical background; implementation scope is stated by the block contract"
      }
    }
  ],
  "neighbors": [
    {
      "id": "workflow:native-edge-cooling-plate",
      "type": "Workflow",
      "label": "Edge-cooled plate worked example",
      "properties": {
        "id": "native-edge-cooling-plate",
        "title": "Edge-cooled plate worked example",
        "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.",
        "steps": [
          "Review the block inputs, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare the output channels with the numerical checks; change one input and run again."
        ],
        "example": "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.",
        "observe": "Inspect the outputs and numerical checks on the block reference page.",
        "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.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-edge",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-parallel-cooling-plate",
      "type": "Workflow",
      "label": "Parallel-channel plate worked example",
      "properties": {
        "id": "native-parallel-cooling-plate",
        "title": "Parallel-channel plate worked example",
        "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.",
        "steps": [
          "Review the block inputs, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare the output channels with the numerical checks; change one input and run again."
        ],
        "example": "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.",
        "observe": "Inspect the outputs and numerical checks on the block reference page.",
        "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.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-parallel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-u-cooling-plate",
      "type": "Workflow",
      "label": "U-channel plate worked example",
      "properties": {
        "id": "native-u-cooling-plate",
        "title": "U-channel plate worked example",
        "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.",
        "steps": [
          "Review the block inputs, units and model limits.",
          "Open the Studio example and run its bundled model.",
          "Compare the output channels with the numerical checks; change one input and run again."
        ],
        "example": "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.",
        "observe": "Inspect the outputs and numerical checks on the block reference page.",
        "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.",
        "url": "https://design.lemonergy.com/cosim.html?example=physical-cooling-u",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "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"
      }
    }
  ]
}
