수치확산

오류 제보
수치해석 전산유체역학 시뮬레이션 마지막 수정: 2026-09-15 04:37:05

○ 공개 검수 대기 표시 기준 보기

1. 개요

수치확산(numerical diffusion)은 이산화 오차가 물리적 확산과 똑같이 생긴 항으로 나타나 해를 실제보다 더 퍼지게 만드는 현상이다. 코드에 확산항을 넣지 않았는데도 날카로운 경계면이 뭉개지고, 온도 구배가 무뎌지고, 오염물 농도 피크가 낮아진다. “물리를 안 넣었는데 물리가 생겼다”는 점에서 가장 헷갈리기 쉬운 오차이며, 수치분산(위상 오차로 파형이 갈라지는 현상)과는 원인이 다르다.1

2. 어디서 나오는가

1차원 선형 이류 방정식 ut+aux=0u_t + a u_x = 0 (a>0a>0)을 1차 상류차분으로 이산화하면

ujn+1−ujnΔt+a ujn−uj−1nΔx=0\frac{u_j^{n+1}-u_j^n}{\Delta t} + a\,\frac{u_j^n - u_{j-1}^n}{\Delta x} = 0

이 된다. 좌변을 테일러 급수로 전개해 원래 방정식을 대입하고 정리하면, 이 스킴이 실제로 풀고 있는 방정식이 드러난다.

ut+aux=aΔx2 (1−ν)⏟Dnum uxx+O(Δx2)u_t + a u_x = \underbrace{\frac{a \Delta x}{2}\,(1 - \nu)}_{\textstyle D_{\text{num}}} \, u_{xx} + O(\Delta x^2)

여기서 ν=aΔt/Δx\nu = a\Delta t/\Delta x는 쿠랑 수다. 우변의 uxxu_{xx} 계수가 바로 수치확산계수이고, 이렇게 얻은 식을 수정 방정식(modified equation)이라 부른다. 세 가지가 즉시 읽힌다.

  • Dnum∝ΔxD_{\text{num}} \propto \Delta x — 격자를 절반으로 줄이면 수치확산도 절반이 된다. 1차 정확도라는 말의 실질적 의미다.
  • ν=1\nu = 1이면 수치확산이 정확히 0이다. 쿠랑 수가 1일 때 상류차분이 해를 정확히 한 칸 밀어 주는 특이한 경우.
  • ν>1\nu > 1이면 계수가 음수가 되어 반확산이 된다. 이게 불안정성의 정체이고, 폰 노이만 안정성 해석이 말하는 CFL 조건과 같은 결론을 다른 언어로 준다.

2차원에서는 상황이 더 나쁘다. 흐름이 격자선에 비스듬할 때 수치확산은 등방적이지 않고 유선 횡단 방향으로 특히 커진다. 45° 흐름에서 최악이 되며, 격자 정렬 오차(grid alignment error)라 불린다. 오염물 플룸이 실제보다 옆으로 퍼지는 게 대표 증상이다.

3. 왜 그냥 없애지 못하는가

중앙차분을 쓰면 짝수 차수 오차항이 사라져 수치확산이 없어진다. 그런데 이류 지배 문제(페클레 수가 큰 경우)에서 중앙차분은 셀 페클레 수 Pecell=aΔx/D>2Pe_{\text{cell}} = a\Delta x/D > 2 에서 진동한다. 농도가 음수로 내려가고, 화학종 수송이면 곧바로 계산이 폭발한다.

즉 선택지는 “뭉개지느냐 진동하느냐”이고, 이게 이류 이산화의 근본 긴장이다. 고뎌노프의 장벽 정리는 이걸 정리로 못 박았다 — 선형이고 단조성을 보존하는 스킴은 1차 정확도를 넘을 수 없다. 그래서 현대적 해법은 모두 비선형이다.

접근방법대가
1차 상류단조, 안정수치확산 큼
중앙차분수치확산 없음진동, 음수 농도
2차 상류·QUICK확산 줄임약한 진동 남음
MUSCL·플럭스 제한자매끈한 곳 2차, 불연속 근처 1차비선형, 국소 1차
불연속 갤러킨법·WENO고차비용, 구현 복잡
준라그랑주·입자추적이류 오차 최소질량 보존 별도 처리

전변분 감소(TVD) 조건을 만족하는 제한자 계열이 실무 표준이 된 이유가 여기 있다. 매끈한 영역에서는 고차 플럭스를, 구배가 급한 영역에서는 상류 플럭스를 국소적으로 섞어 진동 없이 확산을 줄인다.

4. 진단하는 방법

수치확산인지 물리적 확산인지 구분하는 실전 점검.

  1. 격자 세분화 시험. Δx\Delta x를 절반으로 줄여 피크가 다시 높아지면 수치확산이다. 물리적 확산이면 값이 수렴한다. 격자 수렴 지수로 정량화하는 게 정석이고, 리처드슨 외삽법으로 격자 무한 극한을 추정할 수 있다.
  2. 셀 페클레 수 계산. Pecell=uΔx/DPe_{\text{cell}} = u\Delta x/D. 이게 10을 넘으면 물리적 확산은 사실상 장식이고 수치확산이 답을 지배한다.
  3. 수정 방정식의 계수와 물리 계수 비교. aΔx/2a\Delta x/2 와 실제 DD를 직접 비교해 본다. 지하수 수송에서 종분산도 αL=1\alpha_L = 1 m인데 격자가 50 m면 수치확산이 물리 분산의 25배다. 격자가 다 한 게 아니라 격자가 다 망친 것.
  4. 역방향 시험. 속도장을 반전시켜 한 주기 돌린 뒤 초기 분포와 비교한다. 이류만 있으면 원래대로 돌아와야 하는데, 수치확산이 있으면 돌아오지 못한다 — 확산은 비가역이니까. 회전하는 원뿔·Zalesak 슬롯 원판 문제가 이 목적의 표준 시험이다.

5. 쓸모 있는 수치확산

늘 나쁜 건 아니다. 충격파 포착 스킴은 불연속을 안정화하려고 인공점성을 일부러 넣는다. 폰 노이만과 리흐트마이어의 1950년 아이디어가 그것이고, 오늘날 리만 솔버의 상류 편향도 결국 통제된 수치확산이다. 핵심은 양이 아니라 국소성이다. 불연속 근처에만 두 세 칸 폭으로 넣고 매끈한 영역은 건드리지 않으면, 충격파는 잡히고 정확도는 살아남는다.

난류 해석에서는 이 구분이 더 미묘해진다. 암시적 LES(ILES)는 수치 스킴의 소산을 아예 아격자 모델 대신 쓰는 접근인데, 잘 되는 경우도 있지만 격자를 바꾸면 “모델”이 바뀌는 셈이라 재현성이 떨어진다. 스킴이 물리를 대신할 때는 그렇게 쓰고 있다는 사실을 명시해야 한다. V&V 정신은 여기서도 같다 — 무엇을 풀고 있는지 알 것.23

6. 관련 문서

7. Footnotes

  1. 둘을 합쳐 “수치소산”이라고 뭉뚱그리는 문헌도 있는데, 수정 방정식에서 짝수 차수 미분항은 확산(진폭 감쇠), 홀수 차수는 분산(위상 오차)으로 딱 갈린다. 구분해서 보는 편이 디버깅에 훨씬 유용하다. ↩

  2. 그래서 “우리 코드는 난류 모델 없이도 난류가 나옵니다”라는 자랑은 절반이 칭찬이고 절반이 고백이다. ↩

  3. 회의에서 “격자를 더 촘촘히 하면 됩니다”가 통하지 않는 순간이 있다. 3차원에서 Δx\Delta x를 절반으로 줄이면 셀은 8배, 시간 스텝까지 CFL로 묶이면 비용은 16배다. 1차 스킴에서 오차는 겨우 절반. 고차 스킴이 비싼 게 아니라 1차 스킴이 더 비싸다. ↩

이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

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

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