/** * Tabela 31 — Parâmetros γ e ξ para a determinação de efeitos * dinâmicos (NBR 6123:2023, sec. 9.3.1). * * Fonte: NBR 6123:2023, p. 62 (Tabela 31). * Última auditoria: 2026-07-08 — auditado e condizente com a norma. */ export interface DynamicStructureParams { /** Expoente γ do modo fundamental */ gamma: number; /** Taxa de amortecimento crítico ξ (em %) */ xiPercent: number; /** Fórmula para frequência aproximada (Hz) */ freqFormula: string; } export const TABLE_31: readonly DynamicStructureParams[] = [ { gamma: 1.2, xiPercent: 2.0, freqFormula: 'f₁ ≈ 0,05 + 0,015/h (h em m)', }, { gamma: 1.0, xiPercent: 2.0, freqFormula: 'f₁ ≈ 0,05 + 0,015/h', }, { gamma: 2.7, xiPercent: 1.5, freqFormula: 'f₁ ≈ 0,02·h (h em m)', }, { gamma: 1.7, xiPercent: 1.0, freqFormula: 'f₁ ≈ 0,015·h', }, { gamma: 1.2, xiPercent: 1.0, freqFormula: 'f₁ ≈ 0,20/h − 0,04', }, { gamma: 1.7, xiPercent: 0.8, freqFormula: 'f₁ ≈ dependente da estrutura', }, { gamma: 0, xiPercent: 3.0, freqFormula: 'f₁ ≈ dependente da estrutura', }, ] as const; export type StructureDynamicType = | 'portal-concrete' | 'concrete-shearwall' | 'concrete-tower-variable' | 'concrete-tower-uniform' | 'steel-welded' | 'steel-tower-uniform' | 'wood'; export function getDynamicParams(type: StructureDynamicType): DynamicStructureParams { const idx: Record = { 'portal-concrete': 0, 'concrete-shearwall': 1, 'concrete-tower-variable': 2, 'concrete-tower-uniform': 3, 'steel-welded': 4, 'steel-tower-uniform': 5, wood: 6, }; return TABLE_31[idx[type]]; } /** * Estimativa simplificada da frequência fundamental f₁ (Hz) para edifícios. * f₁ = γ · h / ... (Tabela 31 fornece fórmulas por tipo) */ export function estimateFundamentalFrequency(type: StructureDynamicType, height: number): number { switch (type) { case 'portal-concrete': case 'concrete-shearwall': return 0.05 + 0.015 / height; case 'concrete-tower-variable': return 0.02 * height; case 'concrete-tower-uniform': case 'steel-tower-uniform': return 0.015 * height; case 'steel-welded': return Math.max(0.5, 0.2 / height - 0.04); case 'wood': return 0.5; } }