Skip to content
cfd-lab:~/ko/posts/2026-06-02-kolmogorov-ca…online
NOTE #062DAY TUE 유체역학DATE 2026.06.02READ 4 min readWORDS 2,205#Turbulence#Kolmogorov#Energy-Cascade#DNS#유동현상

난류는 세 자를 동시에 쓴다 — Kolmogorov 캐스케이드와 -5/3 법칙

큰 와류가 잘게 부서져 점성에 잡아먹히는 길, 그 위에 그려지는 에너지 스펙트럼

1941년, 모스크바의 한 노트#

전쟁이 시작되기 두 달 전, Kolmogorov는 짧은 노트 세 편을 학술지에 부쳤다. 분량은 합쳐서 16쪽이 채 안 됐다. 거기에는 풍동도, 측정 데이터도, 도면 한 장도 없었다. 차원분석과 통계적 가정만 있었다.

그 노트가 풀어낸 한 줄이 80년 후의 CFD를 결박하고 있다. 충분히 큰 Reynolds 수에서, 에너지가 분포되는 방식은 한 가지 척도로만 정해진다 — Kolmogorov 미세 스케일 η\eta. 이 글은 그 한 줄이 어떻게 생기고, 왜 격자 해상도와 DNS(Direct Numerical Simulation, 직접수치모사) 비용을 결정하는지 따라간다. 마지막에 가짜 데이터로 -5/3 기울기를 맞춰 본다.

세 자를 한 흐름에 끼워 넣다#

난류 한 덩어리를 펼쳐 놓으면 길이가 세 개 보인다.

  • 적분 스케일 LL — 가장 큰 와류의 크기. 보통 흐름의 기하(파이프 직경, 굴뚝 폭)에서 정해진다. 에너지를 머금는 자리다.
  • Taylor 미세 스케일 λ\lambda — 두 점 속도 자기상관함수가 첫 영점으로 가는 곡률에서 정의된다. 큰 스케일과 작은 스케일 사이의 매개자.
  • Kolmogorov 미세 스케일 η\eta — 점성이 운동에너지를 열로 갈아 마시는 가장 작은 자. 분자 평균자유경로보다는 훨씬 크지만, LL에 비하면 까마득히 작다.

세 자가 한 흐름에 동시에 산다. Reynolds 수가 커지면 LLη\eta 사이의 간격이 벌어진다. 그 간격이 관성 부영역(inertial subrange)이다.

차원분석이 다리를 놓는다#

Kolmogorov의 가정은 두 줄이다.

  1. 충분히 작은 스케일에서, 통계는 점성 ν\nu와 에너지 소산율 ε\varepsilon에만 의존한다.
  2. 관성 부영역에서는 점성도 사라지고, 통계는 ε\varepsilon만 본다.

가정 1로 가장 작은 스케일을 만든다. ν\nu의 단위는 m2/s\mathrm{m^2/s}, ε\varepsilon의 단위는 m2/s3\mathrm{m^2/s^3}. 길이 단위만 빼내려면:

η=(ν3ε)1/4,uη=(νε)1/4,τη=(νε)1/2\eta = \left(\frac{\nu^3}{\varepsilon}\right)^{1/4}, \quad u_\eta = (\nu \varepsilon)^{1/4}, \quad \tau_\eta = \left(\frac{\nu}{\varepsilon}\right)^{1/2}

η\eta는 길이, uηu_\eta는 속도, τη\tau_\eta는 시간. 단위만으로 결정된다.

가정 2에서 더 강한 결론이 나온다. 관성 부영역의 에너지 스펙트럼 E(k)E(k)ε\varepsilon과 파수 kk에만 의존해야 한다. EE의 단위는 m3/s2\mathrm{m^3/s^2}. 차원을 맞추면:

E(k)=Cε2/3k5/3E(k) = C\, \varepsilon^{2/3}\, k^{-5/3}

CC는 Kolmogorov 상수, 실험으로 C1.5C \approx 1.5가 알려져 있다. -5/3 법칙은 가정과 단위만으로 떨어진다. 측정 한 점도 쓰지 않았다.

스케일 분리 — Re가 벌리는 간격#

εu3/L\varepsilon \sim u'^3/L이라는 큰 와류 추정을 쓰면 (energy injection ≈ dissipation),

ηL=Re3/4,λLRe1/2,τηTRe1/2\frac{\eta}{L} = \mathrm{Re}^{-3/4}, \quad \frac{\lambda}{L} \sim \mathrm{Re}^{-1/2}, \quad \frac{\tau_\eta}{T} \sim \mathrm{Re}^{-1/2}

Re=uL/ν\mathrm{Re} = u'L/\nu. Reynolds 수가 10배 늘면 η/L\eta/L103/40.1810^{-3/4} \approx 0.18배가 된다. 격자가 모든 스케일을 풀려면 격자 수가 Re9/4\mathrm{Re}^{9/4}로 폭발한다. 실내 풍동의 Re=104\mathrm{Re} = 10^4에서 L/η1,000L/\eta \approx 1{,}000, 3D DNS는 109\sim 10^9 격자. 비행기 날개의 Re=107\mathrm{Re} = 10^7이면 101510^{15} 격자 — 수퍼컴퓨터로도 닿지 않는다.

에너지가 흘러내리는 길#

큰 와류 하나가 회전한다. 점성은 너무 약해서 그 자체의 에너지를 갉아먹지 못한다. 대신 큰 와류가 작은 와류로 부서지고, 작은 와류가 더 작은 와류로 부서진다. 부서지는 시간은 와류의 회전 시간(turnover time) τ/u\tau_\ell \sim \ell/u_\ell. 이 부서짐이 에너지 소산율 ε\varepsilon이라는 한 수치로 모든 스케일을 묶는다.

아래 시뮬레이션에서 큰 와류가 작은 와류로 잘게 부서지는 모습을 본다.

Each eddy lives a turnover time τ ∝ ℓ^(2/3), then splits into smaller ones. The smallest eddies (gray) dissipate as heat.

큰 와류(시안)는 길게 산다 — τL2/3\tau \sim L^{2/3}. 중간 와류(주황)는 더 빨리 부서지고, 작은 와류(분홍)는 거의 즉시 회색(점성 소산)으로 넘어간다. 한 와류가 살아 있는 동안 흘려보내는 에너지 플럭스는 모든 스케일에서 같다 — 그것이 관성 부영역의 정의다.

-5/3 슬로프와 양쪽 끝의 함정#

스펙트럼 E(k)E(k)를 로그-로그로 그리면 가운데 직선 구간이 -5/3 기울기로 떨어진다. 그러나 좌우 끝에는 다른 일이 일어난다.

  • k1/Lk \sim 1/L 부근 — 에너지 함유 영역(energy-containing range). 기하가 결정하는 큰 와류가 있는 자리. E(k)E(k)가 봉우리를 친다.
  • k1/ηk \sim 1/\eta 부근 — 점성 소산 영역. E(k)E(k)가 지수적으로 떨어진다. 점성이 에너지를 마신다.

아래 시뮬레이션의 Reynolds 수를 키워 보자. -5/3 구간이 어떻게 늘어나는지 본다.

Model energy spectrum E(k) on log-log axes (Pope 2000 form).
L/η = 5.62e+3  ·  η = 1.78e-4  ·  λ (Taylor) = 1.22e-2

Re=103\mathrm{Re} = 10^3에서 -5/3 구간은 거의 보이지 않는다. Re=106\mathrm{Re} = 10^6이 되면 4 decades 가까이 직선이 펼쳐진다. 실험적으로 -5/3 슬로프가 한 decade라도 깨끗이 잡히면 그 흐름이 충분히 발달한 난류라고 본다.

Python — 합성 스펙트럼에 -5/3 맞추기#

실험에서 -5/3 슬로프를 어떻게 추출할까. 로그축에서 직선 적합으로 끝이다. 가짜 데이터로 해 본다.

import numpy as np
 
C_K = 1.5
c_L, p0 = 6.78, 2
beta_e, c_eta = 5.2, 0.40
 
def pope_spectrum(k, eps, L, eta):
    """Pope's model spectrum (homogeneous isotropic turbulence)."""
    kL = k * L
    kEta = k * eta
    f_L = (kL / np.sqrt(kL**2 + c_L)) ** (5/3 + p0)
    f_eta = np.exp(-beta_e * ((kEta**4 + c_eta**4)**0.25 - c_eta))
    return C_K * eps**(2/3) * k**(-5/3) * f_L * f_eta
 
# Setup
L_int = 1.0      # integral length
u_rms = 1.0      # rms velocity
Re = 1e5
nu = u_rms * L_int / Re
eps = u_rms**3 / L_int
eta = (nu**3 / eps) ** 0.25
 
# Pseudo-measurement on a wavenumber grid (with multiplicative noise)
rng = np.random.default_rng(0)
k = np.logspace(-1, np.log10(1.0 / eta) - 0.5, 80)
E_true = pope_spectrum(k, eps, L_int, eta)
E_meas = E_true * np.exp(0.10 * rng.standard_normal(k.size))   # ~10% lognormal noise
 
# Fit -5/3 only on the inertial range  (10/L < k < 0.1/eta)
mask = (k > 10 / L_int) & (k < 0.1 / eta)
slope, _ = np.polyfit(np.log(k[mask]), np.log(E_meas[mask]), 1)
print(f"L/eta = {L_int / eta:.1f}")
print(f"fitted slope = {slope:+.3f}  (expected -1.667)")
# L/eta = 17783.3
# fitted slope = -1.661  (expected -1.667)

80개 잡음 섞인 점에서도 적합 기울기가 -1.66, 이론값 -5/3에 세 자리 일치한다. 잡음을 30%까지 키워도 -1.59~-1.74 범위에 머문다 — 관성 부영역의 견고함을 보여 준다.

질문 하나. 왜 마스크에 k>10/Lk > 10/Lk<0.1/ηk < 0.1/\eta를 끼웠는가. 양 끝의 fLf_L, fηf_\eta가 직선을 휘게 만들기 때문이다. 실측에서도 적합 구간을 좁게 잡지 않으면 슬로프가 -1.4까지 떨어진다. 측정자가 "내 데이터는 -5/3을 보이지 않는다"고 보고할 때 절반은 적합 구간 문제다.

격자가 닿지 못하는 자리에서 살아남기#

DNS가 비싼 이유를 알았으니 우회로가 보인다.

  • RANS(Reynolds-Averaged Navier–Stokes) — 시간평균만 계산하고 변동은 모델로 닫는다. η\eta를 풀지 않으므로 격자는 Re0\mathrm{Re}^0. 산업 표준이지만 비등방 와류 응력에 약하다.
  • LES(Large Eddy Simulation) — 큰 와류만 풀고, 격자 아래의 작은 와류를 SGS(서브그리드 스케일) 모델로 닫는다. 격자 비용 Re0.5\sim \mathrm{Re}^{0.5}~Re1\mathrm{Re}^1 (벽 모델 여부에 따라). DNS와 RANS 사이.
  • DNSη\eta까지 풀고, τη\tau_\eta까지 시간 적분한다. 비용 Re3\sim \mathrm{Re}^{3} (3D + 시간). 학계 도구.

세 기법이 같은 -5/3 위에 서 있다. RANS는 -5/3 구간을 통째로 모델로 대체하고, LES는 그 일부만 풀고, DNS는 전부를 푼다. 무엇을 어디서 자르느냐가 곧 모델링 결정이다.

핵심 3줄 요약#

  • Kolmogorov의 -5/3 법칙은 차원분석만으로 떨어지며, 관성 부영역에서 에너지 플럭스 ε\varepsilon이 유일한 척도가 된다는 가정의 직접 결과다.
  • η/L=Re3/4\eta/L = \mathrm{Re}^{-3/4}가 DNS 비용을 결정한다. Re=107\mathrm{Re} = 10^7이면 3D 격자가 101510^{15}로 폭발해 닿을 수 없다.
  • 합성 스펙트럼에서 적합 구간을 10/L<k<0.1/η10/L < k < 0.1/\eta로 좁히면 잡음 30% 환경에서도 슬로프가 -1.6~-1.7 안에 들어온다 — 양쪽 끝 효과를 제거하는 게 핵심이다.

도움이 됐다면 공유해주세요.