Note 1 사이트 제작

배경의 유동장은 어떻게 그려지는가

이 사이트 배경에 흐르는 유선은 계산 결과가 아니라 해석적 속도장입니다. 원기둥 포텐셜 유동, Lamb–Oseen 와류, 무발산 노이즈로 어떻게 그렸는지와 그 한계를 정리합니다.

임시 글 · 초안 사이트 개편과 함께 작성한 제작 노트입니다. 연구 결과나 검증된 해석이 아니며, 연구실 책임자의 검토 전 초안입니다.

이 사이트의 첫 화면에는 유선과 입자가 흐르고, 원기둥 뒤로 와류가 번갈아 떨어져 나갑니다. 그러나 이 그림은 Navier–Stokes 방정식을 푼 결과가 아닙니다. 해석적으로 쓸 수 있는 속도장 몇 개를 겹쳐, 브라우저가 매 프레임 계산할 수 있는 범위에서 “유동처럼 보이게” 만든 장식입니다. 이 노트는 무엇을 겹쳤는지, 그리고 그 그림이 어디에서 틀리는지를 기록합니다.

왜 해석적 속도장인가

배경 애니메이션은 글을 읽는 동안에도 돌아가야 하고, 휴대폰에서도 버벅이지 않아야 합니다. 화면 전체에 격자를 깔고 압력–속도 연성을 푸는 대신, 위치 x를 넣으면 속도 u(x,t)가 바로 나오는 식을 고릅니다. 입자 수천 개를 이 속도로 적분하면, 질량 보존과 와류의 모양 같은 시각적 특징은 살리면서 계산량은 입자 수에 비례하는 수준으로 묶을 수 있습니다.

그 대가로 경계조건, 점성 확산, 압력 구배가 서로 맞물리는 진짜 동역학은 포기합니다. 그래서 사이트의 모든 배경과 카드 그래픽에는 “장식용 · 계산 결과 아님”이라는 표시를 붙였습니다.

원기둥 주위 포텐셜 유동

바탕은 받음각 α로 들어오는 균일류 U∞가 반지름 R의 원기둥을 지나는 비점성·비회전 유동입니다. 복소 포텐셜과 그 미분은 다음과 같습니다.

w(z)=U∞((z−z0)e−iα+R2eiαz−z0) (1)
u−iv=dwdz=U∞(e−iα−R2eiα(z−z0)2) (2)

식 (2)는 원기둥 표면에서 법선 속도가 0이 되도록 만들어져 있어, 입자가 원기둥을 감싸 돌아 나갑니다. 등고선 층에는 압력계수 Cp=1−|u|2/U∞2를 그립니다. 비점성 유동에서 베르누이 식이 주는 값이므로, 정체점 근처의 Cp≈1과 어깨 부분의 음압 영역이 모양만큼은 그럴듯하게 나타납니다.

코드에서는 식 (2)를 복소수 라이브러리 없이 실수부와 허수부로 풀어 씁니다.

site/assets/flow.js · 원기둥 포텐셜 유동
// dw/dz = U (e^{-iα} - R² e^{iα} / (z - z0)²) = u - i v
const r4 = r2 * r2, ia = (dx * dx - dy * dy) / r4, ib = (-2 * dx * dy) / r4;
const re = R * R * (ca * ia - sa * ib), im = R * R * (ca * ib + sa * ia);
u = U * (ca - re);
v = U * (sa + im);

Lamb–Oseen 와류로 만든 와열

포텐셜 유동만으로는 원기둥 뒤가 앞뒤 대칭으로 닫혀 버립니다. 와열의 인상을 주기 위해, 원기둥 뒤쪽 어깨에서 부호가 번갈아 바뀌는 Lamb–Oseen 와류를 일정한 주기로 떼어 냅니다. 각 와류의 접선 속도는 다음과 같습니다.

vθ(r)=Γ2πr(1−e−r2/rc2),rc2=rc02+4νt (3)

코어 반지름 rc는 시간에 따라 점성 확산처럼 커지고, 순환 Γ은 수십 초에 걸쳐 천천히 줄어듭니다. 와류는 자유류 속도의 약 0.85배로 하류로 떠내려갑니다. 떼어 내는 주기는 Strouhal 수 관계

f=StU∞D,St≈0.2 (4)

에서 출발했습니다. 원형 실린더의 Strouhal 수가 넓은 레이놀즈 수 범위에서 약 0.2라는 잘 알려진 값입니다. 다만 화면 리듬을 위해 코드에서는 이 주기를 0.55배로 줄였으므로, 배경의 와열 간격은 실제 실린더 후류의 간격과 같지 않습니다.

Big whorls have little whorls
That feed on their velocity,
And little whorls have lesser whorls
And so on to viscosity.

Lewis F. Richardson, Weather Prediction by Numerical Process (1922)

배경의 와류는 이 시구와 달리 더 작은 와류로 쪼개지지 않습니다. 에너지 캐스케이드는 없고, 정해진 크기의 와류가 정해진 속도로 사라질 뿐입니다.

무발산 노이즈

완전히 매끈한 포텐셜 유동은 기계적으로 보이므로, 작은 흔들림을 더합니다. 이때 아무 노이즈나 더하면 입자가 한곳으로 모이거나 흩어져 질량 보존이 깨진 것처럼 보입니다. 그래서 흐름함수 ψ를 먼저 만들고, 그 회전으로 속도를 얻습니다.

ψ=∑kak|kk|sin(kk·x+ωkt+φk),u=∂ψ∂y,v=−∂ψ∂x (5)

이렇게 만든 속도장은 ∇·u=0을 항등적으로 만족합니다. 포텐셜 유동과 Lamb–Oseen 와류도 각각 무발산이므로, 이들을 더한 배경 속도장 전체가 무발산입니다.

살아 있는 그림

아래 그림은 식 (1)–(5)를 그대로 겹친 속도장입니다. 화면 밖에서는 멈추고, 움직임 설정이 ‘정지 화면’이면 같은 속도장의 유선을 고르게 배치해 한 장의 그림으로 그립니다.

그림 1. 이 사이트 배경에 쓰인 해석적 속도장. 원기둥 포텐셜 유동 + Lamb–Oseen 와열 + 무발산 노이즈. 입자 색은 속도 크기, 뒤의 선은 압력계수 등고선과 O형 격자입니다. 장식용 · 계산 결과 아님

입자 적분과 색

입자는 2차 Runge–Kutta(중점법)로 적분합니다. 프레임 간격 Δt가 들쭉날쭉해도 원기둥 근처에서 입자가 표면을 뚫고 들어가는 일을 줄여 줍니다.

xn+1/2=xn+Δt2u(xn),xn+1=xn+Δtu(xn+1/2) (6)

각 입자의 이동 선분은 색 구간(32단계)과 깊이 층(3단계)별로 묶어 한 번에 그립니다. 색은 속도 크기를 깊은 파랑에서 시안, 청록을 지나 보라, 마젠타, 주황으로 이어지는 색 지도에 대응시켰습니다. 대부분의 입자는 자유류 근처 속도라 시안–청록에 머물고, 원기둥 어깨나 와류 코어처럼 빠른 곳만 따뜻한 색으로 튑니다. 무지개색이 화면을 뒤덮지 않도록 일부러 고른 배치입니다.

  • 프레임 작업 시간이 길어지면 입자 수를 자동으로 줄이고, 여유가 생기면 다시 늘립니다.
  • 화면 밖의 캔버스와 숨겨진 탭에서는 계산을 멈춥니다.
  • 운영체제의 ‘동작 줄이기’ 설정이나 사이트의 움직임 설정을 따르면, 애니메이션 대신 고르게 배치한 유선 그림 한 장을 그립니다.

염료 층

수조 실험에서는 물체 표면 근처에 염료를 흘려 넣어 흐름을 봅니다. 배경에도 같은 발상의 층을 하나 두었습니다. 원기둥의 양 어깨와 익형의 앞전 근처에서 색 입자를 내보내고, 같은 속도장으로 떠내려 보내면서 저해상도 캔버스에 아주 옅게 쌓습니다. 위쪽 어깨에서 나온 염료와 아래쪽 어깨에서 나온 염료는 다른 색이라, 와류가 번갈아 떨어질 때 두 색이 서로 감기는 모습이 보입니다. 마우스를 움직이면 그 자리에서도 염료가 흘러나옵니다.

염료는 확산 방정식을 풀지 않습니다. 가장자리가 부드러운 원을 겹쳐 칠하고, 매 프레임 조금씩 지워 흐려지게 할 뿐입니다.

이 그림이 틀리는 곳

장식이라는 사실을 분명히 하기 위해, 실제 유동과 다른 점을 적어 둡니다.

  1. 경계조건. 떼어 낸 와류는 원기둥의 영상 와류를 갖지 않으므로, 와류가 원기둥 가까이 있을 때 표면의 비침투 조건이 깨집니다.
  2. 와류의 운동. 와류는 서로가 유도하는 속도로 움직이지 않고, 정해진 속도로 떠내려갑니다. 와열의 안정성이나 배열 간격은 계산되지 않습니다.
  3. 점성과 압력. 점성 확산은 코어 반지름이 커지는 식 하나로만 흉내 냈고, 압력은 등고선을 그리기 위해 베르누이 식으로만 계산합니다.
  4. 포인터 와류. 마우스를 움직이면 생기는 작은 와류쌍은 상호작용을 보여 주기 위한 장치일 뿐 물리적 물체가 아닙니다.

연구 결과로서의 유동장은 계산과 검증을 거쳐야 합니다. 이 사이트에서 그런 결과를 다룰 때는 출처와 조건을 함께 밝히고, 장식용 그래픽과 구분해 표시합니다.