🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 20:57:51
This commit is contained in:
@@ -210,7 +210,7 @@ describe('Audit Simulations for NBR 6123:2023 Models', () => {
|
||||
spacing: 6,
|
||||
numFrames: 3,
|
||||
phiStruct: 0.2,
|
||||
pipes: [{ id: 'p1', diameter: 1.0 }, { id: 'p2', diameter: 1.0 }], // total 2.0m de tubo num pórtico de 2.0m!
|
||||
pipes: [{ id: 'p1', diameter: 1.0, elevationOffset: 1.0 }, { id: 'p2', diameter: 1.0, elevationOffset: 1.5 }], // total 2.0m de tubo num pórtico de 2.0m!
|
||||
q: 1,
|
||||
});
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import { linearInterp1D } from '../log-interp';
|
||||
export interface PipeDef {
|
||||
id: string;
|
||||
diameter: number; // diâmetro ou altura do equipamento em metros
|
||||
elevationOffset: number; // posição Y relativa à base do reticulado (0 a h)
|
||||
}
|
||||
|
||||
export interface PiperackInput {
|
||||
@@ -24,6 +25,7 @@ export interface PiperackResult {
|
||||
linearLoadFront: number; // kN/m (carga no pórtico 1)
|
||||
linearLoadBack: number; // kN/m (carga nos pórticos 2..n)
|
||||
globalForce: number; // kN (força total na estrutura)
|
||||
effectiveElevation: number; // z_eff: Altura efetiva de aplicação da força global (m)
|
||||
}
|
||||
|
||||
/** Tabela de Ca genérica para reticulados planos (faces planas) baseada na solidez φ */
|
||||
@@ -31,12 +33,22 @@ const PHI_ARRAY = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6];
|
||||
const CA_FLAT_ARRAY = [2.8, 2.4, 2.0, 1.8, 1.7, 1.6];
|
||||
|
||||
export function calculatePiperack(input: PiperackInput): PiperackResult {
|
||||
const { width, height, spacing, numFrames, phiStruct, pipes, q } = input;
|
||||
const { width, height, elevation, spacing, numFrames, phiStruct, pipes, q } = input;
|
||||
|
||||
// 1. Calcular o Índice de Solidez Total (φ) e Centro de Pressão Efetivo
|
||||
let sumPhiZ = phiStruct * elevation; // Momento de área estática estrutural
|
||||
const phiPipes = pipes.reduce((sum, pipe) => {
|
||||
const phiP = pipe.diameter / height;
|
||||
const pipeZ = (elevation - height / 2) + pipe.elevationOffset;
|
||||
sumPhiZ += phiP * pipeZ;
|
||||
return sum + phiP;
|
||||
}, 0);
|
||||
|
||||
// 1. Calcular o Índice de Solidez Total (φ)
|
||||
const phiPipes = pipes.reduce((sum, pipe) => sum + pipe.diameter / height, 0);
|
||||
const rawPhi = phiStruct + phiPipes;
|
||||
const phiTotal = Math.min(Math.max(rawPhi, 0.1), 1.0);
|
||||
|
||||
// Z efetivo é a média ponderada pelas áreas de bloqueio (se rawPhi=0, usa elevation)
|
||||
const effectiveElevation = rawPhi > 0 ? sumPhiZ / rawPhi : elevation;
|
||||
|
||||
// 2. Coeficiente de Arrasto Frontal (Ca) para o primeiro pórtico
|
||||
let caFrontal = 1.6;
|
||||
@@ -65,6 +77,7 @@ export function calculatePiperack(input: PiperackInput): PiperackResult {
|
||||
eta,
|
||||
linearLoadFront,
|
||||
linearLoadBack,
|
||||
globalForce
|
||||
globalForce,
|
||||
effectiveElevation
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user