{
  "node": {
    "id": "term:state-space-model",
    "type": "Term",
    "label": "State-space model",
    "properties": {
      "id": "state-space-model",
      "name": "State-space model",
      "aka": [
        "state-space representation"
      ],
      "section": "topic-transport",
      "definition": "A model written as first-order equations for a set of internal states — such as state of charge and the voltages across RC pairs — plus an output equation for the measured terminal voltage. Kalman filters and other observers need this form, so equivalent circuit and reduced physics models are cast this way for a BMS.",
      "formula": "ẋ = A·x + B·u; y = C·x + D·u",
      "related": [
        "kalman-filter",
        "equivalent-circuit-model",
        "rc-pair",
        "reduced-order-model",
        "state-of-charge"
      ],
      "example": {
        "title": "Read a one-state thermal model",
        "text": "Let x be temperature rise and u heating power. With ẋ = −0.01x + 0.002u, the time constant is 100 s and a steady 10 W input gives x = 2 K. The output y = x directly reports temperature rise."
      },
      "url": "https://lemonergy.com/learn/glossary/state-space-model/",
      "mentions": [
        "voltage",
        "bms"
      ]
    }
  },
  "edges": [
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-state-space",
      "source": "term:state-space-model",
      "target": "workflow:native-native-state-space",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-transfer-function",
      "source": "term:state-space-model",
      "target": "workflow:native-native-transfer-function",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-second-order-integrator",
      "source": "term:state-space-model",
      "target": "workflow:native-native-second-order-integrator",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-bounded-integrator",
      "source": "term:state-space-model",
      "target": "workflow:native-native-bounded-integrator",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-zero-pole",
      "source": "term:state-space-model",
      "target": "workflow:native-native-zero-pole",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-descriptor-state-space",
      "source": "term:state-space-model",
      "target": "workflow:native-native-descriptor-state-space",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-filtered-derivative",
      "source": "term:state-space-model",
      "target": "workflow:native-native-filtered-derivative",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-transport-delay",
      "source": "term:state-space-model",
      "target": "workflow:native-native-transport-delay",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-variable-time-delay",
      "source": "term:state-space-model",
      "target": "workflow:native-native-variable-time-delay",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-variable-transport-delay",
      "source": "term:state-space-model",
      "target": "workflow:native-native-variable-transport-delay",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-step-memory",
      "source": "term:state-space-model",
      "target": "workflow:native-native-step-memory",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-linear-hold",
      "source": "term:state-space-model",
      "target": "workflow:native-native-linear-hold",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-enabled-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-enabled-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-triggered-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-triggered-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-enabled-triggered-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-enabled-triggered-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-resettable-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-resettable-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-function-call-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-function-call-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-for-each-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-for-each-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-for-iterator-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-for-iterator-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-while-iterator-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-while-iterator-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-action-submodel",
      "source": "term:state-space-model",
      "target": "workflow:native-native-action-submodel",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-if-actions",
      "source": "term:state-space-model",
      "target": "workflow:native-native-if-actions",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-switch-case-actions",
      "source": "term:state-space-model",
      "target": "workflow:native-native-switch-case-actions",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-call-generator",
      "source": "term:state-space-model",
      "target": "workflow:native-native-call-generator",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-call-count-split",
      "source": "term:state-space-model",
      "target": "workflow:native-native-call-count-split",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-invocation-feedback",
      "source": "term:state-space-model",
      "target": "workflow:native-native-invocation-feedback",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-exclusive-merge",
      "source": "term:state-space-model",
      "target": "workflow:native-native-exclusive-merge",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-parameter-writer",
      "source": "term:state-space-model",
      "target": "workflow:native-native-parameter-writer",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-state-reader",
      "source": "term:state-space-model",
      "target": "workflow:native-native-state-reader",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:usedIn/term:state-space-model/workflow:native-native-state-writer",
      "source": "term:state-space-model",
      "target": "workflow:native-native-state-writer",
      "type": "usedIn",
      "properties": {
        "sourceFile": "wiki-blocks.json"
      }
    },
    {
      "id": "edge:belongsTo/term:state-space-model/topic:topic-transport",
      "source": "term:state-space-model",
      "target": "topic:topic-transport",
      "type": "belongsTo",
      "properties": {
        "sourceFile": "terms.json"
      }
    },
    {
      "id": "edge:relatedTo/term:state-space-model/term:kalman-filter",
      "source": "term:state-space-model",
      "target": "term:kalman-filter",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:state-space-model/term:equivalent-circuit-model",
      "source": "term:state-space-model",
      "target": "term:equivalent-circuit-model",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:state-space-model/term:rc-pair",
      "source": "term:state-space-model",
      "target": "term:rc-pair",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:state-space-model/term:reduced-order-model",
      "source": "term:state-space-model",
      "target": "term:reduced-order-model",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:relatedTo/term:state-space-model/term:state-of-charge",
      "source": "term:state-space-model",
      "target": "term:state-of-charge",
      "type": "relatedTo",
      "properties": {
        "sourceFile": "terms.json",
        "meaning": "Related context; not a causal claim"
      }
    },
    {
      "id": "edge:mentions/state-space-model/voltage",
      "source": "term:state-space-model",
      "target": "term:voltage",
      "type": "mentions",
      "properties": {
        "sourceFile": "terms.json",
        "method": "build_glossary.mention_index + mentions",
        "field": "definition",
        "meaning": "Text mention; not a causal claim"
      }
    },
    {
      "id": "edge:mentions/state-space-model/bms",
      "source": "term:state-space-model",
      "target": "term:bms",
      "type": "mentions",
      "properties": {
        "sourceFile": "terms.json",
        "method": "build_glossary.mention_index + mentions",
        "field": "definition",
        "meaning": "Text mention; not a causal claim"
      }
    },
    {
      "id": "edge:illustratedBy/term:state-space-model/visual:state-response",
      "source": "term:state-space-model",
      "target": "visual:state-response",
      "type": "illustratedBy",
      "properties": {
        "sourceFile": "visual-pages.json"
      }
    },
    {
      "id": "edge:cites/term:state-space-model/reference:astrom-murray-feedback",
      "source": "term:state-space-model",
      "target": "reference:astrom-murray-feedback",
      "type": "cites",
      "properties": {
        "sourceFile": "wiki-references.json",
        "scope": "direct technical reference"
      }
    }
  ],
  "neighbors": [
    {
      "id": "workflow:native-native-state-space",
      "type": "Workflow",
      "label": "Continuous state space — worked example",
      "properties": {
        "id": "native-native-state-space",
        "title": "Continuous state space — worked example",
        "kind": "studio",
        "summary": "Simulates a continuous linear state model with configurable A, B, C and D matrices.",
        "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": "Input = 1. Output at 1 s = 0.6321205588285577.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Real, dense, constant A/B/C/D; up to128 states per block; graph/solver resource limits also apply. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-state-space",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-transfer-function",
      "type": "Workflow",
      "label": "Continuous transfer function — worked example",
      "properties": {
        "id": "native-native-transfer-function",
        "title": "Continuous transfer function — worked example",
        "kind": "studio",
        "summary": "Simulates a proper continuous transfer function using companion states.",
        "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": "Input = 1. Output at 1 s = 0.6321205588285577.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Real proper transfer functions, companion states, degree≤64. Improper transfer functions are refused. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-transfer-function",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-second-order-integrator",
      "type": "Workflow",
      "label": "Second-order integrator — worked example",
      "properties": {
        "id": "native-native-second-order-integrator",
        "title": "Second-order integrator — worked example",
        "kind": "studio",
        "summary": "Integrates acceleration into velocity and position.",
        "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": "Acceleration = 2. Position at 1 s = 1; Velocity at 1 s = 2.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Position and velocity states, configurable initial values; no external reset or state-limit event handling. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-second-order-integrator",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-bounded-integrator",
      "type": "Workflow",
      "label": "Bounded continuous integrator — worked example",
      "properties": {
        "id": "native-native-bounded-integrator",
        "title": "Bounded continuous integrator — worked example",
        "kind": "studio",
        "summary": "Integrates a rate while preventing further outward motion at configured bounds.",
        "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": "Rate = 2. Integral at 1 s = 2.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-bounded-integrator",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-zero-pole",
      "type": "Workflow",
      "label": "Continuous pole-zero model — worked example",
      "properties": {
        "id": "native-native-zero-pole",
        "title": "Continuous pole-zero model — worked example",
        "kind": "studio",
        "summary": "Simulates a real-coefficient continuous model defined by poles, zeros and gain.",
        "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": "Input = 1. Output at 1 s = 0.8646647167633873.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Real-coefficient proper models; complex roots must form conjugate-compatible real polynomials, degree≤64. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-zero-pole",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-descriptor-state-space",
      "type": "Workflow",
      "label": "Nonsingular descriptor state model — worked example",
      "properties": {
        "id": "native-native-descriptor-state-space",
        "title": "Nonsingular descriptor state model — worked example",
        "kind": "studio",
        "summary": "Simulates a descriptor state equation when its E matrix is nonsingular.",
        "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": "Input = 1. Output at 1 s = 0.6321205588285577.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Nonsingular E is solved with pivoted elimination at configuration time. Singular descriptor DAEs and algebraic state constraints are explicitly refused. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-descriptor-state-space",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-filtered-derivative",
      "type": "Workflow",
      "label": "Filtered continuous derivative — worked example",
      "properties": {
        "id": "native-native-filtered-derivative",
        "title": "Filtered continuous derivative — worked example",
        "kind": "studio",
        "summary": "Estimates a continuous derivative through a finite-bandwidth filter.",
        "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": "Input = 1. Derivative at 1 s = 0.03368973499542734.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Finite-bandwidth derivative s/(tau*s+1), tau>0. An ideal derivative of arbitrary input, accepted-step numerical derivative and discontinuity impulse semantics are not implemented. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-filtered-derivative",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-transport-delay",
      "type": "Workflow",
      "label": "Continuous transport delay — worked example",
      "properties": {
        "id": "native-native-transport-delay",
        "title": "Continuous transport delay — worked example",
        "kind": "studio",
        "summary": "Delays a continuous signal using accepted simulation history.",
        "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": "Input = 5. Delayed at 1 s = 5.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Fixed strictly positive delay; immutable accepted-step linear history; source and prehistory discontinuities propagate through cascaded delays. Method-of-steps bound and finite buffer are enforced. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-transport-delay",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-variable-time-delay",
      "type": "Workflow",
      "label": "Variable time delay — worked example",
      "properties": {
        "id": "native-native-variable-time-delay",
        "title": "Variable time delay — worked example",
        "kind": "studio",
        "summary": "Reads accepted signal history at a connected time delay.",
        "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": "Input = 5; Delay = 0.2. Delayed at 1 s = 5.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Real accepted-step history at t minus connected delay; configured positive minimum/maximum bounds, method-of-steps limit and finite buffer. Moving discontinuity arrival is not root-localized. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-variable-time-delay",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-variable-transport-delay",
      "type": "Workflow",
      "label": "Variable transport progress delay — worked example",
      "properties": {
        "id": "native-native-variable-transport-delay",
        "title": "Variable transport progress delay — worked example",
        "kind": "studio",
        "summary": "Delays a signal according to accumulated transport progress rather than a simple time offset.",
        "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": "Input = 5; Transit time = 0.2. Transported at 1 s = 5.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Continuous progress state integrates 1/transit-time; history is interpolated at progress minus one. Positive transit bounds and finite buffer; moving discontinuity arrival is not root-localized. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-variable-transport-delay",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-step-memory",
      "type": "Workflow",
      "label": "Accepted solver-step memory — worked example",
      "properties": {
        "id": "native-native-step-memory",
        "title": "Accepted solver-step memory — worked example",
        "kind": "studio",
        "summary": "Returns the input from the previous accepted solver step.",
        "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": "Input = 5. Previous accepted input at 0 s = 0.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Previous accepted major-step input with explicit initial output; pure trial reads and transactional accepted-step commits. Rejected steps do not advance memory. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-step-memory",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-linear-hold",
      "type": "Workflow",
      "label": "Causal first-order hold — worked example",
      "properties": {
        "id": "native-native-linear-hold",
        "title": "Causal first-order hold — worked example",
        "kind": "studio",
        "summary": "Reconstructs a linear signal from the latest two captured samples.",
        "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": "Input = 5. Linear reconstruction at 0 s = 5.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Causal linear extrapolation from the latest two samples at simulation-start-relative ticks; initial slope zero. Capture uses pre-commit graph inputs; no future-sample interpolation. Shapes and element types are explicit. Values must be finite; automatic reshaping and unit conversion are not performed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-linear-hold",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-enabled-submodel",
      "type": "Workflow",
      "label": "Enabled kernel worked example",
      "properties": {
        "id": "native-native-enabled-submodel",
        "title": "Enabled kernel worked example",
        "kind": "studio",
        "summary": "Runs one discrete or stateless child only while enabled; disabled samples retain child memory and held output.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. Reset-on-enable is optional; publishing the initial output while disabled does not itself reset child state.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-enabled-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-triggered-submodel",
      "type": "Workflow",
      "label": "Triggered kernel worked example",
      "properties": {
        "id": "native-native-triggered-submodel",
        "title": "Triggered kernel worked example",
        "kind": "studio",
        "summary": "Captures child inputs only on the configured Boolean edge, with explicit previous-trigger initialization.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: adjustable gain. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. Boolean edges are detected only at the declared sample instants. Pulses entirely between samples are not captured.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-triggered-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-enabled-triggered-submodel",
      "type": "Workflow",
      "label": "Enabled and triggered kernel worked example",
      "properties": {
        "id": "native-native-enabled-triggered-submodel",
        "title": "Enabled and triggered kernel worked example",
        "kind": "studio",
        "summary": "Tracks every trigger edge, including while disabled, and executes only enabled edges; disabled edges are never replayed.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. A trigger edge seen while disabled is consumed and is not replayed when enable becomes true.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-enabled-triggered-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-resettable-submodel",
      "type": "Workflow",
      "label": "Resettable kernel worked example",
      "properties": {
        "id": "native-native-resettable-submodel",
        "title": "Resettable kernel worked example",
        "kind": "studio",
        "summary": "Restores the child initial memory before executing on a reset edge. Other samples execute normally.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. A sustained reset level does not repeatedly reset the child; select rising, falling, or either edge.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-resettable-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-function-call-submodel",
      "type": "Workflow",
      "label": "Counted kernel invocation worked example",
      "properties": {
        "id": "native-native-function-call-submodel",
        "title": "Counted kernel invocation worked example",
        "kind": "studio",
        "summary": "Executes one child the requested number of times at the accepted sample timestamp; zero calls retain memory and output.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. Explicit connected counts replace a global function-call namespace. Every repeated call receives the same current inputs.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-function-call-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-for-each-submodel",
      "type": "Workflow",
      "label": "Independent element kernels worked example",
      "properties": {
        "id": "native-native-for-each-submodel",
        "title": "Independent element kernels worked example",
        "kind": "studio",
        "summary": "Runs one scalar child instance per vector element, with fixed shape and isolated memory for every element.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. The child has one scalar input and one scalar output; the outer vector length is fixed at 1–256 elements.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-for-each-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-for-iterator-submodel",
      "type": "Workflow",
      "label": "Bounded for iterator worked example",
      "properties": {
        "id": "native-native-for-iterator-submodel",
        "title": "Bounded for iterator worked example",
        "kind": "studio",
        "summary": "Processes the requested prefix of an input vector through one scalar child, at a single sample time.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: discrete integrator. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. The child has one scalar input and one scalar output. Only the requested prefix of the fixed input vector is processed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-for-iterator-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-while-iterator-submodel",
      "type": "Workflow",
      "label": "Bounded while iterator worked example",
      "properties": {
        "id": "native-native-while-iterator-submodel",
        "title": "Bounded while iterator worked example",
        "kind": "studio",
        "summary": "Feeds each child result back as its next input, testing the condition before each call. A nonterminating loop stops without committing state.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: adjustable gain. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. The child has matching real scalar input/output. At most 256 calls are allowed; nontermination raises a run error without committing a partial result.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-while-iterator-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-action-submodel",
      "type": "Workflow",
      "label": "Conditional action kernel worked example",
      "properties": {
        "id": "native-native-action-submodel",
        "title": "Conditional action kernel worked example",
        "kind": "studio",
        "summary": "Executes a child on a true action flag and holds its state and output on inactive samples.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: bias. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. A Boolean action flag controls one child. This is not an arbitrary multi-block action subsystem.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-action-submodel",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-if-actions",
      "type": "Workflow",
      "label": "Comparison action router worked example",
      "properties": {
        "id": "native-native-if-actions",
        "title": "Comparison action router worked example",
        "kind": "studio",
        "summary": "Produces exactly one below/equal/above action flag for a configured threshold at each sample.",
        "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": "Default editable example at the first accepted sample (t = 0 s). The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. One real threshold with below/equal/above branches; arbitrary logical expression parsing is not supplied.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-if-actions",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-switch-case-actions",
      "type": "Workflow",
      "label": "Case action router worked example",
      "properties": {
        "id": "native-native-switch-case-actions",
        "title": "Case action router worked example",
        "kind": "studio",
        "summary": "Routes an integer mode to exactly one configured case flag or the final default flag, without fall-through.",
        "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": "Default editable example at the first accepted sample (t = 0 s). The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. 1–31 distinct signed 32-bit cases and one default branch. There is no fall-through.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-switch-case-actions",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-call-generator",
      "type": "Workflow",
      "label": "Sampled invocation generator worked example",
      "properties": {
        "id": "native-native-call-generator",
        "title": "Sampled invocation generator worked example",
        "kind": "studio",
        "summary": "Emits a bounded call count on enabled sample hits, after an integer sample offset; missed disabled hits are not replayed.",
        "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": "Default editable example at the first accepted sample (t = 0 s). The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. Calls are explicit unsigned counts at accepted sample hits, not a global event bus. Disabled hits are not replayed. Total count overflow is rejected.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-call-generator",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-call-count-split",
      "type": "Workflow",
      "label": "Invocation count fan-out worked example",
      "properties": {
        "id": "native-native-call-count-split",
        "title": "Invocation count fan-out worked example",
        "kind": "studio",
        "summary": "Copies one accepted-sample call count to fixed typed branches. It does not impose side-effect order between independent downstream models.",
        "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": "Default editable example at the first accepted sample (t = 0 s). The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. Fan-out does not impose execution or side-effect order on independent downstream models. Counts are limited to 0–256; 1–32 branches are supported.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-call-count-split",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-invocation-feedback",
      "type": "Workflow",
      "label": "Invocation feedback kernel worked example",
      "properties": {
        "id": "native-native-invocation-feedback",
        "title": "Invocation feedback kernel worked example",
        "kind": "studio",
        "summary": "Each call reads the previous held result, runs one child and commits its new result before the next call at the same timestamp.",
        "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": "Default editable example at the first accepted sample (t = 0 s). Child operation: bias. The output checks below are execution oracles for this example.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "Control executes on an explicit sampled clock. Continuous states, history/delay kernels, residual equations, and event-source children are not supported. The wrapper contains one original computation operation; arbitrary multi-block submodels are not supported. A sampled child advances once per invocation using its own declared period. Repeated calls share the same outer timestamp and do not advance physical time. One explicit child and one matching input/output port; no global function namespace or arbitrary feedback subgraph. At most 256 calls per sample.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-invocation-feedback",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-exclusive-merge",
      "type": "Workflow",
      "label": "Exclusive action merge worked example",
      "properties": {
        "id": "native-native-exclusive-merge",
        "title": "Exclusive action merge worked example",
        "kind": "studio",
        "summary": "Accepts one explicitly active branch at a sample, holds its prior value when none is active, and rejects competing writers.",
        "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": "Branch values are 2 and 5. Only branch 2 is active, so the accepted value is 5 and its owner index is 2.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "2–16 explicitly declared, identically typed branches. Boolean action flags supply ownership; ownership is not inferred from an arbitrary source subsystem. All inputs are validated even when inactive. Branches should share the declared sample clock. A conflict stops the run instead of choosing a writer by connection order.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-exclusive-merge",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-parameter-writer",
      "type": "Workflow",
      "label": "Scoped parameter writer worked example",
      "properties": {
        "id": "native-native-parameter-writer",
        "title": "Scoped parameter writer worked example",
        "kind": "studio",
        "summary": "Writes a stored parameter of one declared child at accepted samples, then executes that child with the updated parameter.",
        "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": "Input 3 and an enabled gain write of 5 produce output 15. Later samples retain gain 5 when the write flag is false.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "One explicitly configured gain, bias, or discrete-integrator gain is writable. There is no arbitrary external-block lookup, global parameter mutation, or structural reconfiguration. Writes occur before the child executes at the accepted sample. Child memory persists across writes. A failed child evaluation commits neither the parameter nor child memory. The write port carries the numeric parameter value; no unit conversion is performed. A discrete child advances once per wrapper invocation using its declared period.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-parameter-writer",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-state-reader",
      "type": "Workflow",
      "label": "Scoped state reader worked example",
      "properties": {
        "id": "native-native-state-reader",
        "title": "Scoped state reader worked example",
        "kind": "studio",
        "summary": "Executes one declared discrete state-space child and records its actual internal state before and after each update.",
        "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": "For A=0.5, B=1, C=2, D=3, initial state 4 and input 1, the model output is 11 and the internal state advances from 4 to 3.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "One declared discrete linear state-space child, with 1–128 real state coordinates. The reader owns and executes that child; it cannot inspect arbitrary foreign blocks. State outputs are explicit numeric coordinates, distinct from the model output. Continuous states, opaque kernel memory, and history buffers are not exposed.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-state-reader",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "workflow:native-native-state-writer",
      "type": "Workflow",
      "label": "Scoped state writer worked example",
      "properties": {
        "id": "native-native-state-writer",
        "title": "Scoped state writer worked example",
        "kind": "studio",
        "summary": "Replaces a declared discrete state-space child state on an enabled write, then evaluates output and advances that state at the accepted sample.",
        "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": "For A=0.5, B=1, C=2, D=3 and input 1, replacing the state with 10 before execution yields output 23 and next state 6.",
        "observe": "Inspect the output channels and checks on the block reference page.",
        "limits": "One declared discrete linear state-space child, with 1–128 real state coordinates. No arbitrary external-block, continuous-state, or history-buffer writes. Replacement is applied before output evaluation and state advancement. A failed or nonfinite update commits no partial state. Separate block instances own separate state.",
        "url": "https://design.lemonergy.com/cosim.html?example=block-native-state-writer",
        "label": "Open Studio example",
        "evidence": [
          "docs/glossary/native-block-verification.json"
        ]
      }
    },
    {
      "id": "topic:topic-transport",
      "type": "Topic",
      "label": "Transport and modelling",
      "properties": {
        "id": "topic-transport",
        "name": "Transport and modelling",
        "lede": "How ions move, and the equations and models that describe a cell.",
        "context": "Specify phase, direction and boundaries.",
        "example": "The same concentration difference across 10 μm gives ten times the gradient across 100 μm; at equal D, first-law flux magnitude is ten times greater.",
        "lesson_url": "https://lemonergy.com/learn/transport/ficks-first-law/",
        "lesson_label": "Open diffusion"
      }
    },
    {
      "id": "term:kalman-filter",
      "type": "Term",
      "label": "Kalman filter",
      "properties": {
        "id": "kalman-filter",
        "name": "Kalman filter",
        "section": "topic-state",
        "definition": "A recursive estimator that blends a model prediction with noisy measurements according to how much each is trusted. In a BMS an extended Kalman filter combines coulomb counting with a voltage model to track SOC and sometimes resistance.",
        "related": [
          "coulomb-counting",
          "equivalent-circuit-model",
          "state-of-charge",
          "bms",
          "fuzzy-logic",
          "data-driven-soc-estimation"
        ],
        "url": "https://lemonergy.com/learn/glossary/kalman-filter/",
        "mentions": [
          "coulomb"
        ]
      }
    },
    {
      "id": "term:equivalent-circuit-model",
      "type": "Term",
      "label": "Equivalent circuit model",
      "properties": {
        "id": "equivalent-circuit-model",
        "name": "Equivalent circuit model",
        "abbr": "ECM",
        "aka": [
          "Thevenin model"
        ],
        "section": "topic-transport",
        "definition": "A cell model built from a voltage source for OCV, a series resistor and one or more RC pairs for the slower dynamics. Its few parameters are fitted from pulse tests, and it is what most battery management systems run in real time.",
        "related": [
          "rc-pair",
          "open-circuit-voltage",
          "hppc",
          "kalman-filter",
          "single-particle-model"
        ],
        "url": "https://lemonergy.com/learn/glossary/equivalent-circuit-model/",
        "mentions": []
      }
    },
    {
      "id": "term:rc-pair",
      "type": "Term",
      "label": "RC pair",
      "properties": {
        "id": "rc-pair",
        "name": "RC pair",
        "aka": [
          "RC element",
          "RC branch"
        ],
        "section": "topic-transport",
        "definition": "A resistor and capacitor in parallel, the building block of an equivalent circuit model. Each pair reproduces one time constant of the cell’s voltage response, from the seconds of charge transfer to the minutes of diffusion.",
        "formula": "τ = R × C",
        "related": [
          "equivalent-circuit-model",
          "relaxation",
          "charge-transfer"
        ],
        "example": {
          "title": "Calculate a response time",
          "text": "An illustrative 0.02 Ω resistance and 500 F capacitance have τ = RC = 10 s. A first-order step response reaches about 63% of its final change after one time constant."
        },
        "url": "https://lemonergy.com/learn/glossary/rc-pair/",
        "mentions": [
          "diffusion",
          "capacitor"
        ]
      }
    },
    {
      "id": "term:reduced-order-model",
      "type": "Term",
      "label": "Reduced-order model",
      "properties": {
        "id": "reduced-order-model",
        "name": "Reduced-order model",
        "abbr": "ROM",
        "aka": [
          "model order reduction"
        ],
        "section": "topic-transport",
        "definition": "A simplified version of a detailed model that keeps its dominant behaviour with far fewer states. The single-particle model is one reduction of the Newman model; others use polynomial profiles, Padé approximation or proper orthogonal decomposition. A ROM gives a BMS internal quantities, such as lithium concentration in the electrodes, that an equivalent circuit model cannot.",
        "related": [
          "newman-model",
          "single-particle-model",
          "state-space-model",
          "equivalent-circuit-model",
          "bms"
        ],
        "url": "https://lemonergy.com/learn/glossary/reduced-order-model/",
        "mentions": [
          "reduction"
        ]
      }
    },
    {
      "id": "term:state-of-charge",
      "type": "Term",
      "label": "State of charge",
      "properties": {
        "id": "state-of-charge",
        "name": "State of charge",
        "abbr": "SOC",
        "section": "topic-state",
        "definition": "How full a cell is, as a fraction of its available capacity. State of charge, like temperature, affects how fast a stored cell ages.",
        "unit": "%",
        "related": [
          "depth-of-discharge",
          "ocv-soc-curve",
          "coulomb-counting",
          "state-of-health",
          "bms"
        ],
        "lesson": "fundamentals/battery-aging/#storage-soc",
        "example": {
          "title": "Interpret a charge inventory",
          "text": "If available capacity is 5 Ah and 3 Ah remains by the chosen estimator, SOC is 60%. A different estimate of available capacity changes this percentage, so compare SOC values only with the capacity convention recorded."
        },
        "url": "https://lemonergy.com/learn/glossary/state-of-charge/",
        "mentions": [
          "usable-capacity"
        ]
      }
    },
    {
      "id": "term:voltage",
      "type": "Term",
      "label": "Voltage",
      "properties": {
        "id": "voltage",
        "name": "Voltage",
        "aka": [
          "terminal voltage"
        ],
        "section": "topic-units",
        "definition": "The potential difference between a cell’s two terminals. It comes from the chemical difference between the electrodes, moves with state of charge, and sags under load because of internal resistance.",
        "unit": "V",
        "related": [
          "open-circuit-voltage",
          "nominal-voltage",
          "internal-resistance",
          "ir-drop"
        ],
        "lesson": "fundamentals/cell-anatomy/#voltage",
        "url": "https://lemonergy.com/learn/glossary/voltage/",
        "mentions": [
          "state-of-charge"
        ]
      }
    },
    {
      "id": "term:bms",
      "type": "Term",
      "label": "Battery management system",
      "properties": {
        "id": "bms",
        "name": "Battery management system",
        "abbr": "BMS",
        "section": "topic-pack",
        "definition": "The electronics and software that keep a battery inside its safe window: measuring every cell voltage and many temperatures, estimating SOC and SOH, balancing cells, computing current limits, controlling the contactors and reporting over the vehicle network.",
        "related": [
          "state-of-charge",
          "cell-balancing",
          "state-of-power",
          "cell-supervision-circuit",
          "contactor",
          "can-bus"
        ],
        "lesson": "fundamentals/battery-basics/#cell-module-pack",
        "url": "https://lemonergy.com/learn/glossary/bms/",
        "mentions": [
          "state-of-health",
          "cell-voltage"
        ]
      }
    },
    {
      "id": "visual:state-response",
      "type": "Visual",
      "label": "Follow an internal state after an input step",
      "properties": {
        "title": "Follow an internal state after an input step",
        "summary": "A one-state linear model separates the stored state from its observed output.",
        "readout": "At τ = 10 s, output reaches 63.2% after 10 s and 95.0% after 30 s.",
        "formula": "dx/dt = −x/τ + u/τ; y = x; x(0) = 0",
        "note": "Scalar continuous-time, stable linear model with no saturation, delay or measurement noise.",
        "software": {
          "status": "reference",
          "label": "Reference concept",
          "body": "This is an analytical one-state example. It does not implement an observer or identify state matrices for a battery.",
          "href": "../chapter-1/"
        },
        "html": "<figure class=\"visual-figure\"><figcaption>First-order state-space step response</figcaption><svg class=\"visual-chart\" viewBox=\"0 0 360 330\" role=\"img\" aria-labelledby=\"static-state-response-0-title static-state-response-0-desc\"><title id=\"static-state-response-0-title\">First-order state-space step response</title><desc id=\"static-state-response-0-desc\">Time (s) versus Normalized input and output. Unit input u; Output y = 1 − exp(−t/τ). Interpretation follows the graphs.</desc><path d=\"M74,238h268\" stroke=\"currentColor\" opacity=\".13\"/><text x=\"64\" y=\"242\" text-anchor=\"end\" font-size=\"13\" fill=\"currentColor\">0</text><text x=\"74\" y=\"265\" text-anchor=\"middle\" font-size=\"13\" fill=\"currentColor\">0</text><path d=\"M74,188.5h268\" stroke=\"currentColor\" opacity=\".13\"/><text x=\"64\" y=\"192.5\" text-anchor=\"end\" font-size=\"13\" fill=\"currentColor\">0.275</text><text x=\"141\" y=\"265\" text-anchor=\"middle\" font-size=\"13\" fill=\"currentColor\">25</text><path d=\"M74,139h268\" stroke=\"currentColor\" opacity=\".13\"/><text x=\"64\" y=\"143\" text-anchor=\"end\" font-size=\"13\" fill=\"currentColor\">0.55</text><text x=\"208\" y=\"265\" text-anchor=\"middle\" font-size=\"13\" fill=\"currentColor\">50</text><path d=\"M74,89.5h268\" stroke=\"currentColor\" opacity=\".13\"/><text x=\"64\" y=\"93.5\" text-anchor=\"end\" font-size=\"13\" fill=\"currentColor\">0.825</text><text x=\"275\" y=\"265\" text-anchor=\"middle\" font-size=\"13\" fill=\"currentColor\">75</text><path d=\"M74,40h268\" stroke=\"currentColor\" opacity=\".13\"/><text x=\"64\" y=\"44\" text-anchor=\"end\" font-size=\"13\" fill=\"currentColor\">1.1</text><text x=\"342\" y=\"265\" text-anchor=\"middle\" font-size=\"13\" fill=\"currentColor\">100</text><path d=\"M74,40v198h268\" fill=\"none\" stroke=\"currentColor\" opacity=\".3\"/><polyline fill=\"none\" stroke=\"#6953a8\" stroke-width=\"2.8\" points=\"74.00,58.00 342.00,58.00\"/><polyline fill=\"none\" stroke=\"#2459a8\" stroke-width=\"2.8\" stroke-dasharray=\"7 4\" points=\"74.00,238.00 76.68,220.87 79.36,205.37 82.04,191.35 84.72,178.66 87.40,167.18 90.08,156.79 92.76,147.39 95.44,138.88 98.12,131.18 100.80,124.22 103.48,117.92 106.16,112.21 108.84,107.06 111.52,102.39 114.20,98.16 116.88,94.34 119.56,90.88 122.24,87.75 124.92,84.92 127.60,82.36 130.28,80.04 132.96,77.94 135.64,76.05 138.32,74.33 141.00,72.78 143.68,71.37 146.36,70.10 149.04,68.95 151.72,67.90 154.40,66.96 157.08,66.11 159.76,65.34 162.44,64.64 165.12,64.01 167.80,63.44 170.48,62.92 173.16,62.45 175.84,62.03 178.52,61.64 181.20,61.30 183.88,60.98 186.56,60.70 189.24,60.44 191.92,60.21 194.60,60.00 197.28,59.81 199.96,59.64 202.64,59.48 205.32,59.34 208.00,59.21 210.68,59.10 213.36,58.99 216.04,58.90 218.72,58.81 221.40,58.74 224.08,58.67 226.76,58.60 229.44,58.54 232.12,58.49 234.80,58.45 237.48,58.40 240.16,58.37 242.84,58.33 245.52,58.30 248.20,58.27 250.88,58.24 253.56,58.22 256.24,58.20 258.92,58.18 261.60,58.16 264.28,58.15 266.96,58.13 269.64,58.12 272.32,58.11 275.00,58.10 277.68,58.09 280.36,58.08 283.04,58.07 285.72,58.07 288.40,58.06 291.08,58.05 293.76,58.05 296.44,58.04 299.12,58.04 301.80,58.04 304.48,58.03 307.16,58.03 309.84,58.03 312.52,58.02 315.20,58.02 317.88,58.02 320.56,58.02 323.24,58.02 325.92,58.01 328.60,58.01 331.28,58.01 333.96,58.01 336.64,58.01 339.32,58.01 342.00,58.01\"/><text transform=\"translate(208 303)\" text-anchor=\"middle\" font-size=\"14\" fill=\"currentColor\"><tspan x=\"0\" dy=\"0\">Time (s)</tspan></text><text transform=\"translate(20 139) rotate(-90)\" text-anchor=\"middle\" font-size=\"14\" fill=\"currentColor\"><tspan x=\"0\" dy=\"-8\">Normalized input and</tspan><tspan x=\"0\" dy=\"16\">output</tspan></text></svg><div class=\"visual-legend\"><span><i style=\"background:#6953a8\"></i>Unit input u</span><span><i style=\"background:#2459a8\"></i>Output y = 1 − exp(−t/τ) (dashed)</span></div></figure>"
      }
    },
    {
      "id": "reference:astrom-murray-feedback",
      "type": "Reference",
      "label": "Feedback Systems: An Introduction for Scientists and Engineers, second edition",
      "properties": {
        "title": "Feedback Systems: An Introduction for Scientists and Engineers, second edition",
        "publisher": "Princeton University Press; author-maintained FBSwiki",
        "url": "https://fbswiki.org/wiki/index.php/Feedback_Systems%3A_An_Introduction_for_Scientists_and_Engineers",
        "type": "Textbook",
        "scope": "State-space modeling, feedback and PID control. These mathematical foundations do not establish a particular software implementation.",
        "year": 2021,
        "authors": [
          "Karl J. Åström",
          "Richard M. Murray"
        ],
        "accessed": "2026-10-27"
      }
    }
  ]
}
