Skip to content
cfd-lab:~/ko/posts/2026-07-09-rayleigh-bena…online
NOTE #099DAY THU 유체역학DATE 2026.07.09READ 4 min readWORDS 2,112#Fluid-Mechanics#Rayleigh-Benard#Natural-Convection#Lorenz-System#유동현상

냄비 바닥에서 시작된 카오스 — Rayleigh–Bénard 대류와 Lorenz 방정식

부력이 점성을 이기는 순간, 대류 롤은 어떻게 카오스가 되나

1900년, 프랑스의 물리학자 앙리 베나르(Henri Bénard)는 얇은 기름층을 아래에서 데우다 이상한 것을 보았다. 정지해 있던 액체가 어느 순간 스스로 육각형 벌집 무늬로 갈라졌다. 아무도 젓지 않았는데 액체가 규칙적으로 움직이기 시작한 것이다. 16년 뒤 레일리 경(Lord Rayleigh)이 그 문턱을 하나의 숫자로 설명했고, 다시 47년 뒤 에드워드 로렌츠는 같은 방정식에서 카오스를 발견했다.

이 글은 냄비를 아래에서 데울 때 벌어지는 일을 세 단계로 따라간다. 부력과 점성의 힘겨루기를 재는 Rayleigh 수(부력/점성·확산 비), 대류가 켜지는 문턱인 임계 Rayleigh 수 1708, 그리고 이 대류를 세 개의 방정식으로 줄였을 때 튀어나오는 Lorenz 카오스까지. Python으로 로렌츠 계를 적분해 대류의 세 얼굴을 직접 확인한다.

정지한 액체는 왜 움직이기 시작하나#

아래가 뜨겁고 위가 찬 액체층을 생각하자. 데워진 아래쪽 액체는 팽창해 가벼워진다. 가벼운 것이 아래, 무거운 것이 위. 뒤집힌 밀도 배치다. 부력은 이 배치를 뒤엎으려 한다.

그런데 액체는 곧바로 솟구치지 않는다. 두 가지가 부력을 붙잡는다. 점성은 흐름을 방해한다. 열확산은 위로 올라가려던 뜨거운 덩어리의 온도를 주변에 흘려 부력을 죽인다. 둘 다 대류를 억누르는 브레이크다.

결국 대류가 켜질지는 힘겨루기로 정해진다. 부력이 이기면 액체가 뒤집히며 순환(대류 롤)이 생긴다. 브레이크가 이기면 액체는 가만히 있고 열은 전도로만 전달된다.

Rayleigh 수 — 뒤엎으려는 힘과 붙잡는 힘의 비#

이 힘겨루기를 하나의 무차원수로 압축한 것이 Rayleigh 수다.

Ra=gβΔTL3να\mathrm{Ra} = \frac{g \beta \, \Delta T \, L^3}{\nu \, \alpha}

gg는 중력 가속도, β\beta는 열팽창 계수(온도가 오를 때 부피가 늘어나는 정도), ΔT\Delta T는 위아래 온도차, LL은 액체층 두께, ν\nu는 동점성 계수, α\alpha는 열확산 계수다. 분자는 뒤엎으려는 부력, 분모는 붙잡는 점성과 확산이다.

핵심은 L3L^3이다. 층이 두꺼워지면 Rayleigh 수는 세제곱으로 커진다. 얇은 기름막은 좀처럼 대류하지 않지만, 깊은 바다나 지구 맨틀은 아주 작은 온도차로도 대류한다. 냄비를 조금만 깊게 해도 대류가 훨씬 쉽게 켜지는 이유다.

임계 Rayleigh 수 1708 — 대류가 켜지는 문턱#

레일리의 선형 안정성 분석은 놀랍도록 깔끔한 답을 준다. 위아래가 자유로운 이상적 경계에서 대류가 시작되는 문턱은 Rac=27π4/4657.5\mathrm{Ra}_c = 27\pi^4/4 \approx 657.5. 실제 실험에서 흔한 강체 벽 경계에서는 Rac1708\mathrm{Ra}_c \approx 1708이다.

Ra<Rac\mathrm{Ra} < \mathrm{Ra}_c이면 어떤 작은 흔들림도 점성과 확산에 먹혀 사라진다. 액체는 정지 상태로 돌아간다. Ra>Rac\mathrm{Ra} > \mathrm{Ra}_c를 넘는 순간, 특정 파장의 흔들림이 스스로 자라기 시작한다. 이것이 대류 롤의 씨앗이다.

아래 시뮬레이션에서 직접 조작해보자. Rayleigh 수를 키우면 대류가 켜지는 문턱을 눈으로 확인할 수 있다.

Rac = 1708전도 (still) — conduction

Ra를 1708 아래로 두면 입자는 거의 멈춰 있고 온도는 위아래로 매끈한 층을 이룬다(전도). 문턱을 넘기면 서로 반대로 도는 롤이 나타나고, 뜨거운 기둥이 올라가고 찬 기둥이 내려온다. Ra를 더 올릴수록 롤의 회전이 빨라진다.

대류 롤의 모양과 Nusselt 수#

문턱을 갓 넘긴 대류는 특정 파장의 롤로 나타난다. 임계 파수는 kc3.117/Lk_c \approx 3.117/L, 즉 롤 하나의 폭이 층 두께와 비슷하다. 롤은 대략 정사각형이다. 이 모양은 우연이 아니라 가장 쉽게 자라는(가장 낮은 Ra에서 켜지는) 모드가 그 파장을 갖기 때문이다.

대류가 열을 얼마나 잘 나르는지는 **Nusselt 수(전체 열전달/순수 전도 열전달 비)**로 잰다.

Nu=qtotalqconduction\mathrm{Nu} = \frac{q_\text{total}}{q_\text{conduction}}

qtotalq_\text{total}은 실제 열유속, qconductionq_\text{conduction}은 대류가 없을 때의 전도 열유속이다. 전도만 있으면 Nu=1\mathrm{Nu}=1. 대류가 세지면 실험적으로 NuRa1/3\mathrm{Nu} \sim \mathrm{Ra}^{1/3} 정도로 커진다. 대류는 단순히 열을 조금 더 옮기는 게 아니라, 전도로는 불가능한 규모로 열을 퍼 나른다.

Lorenz가 세 방정식으로 줄인 대류#

1963년, 기상학자 에드워드 로렌츠는 이 대류를 극단적으로 단순화했다. 온도장과 유동장을 가장 굵은 몇 개의 모드만 남기고 잘라내면(Galerkin 절단), 편미분 방정식이 단 세 개의 상미분 방정식으로 줄어든다.

x˙=σ(yx)y˙=x(ρz)yz˙=xyβz\begin{aligned} \dot{x} &= \sigma (y - x) \\ \dot{y} &= x(\rho - z) - y \\ \dot{z} &= xy - \beta z \end{aligned}

xx는 대류 롤의 순환 세기, yy는 상승·하강 기둥의 온도차, zz는 수직 온도 분포의 뒤틀림이다. σ\sigma는 Prandtl 수(운동량 확산/열 확산 비), β\beta는 기하 상수, 그리고 ρ\rho는 바로 Ra/Rac\mathrm{Ra}/\mathrm{Ra}_c—우리가 계속 이야기한 그 Rayleigh 비다.

ρ\rho를 올린다는 건 냄비를 더 세게 데우는 것과 같다. ρ<1\rho<1이면 모든 궤적이 원점으로 간다(전도). 1<ρ<24.741<\rho<24.74이면 원점에서 벗어난 고정점으로 수렴한다(정상 대류 롤). ρ>24.74\rho>24.74를 넘으면 궤적은 어떤 고정점에도 안착하지 못하고 두 날개 사이를 영원히 오간다. 카오스다.

Python — 대류의 세 얼굴을 적분한다#

로렌츠 계를 4차 Runge–Kutta로 적분해 ρ\rho에 따라 대류가 어떻게 달라지는지 본다.

import numpy as np
 
SIGMA, BETA = 10.0, 8.0 / 3.0
 
def lorenz_deriv(state, rho):
    x, y, z = state
    return np.array([
        SIGMA * (y - x),        # 롤 순환 세기의 변화
        x * (rho - z) - y,      # 상승·하강 온도차의 변화
        x * y - BETA * z,       # 수직 온도 왜곡의 변화
    ])
 
def integrate_rk4(rho, dt=0.01, n=20000, s0=(0.6, 0.4, 0.2)):
    s = np.array(s0, dtype=float)
    traj = np.empty((n, 3))
    for i in range(n):
        k1 = lorenz_deriv(s, rho)
        k2 = lorenz_deriv(s + 0.5 * dt * k1, rho)
        k3 = lorenz_deriv(s + 0.5 * dt * k2, rho)
        k4 = lorenz_deriv(s + dt * k3, rho)
        s = s + (dt / 6.0) * (k1 + 2 * k2 + 2 * k3 + k4)
        traj[i] = s
    return traj
 
def convection_regime(rho):
    tail = integrate_rk4(rho)[-4000:]          # 초기 과도를 버린 꼬리
    spread = tail[:, 0].max() - tail[:, 0].min()
    if abs(tail[-1, 0]) < 1e-3 and rho < 1.0:
        return "conduction"                     # 원점으로 수렴
    if spread < 0.1:
        return "steady roll"                    # 고정점으로 수렴
    return "chaos"                              # 두 날개 사이 진동
 
for rho in (0.8, 15.0, 28.0):
    print(f"rho={rho:5.1f} -> {convection_regime(rho)}")

출력은 다음과 같다.

rho=  0.8 -> conduction
rho= 15.0 -> steady roll
rho= 28.0 -> chaos

같은 방정식이 데우는 세기 하나로 정지·정상 대류·카오스를 오간다. 아래 시뮬레이션에서 직접 조작해보자.

카오스 — 나비 날개 (chaotic convection)
가로축 x = 롤 순환 세기, 세로축 z = 수직 온도 왜곡. 노란 점 = 고정점 C±.

ρ\rho를 24.74 아래로 두면 궤적은 노란 고정점(정상 대류 롤) 중 하나로 빨려든다. 문턱을 넘기면 그 유명한 나비 날개가 나타난다. reset을 눌러 아주 조금 다른 시작점을 주면, 처음엔 겹쳐 가던 두 궤적이 곧 완전히 갈라진다—나비 효과다.

기억할 점#

  • Rayleigh 수는 뒤엎으려는 부력과 붙잡는 점성·확산의 비다. L3L^3에 비례해 깊은 층일수록 대류가 쉽다.
  • 임계값 1708을 넘으면 정지한 액체가 스스로 대류 롤로 조직된다. 대류는 켜지고 꺼지는 문턱 현상이다.
  • 로렌츠의 세 방정식은 이 대류의 축소판이고, 데우는 세기 ρ\rho를 올리면 정상 대류가 카오스로 무너진다. 날씨 예측의 한계는 바로 이 냄비 바닥에서 시작됐다.

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