71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
/**
|
|
* Tabela 21 — Cúpulas sobre o terreno (NBR 6123:2023, sec. 6.2.4.1).
|
|
*
|
|
* Valores limites de Cpe (sobrepressão e sucção) e coeficiente de
|
|
* sustentação Cs por f/d.
|
|
*
|
|
* Fonte: NBR 6123:2023, p. 40 (Tabela 21).
|
|
* Última auditoria: 2026-07-07 — valores oficiais do PDF confirmados.
|
|
*
|
|
* Chaves: f/d (razão flecha/diâmetro). A norma fornece chaves literais
|
|
* "1/15", "1/10", "1/8", "1/6", "1/4", "1/2".
|
|
*
|
|
* ⚠️ CORREÇÃO: Sobrepressão é POSITIVA (sopramento sobre a cúpula).
|
|
* O código anterior usava valores negativos incorretamente.
|
|
*/
|
|
|
|
import { linearInterp1D } from '../log-interp';
|
|
|
|
const FD = [1 / 15, 1 / 10, 1 / 8, 1 / 6, 1 / 4, 1 / 2] as const;
|
|
const FD_KEYS = ['1/15', '1/10', '1/8', '1/6', '1/4', '1/2'] as const;
|
|
|
|
type Row = { sobrepressao: number; sucção: number; cs: number };
|
|
|
|
/**
|
|
* Valores oficiais da Tabela 21 — NBR 6123:2023, p. 40.
|
|
* Sobrepressão é POSITIVA (sinal + na norma).
|
|
*/
|
|
const T21: Record<string, Row> = {
|
|
'1/15': { sobrepressao: +0.1, sucção: -0.3, cs: 0.15 },
|
|
'1/10': { sobrepressao: +0.2, sucção: -0.3, cs: 0.20 },
|
|
'1/8': { sobrepressao: +0.2, sucção: -0.4, cs: 0.20 },
|
|
'1/6': { sobrepressao: +0.3, sucção: -0.5, cs: 0.30 },
|
|
'1/4': { sobrepressao: +0.4, sucção: -0.6, cs: 0.30 },
|
|
'1/2': { sobrepressao: +0.6, sucção: -1.0, cs: 0.50 },
|
|
};
|
|
|
|
function lookup21(fd: number): Row {
|
|
const fdClamped = Math.max(FD[0], Math.min(FD[FD.length - 1], fd));
|
|
const xs = [...FD];
|
|
const ys1 = FD_KEYS.map((k) => T21[k].sobrepressao);
|
|
const ys2 = FD_KEYS.map((k) => T21[k].sucção);
|
|
const ys3 = FD_KEYS.map((k) => T21[k].cs);
|
|
return {
|
|
sobrepressao: Number(linearInterp1D(xs, ys1, fdClamped).toFixed(2)),
|
|
sucção: Number(linearInterp1D(xs, ys2, fdClamped).toFixed(2)),
|
|
cs: Number(linearInterp1D(xs, ys3, fdClamped).toFixed(2)),
|
|
};
|
|
}
|
|
|
|
export interface DomeCpeResult {
|
|
/** Cpe máximo (sobrepressão) — positivo para cúpulas sobre o terreno */
|
|
cpeMax: number;
|
|
/** Cpe mínimo (sucção) */
|
|
cpeMin: number;
|
|
/** Coeficiente de sustentação */
|
|
cs: number;
|
|
}
|
|
|
|
export function getDomeOnGroundCpeNBR6123(fOverD: number): DomeCpeResult {
|
|
const v = lookup21(fOverD);
|
|
return { cpeMax: v.sobrepressao, cpeMin: v.sucção, cs: v.cs };
|
|
}
|
|
|
|
/** Força de sustentação F = Cs · q · (π·d²/4) */
|
|
export function getDomeLiftForce(cs: number, q: number, d: number): number {
|
|
return Number((cs * q * (Math.PI * d * d) / 4).toFixed(3));
|
|
}
|
|
|
|
// Mantém compatibilidade com o nome anterior (chaves literais)
|
|
export const DOME_FD_KEYS = FD_KEYS;
|