Skip to content
cfd-lab:~/ko/posts/2026-05-09-saurel-2009-p…online
NOTE #038DAY SAT 논문리뷰DATE 2026.05.09READ 4 min readWORDS 2,247#논문리뷰#compressible-multiphase#Diffuse-Interface#Saurel#Pressure-Relaxation#Kapila-model

[논문 리뷰] 두 압력으로 풀고 한 압력으로 합치다 — Saurel(2009) 압축성 다상유동 이완법

5-방정식 다상모델의 함정을 6-방정식 압력 비평형 + 이완으로 우회한 Saurel·Petitpas·Berry(2009) 리뷰.

미국 아이다호 국립연구소의 핵연료 안전 시뮬레이션이 멈췄다. 액체 나트륨 사이에 갇힌 가스 거품 한 칸의 음속이 갑자기 25 m/s까지 곤두박질친 탓이다. 평형 압력을 가정한 5-방정식 다상유동 모델의 한계였다. Richard Saurel과 두 동료는 2009년 한 발짝 물러서는 답을 내놓는다 — 두 상의 압력을 일부러 다르게 풀어두고, 매 시간 스텝 끝마다 강제로 같게 만들어라. 이 글은 그 6-방정식 비평형 + 이완 알고리즘이 왜 작동하는지, 인터페이스 압력 p^I\hat{p}_I의 임피던스 가중평균은 어디서 오는지, Wood와 frozen 두 음속 곡선이 무엇을 다르게 보는지를 따라간다.

한 줄 요지#

평형 5-방정식이 음속에서 무너진다. 6-방정식으로 한 단계 물러나 풀고, 강체 이완으로 다시 합쳐라. 인터페이스 압력은 임피던스 평균 p^I=(Z2p1+Z1p2)/(Z1+Z2)\hat{p}_I = (Z_2 p_1 + Z_1 p_2)/(Z_1+Z_2) 한 줄이 모든 것을 받쳐준다.

Wood 음속이 모래주머니다#

Kapila(2001)의 5-방정식 모델은 압력 평형을 가정한다. 두 상이 한 셀 안에서 같은 압력을 갖는다는 가정이다. 깔끔해 보이지만 음속이 이상해진다. 혼합 음속 ceqc_{eq}는 Wood(1930) 공식

1ρceq2=α1ρ1c12+α2ρ2c22\frac{1}{\rho c_{eq}^2} = \frac{\alpha_1}{\rho_1 c_1^2} + \frac{\alpha_2}{\rho_2 c_2^2}

을 따르는데, 여기서 αk\alpha_k는 상 kk의 부피분율, ρk\rho_k는 밀도, ckc_k는 순수 음속이다. 문제는 이 곡선이 단조하지 않다는 점이다. 물(1500 m/s)과 공기(340 m/s)가 섞인 셀의 평형 음속은 두 끝값보다 한참 낮은 약 24 m/s까지 내려간다.

아래 시뮬레이션에서 직접 조작해보자. 아래 슬라이더로 ρk\rho_k, ckc_k를 바꾸면서 두 음속 곡선의 차이를 본다.

Wood (equilibrium) sound speed dips far below either pure-fluid value near intermediate α; frozen speed stays inside the [c₂, c₁] band.

수치 확산 영역에서는 두 끝점 사이의 가상 혼합이 잠깐 만들어지고, 음파는 그 안에서 갑자기 느려진다. 음파의 도달 시간이 어긋나 충격파 추적이 망가진다. 게다가 α\alpha가 0이나 1에 닿을 때 양의 부피분율을 보장하기도 까다롭다.

우회로 — 압력을 일부러 다르게 둔다#

Saurel은 한 단계 뒤로 물러난다. 압력 평형 가정을 깨고 두 상이 서로 다른 압력 p1p_1, p2p_2를 가질 수 있게 한다. 7-방정식 Baer–Nunziato 모델에서 속도 이완 극한만 먼저 취한 결과가 6-방정식 모델이다.

tα1+uxα1=μ(p1p2)\partial_t \alpha_1 + u\,\partial_x \alpha_1 = \mu(p_1 - p_2) t(αkρk)+x(αkρku)=0\partial_t (\alpha_k \rho_k) + \partial_x(\alpha_k \rho_k u) = 0 t(ρu)+x(ρu2+α1p1+α2p2)=0\partial_t (\rho u) + \partial_x(\rho u^2 + \alpha_1 p_1 + \alpha_2 p_2) = 0 t(αkρkek)+x(αkρkeku)+αkpkxu=±pIμ(p1p2)\partial_t (\alpha_k \rho_k e_k) + \partial_x(\alpha_k \rho_k e_k u) + \alpha_k p_k\,\partial_x u = \pm p_I \mu (p_1 - p_2)

여기서 μ\mu는 압력 이완율(stiffness), pIp_I는 인터페이스 압력, eke_k는 상별 내부에너지다. 이 모델의 음속은

cf2=Y1c12+Y2c22c_f^2 = Y_1 c_1^2 + Y_2 c_2^2

로 단조하다. Yk=αkρk/ρY_k = \alpha_k \rho_k / \rho는 질량분율. Wood가 만든 모래주머니가 사라진다.

인터페이스 압력 p^I\hat{p}_I — 임피던스 가중평균#

내부에너지 식의 우변에 들어가는 pIp_I는 7-방정식 모델의 비대칭 항을 속도 평형 극한에서 정리한 결과로,

pI=Z2p1+Z1p2Z1+Z2,Zk=ρkckp_I = \frac{Z_2 p_1 + Z_1 p_2}{Z_1 + Z_2}, \quad Z_k = \rho_k c_k

라는 깔끔한 형태로 떨어진다. ZkZ_k는 음향 임피던스. 더 단단한 상이 더 큰 가중치를 갖는다. 직관적으로 보면 두 상이 한 인터페이스를 통해 일을 주고받을 때, 단단한 쪽이 더 적게 움직이고 부드러운 쪽이 더 많이 움직이는 비율이다. 이 한 줄이 에너지 보존과 엔트로피 부등식을 동시에 보장한다.

이완 단계 — 단일 변수 방정식 한 줄#

수치적으로 μ\mu \to \infty 극한을 직접 풀지는 않는다. 대신 시간 스텝 안에서 hyperbolic 부분을 먼저 푼 뒤, 이완 항만 남은 ODE를 적분한다. 이완 단계에서는 uu, ρE\rho E, αkρk\alpha_k \rho_k가 보존되고 두 상의 비체적 vk=1/ρkv_k = 1/\rho_k만 변한다. Stiffened gas EOS

pk=(γk1)ρkekγkp,kp_k = (\gamma_k - 1)\rho_k e_k - \gamma_k p_{\infty,k}

를 쓰면 적분식이 닫힌 형태로 떨어진다.

vk(p)=vk0p0+γkp,k+(γk1)p^Ip+γkp,k+(γk1)p^Iv_k(p) = v_k^0\,\frac{p^0 + \gamma_k p_{\infty,k} + (\gamma_k - 1)\hat{p}_I}{p + \gamma_k p_{\infty,k} + (\gamma_k - 1)\hat{p}_I}

포화 조건 k(αρ)kvk(p)=1\sum_k (\alpha\rho)_k v_k(p) = 1만 풀면 평형 압력 pp가 한 번에 나온다. 이분법 한 번이면 끝. 이 게 Saurel 알고리즘의 핵심이다.

재초기화 — 보존 압력으로 다시 정렬#

이완으로 얻은 pp, αk\alpha_k가 각 상의 EOS에는 일치하지만, 혼합 보존 에너지와는 어긋날 수 있다. 충격파 영역에서 비보존 내부에너지 식의 누적 오차 때문이다. 그래서 Saurel은 한 번 더 손질한다. 보존된 혼합 총에너지로부터 혼합 EOS

p(ρ,e,α1,α2)=ρe(α1γ1p,1γ11+α2γ2p,2γ21)α1γ11+α2γ21p(\rho, e, \alpha_1, \alpha_2) = \frac{\rho e - \big(\frac{\alpha_1 \gamma_1 p_{\infty,1}}{\gamma_1 - 1} + \frac{\alpha_2 \gamma_2 p_{\infty,2}}{\gamma_2 - 1}\big)}{\frac{\alpha_1}{\gamma_1 - 1} + \frac{\alpha_2}{\gamma_2 - 1}}

로 압력을 다시 계산하고, 그 압력으로 각 상의 eke_k를 재초기화한다. 비보존 모델로 시작했지만 충격파 위치에서는 진짜 보존 모델처럼 행동한다. 비싼 추가 비용은 없다 — 셀당 한 번의 EOS 평가뿐.

코드: 한 셀에서 두 압력이 만나는 순간#

이완 단계만 NumPy 30줄로 따라가 보자. Stiffened gas + 이분법으로 단일 방정식을 푸는 코어 루프다.

import numpy as np
 
def stiffened_gas_volume(p, p0, v0, gamma, p_inf, p_hat_I):
    num = p0 + gamma * p_inf + (gamma - 1.0) * p_hat_I
    den = p   + gamma * p_inf + (gamma - 1.0) * p_hat_I
    return v0 * num / den
 
def saturation_residual(p, alpha_rho, p0, v0, gamma, p_inf, p_hat_I):
    total = 0.0
    for k in range(2):
        v_k = stiffened_gas_volume(p, p0[k], v0[k], gamma[k], p_inf[k], p_hat_I)
        total += alpha_rho[k] * v_k
    return total - 1.0
 
def stiff_pressure_relax(p0, v0, alpha_rho, gamma, p_inf, Z, tol=1e-9):
    p_hat_I = (Z[1] * p0[0] + Z[0] * p0[1]) / (Z[0] + Z[1])
    lo, hi = 1.0, 1.0e10
    for _ in range(80):
        mid = 0.5 * (lo + hi)
        r = saturation_residual(mid, alpha_rho, p0, v0, gamma, p_inf, p_hat_I)
        if r > 0:
            lo = mid       # 너무 낮은 압력 → 부피 합 > 1
        else:
            hi = mid
        if hi - lo < tol * mid:
            break
    return 0.5 * (lo + hi), p_hat_I
 
# 물(α=0.7) + 공기(α=0.3), 두 압력이 다름
gamma  = np.array([4.4, 1.4])
p_inf  = np.array([6.0e8, 0.0])
rho0   = np.array([1000.0, 1.0])
alpha0 = np.array([0.7, 0.3])
p0     = np.array([5.0e5, 1.0e5])
Z      = np.array([1500.0 * 1000.0, 340.0 * 1.0])
 
alpha_rho = alpha0 * rho0
v0        = 1.0 / rho0
 
p_eq, p_hat_I = stiff_pressure_relax(p0, v0, alpha_rho, gamma, p_inf, Z)
print(f"임피던스 평균 ^pI = {p_hat_I:.3e} Pa")
print(f"이완 후 평형압  p  = {p_eq:.3e} Pa")

물의 임피던스(Z1=1.5×106Z_1 = 1.5\times 10^6)가 공기(Z2=340Z_2 = 340)보다 4400배 크다. 그래서 p^I\hat{p}_I는 사실상 물 압력에 거의 같다. 이완 후 평형 압력은 두 상이 서로 미세하게 압축·팽창한 결과다.

관찰: 두 압력이 만나는 시간#

코드 한 셀로는 동적 감각이 안 잡힌다. 1D 격자에서 단순화한 ODE 모델을 풀어보자. 셀마다 p1,p2p_1, p_2가 임피던스 평균 p^I\hat{p}_I를 향해 지수적으로 수렴한다 — μΔt\mu \cdot \Delta t가 클수록 빨리.

Stiff relaxation drives both p₁ and p₂ toward the impedance-weighted average p̂ᴵ = (Z₂p₁ + Z₁p₂)/(Z₁+Z₂). Increase μ·Δt for faster pull-in.

Z1Z_1을 키우면 p^I\hat{p}_I가 더 빠르게 phase 1 압력 쪽으로 끌려간다. 임피던스 비율이 그대로 가중치다. μΔt\mu \cdot \Delta t를 1에 가깝게 두면 한 스텝 안에서 사실상 평형으로 떨어진다 — 이게 stiff 이완의 의미다. Saurel 논문은 이 절차를 매 시간 스텝 끝에 무조건 한 번씩 적용해 5-방정식 모델의 강체 극한을 회복한다.

한계 — 7-방정식의 그림자#

6-방정식은 만능이 아니다. 속도 평형은 여전히 가정이다. 다공성 매체나 분말 폭약처럼 두 상의 속도가 크게 다른 경우는 7-방정식 Baer–Nunziato로 돌아가야 한다. 충격파 강도가 매우 클 때 비보존 내부에너지 식의 누적 오차도 무시할 수 없어, Petitpas의 인공 열교환 보정을 추가한다(논문 5장). 그리고 압력 이완은 μ\mu \to \infty를 가정하지만 실제 인터페이스 응답 시간은 유한하다 — 표면장력이나 질량전달이 들어오면 별도 모델이 필요하다.

그럼에도 6-방정식 + 이완은 압축성 다상 시뮬레이션에서 가장 널리 쓰이는 토대다. AP-IMEX 시간 적분(2026-05-03 포스트)이나 MUSCL-THINC-BVD 인터페이스 재구성(2026-05-02 포스트)이 모두 이 6-방정식 위에서 작동한다.

결론 — 세 가지 사실#

  • 5-방정식의 함정은 음속에 있다. Wood 평형 음속의 비단조성이 인터페이스에서 음파를 잘못 전달한다.
  • 6-방정식 + 이완은 stiff 극한에서 5-방정식을 회복한다. 비보존을 무서워하지 말고, 한 번 풀고 한 번 합쳐라.
  • 임피던스 평균 p^I=(Z2p1+Z1p2)/(Z1+Z2)\hat{p}_I = (Z_2 p_1 + Z_1 p_2)/(Z_1+Z_2)가 모든 균형을 잡는다. 에너지 보존, 엔트로피, 단조 음속 — 한 줄에 다 들어간다.

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