{
  "schemaVersion": 1,
  "slug": "specific-heat-calculator",
  "category": "science",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "3f7bfd6c9bc170096b34f5aae735cadf78ab4b596b9b08a9130fbd5367f3a508",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/specific-heat-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "Q = m × c × ΔT",
    "vars": [
      [
        "m",
        "Mass (kg)"
      ],
      [
        "c",
        "Specific heat (J/(kg·K))"
      ],
      [
        "ΔT",
        "Temperature change (K)"
      ]
    ],
    "note": "Q = mass × specific heat × temperature change. Listed specific heats are reference values; a negative temperature change gives negative heat under this sign convention."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-04",
    "sources": [
      {
        "name": "OpenStax — Specific heat and calorimetry",
        "url": "https://openstax.org/books/university-physics-volume-2/pages/1-4-heat-transfer-specific-heat-and-calorimetry"
      }
    ],
    "basis": "Sensible heat is mass × the selected specific-heat value × temperature change. Energy conversions use 4.184 J per thermochemical calorie and 3600 J per Wh.",
    "limitations": "Selected material values are fixed implementation constants, not a temperature-dependent database. Assumes no phase change or heat loss; a negative temperature change produces a signed negative heat transfer.",
    "implementationHash": "3f7bfd6c9bc170096b34f5aae735cadf78ab4b596b9b08a9130fbd5367f3a508"
  },
  "contract": {
    "compute": "const c = Number(substance);\nconst q = mass*c*temperatureChange;\nreturn { energyJ: q, energyKJ: q/1000, energyCal: q/4.184, energyKcal: q/4184, energyWh: q/3600 };",
    "inputs": [
      {
        "name": "mass",
        "type": "number",
        "default": 500,
        "min": 0,
        "max": 1000000,
        "step": 1
      },
      {
        "name": "substance",
        "type": "select",
        "default": 4.184,
        "options": [
          {
            "value": 4.184
          },
          {
            "value": 2.09
          },
          {
            "value": 2.01
          },
          {
            "value": 0.897
          },
          {
            "value": 0.385
          },
          {
            "value": 0.45
          },
          {
            "value": 0.129
          },
          {
            "value": 0.84
          },
          {
            "value": 1.005
          },
          {
            "value": 2.44
          }
        ]
      },
      {
        "name": "temperatureChange",
        "type": "number",
        "default": 25,
        "min": -1000,
        "max": 1000,
        "step": 0.1
      }
    ],
    "outputs": [
      {
        "name": "energyJ",
        "precision": 0,
        "unit": "J"
      },
      {
        "name": "energyKJ",
        "precision": 2,
        "unit": "kJ"
      },
      {
        "name": "energyCal",
        "precision": 0,
        "unit": "cal"
      },
      {
        "name": "energyKcal",
        "precision": 2,
        "unit": "kcal"
      },
      {
        "name": "energyWh",
        "precision": 3,
        "unit": "Wh"
      }
    ],
    "interpret": null
  }
}
