파이썬(Python)으로 구현하는 공기 흐름 시뮬레이션
나비에-스토크스(Navier-Stokes) 방정식을 활용하여 공기 흐름을 시뮬레이션하는 파이썬(Python) 구현 가이드
유한 차분법(Finite Difference)을 사용하여 편미분 방정식을 이산화하고, NumPy를 활용한 벡터 연산을 수행
압력-속도 결합 문제(Pressure Coupling) 해결을 위해 압력-푸아송(Pressure-Poisson) 방정식을 유도
수치적 확산(Numerical Diffusion) 및 난류 모델(Turbulence Model) 부재 등, 시뮬레이션의 한계점 명시
나비에-스토크스(Navier-Stokes) 방정식의 이해
본 게시물은 유체 역학의 기본 방정식인 나비에-스토크스(Navier-Stokes) 방정식을 설명하며, 속도와 압력의 변화를 묘사한다. 특히, 비압축성 유체(Incompressible Fluid)의 경우 밀도가 일정하게 유지된다는 가정을 사용한다. 게시물에서는 운동량 보존 방정식과 연속 방정식으로 구성된 이 방정식을 통해, 압력 구배(Pressure Gradient)와 점성 확산(Viscous Diffusion) 간의 관계를 설명한다. 또한, 압력-속도 결합 문제를 해결하기 위해 압력-푸아송(Pressure-Poisson) 방정식을 유도하는 과정을 제시한다.
유한 차분법(Finite Difference) 기반의 이산화
게시물에서는 유한 차분법(Finite Difference)을 사용하여 나비에-스토크스(Navier-Stokes) 방정식을 컴퓨터에서 풀 수 있도록 이산화하는 과정을 설명한다. 시간 미분에는 전진 차분(Forward Difference)을, 비선형 항(Nonlinear Terms)에는 후진/업윈드 차분(Backward/Upwind Difference)을 사용하여 안정성을 확보한다. 또한, 확산 및 압력 항에는 중심 차분(Central Difference)을 적용한다. 이러한 이산화 기법을 통해, 편미분 방정식을 NumPy 배열을 이용한 코드 형태로 변환하여 구현한다.
파이썬(Python)을 활용한 구현
게시물은 NumPy 배열을 사용하여 유체 시뮬레이션을 구현하는 4단계 과정을 제시한다. 먼저, 그리드 크기, 시간 간격, 물리적 파라미터를 초기화한다. 다음으로, 날개 형상을 표현하기 위해 Immersed Boundary 기법을 사용하여 날개 내부의 그리드 점을 마스크 처리한다. 핵심 루프에서는 압력 소스 항을 계산하고, Jacobi Iteration을 통해 압력을 계산하며, 속도를 업데이트한다. 마지막으로, 경계 조건을 적용하여 시뮬레이션을 수행한다. 게시물은 코드의 각 단계를 자세히 설명하며, 벡터 연산(Vectorized Operations)을 통해 성능을 최적화한다.
시뮬레이션 결과 및 한계점
시뮬레이션 결과는 날개 윗면에서 낮은 압력, 아랫면에서 높은 압력을 보여주며, 이는 양력 발생의 원리를 설명한다. 또한, 압력에 의한 힘이 점성 마찰력보다 1000배 이상 크다는 것을 보여준다. 하지만, 게시물은 시뮬레이션의 한계점을 명확히 제시한다. 특히, 3차원 시뮬레이션의 계산 비용, 난류 모델 부재, 수치적 확산으로 인한 세밀한 흐름 표현의 어려움을 지적한다. 이러한 한계점을 극복하기 위해, 고차 advection scheme, 난류 모델링, OpenFOAM과 같은 유한 체적법(Finite Volume Method) 적용을 제안한다.