부록
본문이 지나가며 말한 것을 이 쪽에 모은다. 화면의 수를 읽는 법, 이 시뮬레이션이 실제 물과 다른 곳, 엔진과 본문이 기댄 문헌이다.
단위와 무차원수
이 교재의 시뮬레이션 값에는 단위가 없다. 길이는 무대의 높이를 1로 잰다. 무대는 가로세로 비가 16:9라 너비가 1.78쯤이다. 시간은 화면의 초와 같다. 실험은 1초에 60번 화면을 그리고, 모든 유체 실험이 한 번 그릴 때마다 시뮬레이션 시간 1/60을 나아가기 때문이다. 대부분은 1/60짜리 스텝을 한 번 밟고, 0장과 2장의 실험만 1/120짜리 스텝을 두 번 밟는다. 빠르기 1은 1초에 무대의 높이만큼 가는 빠르기다. 엔진은 밀도 를 1로 둔다. 압력 단계가 속도에서 를 그대로 빼므로, 화면의 압력은 단위 질량당 값 로 읽는다.
단위가 없는 수를 실제 흐름과 견주려면 무차원수를 쓴다. 흐름마다 대표 빠르기 와 대표 길이 을 하나씩 고르면, 레이놀즈 수 는 관성 항과 점성 항의 크기를 견준 값이 된다(5장). 모양이 같고 Re가 같으면 크기가 달라도 흐름이 같다. 엔진의 setReynolds는 실험이 정한 와 로 를 셈한다. 5장의 원기둥 사다리가 이것을 쓰고, 다른 실험은 를 바로 정한다. 본문에는 무차원수가 둘 더 나온다. 소용돌이가 떨어져 나가는 횟수를 묶은 스트로할 수 (5장, Re 150에서 0.177)와, 양력을 다가오는 흐름의 과 시위로 나눈 양력 계수 (6장, 8도에서 0.49)이다.
아래 표는 점성이 있는 일곱 실험의 대표 빠르기와 길이, 점성, 레이놀즈 수다. 값은 실험 정의에서 그대로 옮겼다.
| 실험 | U | L | ν | Re |
|---|---|---|---|---|
| 4장 층의 퍼짐 | 0.4 | 0.04 | 0.00001, 0.001 | 1600, 16 |
| 4장 미끄러지는 판 | 0.5 | 0.9 | 0.03 | 15 |
| 4장 관 속 흐름 | 0.2 | 1 | 0.02, 0.04 | 10, 5 |
| 5장 원기둥 사다리 | 0.5 | 0.1 | 0.05 – 0.00005 | 1, 40, 150, 1000 |
| 5장 미끄러지는 두 층 | 0.2 | 0.03 | 0.00001, 0.001 | 600, 6 |
| 6장 종합 실험실 | 0.3 | 0.16 | 0.0001 – 0.002 | 480 – 24 |
| 6장 날개 | 0.5 | 0.4 | 0.0002 | 1000 |
와 은 실험마다 이렇게 골랐다. 층의 퍼짐은 층 가운데의 처음 빠르기와 층의 처음 폭(표준편차 ), 미끄러지는 판은 판의 빠르기와 판까지의 틈, 관 속 흐름은 들어오는 빠르기(관의 평균 빠르기)와 관의 폭, 원기둥 사다리와 종합 실험실은 들어오는 빠르기와 원기둥의 지름, 미끄러지는 두 층은 두 층의 빠르기 차의 절반과 경계의 반두께, 날개는 들어오는 빠르기와 시위다. 0장 실험실은 점성 0에서 시작하고 ‘점성 ν’ 슬라이더로 0.002까지 올린다. 2장의 투영을 끈 물, 3장의 두 실험, 5장의 소용돌이 쌍은 점성이 0이라 Re를 정할 수 없다.
격자의 칸은 가장 고운 480×270에서 한 변이 1/270이다. 기기가 느리면 성능 조절이 격자를 240×135까지 내린다. 3장의 압력 반복, 4장의 세 실험, 5장의 원기둥 사다리는 모든 기기에서 가장 거친 단에 격자를 고정한다(좌우가 이어진 4장의 두 실험은 242×136, 나머지는 240×135). 3장 실험은 반복 한 번이 어느 기기에서나 같은 그림이 되게, 나머지는 큰 점성의 풀이가 정해 둔 반복 안에서 끝나게 하려는 것이다.
모양이 같고 Re가 같으면 흐름이 같으므로 화면의 흐름을 실제 크기로 옮겨 읽을 수 있다. 20°C의 물은 점성 계수가 1.0016mPa·s, 밀도가 998.21kg/m³이고, 둘을 나눈 는 쯤이다(아래 참고문헌의 NIST). 6장의 날개(Re 1000)를 물속의 시위 4cm짜리 날개로 읽으면 물의 빠르기는 , 곧 1초에 2.5cm다. 5장의 Re 150을 지름 1cm짜리 원기둥으로 읽으면 1초에 1.5cm다. 둘 다 아주 느린 물이다. 실제 날개와 기둥 둘레의 흐름은 대개 Re가 훨씬 크다.
이 시뮬레이션의 한계
이 엔진은 흐름을 정성적으로 맞게 보이려고 만들었고, 정밀한 공학 계산(전산유체역학, CFD)은 아니다. 엔진은 네 가지 수치 검증을 통과한다. 투영 뒤의 발산, 관 속의 포물선, 퍼지는 속도 덩어리의 분산, 원기둥 뒤 소용돌이 길의 스트로할 수를 재는 검증이다. 그 밖에 실제 물과 다른 곳을 장마다 곁주석으로 밝혔고, 여기에 한데 모은다. 수는 작성자의 컴퓨터에서 잰 값이다.
2차원이다. 모든 유체 실험은 평면 위의 흐름이고 깊이 방향이 없다. 5장의 Re 1000은 실제로는 3차원 난류인데, 화면은 격자가 성긴 2차원 그림이라 난류가 아니다(5장). 6장의 날개는 끝없이 긴 날개의 한 단면이라 날개 끝에서 말려 나가는 소용돌이가 없다(6장).
격자는 기기에 따라 바뀐다. 가장 고운 격자는 480×270이다. 성능 조절은 그래픽 장치의 프레임 시간을 지난 1초 동안 평균해서, 12ms를 넘으면 격자를 한 단 내리고 6ms 아래가 5초 넘게 이어지면 한 단 올린다. 가장 거친 격자에서도 1초에 29.5프레임을 못 그리면 녹화한 영상으로 보기를 권한다. 휴대폰은 처음부터 가장 거친 격자로 돈다. 거친 격자에서는 작은 소용돌이가 더 뭉툭하고, 6장 날개의 시위는 데스크톱의 108칸 대신 54칸이다(6장).
점성을 0으로 두어도 소용돌이는 약해진다. 점성이 없는 2차원 흐름은 운동 에너지를 잃지 않아야 한다. 이 엔진에서는 잃는다. 0장 실험실의 설정(닫힌 상자, 480×270, 1/120 스텝 두 번, 점성 0)에서 대본의 첫 젓기를 한 번 하고 원기둥을 뺀 채 2초를 돌리면, 흐름은 운동 에너지의 24%를 잃는다. 까닭은 주로 둘이고, 스텝의 길이와 격자를 하나씩 바꾸면 둘을 가를 수 있다.
하나는 엔진이 한 스텝을 단계로 나누어 푸는 데서 생기는 오차다. 이류 단계는 속도를 흐름을 따라 옮길 뿐 방향을 돌리지 않는다. 그래서 소용돌이 안에서 옮겨 온 속도는 한 스텝 끝에 바깥쪽으로 조금 기울어 있고, 압력 단계가 그 바깥쪽 몫을 지우면서 도는 빠르기도 함께 깎인다(5장). 이 오차는 스텝이 길수록, 빨리 돌수록(도는 빠르기의 제곱으로) 크고, 격자와는 거의 상관이 없다. 위의 젓기에서 스텝을 1/240로 줄이면 잃는 몫이 17%, 1/960로 줄이면 6%로, 24%의 3분의 1도 안 되게 줄었다. 같은 젓기를 절반의 빠르기로 하면 잃는 몫이 5%로 줄었다. 5장은 이 오차를 가만히 놓은 소용돌이 하나로 쟀다. 처음에 였던 가운데 세기가 꼴로 줄어 9초에 절반이 되었다. 6장의 실험실(1/60 스텝)에서는 저은 소용돌이의 가장 센 곳이 2초 뒤 37%만 남았다. 가장 센 곳의 와도는 한 칸에서 읽은 값이라 격자에 따라 달라지므로(6장), 이 절은 두 까닭을 운동 에너지로 가른다.
다른 하나는 이류 단계가 칸 사이의 값을 보간하면서 흐름을 조금씩 뭉개는 번짐이다. 수치 확산이라고도 부른다. 이 번짐은 격자가 고울수록 작다. 위의 젓기에서 격자를 960×540으로 늘리면 잃는 몫이 22%, 240×135로 줄이면 26%였다. 격자를 가로세로 두 배로 늘려 손실이 줄어든 폭은 스텝을 절반으로 줄여 손실이 줄어든 폭의 4분의 1도 안 된다. 스텝을 1/960로 줄이고도 남는 손실에는 번짐 말고도 벽 가까이에서 잃는 것과 압력 풀이가 남기는 오차가 함께 들어 있다. 그래서 0장 실험실에서 소용돌이가 약해지는 것은 대부분 단계로 나누어 푸는 오차이고, 보간의 번짐은 작은 몫을 보탠다. 천천히 저을수록 단계의 오차가 번짐보다 빨리 줄어 격자가 보태는 몫이 커진다. 절반의 빠르기로 저으면 240×135에서 6%, 480×270에서 5%를 잃는다. 거친 격자에서 더 잃는 것이 480×270 손실의 20%쯤으로, 제 빠르기로 저을 때의 9%쯤보다 크다. 5장 스트로할 수의 작은 차이에도 이 둘이 얽혀 있고, 그 몫을 가르지는 않았다.
압력 풀이는 발산을 조금 남긴다. 엔진은 압력을 정해 둔 만큼만 반복해 푼다. 기본 풀이는 멀티그리드 V-cycle 두 번이다. 원기둥 뒤에 소용돌이 길이 선 흐름에서 투영 뒤의 발산은 로 이었다. 엔진 검증의 기준은 이다. 원기둥을 새로 놓은 직후에는 까지 올랐다가 6스텝 안에 기준 아래로 돌아왔다. 2장에서 한 번 저은 뒤 남는 발산은 투영을 껐을 때의 천분의 일쯤이고(2장), 3장의 Jacobi 반복은 이 과정을 한 번씩 보인다(3장).
장애물은 칸으로 셈한다. 엔진은 칸마다 고체인지 아닌지만 안다. 원과 사각형은 화면에 매끈하게 그리지만 흐름은 칸의 계단을 본다. 4장의 미끄러지는 판은 화면에서 높이 0.9이지만 흐름에는 칸 줄의 가운데인 0.9007에 걸린다(4장). 6장의 날개와 손으로 그린 선은 화면에도 칸의 계단으로 그린다. 날개의 두께는 데스크톱에서 6.5칸이다(6장). 날개 모양은 NACA 보고서 460의 두께 식에서 마지막 계수만 −0.1015 대신 −0.1036으로 바꿔 뒷전을 한 점으로 닫았다. 보고서의 식대로면 뒷전에 두께의 2%쯤이 열려 남는다.
가장자리는 다섯 가지다. 미끄럼 없는 벽(0장과 2장과 3장 반복의 상자, 4장의 판과 관), 미끄러운 벽(3장의 펌프 관, 5장과 6장의 위아래), 정해진 빠르기로 들어오는 입구와 속도의 기울기가 0인 출구(4장의 관, 5장의 사다리, 6장의 두 실험), 서로 이어진 양끝(3장의 펌프 관, 4장의 층과 판, 5장의 쌍과 두 층)이다. 미끄러운 벽에는 느린 층이 생기지 않고, 이어진 양끝으로 나간 물은 반대쪽으로 다시 들어온다(5장). 관을 가로막는 몫도 흐름을 바꾼다. 5장의 원기둥은 관 폭의 10분의 1을 가린다. 엔진을 검증할 때 Re 100의 원기둥 뒤에서 잰 스트로할 수는 실제 흐름에서 잰 값보다 9% 높았는데(5장), 가깝고 미끄러운 벽 탓으로 보인다. 6장 날개의 양력 계수 0.49가 얇은 날개 이론의 0.88보다 작은 데에도 가까운 벽이 얽혀 있다(6장).
레이놀즈 수가 낮다. Re를 정한 실험 가운데 이류 항을 켠 것은 Re가 많아야 1000이다(표의 1600은 점성 항만 켠 4장 층의 퍼짐이다). 실제 날개와 다리 기둥 둘레의 흐름은 대개 Re가 훨씬 크다. Re가 낮으면 표면에 붙어 느려진 층이 두껍다. 6장의 날개가 그렇다(6장).
잉크는 표시일 뿐이다. 잉크는 흐름을 바꾸지 않고(0장), 스스로 퍼지지 않게 두었다. 잉크를 옮기는 계산도 칸 사이를 보간하므로 경계는 조금씩 흐려진다. 잉크는 칸마다 값으로 실려 다닐 뿐이라 흐름이 모이는 곳에서 짙어지지 않는다. 그래서 2장은 몰리고 비는 모습을 입자로 보인다(2장).
같은 컴퓨터에서만 같은 그림이 나온다. 엔진은 고정된 스텝과 정해진 반복과 정해진 난수를 써서, 같은 컴퓨터에서 같은 입력이면 같은 프레임을 낸다. 다른 그래픽 장치에서는 부동소수점의 차이로 조금 달라질 수 있다. 녹화한 영상도 같은 브라우저 버전에서만 같은 파일로 다시 나온다.
녹화한 영상으로는 실험할 수 없다. WebGPU가 없는 브라우저는 유체 실험 대신 작성자의 컴퓨터에서 녹화한 영상과 자막을 보인다. 영상에서는 젓거나 값을 바꾸거나 그릴 수 없다. 대본의 마지막 자막이 직접 해 보기를 권해도 영상에서는 할 수 없다.
참고문헌
엔진의 방법과 본문이 기댄 자료다. 서지 사항은 DOI 기록과 NASA 기술 보고서 서버, 링크한 NASA와 NIST의 쪽에서 확인했다.
- Francis H. Harlow, J. Eddie Welch. “Numerical Calculation of Time-Dependent Viscous Incompressible Flow of Fluid with Free Surface.” The Physics of Fluids 8(12), 2182–2189, 1965. doi:10.1063/1.1761178. 엇갈린 격자(MAC 격자): 속도를 칸의 면에, 압력을 칸의 가운데에 둔다.
- Jos Stam. “Stable Fluids.” Proceedings of the 26th Annual Conference on Computer Graphics and Interactive Techniques (SIGGRAPH ‘99), 121–128, ACM Press, 1999. doi:10.1145/311535.311548. 한 스텝을 외력, 이류, 확산, 압력 투영으로 나누어 푸는 방식과 거꾸로 추적하는 이류.
- Andrew Selle, Ronald Fedkiw, ByungMoon Kim, Yingjie Liu, Jarek Rossignac. “An Unconditionally Stable MacCormack Method.” Journal of Scientific Computing 35(2–3), 350–371, 2008. doi:10.1007/s10915-007-9166-4. 이류 단계의 MacCormack 보정과 극값 제한.
- William L. Briggs, Van Emden Henson, Steve F. McCormick. A Multigrid Tutorial, 2nd ed. Society for Industrial and Applied Mathematics, 2000. doi:10.1137/1.9780898719505. 압력의 멀티그리드 V-cycle과 Red-Black Gauss–Seidel 반복.
- Eastman N. Jacobs, Kenneth E. Ward, Robert M. Pinkerton. “The Characteristics of 78 Related Airfoil Sections from Tests in the Variable-Density Wind Tunnel.” NACA Report No. 460, 1933. NASA Technical Reports Server 19930091108. NACA 네 자리 날개의 이름 짓기(캠버, 캠버의 자리, 두께)와 두께 식. 6장의 날개.
- NASA Glenn Research Center. “Equal Transit Theory Interactive.” Beginners Guide to Aeronautics. www1.grc.nasa.gov/beginners-guide-to-aeronautics/foilw1/. 6장의 ‘오해 하나’(같은 시간 도착설).
- Eric W. Lemmon, Ian H. Bell, Marcia L. Huber, Mark O. McLinden. “Thermophysical Properties of Fluid Systems.” NIST Chemistry WebBook, NIST Standard Reference Database Number 69, P. J. Linstrom and W. G. Mallard, eds. National Institute of Standards and Technology. doi:10.18434/T4D303. 물, 20°C, 0.101325MPa. 이 부록의 물의 점성 계수와 밀도. 점성 계수는 M. L. Huber 외, “New International Formulation for the Viscosity of H₂O,” Journal of Physical and Chemical Reference Data 38(2), 101–125, 2009, doi:10.1063/1.3088050의 식에서 온다.