The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.
evaluateMe03 · src/physics/reference/massEnergy.ts · this site’s source, as built · sha256:3e9ea1af4a87d89addf26618479bebd064d67ef5ce0091952a426570743deb22
This function computes the listed outputs when it runs.
In words
Read the chosen boundary, what happens to the radiation, and the energies, then pass them to the boundary ledger, the modern four-momentum calculation and the energy-source cards, and gather their results in one snapshot. A missing or invalid energy falls back to the default: one unit emitted, none put in.
Implementation
/**
* Main reference evaluator for ME-03.
*/
export function evaluateMe03(input: Me03Input = {}): Me03Snapshot {
const boundary = input.boundary ?? "body-alone";
const disposition = input.disposition ?? "escapes";
const emittedEnergy =
Number.isFinite(input.emittedEnergy) && (input.emittedEnergy ?? 1) > 0
? (input.emittedEnergy ?? 1)
: 1;
const inputEnergy =
Number.isFinite(input.inputEnergy) && (input.inputEnergy ?? 0) >= 0
? (input.inputEnergy ?? 0)
: 0;
const cardId = input.cardId ?? "me-03-card-radium";
const mode = input.mode ?? "1905";
const pulseSystem = input.pulseSystem ?? "two-opposite";
const set = getConstantSet(input.constantSetId ?? "modern-si-2019");
const c = constantValue(set, "speedOfLight").value;
const ledger = evaluateBoundaryLedger(boundary, disposition, emittedEnergy, inputEnergy, set);
const invariantMass = evaluateFourMomentum(pulseSystem, emittedEnergy, set);
const card = evaluateEnergySourceCard(cardId, set);
const cards: Record<Me03CardId, EnergySourceCard> = {
"me-03-card-radium": evaluateEnergySourceCard("me-03-card-radium", set),
"me-03-card-sun": evaluateEnergySourceCard("me-03-card-sun", set),
"me-03-card-coal": evaluateEnergySourceCard("me-03-card-coal", set),
"me-03-card-candle": evaluateEnergySourceCard("me-03-card-candle", set),
"me-03-card-bulb": evaluateEnergySourceCard("me-03-card-bulb", set),
"me-03-heated-sealed-box": evaluateEnergySourceCard("me-03-heated-sealed-box", set),
"me-03-sealed-lamp-and-mirror": evaluateEnergySourceCard("me-03-sealed-lamp-and-mirror", set),
};
return Object.freeze({
boundary,
disposition,
emittedEnergy,
inputEnergy,
cardId,
mode,
pulseSystem,
speedOfLight: c,
energyChange: ledger.energyChange,
massChange: ledger.massChange,
radiationEnergyChange: ledger.radiationEnergyChange,
radiationMassChange: ledger.radiationMassChange,
systemEnergyChange: ledger.systemEnergyChange,
systemMassChange: ledger.systemMassChange,
invariantMass,
card,
cards: Object.freeze(cards),
boundaryFacts: card.boundary,
});
}