압력용기 응력 비교
관련 문서 → 압력용기
목적
얇은 벽 이론식이 실제 형상에서 얼마나 맞는지, 그리고 어디서부터 안 맞는지 확인한다.
조건
| 내압 $P$ | 2 MPa |
| 안쪽 반지름 $r$ | 150 mm |
| 두께 $t$ | 3 mm ($r/t = 50$) |
| 재질 | 일반 구조용 강 (항복강도 250 MPa) |
결과 1 · r/t 에 따른 두 응력
두 응력 모두 $r/t$ 에 선형으로 비례한다. 그리고 아무리 움직여도 둘의 비는 언제나 2:1 이다. 압력을 바꾸든 크기를 바꾸든 이 비율은 변하지 않는다.
원주응력이 항복강도에 닿는 지점은 $r/t = 125$ 다. 그런데 그때 길이방향 응력은 아직 62.5 MPa 밖에 안 된다. 여유가 두 배나 남아 있는데도 설계는 이미 끝난 것이다. 압력용기 설계가 사실상 원주응력 하나로 결정된다는 뜻이다.
결과 2 · 원통 표면의 응력 분포

몸통 대부분은 100 MPa 로 균일한 붉은색이다. 이론식 $\sigma_1 = Pr/t = 2 \times 150 / 3 = 100$ MPa 과 정확히 맞는다.
그런데 뚜껑과 만나는 끝단만 파랗다. 뚜껑이 벽의 팽창을 붙잡고 있어서 그 자리는 원주 방향으로 늘어나지 못하고, 대신 굽힘이 생긴다. 색이 파랑에서 빨강으로 넘어가는 폭이 대략 50 mm 인데, 이는 $2.5\sqrt{rt}$ 로 어림한 값과 일치한다.
교과서의 $\sigma = Pr/t$ 는 무한히 긴 원통의 중앙을 가정한 식이다. 실제 용기에는 뚜껑이 있고, 그 근처는 이 식이 설명하지 못한다.
실제 압력용기 사고가 대부분 뚜껑 접합부나 노즐 주변에서 나는 이유가 여기 있다. 공식만 보고 설계하면 가장 위험한 곳을 놓치게 된다.
해석 환경 구축
아래는 Inventor 응력해석 환경을 익히며 시험 삼아 돌려본 결과다. 압력용기 모델이 아니라 단순 보 예제이며, 하중 부여와 결과 확인 절차를 익히는 단계였다.


남은 작업
위 두 그림은 이론식으로 계산한 값이다. 실제 형상에서 이 식이 얼마나 맞는지는 아직 확인하지 않았다. 다음을 진행한다.
- Inventor 로 $r=150,\ t=3,\ L=600$ 원통 모델링, 내압 2 MPa 부여
- 중앙부 프로브 → 원주응력이 100 MPa 근처인지 확인
- $t$ 를 7.5, 15, 30 으로 바꿔가며 반복 → $r/t$ 가 작아질 때 이론식이 얼마나 어긋나는지
- 축 방향으로 여러 지점 측정 → 끝단 효과 구간을 수치로 확인
측정값
| $r/t$ | 이론 $\sigma_1$ [MPa] | FEM $\sigma_1$ [MPa] | 오차 [%] |
|---|---|---|---|
| 50 | 100.0 | ||
| 20 | 40.0 | ||
| 10 | 20.0 | ||
| 5 | 10.0 |
$r/t$ 가 10 아래로 내려가면 FEM 값이 이론값보다 크게 나올 것으로 예상한다. 압력용기 의 「흔한 오해」에서 말한 대로, 얇은 벽 식이 위험측으로 틀린다는 것을 수치로 확인하는 것이 이 표의 목적이다.
응용
- 안전계수 2로 설계하려면 $r/t$ 를 얼마 이하로 잡아야 하는가. 첫 번째 그래프에서 읽어보고 손으로 검산해 보라.
- 코드에서 $P$ 와 $S_y$ 를 바꾸면 두 선의 기울기가 각각 어떻게 변하는가.
- 두 번째 그림에서 파란 띠의 폭은 무엇으로 정해지는가. $r$ 이나 $t$ 를 바꿔 돌려보라.
코드
MATLAB R2020a 이상 · 별도 툴박스 없음
| 변수 | 뜻 | 값 |
|---|---|---|
P |
내압 [MPa] | 2 |
Sy |
항복강도 [MPa] | 250 |
r, t |
반지름 · 두께 [mm] | 150, 3 |
nu |
포아송비 | 0.3 |
%% 압력용기 응력 시각화
% 그림 두 장을 만든다
% pv_stress.svg r/t 에 따른 원주응력 / 길이방향응력
% pv_hoop_map.png 원통 표면 원주응력 분포 (뚜껑 근처 끝단 효과 포함)
%
% 실행 후 두 파일을 vault 의 assets 폴더로 옮기면 사이트에 바로 반영된다.
clear; clc; close all;
set(0, 'DefaultAxesFontName', 'Malgun Gothic');
P = 2; % 내압 [MPa]
Sy = 250; % 항복강도 [MPa]
r = 150; % 안쪽 반지름 [mm]
t = 3; % 두께 [mm]
nu = 0.3; % 포아송비
%% 그림 1 : r/t 에 따른 두 응력
rt = 5:0.5:150;
s1 = P .* rt; % 원주응력 Pr/t
s2 = P .* rt / 2; % 길이방향응력 Pr/2t
f1 = figure('Color', 'w', 'Position', [100 100 720 460]);
hold on; grid on; box on;
% 얇은 벽 가정이 깨지는 구간
fill([5 10 10 5], [0 0 400 400], [.92 .92 .92], 'EdgeColor', 'none');
h1 = plot(rt, s1, 'LineWidth', 2.2, 'Color', [.85 .33 .10]);
h2 = plot(rt, s2, 'LineWidth', 2.2, 'Color', [0 .45 .74]);
yline(Sy, '--', 'LineWidth', 1.2, 'Color', [.4 .4 .4]);
text(8, Sy + 16, '항복강도 250 MPa', 'FontName', 'Malgun Gothic', ...
'Color', [.4 .4 .4]);
% 원주응력이 항복에 닿는 지점
rtf = Sy / P;
plot(rtf, Sy, 'o', 'MarkerSize', 8, 'LineWidth', 1.8, ...
'MarkerEdgeColor', [.85 .33 .10], 'MarkerFaceColor', 'w');
text(rtf - 5, Sy - 32, sprintf('r/t = %.0f', rtf), ...
'FontName', 'Malgun Gothic', 'HorizontalAlignment', 'right');
xlabel('r / t'); ylabel('응력 [MPa]');
title('내압 2 MPa 일 때 r/t 에 따른 응력');
legend([h1 h2], {'원주응력 \sigma_1 = Pr/t', ...
'길이방향응력 \sigma_2 = Pr/2t'}, ...
'Location', 'northwest', 'FontName', 'Malgun Gothic');
xlim([5 150]); ylim([0 400]);
exportgraphics(f1, 'pv_stress.svg', 'ContentType', 'vector');
%% 그림 2 : 원통 표면 원주응력 분포
% 뚜껑이 벽의 팽창을 붙잡아서 끝단 근처는 이론값을 벗어난다
L = 200; % 뚜껑에서부터의 거리 [mm]
b = (3 * (1 - nu^2))^0.25 / sqrt(r * t); % 경계층 계수
x = linspace(0, L, 260);
sh = P * r / t * (1 - exp(-b*x) .* (cos(b*x) + sin(b*x)));
th = linspace(0, 2*pi, 140);
[X, TH] = meshgrid(x, th);
Y = r * cos(TH);
Z = r * sin(TH);
C = repmat(sh, numel(th), 1);
f2 = figure('Color', 'w', 'Position', [100 100 940 500]);
surf(X, Y, Z, C, 'EdgeColor', 'none');
axis equal off;
view(-34, 18);
camlight headlight; lighting gouraud; material dull;
colormap(jet);
cb = colorbar;
cb.Label.String = '원주응력 [MPa]';
cb.Label.FontName = 'Malgun Gothic';
cb.FontName = 'Malgun Gothic';
title(sprintf('원통 표면 원주응력 P = %g MPa, r = %g mm, t = %g mm', P, r, t), ...
'FontName', 'Malgun Gothic');
exportgraphics(f2, 'pv_hoop_map.png', 'Resolution', 180);
%% 확인용 출력
fprintf('중앙부 원주응력 %.1f MPa\n', P*r/t);
fprintf('중앙부 길이방향응력 %.1f MPa\n', P*r/(2*t));
fprintf('끝단 효과가 잦아드는 거리 약 %.0f mm\n', 3/b);
fprintf('안전계수 2 를 만족하는 r/t <= %.1f\n', Sy/(2*P));