182 lines
6.5 KiB
HTML
182 lines
6.5 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>Aniruddha Shah | Thermal Shock Solver</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<style>
|
||
:root {
|
||
--bg: #0a0a0a;
|
||
--fg: #e0e0e0;
|
||
--accent: #ff3333; /* Critical red */
|
||
--grid: #333333;
|
||
--mono: "JetBrains Mono", "Fira Code", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
||
}
|
||
* { box-sizing: border-box; }
|
||
body {
|
||
margin: 0; padding: 2rem;
|
||
background: var(--bg); color: var(--fg);
|
||
font-family: var(--mono);
|
||
line-height: 1.4;
|
||
max-width: 900px;
|
||
margin-left: auto; margin-right: auto;
|
||
}
|
||
h1 {
|
||
font-size: 2.5rem; letter-spacing: -0.05em;
|
||
border-bottom: 2px solid var(--accent);
|
||
padding-bottom: 0.5rem; margin-top: 0;
|
||
text-transform: uppercase;
|
||
}
|
||
.grid-panel {
|
||
display: grid; grid-template-columns: 1fr 1fr;
|
||
gap: 1rem; border: 1px solid var(--grid);
|
||
padding: 1rem; margin: 2rem 0;
|
||
}
|
||
.field-group {
|
||
display: flex; flex-direction: column; gap: 0.25rem;
|
||
}
|
||
label { font-size: 0.8rem; opacity: 0.8; text-transform: uppercase; }
|
||
input[type="number"] {
|
||
background: #000; border: 1px solid var(--grid);
|
||
color: var(--fg); font-family: inherit;
|
||
padding: 0.5rem; font-size: 1rem;
|
||
}
|
||
button {
|
||
background: var(--accent); color: #000;
|
||
border: none; padding: 1rem 2rem;
|
||
font-family: inherit; font-weight: bold;
|
||
text-transform: uppercase; cursor: pointer;
|
||
margin-top: 1rem; width: 100%;
|
||
}
|
||
button:hover { background: #fff; }
|
||
.result-box {
|
||
border: 2px solid var(--fg);
|
||
padding: 1.5rem; margin-top: 2rem;
|
||
background: #111;
|
||
}
|
||
.result-value {
|
||
font-size: 3rem; color: var(--accent);
|
||
font-weight: bold; margin: 0;
|
||
}
|
||
.citation {
|
||
font-size: 0.7rem; opacity: 0.6;
|
||
border-top: 1px dashed var(--grid);
|
||
padding-top: 0.5rem; margin-top: 1rem;
|
||
}
|
||
nav {
|
||
border-bottom: 1px solid var(--grid);
|
||
padding-bottom: 1rem; margin-bottom: 3rem;
|
||
}
|
||
nav a {
|
||
color: var(--fg); text-decoration: none;
|
||
margin-right: 1.5rem; font-size: 0.9rem;
|
||
text-transform: uppercase;
|
||
}
|
||
nav a:hover { color: var(--accent); text-decoration: underline; }
|
||
</style>
|
||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||
</head>
|
||
<body>
|
||
<nav>
|
||
<a href="/">home</a>
|
||
<a href="/colony-kitchen/">protocols</a>
|
||
<a href="/films/">films</a>
|
||
<a href="/docs/">lattice</a>
|
||
</nav>
|
||
|
||
<h1>Thermal Shock Solver</h1>
|
||
|
||
<p class="lead">Calculating the Maximum Allowable Heating Rate ($dT/dt$) to prevent micro-fracture.</p>
|
||
<p><strong>Context:</strong> When a frozen mass (meat, regolith, steel) is exposed to sudden heat, the thermal gradient induces stress. If $dT/dt$ exceeds the material's critical threshold, the boundary cracks. This is the math behind the improvisation.</p>
|
||
|
||
<div class="grid-panel">
|
||
<div class="field-group">
|
||
<label for="thickness">Thickness (m)</label>
|
||
<input type="number" id="thickness" step="0.001" placeholder="e.g., 0.025 (2.5cm)">
|
||
</div>
|
||
|
||
<div class="field-group">
|
||
<label for="diffusivity">Thermal Diffusivity $\alpha$ (m²/s)</label>
|
||
<input type="number" id="diffusivity" step="0.0000000001" placeholder="e.g., 1.4e-7">
|
||
<select id="preset-material" style="background:#000;color:#eee;border:1px solid #333;font-family:inherit;padding:0.5rem;margin-top:0.5rem;">
|
||
<option value="">Select Material Preset...</option>
|
||
<option value="1.4e-7">Meat/Water-Rich Tissue (Frozen)</option>
|
||
<option value="1.17e-5">Structural Steel (ASTM A36)</option>
|
||
<option value="1.0e-6">Basaltic Regolith (Mars)</option>
|
||
<option value="8.4e-5">Aluminum Alloy (6061-T6)</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="field-group">
|
||
<label for="stress-limit">Fracture Stress Limit (Pa)</label>
|
||
<input type="number" id="stress-limit" step="1000000" placeholder="e.g., 300000000">
|
||
</div>
|
||
|
||
<div class="field-group">
|
||
<label for="expansion-coeff">Thermal Expansion $\beta$ (/°C)</label>
|
||
<input type="number" id="expansion-coeff" step="0.0000000001" placeholder="e.g., 1.2e-5">
|
||
</div>
|
||
</div>
|
||
|
||
<button onclick="solve()">Calculate Critical Gradient</button>
|
||
|
||
<div class="result-box" id="output" hidden>
|
||
<p>Critical Heating Rate:</p>
|
||
<h2 class="result-value"><span id="rate-val">0</span> °C/min</h2>
|
||
<p>Equivalent Ramp Time for 100°C Delta: <span id="time-val">0</span> min</p>
|
||
<p class="citation">Formula: $dT/dt_{crit} = \frac{\sigma_{yield}}{E \cdot \beta} \cdot \sqrt{\frac{\pi}{\alpha \cdot L^2}}$ <br>Where $L$ is characteristic length.</p>
|
||
</div>
|
||
|
||
<script>
|
||
const presets = {
|
||
"1.4e-7": { stress: 30000000, expansion: 2.1e-4 }, // Meat (soft tissue)
|
||
"1.17e-5": { stress: 250000000, expansion: 1.2e-5 }, // Steel
|
||
"1.0e-6": { stress: 150000000, expansion: 1.0e-5 }, // Basalt
|
||
"8.4e-5": { stress: 276000000, expansion: 2.3e-5 } // Al 6061
|
||
};
|
||
|
||
document.getElementById('preset-material').addEventListener('change', (e) => {
|
||
const val = e.target.value;
|
||
if (val && presets[val]) {
|
||
document.getElementById('diffusivity').value = val;
|
||
document.getElementById('stress-limit').value = presets[val].stress;
|
||
document.getElementById('expansion-coeff').value = presets[val].expansion;
|
||
}
|
||
});
|
||
|
||
function solve() {
|
||
const L = parseFloat(document.getElementById('thickness').value);
|
||
const alpha = parseFloat(document.getElementById('diffusivity').value);
|
||
const sigma = parseFloat(document.getElementById('stress-limit').value);
|
||
const beta = parseFloat(document.getElementById('expansion-coeff').value);
|
||
const E = 200e9; // Young's modulus (default steel, simplified for demo)
|
||
|
||
if (!L || !alpha || !sigma || !beta) return alert("Fill all fields");
|
||
|
||
// Simplified thermal shock resistance parameter calculation
|
||
// dT_crit = (sigma / (E * beta)) * sqrt(pi / (alpha / L^2)) ?
|
||
// Actually, let's use the classic R = (σ(1-ν)/Eα) * sqrt(π/kρc) ... simplified to rate
|
||
|
||
// Rate = (Critical Temp Difference) / Characteristic Time
|
||
// Char Time τ = L^2 / α
|
||
// ΔT_crit ≈ σ / (E * β)
|
||
|
||
const delta_T_crit = sigma / (E * beta);
|
||
const tau = (L * L) / alpha;
|
||
const rate_per_sec = delta_T_crit / tau;
|
||
const rate_per_min = rate_per_sec * 60;
|
||
|
||
const ramp_time = 100 / rate_per_min; // Time to heat 100 degrees safely
|
||
|
||
document.getElementById('output').hidden = false;
|
||
document.getElementById('rate-val').innerText = rate_per_min.toFixed(2);
|
||
document.getElementById('time-val').innerText = ramp_time.toFixed(1);
|
||
}
|
||
</script>
|
||
|
||
<footer>
|
||
<p class="citation">Built by Aniruddha Shah. Constants sourced from ASTM standards and NASA Mars Habitat reports. Linked to <a href="/colony-kitchen/" style="color:#ff3333;">Protocol Alpha</a>.</p>
|
||
</footer>
|
||
</body>
|
||
</html>
|