1. 개요[편집]
리만 솔버(Riemann solver)는 서로 다른 두 상태가 맞닿아 있는 불연속 초기조건, 즉 리만 문제(Riemann problem)의 해를 구해 셀 경계면을 통과하는 수치 플럭스(numerical flux)를 계산하는 알고리즘이다. 압축성 유동을 유한체적법으로 풀 때, 각 셀 경계는 좌우 셀 값이 딱 끊겨 있는 작은 불연속면이다. 이 불연속이 시간이 지나며 어떤 파동으로 갈라지는지를 풀어주는 것이 리만 솔버의 임무다.
쉽게 말하면 “칸막이 하나 사이에 압력 다른 두 기체가 있을 때, 칸막이를 확 뽑으면 뭐가 어디로 튀는가?”를 매 셀 경계, 매 시간 스텝마다 수백만 번 푸는 것이다. 셀 경계 하나하나가 미니 충격파 튜브(shock tube)인 셈. 압축성 CFD 솔버의 심장부이자, 계산 시간의 상당 부분을 잡아먹는 병목이기도 하다.1
2. 리만 문제란[편집]
리만 문제는 다음처럼 정의된다. 하나의 쌍곡형 보존 법칙
에 대해, 초기조건이 원점을 기준으로 두 개의 상수 상태로 갈라져 있다.
이 단순해 보이는 문제가 실은 압축성 유체역학의 정수를 담고 있다. 오일러 방정식의 리만 문제 해는 원점에서 부채꼴로 퍼지는 세 종류의 파동으로 구성된다.
- 충격파(shock wave): 밀도·압력·속도가 불연속으로 뛰는 파동. 압축이 일어난다.
- 팽창파(rarefaction/expansion wave): 매끄럽게 물리량이 변하는 부채꼴 영역. 감압이 일어난다.
- 접촉 불연속면(contact discontinuity): 밀도는 뛰지만 압력과 속도는 연속인, 물질 경계 같은 면.
1차원 오일러 방정식의 경우 좌우로 두 개의 음향파(각각 충격 또는 팽창)와 가운데 하나의 접촉면, 총 3-파동 구조가 나온다. 이 구조를 얼마나 정확히·싸게 재현하느냐가 리만 솔버들을 가르는 기준이다.
3. Godunov 법[편집]
리만 솔버가 CFD에 들어온 계기는 1959년 세르게이 고두노프(Sergei Godunov)의 유한체적법 정식화다. **Godunov 법**의 아이디어는 이렇다. 유동장을 셀마다 상수로 근사하면, 모든 셀 경계는 자동으로 리만 문제가 된다. 각 경계에서 국소 리만 문제를 풀어 경계 플럭스를 얻고, 그것으로 셀 평균값을 시간 전진시킨다.
이 방식의 매력은 충격파를 물리적으로 올바르게 포착한다는 점이다. 리만 문제 자체가 충격파의 엔트로피 조건을 내장하고 있어, 인위적 점성(artificial viscosity)을 억지로 끼얹지 않아도 불연속을 안정적으로 잡는다. 대신 원래 Godunov 법은 공간 1차 정확도라 충격파 주변이 뭉개진다. 이를 개선한 것이 MUSCL·PPM 같은 고차 재구성과 TVD 도식이며, 여기서도 매 경계의 플럭스는 결국 리만 솔버가 계산한다.
4. 정확 vs 근사[편집]
리만 문제를 “정확히” 푸는 것도 가능하다. 오일러 방정식 정확 리만 솔버는 접촉면을 사이에 둔 별 영역(star region)의 압력 에 대한 비선형 방정식을 뉴턴 반복으로 풀어낸다. 뉴턴-랩슨법을 매 셀 경계마다 돌리는 셈이라 정확하지만 느리다.
그래서 실무는 대부분 근사 리만 솔버(approximate Riemann solver)를 쓴다. 반복 없이 대수적으로 플럭스를 근사해 훨씬 싸다. 대표적인 세 가지를 보자.
| 솔버 | 핵심 아이디어 | 성격 |
|---|---|---|
| Roe | 비선형계를 국소 선형화, 파동별 분해 | 접촉면 선명, 엔트로피 픽스 필요 |
| HLL | 좌우 2개 파동만 가정, 중간은 평균 | 견고, 접촉면·전단층 뭉개짐 |
| HLLC | HLL에 접촉파(C) 복원 | 견고 + 접촉면 유지, 국룰 |
Roe 솔버는 자코비안 행렬을 특별한 평균 상태(Roe 평균)에서 선형화해 리만 문제를 파동 성분으로 분해한다. 접촉면과 전단층을 매우 선명하게 잡지만, 팽창 충격(expansion shock)이라는 비물리적 해가 새기 쉬워 엔트로피 픽스(entropy fix)를 덧대야 한다.2
HLL 솔버(Harten–Lax–van Leer)는 아예 파동을 좌우 두 개로 뭉뚱그린다. 견고하고 코드가 짧지만 가운데 접촉파를 무시해 접촉면·경계층이 심하게 확산된다. 이 약점을 고친 것이 **HLLC 솔버**로, 이름의 C가 바로 복원된 접촉파(Contact)다. 견고함과 정확도의 균형이 좋아 오늘날 압축성 솔버의 사실상 표준으로 쓰인다.
5. 압축성 유동에서의 역할[편집]
리만 솔버가 진가를 발휘하는 곳은 충격파가 등장하는 압축성 유동이다. 초음속 노즐, 재진입체 주변의 활강 충격파, 초음속 제트, 폭발·데토네이션 같은 문제에서는 물리량이 실제로 불연속이므로, 이를 뭉개지 않고 잡아내는 충격 포착(shock-capturing) 능력이 핵심이다.
Godunov 계열 + 리만 솔버 + 고차 재구성 조합은 이런 문제에서 진동(oscillation) 없이 날카로운 충격을 잡는 것으로 정평이 나 있다. 다만 대가도 있다. 저마하수(거의 비압축성) 영역으로 가면 리만 솔버 기반 도식은 과도한 수치 소산으로 정확도가 떨어진다. 그래서 저마하 보정(low-Mach preconditioning)을 추가하거나, 격자 볼츠만 방법처럼 아예 다른 접근을 쓰기도 한다.3
또한 리만 솔버는 단상 오일러 방정식을 넘어 다상류, 자기유체역학(MHD), 상대론적 유동으로도 확장되었다. 어떤 보존 법칙이든 쌍곡형이고 파동 구조가 있으면 리만 솔버의 사고방식이 통한다는 점에서, 이것은 단순한 하나의 알고리즘이 아니라 압축성 수치해석 전체를 관통하는 하나의 세계관에 가깝다.4
6. 관련 문서[편집]
7. Footnotes[편집]
-
그래서 리만 솔버 코드는 극한까지 최적화된다. “정확한 솔버 한 번 = 근사 솔버 열 번”이라는 체감이 있어, 반복 없는 근사 솔버가 사랑받는 실용적 이유가 여기에 있다. ↩
-
Roe 솔버가 팽창 충격을 만드는 이유는 선형화 과정에서 음속점(sonic point) 근처 정보가 뭉개지기 때문이다. Harten–Hyman 엔트로피 픽스로 이 구멍을 메운다. “정확도를 위해 근사를 하고, 그 근사를 고치려고 또 픽스를 붙인다”는 게 수치해석의 국룰이다. ↩
-
저마하수에서 리만 솔버가 망가지는 건 압력 섭동과 속도 섭동의 스케일이 크게 달라지기 때문이다. 견고하라고 넣은 수치 소산이 이 미세한 압력 신호를 잡아먹는다. ↩
-
Toro의 명저 Riemann Solvers and Numerical Methods for Fluid Dynamics는 이 바닥의 바이블이다. 두께만 봐도 리만 솔버가 얼마나 깊은 우물인지 짐작이 간다. ↩