{
  "format": "lemonergy/synthetic-reference-contract@1",
  "version": 2,
  "cases": [
    {
      "id": "lemonergy-synthetic-2rc-pulse-v1",
      "title": "Synthetic battery pulse: two relaxation branches",
      "family": "Battery",
      "editorImportRequired": true,
      "summary": "Excite a hypothetical two-RC cell with independently chosen current amplitudes and durations, then compare its voltage with a closed-form edge response.",
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-two-rc-pulse-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.001,
        "minStepS": 1e-10,
        "maxStepS": 0.25,
        "relativeTolerance": 1e-10,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 390
      },
      "signals": [
        {
          "id": "terminal-voltage",
          "label": "Terminal voltage",
          "unit": "V",
          "quantity": "voltage",
          "gate": 0.000001
        },
        {
          "id": "current",
          "label": "Discharge current",
          "unit": "A",
          "quantity": "current",
          "gate": 1e-10
        }
      ],
      "inputs": [
        {
          "label": "OCV",
          "value": 4,
          "unit": "V"
        },
        {
          "label": "R0",
          "value": 0.012,
          "unit": "Ω"
        },
        {
          "label": "R1",
          "value": 0.006,
          "unit": "Ω"
        },
        {
          "label": "Fast time constant",
          "value": 3,
          "unit": "s"
        },
        {
          "label": "R2",
          "value": 0.018,
          "unit": "Ω"
        },
        {
          "label": "Slow time constant",
          "value": 24,
          "unit": "s"
        }
      ],
      "blockExplanation": "The current is 0 A for 12 s, 2 A for 6 s, 0 A for 36 s, 6 A for 96 s, 0 A for 120 s, 4 A for 24 s, then 0 A for 96 s. Step sources sum into current. Resistance gains drive two first-order states, and terminal voltage is OCV − I·R0 − v1 − v2.",
      "scope": "Original idealized fixed-parameter forward model. Positive current means discharge. Initial polarization is zero. The independently shaped fitting holdout is a separate experiment, not the trace executed here.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "OCV and all parameters remain fixed. The capacity, initial SOC and ambient labels belong to the separate fitting exercise; this forward graph does not predict SOC or temperature.",
        "At current switches the ohmic term is right-continuous, while the two RC states remain continuous."
      ]
    },
    {
      "id": "lemonergy-series-rlc-step-v1",
      "title": "Series RLC: step response from rest",
      "family": "Electrical",
      "editorImportRequired": true,
      "summary": "Apply a 10 V step to an original series resistor–inductor–capacitor teaching circuit and compare current and charge with its damped closed-form response.",
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-series-rlc-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.0001,
        "minStepS": 1e-10,
        "maxStepS": 0.005,
        "relativeTolerance": 1e-10,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 1.2
      },
      "signals": [
        {
          "id": "current",
          "label": "Series current",
          "unit": "A",
          "quantity": "dimensionless",
          "gate": 1e-7
        },
        {
          "id": "charge",
          "label": "Capacitor charge",
          "unit": "C",
          "quantity": "dimensionless",
          "gate": 1e-7
        },
        {
          "id": "input-voltage",
          "label": "Applied voltage",
          "unit": "V",
          "quantity": "dimensionless",
          "gate": 1e-7
        }
      ],
      "inputs": [
        {
          "label": "Series resistance",
          "value": 8,
          "unit": "Ω"
        },
        {
          "label": "Inductance",
          "value": 0.4,
          "unit": "H"
        },
        {
          "label": "Capacitance",
          "value": 0.002,
          "unit": "F"
        },
        {
          "label": "Applied voltage",
          "value": 10,
          "unit": "V"
        },
        {
          "label": "Initial current",
          "value": 0,
          "unit": "A"
        },
        {
          "label": "Initial charge",
          "value": 0,
          "unit": "C"
        }
      ],
      "blockExplanation": "Two integrators implement dq/dt = i and di/dt = (10 − 8i − q/0.002)/0.4. The analytical damping is 10 s⁻¹ and damped angular frequency is √1150 rad/s. The charge approaches C·E = 0.02 C.",
      "scope": "Original series-circuit topology with zero stored energy at initialization. Equation ports use explicit SI numerical mapping (1 unit = 1 A, 1 C or 1 V) because this preserved equation runtime has no charge-rate port type.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "Ideal linear components and a prescribed ideal voltage step. Parasitics, switching losses and physical component tolerances are omitted. This is an equation graph, not a conserving-network topology test."
      ]
    },
    {
      "id": "lemonergy-synthetic-thermal-conduction",
      "title": "Synthetic thermal resistance",
      "summary": "Conduct 6 W across a prescribed 2 K/W thermal resistance from a 320 K boundary.",
      "family": "Heat transfer",
      "editorImportRequired": true,
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-thermal-network-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.01,
        "minStepS": 1e-10,
        "maxStepS": 5,
        "relativeTolerance": 1e-11,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 1
      },
      "signals": [
        {
          "id": "tip-temperature",
          "label": "Far-boundary temperature",
          "unit": "K",
          "quantity": "temperature",
          "gate": 1e-7
        }
      ],
      "inputs": [
        {
          "label": "Boundary temperature",
          "value": 320,
          "unit": "K"
        },
        {
          "label": "Heat flow",
          "value": 6,
          "unit": "W"
        },
        {
          "label": "Thermal resistance",
          "value": 2,
          "unit": "K/W"
        }
      ],
      "blockExplanation": "A heat source and resistance gain form the temperature drop. The far boundary is 320 − 6×2 = 308 K.",
      "scope": "Hypothetical lumped thermal network. Temperatures are absolute kelvin, heat rates watts and thermal capacity joules per kelvin. No real material is characterized.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "Thermal resistance, capacity and convection coefficient are prescribed positive constants; spatial temperature fields and temperature-dependent properties are outside this case."
      ]
    },
    {
      "id": "lemonergy-synthetic-thermal-convection",
      "title": "Synthetic convection balance",
      "summary": "Evaluate a prescribed 0.08 m² surface at 315 K in 295 K air with h = 12.5 W/(m²·K).",
      "family": "Heat transfer",
      "editorImportRequired": true,
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-thermal-network-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.01,
        "minStepS": 1e-10,
        "maxStepS": 5,
        "relativeTolerance": 1e-11,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 1
      },
      "signals": [
        {
          "id": "convection-heat",
          "label": "Convective heat loss",
          "unit": "W",
          "quantity": "heat",
          "gate": 1e-7
        }
      ],
      "inputs": [
        {
          "label": "Surface area",
          "value": 0.08,
          "unit": "m²"
        },
        {
          "label": "Convection coefficient",
          "value": 12.5,
          "unit": "W/(m²·K)"
        },
        {
          "label": "Surface temperature",
          "value": 315,
          "unit": "K"
        },
        {
          "label": "Air temperature",
          "value": 295,
          "unit": "K"
        }
      ],
      "blockExplanation": "A temperature difference and gain implement Q = h·A·ΔT = 12.5×0.08×20 = 20 W.",
      "scope": "Hypothetical lumped thermal network. Temperatures are absolute kelvin, heat rates watts and thermal capacity joules per kelvin. No real material is characterized.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "Thermal resistance, capacity and convection coefficient are prescribed positive constants; spatial temperature fields and temperature-dependent properties are outside this case."
      ]
    },
    {
      "id": "lemonergy-synthetic-thermal-insulated",
      "title": "Synthetic insulated thermal mass",
      "summary": "Supply 16 W to an insulated 800 J/K thermal capacity, initially 295 K.",
      "family": "Heat transfer",
      "editorImportRequired": true,
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-thermal-network-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.01,
        "minStepS": 1e-10,
        "maxStepS": 5,
        "relativeTolerance": 1e-11,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 200
      },
      "signals": [
        {
          "id": "rod-temperature",
          "label": "Lumped temperature",
          "unit": "K",
          "quantity": "temperature",
          "gate": 1e-7
        },
        {
          "id": "temperature-rate",
          "label": "Heating rate",
          "unit": "K/s",
          "quantity": "temperature-rate",
          "gate": 1e-7
        }
      ],
      "inputs": [
        {
          "label": "Thermal capacity",
          "value": 800,
          "unit": "J/K"
        },
        {
          "label": "Heat input",
          "value": 16,
          "unit": "W"
        },
        {
          "label": "Initial temperature",
          "value": 295,
          "unit": "K"
        }
      ],
      "blockExplanation": "A thermal balance with zero heat loss drives an integrator. dT/dt = 16/800 = 0.02 K/s, so T(200 s) = 299 K.",
      "scope": "Hypothetical lumped thermal network. Temperatures are absolute kelvin, heat rates watts and thermal capacity joules per kelvin. No real material is characterized.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "Thermal resistance, capacity and convection coefficient are prescribed positive constants; spatial temperature fields and temperature-dependent properties are outside this case."
      ]
    },
    {
      "id": "lemonergy-synthetic-thermal-lumped",
      "title": "Synthetic thermal mass between two boundaries",
      "summary": "Connect an 800 J/K thermal mass to 335 K through 2 W/K and to 295 K air through 1 W/K.",
      "family": "Heat transfer",
      "editorImportRequired": true,
      "source": {
        "title": "Lemonergy synthetic numerical reference contract",
        "url": "https://lemonergy.com/wiki/synthetic-thermal-network-contract/"
      },
      "solverSettings": {
        "method": "dormand-prince-45",
        "startS": 0,
        "initialStepS": 0.01,
        "minStepS": 1e-10,
        "maxStepS": 5,
        "relativeTolerance": 1e-11,
        "absoluteTolerance": 1e-12,
        "maxSteps": 100000,
        "algebraicTolerance": 1e-10,
        "algebraicMaxIterations": 30,
        "implicitTolerance": 1e-10,
        "implicitMaxIterations": 20,
        "endS": 1200
      },
      "signals": [
        {
          "id": "rod-temperature",
          "label": "Lumped temperature",
          "unit": "K",
          "quantity": "temperature",
          "gate": 1e-7
        }
      ],
      "inputs": [
        {
          "label": "Thermal capacity",
          "value": 800,
          "unit": "J/K"
        },
        {
          "label": "Hot-side conductance",
          "value": 2,
          "unit": "W/K"
        },
        {
          "label": "Hot boundary",
          "value": 335,
          "unit": "K"
        },
        {
          "label": "Air conductance",
          "value": 1,
          "unit": "W/K"
        },
        {
          "label": "Air temperature",
          "value": 295,
          "unit": "K"
        },
        {
          "label": "Initial temperature",
          "value": 295,
          "unit": "K"
        }
      ],
      "blockExplanation": "The balance is 800·dT/dt = 2(335−T) − (T−295). Equilibrium is 965/3 K and time constant is 800/3 s. Compare every native point with that exponential solution.",
      "scope": "Hypothetical lumped thermal network. Temperatures are absolute kelvin, heat rates watts and thermal capacity joules per kelvin. No real material is characterized.",
      "limitations": [
        "The inputs are authored synthetic teaching choices. No measured cell, material dataset or external software trace is reproduced.",
        "Passing verifies these numerical implementations against analytical equations; it does not establish hardware accuracy, safety or parity with another product.",
        "Maximum-error gates are fixed before execution. RMSE weights accepted solver samples equally; it is not a uniform-time integral.",
        "Thermal resistance, capacity and convection coefficient are prescribed positive constants; spatial temperature fields and temperature-dependent properties are outside this case."
      ]
    }
  ]
}
