Files
Pier_v1/src/core/rebar/common.ts
T
ypshimandClaude Haiku 5.5 daf78d0586 feat(core): rebar common rules (plan C1) and bearing-block bars (plan C2)
- C1: development length l_d = 0.6·d_b·fy/(λ√fck), splice 1.3·l_d, standard
  hooks (main 90°, tie 90°, stirrup 135° as written in the spec). fck 27 and
  fy 400/500 are marked as assumed values (I02).
- C2: bearing-block bars, one block per bearing (배치 분리). Bars S1 and S2 at
  @125 with 8 bars per 1200 mm side (7 gaps = 875, ends 162.5), 2500 mm long,
  coping embedment from the block height (pad included, Q16 결정).
- Tests: development and splice lengths; hook table limits; embedment 600 /
  550 / 619.1 / 569.1; P1 has 80 bars each of S1 and S2 over 10 blocks.
- Not yet: the ③ screen and the drawing check against the bearing-block drawing.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:05:27 +09:00

46 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* ③ 철근배근 공통 규칙 (spec §6.2 · plan C1). Lengths in mm, stresses in MPa.
* fck and fy are inputs. The defaults below are assumed values and must be shown as such (I02).
*/
export const MATERIAL_DEFAULTS = {
fck: 27,
/** H = SD400, S = SD500. */
fy: { H: 400, S: 500 } as const,
/** 경량 콘크리트 계수 λ (보통 콘크리트 1.0). */
lambda: 1.0,
/** Marks that these are assumed values (정보 I02). */
assumed: true,
} as const;
/** Development length l_d = 0.6·d_b·f_y / (λ·√f_ck) (spec §4 공통 설계 규약, 보정계수 1.0). */
export function developmentLength(db: number, fy: number, fck: number, lambda = MATERIAL_DEFAULTS.lambda): number {
if (db <= 0 || fy <= 0 || fck <= 0 || lambda <= 0) throw new Error('정착길이 계산 값은 모두 0보다 커야 합니다.');
return (0.6 * db * fy) / (lambda * Math.sqrt(fck));
}
/** Lap splice length l_s = 1.3·l_d (spec §4 공통 설계 규약). */
export function spliceLength(db: number, fy: number, fck: number, lambda = MATERIAL_DEFAULTS.lambda): number {
return 1.3 * developmentLength(db, fy, fck, lambda);
}
export type HookKind = 'main90' | 'tie90' | 'stirrup135';
/**
* Standard hook lengths (KDS 14 20 52, spec §4). Refuses bar sizes outside the table rather than guessing.
* - main90: 주철근 90°, D25 이하 15.5 d_b, D29–D35 16.5 d_b
* - tie90: 띠철근 90°, D16 이하 8.5 d_b
* - stirrup135: 스터럽 135°, 2.5·d_b·(3π/4) + 6·d_b (spec formula, as written)
*/
export function hookLength(kind: HookKind, db: number): number {
if (kind === 'main90') {
if (db <= 25) return 15.5 * db;
if (db <= 35) return 16.5 * db;
throw new Error(`주철근 90° 갈고리 표에 없는 지름입니다 (D${db}).`);
}
if (kind === 'tie90') {
if (db <= 16) return 8.5 * db;
throw new Error(`띠철근 90° 갈고리 표에 없는 지름입니다 (D${db}).`);
}
return 2.5 * db * ((3 * Math.PI) / 4) + 6 * db;
}