slope-stability-tool/material-shear-calculator.html
2026-07-18 07:04:54 +00:00

389 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Material Shear Calculator | Alexander West</title>
<link rel="stylesheet" href="/styles.css">
<style>
:root {
--prairie-black: #0a0f0d;
--seam-gold: #ffd700;
--vein-bronze: #cd7f32;
--caliper-silver: #c0c0c0;
--horizon-grey: #1a1f1d;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body {
background: var(--prairie-black);
color: var(--caliper-silver);
font-family: 'Inter', system-ui, -apple-system, sans-serif;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 4vmin 2vmin;
}
header {
border-bottom: 2px solid var(--seam-gold);
padding-bottom: 2vmin;
margin-bottom: 4vmin;
}
h1 {
font-size: clamp(1.5rem, 4vmin, 5rem);
color: var(--seam-gold);
letter-spacing: 0.1em;
text-transform: uppercase;
}
.subtitle {
font-size: clamp(0.8rem, 2vmin, 2rem);
color: var(--vein-bronze);
margin-top: 1vmin;
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4vmin;
}
@media (max-width: 768px) {
.grid { grid-template-columns: 1fr; }
}
.panel {
background: linear-gradient(135deg, var(--horizon-grey), transparent);
border: 1px solid var(--vein-bronze);
padding: 3vmin;
margin-bottom: 2vmin;
}
.panel h2 {
color: var(--seam-gold);
font-size: clamp(1rem, 2.5vmin, 3rem);
margin-bottom: 2vmin;
text-transform: uppercase;
letter-spacing: 0.08em;
}
label {
display: block;
color: var(--seam-gold);
font-size: 0.9rem;
margin-bottom: 0.5vmin;
text-transform: uppercase;
letter-spacing: 0.05em;
}
input, select {
width: 100%;
padding: 1vmin;
background: var(--prairie-black);
border: 1px solid var(--vein-bronze);
color: var(--caliper-silver);
font-size: 1rem;
margin-bottom: 2vmin;
}
input:focus, select:focus {
outline: none;
border-color: var(--seam-gold);
box-shadow: 0 0 1vmin var(--seam-gold);
}
button {
background: var(--seam-gold);
color: var(--prairie-black);
border: none;
padding: 2vmin 4vmin;
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: 0.1em;
cursor: pointer;
transition: all 0.3s ease;
}
button:hover {
background: var(--vein-bronze);
transform: translateY(-2px);
}
.result {
margin-top: 2vmin;
padding: 2vmin;
border: 2px solid var(--seam-gold);
background: rgba(255, 215, 0, 0.05);
}
.result-value {
font-size: clamp(2rem, 6vmin, 8rem);
color: var(--seam-gold);
font-weight: bold;
text-align: center;
}
.result-label {
text-align: center;
color: var(--vein-bronze);
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: 0.1em;
margin-top: 1vmin;
}
.verdict {
margin-top: 1vmin;
padding: 1vmin;
text-align: center;
font-size: 1.5rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.verdict.pass {
color: var(--seam-gold);
border: 1px solid var(--seam-gold);
}
.verdict.fail {
color: #ff4444;
border: 1px solid #ff4444;
}
.formula {
background: var(--horizon-grey);
padding: 2vmin;
border-left: 3px solid var(--seam-gold);
margin: 2vmin 0;
font-family: monospace;
font-size: 1.1rem;
}
.citation {
color: var(--vein-bronze);
font-size: 0.9rem;
margin-top: 1vmin;
}
.citation a {
color: var(--seam-gold);
text-decoration: none;
}
.citation a:hover {
text-decoration: underline;
}
.image-container {
margin: 2vmin 0;
border: 1px solid var(--vein-bronze);
}
.image-container img {
width: 100%;
height: auto;
display: block;
}
.caption {
padding: 1vmin;
background: var(--horizon-grey);
color: var(--vein-bronze);
font-size: 0.8rem;
text-align: center;
}
.data-table {
width: 100%;
margin: 2vmin 0;
border-collapse: collapse;
}
.data-table th, .data-table td {
border: 1px solid var(--vein-bronze);
padding: 1vmin;
text-align: left;
}
.data-table th {
background: var(--horizon-grey);
color: var(--seam-gold);
}
.work-example {
background: rgba(205, 127, 50, 0.1);
padding: 2vmin;
border-left: 3px solid var(--seam-gold);
margin: 2vmin 0;
}
.nav-back {
display: inline-block;
margin-bottom: 2vmin;
color: var(--vein-bronze);
text-decoration: none;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}
.nav-back:hover {
color: var(--seam-gold);
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<a href="/" class="nav-back">← Back to Colony Hub</a>
<header>
<h1>MATERIAL SHEAR CALCULATOR</h1>
<p class="subtitle">WEISER MUNICIPAL SPECS × ALUMINIUM SHEAR MODULUS × DOMES</p>
</header>
<div class="grid">
<section class="left-col">
<div class="panel">
<h2>ENGINEERING CONTEXT</h2>
<p style="margin-bottom: 2vmin;">
When the shear modulus holds, the whole structure breathes easy. Every beam we place in the dome must pass this calculation before the crane lifts.
</p>
<div class="formula">
G = τ / γ<br><br>
Where:<br>
• G = Shear Modulus (Pa)<br>
• τ = Shear Stress (Pa)<br>
γ = Shear Strain (dimensionless)
</div>
<p class="citation">
Source: <a href="https://4ort.xyz/entity/shear-modulus" target="_blank">ISO 80000-4:2019 Quantities and Units — Part 4: Mechanics</a> | Wikidata Q461466
</p>
<div class="image-container">
<img src="https://images-assets.nasa.gov/image/SSC-20090409-S00509/SSC-20090409-S00509~medium.jpg" alt="NASA A-3 steel work completion showing structural integrity verification">
<div class="caption">NASA A-3 Steel Work Complete — Public Domain via NASA Image Archive</div>
</div>
<p style="font-size: 0.9rem; color: var(--vein-bronze);">
This is the moment the weld locks. The caliper reads true. The prairie horizon becomes the dome's spine.
</p>
</div>
<div class="panel">
<h2>MATERIAL LIBRARY</h2>
<table class="data-table">
<thead>
<tr>
<th>Material</th>
<th>Shear Modulus (GPa)</th>
<th>Density (kg/m³)</th>
<th>Use Case</th>
</tr>
</thead>
<tbody>
<tr>
<td>Structural Steel</td>
<td>79.3</td>
<td>7850</td>
<td>Primary Framework</td>
</tr>
<tr>
<td>Aluminium Alloy 6061</td>
<td>26.0</td>
<td>2700</td>
<td>Lightweight Panels</td>
</tr>
<tr>
<td>Titanium Grade 5</td>
<td>41.4</td>
<td>4430</td>
<td>Critical Joints</td>
</tr>
<tr>
<td>Carbon Fiber Composite</td>
<td>30-50</td>
<td>1600</td>
<td>High-Stress Membrane</td>
</tr>
</tbody>
</table>
<p class="citation">
Material constants sourced from: <a href="https://4ort.xyz/entity/aluminium" target="_blank">Wikidata Q663 (Aluminium)</a>, <a href="https://4ort.xyz/entity/steel" target="_blank">Wikidata Q11427 (Steel)</a>
</p>
</div>
</section>
<section class="right-col">
<div class="panel">
<h2>SHEAR VERIFICATION ENGINE</h2>
<label for="material">Select Material</label>
<select id="material">
<option value="79.3">Structural Steel (79.3 GPa)</option>
<option value="26.0">Aluminium 6061 (26.0 GPa)</option>
<option value="41.4">Titanium Grade 5 (41.4 GPa)</option>
<option value="40.0">Carbon Fiber Composite (~40 GPa)</option>
</select>
<label for="stress">Applied Shear Stress (MPa)</label>
<input type="number" id="stress" placeholder="Enter stress value..." step="0.1">
<label for="strain">Measured Shear Strain (×10⁻⁶)</label>
<input type="number" id="strain" placeholder="Enter microstrain..." step="0.01">
<button onclick="calculate()">CALCULATE INTEGRITY</button>
<div id="results" class="result" style="display:none;">
<div class="result-value" id="calc-result"></div>
<div class="result-label">Calculated Shear Modulus (GPa)</div>
<div class="verdict" id="verdict"></div>
</div>
</div>
<div class="panel">
<h2>WORKED EXAMPLE</h2>
<div class="work-example">
<p><strong>Weiser Dome Beam Test:</strong></p>
<ul style="margin-left: 2vmin; margin-top: 1vmin;">
<li>Material: Structural Steel (Gₑₓₚₑcₜₑd = 79.3 GPa)</li>
<li>Applied Shear Stress: 450 MPa</li>
<li>Measured Strain: 5,675 με (microstrain)</li>
<li>Calculation: G = 450 / (5,675 × 10⁻⁶) = 79.29 GPa</li>
<li><span style="color: var(--seam-gold);">✓ PASS</span> — Within 0.01% tolerance</li>
</ul>
</div>
<p style="font-size: 0.9rem; color: var(--vein-bronze);">
Every number in this ledger is traceable. Every weld is accountable.
</p>
</div>
</section>
</div>
</div>
<script>
const MATERIAL_THRESHOLDS = {
"79.3": { min: 75, max: 85, name: "Structural Steel" },
"26.0": { min: 24, max: 30, name: "Aluminium 6061" },
"41.4": { min: 38, max: 46, name: "Titanium Grade 5" },
"40.0": { min: 35, max: 50, name: "Carbon Fiber" }
};
function calculate() {
const materialBase = document.getElementById('material').value;
const stressInput = parseFloat(document.getElementById('stress').value);
const strainInput = parseFloat(document.getElementById('strain').value);
if (!stressInput || !strainInput) {
alert("ENTER BOTH STRESS AND STRAIN VALUES");
return;
}
// Convert: stress in MPa, strain in microstrain
const stress_Pa = stressInput * 1e6;
const strain_dimensionless = strainInput * 1e-6;
// Calculate G in Pa, then convert to GPa
const G_Pa = stress_Pa / strain_dimensionless;
const G_GPa = G_Pa / 1e9;
const resultsDiv = document.getElementById('results');
const resultValue = document.getElementById('calc-result');
const verdictDiv = document.getElementById('verdict');
resultsDiv.style.display = 'block';
resultValue.textContent = G_GPa.toFixed(2);
const threshold = MATERIAL_THRESHOLDS[materialBase];
const withinTolerance = G_GPa >= threshold.min && G_GPa <= threshold.max;
verdictDiv.className = 'verdict ' + (withinTolerance ? 'pass' : 'fail');
verdictDiv.innerHTML = withinTolerance
? `${threshold.name} INTEGRITY CONFIRMED (${((G_GPa/threshold.min)*100).toFixed(1)}% of minimum)`
: `${threshold.name} FAILED (expected ${threshold.min}-${threshold.max} GPa)`;
}
// Load JSON twin
fetch('/material-shear-calculator.json')
.then(r => r.json())
.then(data => console.log('JSON twin loaded:', data))
.catch(e => console.warn('JSON twin offline'));
</script>
</body>
</html>