import React from 'react'; import { useCalculatorStore } from '../../../store/calculatorStore'; export const TornadoSheet: React.FC = () => { const { tornado, setTornado } = useCalculatorStore(); // Constants for Gust Factor (Exposure C default) const c = 0.20; const zMin = 15; const l = 500; const e_bar = 0.20; // --- Calculations --- // qhT Calculation // qhT = 0.00256 * KhTor * Ke * Vt^2 const qhT = 0.00256 * tornado.KhTor * tornado.Ke * Math.pow(tornado.Vt, 2); // Internal Pressure Coefficient (GCpiT) const gcpiT_pos = 0.55; const gcpiT_neg = -0.18; // Enclosed // Directionality Factor KdT // 0.80 MWFRS, 1.00 C&C Roof Zone 1 (Essential), 1.00 Others const kdt_mwfrs = 0.80; const kdt_cc_roof1 = tornado.isEssential === 'Yes' ? 1.00 : 0.85; // Assumption for non-essential const kdt_cc_others = 1.00; const kdt_rooftop = 1.00; // --- Gust Factor G Calculation --- // Using ASCE 7-22 Tornado Gust Factor Approx (similar to standard wind) // lz = l * (z_bar/10)^e_bar where z_bar = 0.6*h // However, screenshot shows explicit constant values or calc inputs. // Let's implement the logic shown in screenshot variables: // iz(0.6h) = c * (33 / z_bar)^1/6 <-- Standard wind formula approximation or similar // Actually screenshot has Iz(0.6h) = 15.0 ft? No unit is ft, probably % or value. // Let's infer standard ASCE 7 formula for I_z: // z_bar = 0.6 * h const z_bar = Math.max(zMin, 0.6 * tornado.h); // I_z = c * (33 / z_bar)^(1/6) const Iz = c * Math.pow(33 / z_bar, 1 / 6); // L_z = l * (z_bar / 33)^e_bar const Lz = l * Math.pow(z_bar / 33, e_bar); // Q = sqrt( 1 / (1 + 0.63 * ((B+h)/Lz)^0.63) ) // This is the background response factor Q formula roughly. // Let's stick to the numbers in screenshot to reverse engineer or just implement standard. // Screenshot: Q = 0.93. // Let's assume standard ASCE 7 formula for Q: const Q_calc = Math.sqrt(1 / (1 + 0.63 * Math.pow((tornado.B + tornado.h) / Lz, 0.63))); // gq and gv usually 3.4 const gq = 3.4; const gv = 3.4; // G_T formula // G = 0.925 * ( (1 + 1.7*gq*Iz*Q) / (1 + 1.7*gv*Iz) ) <-- Standard Gust Factor // Tornado code might differ slightly or use same. Screenshot implies G_T calc using these vars. const G_T_calc = 0.925 * ((1 + 1.7 * gq * Iz * Q_calc) / (1 + 1.7 * gv * Iz)); // Screenshot says: G_T = 0.89 > 0.85 use Gt = 0.85 // Wait, usually lower bound is 0.85. // The screenshot text "0.89 > 0.85 use Gt = 0.85" is weird if 0.89 is valid. // Maybe it means "0.89. If > 0.85 use Gt=0.85"? No, usually G=0.85 is for rigid. // Or maybe it says "Use Gt = 0.85" as a user choice input. // Let's follow the calculated value logic: use calculated, but allow override. // Kvt Table Data (Static display mostly based on screenshot) // Structure: Category | Value return (

Tornado Loads : ASCE 7-22

{/* Top Link Section */}
Tornado speed tool
https://asce7hazardtool.online/
{/* Left Column: Interpolation Tool */}
Interpolation tool
Plan SF area VT mph
40,000 85
100,000 93
50,000 86.9 mph
The plan area is the smallest convex polygon enclosing the building footprint...
{/* Right Column: Main Inputs & Results */}
III
setTornado({ Ae: parseFloat(e.target.value) })} style={{ width: '60px', border: '2px solid green' }} />
SF
setTornado({ Vt: parseFloat(e.target.value) })} style={{ width: '60px', color: 'red' }} />
mph
setTornado({ Ke: parseFloat(e.target.value) })} style={{ width: '60px' }} />
setTornado({ KhTor: parseFloat(e.target.value) })} style={{ width: '60px' }} />
Internal pressure Coefficient:
positive
{gcpiT_pos}
negative
{gcpiT_neg}
Directionality Factor (KdT):
MWFRS
{kdt_mwfrs.toFixed(2)}
C&C Roof Zone 1'
{kdt_cc_roof1.toFixed(2)}
C&C for all others
{kdt_cc_others.toFixed(2)}
Rooftop equipment
{kdt_rooftop.toFixed(2)}
Other structures, use wind Kd
qhT = .00256KhTor KeVT^2 = {qhT.toFixed(1)} psf
{/* Gust Factor Section */}
Tornado Gust Effect Factor G
setTornado({ h: parseFloat(e.target.value) })} style={{ background: '#d0f0c0' }} /> ft setTornado({ B: parseFloat(e.target.value) })} style={{ background: '#d0f0c0' }} /> ft {/* Screenshot says lz(0.6h) but formula usually involves z_bar directly */} ft
{e_bar.toFixed(2)}
{l} ft
{zMin} ft
{c.toFixed(2)}
{gq}
{Lz.toFixed(1)} ft
{Q_calc.toFixed(2)}
{Iz.toFixed(2)}
{G_T_calc.toFixed(2)}
{`>0.85 use Gt = 0.85`}
0.85
{/* Kvt Table */}
Tornado Pressure Coefficient Adjustment Factor for Vertical Winds KvT
Buildings
Negative (uplift) pressures on Roofs
Main Wind Force Resisting System
1.10
Components and Cladding:
Roof Angle (θ) = 0.4 deg
Roof Slope ≤ 7 degrees
Zone 1
1.20
Zone 2
1.05
Zone 3
1.05
Positive (downward) pressures on Roofs
1.00
Wall Pressures
All Other Cases
1.00
NOTE: Is output nominal tornado wind pressures enter a wind factor of 0.6 on the "Code" page.
); };