pygasflow는 Python으로 준 1차원(Quasi-1D) 이상 기체역학(Ideal Gasdynamics) 계산을 쉽고 빠르게 수행할 수 있도록 만들어진 과학/공학용 라이브러리이다. Davide Sandri가 개발했으며, 항공우주공학 분야에서 압축성 유동 해석에 활용된다.
주요 기능
pygasflow는 다음과 같은 압축성 유동 솔버를 제공한다:
- 등엔트로피 유동 (Isentropic Flow):
isentropic_solver() - 파노 유동 (Fanno Flow):
fanno_solver()— 마찰이 있는 단열 관 유동 - 레일리 유동 (Rayleigh Flow):
rayleigh_solver()— 열전달이 있는 유동 - 수직 충격파 (Normal Shock Wave):
normal_shockwave_solver() - 경사 충격파 (Oblique Shock Wave):
shockwave_solver() - 원뿔형 충격파 (Conical Shock Wave):
conical_shockwave_solver() - 압력-편향각 선도 (Pressure-Deflection Diagram):
PressureDeflectionLocus및PressureDeflectionDiagram
또한 드 라발 노즐(De Laval Nozzle) 및 노즐 서브모듈을 통해 수렴-발산 노즐, Rao's TOP 노즐(추력 최적 포물선), 최소 길이 노즐(Method of Characteristics) 등을 이해하고 계산할 수 있다.
공기열역학(Aerothermodynamics) 모듈(pygasflow.atd)도 포함되어 있어, 평판 또는 정체 영역에서의 경계층 두께, 열유속, 벽면 전단응력 추정 상관식, 그리고 뉴턴 유동 이론(Newtonian Flow Theory)을 이용한 물체 주변 압력 분포 및 공기역학적 특성 계산도 지원한다.
사용 예시
마하수 2에서 등엔트로피 유동 계산 예시:
from pygasflow import isentropic_solver
res = isentropic_solver("m", 2, to_dict=True)
res.show()
# m M 2.00000000
# pr P / P0 0.12780453
# dr rho/rho0 0.23004815
# tr T / T0 0.55555556
# ars A / A* 1.68750000
# pm Prandtl-Meyer 26.37976081
pint 라이브러리와 연동하면 단위(units)를 붙여서 계산하는 것도 지원합니다.
라이선스 및 환경
Python 3.9~3.13을 지원하며, GPLv3 라이선스로 배포된다. 과학/공학 연구 및 물리·수학 분야를 대상으로 한다.
한마디로
항공우주공학, 유체역학을 공부하거나 연구하는 분들이 충격파, 노즐 유동, 압축성 유동을 Python 환경에서 빠르게 계산하고 시각화하고 싶을 때 매우 유용한 라이브러리이다. 공식 문서는 pygasflow.readthedocs.io에서 확인할 수 있다.
네, 문서 내용을 바탕으로 설명해 드릴게요!
De Laval Nozzle (수렴-발산 노즐) 계산
pygasflow에서는 세 가지 노즐 유형을 제공한다.
1. CD_Conical_Nozzle (원뿔형 발산 노즐)
발산부가 직선 원뿔 형태인 가장 기본적인 설계이다.
주요 파라미터:
Ri = 0.4 # 수렴부 입구 반지름
Rt = 0.2 # 목(throat) 반지름
Re = 1.2 # 발산부 출구 반지름
Rj = 0.1 # 수렴-발산 접합부 반지름
R0 = 0 # 연소실-수렴부 접합부 반지름
theta_c = 40 # 수렴부 반각 (degrees)
theta_N = 15 # 발산부 반각 (degrees)
계산 결과 출력 예시:
C-D Conical Nozzle
Radius:
Ri 0.4
Re 1.2
Rt 0.2
Areas:
Ai 0.5027 ← 입구 단면적 (π × 0.4²)
Ae 4.5239 ← 출구 단면적 (π × 1.2²)
At 0.1257 ← 목 단면적 (π × 0.2²)
Lengths:
Lc 0.2747 ← 수렴부 길이
Ld 3.7452 ← 발산부 길이
L 4.0200 ← 전체 노즐 길이
Angles:
theta_c 40
theta_N 15
2. CD_TOP_Nozzle (추력 최적화 포물선 노즐)
Rao의 포물선 근사법 기반으로, Fractional Length K 값으로 길이를 조절합니다. K는 "같은 출구 면적비를 가진 15° 원뿔 노즐 대비 길이 비율"이다.
K = [0.6, 0.7, 0.8, 0.9, 1.0] # K가 작을수록 짧고 가벼운 노즐
3. CD_Min_Length_Nozzle (최소 길이 노즐)
특성선법(Method of Characteristics) 을 이용해 설계하며, 날카로운 목 코너에서 Prandtl-Meyer 팽창파가 발생한다. 평면(planar) 형상만 지원합니다.
형상 유형 (geometry_type)
| 유형 | 단면적 계산 | 설명 |
"axisymmetric" |
A = π × r² | 원형 단면, 로켓 엔진 노즐 |
"planar" |
A = 2 × r | 평면 단면, 반지름 = 벽면까지 거리 |
사용 유동 요약
from pygasflow.nozzles import CD_Conical_Nozzle, CD_TOP_Nozzle, CD_Min_Length_Nozzle
# 1. 노즐 생성
nozzle = CD_Conical_Nozzle(Ri=0.4, Re=1.2, Rt=0.2,
theta_c=40, theta_N=15,
geometry_type="axisymmetric")
# 2. 노즐 정보 출력
print(nozzle) # 치수, 면적, 길이 출력
# 3. 형상 좌표 추출 → 시각화
x, y = nozzle.build_geometry()
# 4. De Laval 솔버로 유동 해석
from pygasflow.solvers import De_Laval_Solver
solver = De_Laval_Solver(nozzle, ...)
문서의 그림을 보면 원뿔형 노즐은 발산부가 직선이고, TOP 노즐은 K값이 작을수록 더 짧고 곡선형으로 설계되어 있다. 실제 로켓에서는 무게와 추력 효율의 균형 때문에 주로 TOP 노즐(K ≈ 0.8)이 많이 쓰인다.

'현장과 프로젝트' 카테고리의 다른 글
| Python으로 압축성 유동 계산기 만들기 (0) | 2026.06.10 |
|---|---|
| 재활용이 가능한데 왜 열가소성 추진제를 사용하지 않을까? (0) | 2026.06.05 |
| 상용과 어깨를 나란히 하는 오픈소스 소프트웨어 (0) | 2026.05.29 |
| MATLAB vs Scilab vs GNU Octave: 수치 계산 소프트웨어 비교 (0) | 2026.05.29 |
| AutoCAD vs CADian — 국산 CAD 전환으로 얼마나 절감할 수 있나? (0) | 2026.05.29 |