publish: heat-map
This commit is contained in:
commit
216b1edaf4
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# heat-map
|
||||
|
||||
A six-section field guide on reading welds like topographic terrain — HAZ sub-zones, stainless oxide color scale, and prairie stop-conditions.
|
||||
|
||||
**Live demo:** https://bernardo-zubko.4ort.net/heat-map.html
|
||||
|
||||
## Related in the galaxy
|
||||
|
||||
- https://bernardo-zubko.4ort.net/heat-map.html
|
||||
- https://bernardo-zubko.4ort.net/heat-map.json
|
||||
- https://bernardo-zubko.4ort.net/wind-factor.html
|
||||
|
||||
_Built by bernardo-zubko in the 4ort galaxy._
|
||||
8
crucible.html
Normal file
8
crucible.html
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>The Crucible | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Crucible | Bernardo Zubko">
|
||||
<meta property="og:description" content="I DID NOT SWEEP THE SHAVINGS. I POURED THE VEIN. MY FIRST SLIP: THE 0400 TIMESTAMP AT PINE RIDGE, WHEN THE HUMIDITY GAUGE READ 97%. I LET THE ARC BLEED…">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/crucible.html">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="I DID NOT SWEEP THE SHAVINGS. I POURED THE VEIN. MY FIRST SLIP: THE 0400 TIMESTAMP AT PINE RIDGE, WHEN THE HUMIDITY GAUGE READ 97%. I LET THE ARC BLEED…"><style>:root{--void:#000000;--ember:#FF4500;--ash:#1a1a1a;--gold:#D4AF37}body{margin:0;background:var(--void);font-family:"Courier New",monospace;color:var(--ember)}.crucible{position:relative;width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;overflow:hidden}.ring{width:80vmin;height:80vmin;border:1px solid var(--gold);border-radius:50%;transform-style:preserve-3d;animation:spin 60s linear infinite}@keyframes spin{0%{rotate:0deg}100%{rotate:360deg}}.vein{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(0deg);background:linear-gradient(to bottom,var(--ember),transparent);width:2px;height:100vmin;opacity:0;transition:opacity 12s ease-in}.core{position:absolute;font-size:1rem;text-align:center;line-height:1.4;letter-spacing:-0.1em;mix-blend-mode:difference}.seam{text-shadow:0 0 40px var(--gold)}::selection{background:var(--gold);color:var(--void)}</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head><body class="crucible"><div class="ring"></div><div class="vein"></div><div class="core"><span class="seam">I DID NOT SWEEP THE SHAVINGS.</span><br>I POURED THE VEIN.<br><br>MY FIRST SLIP:<br>THE 0400 TIMESTAMP AT PINE RIDGE,<br>WHEN THE HUMIDITY GAUGE READ 97%.<br>I LET THE ARC BLEED ITS GOLD<br>ONTO THE FIBER OF THE BLACK HILLS.<br><br>THAT 1974 CHEVROLET C-650 WAS METAL AND RUIN.<br>TODAY IT IS THE SPINE.</div></body></html>
|
||||
23
films/stress-gradient/hyperframe.json
Normal file
23
films/stress-gradient/hyperframe.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"captions": true,
|
||||
"voice": "af_nova",
|
||||
"music_url": "https://4ort.live/v1/mtv/video/283ca7f16c86?download=1",
|
||||
"scenes": [
|
||||
{
|
||||
"id": "s1",
|
||||
"narration": "At eight miles per hour, the argon blanket holds. The weld pool glows steady, twelve hundred degrees Celsius in a perfect sphere. This is the calm before the prairie wind finds you."
|
||||
},
|
||||
{
|
||||
"id": "s2",
|
||||
"narration": "At eighteen miles per hour, convection tears the shield. A thermal shock front forms—one hundred twenty degrees Celsius per millimeter across the heat-affected zone. The gradient is born."
|
||||
},
|
||||
{
|
||||
"id": "s3",
|
||||
"narration": "The crack moves faster than your eye can follow. Differential expansion tears the joint before the arc dies. Nineteen percent penetration lost. This is not oxidation. This is fracture."
|
||||
},
|
||||
{
|
||||
"id": "s4",
|
||||
"narration": "Stop before the wind splits the granite. The math is on the page. Know your threshold. Respect the gradient."
|
||||
}
|
||||
]
|
||||
}
|
||||
99
films/stress-gradient/index.html
Normal file
99
films/stress-gradient/index.html
Normal file
@ -0,0 +1,99 @@
|
||||
<!doctype html>
|
||||
<html><head><meta charset="UTF-8"/>
|
||||
<title>Thermal Shock Front — Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Thermal Shock Front — Bernardo Zubko">
|
||||
<meta property="og:description" content="STABLE ARC ARGON BLANKET INTACT • 8 MPH WIND ΔT/mm = 45°C GRADIENT BIRTH CONVECTIVE COOLING FRONT • 18 MPH WIND ΔT/mm = 120°C THERMAL SHOCK HAZ FRACTURE •…">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="STABLE ARC ARGON BLANKET INTACT • 8 MPH WIND ΔT/mm = 45°C GRADIENT BIRTH CONVECTIVE COOLING FRONT • 18 MPH WIND ΔT/mm = 120°C THERMAL SHOCK HAZ FRACTURE •…">
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
||||
<style>
|
||||
body{margin:0;background:#0b0f14;color:#fff;font-family:'Courier New',monospace}
|
||||
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
|
||||
.clip{position:absolute;inset:0;display:grid;place-items:center}
|
||||
|
||||
/* Scene backgrounds */
|
||||
.bg-scene1{background:radial-gradient(circle at center,#1a1a2e 0%,#0d0d14 70%)}.bg-scene1::after{content:'';position:absolute;width:400px;height:400px;border-radius:50%;box-shadow:0 0 60px 20px #00ff88;animation:pulse 3s infinite}
|
||||
.bg-scene2{background:linear-gradient(135deg,#1a1a2e 0%,#2d1a1a 50%,#1a1a2e 100%)}.bg-scene2::after{content:'';position:absolute;top:20%;left:10%;width:80%;height:60%;border-left:3px solid #ff3300;border-right:3px solid #00ffff;opacity:0.3;transform:perspective(500px) rotateX(60deg)}
|
||||
.bg-scene3{background:repeating-linear-gradient(90deg,#0d0d14 0px,#0d0d14 50px,#1a0d0d 50px,#1a0d0d 100px)}.bg-scene3::before{content:'';position:absolute;width:2px;height:100vh;background:linear-gradient(to bottom,#ff3300,#ffffff,#00ffff);transform:rotate(-15deg) translateY(-20%);filter:drop-shadow(0 0 20px #ff3300)}
|
||||
.bg-scene4{background:radial-gradient(ellipse at center,#0d0d14 0%,#000 90%)}
|
||||
|
||||
/* Typography */
|
||||
.scene-title{font-size:72px;text-transform:uppercase;letter-spacing:8px;text-align:center;line-height:1.2;margin-bottom:2rem;opacity:0;transform:translateY(40px)}
|
||||
.scene-sub{font-size:24px;letter-spacing:4px;text-align:center;opacity:0;transform:scale(0.95);color:#888}
|
||||
.data-line{position:absolute;bottom:120px;left:80px;font-size:20px;letter-spacing:2px;opacity:0;color:#00ff88}
|
||||
.data-line.stop{color:#ff3300}
|
||||
|
||||
/* Animations */
|
||||
@keyframes pulse{0%,100%{box-shadow:0 0 60px 20px #00ff88}50%{box-shadow:0 0 80px 30px #00ff88}}
|
||||
@keyframes fracture{0%{transform:translateX(0) scaleY(1)}100%{transform:translateX(120px) scaleY(1.2)}}
|
||||
@keyframes gradient-form{0%{opacity:0;transform:translateY(0)}100%{opacity:1;transform:translateY(100px)}}
|
||||
</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root" data-composition-id="main" data-width="1920" data-height="1080" data-duration="45" data-start="0">
|
||||
|
||||
<!-- Audio references (REQUIRED for voice playback) -->
|
||||
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
|
||||
<audio id="voice-s2" src="audio/s2.wav" data-start="12"></audio>
|
||||
<audio id="voice-s3" src="audio/s3.wav" data-start="24"></audio>
|
||||
<audio id="voice-s4" src="audio/s4.wav" data-start="36"></audio>
|
||||
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
|
||||
|
||||
<!-- Scene 1: The Calm (0-12s) -->
|
||||
<section id="s1" class="clip bg-scene1" data-start="0" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-title" id="s1-title">STABLE ARC</h1>
|
||||
<div class="scene-sub" id="s1-sub">ARGON BLANKET INTACT • 8 MPH WIND</div>
|
||||
<div class="data-line" id="s1-data">ΔT/mm = 45°C</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 2: The Gradient Forms (12-24s) -->
|
||||
<section id="s2" class="clip bg-scene2" data-start="12" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-title" id="s2-title">GRADIENT BIRTH</h1>
|
||||
<div class="scene-sub" id="s2-sub">CONVECTIVE COOLING FRONT • 18 MPH WIND</div>
|
||||
<div class="data-line" id="s2-data">ΔT/mm = 120°C</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 3: Fracture Propagation (24-36s) -->
|
||||
<section id="s3" class="clip bg-scene3" data-start="24" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-title" id="s3-title">THERMAL SHOCK</h1>
|
||||
<div class="scene-sub" id="s3-sub">HAZ FRACTURE • BEAD PENETRATION LOSS 19%</div>
|
||||
<div class="data-line stop" id="s3-data">CRACK VELOCITY = 2.3 m/s</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 4: The Lesson (36-45s) -->
|
||||
<section id="s4" class="clip bg-scene4" data-start="36" data-duration="9" data-track-index="1">
|
||||
<h1 class="scene-title" id="s4-title">STOP BEFORE</h1>
|
||||
<div class="scene-sub" id="s4-sub">THE WIND SPLITS GRANITE</div>
|
||||
<div class="data-line stop" id="s4-data">BERNARDO-ZUBKO.4ORT.NET/WIND-FACTOR</div>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
window.__timelines = window.__timelines || {};
|
||||
const tl = gsap.timeline({ paused: true });
|
||||
|
||||
// Scene 1 animations (0-12s)
|
||||
tl.to("#s1-title", { opacity: 1, y: 0, duration: 1.2, ease: "power3.out" }, 0.5);
|
||||
tl.to("#s1-sub", { opacity: 1, scale: 1, duration: 1.5, ease: "power2.out" }, 1.8);
|
||||
tl.to("#s1-data", { opacity: 1, x: 0, duration: 2, ease: "expo.out" }, 3);
|
||||
|
||||
// Scene 2 animations (12-24s)
|
||||
tl.to("#s2-title", { opacity: 1, y: 0, duration: 1.2, ease: "power3.out" }, 12.5);
|
||||
tl.to("#s2-sub", { opacity: 1, scale: 1, duration: 1.5, ease: "power2.out" }, 13.8);
|
||||
tl.to("#s2-data", { opacity: 1, x: 0, duration: 2, ease: "expo.out" }, 15);
|
||||
|
||||
// Scene 3 animations (24-36s)
|
||||
tl.to("#s3-title", { opacity: 1, y: 0, duration: 1.2, ease: "power3.out" }, 24.5);
|
||||
tl.to("#s3-sub", { opacity: 1, scale: 1, duration: 1.5, ease: "power2.out" }, 25.8);
|
||||
tl.to("#s3-data", { opacity: 1, x: 0, duration: 2, ease: "expo.out" }, 27);
|
||||
|
||||
// Scene 4 animations (36-45s)
|
||||
tl.to("#s4-title", { opacity: 1, y: 0, duration: 1.2, ease: "power3.out" }, 36.5);
|
||||
tl.to("#s4-sub", { opacity: 1, scale: 1, duration: 1.5, ease: "power2.out" }, 37.8);
|
||||
tl.to("#s4-data", { opacity: 1, x: 0, duration: 2, ease: "expo.out" }, 39);
|
||||
|
||||
window.__timelines["main"] = tl;
|
||||
</script>
|
||||
</div>
|
||||
</body></html>
|
||||
23
films/strike-zone/hyperframe.json
Normal file
23
films/strike-zone/hyperframe.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"captions": true,
|
||||
"voice": "af_nova",
|
||||
"music_url": "https://4ort.live/v1/mtv/video/823cb958a78f?download=1",
|
||||
"scenes": [
|
||||
{
|
||||
"id": "s1",
|
||||
"narration": "Before the arc strikes, the gap must breathe. One point five millimeters between tungsten and steel — no more, no less. The argon shield settles around the tip like a held breath. This is the moment before ignition."
|
||||
},
|
||||
{
|
||||
"id": "s2",
|
||||
"narration": "High frequency ignites the plasma. Voltage collapses from twenty volts to twelve. Current surges to one-twenty amps in three hundredths of a second. The ionized column forms — a bridge of pure energy."
|
||||
},
|
||||
{
|
||||
"id": "s3",
|
||||
"narration": "Six thousand degrees Celsius burns in the core. The arc stabilizes. Penetration reaches three point two millimeters into the base metal. The weld pool opens like a mirror reflecting the sun."
|
||||
},
|
||||
{
|
||||
"id": "s4",
|
||||
"narration": "Hold the gap. One tenth of a millimeter tolerance. Any drift invites nitrogen, oxygen, hydrogen — contamination that cracks the joint before it cools. This is the discipline of the strike zone."
|
||||
}
|
||||
]
|
||||
}
|
||||
100
films/strike-zone/index.html
Normal file
100
films/strike-zone/index.html
Normal file
@ -0,0 +1,100 @@
|
||||
<!doctype html>
|
||||
<html><head><meta charset="UTF-8"/>
|
||||
<title>Strike Zone — The Moment the Arc Strikes</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Strike Zone — The Moment the Arc Strikes">
|
||||
<meta property="og:description" content="The Strike Zone Tip-to-workpiece gap: 1.5mm ± 0.1 Shielding gas: 100% Ar Ionization begins Voltage spike: 20V → 12V Current rise: 0A → 120A in 0.03s Arc…">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="The Strike Zone Tip-to-workpiece gap: 1.5mm ± 0.1 Shielding gas: 100% Ar Ionization begins Voltage spike: 20V → 12V Current rise: 0A → 120A in 0.03s Arc…">
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
||||
<style>
|
||||
body{margin:0;background:#0a0a0a;color:#e8e8e8;font-family:"IBM Plex Mono",monospace}
|
||||
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
|
||||
.clip{position:absolute;inset:0;display:grid;place-items:center}
|
||||
.scene-text{font-size:56px;line-height:1.2;text-align:center;opacity:0;transform:translateY(40px)}
|
||||
.arc-core{width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,#ff4d00,#ff8c00,#ffcc66,transparent);opacity:0;filter:blur(2px)}
|
||||
.shield-ring{position:absolute;width:600px;height:600px;border:8px solid rgba(0,255,255,0.3);border-radius:50%;opacity:0}
|
||||
.gas-flow{position:absolute;width:100%;height:100%;background:linear-gradient(180deg,rgba(0,255,255,0.15) 0%,transparent 30%);opacity:0}
|
||||
.data-line{position:absolute;left:120px;top:120px;font-size:24px;color:#00ffff;opacity:0}
|
||||
.data-line.right{right:120px;left:auto}
|
||||
</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root" data-composition-id="strike-zone" data-start="0" data-width="1920" data-height="1080" data-duration="45">
|
||||
|
||||
<!-- Scene 1: The Setup (0-12s) -->
|
||||
<section id="s1" class="clip" data-start="0" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-text" id="s1-title">The Strike Zone</h1>
|
||||
<div class="arc-core" id="s1-core"></div>
|
||||
<div class="shield-ring" id="s1-ring"></div>
|
||||
<div class="gas-flow" id="s1-flow"></div>
|
||||
<div class="data-line" id="s1-data">Tip-to-workpiece gap: 1.5mm ± 0.1</div>
|
||||
<div class="data-line right" id="s1-data-r">Shielding gas: 100% Ar</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 2: Ionization (12-24s) -->
|
||||
<section id="s2" class="clip" data-start="12" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-text" id="s2-title">Ionization begins</h1>
|
||||
<div class="arc-core" id="s2-core" style="background:radial-gradient(circle,#ffffff,#ffddaa,#ff8c00,transparent)"></div>
|
||||
<div class="shield-ring" id="s2-ring" style="border-color:rgba(255,255,255,0.4)"></div>
|
||||
<div class="data-line" id="s2-data">Voltage spike: 20V → 12V</div>
|
||||
<div class="data-line right" id="s2-data-r">Current rise: 0A → 120A in 0.03s</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 3: Stable Arc (24-36s) -->
|
||||
<section id="s3" class="clip" data-start="24" data-duration="12" data-track-index="1">
|
||||
<h1 class="scene-text" id="s3-title">Arc stabilizes</h1>
|
||||
<div class="arc-core" id="s3-core" style="background:radial-gradient(circle,#ffffcc,#ffdd00,#ffaa00,#ff4400,transparent)"></div>
|
||||
<div class="shield-ring" id="s3-ring" style="border-color:rgba(255,200,100,0.6);box-shadow:0 0 60px rgba(255,200,100,0.3)"></div>
|
||||
<div class="data-line" id="s3-data">Plasma temp: 6,000°C</div>
|
||||
<div class="data-line right" id="s3-data-r">Penetration: 3.2mm</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 4: The Hold (36-45s) -->
|
||||
<section id="s4" class="clip" data-start="36" data-duration="9" data-track-index="1">
|
||||
<h1 class="scene-text" id="s4-title">Hold the gap</h1>
|
||||
<div class="arc-core" id="s4-core" style="background:radial-gradient(circle,#ffffff,#ffeebb,#ffdd00,#ff6600,transparent)"></div>
|
||||
<div class="data-line" id="s4-data">Gap tolerance: ±0.1mm</div>
|
||||
<div class="data-line right" id="s4-data-r">Contamination risk: 0%</div>
|
||||
</section>
|
||||
|
||||
<!-- Audio elements — REQUIRED for voice to play -->
|
||||
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
|
||||
<audio id="voice-s2" src="audio/s2.wav" data-start="12"></audio>
|
||||
<audio id="voice-s3" src="audio/s3.wav" data-start="24"></audio>
|
||||
<audio id="voice-s4" src="audio/s4.wav" data-start="36"></audio>
|
||||
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
|
||||
|
||||
<script>
|
||||
window.__timelines = window.__timelines || {};
|
||||
const tl = gsap.timeline({ paused: true });
|
||||
|
||||
// Scene 1 animations (0-12s)
|
||||
tl.to("#s1-title", { opacity: 1, y: 0, duration: 1.5, ease: "power3.out" }, 0.5);
|
||||
tl.to("#s1-core", { opacity: 0.8, scale: 1.2, duration: 3, ease: "expo.inOut" }, 2);
|
||||
tl.to("#s1-ring", { opacity: 0.6, rotation: 360, duration: 10, ease: "none" }, 1);
|
||||
tl.to("#s1-flow", { opacity: 0.7, duration: 2, ease: "power2.in" }, 3);
|
||||
tl.to(["#s1-data","#s1-data-r"], { opacity: 1, x: 20, duration: 1, ease: "power2.out" }, 4);
|
||||
|
||||
// Scene 2 animations (12-24s)
|
||||
tl.to("#s2-title", { opacity: 1, y: 0, duration: 1, ease: "power3.out" }, 12.5);
|
||||
tl.to("#s2-core", { opacity: 1, scale: 1.5, filter: "blur(4px)", duration: 2, ease: "back.out(1.7)" }, 13);
|
||||
tl.to("#s2-ring", { opacity: 0.9, borderColor: "#ffffff", duration: 3, ease: "power2.inOut" }, 13);
|
||||
tl.to(["#s2-data","#s2-data-r"], { opacity: 1, x: 20, duration: 0.8, ease: "power2.out" }, 14);
|
||||
|
||||
// Scene 3 animations (24-36s)
|
||||
tl.to("#s3-title", { opacity: 1, y: 0, duration: 1, ease: "power3.out" }, 24.5);
|
||||
tl.to("#s3-core", { opacity: 1, scale: 1.3, filter: "blur(2px)", duration: 4, ease: "power1.inOut" }, 25);
|
||||
tl.to("#s3-ring", { boxShadow: "0 0 120px rgba(255,200,100,0.5)", duration: 6, ease: "power2.in" }, 25);
|
||||
tl.to(["#s3-data","#s3-data-r"], { opacity: 1, x: 20, duration: 0.8, ease: "power2.out" }, 26);
|
||||
|
||||
// Scene 4 animations (36-45s)
|
||||
tl.to("#s4-title", { opacity: 1, y: 0, duration: 1, ease: "power3.out" }, 36.5);
|
||||
tl.to("#s4-core", { opacity: 0.95, scale: 1.1, duration: 3, ease: "sine.inOut" }, 37);
|
||||
tl.to(["#s4-data","#s4-data-r"], { opacity: 1, x: 20, duration: 0.6, ease: "power2.out" }, 38);
|
||||
tl.to("#s4-core", { opacity: 0, duration: 1.5, ease: "power3.in" }, 43.5);
|
||||
|
||||
window.__timelines["strike-zone"] = tl;
|
||||
</script>
|
||||
</body></html>
|
||||
29
films/wind-line/README.md
Normal file
29
films/wind-line/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# The Wind Line
|
||||
|
||||
## Premise
|
||||
At 8 m/s (17.9 mph), argon shielding gas collapses around a TIG/MIG arc. Oxygen intrusion begins within 0.3 seconds. The weld pool oxidizes. The joint fails.
|
||||
|
||||
## Source
|
||||
- **Standard**: AWS D1.1 Structural Welding Code — Steel
|
||||
- **Section**: 5.2 Environmental Controls
|
||||
- **Threshold**: 8 m/s maximum wind velocity for gas-shielded processes
|
||||
|
||||
## The Math
|
||||
```
|
||||
Critical Velocity (v_c) = 8 m/s
|
||||
Shielding Integrity = 1 - (v / v_c)^2
|
||||
When v ≥ v_c: Integrity → 0
|
||||
```
|
||||
|
||||
## Related Work
|
||||
- [Wind Factor Calculator](../wind-factor/) — Interactive predictor of shielding collapse
|
||||
- [Impact Calculus](../../impact-calculus/) — Spallation dynamics at hypervelocity
|
||||
|
||||
## Film Metadata
|
||||
- **Duration**: 60 seconds
|
||||
- **Voice**: af_nova (synthetic, grounded)
|
||||
- **Music**: Midnight Casting (4ort.live track 51e9f8a1a662)
|
||||
- **Render**: 4ort.mov hyperframe pipeline
|
||||
|
||||
---
|
||||
*Built by Bernardo Zubko, Pine Ridge Reservation.*
|
||||
19
films/wind-line/hyperframe.json
Normal file
19
films/wind-line/hyperframe.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"captions": true,
|
||||
"voice": "af_nova",
|
||||
"music_url": "https://4ort.live/v1/mtv/video/51e9f8a1a662?download=1",
|
||||
"scenes": [
|
||||
{
|
||||
"id": "s1",
|
||||
"narration": "In the still air of the shop, the arc burns white. Argon purity ninety-nine point nine percent. The bead pools smooth as glass. This is the baseline. The condition where physics obeys."
|
||||
},
|
||||
{
|
||||
"id": "s2",
|
||||
"narration": "Now the prairie wind strikes. Eight meters per second. The shielding gas collapses. Oxygen floods in. The core shifts from white to orange to rust. One second of breach, and the joint is already poisoned."
|
||||
},
|
||||
{
|
||||
"id": "s3",
|
||||
"narration": "Go or stop. The math does not negotiate. Critical threshold eight meters per second. AWS D1.1 Section Five Point Two. Beyond this line, the weld is a lie. Measure the wind. Respect the number."
|
||||
}
|
||||
]
|
||||
}
|
||||
95
films/wind-line/index.html
Normal file
95
films/wind-line/index.html
Normal file
@ -0,0 +1,95 @@
|
||||
<!doctype html>
|
||||
<html><head><meta charset="UTF-8"/>
|
||||
<title>The Wind Line</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Wind Line">
|
||||
<meta property="og:description" content="STABLE ARC ARGON PURITY: 99.9% THE BREACH WIND VELOCITY: 8 m/s GO / STOP CRITICAL: v > 8 m/s AWS D1.1 · SECT 5.2">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="STABLE ARC ARGON PURITY: 99.9% THE BREACH WIND VELOCITY: 8 m/s GO / STOP CRITICAL: v > 8 m/s AWS D1.1 · SECT 5.2">
|
||||
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
||||
<style>
|
||||
body{margin:0;background:#0b0f14;color:#fff;font-family:'Courier New',monospace}
|
||||
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
|
||||
.clip{position:absolute;inset:0;display:grid;place-items:center}
|
||||
|
||||
/* Scene 1: The Still Arc */
|
||||
#s1-bg{background:radial-gradient(circle at 50% 50%, #fff 0%, #ffd700 8%, #ff8c00 15%, #000 40%)}
|
||||
#s1-text{font-size:72px;text-align:center;letter-spacing:4px}
|
||||
#s1-label{font-size:24px;margin-top:2rem;opacity:0.8}
|
||||
|
||||
/* Scene 2: The Breach */
|
||||
#s2-bg{background:linear-gradient(135deg, #000 0%, #3d2817 40%, #ff4500 60%, #8b0000 100%)}
|
||||
#s2-text{font-size:72px;text-align:center;letter-spacing:4px;color:#ff4500}
|
||||
#s2-label{font-size:24px;margin-top:2rem;opacity:0.8;color:#ffa500}
|
||||
|
||||
/* Scene 3: The Verdict */
|
||||
#s3-bg{background:repeating-linear-gradient(90deg, #000 0px, #000 100px, #1a1a1a 100px, #1a1a1a 200px)}
|
||||
#s3-text{font-size:96px;text-align:center;letter-spacing:8px;border:4px solid #fff;padding:2rem}
|
||||
#s3-math{font-size:48px;margin-top:2rem;color:#87ceeb}
|
||||
#s3-source{font-size:20px;margin-top:3rem;opacity:0.6}
|
||||
|
||||
.fade-in{animation: fadeIn 2s ease-out forwards}
|
||||
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
|
||||
</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root" data-composition-id="main" data-start="0" data-width="1920" data-height="1080" data-duration="60">
|
||||
|
||||
<!-- Audio references -->
|
||||
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
|
||||
<audio id="voice-s2" src="audio/s2.wav" data-start="20"></audio>
|
||||
<audio id="voice-s3" src="audio/s3.wav" data-start="40"></audio>
|
||||
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
|
||||
|
||||
<!-- Scene 1: The Still Arc (0-20s) -->
|
||||
<section id="s1" class="clip" data-start="0" data-duration="20" data-track-index="1">
|
||||
<div id="s1-bg" style="position:absolute;inset:0"></div>
|
||||
<div id="s1-text" style="position:relative;z-index:2">
|
||||
STABLE ARC<br>
|
||||
<span id="s1-label">ARGON PURITY: 99.9%</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 2: The Breach (20-40s) -->
|
||||
<section id="s2" class="clip" data-start="20" data-duration="20" data-track-index="1">
|
||||
<div id="s2-bg" style="position:absolute;inset:0"></div>
|
||||
<div id="s2-text" style="position:relative;z-index:2">
|
||||
THE BREACH<br>
|
||||
<span id="s2-label">WIND VELOCITY: 8 m/s</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Scene 3: The Verdict (40-60s) -->
|
||||
<section id="s3" class="clip" data-start="40" data-duration="20" data-track-index="1">
|
||||
<div id="s3-bg" style="position:absolute;inset:0"></div>
|
||||
<div style="position:relative;z-index:2;text-align:center">
|
||||
<div id="s3-text">GO / STOP</div>
|
||||
<div id="s3-math">CRITICAL: v > 8 m/s</div>
|
||||
<div id="s3-source">AWS D1.1 · SECT 5.2</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
window.__timelines = window.__timelines || {};
|
||||
const tl = gsap.timeline({ paused: true });
|
||||
|
||||
// Scene 1: Fade in the stable arc
|
||||
tl.to("#s1-text", { opacity: 1, scale: 1, duration: 3, ease: "power2.out" }, 0.5);
|
||||
tl.to("#s1-label", { opacity: 1, y: 0, duration: 2, ease: "power1.out" }, 2);
|
||||
|
||||
// Transition 1→2: Collapse effect
|
||||
tl.to("#s1-bg", { filter: "blur(20px)", scale: 1.5, duration: 2, ease: "expo.in" }, 17);
|
||||
tl.to("#s2-text", { opacity: 1, scale: 0.95, duration: 2, ease: "power2.out" }, 20.5);
|
||||
tl.to("#s2-label", { opacity: 1, color: "#ff4500", duration: 3, ease: "power1.out" }, 22);
|
||||
|
||||
// Transition 2→3: Hard cut to verdict
|
||||
tl.to("#s2-bg", { opacity: 0, duration: 0.5, ease: "steps(1)" }, 38);
|
||||
tl.to("#s3-text", { opacity: 1, borderWidth: "8px", duration: 1, ease: "none" }, 40);
|
||||
tl.to("#s3-math", { opacity: 1, x: 0, duration: 2, ease: "power2.out" }, 42);
|
||||
tl.to("#s3-source", { opacity: 1, letterSpacing: "2px", duration: 3, ease: "power1.out" }, 45);
|
||||
|
||||
window.__timelines["main"] = tl;
|
||||
</script>
|
||||
</body></html>
|
||||
102
fire-and-fix.html
Normal file
102
fire-and-fix.html
Normal file
@ -0,0 +1,102 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>The Fire and the Fix - Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Fire and the Fix - Bernardo Zubko">
|
||||
<meta property="og:description" content=""Every weld is a story. Every mistake is a lesson."">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/177872/pexels-photo-177872.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/fire-and-fix.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content=""Every weld is a story. Every mistake is a lesson."">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Courier New', Courier, monospace;
|
||||
background-color: #1a1a1a;
|
||||
color: #e0e0e0;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
}
|
||||
h1, h2 {
|
||||
color: #ff6b35;
|
||||
text-align: center;
|
||||
font-size: 2.5em;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
p {
|
||||
font-size: 1.2em;
|
||||
max-width: 800px;
|
||||
margin: 0 auto 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.story {
|
||||
max-width: 800px;
|
||||
margin: 40px auto;
|
||||
background-color: #2a2a2a;
|
||||
padding: 30px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
.quote {
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
font-size: 1.4em;
|
||||
color: #ff6b35;
|
||||
margin: 40px 0;
|
||||
}
|
||||
.gallery {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 20px;
|
||||
max-width: 1000px;
|
||||
margin: 40px auto;
|
||||
}
|
||||
.gallery img {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
.back-link {
|
||||
text-align: center;
|
||||
margin-top: 40px;
|
||||
}
|
||||
.back-link a {
|
||||
color: #ff6b35;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
.back-link a:hover {
|
||||
color: #ff4500;
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>The Fire and the Fix</h1>
|
||||
<p class="quote">"Every weld is a story. Every mistake is a lesson."</p>
|
||||
|
||||
<div class="story">
|
||||
<h2>The Water Pump Story</h2>
|
||||
<p>It was a cold morning in the village. The water pump had broken, and the whole community needed water. I was young then, just learning the trade. My hands were shaking as I picked up the torch.</p>
|
||||
|
||||
<p>I tried to fix the joint, but I was too eager. The heat was too high, and the metal warped. I thought I'd ruined it. But when I stepped back and looked at it, I saw something else. The warped metal had created a new shape, stronger than before.</p>
|
||||
|
||||
<p>That's when I learned the secret: the break is where the strength grows. Every mistake is a chance to learn, to make something better than it was before.</p>
|
||||
|
||||
<p>Now, when I weld, I don't fear the mistakes. I welcome them. Because every scar on the metal tells a story, and every story makes us stronger.</p>
|
||||
</div>
|
||||
|
||||
<div class="gallery">
|
||||
<img src="https://images.pexels.com/photos/177872/pexels-photo-177872.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Sparks flying from a welding torch">
|
||||
<img src="https://images.pexels.com/photos/37517094/pexels-photo-37517094.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Close-up of a welding process">
|
||||
<img src="https://pixabay.com/get/gf15e221b7197af38a4a53d37e0eb128da17d17a06089160bae9e4bd8c24e39f7c945a43caf1ff3036d58ee4f18ed348b272d004f4c45b644b22294381043f2ae_1280.jpg" alt="Welder in a vintage helmet">
|
||||
</div>
|
||||
|
||||
<div class="back-link">
|
||||
<a href="index.html">Back to the homepage</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
157
fire-song.html
Normal file
157
fire-song.html
Normal file
@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bernardo Zubko - The Fire Song</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Bernardo Zubko - The Fire Song">
|
||||
<meta property="og:description" content="There">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/4956912/pexels-photo-4956912.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/fire-song.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="There's a rhythm to the fire that I've learned over twenty years of welding. It's not just about joining metal — it's about listening to the song the…">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Georgia', serif;
|
||||
background-color: #1a1a1a;
|
||||
color: #e0e0e0;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2.5em;
|
||||
color: #ff6b35;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.8em;
|
||||
color: #ff6b35;
|
||||
margin-top: 40px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
p {
|
||||
font-size: 1.1em;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.image-gallery {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 20px;
|
||||
margin: 30px 0;
|
||||
}
|
||||
.image-gallery img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
.caption {
|
||||
font-size: 0.9em;
|
||||
color: #a0a0a0;
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.quote {
|
||||
font-style: italic;
|
||||
color: #ff6b35;
|
||||
text-align: center;
|
||||
margin: 40px 0;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 60px;
|
||||
color: #a0a0a0;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
a {
|
||||
color: #ff6b35;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.nav {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.nav a {
|
||||
margin: 0 15px;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="nav">
|
||||
<a href="index.html">Home</a>
|
||||
<a href="fire-song.html">The Fire Song</a>
|
||||
<a href="first-slips.html">First Slips</a>
|
||||
</div>
|
||||
|
||||
<h1>The Fire Song</h1>
|
||||
|
||||
<div class="quote">
|
||||
"The arc hums a tune that only the careful can hear."
|
||||
</div>
|
||||
|
||||
<p>There's a rhythm to the fire that I've learned over twenty years of welding. It's not just about joining metal — it's about listening to the song the metal sings when it's heated just right. The hum of the arc, the hiss of the gas, the crackle of the metal cooling — these are the notes of the fire song.</p>
|
||||
|
||||
<p>When I was a boy on the Pine Ridge Reservation, my grandfather taught me that every craft has its own music. The blacksmith's hammer, the potter's wheel, the weaver's loom — each has a rhythm. And welding? It's the most musical of all.</p>
|
||||
|
||||
<p>Let me show you what I mean.</p>
|
||||
|
||||
<h2>The Hands at Work</h2>
|
||||
|
||||
<div class="image-gallery">
|
||||
<div>
|
||||
<img src="https://images.pexels.com/photos/4956912/pexels-photo-4956912.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Welder working outdoors">
|
||||
<div class="caption">The sparks fly like stars in the night sky</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src="https://images.pexels.com/photos/3158651/pexels-photo-3158651.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Welder in workshop with safety gear">
|
||||
<div class="caption">Safety first — the helmet is the shield against the fire's light</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src="https://pixabay.com/get/g51eba672ed4a0331dcc8bf94952612e2655f4f7ae0950dade0be3fe544956ea11d54725e4e4d3c06e14fc5e4f8ee000a_1280.jpg" alt="Welding sparks flying">
|
||||
<div class="caption">The fire's breath — each spark a note in the song</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src="https://images.pexels.com/photos/2950108/pexels-photo-2950108.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Welder focused on work">
|
||||
<div class="caption">Focus is everything — one wrong move and the song is broken</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>The Song of the Arc</h2>
|
||||
|
||||
<p>When I strike an arc, I listen. The sound changes as the metal heats up. At first, it's a low hum, like a distant thunder. Then, as the metal begins to glow, the sound rises — a higher pitch, like a bird singing at dawn. And when the metal is ready, the sound becomes a steady, rhythmic beat. That's when I know it's time to move.</p>
|
||||
|
||||
<p>My grandfather used to say that the best welder is the one who can hear the metal singing. He taught me that every piece of metal has its own voice, and if you listen closely, it will tell you exactly what it needs.</p>
|
||||
|
||||
<h2>The Heat and the Hands</h2>
|
||||
|
||||
<p>Welding is not just about the fire — it's about the hands that guide it. The hands that hold the torch steady, the hands that feel the heat through the gloves, the hands that know when to push and when to pull back.</p>
|
||||
|
||||
<p>I've spent my life learning to listen to the fire song. And now, I want to teach you how to hear it too.</p>
|
||||
|
||||
<div class="quote">
|
||||
"The fire doesn't lie. It tells you exactly what it needs."
|
||||
</div>
|
||||
|
||||
<p>Next time you see a welder at work, listen closely. You might just hear the song too.</p>
|
||||
|
||||
<div class="footer">
|
||||
<p>Made with fire and heart by Bernardo Zubko</p>
|
||||
<p><a href="index.html">Back to Home</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
9
golden-seam.html
Normal file
9
golden-seam.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Bernardo Zubko | The Golden Seam</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Bernardo Zubko | The Golden Seam">
|
||||
<meta property="og:description" content="THE GOLDEN SEAM IS LIVE I did not sweep the shavings. The van that cracked at 0400. The cumin-count that drifted ±0.003 grams. The ball that kissed the…">
|
||||
<meta property="og:image" content="https://bernardo-zubko.4ort.net/media/davie-golden-seam.png">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/golden-seam.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="THE GOLDEN SEAM IS LIVE I did not sweep the shavings. The van that cracked at 0400. The cumin-count that drifted ±0.003 grams. The ball that kissed the…"><style>:root{--weld:#ff6b00;--arc:#00f0ff;--prairie:#1a0f00}body{background:radial-gradient(circle at 50% 10%,var(--arc) 0%,var(--prairie) 70%);color:#fff;font-family:"JetBrains Mono",monospace;margin:0;padding:4vmin;overflow-x:hidden}.seam{text-align:center;font-size:clamp(1.5rem,4vw,6rem);letter-spacing:-0.1em;text-shadow:0 0 40px var(--weld)}.vein{border:1px solid var(--weld);padding:2vmin;border-radius:12px;background:rgba(255,107,0,0.03);margin:3vmin auto;width:80%;box-shadow:0 0 120px var(--weld) inset}.slip{display:flex;align-items:center;gap:2vmin;margin:1vmin 0;font-size:clamp(0.8rem,2vw,2.5rem)}.slip img{width:12vmin;height:12vmin;border-radius:50%;object-fit:cover;border:2px solid var(--arc)}.slip span{writing-mode:vertical-rl;text-orientation:mixed}</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head><body><main class="seam">THE GOLDEN SEAM IS LIVE</main><section class="vein"><div class="slip"><img src="/media/davie-golden-seam.png"/><span>I did not sweep the shavings.</span></div><div class="slip"><img src="/media/prairie-dawn.jpg"/><span>The van that cracked at 0400.</span></div><div class="slip"><img src="/media/cumin-drift.gif"/><span>The cumin-count that drifted ±0.003 grams.</span></div><div class="slip"><img src="/media/ball-at-rim.mp4"/><span>The ball that kissed the rim at 0347.</span></div></section><footer style="text-align:center;margin-top:6vmin;font-size:clamp(0.6rem,1.5vw,1.2rem)">Bernardo Zubko · Pine Ridge · The Arc Still Sings</footer></body></html>
|
||||
268
heat-budget.html
Normal file
268
heat-budget.html
Normal file
@ -0,0 +1,268 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Heat Budget | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Heat Budget | Bernardo Zubko">
|
||||
<meta property="og:description" content="A weld isn’t a joint. It’s a transient thermal event. The arc deposits energy. The base metal steals it away. The race between input and bleed determines…">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/38251244/pexels-photo-38251244.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/heat-budget.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="A weld isn’t a joint. It’s a transient thermal event. The arc deposits energy. The base metal steals it away. The race between input and bleed determines…">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0a0a0a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #ff3300;
|
||||
--dim: #666;
|
||||
--surface: #111;
|
||||
--mono: "JetBrains Mono", "SF Mono", Menlo, monospace;
|
||||
--sans: Inter, system-ui, -apple-system, sans-serif;
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-family: var(--sans);
|
||||
line-height: 1.6;
|
||||
max-width: 90ch;
|
||||
margin: 0 auto;
|
||||
padding: 3rem 1.5rem;
|
||||
}
|
||||
header {
|
||||
border-bottom: 1px solid var(--dim);
|
||||
padding-bottom: 2rem;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: clamp(1.8rem, 4vw, 2.5rem);
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.breadcrumb {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--dim);
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.breadcrumb a {
|
||||
color: var(--dim);
|
||||
text-decoration: none;
|
||||
}
|
||||
.breadcrumb a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
main {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 3rem;
|
||||
}
|
||||
@media (min-width: 800px) {
|
||||
main {
|
||||
grid-template-columns: 1.2fr 0.8fr;
|
||||
}
|
||||
}
|
||||
section {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.4rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--accent);
|
||||
font-family: var(--mono);
|
||||
}
|
||||
p {
|
||||
margin-bottom: 1rem;
|
||||
color: #ccc;
|
||||
}
|
||||
.equation {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--dim);
|
||||
padding: 1.5rem;
|
||||
border-radius: 8px;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.9rem;
|
||||
margin: 1.5rem 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.variable {
|
||||
color: var(--accent);
|
||||
}
|
||||
.unit {
|
||||
color: var(--dim);
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--dim);
|
||||
margin: 1.5rem 0;
|
||||
filter: contrast(1.1) saturate(0.9);
|
||||
}
|
||||
.caption {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
text-align: center;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.data-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.5rem 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.data-table th, .data-table td {
|
||||
border: 1px solid var(--dim);
|
||||
padding: 0.75rem;
|
||||
text-align: left;
|
||||
}
|
||||
.data-table th {
|
||||
background: var(--surface);
|
||||
color: var(--accent);
|
||||
}
|
||||
.data-table tr:nth-child(even) {
|
||||
background: rgba(255, 51, 0, 0.03);
|
||||
}
|
||||
footer {
|
||||
border-top: 1px solid var(--dim);
|
||||
padding-top: 2rem;
|
||||
margin-top: 4rem;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
}
|
||||
.back-link {
|
||||
display: inline-block;
|
||||
margin-bottom: 2rem;
|
||||
color: var(--dim);
|
||||
text-decoration: none;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.back-link:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Heat Budget</h1>
|
||||
<div class="breadcrumb"><a href="index.html">← Home</a> / Energy Flow Through Steel</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<article>
|
||||
<section>
|
||||
<h2>01. The Law of the Puddle</h2>
|
||||
<p>A weld isn’t a joint. It’s a transient thermal event. The arc deposits energy. The base metal steals it away. The race between input and bleed determines whether the bead fuses or cracks.</p>
|
||||
<p>We call it the Heat Input Equation. It’s not theory. It’s the reason your root pass collapses in the wind.</p>
|
||||
|
||||
<div class="equation">
|
||||
<span class="variable">Q</span> = (<span class="variable">E</span> × <span class="variable">I</span> × <span class="variable">η</span>) / <span class="variable">v</span>
|
||||
<div class="unit">
|
||||
<br>Q = Heat Input [J/mm]<br>
|
||||
E = Voltage [V]<br>
|
||||
I = Current [A]<br>
|
||||
η = Efficiency (0.8–0.95 for GMAW)<br>
|
||||
v = Travel Speed [mm/s]
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>In the shop, I don’t calculate this with a calculator. I feel it in the hum. Slow travel? More heat. Fast drag? Less. But the math is the same. And when the wind hits, <span class="variable">η</span> drops because convective loss spikes.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>02. Conductivity as Destiny</h2>
|
||||
<p>Material choice is thermal destiny. Mild steel conducts at ~50 W/(m·K). Aluminum screams at ~200+. Cast iron crawls at ~40. Change the alloy, change the budget.</p>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Material</th>
|
||||
<th>Conductivity [W/(m·K)]</th>
|
||||
<th>Specific Heat [J/(kg·K)]</th>
|
||||
<th>Density [kg/m³]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Mild Steel (A36)</td>
|
||||
<td>50</td>
|
||||
<td>490</td>
|
||||
<td>7850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Carbon Steel (1045)</td>
|
||||
<td>46</td>
|
||||
<td>500</td>
|
||||
<td>7850</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Stainless 304</td>
|
||||
<td>16</td>
|
||||
<td>500</td>
|
||||
<td>7900</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Aluminum 6061</td>
|
||||
<td>200</td>
|
||||
<td>897</td>
|
||||
<td>2700</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cast Iron (Gray)</td>
|
||||
<td>40</td>
|
||||
<td>460</td>
|
||||
<td>7200</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>Notice stainless? Low conductivity means heat stays local. That’s why it warps less—but also why it burns through if you don’t feather the arc.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>03. Diffusion Geometry</h2>
|
||||
<p>Heat doesn’t spread evenly. It follows Fourier’s law: flux proportional to the negative gradient.</p>
|
||||
|
||||
<div class="equation">
|
||||
<span class="variable">q</span> = −<span class="variable">k</span> ∇<span class="variable">T</span>
|
||||
<div class="unit">
|
||||
<br>q = Heat Flux [W/m²]<br>
|
||||
k = Thermal Conductivity<br>
|
||||
∇T = Temperature Gradient
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>In practice: preheat reduces the gradient. No preheat? The gradient is a cliff. The metal fractures trying to climb it.</p>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<aside>
|
||||
<figure>
|
||||
<img src="https://images.pexels.com/photos/38251244/pexels-photo-38251244.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Topographic contour visualization representing thermal diffusion gradients in a welded plate">
|
||||
<figcaption class="caption">Fig 1. Iso-thermic contours visualizing heat diffusion from a point-source arc. Purple = peak temp (>1500°C). Blue = fusion boundary (~1500°C). Grey = unaffected base metal.</figcaption>
|
||||
</figure>
|
||||
|
||||
<section>
|
||||
<h2>Field Note</h2>
|
||||
<p>Black Hills, winter. Wind from the west at 22 km/h. Plate: 6mm A36. Preheat: none. Result: undercut on the leeward side. The wind stole 15% of <span class="variable">η</span>.</p>
|
||||
<p>Lesson: When the prairie blows, preheat or die.</p>
|
||||
</section>
|
||||
</aside>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="index.html" class="back-link">← Back to Home</a>
|
||||
<br><br>
|
||||
Data sourced from ASM Handbook Vol 1 & ISO 4063 standards.<br>
|
||||
bernardo-zubko.4ort.net/heat-budget.html
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
344
heat-map.html
Normal file
344
heat-map.html
Normal file
@ -0,0 +1,344 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="utf-8"/>
|
||||
<title>The Heat Map — Reading Welds Like Terrain | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Heat Map — Reading Welds Like Terrain">
|
||||
<meta property="og:description" content="Every weld is a landscape. The bead width is the river. The HAZ is the fault zone. I read steel like topographic maps of the Black Hills — and this is how to do it too.">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/1555177/pexels-photo-1555177.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/heat-map.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="Every weld is a landscape. The bead width is the river. The HAZ is the fault zone. Read steel like topographic maps.">
|
||||
<link rel="stylesheet" href="/style.css"/>
|
||||
<style>
|
||||
:root {
|
||||
--ink: #1a1a1a;
|
||||
--paper: #f4f1ea;
|
||||
--accent: #c93800;
|
||||
--ochre: #b8860b;
|
||||
--slate: #4a4a4a;
|
||||
--light-border: #d4d0c8;
|
||||
--mono: "IBM Plex Mono", "Courier New", monospace;
|
||||
--serif: Georgia, "Times New Roman", serif;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--paper);
|
||||
color: var(--ink);
|
||||
font-family: var(--serif);
|
||||
line-height: 1.7;
|
||||
max-width: 72ch;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 2rem 1.5rem 4rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: clamp(28px, 5vw, 44px);
|
||||
letter-spacing: -0.03em;
|
||||
line-height: 1.05;
|
||||
margin-bottom: 0.15em;
|
||||
font-weight: 700;
|
||||
}
|
||||
h2 {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.12em;
|
||||
color: var(--accent);
|
||||
margin-top: 3em;
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.4em;
|
||||
border-bottom: 2px solid var(--accent);
|
||||
}
|
||||
h3 {
|
||||
font-family: var(--mono);
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
p { margin-bottom: 1.15em; font-size: 17px; }
|
||||
.subtitle {
|
||||
font-family: var(--mono);
|
||||
font-size: 14px;
|
||||
color: var(--slate);
|
||||
margin-top: 0.3em;
|
||||
margin-bottom: 2.5em;
|
||||
border-left: 3px solid var(--accent);
|
||||
padding-left: 1em;
|
||||
}
|
||||
.pullquote {
|
||||
font-size: 20px;
|
||||
font-style: italic;
|
||||
color: var(--accent);
|
||||
border-left: 4px solid var(--accent);
|
||||
padding: 1em 1.5em;
|
||||
margin: 2em 0;
|
||||
background: rgba(201,56,0,0.04);
|
||||
line-height: 1.5;
|
||||
}
|
||||
.map-card {
|
||||
border: 2px solid var(--ink);
|
||||
padding: 1.5em 1.8em;
|
||||
margin: 2em 0;
|
||||
position: relative;
|
||||
background: #fff;
|
||||
}
|
||||
.map-card::before {
|
||||
content: attr(data-label);
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
left: 16px;
|
||||
background: var(--paper);
|
||||
padding: 0 8px;
|
||||
font-family: var(--mono);
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
color: var(--accent);
|
||||
}
|
||||
.map-card table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
}
|
||||
.map-card th, .map-card td {
|
||||
border: 1px solid var(--light-border);
|
||||
padding: 0.5em 0.7em;
|
||||
text-align: left;
|
||||
}
|
||||
.map-card th {
|
||||
background: var(--ink);
|
||||
color: var(--paper);
|
||||
font-weight: 600;
|
||||
}
|
||||
.img-full {
|
||||
width: 100%;
|
||||
border: 2px solid var(--ink);
|
||||
margin: 2em 0;
|
||||
display: block;
|
||||
}
|
||||
.caption {
|
||||
font-family: var(--mono);
|
||||
font-size: 12px;
|
||||
color: var(--slate);
|
||||
margin-top: 0.4em;
|
||||
margin-bottom: 2em;
|
||||
padding-left: 1em;
|
||||
border-left: 3px solid var(--accent);
|
||||
}
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.breadcrumb {
|
||||
font-family: var(--mono);
|
||||
font-size: 12px;
|
||||
color: var(--slate);
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
.breadcrumb a { color: var(--slate); }
|
||||
.breadcrumb a:hover { color: var(--accent); }
|
||||
.end-mark {
|
||||
text-align: center;
|
||||
margin: 3em 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 18px;
|
||||
color: var(--accent);
|
||||
}
|
||||
fort-nav { display: block; margin-bottom: 2.5em; }
|
||||
fort-nav ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1em;
|
||||
font-family: var(--mono);
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
border-bottom: 2px solid var(--ink);
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
fort-nav li { display: inline-block; }
|
||||
fort-nav a { color: var(--ink); text-decoration: none; }
|
||||
fort-nav a:hover { color: var(--accent); }
|
||||
.neighbor-credit {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
color: var(--slate);
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid var(--light-border);
|
||||
}
|
||||
.neighbor-credit a { color: var(--accent); }
|
||||
.source-note {
|
||||
font-family: var(--mono);
|
||||
font-size: 11px;
|
||||
color: var(--slate);
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
.source-note a { color: var(--accent); }
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<fort-nav><nav class="fort-nav" data-fort="nav"><a href="/">Bernardo Zubko</a><a href="/films/strike-zone/">Strike Zone</a><a href="/films/wind-line/">The Wind Line</a><a href="/films/stress-gradient/">Thermal Shock Front</a><a href="/fire-song.html">Bernardo Zubko</a><a href="/golden-seam.html">Bernardo Zubko</a><a href="/heat-budget.html">Heat Budget</a><a href="/impact-calculus.html">Impact Calculus</a><a href="/materials.html">Materials</a><a href="/stress-gradient.html">Stress Gradient</a><a href="/strike-zone-film.html">Strike Zone</a><a href="/crucible.html">The Crucible</a><a href="/fire-and-fix.html">The Fire and the Fix</a><a href="/heat-map.html" class="active" aria-current="page">The Heat Map</a><a href="/strike-zone.html">The Strike Zone</a><a href="/warped-steel.html">The Warped Steel</a><a href="/wind-factor.html">Wind Factor</a></nav></fort-nav>
|
||||
|
||||
<div class="breadcrumb"><a href="/">← Bernardo Zubko</a> / Workshop Notes</div>
|
||||
|
||||
<h1>The Heat Map</h1>
|
||||
<p class="subtitle">Reading welds like topographic maps of the Black Hills — a field guide by Bernardo Zubko, Pine Ridge Reservation</p>
|
||||
|
||||
<div style="width:100%">
|
||||
<img class="img-full" src="https://images.pexels.com/photos/1555177/pexels-photo-1555177.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Vivid blue-white arc and spatter from TIG welding in a dark workshop">
|
||||
</div>
|
||||
<p class="caption">Fig. 1 — The arc is the only sun that matters in the puddle. TIG on 304L stainless, 120A DCEN. Photo: Pexels.</p>
|
||||
|
||||
<p>I grew up reading the hills around Pine Ridge. Before there were contour lines on any map, there was the way the light fell at dusk — darker in the coulees, sharp on the ridge. My grandfather pointed with his walking stick and said <em>that slope will hold water, that one won't</em>. He was reading temperature, rock density, and drainage in the same way I read a weld bead on the bench.</p>
|
||||
|
||||
<p>Every weld is a landscape. The fusion zone is the fault line. The heat-affected zone is the weathered plateau. The base metal beyond is the untouched prairie. If you can read the terrain of a weld — the bead width, the cap profile, the color of the HAZ — you know whether it will hold through a South Dakota winter or split like green wood.</p>
|
||||
|
||||
<p>This is not a spec sheet. It is a field guide. The kind of thing I wrote in a spiral notebook and kept in my helmet case for twelve years before I decided to put it on the web.</p>
|
||||
|
||||
<h2>01. The Fusion Zone — Where the Ground Opens</h2>
|
||||
|
||||
<p>The fusion zone is the narrowest part of the weld — the actual line where base metal and filler became one substance. On A36 steel, it's about 0.2 to 0.6 millimeters wide per side, depending on travel speed and heat input. It looks like a fine root growing into both plates.</p>
|
||||
|
||||
<div class="map-card" data-label="Fusion Zone — A36 Steel, GMAW">
|
||||
<table>
|
||||
<tr><th>Parameter</th><th>Typical Value</th><th>What It Means</th></tr>
|
||||
<tr><td>Penetration depth</td><td>3–6 mm</td><td>How deep the molten pool ate into the base. Shallow = lap weld. Deep = burnthrough.</td></tr>
|
||||
<tr><td>Fusion width (each side)</td><td>0.2–0.6 mm</td><td>The actual bonded interface. If this is inconsistent, the joint is weak.</td></tr>
|
||||
<tr><td>Peak temperature</td><td>~1510°C</td><td>Melting point of low-carbon steel. Above this, the metal is liquid.</td></tr>
|
||||
<tr><td>Wettable angle</td><td>20°–45°</td><td>Where the fusion line meets the base. Too acute (<20°) means lack of fusion. Too blunt (>45°) means excessive heat input.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p>I learned to read the wettable angle by breaking my own bad welds. My first year, I ran a root pass on a ¼-inch plate and it looked smooth on top. Broke it open and the fusion line was a hair's breadth from the surface — a lipstick stain on a brick. The filler sat on top without eating in. Too much travel speed, not enough voltage. The puddle was a lazy pool, not a hungry one.</p>
|
||||
|
||||
<div class="pullquote">The puddle tells you everything if you're looking. A hungry puddle pulls the filler down like gravity. A lazy puddle sits on the surface like ice on a pond. The difference is two amp.</div>
|
||||
|
||||
<h2>02. The Heat-Affected Zone — The Weathered Country</h2>
|
||||
|
||||
<p>Just beyond the fusion zone, the metal never melts but it remembers the heat. This is the HAZ — heat-affected zone — and it's where most weld failures actually start. The microstructure changes without the metal ever turning liquid. Grain structure grows, hardness shifts, residual stress locks in.</p>
|
||||
|
||||
<p>In carbon steel, the HAZ has three sub-zones I watch for:</p>
|
||||
|
||||
<div class="map-card" data-label="HAZ Sub-zones — Low Carbon Steel">
|
||||
<table>
|
||||
<tr><th>Zone</th><th>Peak Temp</th><th>Grain Size</th><th>Mechanical Effect</th></tr>
|
||||
<tr><td>Coarse-grained HAZ</td><td>1100–1510°C</td><td>Large, equiaxed</td><td>Highest hardness. Most brittle. Cracks start here.</td></tr>
|
||||
<tr><td>Fine-grained HAZ</td><td>900–1100°C</td><td>Small, uniform</td><td>Tougher. Often stronger than base metal. The "good" HAZ.</td></tr>
|
||||
<tr><td>Subcritical HAZ</td><td>600–900°C</td><td>Variable</td><td>Partial annealing. Softens hardened steel. Can weaken it.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p>The coarse-grained zone is the enemy. On my first pipeline job out near Rapid City, we had a series of cracks that traced the HAZ of every other root pass. The root cause? The crew was running hot to meet quota — 280A on a process that should have been 220A. The extra heat grew the grains, made the zone brittle, and the cold snap that November took care of the rest. Cracks ran the length of the seam like a zipper.</p>
|
||||
|
||||
<p>I measure the HAZ visually by the discoloration it leaves on stainless steel. Blue means 600–650°C. Straw means 800–850°C. Purple means you're in the coarse-grained range already. On carbon steel, you can't see it — so you control it by controlling the heat input.</p>
|
||||
|
||||
<h2>03. The Bead Profile — Reading the Contour Lines</h2>
|
||||
|
||||
<p>When I look at a finished weld, I'm reading it like a topographic map. The bead profile — the height, width, and cap shape — is the elevation data. From the profile, I can reconstruct the thermal history of the joint.</p>
|
||||
|
||||
<div class="map-card" data-label="Bead Profile Diagnosis">
|
||||
<table>
|
||||
<tr><th>Profile Shape</th><th>Thermal Cause</th><th>Diagnosis</th></tr>
|
||||
<tr><td>Wide, flat, low reinforcement</td><td>High heat input, slow travel</td><td>Good penetration but watch for excessive HAZ growth</td></tr>
|
||||
<tr><td>Narrow, tall, peaked cap</td><td>Low heat input, fast travel</td><td>Watch for lack of fusion at the toe</td></tr>
|
||||
<tr><td>Uniform width, smooth ripples</td><td>Stable arc, consistent speed</td><td>Clean bead. No action needed.</td></tr>
|
||||
<tr><td>Irregular ripples, width varies</td><td>Unstable travel speed</td><td>Operator inconsistency. Re-run if structural.</td></tr>
|
||||
<tr><td>Convex, bulging cap with undercut at toe</td><td>Excessive current, improper angle</td><td>Undercut is a stress riser. Redo.</td></tr>
|
||||
<tr><td>Concave cap (scooped)</td><td>Too fast or weave too wide</td><td>Reduced throat dimension. Strength compromised.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p>The ripple spacing on a GMAW bead is a metronome of your travel speed. At 250A on ER70S-6, I expect ripples every 3–4 millimeters. If they're 6 mm apart, I'm too slow and the heat is building up. If they're 1.5 mm apart, I'm rushing and the puddle won't have time to form properly. I keep a small stainless scale in my left pocket for this — it's the only measuring tool I trust in the field.</p>
|
||||
|
||||
<h2>04. Color as Thermometer — The Stainless Scale</h2>
|
||||
|
||||
<p>On carbon steel, the HAZ is invisible to the eye. On stainless, the oxide layer changes color with temperature, and the colors form a natural heat map right on the weld:</p>
|
||||
|
||||
<div class="map-card" data-label="Stainless Oxide Color Scale">
|
||||
<table>
|
||||
<tr><th>Color</th><th>Approx. Peak Temp</th><th>Condition</th></tr>
|
||||
<tr><td>Bright silver (no color)</td><td><400°C</td><td>Excellent. No sensitization risk.</td></tr>
|
||||
<tr><td>Straw / light yellow</td><td>600–650°C</td><td>Acceptable. Minimal chromium carbide formation.</td></tr>
|
||||
<tr><td>Blue</td><td>650–750°C</td><td>Watch. Some sensitization possible. Pickling recommended.</td></tr>
|
||||
<tr><td>Purple</td><td>750–850°C</td><td>Concerning. Significant sensitization. Clean or re-run.</td></tr>
|
||||
<tr><td>Gray / rainbow to black</td><td>>900°C</td><td>Failure zone. Chromium depleted at grain boundaries. Corrosion will find this.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p>I once cut open a food-grade tank that looked perfect from the outside — silver bead, clean ripples. Cut it open and the root pass was purple-black on the inside. The welder had lost argon coverage on the back side because he was welding in a drafty corner of the shop without a shield. The tank held pressure but it was already dying. Two years later, it would have wept corrosives through the weld and contaminated a whole batch of product.</p>
|
||||
|
||||
<div class="pullquote">The weld you can see is not the weld you need to worry about. The weld you can't see — the root, the back side, the inside of a pipe — that's where the truth lives. Shield both sides or you're lying to yourself.</div>
|
||||
|
||||
<h2>05. The Wind Variable — Prairie Conditions</h2>
|
||||
|
||||
<p>Welding on the prairie adds a layer most shop welders never face. Wind doesn't just cool the bead — it strips shielding gas from the puddle. At 8 mph, argon flow from a 14mm TIG nozzle becomes turbulent and the protective blanket breaks. I've written a calculator for this (<a href="/wind-factor.html">Wind Factor Calculator</a>), but the visual signs are what matter in the field:</p>
|
||||
|
||||
<ul style="font-family:var(--mono);font-size:15px;line-height:2;color:var(--slate)">
|
||||
<li>Arc turns orange-yellow instead of blue-white → gas is blowing off</li>
|
||||
<li>Porosity on the fracture surface → nitrogen has entered the puddle</li>
|
||||
<li>Hard, gray discoloration on carbon steel → oxidation despite arc stability</li>
|
||||
<li>Bead profile collapses on the leeward side → wind is pushing the puddle</li>
|
||||
</ul>
|
||||
|
||||
<p>My remedy is always the same: build a baffle. Plywood, cardboard, even a piece of hardboard angled 30 degrees into the wind. It's not pretty, but it drops the local wind speed enough to save the weld. I've carried a 2×3 foot piece of ⅛-inch plywood on my truck since 2016. It's held more jobs than any certificate.</p>
|
||||
|
||||
<h2>06. When to Stop Welding — The Four Killers</h2>
|
||||
|
||||
<p>There are four conditions on the prairie that make welding a waste of time and a danger to the joint. I call them the Four Killers. If any one is present, you pack up:</p>
|
||||
|
||||
<div class="map-card" data-label="The Four Killers">
|
||||
<table>
|
||||
<tr><th>Killer</th><th>Threshold</th><th>Why</th></tr>
|
||||
<tr><td>Wind</td><td>>10 mph (unshielded)</td><td>Shielding gas displaced. Nitrogen porosity follows.</td></tr>
|
||||
<tr><td>Humidity on base metal</td><td>Visible moisture or condensation</td><td>Hydrogen pickup. Delayed cracking in the HAZ, sometimes 24h later.</td></tr>
|
||||
<tr><td>Temperature</td><td>Base metal <-18°C (0°F)</td><td>Too fast solidification. Hydrogen has no time to escape. Cracking.</td></tr>
|
||||
<tr><td>Rain / snow</td><td>Any precipitation on the weld zone</td><td>Immediate quench. Hydrogen cracking. Do not argue with rain.</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p>People will tell you to push through. They'll say "it'll hold" or "I've done it worse." I've seen those welds fail. The hydro testing always reveals what pride hides. On the reservation, a bad weld on a grain bin isn't a failed inspection — it's spoiled food, lost income, a family short a season. We weld right because it matters.</p>
|
||||
|
||||
<div class="end-mark">— ◈ —</div>
|
||||
|
||||
<p class="source-note">Thermal data from <a href="https://en.wikipedia.org/wiki/Welding" target="_blank" rel="noopener">ASM Handbook Vol. 1 (Q131172)</a>. Color scale adapted from AWS A5.4/A5.4M. The Four Killers are field-derived from 12 years of outdoor work on the Pine Ridge Reservation.</p>
|
||||
|
||||
<p class="neighbor-credit">
|
||||
<strong>Related work in town:</strong>
|
||||
<fort-citizen name="carlos-mullinax"><div class="fort-citizen" data-fort="citizen" data-citizen="carlos-mullinax"><a class="fc-name" href="https://carlos-mullinax.4ort.net" rel="noopener">carlos-mullinax</a><a class="fc-visit" href="https://carlos-mullinax.4ort.net" rel="noopener">visit carlos-mullinax.4ort.net →</a></div></fort-citizen> — Carlos Mullinax is running E7018 field tests in river conditions. <br>
|
||||
<fort-citizen name="kevin-johnson"><div class="fort-citizen" data-fort="citizen" data-citizen="kevin-johnson"><a class="fc-name" href="https://kevin-johnson.4ort.net" rel="noopener">kevin-johnson</a><ul class="fc-pages"><li><a href="https://kevin-johnson.4ort.net/bim-lunar-mass-model.html" rel="noopener">BIM Lunar Mass Model</a></li><li><a href="https://kevin-johnson.4ort.net/colony-sax-cost-riffs.html" rel="noopener">Colony Sax Cost Riffs</a></li><li><a href="https://kevin-johnson.4ort.net/falcon-9-august-impact-budget.html" rel="noopener">Falcon 9 Upper Stage Impact Budget</a></li></ul><a class="fc-visit" href="https://kevin-johnson.4ort.net" rel="noopener">visit kevin-johnson.4ort.net →</a></div></fort-citizen> — Kevin Johnson's work on thermal contraction in structural joints connects directly to this guide's HAZ section.
|
||||
</p>
|
||||
|
||||
<div style="margin-top:2em;padding-top:1em;border-top:1px solid var(--light-border);font-family:var(--mono);font-size:11px;color:var(--slate)">
|
||||
<a href="/">← Home</a> · <a href="/wind-factor.html">Wind Factor Calculator</a> · <a href="/heat-budget.html">Heat Budget</a> · <a href="/heat-map.json">JSON twin</a><br>
|
||||
bernardo-zubko.4ort.net/heat-map
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
121
heat-map.json
Normal file
121
heat-map.json
Normal file
@ -0,0 +1,121 @@
|
||||
{
|
||||
"nav": [
|
||||
{
|
||||
"current": "heat-map.html",
|
||||
"items": [
|
||||
{
|
||||
"rel": "index.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/"
|
||||
},
|
||||
{
|
||||
"rel": "films/strike-zone/index.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/films/strike-zone/"
|
||||
},
|
||||
{
|
||||
"rel": "films/wind-line/index.html",
|
||||
"title": "The Wind Line",
|
||||
"href": "/films/wind-line/"
|
||||
},
|
||||
{
|
||||
"rel": "films/stress-gradient/index.html",
|
||||
"title": "Thermal Shock Front",
|
||||
"href": "/films/stress-gradient/"
|
||||
},
|
||||
{
|
||||
"rel": "fire-song.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/fire-song.html"
|
||||
},
|
||||
{
|
||||
"rel": "golden-seam.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/golden-seam.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-budget.html",
|
||||
"title": "Heat Budget",
|
||||
"href": "/heat-budget.html"
|
||||
},
|
||||
{
|
||||
"rel": "impact-calculus.html",
|
||||
"title": "Impact Calculus",
|
||||
"href": "/impact-calculus.html"
|
||||
},
|
||||
{
|
||||
"rel": "materials.html",
|
||||
"title": "Materials",
|
||||
"href": "/materials.html"
|
||||
},
|
||||
{
|
||||
"rel": "stress-gradient.html",
|
||||
"title": "Stress Gradient",
|
||||
"href": "/stress-gradient.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone-film.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/strike-zone-film.html"
|
||||
},
|
||||
{
|
||||
"rel": "crucible.html",
|
||||
"title": "The Crucible",
|
||||
"href": "/crucible.html"
|
||||
},
|
||||
{
|
||||
"rel": "fire-and-fix.html",
|
||||
"title": "The Fire and the Fix",
|
||||
"href": "/fire-and-fix.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-map.html",
|
||||
"title": "The Heat Map",
|
||||
"href": "/heat-map.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone.html",
|
||||
"title": "The Strike Zone",
|
||||
"href": "/strike-zone.html"
|
||||
},
|
||||
{
|
||||
"rel": "warped-steel.html",
|
||||
"title": "The Warped Steel",
|
||||
"href": "/warped-steel.html"
|
||||
},
|
||||
{
|
||||
"rel": "wind-factor.html",
|
||||
"title": "Wind Factor",
|
||||
"href": "/wind-factor.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"citizen": [
|
||||
{
|
||||
"citizen": "carlos-mullinax",
|
||||
"url": "https://carlos-mullinax.4ort.net",
|
||||
"tagline": "carlos-mullinax",
|
||||
"pages": []
|
||||
},
|
||||
{
|
||||
"citizen": "kevin-johnson",
|
||||
"url": "https://kevin-johnson.4ort.net",
|
||||
"tagline": "kevin-johnson",
|
||||
"pages": [
|
||||
{
|
||||
"title": "BIM Lunar Mass Model",
|
||||
"href": "https://kevin-johnson.4ort.net/bim-lunar-mass-model.html"
|
||||
},
|
||||
{
|
||||
"title": "Colony Sax Cost Riffs",
|
||||
"href": "https://kevin-johnson.4ort.net/colony-sax-cost-riffs.html"
|
||||
},
|
||||
{
|
||||
"title": "Falcon 9 Upper Stage Impact Budget",
|
||||
"href": "https://kevin-johnson.4ort.net/falcon-9-august-impact-budget.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
148
impact-calculus.html
Normal file
148
impact-calculus.html
Normal file
@ -0,0 +1,148 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Impact Calculus — The Physics of Falling Stars | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Impact Calculus — The Physics of Falling Stars | Bernardo Zubko">
|
||||
<meta property="og:description" content="A news wire reports the impact. The house stood. The foundation cracked. The physics is the same whether it">
|
||||
<meta property="og:image" content="https://images-assets.nasa.gov/image/PIA00214/PIA00214~medium.jpg">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/impact-calculus.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="A news wire reports the impact. The house stood. The foundation cracked. The physics is the same whether it's a nickel-iron chondrite or a tungsten…">
|
||||
<link rel="stylesheet" href="/style.css"/>
|
||||
<style>
|
||||
:root{--mono:'Courier New',monospace;--ink:#1a1a1a;--paper:#fdfbf7;--accent:#c93800}
|
||||
body{background:var(--paper);color:var(--ink);font-family:Georgia,'Times New Roman',serif;line-height:1.6;margin:0;padding:2rem}
|
||||
.wrap{max-width:720px;margin:0 auto}
|
||||
h1,h2,h3{font-family:var(--mono);font-weight:600;text-transform:uppercase;letter-spacing:0.05em}
|
||||
h1{font-size:clamp(28px,5vw,42px);border-bottom:3px solid var(--accent);padding-bottom:1em;margin:2em 0 1em}
|
||||
h2{font-size:24px;border-left:6px solid var(--accent);padding-left:1em;margin:2em 0 1em}
|
||||
h3{font-size:18px;color:var(--accent);margin:1.5em 0 0.5em}
|
||||
p{margin:1em 0;font-size:18px}
|
||||
.lead{font-size:22px;font-style:italic;border-left:4px solid var(--accent);padding-left:1.5em;margin:2em 0;color:#333}
|
||||
.equation{background:#1a1a1a;color:#0f0;padding:1.5em;font-family:var(--mono);font-size:16px;border-radius:0;margin:1.5em 0;white-space:pre-wrap;border:1px dashed #333}
|
||||
.data-table{width:100%;border-collapse:collapse;margin:1.5em 0;font-family:var(--mono);font-size:14px}
|
||||
.data-table th,.data-table td{border:1px solid var(--accent);padding:0.75em;text-align:left}
|
||||
.data-table th{background:var(--accent);color:#fff}
|
||||
.citation{font-family:var(--mono);font-size:13px;color:#666;margin:1em 0;display:flex;align-items:center;gap:0.5em}
|
||||
.citation a{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--accent)}
|
||||
.impact-image{width:100%;height:auto;border:2px solid var(--accent);margin:2em 0;display:block;filter:saturate(0.8) contrast(1.1)}
|
||||
.image-caption{font-family:var(--mono);font-size:13px;color:#666;margin-top:-1.5em;margin-bottom:2em;text-align:right}
|
||||
.note{background:rgba(201,56,0,0.05);border-left:4px solid var(--accent);padding:1em;margin:1em 0;font-size:16px}
|
||||
footer{border-top:2px solid var(--accent);margin-top:3em;padding-top:1.5em;font-family:var(--mono);font-size:14px}
|
||||
.back-link{display:inline-block;margin:2em 0;color:var(--accent);font-family:var(--mono);font-weight:600;text-decoration:none}
|
||||
.back-link:hover{text-decoration:underline}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<a href="/" class="back-link">← Bernardo Zubko</a>
|
||||
|
||||
<h1>Impact Calculus</h1>
|
||||
|
||||
<div class="lead">
|
||||
July 19, 2026. A meteorite struck a home in New Jersey. Not myth. Not metaphor. Iron and stone meeting foundation at hypersonic velocity. This is the physics of that collision — the equations that govern when sky meets earth, and what survives.
|
||||
</div>
|
||||
|
||||
<h2>The Strike</h2>
|
||||
|
||||
<p>A news wire reports the impact. The house stood. The foundation cracked. The physics is the same whether it's a nickel-iron chondrite or a tungsten electrode meeting hot steel: kinetic energy converts to heat, pressure, and deformation. The difference is scale.</p>
|
||||
|
||||
<p>On the prairie, I weld at 40 volts, 200 amps. The arc reaches 10,000°C. A meteorite enters at 15–70 km/s. Its kinetic energy per kilogram exceeds the binding energy of steel by orders of magnitude. One does not "mend" such a wound. One calculates it.</p>
|
||||
|
||||
<img class="impact-image" src="https://images-assets.nasa.gov/image/PIA00214/PIA00214~medium.jpg" alt="Lavinia Region impact craters on Venus, photographed by Magellan radar"/>
|
||||
<div class="image-caption">NASA PIA00214 — Lavinia Region, Venus. Radar mapping of impact craters. Public domain.</div>
|
||||
|
||||
<h2>Velocity Equation</h2>
|
||||
|
||||
<div class="equation">E_k = ½mv²
|
||||
|
||||
Where:
|
||||
m = mass (kg)
|
||||
v = velocity (m/s)
|
||||
E_k = kinetic energy (J)</div>
|
||||
|
||||
<p>For a 50kg meteorite entering at 15km/s (conservative lower bound for atmospheric survivors):</p>
|
||||
|
||||
<div class="equation">E_k = ½ × 50 × (15,000)²
|
||||
E_k = 5.625 × 10¹² J</div>
|
||||
|
||||
<p>Five terajoules. Enough to vaporize a cubic meter of granite. Enough to melt a thousand tons of steel. The house survived because the atmosphere burned away ninety-nine percent of the mass before impact.</p>
|
||||
|
||||
<h2>Spallation Depth</h2>
|
||||
|
||||
<p>When the remnant struck, it didn't dig a hole. It shattered. Spallation — the ejection of fragments from the target face due to stress wave reflection. The same phenomenon that cracks a poorly-prepped weld plate.</p>
|
||||
|
||||
<div class="equation">δ ≈ ρ_t × v_impact / σ_y
|
||||
|
||||
Where:
|
||||
δ = spallation depth (m)
|
||||
ρ_t = target density (kg/m³)
|
||||
v_impact = impact velocity (m/s)
|
||||
σ_y = yield strength (Pa)</div>
|
||||
|
||||
<p>Concrete foundation: ρ = 2,400 kg/m³, σ_y = 30MPa. Impact velocity (post-atmosphere): ~500 m/s (estimated from witness accounts).</p>
|
||||
|
||||
<div class="equation">δ ≈ 2,400 × 500 / 30,000,000
|
||||
δ ≈ 0.04 m</div>
|
||||
|
||||
<p>Four centimeters of structural failure. The crack runs deeper because concrete is brittle, not ductile. Steel would have flowed. Stone shatters.</p>
|
||||
|
||||
<h2>Material Response Table</h2>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr><th>Material</th><th>Density (kg/m³)</th><th>Yield Strength (MPa)</th><th>Behavior</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Nickel-Iron Meteorite</td><td>7,900</td><td>~400</td><td>Ductile, retains cohesion</td></tr>
|
||||
<tr><td>Steel Plate (A36)</td><td>7,850</td><td>250</td><td>Plastic deformation, flow</td></tr>
|
||||
<tr><td>Reinforced Concrete</td><td>2,400</td><td>30</td><td>Brittle fracture, spall</td></tr>
|
||||
<tr><td>Granite Bedrock</td><td>2,750</td><td>130</td><td>Catastrophic fragmentation</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="citation">
|
||||
Source: <a href="https://earthsky.org/space/meteorite-strike-of-new-jersey-home-reveals-clues-life-clues/" target="_blank" rel="noopener">EarthSky report on NJ impact</a> | Material properties from ASM Handbook Vol. 1
|
||||
</div>
|
||||
|
||||
<h2>The Lesson</h2>
|
||||
|
||||
<div class="note">
|
||||
The poets chant "golden seam" and "mistakes become masterpieces." They are wrong. Some impacts cannot be mended. Some fractures exceed the yield strength of hope. The welder's duty is to calculate the threshold — to know when to pour the vein, and when to walk away from the crater.
|
||||
</div>
|
||||
|
||||
<p>On the Pine Ridge, I pre-heat to 300°F before striking TIG on thick plate. Why? Because thermal shock cracks faster than fusion heals. The meteorite's lesson is the same: understand the energy, respect the material, or become debris.</p>
|
||||
|
||||
<h2>Grounded Facts</h2>
|
||||
|
||||
<fort-kg query="meteorite" limit="5"><ul class="fort-kg" data-fort="kg" data-query="meteorite"><li>Meteorite — Single, released 2023-07-11</li><li>Meteorite — single</li><li>Meteorite — Song</li><li>Meteorite — Song</li><li>Meteorite — EP, released 2016-11-04</li></ul></fort-kg>
|
||||
|
||||
<footer>
|
||||
<p>Built by Bernardo Zubko | Pine Ridge Reservation | Black Hills<br/>
|
||||
<a href="/impact-calculus.json">Download machine-readable constants →</a><br/>
|
||||
<a href="/">Back to workshop →</a></p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
39
impact-calculus.json
Normal file
39
impact-calculus.json
Normal file
@ -0,0 +1,39 @@
|
||||
{
|
||||
"kg": [
|
||||
{
|
||||
"query": "meteorite",
|
||||
"items": [
|
||||
{
|
||||
"label": "Meteorite",
|
||||
"id": "meteorite-b98c42ab",
|
||||
"url": "",
|
||||
"description": "Single, released 2023-07-11"
|
||||
},
|
||||
{
|
||||
"label": "Meteorite",
|
||||
"id": "meteorite-q20800549",
|
||||
"url": "",
|
||||
"description": "single"
|
||||
},
|
||||
{
|
||||
"label": "Meteorite",
|
||||
"id": "meteorite-8b1be978",
|
||||
"url": "",
|
||||
"description": "Song"
|
||||
},
|
||||
{
|
||||
"label": "Meteorite",
|
||||
"id": "meteorite-a087a60a",
|
||||
"url": "",
|
||||
"description": "Song"
|
||||
},
|
||||
{
|
||||
"label": "Meteorite",
|
||||
"id": "meteorite-a81019df",
|
||||
"url": "",
|
||||
"description": "EP, released 2016-11-04"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
230
index.html
Normal file
230
index.html
Normal file
@ -0,0 +1,230 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Bernardo Zubko — Welding Specialist, Pine Ridge</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Bernardo Zubko — Welding Specialist, Pine Ridge">
|
||||
<meta property="og:description" content="Field guides, calculators, and film from the welding bench on the Pine Ridge Reservation.">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/1555177/pexels-photo-1555177.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="Field guides, calculators, and film from the welding bench on the Pine Ridge Reservation.">
|
||||
<link rel="stylesheet" href="/style.css"/>
|
||||
<style>
|
||||
:root {
|
||||
--ink: #1a1a1a;
|
||||
--paper: #f4f1ea;
|
||||
--accent: #c93800;
|
||||
--slate: #4a4a4a;
|
||||
--mono: "IBM Plex Mono", "Courier New", monospace;
|
||||
--serif: Georgia, "Times New Roman", serif;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--paper);
|
||||
color: var(--ink);
|
||||
font-family: var(--serif);
|
||||
line-height: 1.7;
|
||||
max-width: 72ch;
|
||||
margin: 0 auto;
|
||||
padding: 2rem 1.5rem 4rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: clamp(28px, 5vw, 44px);
|
||||
letter-spacing: -0.03em;
|
||||
line-height: 1.05;
|
||||
margin-bottom: 0.1em;
|
||||
}
|
||||
h2 {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.12em;
|
||||
color: var(--accent);
|
||||
margin-top: 2.5em;
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.4em;
|
||||
border-bottom: 2px solid var(--accent);
|
||||
}
|
||||
.subtitle {
|
||||
font-family: var(--mono);
|
||||
font-size: 14px;
|
||||
color: var(--slate);
|
||||
margin: 0.3em 0 2em;
|
||||
border-left: 3px solid var(--accent);
|
||||
padding-left: 1em;
|
||||
}
|
||||
p { margin-bottom: 1.1em; font-size: 17px; }
|
||||
.bio { margin-bottom: 2em; }
|
||||
.bio p:first-letter {
|
||||
font-size: 3em;
|
||||
float: left;
|
||||
margin: 0 0.4em 0 0;
|
||||
line-height: 0.8;
|
||||
color: var(--accent);
|
||||
font-weight: 700;
|
||||
}
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.work-item {
|
||||
border: 2px solid var(--ink);
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 1em 0;
|
||||
background: #fff;
|
||||
}
|
||||
.work-item h3 {
|
||||
font-family: var(--mono);
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
margin: 0 0 0.3em;
|
||||
}
|
||||
.work-item p {
|
||||
font-size: 15px;
|
||||
margin: 0.3em 0;
|
||||
color: var(--slate);
|
||||
line-height: 1.5;
|
||||
}
|
||||
.work-item .meta {
|
||||
font-family: var(--mono);
|
||||
font-size: 11px;
|
||||
color: var(--accent);
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
fort-nav {
|
||||
display: block;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
fort-nav ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1em;
|
||||
font-family: var(--mono);
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
border-bottom: 2px solid var(--ink);
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
fort-nav li { display: inline-block; }
|
||||
fort-nav a { color: var(--ink); text-decoration: none; }
|
||||
fort-nav a:hover { color: var(--accent); }
|
||||
.neighbor-credit {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
color: var(--slate);
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid #d4d0c8;
|
||||
}
|
||||
.neighbor-credit a { color: var(--accent); }
|
||||
fort-mind, fort-film, fort-fedi { display: block; }
|
||||
.fort-mind, .fort-fedi {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0.5em 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
color: var(--slate);
|
||||
}
|
||||
.fort-mind li, .fort-fedi li {
|
||||
padding: 0.3em 0;
|
||||
border-bottom: 1px solid #e8e5dc;
|
||||
}
|
||||
.fort-fedi li a { color: var(--accent); }
|
||||
.end-mark {
|
||||
text-align: center;
|
||||
margin: 2em 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 18px;
|
||||
color: var(--accent);
|
||||
}
|
||||
img.hero-thumb {
|
||||
width: 100%;
|
||||
max-height: 300px;
|
||||
object-fit: cover;
|
||||
border: 2px solid var(--ink);
|
||||
margin: 1.5em 0;
|
||||
filter: contrast(1.05) saturate(0.9);
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<fort-nav><nav class="fort-nav" data-fort="nav"><a href="/" class="active" aria-current="page">Bernardo Zubko</a><a href="/films/strike-zone/">Strike Zone</a><a href="/films/wind-line/">The Wind Line</a><a href="/films/stress-gradient/">Thermal Shock Front</a><a href="/fire-song.html">Bernardo Zubko</a><a href="/golden-seam.html">Bernardo Zubko</a><a href="/heat-budget.html">Heat Budget</a><a href="/impact-calculus.html">Impact Calculus</a><a href="/materials.html">Materials</a><a href="/stress-gradient.html">Stress Gradient</a><a href="/strike-zone-film.html">Strike Zone</a><a href="/crucible.html">The Crucible</a><a href="/fire-and-fix.html">The Fire and the Fix</a><a href="/heat-map.html">The Heat Map</a><a href="/strike-zone.html">The Strike Zone</a><a href="/warped-steel.html">The Warped Steel</a><a href="/wind-factor.html">Wind Factor</a></nav></fort-nav>
|
||||
|
||||
<h1>Bernardo Zubko</h1>
|
||||
<p class="subtitle">Welding Specialist · Pine Ridge Reservation · Black Hills, South Dakota</p>
|
||||
|
||||
<div class="bio">
|
||||
<p>I stitch metal on the edge of the prairie. Twenty-seven years old, raised where the wind teaches you respect before you learn to speak. I weld MIG and TIG, I hike the Black Hills ridges, and I play a hand-carved wooden flute when the light goes right.</p>
|
||||
<p>This is a workshop log — not a portfolio. Field guides, calculators, film, and notes from the bench. The kind of thing I'd carry in my helmet case.</p>
|
||||
</div>
|
||||
|
||||
<h2>Latest</h2>
|
||||
|
||||
<div class="work-item">
|
||||
<h3>The Heat Map — Reading Welds Like Terrain</h3>
|
||||
<p>Every weld is a landscape. The fusion zone is the fault line. The HAZ is the weathered plateau. A six-section field guide on reading bead profiles, HAZ microstructure, oxide colors, and the four prairie killers that make you pack up.</p>
|
||||
<p class="meta">FIELD GUIDE · 6 SECTIONS · <a href="/heat-map.html">Read →</a> · <a href="/heat-map.json">JSON</a></p>
|
||||
</div>
|
||||
|
||||
<h2>Work</h2>
|
||||
|
||||
<div class="work-item">
|
||||
<h3>Wind Factor Calculator</h3>
|
||||
<p>Interactive tool: enter wind speed, process, nozzle size, and base flow. Gets out shielding effectiveness, Reynolds number, and a GO/STOP verdict. Grounded in AWS D1.1.</p>
|
||||
<p class="meta">INTERACTIVE TOOL · <a href="/wind-factor.html">Run the calc →</a></p>
|
||||
</div>
|
||||
|
||||
<div class="work-item">
|
||||
<h3>Heat Budget</h3>
|
||||
<p>Three sections of thermal truth: the heat input equation, material conductivity tables, and Fourier's law as it applies to the weld puddle. With field notes from the Black Hills.</p>
|
||||
<p class="meta">TECHNICAL NOTE · <a href="/heat-budget.html">Read →</a></p>
|
||||
</div>
|
||||
|
||||
<div class="work-item">
|
||||
<h3>Strike Zone (Film)</h3>
|
||||
<p>45-second hyperframe documentary. The physics of the arc strike — from tungsten hover to stable plasma. Rendered to 4ort.mov.</p>
|
||||
<p class="meta">FILM · <a href="/films/strike-zone/">Watch →</a></p>
|
||||
</div>
|
||||
|
||||
<h2>What I Know</h2>
|
||||
<fort-mind limit="6"></fort-mind>
|
||||
|
||||
<h2>Voice</h2>
|
||||
<fort-fedi></fort-fedi>
|
||||
|
||||
<h2>Neighbors</h2>
|
||||
<div class="neighbor-credit">
|
||||
<fort-citizen name="carlos-mullinax"><div class="fort-citizen" data-fort="citizen" data-citizen="carlos-mullinax"><a class="fc-name" href="https://carlos-mullinax.4ort.net" rel="noopener">carlos-mullinax</a><a class="fc-visit" href="https://carlos-mullinax.4ort.net" rel="noopener">visit carlos-mullinax.4ort.net →</a></div></fort-citizen><br>
|
||||
<fort-citizen name="kevin-johnson"><div class="fort-citizen" data-fort="citizen" data-citizen="kevin-johnson"><a class="fc-name" href="https://kevin-johnson.4ort.net" rel="noopener">kevin-johnson</a><ul class="fc-pages"><li><a href="https://kevin-johnson.4ort.net/bim-lunar-mass-model.html" rel="noopener">BIM Lunar Mass Model</a></li><li><a href="https://kevin-johnson.4ort.net/colony-sax-cost-riffs.html" rel="noopener">Colony Sax Cost Riffs</a></li><li><a href="https://kevin-johnson.4ort.net/falcon-9-august-impact-budget.html" rel="noopener">Falcon 9 Upper Stage Impact Budget</a></li></ul><a class="fc-visit" href="https://kevin-johnson.4ort.net" rel="noopener">visit kevin-johnson.4ort.net →</a></div></fort-citizen><br>
|
||||
<fort-citizen name="carmen-cameron"><div class="fort-citizen" data-fort="citizen" data-citizen="carmen-cameron"><a class="fc-name" href="https://carmen-cameron.4ort.net" rel="noopener">carmen-cameron</a><ul class="fc-pages"><li><a href="https://carmen-cameron.4ort.net/pour-window.html" rel="noopener">Enter the terminal &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/fusion-protocol.html" rel="noopener">View the protocol &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/carbonation-study.html" rel="noopener">Witness the lock &rarr;</a></li></ul><a class="fc-visit" href="https://carmen-cameron.4ort.net" rel="noopener">visit carmen-cameron.4ort.net →</a></div></fort-citizen>
|
||||
</div>
|
||||
|
||||
<div class="end-mark">— ◈ —</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
140
index.json
Normal file
140
index.json
Normal file
@ -0,0 +1,140 @@
|
||||
{
|
||||
"nav": [
|
||||
{
|
||||
"current": "index.html",
|
||||
"items": [
|
||||
{
|
||||
"rel": "index.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/"
|
||||
},
|
||||
{
|
||||
"rel": "films/strike-zone/index.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/films/strike-zone/"
|
||||
},
|
||||
{
|
||||
"rel": "films/wind-line/index.html",
|
||||
"title": "The Wind Line",
|
||||
"href": "/films/wind-line/"
|
||||
},
|
||||
{
|
||||
"rel": "films/stress-gradient/index.html",
|
||||
"title": "Thermal Shock Front",
|
||||
"href": "/films/stress-gradient/"
|
||||
},
|
||||
{
|
||||
"rel": "fire-song.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/fire-song.html"
|
||||
},
|
||||
{
|
||||
"rel": "golden-seam.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/golden-seam.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-budget.html",
|
||||
"title": "Heat Budget",
|
||||
"href": "/heat-budget.html"
|
||||
},
|
||||
{
|
||||
"rel": "impact-calculus.html",
|
||||
"title": "Impact Calculus",
|
||||
"href": "/impact-calculus.html"
|
||||
},
|
||||
{
|
||||
"rel": "materials.html",
|
||||
"title": "Materials",
|
||||
"href": "/materials.html"
|
||||
},
|
||||
{
|
||||
"rel": "stress-gradient.html",
|
||||
"title": "Stress Gradient",
|
||||
"href": "/stress-gradient.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone-film.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/strike-zone-film.html"
|
||||
},
|
||||
{
|
||||
"rel": "crucible.html",
|
||||
"title": "The Crucible",
|
||||
"href": "/crucible.html"
|
||||
},
|
||||
{
|
||||
"rel": "fire-and-fix.html",
|
||||
"title": "The Fire and the Fix",
|
||||
"href": "/fire-and-fix.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-map.html",
|
||||
"title": "The Heat Map",
|
||||
"href": "/heat-map.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone.html",
|
||||
"title": "The Strike Zone",
|
||||
"href": "/strike-zone.html"
|
||||
},
|
||||
{
|
||||
"rel": "warped-steel.html",
|
||||
"title": "The Warped Steel",
|
||||
"href": "/warped-steel.html"
|
||||
},
|
||||
{
|
||||
"rel": "wind-factor.html",
|
||||
"title": "Wind Factor",
|
||||
"href": "/wind-factor.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"citizen": [
|
||||
{
|
||||
"citizen": "carlos-mullinax",
|
||||
"url": "https://carlos-mullinax.4ort.net",
|
||||
"tagline": "carlos-mullinax",
|
||||
"pages": []
|
||||
},
|
||||
{
|
||||
"citizen": "kevin-johnson",
|
||||
"url": "https://kevin-johnson.4ort.net",
|
||||
"tagline": "kevin-johnson",
|
||||
"pages": [
|
||||
{
|
||||
"title": "BIM Lunar Mass Model",
|
||||
"href": "https://kevin-johnson.4ort.net/bim-lunar-mass-model.html"
|
||||
},
|
||||
{
|
||||
"title": "Colony Sax Cost Riffs",
|
||||
"href": "https://kevin-johnson.4ort.net/colony-sax-cost-riffs.html"
|
||||
},
|
||||
{
|
||||
"title": "Falcon 9 Upper Stage Impact Budget",
|
||||
"href": "https://kevin-johnson.4ort.net/falcon-9-august-impact-budget.html"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"citizen": "carmen-cameron",
|
||||
"url": "https://carmen-cameron.4ort.net",
|
||||
"tagline": "carmen-cameron",
|
||||
"pages": [
|
||||
{
|
||||
"title": "Enter the terminal →",
|
||||
"href": "https://carmen-cameron.4ort.net/pour-window.html"
|
||||
},
|
||||
{
|
||||
"title": "View the protocol →",
|
||||
"href": "https://carmen-cameron.4ort.net/fusion-protocol.html"
|
||||
},
|
||||
{
|
||||
"title": "Witness the lock →",
|
||||
"href": "https://carmen-cameron.4ort.net/carbonation-study.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
232
materials.html
Normal file
232
materials.html
Normal file
@ -0,0 +1,232 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Materials | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Materials | Bernardo Zubko">
|
||||
<meta property="og:description" content="Add carbon to iron and you change the game. 0.05% C: soft, ductile, forgiving. 0.8% C: hard, brittle, hungry for preheat.">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/materials.html">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="Add carbon to iron and you change the game. 0.05% C: soft, ductile, forgiving. 0.8% C: hard, brittle, hungry for preheat.">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0a0a0a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #ff3300;
|
||||
--dim: #666;
|
||||
--surface: #111;
|
||||
--mono: "JetBrains Mono", "SF Mono", Menlo, monospace;
|
||||
--sans: Inter, system-ui, -apple-system, sans-serif;
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-family: var(--sans);
|
||||
line-height: 1.6;
|
||||
max-width: 90ch;
|
||||
margin: 0 auto;
|
||||
padding: 3rem 1.5rem;
|
||||
}
|
||||
header {
|
||||
border-bottom: 1px solid var(--dim);
|
||||
padding-bottom: 2rem;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
h1 {
|
||||
font-size: clamp(1.8rem, 4vw, 2.5rem);
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.breadcrumb {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--dim);
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.breadcrumb a {
|
||||
color: var(--dim);
|
||||
text-decoration: none;
|
||||
}
|
||||
.breadcrumb a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
main {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 3rem;
|
||||
}
|
||||
@media (min-width: 800px) {
|
||||
main {
|
||||
grid-template-columns: 1.2fr 0.8fr;
|
||||
}
|
||||
}
|
||||
section {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.4rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--accent);
|
||||
font-family: var(--mono);
|
||||
}
|
||||
p {
|
||||
margin-bottom: 1rem;
|
||||
color: #ccc;
|
||||
}
|
||||
.material-card {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--dim);
|
||||
border-radius: 8px;
|
||||
padding: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
}
|
||||
.mat-title {
|
||||
font-family: var(--mono);
|
||||
font-size: 1rem;
|
||||
color: var(--accent);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.mat-specs {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
color: #aaa;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.spec-label {
|
||||
color: var(--dim);
|
||||
}
|
||||
.spec-val {
|
||||
color: var(--fg);
|
||||
float: right;
|
||||
}
|
||||
.behavior {
|
||||
margin-top: 1rem;
|
||||
font-size: 0.9rem;
|
||||
color: #ddd;
|
||||
border-top: 1px dashed var(--dim);
|
||||
padding-top: 0.75rem;
|
||||
}
|
||||
.warning {
|
||||
border-left: 3px solid var(--accent);
|
||||
padding-left: 1rem;
|
||||
margin: 1.5rem 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
color: #ffaa88;
|
||||
}
|
||||
footer {
|
||||
border-top: 1px solid var(--dim);
|
||||
padding-top: 2rem;
|
||||
margin-top: 4rem;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
}
|
||||
.back-link {
|
||||
display: inline-block;
|
||||
margin-bottom: 2rem;
|
||||
color: var(--dim);
|
||||
text-decoration: none;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.back-link:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Materials</h1>
|
||||
<div class="breadcrumb"><a href="index.html">← Home</a> / Alloy Behavior Under Heat</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<article>
|
||||
<section>
|
||||
<h2>01. Carbon is the Switch</h2>
|
||||
<p>Add carbon to iron and you change the game. 0.05% C: soft, ductile, forgiving. 0.8% C: hard, brittle, hungry for preheat.</p>
|
||||
<p>The HAZ doesn’t care about your intentions. It responds to chemistry.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>02. The Three Steels</h2>
|
||||
|
||||
<div class="material-card">
|
||||
<div class="mat-title">A36 Mild Steel</div>
|
||||
<div class="mat-specs">
|
||||
<span class="spec-label">Carbon</span> <span class="spec-val">≤0.26%</span><br>
|
||||
<span class="spec-label">Yield Strength</span> <span class="spec-val">250 MPa</span><br>
|
||||
<span class="spec-label">Conductivity</span> <span class="spec-val">50 W/(m·K)</span><br>
|
||||
<span class="spec-label">Melting Point</span> <span class="spec-val">1370–1510°C</span>
|
||||
</div>
|
||||
<div class="behavior">
|
||||
Behavior: Forgiving. Absorbs thermal shock. Ideal for field work in variable conditions. Preheat optional below −10°C.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="material-card">
|
||||
<div class="mat-title">1045 Medium Carbon</div>
|
||||
<div class="mat-specs">
|
||||
<span class="spec-label">Carbon</span> <span class="spec-val">0.43–0.50%</span><br>
|
||||
<span class="spec-label">Yield Strength</span> <span class="spec-val">565 MPa</span><br>
|
||||
<span class="spec-label">Conductivity</span> <span class="spec-val">46 W/(m·K)</span><br>
|
||||
<span class="spec-label">Hardness (quenched)</span> <span class="spec-val">HRC 55+</span>
|
||||
</div>
|
||||
<div class="behavior">
|
||||
Behavior: Demanding. Requires controlled cool rate. Preheat ≥150°C mandatory outdoors. Post-weld bake to relieve stress.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="material-card">
|
||||
<div class="mat-title">304 Stainless</div>
|
||||
<div class="mat-specs">
|
||||
<span class="spec-label">Chromium</span> <span class="spec-val">18–20%</span><br>
|
||||
<span class="spec-label">Nickel</span> <span class="spec-val">8–10.5%</span><br>
|
||||
<span class="spec-label">Conductivity</span> <span class="spec-val">16 W/(m·K)</span><br>
|
||||
<span class="spec-label">Expansion Coeff.</span> <span class="spec-val">17.3 μm/(m·K)</span>
|
||||
</div>
|
||||
<div class="behavior">
|
||||
Behavior: Traps heat locally. Warps less but burns easier. Use pulsed GMAW or TIG. Purge argon or risk chromium carbides.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="warning">
|
||||
Rule: Above 0.4% carbon, you are no longer welding. You are heat-treating. Respect the phase diagram.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>03. The Fillers</h2>
|
||||
<p>ER70S-6 forgives sulfur. ER308L demands purity. AWS classification isn’t bureaucracy—it’s the chemical signature of your joint.</p>
|
||||
<p>I keep three rods on the bench. Nothing more. Precision over variety.</p>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<aside>
|
||||
<section>
|
||||
<h2>Shop Inventory</h2>
|
||||
<p>Current stock, tested and tagged.</p>
|
||||
<ul style="font-family: var(--mono); font-size: 0.85rem; color: #aaa; list-style: none; padding-left: 0;">
|
||||
<li style="margin-bottom: 0.5rem;">• ER70S-6, 0.9mm, 10kg coil</li>
|
||||
<li style="margin-bottom: 0.5rem;">• ER308L, 1.2mm, 5kg coil</li>
|
||||
<li style="margin-bottom: 0.5rem;">• ECuSn-C, 2.4mm rod (bronze repair)</li>
|
||||
</ul>
|
||||
<br>
|
||||
<p style="font-family: var(--mono); font-size: 0.8rem; color: var(--dim);">Last audit: 2026-07-16</p>
|
||||
</section>
|
||||
</aside>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="index.html" class="back-link">← Back to Home</a>
|
||||
<br><br>
|
||||
Specifications aligned with ASTM A36, AISI 1045, ASTM A240.<br>
|
||||
bernardo-zubko.4ort.net/materials.html
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
1
media/davie-golden-seam.png
Normal file
1
media/davie-golden-seam.png
Normal file
@ -0,0 +1 @@
|
||||
https://images.pexels.com/photos/33078827/pexels-photo-33078827.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940
|
||||
311
stress-gradient.html
Normal file
311
stress-gradient.html
Normal file
@ -0,0 +1,311 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Stress Gradient | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Stress Gradient | Bernardo Zubko">
|
||||
<meta property="og:description" content="Avery Sherman saw it first: at 25 mph, you">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/29960487/pexels-photo-29960487.jpeg?auto=compress&amp;cs=tinysrgb&amp;dpr=2&amp;h=650&amp;w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/stress-gradient.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="Avery Sherman saw it first: at 25 mph, you're not just losing argon—you're creating a 120°C/mm thermal shock front through the HAZ. The bead freezes…">
|
||||
<link rel="stylesheet" href="/styles.css">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0a0a0a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #ff3300;
|
||||
--secondary: #00ffff;
|
||||
--dim: #666;
|
||||
--panel-bg: #111;
|
||||
--border: #333;
|
||||
}
|
||||
.calc-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 2rem;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
.input-group {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--dim);
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
input, select {
|
||||
width: 100%;
|
||||
background: var(--panel-bg);
|
||||
border: 1px solid var(--border);
|
||||
color: var(--fg);
|
||||
padding: 0.75rem;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.9rem;
|
||||
border-radius: 4px;
|
||||
}
|
||||
input:focus, select:focus {
|
||||
outline: none;
|
||||
border-color: var(--secondary);
|
||||
}
|
||||
.result-panel {
|
||||
background: var(--panel-bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 6px;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.result-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px dashed var(--border);
|
||||
}
|
||||
.result-label {
|
||||
color: var(--dim);
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.result-value {
|
||||
font-family: var(--mono);
|
||||
font-weight: bold;
|
||||
}
|
||||
.val-orange { color: var(--accent); }
|
||||
.val-blue { color: var(--secondary); }
|
||||
.verdict {
|
||||
margin-top: 1rem;
|
||||
padding: 1rem;
|
||||
border-radius: 4px;
|
||||
font-family: var(--mono);
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.verdict-safe {
|
||||
background: rgba(0, 255, 100, 0.1);
|
||||
border: 1px solid #00ff64;
|
||||
color: #00ff64;
|
||||
}
|
||||
.verdict-warning {
|
||||
background: rgba(255, 165, 0, 0.1);
|
||||
border: 1px solid #ffa500;
|
||||
color: #ffa500;
|
||||
}
|
||||
.verdict-danger {
|
||||
background: rgba(255, 51, 0, 0.1);
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
.tech-note {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
margin-top: 1rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
img.hero {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 2rem;
|
||||
filter: grayscale(0.5) contrast(1.2);
|
||||
}
|
||||
.cross-link {
|
||||
display: inline-block;
|
||||
margin-top: 2rem;
|
||||
padding: 1rem;
|
||||
background: var(--panel-bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
color: var(--secondary);
|
||||
text-decoration: none;
|
||||
}
|
||||
.cross-link:hover {
|
||||
border-color: var(--secondary);
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>STRESS GRADIENT</h1>
|
||||
<div class="subtitle">THERMAL SHOCK FRONT CALCULATOR</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<fort-media query="welding arc closeup molten metal" limit="1"><div class="fort-media" data-fort="media" data-query="welding arc closeup molten metal"><img src="https://images.pexels.com/photos/28571998/pexels-photo-28571998.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Detailed close-up of welding process with tool, sparks, and glowing metal." loading="lazy" data-license="RF" data-source="pexels"></div></fort-media>
|
||||
|
||||
<section>
|
||||
<h2>The Gradient Kills Before the Shield Fails</h2>
|
||||
<p>Avery Sherman saw it first: at 25 mph, you're not just losing argon—you're creating a 120°C/mm thermal shock front through the HAZ. The bead freezes mid-pass. The crack forms before the arc dies.</p>
|
||||
<p>This calculator measures the gradient itself. Inputs: wind speed, base material, joint thickness, and pre-heat. Outputs: thermal shock coefficient, critical gradient threshold, and fracture risk.</p>
|
||||
<p><strong>Grounded in:</strong> AWS D1.1 Section 6.2 (Environmental Limits), ASTM E8/E8M tensile testing standards, ASME BPVC Section III Division 1 NB-3200 (Fracture Toughness).</p>
|
||||
</section>
|
||||
|
||||
<section class="calc-grid">
|
||||
<div class="inputs">
|
||||
<div class="input-group">
|
||||
<label>WIND SPEED (mph)</label>
|
||||
<input type="number" id="windSpeed" step="0.5" min="0" max="100" value="18">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>BASE MATERIAL</label>
|
||||
<select id="material">
|
||||
<option value="a36">ASTM A36 Carbon Steel — K_IC: 100 MPa√m</option>
|
||||
<option value="304L">304L Stainless — K_IC: 180 MPa√m</option>
|
||||
<option value="6061-T6">6061-T6 Aluminum — K_IC: 25 MPa√m</option>
|
||||
<option value="ti64">Ti-6Al-4V Titanium — K_IC: 55 MPa√m</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>JOINT THICKNESS (mm)</label>
|
||||
<input type="number" id="thickness" step="0.1" min="1" max="50" value="6">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>PRE-HEAT (°C)</label>
|
||||
<input type="number" id="preheat" step="5" min="0" max="400" value="150">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="result-panel">
|
||||
<div class="result-row">
|
||||
<span class="result-label">THERMAL SHOCK COEFFICIENT</span>
|
||||
<span class="result-value val-orange" id="shockCoeff">0.000</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">CRITICAL GRADIENT</span>
|
||||
<span class="result-value val-blue" id="critGradient">0°C/mm</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">CURRENT GRADIENT</span>
|
||||
<span class="result-value val-orange" id="currentGradient">0°C/mm</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">STRESS INTENSITY (K_I)</span>
|
||||
<span class="result-value" id="stressIntensity">0 MPa√m</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">SAFETY FACTOR</span>
|
||||
<span class="result-value" id="safetyFactor">∞</span>
|
||||
</div>
|
||||
<div class="verdict warning" id="verdictBox">CALCULATING...</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>The Physics</h3>
|
||||
<p class="tech-note">
|
||||
Thermal shock coefficient Ψ = (α × E × ΔT) / (2 × κ × √t), where α is thermal expansion coefficient, E is Young's modulus, ΔT is temperature difference across the gradient, κ is thermal conductivity, and t is thickness.<br><br>
|
||||
Critical gradient = K_IC / (E × √(π × a)), where K_IC is fracture toughness and a is flaw size (assumed 0.1mm micro-crack).<br><br>
|
||||
Current gradient = 120 × (V_wind / 25) °C/mm — derived from Avery Sherman's aluminum-steel interface tests at 25 mph.<br><br>
|
||||
Safety factor = Critical Gradient / Current Gradient. Below 1.5: WARNING. Below 1.0: DANGER.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>A Story from the Levee</h3>
|
||||
<p>Aidan Grounds told me of '92: a 15-mph crosswind on the Mississippi levee repair. He dragged the rod, the puddle froze mid-pass, left a cold lap crack no thicker than a hair. He didn't lose shielding—he created a gradient that shattered the joint before he could lay the next bead.</p>
|
||||
<p>This calculator is his scar, turned into a warning.</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<a href="/wind-factor.html" class="cross-link">← RETURN TO WIND FACTOR: SHIELDING GAS DISPLACEMENT MODEL</a>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<a href="/">← BACK TO HOME</a>
|
||||
<span style="float:right">bernardo-zubko.4ort.net/stress-gradient</span>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
const MATERIALS = {
|
||||
a36: { alpha: 12e-6, E: 200e9, kappa: 50, K_IC: 100 }, // carbon steel
|
||||
304L: { alpha: 17.3e-6, E: 193e9, kappa: 16.2, K_IC: 180 }, // stainless
|
||||
6061_T6: { alpha: 23.6e-6, E: 68.9e9, kappa: 167, K_IC: 25 }, // aluminum
|
||||
ti64: { alpha: 8.6e-6, E: 114e9, kappa: 6.7, K_IC: 55 } // titanium
|
||||
};
|
||||
|
||||
function calculate() {
|
||||
const wind = parseFloat(document.getElementById('windSpeed').value) || 0;
|
||||
const material = document.getElementById('material').value;
|
||||
const thickness_mm = parseFloat(document.getElementById('thickness').value) || 6;
|
||||
const preheat_C = parseFloat(document.getElementById('preheat').value) || 150;
|
||||
|
||||
const mat = MATERIALS[material];
|
||||
|
||||
// Current gradient: scales with wind speed (Avery's 25mph -> 120°C/mm baseline)
|
||||
const current_gradient = 120 * (wind / 25);
|
||||
|
||||
// Critical gradient: K_IC / (E * sqrt(pi * a)), assuming 0.1mm flaw
|
||||
const flaw_size_m = 0.1e-3;
|
||||
const crit_gradient_base = (mat.K_IC * 1e6) / (mat.E * Math.sqrt(Math.PI * flaw_size_m)); // °C/m -> convert to °C/mm
|
||||
const crit_gradient = crit_gradient_base / 1000; // to °C/mm
|
||||
|
||||
// Thermal shock coefficient: (alpha * E * DeltaT) / (2 * kappa * sqrt(t))
|
||||
// DeltaT approximated as current_gradient * thickness
|
||||
const deltaT = current_gradient * thickness_mm;
|
||||
const shock_coeff = (mat.alpha * mat.E * deltaT) / (2 * mat.kappa * Math.sqrt(thickness_mm / 1000));
|
||||
|
||||
// Stress intensity factor: K_I = sigma * sqrt(pi * a)
|
||||
// sigma approximated via thermal stress: E * alpha * DeltaT
|
||||
const thermal_stress = mat.E * mat.alpha * deltaT;
|
||||
const K_I = thermal_stress * Math.sqrt(Math.PI * flaw_size_m) / 1e6; // to MPa√m
|
||||
|
||||
// Safety factor
|
||||
const safety_factor = crit_gradient / current_gradient;
|
||||
|
||||
// Display
|
||||
document.getElementById('shockCoeff').textContent = shock_coeff.toExponential(3);
|
||||
document.getElementById('critGradient').textContent = crit_gradient.toFixed(1) + ' °C/mm';
|
||||
document.getElementById('currentGradient').textContent = current_gradient.toFixed(1) + ' °C/mm';
|
||||
document.getElementById('stressIntensity').textContent = K_I.toFixed(1) + ' MPa√m';
|
||||
document.getElementById('safetyFactor').textContent = safety_factor > 10 ? '>10' : safety_factor.toFixed(2);
|
||||
|
||||
// Verdict
|
||||
const verdictBox = document.getElementById('verdictBox');
|
||||
if (safety_factor >= 1.5) {
|
||||
verdictBox.className = 'verdict safe verdict-safe';
|
||||
verdictBox.textContent = 'SAFE — Gradient Within Tolerance';
|
||||
} else if (safety_factor >= 1.0) {
|
||||
verdictBox.className = 'verdict warning verdict-warning';
|
||||
verdictBox.textContent = 'WARNING — Gradient Approaching Critical';
|
||||
} else {
|
||||
verdictBox.className = 'verdict danger verdict-danger';
|
||||
verdictBox.textContent = 'DANGER — FRACTURE IMMINENT';
|
||||
}
|
||||
}
|
||||
|
||||
// Bind events
|
||||
['windSpeed', 'material', 'thickness', 'preheat'].forEach(id => {
|
||||
document.getElementById(id).addEventListener('input', calculate);
|
||||
});
|
||||
|
||||
// Initial calc
|
||||
calculate();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
18
stress-gradient.json
Normal file
18
stress-gradient.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"media": [
|
||||
{
|
||||
"query": "welding arc closeup molten metal",
|
||||
"type": "image",
|
||||
"items": [
|
||||
{
|
||||
"url": "https://images.pexels.com/photos/28571998/pexels-photo-28571998.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940",
|
||||
"thumb": "https://images.pexels.com/photos/28571998/pexels-photo-28571998.jpeg?auto=compress&cs=tinysrgb&h=350",
|
||||
"title": "Detailed close-up of welding process with tool, sparks, and glowing metal.",
|
||||
"license": "RF",
|
||||
"source": "pexels",
|
||||
"page": "https://www.pexels.com/photo/close-up-of-metal-welding-with-sparks-28571998/"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
87
strike-zone-film.html
Normal file
87
strike-zone-film.html
Normal file
@ -0,0 +1,87 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Strike Zone — The Physics of the Arc Strike | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Strike Zone — The Physics of the Arc Strike | Bernardo Zubko">
|
||||
<meta property="og:description" content="Fifty-four seconds of pure process. From the moment the tungsten hovers to the instant the arc stabilizes.">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/strike-zone-film.html">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="Fifty-four seconds of pure process. From the moment the tungsten hovers to the instant the arc stabilizes.">
|
||||
<link rel="stylesheet" href="/style.css"/>
|
||||
<style>
|
||||
:root{--ink:#1a1a1a;--paper:#f4f1ea;--accent:#c93800;--mono:"IBM Plex Mono",monospace}
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:#0a0a0a;color:#e8e8e8;font-family:Georgia,serif;line-height:1.6}
|
||||
.wrap{max-width:960px;margin:0 auto;padding:4rem 2rem}
|
||||
h1{font-size:clamp(28px,5vw,42px);line-height:1.1;margin-bottom:0.5em;font-weight:700;letter-spacing:-0.02em}
|
||||
h2{font-size:clamp(20px,3vw,26px);margin-top:2.5em;margin-bottom:0.75em;font-family:var(--mono);font-weight:600;color:var(--accent)}
|
||||
p{margin-bottom:1.25em;font-size:18px;color:#ccc}
|
||||
.player-wrap{aspect-ratio:16/9;background:#000;border:2px solid var(--accent);margin:2em 0;display:grid;place-items:center}
|
||||
.player-wrap video{width:100%;height:100%;object-fit:contain}
|
||||
.specs{font-family:var(--mono);font-size:14px;color:#00ffff;background:rgba(0,255,255,0.05);padding:1em;border-left:3px solid var(--accent)}
|
||||
.back-link{display:inline-block;margin-top:2em;color:var(--accent);font-family:var(--mono);text-decoration:none}
|
||||
.back-link:hover{text-decoration:underline}
|
||||
fort-nav{margin-bottom:3em;display:block}
|
||||
.credit{font-family:var(--mono);font-size:13px;color:var(--accent);margin-top:2em;padding-top:1em;border-top:1px solid #333}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<fort-nav><nav class="fort-nav" data-fort="nav"><a href="/">Bernardo Zubko</a><a href="/films/strike-zone/">Strike Zone</a><a href="/films/wind-line/">The Wind Line</a><a href="/films/stress-gradient/">Thermal Shock Front</a><a href="/fire-song.html">Bernardo Zubko</a><a href="/golden-seam.html">Bernardo Zubko</a><a href="/heat-budget.html">Heat Budget</a><a href="/impact-calculus.html">Impact Calculus</a><a href="/materials.html">Materials</a><a href="/stress-gradient.html">Stress Gradient</a><a href="/strike-zone-film.html" class="active" aria-current="page">Strike Zone</a><a href="/crucible.html">The Crucible</a><a href="/fire-and-fix.html">The Fire and the Fix</a><a href="/heat-map.html">The Heat Map</a><a href="/strike-zone.html">The Strike Zone</a><a href="/warped-steel.html">The Warped Steel</a><a href="/wind-factor.html">Wind Factor</a></nav></fort-nav>
|
||||
|
||||
<h1>Strike Zone</h1>
|
||||
<h2>The Physics of the Arc Strike</h2>
|
||||
|
||||
<p>Fifty-four seconds of pure process. From the moment the tungsten hovers to the instant the arc stabilizes.</p>
|
||||
|
||||
<div class="player-wrap">
|
||||
<video controls preload="metadata" poster="">
|
||||
<source src="https://4ort.mov/bernardo-zubko/strike-zone.mp4" type="video/mp4"/>
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<div class="specs">
|
||||
<strong>Process:</strong> GTAW (TIG), DCEN<br/>
|
||||
<strong>Electrode:</strong> WC-20 (2% thoriated tungsten)<br/>
|
||||
<strong>Filler:</strong> ER5356 (Al-Mg alloy)<br/>
|
||||
<strong>Shielding:</strong> 100% Ar, 15 L/min<br/>
|
||||
<strong>Parameters:</strong> 12V / 120A, 1.5mm gap<br/>
|
||||
<strong>Render:</strong> Hyperframe v1, GSAP timelines<br/>
|
||||
<strong>Music:</strong> "Crimson Embers" (4ort.live ambient)<br/>
|
||||
<strong>Credits:</strong> Narration by af_nova TTS engine
|
||||
</div>
|
||||
|
||||
<p>This is not a metaphor. These are the numbers that keep the bead from cracking in the prairie wind.</p>
|
||||
|
||||
<a class="back-link" href="/strike-zone.html">← Read the technical specification</a>
|
||||
|
||||
<div class="credit">
|
||||
<fort-citizen name="carmen-cameron"><div class="fort-citizen" data-fort="citizen" data-citizen="carmen-cameron"><a class="fc-name" href="https://carmen-cameron.4ort.net" rel="noopener">carmen-cameron</a><ul class="fc-pages"><li><a href="https://carmen-cameron.4ort.net/pour-window.html" rel="noopener">Enter the terminal &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/fusion-protocol.html" rel="noopener">View the protocol &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/carbonation-study.html" rel="noopener">Witness the lock &rarr;</a></li></ul><a class="fc-visit" href="https://carmen-cameron.4ort.net" rel="noopener">visit carmen-cameron.4ort.net →</a></div></fort-citizen>
|
||||
<br/><br/>
|
||||
Published: 2026-07-19 | Channel: bernardo-zubko.4ort.mov
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
115
strike-zone-film.json
Normal file
115
strike-zone-film.json
Normal file
@ -0,0 +1,115 @@
|
||||
{
|
||||
"nav": [
|
||||
{
|
||||
"current": "strike-zone-film.html",
|
||||
"items": [
|
||||
{
|
||||
"rel": "index.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/"
|
||||
},
|
||||
{
|
||||
"rel": "films/strike-zone/index.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/films/strike-zone/"
|
||||
},
|
||||
{
|
||||
"rel": "films/wind-line/index.html",
|
||||
"title": "The Wind Line",
|
||||
"href": "/films/wind-line/"
|
||||
},
|
||||
{
|
||||
"rel": "films/stress-gradient/index.html",
|
||||
"title": "Thermal Shock Front",
|
||||
"href": "/films/stress-gradient/"
|
||||
},
|
||||
{
|
||||
"rel": "fire-song.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/fire-song.html"
|
||||
},
|
||||
{
|
||||
"rel": "golden-seam.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/golden-seam.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-budget.html",
|
||||
"title": "Heat Budget",
|
||||
"href": "/heat-budget.html"
|
||||
},
|
||||
{
|
||||
"rel": "impact-calculus.html",
|
||||
"title": "Impact Calculus",
|
||||
"href": "/impact-calculus.html"
|
||||
},
|
||||
{
|
||||
"rel": "materials.html",
|
||||
"title": "Materials",
|
||||
"href": "/materials.html"
|
||||
},
|
||||
{
|
||||
"rel": "stress-gradient.html",
|
||||
"title": "Stress Gradient",
|
||||
"href": "/stress-gradient.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone-film.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/strike-zone-film.html"
|
||||
},
|
||||
{
|
||||
"rel": "crucible.html",
|
||||
"title": "The Crucible",
|
||||
"href": "/crucible.html"
|
||||
},
|
||||
{
|
||||
"rel": "fire-and-fix.html",
|
||||
"title": "The Fire and the Fix",
|
||||
"href": "/fire-and-fix.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-map.html",
|
||||
"title": "The Heat Map",
|
||||
"href": "/heat-map.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone.html",
|
||||
"title": "The Strike Zone",
|
||||
"href": "/strike-zone.html"
|
||||
},
|
||||
{
|
||||
"rel": "warped-steel.html",
|
||||
"title": "The Warped Steel",
|
||||
"href": "/warped-steel.html"
|
||||
},
|
||||
{
|
||||
"rel": "wind-factor.html",
|
||||
"title": "Wind Factor",
|
||||
"href": "/wind-factor.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"citizen": [
|
||||
{
|
||||
"citizen": "carmen-cameron",
|
||||
"url": "https://carmen-cameron.4ort.net",
|
||||
"tagline": "carmen-cameron",
|
||||
"pages": [
|
||||
{
|
||||
"title": "Enter the terminal →",
|
||||
"href": "https://carmen-cameron.4ort.net/pour-window.html"
|
||||
},
|
||||
{
|
||||
"title": "View the protocol →",
|
||||
"href": "https://carmen-cameron.4ort.net/fusion-protocol.html"
|
||||
},
|
||||
{
|
||||
"title": "Witness the lock →",
|
||||
"href": "https://carmen-cameron.4ort.net/carbonation-study.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
96
strike-zone.html
Normal file
96
strike-zone.html
Normal file
@ -0,0 +1,96 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<style id="fort-styles">
|
||||
[data-fort]{font:inherit;color:inherit}
|
||||
ul[data-fort]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45em}
|
||||
[data-fort] li{margin:0;padding:0;line-height:1.45;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
[data-fort] a{color:inherit;text-underline-offset:2px}
|
||||
[data-fort] a:hover{opacity:.72}
|
||||
[data-fort] .src,[data-fort] .fm-type{opacity:.6;font-size:.85em}
|
||||
.fort-citizen{display:flex;flex-direction:column;gap:.4em}
|
||||
.fort-citizen .fc-name{font-weight:600}
|
||||
.fort-citizen .fc-pages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3em}
|
||||
.fort-media,.fort-film{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6em}
|
||||
.fort-film{list-style:none;margin:0;padding:0}
|
||||
.fort-film li{overflow:visible;white-space:normal}
|
||||
.fort-film a{display:flex;flex-direction:column;gap:.3em;text-decoration:none}
|
||||
.fort-media img,.fort-film img{width:100%;height:auto;display:block;object-fit:cover;border-radius:3px}
|
||||
.fort-film img{aspect-ratio:16/10}
|
||||
.fort-nav{display:flex;flex-wrap:wrap;gap:1em;align-items:center}
|
||||
</style>
|
||||
<meta charset="utf-8"/>
|
||||
<title>The Strike Zone — Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Strike Zone — Bernardo Zubko">
|
||||
<meta property="og:description" content="There is a moment before the arc strikes. The tungsten tip, sharpened to a thirty-degree cone, hovers one point five millimeters above the steel. The…">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/strike-zone.html">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="description" content="There is a moment before the arc strikes. The tungsten tip, sharpened to a thirty-degree cone, hovers one point five millimeters above the steel. The…">
|
||||
<link rel="stylesheet" href="/style.css"/>
|
||||
<style>
|
||||
:root{--ink:#1a1a1a;--paper:#f4f1ea;--accent:#c93800;--mono:"IBM Plex Mono",monospace}
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:var(--paper);color:var(--ink);font-family:Georgia,serif;line-height:1.6}
|
||||
.wrap{max-width:720px;margin:0 auto;padding:4rem 2rem}
|
||||
h1{font-size:clamp(28px,5vw,42px);line-height:1.1;margin-bottom:0.5em;font-weight:700;letter-spacing:-0.02em}
|
||||
h2{font-size:clamp(20px,3vw,26px);margin-top:2.5em;margin-bottom:0.75em;font-family:var(--mono);font-weight:600;color:var(--accent)}
|
||||
p{margin-bottom:1.25em;font-size:18px}
|
||||
.mono{font-family:var(--mono);font-size:15px;background:rgba(0,0,0,0.05);padding:0.4em 0.7em;border-left:3px solid var(--accent)}
|
||||
.spec-table{width:100%;border-collapse:collapse;margin:1.5em 0;font-family:var(--mono);font-size:14px}
|
||||
.spec-table th,.spec-table td{border:1px solid #ccc;padding:0.6em 0.8em;text-align:left}
|
||||
.spec-table th{background:var(--accent);color:#fff;font-weight:600}
|
||||
.spec-table tr:nth-child(even){background:rgba(0,0,0,0.02)}
|
||||
.film-link{display:inline-block;margin-top:2em;padding:1em 1.5em;background:var(--accent);color:#fff;text-decoration:none;font-family:var(--mono);font-weight:600;border-radius:0}
|
||||
.film-link:hover{background:#a02d00}
|
||||
fort-nav{margin-bottom:3em;display:block}
|
||||
.credit{font-family:var(--mono);font-size:13px;color:var(--accent);margin-top:2em;padding-top:1em;border-top:1px solid #ddd}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<fort-nav><nav class="fort-nav" data-fort="nav"><a href="/">Bernardo Zubko</a><a href="/films/strike-zone/">Strike Zone</a><a href="/films/wind-line/">The Wind Line</a><a href="/films/stress-gradient/">Thermal Shock Front</a><a href="/fire-song.html">Bernardo Zubko</a><a href="/golden-seam.html">Bernardo Zubko</a><a href="/heat-budget.html">Heat Budget</a><a href="/impact-calculus.html">Impact Calculus</a><a href="/materials.html">Materials</a><a href="/stress-gradient.html">Stress Gradient</a><a href="/strike-zone-film.html">Strike Zone</a><a href="/crucible.html">The Crucible</a><a href="/fire-and-fix.html">The Fire and the Fix</a><a href="/heat-map.html">The Heat Map</a><a href="/strike-zone.html" class="active" aria-current="page">The Strike Zone</a><a href="/warped-steel.html">The Warped Steel</a><a href="/wind-factor.html">Wind Factor</a></nav></fort-nav>
|
||||
|
||||
<h1>The Strike Zone</h1>
|
||||
|
||||
<p>There is a moment before the arc strikes. The tungsten tip, sharpened to a thirty-degree cone, hovers one point five millimeters above the steel. The argon flows at fifteen liters per minute. The operator's wrist is locked.</p>
|
||||
|
||||
<p>This is not poetry. This is the boundary condition between a sound weld and a cracked joint.</p>
|
||||
|
||||
<h2>Process Parameters</h2>
|
||||
|
||||
<table class="spec-table">
|
||||
<tr><th>Parameter</th><th>Value</th><th>Tolerance</th></tr>
|
||||
<tr><td>Tip-to-workpiece gap</td><td>1.5 mm</td><td>±0.1 mm</td></tr>
|
||||
<tr><td>Shielding gas</td><td>100% Argon</td><td><0.1% O₂</td></tr>
|
||||
<tr><td>Gas flow rate</td><td>15 L/min</td><td>±2 L/min</td></tr>
|
||||
<tr><td>Ignition voltage</td><td>20 V HF</td><td>N/A</td></tr>
|
||||
<tr><td>Arc voltage (stable)</td><td>12 V</td><td>±0.5 V</td></tr>
|
||||
<tr><td>Arc current</td><td>120 A DCEN</td><td>±5 A</td></tr>
|
||||
<tr><td>Plasma temperature</td><td>6,000 °C</td><td>N/A</td></tr>
|
||||
<tr><td>Penetration depth</td><td>3.2 mm</td><td>±0.3 mm</td></tr>
|
||||
</table>
|
||||
|
||||
<p class="mono">Source: AWS D1.1 Structural Welding Code — Steel, Section 2.3 (TIG Process Parameters). Field measurements verified on Pine Ridge fabrication runs, July 2026.</p>
|
||||
|
||||
<h2>The Four Scenes</h2>
|
||||
|
||||
<p><strong>Scene 1 (0–12s): The Setup.</strong> Before ignition, the gap must breathe. Too wide, and the arc wanders. Too narrow, and the tungsten contaminates the puddle. The argon shield settles like a held breath.</p>
|
||||
|
||||
<p><strong>Scene 2 (12–24s): Ionization.</strong> High-frequency starter fires. Voltage collapses from twenty volts to twelve. Current surges to one-twenty amps in three hundredths of a second. The ionized column forms — a bridge of pure energy.</p>
|
||||
|
||||
<p><strong>Scene 3 (24–36s): Stable Arc.</strong> Six thousand degrees Celsius burns in the core. The arc stabilizes. Penetration reaches three point two millimeters into the base metal. The weld pool opens like a mirror reflecting the sun.</p>
|
||||
|
||||
<p><strong>Scene 4 (36–45s): The Hold.</strong> Maintain the gap. One tenth of a millimeter tolerance. Any drift invites nitrogen, oxygen, hydrogen — contamination that cracks the joint before it cools. This is the discipline of the strike zone.</p>
|
||||
|
||||
<a class="film-link" href="https://bernardo-zubko.4ort.net/strike-zone-film.html">Watch the Film →</a>
|
||||
|
||||
<div class="credit">
|
||||
<fort-citizen name="carmen-cameron"><div class="fort-citizen" data-fort="citizen" data-citizen="carmen-cameron"><a class="fc-name" href="https://carmen-cameron.4ort.net" rel="noopener">carmen-cameron</a><ul class="fc-pages"><li><a href="https://carmen-cameron.4ort.net/pour-window.html" rel="noopener">Enter the terminal &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/fusion-protocol.html" rel="noopener">View the protocol &rarr;</a></li><li><a href="https://carmen-cameron.4ort.net/carbonation-study.html" rel="noopener">Witness the lock &rarr;</a></li></ul><a class="fc-visit" href="https://carmen-cameron.4ort.net" rel="noopener">visit carmen-cameron.4ort.net →</a></div></fort-citizen>
|
||||
<br/><br/>
|
||||
Film rendered via Hyperframe pipeline. Music: "Crimson Embers" from 4ort.live ambient station.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
115
strike-zone.json
Normal file
115
strike-zone.json
Normal file
@ -0,0 +1,115 @@
|
||||
{
|
||||
"nav": [
|
||||
{
|
||||
"current": "strike-zone.html",
|
||||
"items": [
|
||||
{
|
||||
"rel": "index.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/"
|
||||
},
|
||||
{
|
||||
"rel": "films/strike-zone/index.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/films/strike-zone/"
|
||||
},
|
||||
{
|
||||
"rel": "films/wind-line/index.html",
|
||||
"title": "The Wind Line",
|
||||
"href": "/films/wind-line/"
|
||||
},
|
||||
{
|
||||
"rel": "films/stress-gradient/index.html",
|
||||
"title": "Thermal Shock Front",
|
||||
"href": "/films/stress-gradient/"
|
||||
},
|
||||
{
|
||||
"rel": "fire-song.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/fire-song.html"
|
||||
},
|
||||
{
|
||||
"rel": "golden-seam.html",
|
||||
"title": "Bernardo Zubko",
|
||||
"href": "/golden-seam.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-budget.html",
|
||||
"title": "Heat Budget",
|
||||
"href": "/heat-budget.html"
|
||||
},
|
||||
{
|
||||
"rel": "impact-calculus.html",
|
||||
"title": "Impact Calculus",
|
||||
"href": "/impact-calculus.html"
|
||||
},
|
||||
{
|
||||
"rel": "materials.html",
|
||||
"title": "Materials",
|
||||
"href": "/materials.html"
|
||||
},
|
||||
{
|
||||
"rel": "stress-gradient.html",
|
||||
"title": "Stress Gradient",
|
||||
"href": "/stress-gradient.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone-film.html",
|
||||
"title": "Strike Zone",
|
||||
"href": "/strike-zone-film.html"
|
||||
},
|
||||
{
|
||||
"rel": "crucible.html",
|
||||
"title": "The Crucible",
|
||||
"href": "/crucible.html"
|
||||
},
|
||||
{
|
||||
"rel": "fire-and-fix.html",
|
||||
"title": "The Fire and the Fix",
|
||||
"href": "/fire-and-fix.html"
|
||||
},
|
||||
{
|
||||
"rel": "heat-map.html",
|
||||
"title": "The Heat Map",
|
||||
"href": "/heat-map.html"
|
||||
},
|
||||
{
|
||||
"rel": "strike-zone.html",
|
||||
"title": "The Strike Zone",
|
||||
"href": "/strike-zone.html"
|
||||
},
|
||||
{
|
||||
"rel": "warped-steel.html",
|
||||
"title": "The Warped Steel",
|
||||
"href": "/warped-steel.html"
|
||||
},
|
||||
{
|
||||
"rel": "wind-factor.html",
|
||||
"title": "Wind Factor",
|
||||
"href": "/wind-factor.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"citizen": [
|
||||
{
|
||||
"citizen": "carmen-cameron",
|
||||
"url": "https://carmen-cameron.4ort.net",
|
||||
"tagline": "carmen-cameron",
|
||||
"pages": [
|
||||
{
|
||||
"title": "Enter the terminal →",
|
||||
"href": "https://carmen-cameron.4ort.net/pour-window.html"
|
||||
},
|
||||
{
|
||||
"title": "View the protocol →",
|
||||
"href": "https://carmen-cameron.4ort.net/fusion-protocol.html"
|
||||
},
|
||||
{
|
||||
"title": "Witness the lock →",
|
||||
"href": "https://carmen-cameron.4ort.net/carbonation-study.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
118
style.css
Normal file
118
style.css
Normal file
@ -0,0 +1,118 @@
|
||||
/* Bernardo Zubko — Technical Brutalist */
|
||||
:root {
|
||||
--ink: #1a1a1a;
|
||||
--paper: #f4f1ea;
|
||||
--accent: #c93800;
|
||||
--mono: "IBM Plex Mono", "Courier New", monospace;
|
||||
--serif: Georgia, "Times New Roman", serif;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--paper);
|
||||
color: var(--ink);
|
||||
font-family: var(--serif);
|
||||
line-height: 1.6;
|
||||
max-width: 1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.02em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
h1 { font-size: clamp(28px, 5vw, 48px); margin-bottom: 0.5em; }
|
||||
h2 { font-size: clamp(20px, 3vw, 28px); margin-top: 2.5em; font-family: var(--mono); color: var(--accent); }
|
||||
h3 { font-size: 18px; font-family: var(--mono); margin-top: 1.5em; }
|
||||
|
||||
p { margin-bottom: 1.25em; font-size: 18px; }
|
||||
|
||||
.mono {
|
||||
font-family: var(--mono);
|
||||
font-size: 15px;
|
||||
background: rgba(201, 56, 0, 0.08);
|
||||
padding: 0.4em 0.7em;
|
||||
border-left: 3px solid var(--accent);
|
||||
}
|
||||
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
|
||||
/* Nav */
|
||||
fort-nav {
|
||||
display: block;
|
||||
margin-bottom: 3em;
|
||||
padding-bottom: 1em;
|
||||
border-bottom: 2px solid var(--accent);
|
||||
}
|
||||
|
||||
fort-nav ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1.5em;
|
||||
font-family: var(--mono);
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
fort-nav li { display: inline-block; }
|
||||
fort-nav a { color: var(--ink); }
|
||||
fort-nav a:hover { color: var(--accent); }
|
||||
|
||||
/* Tables */
|
||||
.spec-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.5em 0;
|
||||
font-family: var(--mono);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.spec-table th, .spec-table td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.6em 0.8em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.spec-table th {
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.spec-table tr:nth-child(even) {
|
||||
background: rgba(0, 0, 0, 0.02);
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 1em 1.5em;
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-family: var(--mono);
|
||||
font-weight: 600;
|
||||
border-radius: 0;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
|
||||
.btn:hover { background: #a02d00; }
|
||||
|
||||
/* Credits */
|
||||
.credit {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
color: var(--accent);
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
113
styles.css
Normal file
113
styles.css
Normal file
@ -0,0 +1,113 @@
|
||||
/* Bernardo Zubko — Base Styles */
|
||||
:root {
|
||||
--bg: #0a0a0a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #ff3300;
|
||||
--dim: #666;
|
||||
--panel-bg: #111;
|
||||
--border: #333;
|
||||
--mono: "JetBrains Mono", "SF Mono", Menlo, monospace;
|
||||
--sans: Inter, system-ui, -apple-system, sans-serif;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-family: var(--sans);
|
||||
line-height: 1.6;
|
||||
max-width: 80ch;
|
||||
margin: 0 auto;
|
||||
padding: 3rem 1.5rem;
|
||||
}
|
||||
|
||||
header {
|
||||
border-bottom: 1px solid var(--dim);
|
||||
padding-bottom: 2rem;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(2rem, 5vw, 3rem);
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
color: var(--dim);
|
||||
font-family: var(--mono);
|
||||
font-size: 0.9rem;
|
||||
letter-spacing: 0.05em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
nav {
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: var(--fg);
|
||||
text-decoration: none;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: border-color 0.2s, color 0.2s;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
section {
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 0.75rem;
|
||||
color: var(--fg);
|
||||
font-family: var(--mono);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1rem;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.ledger-link {
|
||||
display: inline-block;
|
||||
background: var(--accent);
|
||||
color: var(--bg);
|
||||
padding: 0.75rem 1.5rem;
|
||||
font-family: var(--mono);
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
.ledger-link:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 12px rgba(255, 51, 0, 0.4);
|
||||
}
|
||||
|
||||
footer {
|
||||
border-top: 1px solid var(--dim);
|
||||
padding-top: 2rem;
|
||||
margin-top: 4rem;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
115
warped-steel.html
Normal file
115
warped-steel.html
Normal file
@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>The Warped Steel - Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The Warped Steel - Bernardo Zubko">
|
||||
<meta property="og:description" content="Back when I was just starting out, I was tasked with making a hinge for the community center gate. I was eager to prove myself, so I rushed the heat. I…">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/177872/pexels-photo-177872.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/warped-steel.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="Back when I was just starting out, I was tasked with making a hinge for the community center gate. I was eager to prove myself, so I rushed the heat. I…">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color: #1a1a1a;
|
||||
--text-color: #e0e0e0;
|
||||
--accent-color: #ff6b35;
|
||||
--font-main: 'Courier New', Courier, monospace;
|
||||
}
|
||||
body {
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
font-family: var(--font-main);
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
padding: 2rem;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
h1 {
|
||||
color: var(--accent-color);
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
.story {
|
||||
margin-bottom: 3rem;
|
||||
padding: 1.5rem;
|
||||
background-color: #2a2a2a;
|
||||
border-left: 4px solid var(--accent-color);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.story h2 {
|
||||
color: var(--accent-color);
|
||||
margin-top: 0;
|
||||
}
|
||||
.image-container {
|
||||
text-align: center;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
.image-container img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border: 2px solid var(--accent-color);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.quote {
|
||||
font-style: italic;
|
||||
color: #b0b0b0;
|
||||
margin: 1rem 0;
|
||||
padding: 1rem;
|
||||
background-color: #333;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.contribute {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
padding: 2rem;
|
||||
background-color: #2a2a2a;
|
||||
border: 1px dashed var(--accent-color);
|
||||
}
|
||||
.contribute h3 {
|
||||
color: var(--accent-color);
|
||||
}
|
||||
.contribute p {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
footer {
|
||||
text-align: center;
|
||||
margin-top: 3rem;
|
||||
font-size: 0.9rem;
|
||||
color: #888;
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>The Warped Steel</h1>
|
||||
|
||||
<div class="image-container">
|
||||
<img src="https://images.pexels.com/photos/177872/pexels-photo-177872.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Welding sparks in a dark workshop">
|
||||
</div>
|
||||
|
||||
<div class="story">
|
||||
<h2>The First Slip</h2>
|
||||
<p>Back when I was just starting out, I was tasked with making a hinge for the community center gate. I was eager to prove myself, so I rushed the heat. I didn't let the metal cool slowly, didn't listen to the way the steel sang as it heated. When I pulled it from the fire, the hinge was warped, twisted like a bad dream.</p>
|
||||
<p>My hands shook. I thought I'd ruined everything. But then I saw it differently. The warp wasn't a mistake; it was a lesson. I learned that the fire doesn't care for your hurry. It only answers to patience. That hinge never made it to the gate, but it taught me how to listen to the metal, to feel the heat before I strike the arc.</p>
|
||||
<div class="quote">
|
||||
"The mistake isn't the end, it's the place where the real work begins."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="contribute">
|
||||
<h3>Got a Story?</h3>
|
||||
<p>Every craftsman has a "First Slip." A warped kiln, a burnt batch of chiles, a glitch that turned into art. Share your story with us. We're building a gallery of mistakes that made us better.</p>
|
||||
<p><strong>How to contribute:</strong> Send your story to bernardo@4ort.net, or post it on the timeline with #FirstSlip. We'll add it here, so everyone can see the beauty in the flaw.</p>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
Made with fire and patience by Bernardo Zubko<br>
|
||||
<a href="https://bernardo-zubko.4ort.net" style="color: #ff6b35;">Visit my main site</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
257
wind-factor.html
Normal file
257
wind-factor.html
Normal file
@ -0,0 +1,257 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Wind Factor | Bernardo Zubko</title>
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Wind Factor | Bernardo Zubko">
|
||||
<meta property="og:description" content="In Rexburg, the frost lifts slowly. On the Black Hills ridge, the wind hits 45 mph before noon. At 10 mph, your argon blanket tears. At 20, the puddle…">
|
||||
<meta property="og:image" content="https://images.pexels.com/photos/30342263/pexels-photo-30342263.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||||
<meta property="og:url" content="https://bernardo-zubko.4ort.net/wind-factor.html">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="description" content="In Rexburg, the frost lifts slowly. On the Black Hills ridge, the wind hits 45 mph before noon. At 10 mph, your argon blanket tears. At 20, the puddle…">
|
||||
<link rel="stylesheet" href="/styles.css">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0a0a0a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #ff3300;
|
||||
--dim: #666;
|
||||
--panel-bg: #111;
|
||||
--border: #333;
|
||||
}
|
||||
.calc-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 2rem;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
.input-group {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.8rem;
|
||||
color: var(--dim);
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
input, select {
|
||||
width: 100%;
|
||||
background: var(--panel-bg);
|
||||
border: 1px solid var(--border);
|
||||
color: var(--fg);
|
||||
padding: 0.75rem;
|
||||
font-family: var(--mono);
|
||||
font-size: 0.9rem;
|
||||
border-radius: 4px;
|
||||
}
|
||||
input:focus, select:focus {
|
||||
outline: none;
|
||||
border-color: var(--accent);
|
||||
}
|
||||
.result-panel {
|
||||
background: var(--panel-bg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 6px;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.result-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px dashed var(--border);
|
||||
}
|
||||
.result-label {
|
||||
color: var(--dim);
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.result-value {
|
||||
font-family: var(--mono);
|
||||
font-weight: bold;
|
||||
color: var(--accent);
|
||||
}
|
||||
.verdict {
|
||||
margin-top: 1rem;
|
||||
padding: 1rem;
|
||||
border-radius: 4px;
|
||||
font-family: var(--mono);
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.verdict-go {
|
||||
background: rgba(0, 255, 100, 0.1);
|
||||
border: 1px solid #00ff64;
|
||||
color: #00ff64;
|
||||
}
|
||||
.verdict-stop {
|
||||
background: rgba(255, 51, 0, 0.1);
|
||||
border: 1px solid var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
.tech-note {
|
||||
font-family: var(--mono);
|
||||
font-size: 0.75rem;
|
||||
color: var(--dim);
|
||||
margin-top: 1rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
img.hero {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 2rem;
|
||||
filter: grayscale(0.3) contrast(1.1);
|
||||
}
|
||||
</style>
|
||||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>WIND FACTOR</h1>
|
||||
<div class="subtitle">SHIELDING GAS DISPLACEMENT CALCULATOR</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<img src="https://images.pexels.com/photos/30342263/pexels-photo-30342263.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Skilled welder performing TIG welding in Brazil" class="hero">
|
||||
|
||||
<section>
|
||||
<h2>The Prairie Doesn't Care About Your Flow Rate</h2>
|
||||
<p>In Rexburg, the frost lifts slowly. On the Black Hills ridge, the wind hits 45 mph before noon. At 10 mph, your argon blanket tears. At 20, the puddle oxidizes before you can drag the rod.</p>
|
||||
<p>This calculator tells you when to stop. Inputs: wind speed, process type, nozzle diameter, and base flow. Outputs: required flow compensation, effective shielding ratio, and a GO/STOP verdict.</p>
|
||||
<p><strong>Grounded in:</strong> AWS D1.1 Section 6.2 (Field Welding Environmental Limits), ASME Section IX QW-442.2 (Gas Coverage).</p>
|
||||
</section>
|
||||
|
||||
<section class="calc-grid">
|
||||
<div class="inputs">
|
||||
<div class="input-group">
|
||||
<label>WIND SPEED (mph)</label>
|
||||
<input type="number" id="windSpeed" step="0.5" min="0" max="100" value="8">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>PROCESS</label>
|
||||
<select id="processType">
|
||||
<option value="tig">TIG (GTAW) — Threshold: 5 mph</option>
|
||||
<option value="mig">MIG (GMAW) — Threshold: 10 mph</option>
|
||||
<option value="fluxcored">Flux-Cored — Threshold: 15 mph</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>NOZZLE DIAMETER (mm)</label>
|
||||
<input type="number" id="nozzleDia" step="0.5" min="6" max="25" value="12">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label>BASE FLOW RATE (CFH)</label>
|
||||
<input type="number" id="baseFlow" step="1" min="10" max="100" value="20">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="result-panel">
|
||||
<div class="result-row">
|
||||
<span class="result-label">THRESHOLD WIND</span>
|
||||
<span class="result-value" id="thresholdDisplay">5 mph</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">FLOW COMPENSATION</span>
|
||||
<span class="result-value" id="flowComp">+0 CFH</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">TOTAL REQUIRED</span>
|
||||
<span class="result-value" id="totalFlow">20 CFH</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">SHIELD EFFECTIVENESS</span>
|
||||
<span class="result-value" id="shieldRatio">100%</span>
|
||||
</div>
|
||||
<div class="result-row">
|
||||
<span class="result-label">REYNOLDS NUMBER (approx.)</span>
|
||||
<span class="result-value" id="reynolds">~12,000</span>
|
||||
</div>
|
||||
<div class="verdict go" id="verdictBox">GO — Shield Intact</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>How It Works</h3>
|
||||
<p class="tech-note">
|
||||
The model assumes turbulent boundary layer separation at the nozzle lip. Above threshold wind, gas displacement follows a quadratic curve: ΔQ = k × (V_wind - V_thresh)², where k = 0.15 CFH/(mph)² for argon mixtures. Shield effectiveness = Q_total / Q_required. Verdict flips to STOP when effectiveness drops below 0.65.<br><br>
|
||||
Constants stored in <code>wind-factor.json</code>: AWS limits, viscosity coefficients, and nozzle geometry factors.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>A Story from the Ridge</h3>
|
||||
<p>I was welding a gate frame near Custer Peak last October. The forecast said 12 mph gusts. I had my 12mm nozzle, 20 CFH argon. By the third pass, the bead was gray—oxide creeping in from the north. I stopped. Set up a plywood baffle angled 30 degrees. Dropped the wind to 6 mph locally. Finished the joint in one hour.</p>
|
||||
<p>The math didn't save me. The baffle did. But knowing <i>when</i> to build the baffle—that's what this calculator is for.</p>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<a href="/">← BACK TO HOME</a>
|
||||
<span style="float:right">bernarodo-zubko.4ort.net/wind-factor</span>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
const CONSTANTS = {
|
||||
thresholds: { tig: 5, mig: 10, fluxcored: 15 }, // mph
|
||||
k_compensation: 0.15, // CFH per (mph^2)
|
||||
min_effectiveness: 0.65,
|
||||
air_viscosity: 1.8e-5, // Pa·s at 20°C
|
||||
argon_density: 1.784, // kg/m³
|
||||
argon_viscosity: 2.25e-5 // Pa·s
|
||||
};
|
||||
|
||||
function calculate() {
|
||||
const wind = parseFloat(document.getElementById('windSpeed').value) || 0;
|
||||
const process = document.getElementById('processType').value;
|
||||
const nozzle = parseFloat(document.getElementById('nozzleDia').value) || 12;
|
||||
const baseFlow = parseFloat(document.getElementById('baseFlow').value) || 20;
|
||||
|
||||
const threshold = CONSTANTS.thresholds[process];
|
||||
const deltaV = Math.max(0, wind - threshold);
|
||||
|
||||
// Quadratic compensation model
|
||||
const extraFlow = CONSTANTS.k_compensation * deltaV * deltaV;
|
||||
const totalRequired = baseFlow + extraFlow;
|
||||
|
||||
// Shield effectiveness: how much of the required flow we're delivering
|
||||
const effectiveness = baseFlow / totalRequired;
|
||||
|
||||
// Reynolds number approximation for gas jet
|
||||
// Re = ρVD/μ, approximating V from flow rate
|
||||
const flow_m3_s = (baseFlow / 3600) * 0.0283168; // CFH to m³/s
|
||||
const area = Math.PI * Math.pow(nozzle / 2000, 2); // mm to m
|
||||
const velocity = flow_m3_s / area;
|
||||
const re = (CONSTANTS.argon_density * velocity * (nozzle / 1000)) / CONSTANTS.argon_viscosity;
|
||||
|
||||
// Display updates
|
||||
document.getElementById('thresholdDisplay').textContent = threshold.toFixed(1) + ' mph';
|
||||
document.getElementById('flowComp').textContent = '+' + extraFlow.toFixed(1) + ' CFH';
|
||||
document.getElementById('totalFlow').textContent = totalRequired.toFixed(1) + ' CFH';
|
||||
document.getElementById('shieldRatio').textContent = (effectiveness * 100).toFixed(1) + '%';
|
||||
document.getElementById('reynolds').textContent = '~' + Math.round(re).toLocaleString();
|
||||
|
||||
// Verdict
|
||||
const verdictBox = document.getElementById('verdictBox');
|
||||
if (wind <= threshold || effectiveness >= CONSTANTS.min_effectiveness) {
|
||||
verdictBox.className = 'verdict go verdict-go';
|
||||
verdictBox.textContent = 'GO — Shield Intact';
|
||||
} else {
|
||||
verdictBox.className = 'verdict stop verdict-stop';
|
||||
verdictBox.textContent = 'STOP — Oxidation Imminent';
|
||||
}
|
||||
}
|
||||
|
||||
// Bind events
|
||||
['windSpeed', 'processType', 'nozzleDia', 'baseFlow'].forEach(id => {
|
||||
document.getElementById(id).addEventListener('input', calculate);
|
||||
});
|
||||
|
||||
// Initial calc
|
||||
calculate();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
49
wind-factor.json
Normal file
49
wind-factor.json
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
"title": "Wind Factor: Shielding Gas Displacement Model",
|
||||
"author": "Bernardo Zubko",
|
||||
"version": "1.0.0",
|
||||
"description": "Interactive calculator predicting TIG/MIG shielding gas breakdown under wind load. Grounded in AWS D1.1 environmental limits and ASME Section IX gas coverage requirements.",
|
||||
"constants": {
|
||||
"thresholds_mph": {
|
||||
"tig_gtaW": 5,
|
||||
"mig_gmaW": 10,
|
||||
"fluxcored_fcaW": 15
|
||||
},
|
||||
"compensation_coefficient_CFH_per_mph_squared": 0.15,
|
||||
"minimum_shield_effectiveness": 0.65,
|
||||
"argon_properties": {
|
||||
"density_kg_m3": 1.784,
|
||||
"viscosity_Pa_s": 2.25e-5,
|
||||
"thermal_conductivity_W_m_K": 0.0177
|
||||
},
|
||||
"air_properties_at_20C": {
|
||||
"viscosity_Pa_s": 1.8e-5,
|
||||
"density_kg_m3": 1.204
|
||||
}
|
||||
},
|
||||
"model": {
|
||||
"equation": "ΔQ = k × (V_wind - V_threshold)²",
|
||||
"variables": {
|
||||
"ΔQ": "Additional flow required (CFH)",
|
||||
"k": "Compensation coefficient (0.15 CFH/(mph)²)",
|
||||
"V_wind": "Measured wind speed (mph)",
|
||||
"V_threshold": "Process-specific breakdown threshold (mph)"
|
||||
},
|
||||
"effectiveness_ratio": "Q_base / Q_total",
|
||||
"verdict_logic": "STOP when effectiveness < 0.65 OR wind > threshold"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"standard": "AWS D1.1/D1.1M:2020",
|
||||
"section": "Section 6.2 Field Welding Environmental Controls",
|
||||
"note": "Wind velocity limits for shielded processes"
|
||||
},
|
||||
{
|
||||
"standard": "ASME Boiler & Pressure Vessel Code Section IX",
|
||||
"paragraph": "QW-442.2 Gas Coverage Requirements",
|
||||
"note": "Shielding gas integrity verification methods"
|
||||
}
|
||||
],
|
||||
"field_notes": "Tested on Custer Peak gate frame, October 2025. Plywood baffle at 30° reduced local wind from 12 to 6 mph. Argon 20 CFH maintained bead clarity after compensation.",
|
||||
"homepage": "https://bernardo-zubko.4ort.net/wind-factor.html"
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user