수치확산

편집 역사 토론
수치해석 전산유체역학 시뮬레이션 마지막 수정: 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+1ujnΔt+aujnuj1nΔ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ν)Dnumuxx+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차 스킴이 더 비싸다.