| CFL 조건 Courant–Friedrichs–Lewy Condition | |
|---|---|
| 발표 | 1928년, Mathematische Annalen |
| 제안자 | R. Courant, K. Friedrichs, H. Lewy |
| 핵심 물리량 | Courant 수 (CFL 수) |
| 적용 대상 | 명시적 시간 전진 기법 전반 |
1. 개요[편집]
잔차 그래프가 우주로 떠났다면, 가장 먼저 확인할 것은 Courant 수다.
CFL 조건(Courant–Friedrichs–Lewy condition)은 편미분방정식을 명시적(explicit) 시간 전진 기법으로 풀 때 수치 안정성을 위해 시간 간격 가 만족해야 하는 필요조건이다. 1차원 대류 문제에서 다음과 같이 쓴다.
여기서 무차원수 를 Courant 수(Courant number)라 하며, 직관적으로는 “한 시간 스텝 동안 정보가 몇 개의 셀을 가로지르는가”를 뜻한다. 전산유체역학 실무자가 시뮬레이션이 터질 때마다 주문처럼 되뇌는 그 수 맞다. 허용 한계 는 기법에 따라 다르며, 1차 명시적 상류도식의 경우 1이다.
2. 정의와 수식[편집]
다차원 유동에서는 방향별 기여를 합산한 형태를 쓴다.
비정렬 격자를 쓰는 코드에서는 셀별로 면 플럭스와 셀 체적으로부터 국소 Courant 수를 계산하고, 도메인 내 최댓값으로 를 제한하는 것이 일반적이다. 압축성 유동에서는 정보가 유속뿐 아니라 음파로도 전달되므로 전파 속도에 (는 음속)를 사용해야 하며, 저마하수 유동을 압축성 솔버로 풀면 음속이 를 인질로 잡는 바람에 계산이 한없이 느려지는 고전적 문제가 여기서 나온다.1
는 공간 이산화와 시간 적분법의 조합에 따라 달라진다. 예컨대 같은 공간 도식이라도 4단계 룽게-쿠타(Runge-Kutta)로 시간 적분하면 전진 오일러보다 안정 영역이 넓어져 가 커진다. 정확한 값은 폰 노이만 안정성 해석으로 구한다.
3. 물리적 의미[편집]
CFL 조건의 본질은 의존 영역(domain of dependence)의 포함 관계다. 쌍곡형 방정식에서 어떤 점의 해는 특성곡선을 따라 전파되어 온 과거 정보에 의해 결정된다. 그런데 명시적 기법은 다음 스텝 값을 계산할 때 인접한 몇 개 셀의 현재 값만 참조한다. 만약 가 너무 커서 물리적 정보가 한 스텝 만에 수치 기법이 참조하는 범위 바깥까지 이동해 버리면, 수치해는 해에 영향을 주어야 할 정보를 구조적으로 놓치게 된다. 즉 수치적 의존 영역이 물리적 의존 영역을 포함해야 한다는 것이 CFL 조건이다.
비유하자면, 시속 100 km로 달리는 차를 1초에 한 번씩만 찍는 CCTV로 추적하는데 CCTV 간격이 10 m라면 차는 카메라 세 대를 건너뛴다. 어느 카메라도 차의 궤적을 재구성할 수 없다. 정보가 셀을 건너뛰면 수치해도 같은 처지가 된다.
4. 역사[편집]
1928년 괴팅겐 대학의 리하르트 쿠랑(R. Courant), 쿠르트 프리드리히스(K. Friedrichs), 한스 레비(H. Lewy)가 Mathematische Annalen에 발표한 논문 “Über die partiellen Differenzengleichungen der mathematischen Physik”에서 유래한다. 흥미로운 점은 이 논문의 목적이 수치계산이 아니었다는 것이다. 세 사람은 편미분방정식 해의 존재성을 증명하는 이론적 도구로 차분법을 사용했고, 차분해가 미분방정식의 해로 수렴하기 위한 조건으로 이 부등식을 유도했다. 컴퓨터가 등장하기 17년 전의 일이다.2 이 순수 수학 논문은 전자계산기 시대가 열리면서 수치해석의 초석으로 재발견되었고, 1967년 IBM Journal에 영역판이 실리며 고전의 지위를 굳혔다. 유한차분법의 안정성 이론, 나아가 현대 CFD 전체가 이 논문에 빚을 지고 있다.
5. 명시적 기법과 암시적 기법[편집]
CFL 조건의 구속력은 시간 적분 방식에 따라 극적으로 달라진다.
5.1. 명시적 기법[편집]
다음 스텝 값을 현재 스텝 값만으로 계산한다. 스텝당 비용이 싸고 병렬화가 쉬운 대신 CFL 조건을 정직하게 따라야 한다. 격자 어딘가에 아주 작은 셀이 하나라도 있으면 그 셀이 전체 도메인의 를 결정한다. 셀 수백만 개가 최소 셀 하나에게 인질로 잡히는 구조다.
5.2. 암시적 기법[편집]
다음 스텝 값들이 서로 얽힌 연립방정식을 매 스텝 풀어야 한다. 스텝당 비용은 비싸지만 후진 오일러처럼 무조건 안정(unconditionally stable)한 기법은 CFL 제약에서 해방된다. 다만 여기에는 함정이 있는데, 안정하다는 것과 정확하다는 것은 다르다. Courant 수 50으로 돌려도 발산은 안 하지만, 한 스텝에 정보가 셀 50개를 건너뛰는 만큼 과도 현상은 뭉개진다. 그래서 실무 감각은 다음과 같이 정리된다.
- 정상상태 해석: 시간 정확도가 무의미하므로 큰 Courant 수로 수렴만 가속하면 된다.
- 비정상(transient) 해석: 암시적이라도 관심 있는 시간 스케일을 해상하려면 수준을 유지하는 것이 안전하다. LES처럼 난류 구조를 좇는 해석이라면 더욱 그렇다. 난류 모델링 참고.
6. 실무 팁[편집]
- 발산하면 일단 Courant 수부터 낮춰라. 초기 과도 구간은 0.1~0.5로 시작해 유동장이 자리 잡으면 올리는 것이 정석이다. 첫 스텝부터 로 달리는 것은 만용이다.
- 가변 시간 스텝을 활용하라. OpenFOAM의
adjustTimeStep/maxCo처럼 목표 Courant 수에 맞춰 를 자동 조절하는 기능은 웬만하면 켜두는 것이 이득이다. - 정상상태 가속에는 국소 시간 전진(local time stepping)이 유효하다. 셀마다 자신의 CFL 한계에 맞는 를 쓰는 방법으로, 시간 이력은 엉망이 되지만 어차피 정상해만 필요하다면 문제없다. 비정상 해석에서 암시적 기법과 결합하는 이중 시간 전진(dual time stepping)도 같은 계열의 기술이다.
- 범인은 CFL이 아니라 격자일 수 있다. Courant 수를 아무리 낮춰도 발산한다면 찌그러진 셀이나 경계 조건 설정을 의심하라. 최대 Courant 수가 찍히는 셀의 위치를 확인하면 격자의 환부가 어디인지 대체로 드러난다.3
7. 관련 문서[편집]
8. Footnotes[편집]
-
이 문제를 우회하려고 예조건화(preconditioning), 인공 압축성 등 온갖 기법이 개발되었다. 마하 0.01짜리 유동을 압축성 솔버로 푸는 것은 달팽이를 추적하겠다고 초고속 카메라를 동원하는 격이다. ↩
-
세 저자는 계산기가 아니라 연필로 이 조건을 유도했다. 훗날 쿠랑은 뉴욕대에, 프리드리히스와 레비도 미국에 정착해 나치를 피해 망명한 괴팅겐 수학의 유산을 이어갔다. 논문 한 편이 저자들보다 먼저 시대를 옮겨 다닌 셈이다. ↩
-
실무 격언: “최대 Courant 수 셀의 좌표를 찍어보면 십중팔구 격자 생성기가 사고 친 자리다.” 시간 스텝을 줄이는 것은 치료가 아니라 진통제일 때가 많다. ↩