diff --git a/public/asteroid_temp.php b/public/asteroid_temp.php
index cb8806c..2c20326 100644
--- a/public/asteroid_temp.php
+++ b/public/asteroid_temp.php
@@ -20,10 +20,11 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
gap: 1.5rem;
align-items: start;
}
-@media (max-width: 700px) {
+@media (max-width: 720px) {
.at-layout { grid-template-columns: 1fr; }
}
+/* Parameter-Grid */
.at-param-grid {
display: grid;
grid-template-columns: 1fr 1fr;
@@ -32,7 +33,6 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
@media (max-width: 480px) {
.at-param-grid { grid-template-columns: 1fr; }
}
-
.at-param {
display: flex;
flex-direction: column;
@@ -76,26 +76,79 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
font-size: 0.75rem;
color: var(--text-dim);
line-height: 1.45;
- min-height: 2.2em;
+}
+
+/* Albedo-Modus Toggle */
+.at-mode-toggle {
+ display: flex;
+ gap: 0;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ overflow: hidden;
+ width: fit-content;
+}
+.at-mode-toggle input[type=radio] { display: none; }
+.at-mode-toggle label {
+ padding: 0.3rem 0.85rem;
+ font-size: 0.78rem;
+ color: var(--text-dim);
+ cursor: pointer;
+ transition: background 0.15s, color 0.15s;
+ letter-spacing: 0.03em;
+ border: none;
+}
+.at-mode-toggle input[type=radio]:checked + label {
+ background: var(--gold-dim);
+ color: var(--bg);
+ font-weight: 600;
+}
+
+/* Abgeleitete Bond-Albedo Anzeige */
+.at-derived {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ background: rgba(201,168,76,0.07);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 0.35rem 0.7rem;
+ font-size: 0.85rem;
+}
+.at-derived-label { color: var(--text-dim); }
+.at-derived-val { color: var(--gold); font-weight: 600; }
+
+/* Albedo-Vorschau */
+.at-albedo-wrap {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+}
+.at-albedo-swatch {
+ width: 2rem;
+ height: 2rem;
+ border-radius: 50%;
+ border: 1px solid var(--border);
+ flex-shrink: 0;
+ transition: background 0.2s;
+}
+.at-albedo-caption { font-size: 0.75rem; color: var(--text-dim); }
+
+/* Preset-Buttons */
+.at-presets {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.4rem;
}
/* Ergebnisse */
-.at-results {
- display: flex;
- flex-direction: column;
- gap: 1rem;
-}
+.at-results { display: flex; flex-direction: column; gap: 1rem; }
.at-result-row {
display: flex;
align-items: baseline;
gap: 0.6rem;
flex-wrap: wrap;
}
-.at-result-label {
- font-size: 0.78rem;
- color: var(--text-dim);
- min-width: 4.5rem;
-}
+.at-result-label { font-size: 0.78rem; color: var(--text-dim); min-width: 5rem; }
.at-result-sym {
font-family: 'Georgia', serif;
font-style: italic;
@@ -109,44 +162,44 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
color: var(--gold);
letter-spacing: 0.01em;
}
-.at-result-c {
- font-size: 0.9rem;
- color: var(--text-dim);
-}
+.at-result-c { font-size: 0.9rem; color: var(--text-dim); }
-/* Albedo-Vorschau */
-.at-albedo-wrap {
+/* Durchmesser */
+.at-diam-row {
display: flex;
align-items: center;
gap: 0.75rem;
- margin-top: 0.5rem;
+ flex-wrap: wrap;
}
-.at-albedo-swatch {
- width: 2.2rem;
- height: 2.2rem;
- border-radius: 50%;
- border: 1px solid var(--border);
- flex-shrink: 0;
- transition: background 0.2s;
+.at-diam-val {
+ font-size: 1.6rem;
+ font-weight: 700;
+ color: var(--cyan);
}
-.at-albedo-label {
- font-size: 0.78rem;
- color: var(--text-dim);
+.at-diam-unit { font-size: 0.9rem; color: var(--text-dim); }
+.at-diam-note { font-size: 0.75rem; color: var(--text-dim); }
+
+/* Temperaturprofil Canvas */
+.at-theta-wrap {
+ position: relative;
+ width: 100%;
+}
+#at-theta-canvas {
+ display: block;
+ width: 100%;
+ height: 170px;
+ border-radius: var(--radius);
}
-/* Preset-Buttons */
-.at-presets {
- display: flex;
- flex-wrap: wrap;
- gap: 0.45rem;
- margin-top: 0.25rem;
-}
+/* Größenschätzung hidden state */
+.at-size-section { display: none; }
+.at-size-section.is-visible { display: block; }
/* Trennlinie */
.at-divider {
border: none;
border-top: 1px solid var(--border);
- margin: 0.75rem 0;
+ margin: 0.8rem 0;
}
@@ -165,17 +218,7 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
AE
-
Abstand zur Sonne in Astronomischen Einheiten. Einstrahlung skaliert mit 1/r².
-
-
-
@@ -185,31 +228,97 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
0–1
Wie gut die Oberfläche Wärme abstrahlt. Typisch 0,90–0,95.
+ Wärmeabstrahlung. Typisch 0,90–0,95.
-
+
Temperaturen
-
Gleichgewicht
@@ -236,11 +345,9 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
–
-
Isotherme Gleichgewichtstemperatur — globaler Mittelwert über die gesamte Oberfläche.
+
Globaler Mittelwert (gesamte Oberfläche, schnelle Rotation).
-
-
Subsolar
@@ -248,23 +355,58 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
–
-
Subsolartemperatur — heißester Punkt direkt unter der Sonne auf der Tagseite.
+
Heißester Punkt direkt unter der Sonne (Zenitwinkel θ = 0°).
-
+
+
+
+
+
+
+
+ T(θ) = Tss · cos(θ)¼ — Temperatur als Funktion des Sonnenzenitwinkels.
+ Gestrichelt: Teq.
+
+
+
+
+
+
Größenabschätzung
+
+ –
+ km
+
+
+
+ D = (1329 km / √p) · 10−H/5
+
+
+
+
Formeln
| Teq | ⁴√[ (1−A)·S / (4·ε·σ·η) ] |
| Tss | ⁴√[ (1−A)·S / (ε·σ·η) ] |
- | S | S₀ / r² mit S₀ = 1361 W/m² |
+ | T(θ) | Tss · cos(θ)¼ |
+ | S | S₀ / r² (S₀ = 1361 W/m²) |
+ | A | p · q (q = 0,290 + 0,684·G) |
+ | D | (1329 km / √p) · 10−H/5 |
| σ | 5,670 × 10⁻⁸ W m⁻² K⁻⁴ |
- Modell: NEATM (Near-Earth Asteroid Thermal Model).
- Tss = 4¼ · Teq ≈ 1,414 · Teq.
+ Modell: NEATM · Albedo: IAU H-G-System (Bowell et al. 1989)
@@ -276,48 +418,101 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
const SIGMA = 5.670374419e-8;
const S0 = 1361.0;
+ // Phasenintegral (Bowell et al. 1989, IAU H-G)
+ function phaseIntegral(G) { return 0.290 + 0.684 * G; }
+ function bondAlbedo(p, G) { return p * phaseIntegral(G); }
+ function asteroidDiam(H, p) { return (1329.0 / Math.sqrt(p)) * Math.pow(10, -H / 5.0); }
+
+ // Presets: geometrische Albedo p + G (Bond A wird daraus abgeleitet)
+ // Quellen: Dawn, NEAR-Shoemaker, OSIRIS-REx, Hayabusa2, JPL/MPC
const PRESETS = {
- default: { r: 1.00, A: 0.050, eps: 0.90, eta: 1.00 },
- c: { r: 2.50, A: 0.040, eps: 0.90, eta: 1.00 },
- s: { r: 2.00, A: 0.150, eps: 0.90, eta: 1.00 },
- vesta: { r: 2.36, A: 0.200, eps: 0.90, eta: 1.00 },
- eros: { r: 1.46, A: 0.120, eps: 0.90, eta: 1.00 },
- bennu: { r: 1.13, A: 0.020, eps: 0.90, eta: 1.00 },
- ryugu: { r: 1.19, A: 0.020, eps: 0.90, eta: 1.00 },
- neufang: { r: 3.01, A: 0.045, eps: 0.90, eta: 1.00 },
+ // r p G eps eta
+ default: { r:1.00, p:0.100, G:0.15, eps:0.90, eta:1.00 },
+ c: { r:2.50, p:0.057, G:0.15, eps:0.90, eta:1.00 }, // C-Typ typisch
+ s: { r:2.00, p:0.202, G:0.24, eps:0.90, eta:1.00 }, // S-Typ typisch
+ vesta: { r:2.36, p:0.423, G:0.32, eps:0.90, eta:1.00 }, // Dawn-Mission
+ eros: { r:1.46, p:0.250, G:0.22, eps:0.90, eta:1.00 }, // NEAR-Shoemaker
+ bennu: { r:1.13, p:0.044, G:0.02, eps:0.90, eta:1.00 }, // OSIRIS-REx
+ ryugu: { r:1.19, p:0.045, G:0.09, eps:0.90, eta:1.00 }, // Hayabusa2
+ neufang: { r:3.01, p:0.115, G:0.15, eps:0.90, eta:1.00 }, // Schätzwert
};
+ // Eingaben
const numR = document.getElementById('at-r');
const numA = document.getElementById('at-a');
+ const numP = document.getElementById('at-p');
+ const numG = document.getElementById('at-G');
+ const numH = document.getElementById('at-H');
const numEps = document.getElementById('at-eps');
const numEta = document.getElementById('at-eta');
const sldR = document.getElementById('at-r-slider');
const sldA = document.getElementById('at-a-slider');
+ const sldP = document.getElementById('at-p-slider');
+ const sldG = document.getElementById('at-G-slider');
const sldEps = document.getElementById('at-eps-slider');
const sldEta = document.getElementById('at-eta-slider');
- const outTeqK = document.getElementById('at-teq-k');
- const outTeqC = document.getElementById('at-teq-c');
- const outTssK = document.getElementById('at-tss-k');
- const outTssC = document.getElementById('at-tss-c');
- const swatch = document.getElementById('at-albedo-swatch');
+ const modeRadios = document.querySelectorAll('input[name="at-mode"]');
+ const bondSection = document.getElementById('at-bond-section');
+ const geoSection = document.getElementById('at-geo-section');
+ const derivedA = document.getElementById('at-derived-A');
- function fmt(val, decimals = 2) {
- return val.toFixed(decimals).replace('.', ',');
+ // Ausgaben
+ const outTeqK = document.getElementById('at-teq-k');
+ const outTeqC = document.getElementById('at-teq-c');
+ const outTssK = document.getElementById('at-tss-k');
+ const outTssC = document.getElementById('at-tss-c');
+ const swatch = document.getElementById('at-albedo-swatch');
+ const sizeCard = document.getElementById('at-size-card');
+ const diamVal = document.getElementById('at-diam-val');
+ const diamNote = document.getElementById('at-diam-note');
+
+ function fmt(val, d) { return val.toFixed(d).replace('.', ','); }
+ function fmtSI(val) {
+ if (val >= 1e6) return fmt(val / 1e6, 2) + ' ×10⁶';
+ if (val >= 1000) return fmt(val, 0);
+ return fmt(val, 1);
+ }
+
+ function getMode() {
+ for (const r of modeRadios) { if (r.checked) return r.value; }
+ return 'bond';
+ }
+
+ function getBondAlbedo() {
+ if (getMode() === 'geo') {
+ const p = parseFloat(numP.value);
+ const G = parseFloat(numG.value);
+ if (!isFinite(p) || !isFinite(G)) return NaN;
+ return bondAlbedo(p, G);
+ }
+ return parseFloat(numA.value);
}
function calculate() {
const r = parseFloat(numR.value);
- const A = parseFloat(numA.value);
+ const A = getBondAlbedo();
const eps = parseFloat(numEps.value);
const eta = parseFloat(numEta.value);
+ const mode = getMode();
+
+ // Bond-Albedo Anzeige im Geo-Modus
+ if (mode === 'geo') {
+ derivedA.textContent = isFinite(A) ? fmt(A, 4) : '–';
+ }
+
+ // Albedo-Swatch (immer mit A)
+ if (isFinite(A)) {
+ const v = Math.round(Math.min(1, Math.max(0, A)) * 255);
+ swatch.style.background = `rgb(${v},${v},${v})`;
+ }
if (!isFinite(r) || r <= 0 || !isFinite(A) || A < 0 || A >= 1 ||
!isFinite(eps) || eps <= 0 || !isFinite(eta) || eta <= 0) {
- outTeqK.textContent = '–';
- outTeqC.textContent = '';
- outTssK.textContent = '–';
- outTssC.textContent = '';
+ outTeqK.textContent = '–'; outTeqC.textContent = '';
+ outTssK.textContent = '–'; outTssC.textContent = '';
+ drawThetaProfile(null, null);
+ updateSize(mode, NaN, NaN);
return;
}
@@ -330,43 +525,236 @@ $headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berec
outTssK.textContent = fmt(Tss, 2) + ' K';
outTssC.textContent = '(' + fmt(Tss - 273.15, 2) + ' °C)';
- const v = Math.round(Math.min(1, Math.max(0, A)) * 255);
- swatch.style.background = `rgb(${v},${v},${v})`;
+ drawThetaProfile(Tss, Teq);
+
+ const p = mode === 'geo' ? parseFloat(numP.value) : NaN;
+ updateSize(mode, p, NaN);
}
- function sync(numInput, slider) {
- numInput.addEventListener('input', () => {
- slider.value = numInput.value;
- calculate();
- });
- slider.addEventListener('input', () => {
- numInput.value = slider.value;
- calculate();
- });
+ function updateSize(mode, p, _unused) {
+ if (mode !== 'geo') { sizeCard.classList.remove('is-visible'); return; }
+ const H = parseFloat(numH.value);
+ if (!isFinite(H) || !isFinite(p) || p <= 0) {
+ sizeCard.classList.remove('is-visible');
+ return;
+ }
+ const D = asteroidDiam(H, p);
+ sizeCard.classList.add('is-visible');
+ diamVal.textContent = fmtSI(D) + ' km';
+ diamNote.textContent = 'H = ' + fmt(H, 1) + ' mag, p = ' + fmt(p, 3);
}
+ function getTempUnit() {
+ return document.getElementById('at-unit-c').checked ? 'C' : 'K';
+ }
+ function toUnit(K) { return getTempUnit() === 'C' ? K - 273.15 : K; }
+ function unitLabel() { return getTempUnit() === 'C' ? '°C' : 'K'; }
+
+ document.querySelectorAll('input[name="at-unit"]').forEach(r =>
+ r.addEventListener('change', () => {
+ const Tss = parseFloat(outTssK.textContent);
+ const Teq = parseFloat(outTeqK.textContent);
+ if (isFinite(Tss) && isFinite(Teq)) drawThetaProfile(Tss, Teq);
+ })
+ );
+
+ // T(θ) Profil Canvas
+ function drawThetaProfile(Tss, Teq) {
+ const canvas = document.getElementById('at-theta-canvas');
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
+ const cssW = canvas.offsetWidth || 400;
+ const cssH = 170;
+ canvas.style.height = cssH + 'px';
+ canvas.width = Math.round(cssW * dpr);
+ canvas.height = Math.round(cssH * dpr);
+ const ctx = canvas.getContext('2d');
+ ctx.scale(dpr, dpr);
+ ctx.clearRect(0, 0, cssW, cssH);
+
+ const PAD = { top: 20, right: 14, bottom: 34, left: 52 };
+ const cW = cssW - PAD.left - PAD.right;
+ const cH = cssH - PAD.top - PAD.bottom;
+
+ // Hintergrund
+ ctx.fillStyle = '#06080f';
+ ctx.fillRect(0, 0, cssW, cssH);
+
+ if (!Tss || !Teq) {
+ ctx.fillStyle = '#8899bb';
+ ctx.font = '12px sans-serif';
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'middle';
+ ctx.fillText('Bitte Parameter eingeben', cssW / 2, cssH / 2);
+ return;
+ }
+
+ const TssU = toUnit(Tss);
+ const TeqU = toUnit(Teq);
+ const unit = unitLabel();
+ // Y-Achse: bei Celsius kann Minimum negativ sein → Bereich anpassen
+ const Tmin_u = getTempUnit() === 'C' ? Math.min(0, toUnit(0)) : 0;
+ const Tmax_u = TssU * (getTempUnit() === 'C' ? 1.08 : 1.08);
+ const Trange = Tmax_u - Tmin_u || 1;
+ const xOf = t => PAD.left + (t / 90) * cW;
+ const yOf = T => PAD.top + cH - ((T - Tmin_u) / Trange) * cH;
+
+ // Grid
+ ctx.strokeStyle = 'rgba(136,153,187,0.12)';
+ ctx.lineWidth = 1;
+ for (const theta of [0, 30, 60, 90]) {
+ ctx.beginPath(); ctx.moveTo(xOf(theta), PAD.top); ctx.lineTo(xOf(theta), PAD.top + cH); ctx.stroke();
+ }
+ const nY = 4;
+ for (let i = 0; i <= nY; i++) {
+ const T = Tmin_u + (i / nY) * Trange;
+ ctx.beginPath(); ctx.moveTo(PAD.left, yOf(T)); ctx.lineTo(PAD.left + cW, yOf(T)); ctx.stroke();
+ }
+
+ // T_eq gestrichelt (cyan)
+ ctx.strokeStyle = '#4fc3d8';
+ ctx.lineWidth = 1.5;
+ ctx.setLineDash([5, 4]);
+ ctx.beginPath(); ctx.moveTo(PAD.left, yOf(TeqU)); ctx.lineTo(PAD.left + cW, yOf(TeqU)); ctx.stroke();
+ ctx.setLineDash([]);
+
+ // T(θ) Kurve (gold, Füllung darunter)
+ const tCurve = px => toUnit(Tss * Math.pow(Math.cos((px / cW) * 90 * Math.PI / 180), 0.25));
+ ctx.beginPath();
+ for (let px = 0; px <= cW; px++) {
+ px === 0 ? ctx.moveTo(xOf(px / cW * 90), yOf(tCurve(px))) : ctx.lineTo(xOf(px / cW * 90), yOf(tCurve(px)));
+ }
+ ctx.lineTo(PAD.left + cW, PAD.top + cH);
+ ctx.lineTo(PAD.left, PAD.top + cH);
+ ctx.closePath();
+ ctx.fillStyle = 'rgba(201,168,76,0.08)';
+ ctx.fill();
+
+ ctx.strokeStyle = '#c9a84c';
+ ctx.lineWidth = 2;
+ ctx.beginPath();
+ for (let px = 0; px <= cW; px++) {
+ px === 0 ? ctx.moveTo(xOf(px / cW * 90), yOf(tCurve(px))) : ctx.lineTo(xOf(px / cW * 90), yOf(tCurve(px)));
+ }
+ ctx.stroke();
+
+ // Achsen
+ ctx.strokeStyle = 'rgba(136,153,187,0.35)';
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ ctx.moveTo(PAD.left, PAD.top);
+ ctx.lineTo(PAD.left, PAD.top + cH);
+ ctx.lineTo(PAD.left + cW, PAD.top + cH);
+ ctx.stroke();
+
+ // X-Beschriftung
+ ctx.fillStyle = '#8899bb';
+ ctx.font = '10px sans-serif';
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'top';
+ for (const theta of [0, 30, 60, 90]) {
+ ctx.fillText(theta + '°', xOf(theta), PAD.top + cH + 5);
+ }
+ ctx.fillText('Zenitwinkel θ', PAD.left + cW / 2, PAD.top + cH + 19);
+
+ // Y-Beschriftung
+ ctx.textAlign = 'right';
+ ctx.textBaseline = 'middle';
+ for (let i = 0; i <= nY; i++) {
+ const T = Tmin_u + (i / nY) * Trange;
+ ctx.fillText(Math.round(T) + ' ' + unit, PAD.left - 5, yOf(T));
+ }
+
+ // Labels an den Kurven
+ ctx.font = 'bold 10px sans-serif';
+ ctx.textAlign = 'left';
+ ctx.textBaseline = 'bottom';
+ ctx.fillStyle = '#c9a84c';
+ ctx.fillText('T_ss = ' + TssU.toFixed(0) + ' ' + unit, xOf(0) + 4, yOf(TssU) - 2);
+
+ ctx.fillStyle = '#4fc3d8';
+ ctx.font = '10px sans-serif';
+ const labelX = Math.min(xOf(45), PAD.left + cW - 90);
+ ctx.fillText('T_eq = ' + TeqU.toFixed(0) + ' ' + unit, labelX, yOf(TeqU) - 3);
+ }
+
+ // Slider ↔ Zahl synchronisieren
+ function sync(num, sld) {
+ num.addEventListener('input', () => { sld.value = num.value; calculate(); });
+ sld.addEventListener('input', () => { num.value = sld.value; calculate(); });
+ }
sync(numR, sldR);
sync(numA, sldA);
+ sync(numP, sldP);
+ sync(numG, sldG);
sync(numEps, sldEps);
sync(numEta, sldEta);
+ numH.addEventListener('input', calculate);
+
+ // Modus-Toggle
+ modeRadios.forEach(r => r.addEventListener('change', () => {
+ const geo = getMode() === 'geo';
+ bondSection.style.display = geo ? 'none' : '';
+ geoSection.style.display = geo ? '' : 'none';
+ if (geo) {
+ // Bond→Geo: A in p umrechnen (näherungsweise mit aktuellem G)
+ const A = parseFloat(numA.value);
+ const G = parseFloat(numG.value) || 0.15;
+ const q = phaseIntegral(G);
+ if (isFinite(A) && q > 0) {
+ const p = Math.min(0.999, Math.max(0.001, A / q));
+ numP.value = sldP.value = p.toFixed(3);
+ }
+ } else {
+ // Geo→Bond: berechnetes A übernehmen
+ const A = getBondAlbedo();
+ if (isFinite(A)) numA.value = sldA.value = A.toFixed(3);
+ }
+ calculate();
+ }));
+
+ // Presets
+ function applyPreset(pr) {
+ numR.value = sldR.value = pr.r;
+ numEps.value = sldEps.value = pr.eps;
+ numEta.value = sldEta.value = pr.eta;
+
+ // Preset immer im Geo-Modus anwenden
+ document.getElementById('at-mode-geo').checked = true;
+ bondSection.style.display = 'none';
+ geoSection.style.display = '';
+
+ numP.value = sldP.value = pr.p;
+ numG.value = sldG.value = pr.G;
+ const A = bondAlbedo(pr.p, pr.G);
+ numA.value = sldA.value = A.toFixed(3);
- function applyPreset(p) {
- numR.value = sldR.value = p.r;
- numA.value = sldA.value = p.A;
- numEps.value = sldEps.value = p.eps;
- numEta.value = sldEta.value = p.eta;
calculate();
}
document.querySelectorAll('[data-preset]').forEach(btn => {
btn.addEventListener('click', () => {
- const key = btn.dataset.preset;
- if (PRESETS[key]) applyPreset(PRESETS[key]);
+ const k = btn.dataset.preset;
+ if (PRESETS[k]) applyPreset(PRESETS[k]);
});
});
-
document.getElementById('at-reset').addEventListener('click', () => {
- applyPreset(PRESETS.default);
+ document.getElementById('at-mode-bond').checked = true;
+ bondSection.style.display = '';
+ geoSection.style.display = 'none';
+ numR.value = sldR.value = 1.00;
+ numA.value = sldA.value = 0.050;
+ numP.value = sldP.value = 0.100;
+ numG.value = sldG.value = 0.15;
+ numH.value = '';
+ numEps.value = sldEps.value = 0.90;
+ numEta.value = sldEta.value = 1.00;
+ calculate();
+ });
+
+ window.addEventListener('resize', () => {
+ const Tss = parseFloat(outTssK.textContent);
+ const Teq = parseFloat(outTeqK.textContent);
+ if (isFinite(Tss) && isFinite(Teq)) drawThetaProfile(Tss, Teq);
});
calculate();