리만 솔버

오류 제보
전산유체역학 수치해석 마지막 수정: 2026-09-23 04:12:11

○ 공개 검수 대기 AI 보조 작성 표시 기준 보기

1. 개요

리만 솔버
Riemann Solver
하는 일셀 경계의 불연속 → 수치 플럭스 Fi+1/2
출발고두노프 (1959)
1D 오일러 파동 수3개 (음향파 · 접촉면 · 음향파)
정확 솔버p* 에 대한 비선형 방정식을 뉴턴 반복
근사 솔버Roe (1981) · HLL (1983) · HLLC (1994)
표준 시험문제Sod 충격파관 (1978)
대표 실패팽창 충격 · 카뷰클 · 저마하수 소산

리만 솔버(Riemann solver)는 서로 다른 두 상태가 맞닿아 있는 불연속 초기조건, 즉 리만 문제(Riemann problem)의 해를 구해 셀 경계면을 통과하는 수치 플럭스(numerical flux)를 계산하는 알고리즘이다. 압축성 유동을 유한체적법으로 풀 때, 각 셀 경계는 좌우 셀 값이 딱 끊겨 있는 작은 불연속면이다. 이 불연속이 시간이 지나며 어떤 파동으로 갈라지는지를 풀어주는 것이 리만 솔버의 임무다.

쉽게 말하면 “칸막이 하나 사이에 압력 다른 두 기체가 있을 때, 칸막이를 확 뽑으면 뭐가 어디로 튀는가?”를 매 셀 경계, 매 시간 스텝마다 수백만 번 푸는 것이다. 셀 경계 하나하나가 미니 충격파관인 셈. 압축성 CFD 솔버의 심장부이자, 계산 시간의 상당 부분을 잡아먹는 병목이기도 하다.1

2. 리만 문제란

리만 문제는 다음처럼 정의된다. 하나의 쌍곡형 보존 법칙

∂U∂t+∂F(U)∂x=0\frac{\partial \mathbf{U}}{\partial t} + \frac{\partial \mathbf{F}(\mathbf{U})}{\partial x} = 0

에 대해, 초기조건이 원점을 기준으로 두 개의 상수 상태로 갈라져 있다.

U(x,0)={ULx<0URx>0\mathbf{U}(x, 0) = \begin{cases} \mathbf{U}_L & x < 0 \\ \mathbf{U}_R & x > 0 \end{cases}

이 문제에는 길이 척도도 시간 척도도 없다. 그래서 해는 xx 와 tt 에 따로 의존하지 못하고 오직 ξ=x/t\xi = x/t 의 함수가 된다 — 자기상사해(self-similar solution)다. 이 성질이 리만 솔버가 실용적인 이유의 전부다. 셀 경계(x=0x=0, 즉 ξ=0\xi = 0)에서의 상태는 시간에 무관한 단 하나의 값이므로, 그 자리의 플럭스를 한 번만 계산하면 그 시간 스텝 내내 쓸 수 있다.

해는 세 종류의 파동으로 구성된다.

  • 충격파(shock): 물리량이 불연속으로 점프하는 면. 압축이 일어나며, 랭킨-위고니오 조건과 엔트로피 조건을 동시에 만족해야 한다.
  • 팽창파(rarefaction/expansion wave): 매끄럽게 물리량이 변하는 부채꼴 영역. 감압이 일어난다.
  • 접촉 불연속면(contact discontinuity): 밀도는 뛰지만 압력과 속도는 연속인, 물질 경계 같은 면.

1차원 오일러 방정식의 경우 좌우로 두 개의 음향파(각각 충격 또는 팽창)와 가운데 하나의 접촉면, 총 3-파동 구조가 나온다. 이 구조를 얼마나 정확히·싸게 재현하느냐가 리만 솔버들을 가르는 기준이다.

3. 고두노프 법

리만 솔버가 CFD에 들어온 계기는 1959년 세르게이 고두노프의 유한체적법 정식화다. **고두노프 도식**의 아이디어는 이렇다. 유동장을 셀마다 상수로 근사하면, 모든 셀 경계는 자동으로 리만 문제가 된다. 각 경계에서 국소 리만 문제를 풀어 경계 플럭스를 얻고, 그것으로 셀 평균값을 시간 전진시킨다.

Uin+1=Uin−ΔtΔx(Fi+1/2−Fi−1/2)\mathbf{U}_i^{n+1} = \mathbf{U}_i^{n} - \frac{\Delta t}{\Delta x}\left(\mathbf{F}_{i+1/2} - \mathbf{F}_{i-1/2}\right)

이 방식의 매력은 충격파를 물리적으로 올바르게 포착한다는 점이다. 리만 문제 자체가 충격파의 엔트로피 조건을 내장하고 있어, 인위적 점성(artificial viscosity)을 억지로 끼얹지 않아도 불연속을 안정적으로 잡는다. 이웃 셀의 리만 문제끼리 간섭하지 않아야 하므로 시간 스텝은 CFL 조건에 묶이며, 원판 고두노프 법의 제약은 CFL≤1\mathrm{CFL} \le 1 이다.

대신 원래 고두노프 법은 공간 1차 정확도라 충격파 주변이 뭉개진다. 그리고 이건 구현을 잘못해서가 아니다. 고두노프 정리(1959)가 “단조성을 유지하는 선형 도식은 많아야 1차 정확도”임을 증명해 버렸기 때문이다. 2차 이상으로 가려면 도식이 비선형이어야 한다 — MUSCL 재구성의 기울기 제한자, WENO 도식의 비선형 가중치, TVD 도식의 플럭스 제한자가 전부 이 정리를 우회하려고 도입된 장치다. 그리고 재구성이 몇 차든, 매 경계의 플럭스는 결국 리만 솔버가 계산한다.

4. 정확 리만 솔버

리만 문제를 “정확히” 푸는 것도 가능하다. 오일러 방정식에서 접촉면을 사이에 둔 별 영역(star region)의 압력 p∗p^* 는 다음 단일 비선형 방정식의 근이다.

f(p)=fL(p;UL)+fR(p;UR)+(uR−uL)=0f(p) = f_L(p;\mathbf{U}_L) + f_R(p;\mathbf{U}_R) + (u_R - u_L) = 0

각 항은 그 파동이 충격인지 팽창인지에 따라 형태가 갈린다. p>pKp > p_K 이면 충격, 아니면 팽창이다.

fK(p)={(p−pK)2(γ+1)ρK (p+γ−1γ+1pK)p>pK2cKγ−1[(ppK)γ−12γ−1]p≤pKf_K(p) = \begin{cases} (p - p_K)\sqrt{\dfrac{2}{(\gamma+1)\rho_K\,(p + \frac{\gamma-1}{\gamma+1}p_K)}} & p > p_K \\[2ex] \dfrac{2c_K}{\gamma-1}\left[\left(\dfrac{p}{p_K}\right)^{\frac{\gamma-1}{2\gamma}} - 1\right] & p \le p_K \end{cases}

ff 는 단조증가이고 볼록해서 뉴턴-랩슨법이 전역적으로 잘 수렴한다(보통 3~5회). 근을 얻으면 접촉면 속도는 u∗=12(uL+uR)+12(fR(p∗)−fL(p∗))u^* = \tfrac12(u_L+u_R) + \tfrac12\left(f_R(p^*) - f_L(p^*)\right) 로 바로 나온다.

문제는 이걸 매 셀 경계, 매 시간 스텝마다 돌린다는 것이다. 반복 안에 거듭제곱과 제곱근이 들어 있어 벡터화도 불리하다. 그래서 정확 솔버는 주로 검증용 기준해로 쓰고, 생산 코드는 근사 솔버를 쓴다.

5. 근사 리만 솔버

반복 없이 대수적으로 플럭스를 근사하는 물건들이다. 대표 세 가지를 보자.

솔버핵심 아이디어성격
Roe비선형계를 국소 선형화, 파동별 분해접촉면 선명, 엔트로피 픽스 필요
HLL좌우 2개 파동만 가정, 중간은 평균견고, 접촉면·전단층 뭉개짐
HLLCHLL에 접촉파(C) 복원견고 + 접촉면 유지, 국룰

Roe 솔버(1981)는 자코비안을 특별한 평균 상태에서 선형화한다. Roe 평균은 밀도의 제곱근으로 가중한 것이 특징이다.

u~=ρL uL+ρR uRρL+ρR,c~=(γ−1)(H~−12u~2)\tilde{u} = \frac{\sqrt{\rho_L}\,u_L + \sqrt{\rho_R}\,u_R}{\sqrt{\rho_L} + \sqrt{\rho_R}}, \qquad \tilde{c} = \sqrt{(\gamma-1)\left(\tilde{H} - \tfrac12 \tilde{u}^2\right)}

이 평균이 임의의 가중평균이 아닌 이유는 Roe의 성질 U 때문이다. 이렇게 잡아야 A~(UL,UR) (UR−UL)=FR−FL\tilde{A}(\mathbf{U}_L,\mathbf{U}_R)\,(\mathbf{U}_R - \mathbf{U}_L) = \mathbf{F}_R - \mathbf{F}_L 이 근사가 아니라 항등식으로 성립하고, 그 덕분에 선형화를 했는데도 충격파가 정확한 속도로 이동한다. 플럭스는 파동별 소산항을 붙인 형태다.

FRoe=12(FL+FR)−12∑k∣λ~k∣ α~k K~k\mathbf{F}^{\mathrm{Roe}} = \tfrac12(\mathbf{F}_L + \mathbf{F}_R) - \tfrac12 \sum_k |\tilde{\lambda}_k|\,\tilde{\alpha}_k\,\tilde{\mathbf{K}}_k

HLL 솔버(Harten–Lax–van Leer, 1983)는 아예 파동을 좌우 두 개로 뭉뚱그리고 그 사이를 하나의 상수 상태로 본다. SL≤0≤SRS_L \le 0 \le S_R 일 때 플럭스는 보존 법칙만으로 결정된다.

FHLL=SRFL−SLFR+SLSR(UR−UL)SR−SL\mathbf{F}^{\mathrm{HLL}} = \frac{S_R \mathbf{F}_L - S_L \mathbf{F}_R + S_L S_R (\mathbf{U}_R - \mathbf{U}_L)}{S_R - S_L}

고유벡터 분해가 없어 코드가 짧고 대단히 견고하다. 대신 가운데 접촉파를 무시해 접촉면·전단층이 심하게 확산된다. 파동 속도 추정이 성능을 좌우하는데, 아인펠트(1988)의 추정 SL=min⁡(uL−cL, u~−c~)S_L = \min(u_L - c_L,\ \tilde{u} - \tilde{c}), SR=max⁡(uR+cR, u~+c~)S_R = \max(u_R + c_R,\ \tilde{u} + \tilde{c}) 을 쓰면 양의 밀도·압력이 보장된다(HLLE).

HLLC 솔버(Toro·Spruce·Speares, 1994)는 HLL의 중간 영역을 접촉파 S∗S_* 로 다시 둘로 쪼갠다. 이름의 C가 복원된 접촉파(Contact)다.

S∗=pR−pL+ρLuL(SL−uL)−ρRuR(SR−uR)ρL(SL−uL)−ρR(SR−uR)S_* = \frac{p_R - p_L + \rho_L u_L (S_L - u_L) - \rho_R u_R (S_R - u_R)}{\rho_L (S_L - u_L) - \rho_R (S_R - u_R)}

이 한 줄을 추가한 대가로 접촉면과 전단층이 Roe 수준으로 선명해지면서 HLL의 견고함(양의 밀도·압력)은 그대로 남는다. 가성비가 압도적이라 오늘날 압축성 솔버의 사실상 표준이다.

6. 검산 — Sod 충격파관

리만 솔버를 새로 구현했으면 제일 먼저 돌리는 것이 소드(Sod, 1978) 문제다. γ=1.4\gamma = 1.4, 좌측 (ρ,u,p)L=(1, 0, 1)(\rho,u,p)_L = (1,\,0,\,1), 우측 (ρ,u,p)R=(0.125, 0, 0.1)(\rho,u,p)_R = (0.125,\,0,\,0.1).

정확 솔버로 p∗p^* 방정식을 풀면 다음 값이 나온다(소수 다섯 자리).

양정확값
별 영역 압력 p∗p^*0.30313
별 영역 속도 u∗u^*0.92745
접촉면 좌측 밀도0.42632
접촉면 우측 밀도0.26557
충격파 속도1.7522
팽창파 머리 / 꼬리 속도−1.1832 / −0.0703

손으로 확인할 수 있는 관계도 있다. 접촉면 좌측은 등엔트로피 팽창을 거쳤으므로 ρL∗=ρL(p∗/pL)1/γ=0.303131/1.4=0.42632\rho^*_L = \rho_L (p^*/p_L)^{1/\gamma} = 0.30313^{1/1.4} = 0.42632 로 바로 떨어지고, 충격파 속도는 랭킨-위고니오에서

S=uR+cRγ+12γp∗pR+γ−12γ=1.05830.857×3.0313+0.143=1.7522S = u_R + c_R\sqrt{\frac{\gamma+1}{2\gamma}\frac{p^*}{p_R} + \frac{\gamma-1}{2\gamma}} = 1.0583\sqrt{0.857\times 3.0313 + 0.143} = 1.7522

가 된다. 코드가 뱉은 값이 이 표와 셋째 자리까지 맞으면 일단 살아 있는 것이고, 접촉면 좌우 밀도가 안 맞으면 접촉파 처리(HLL이냐 HLLC냐)를 의심하면 된다. HLL은 이 문제에서 접촉면을 여러 셀에 걸쳐 뭉개므로 값 자체는 맞아도 프로파일이 눕는다.

7. 대표적인 실패 양식

리만 솔버는 “정확할수록 잘 터진다”는 짓궂은 경향이 있다.

  • 팽창 충격(expansion shock). Roe 솔버가 음속점(λ≈0\lambda \approx 0) 근처에서 만들어 내는 엔트로피 위반 해다. 선형화가 천음속 팽창파를 불연속으로 뭉개 버리기 때문에, 수학적으로는 약해(weak solution)지만 물리적으로는 금지된 것이 나온다. 하튼-하이먼 엔트로피 픽스로 ∣λ∣<δ|\lambda| < \delta 인 구간의 소산을 (λ2+δ2)/2δ(\lambda^2+\delta^2)/2\delta 로 올려 메운다.2
  • 카뷰클 현상(carbuncle). 강한 활강 충격파를 격자선과 거의 나란하게 잡을 때 충격면이 격자 규모로 울퉁불퉁 무너지는 다차원 불안정이다. 커크(1994)가 여러 솔버를 나란히 놓고 보인 바로 그 문제로, 접촉면을 잘 잡는 솔버(Roe·HLLC)일수록 취약하고 소산이 큰 솔버(HLL·Rusanov)는 멀쩡하다. 재진입체 해석에서 한 번쯤 겪는 통과의례. 실무 처방은 충격 감지기를 달아 그 부근에서만 HLL로 갈아타는 하이브리드다.
  • 저마하수 소산. 마하수가 0에 가까워지면 Roe 계열의 속도 소산항이 압력 섭동 대비 O(1/M)O(1/M) 로 커진다. 견고하라고 넣은 수치 소산이 정작 풀어야 할 미세 압력 신호를 잡아먹는 것이다. 저마하 전처리(Turkel 계열)로 소산 행렬을 다시 스케일하거나, 격자 볼츠만 방법처럼 아예 다른 접근을 쓴다.3

8. 압축성 유동에서의 역할

리만 솔버가 진가를 발휘하는 곳은 충격파가 등장하는 압축성 유동이다. 초음속 노즐, 재진입체 주변의 활강 충격파, 초음속 제트, 폭발·데토네이션 같은 문제에서는 물리량이 실제로 불연속이므로, 이를 뭉개지 않고 잡아내는 충격 포착(shock-capturing) 능력이 핵심이다.

또한 리만 솔버는 단상 오일러 방정식을 넘어 다상류, 자기유체역학(MHD), 상대론적 유동으로도 확장되었다. 어떤 보존 법칙이든 쌍곡형이고 파동 구조가 있으면 리만 솔버의 사고방식이 통한다는 점에서, 이것은 단순한 하나의 알고리즘이 아니라 압축성 수치해석 전체를 관통하는 하나의 세계관에 가깝다.4

9. 관련 문서

10. Footnotes

  1. 그래서 리만 솔버 코드는 극한까지 최적화된다. “정확한 솔버 한 번 = 근사 솔버 열 번”이라는 체감이 있어, 반복 없는 근사 솔버가 사랑받는 실용적 이유가 여기에 있다. ↩

  2. “정확도를 위해 근사를 하고, 그 근사를 고치려고 또 픽스를 붙인다”는 게 수치해석의 국룰이다. 엔트로피 픽스의 δ\delta 를 키우면 팽창 충격은 확실히 사라지지만 접촉면도 같이 눕는다. Roe를 쓰는 값을 스스로 깎는 셈이라, δ\delta 튜닝은 늘 미묘하다. ↩

  3. 저마하수에서 압축성 솔버를 억지로 돌리다 결국 비압축성 솔버로 갈아타는 것은 부끄러운 일이 아니다. 마하수 0.01짜리 문제를 밀도 기반 솔버로 수렴시키느라 밤을 새우는 것보다는 훨씬 낫다. ↩

  4. Toro의 명저 Riemann Solvers and Numerical Methods for Fluid Dynamics(3판, 2009)는 이 바닥의 바이블이다. 두께만 봐도 리만 솔버가 얼마나 깊은 우물인지 짐작이 간다. ↩

검증 자료

이 문서의 주요 출처

  1. Godunov (1959), A difference scheme for numerical computation of discontinuous solutions of hydrodynamic equations, Mat. Sbornik 47(89), 271–306
  2. Roe (1981), Approximate Riemann solvers, parameter vectors, and difference schemes, J. Comput. Phys. 43(2), 357–372
  3. Harten, Lax & van Leer (1983), On upstream differencing and Godunov-type schemes for hyperbolic conservation laws, SIAM Review 25(1), 35–61
  4. Toro, Spruce & Speares (1994), Restoration of the contact surface in the HLL-Riemann solver, Shock Waves 4, 25–34
  5. Einfeldt (1988), On Godunov-type methods for gas dynamics, SIAM J. Numer. Anal. 25(2), 294–318
  6. Sod (1978), A survey of several finite difference methods for systems of nonlinear hyperbolic conservation laws, J. Comput. Phys. 27(1), 1–31
  7. Quirk (1994), A contribution to the great Riemann solver debate, Int. J. Numer. Methods Fluids 18(6), 555–574
  8. Toro (2009), Riemann Solvers and Numerical Methods for Fluid Dynamics, 3rd ed., Springer
이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

의견을 반영할게요. 감사합니다.

다음으로 읽기 CFL 조건 약 5분 더 탐색 →