nondim#

nondim 은 모델에 넣기 전에 값의 크기를 적당한 범위로 맞춰 주는 단계다.

CFD 데이터에는 velocity, pressure, 온도, WSS 처럼 단위도 크기도 제각각인 값이 섞여 있다. 그대로 넣으면 어떤 채널은 수십, 어떤 채널은 수만 단위가 돼서 학습이 한쪽으로 쏠린다. 그래서 학습 전에 값을 대략 크기로 옮겨 놓고, 예측이 끝나면 같은 변환을 거꾸로 적용해 원래 물리값으로 되돌린다. 다섯 모델이 전부 이 변환을 갖고 있고, 변환이 affine 이라 되돌릴 때 오차가 생기지 않는다.

nondim 변환

저장값 를 로 옮긴다(). 가 scale, 가 bias 다. 학습과 예측은 전부 공간에서 일어나고, 평가할 때 로 되돌린다.

식 자체는 다섯 모델이 똑같다. 와 를 어떻게 정하느냐만 다르다.

모델 scale 를 정하는 방법 bias 목표
aicfd-grid-building-rgb, aicfd-grid-nasal-rgb 고정 상수 고정 상수 값이
aicfd-grid-building-physical 기준 풍속별 표본 통계 0 표준편차 1
aicfd-grid-indoor-physical 채널별 전역 표본 통계 기준온도 표준편차 1
aicfd-mesh-nasal-physical 물리 유도 지수 + 해석 설정값에서 온 상수 0 면적가중 중앙값 32

통계를 쓰는 두 모델은 그 통계를 학습 fold 에서만 구해서 checkpoint 에 같이 저장한다. 학습된 모델의 일부나 마찬가지라, 평가하거나 학습을 재개할 때 다시 계산하지 않는다. aicfd-mesh-nasal-physical 은 데이터에서 구한 통계를 쓰지 않는다. 물리에서 유도한 지수 둘과 해석 설정값에서 나온 상수 하나가 전부다 — 벽면 flux 를 보라.

이 변환이 지켜야 하는 것#

scale 을 정확히 얼마로 정해야 하는지부터 짚고 시작하는 편이 낫다. 결론은 "크기만 맞으면 숫자 자체는 중요하지 않다" 는 것이다.

Remark 1 — scale 을 얼마로 잡든 최종 예측은 같다

loss 가 이나 이고 target 에 를 적용하면, 최적 예측자도 같은 affine 을 따라 그대로 옮겨간다. 그래서 inverse transform 을 거친 최종 예측은 를 무엇으로 잡았든 달라지지 않는다.

공간에서 최적인 예측자를 라고 두자. loss 가 최소화하는 것은 인데, 는 와 상관없는 상수라서 밖으로 뺄 수 있다.

우변은 결국 원래 공간에서 풀던 문제와 같은 문제다. 이 문제를 최소화하는 를 되돌린 가 원 공간의 최적해이므로, inverse transform 을 거친 예측에는 가 남지 않는다.

그래서 실제로 신경 쓸 것은 세 가지로 줄어든다.

  1. exact invertibility — inverse transform 이 닫힌 형태로 존재하고 수치적으로 정확할 것
  2. — 유한정밀도 학습에서 gradient 와 loss 가 균형 잡히는 크기일 것
  3. covariate independence — 유속·형상 같은 구동변수가 바뀌어도 분포가 움직이지 않을 것

앞의 둘은 변환이 affine 이기만 하면 저절로 성립한다. 따로 정해 주어야 하는 것은 셋째뿐이고, 그 답은 물리에서 가져와야 한다. 아래 Remark 들이 그 이야기다.

유속·형상이 값의 크기를 어떻게 움직이나#

같은 형상이라도 바람이 세지면 velocity 도 pressure 도 통째로 커진다. 이 움직임의 대부분은 미리 알 수 있는 거듭제곱이라, 나눠 주면 조건이 바뀌어도 분포가 그대로 유지된다. 그 지수를 정리한 것이 아래 세 Remark 다.

지수는 값이 유동의 어디에 있느냐에 따라 달라진다. 체적 값 은 벽에서 떨어진 유동 본체의 필드 — velocity, pressure, k 처럼 격자 내부에 깔리는 값이다. 반대쪽이 벽면 값, 즉 벽에 붙어 있는 WSS 같은 값이다. 격자냐 mesh 냐, 보간을 어떻게 했느냐와는 상관없는 구분이고, 순전히 유동에서 그 값이 어디에 있느냐의 문제다. 체적 값은 Remark 2, 벽면 값은 Remark 3 이 맡는다.

Remark 2 — 체적 값은 유속의 정수 거듭제곱을 따른다

형상은 그대로 두고 inlet speed 만 바꾸는 비압축 유동을 보자. 의존이 약한 구간에서는 해가 이렇게 움직인다.

velocity 는 에, pressure 와 난류운동에너지는 에 비례한다.

길이는 형상 크기 로, 속도는 로, 압력은 동압 로 재는 변수를 세운다. 미분 연산자도 같이 따라간다 — 아래 방정식의 gradient 는 전부 무차원 좌표로 미분한 것이다.

이를 비압축 Navier–Stokes 에 넣으면

여기서 방정식과 경계조건에 남는 파라미터는 하나뿐이다. 형상이 같고 의존이 약한 구간이라면 무차원 해 가 에 의존하지 않는다. 원 변수로 되돌리면 위 관계가 그대로 나온다. 는 속도의 제곱 차원이라 같은 논리로 다.

Remark 2.1 — 나누고 나서 남는 차이는 k 에 몰려 있다

aicfd-grid-building-physical 은 Remark 2 의 지수 그대로 velocity 를 기준 풍속 로, pressure 와 k 를 으로 나눈다. 이렇게 나눈 뒤 세 풍속의 분포를 겹쳐 보면 채널마다 결과가 다르다. velocity 와 pressure 는 거의 겹치고, k 만 크게 어긋난다. 기준 풍속별로 표본 통계를 따로 잡는 것은 사실상 k 채널 때문이다.

형상 3종과 풍향 3종에서 26·38·44 m/s 를 짝지어 봤다. 같은 mesh 위에서 나눈 뒤 표준편차를 세 풍속끼리 비교하면 는 ×1.002~1.012, 는 ×1.0003~1.057 안에 든다. 반면 는 ×1.33~1.38 이다. k 는 풍속이 올라갈수록 단조로 줄고, 라는 멱법칙을 그린다. 잰 값은 해석 격자의 cell 을 도메인 전체에서 모은 것이다. 같은 비교를 기준 풍속별 통계가 실제로 쓰는 contour 격자에서 다시 해도 결과가 같다 — 형상과 풍향을 고정하고 세 풍속을 짝지은 7개 조합에서 velocity 는 ×1.029, pressure 는 ×1.072 안에 들고 k 만 ×1.375 다.

이 차이는 에서 오지 않는다. 건물 높이 로 재면 이고, 도메인의 는 5만 대다. 각진 건물은 이 영역에서 를 더 올려도 무차원 해가 거의 변하지 않는다. 가 원인이라면 세 채널이 비슷하게 어긋나야 하는데, velocity 와 pressure 는 1% 대에 머문다.

원인은 inlet 난류 경계조건이다. 해석은 inlet 난류를 intensity 와 viscosity ratio 로 지정한다 — , . 여기서 은 에 정확히 비례하니 k 자체는 문제가 없다. 문제는 나머지 하나다. 를 10 으로 고정하면 이 되고, inlet 난류 길이 scale 이 로 풍속을 탄다. 26 에서 44 m/s 로 가면 inlet eddy 가 1.7배 작아진다. 작은 eddy 는 더 빨리 소산되므로 도메인 안에 남는 도 줄어든다. 관측된 방향과 멱법칙 형태가 이 예측과 맞는다. 난류를 intensity 와 length scale 로 지정하면 이 항목도 풍속에 무관해진다.

Remark 3 — 벽면 값의 지수는 정수로 떨어지지 않는다

벽면 전단응력의 국소 속도 지수는 이렇게 쓸 수 있고,

발달 중 층류 경계층()에서는 가 된다.

의 양변에 로그를 씌우고 로 미분한다. 이니 이고, 그래서

Blasius 층류 경계층이라면 와 에서 이므로

를 대입하면 .

체적 값과 벽면 값이 갈라지는 지점이 여기다. 체적 값은 지수가 정수로 딱 떨어지는 반면, 벽면 값은 를 통해 점성 보정이 붙어 지수가 유동 상태에 따라 달라진다. 상태별로 모으면 이렇다.

유동 상태
완전발달 관유동 (Poiseuille) 1
발달 중 층류 경계층 (Blasius) 3/2
완전 난류 1.75 ~ 1.8
(유동 상태 아님) 동압으로 나누기 0 2

마지막 줄은 유동 상태가 아니라 비교용이다. WSS 를 그냥 동압 으로 나누면 를 상수로 두는 셈이라 지수가 2 로 떨어진다. 가장 간단한 선택이지만 어느 유동 상태에도 대응하지 않는다. 비강 데이터에서 실제로 재 본 지수는 1.43 이라 이 값은 기각된다 (실측 결과).

Remark 4 — 온도는 속도 거듭제곱을 따르지 않는다

aicfd-grid-indoor-physical 의 온도장은 의 거듭제곱으로 정규화되지 않는다. 나눗셈 대신 기준온도를 빼서 원점을 옮긴다.

이유는 두 가지다.

첫째, 온도는 유속만으로 무차원화할 수 없다. velocity 와 pressure 는 기준 유속 로 대표 크기를 정할 수 있지만, 온도에는 기준 온도차 가 따로 필요하다. 그리고 이 온도차를 정하는 것은 유속이 아니라 실내의 열부하다.

실내에는 급기 제트가 만드는 강제대류와 열원 위쪽의 buoyancy 유동이 함께 있다. 이런 조건에서는 온도차가 다시 유동에 영향을 주므로, 무차원 지배방정식에는 뿐 아니라 Grashof 수 도 남는다. 온도를 정규화할 때 쓰는 scale 이 와 독립이라는 뜻이다.

둘째, 이 모델에는 풍속이 입력으로 주어지지 않는다. 센서 5점의 온도만 받기 때문에 값을 알 수 없고, 알 수 없는 값으로 나눌 수는 없다. 그래서 온도에 대해 직접 정할 수 있는 것은 기준 온도 하나뿐이고, 처럼 기준점만 옮기는 형태가 남는다.

모델별로 어떻게 다른가#

pixel space — 고정 상수 affine#

여기서는 저장값이 이미 렌더된 이미지 바이트라, 범위가 로 정해져 있다. 통계를 구할 일이 없다. 앞의 세 조건 중 과 invertibility 는 상수 affine 만으로 충족되고, covariate independence 는 렌더 단계에서 색범위를 고정해 둔 것으로 이미 해결돼 있다.

이 두 모델에 정규화가 없다고 읽으면 오해다. scale 이 상수라서 학습하거나 저장할 통계가 없을 뿐이다. 그래서 nondim 이라는 이름도, 계수를 들고 있는 상태도 따로 두지 않았다 — Collator 의 한 줄이 전부다.

physical space — dequantization#

이쪽은 저장값이 uint16 으로 양자화된 물리량이라, scale 을 손대기 전에 먼저 물리 단위로 되돌려야 한다.

, 는 필드마다 정해지는 저장 범위이고, 전처리 에서 결정된다. 이 범위가 있어야 uint16 저장값을 물리값으로 되돌릴 수 있다. 같은 uint16 값이라도 범위가 다르면 다른 물리값으로 읽히기 때문에, 범위는 데이터셋 및 그 데이터로 학습한 checkpoint 와 늘 같이 관리해야 한다.

aicfd-grid-building-physical — 기준 풍속#

기준 풍속 는 해석의 inlet 조건 그대로다. 하부 inlet 은 로 균일하고, 상부 inlet 은 형태의 ABL power-law profile 이다. 둘 다 에 선형이라 inlet 속도장 전체가 에 비례한다. Remark 2 가 전제하는 조건이 경계조건 수준에서 그대로 성립한다는 뜻이다.

속도 의존은 Remark 2 의 지수로 걷어낸다. velocity 는 풍속으로, pressure 와 k 는 풍속의 제곱으로 나눈다. 그러고도 남는 차이(Remark 2.1)는 기준 풍속별로 통계를 따로 잡아 흡수한다. 채널별로 적으면 이렇다.

이 나눗셈만으로 velocity 와 k 는 이미 무차원수다. 는 그 자체로 무차원이고, k 는 속도의 제곱 차원이라 으로 나누면 남는 단위가 없다. pressure 하나만 표준 무차원수인 와 만큼 다르다. 밀도는 케이스 공통이라 그 차이는 계수 안으로 들어가고, Remark 1 대로 최종 예측은 달라지지 않는다. 그래서 나눗셈 뒤에 남는 것은 값의 크기뿐이다.

는 물리에서 나온 값이 아니라 데이터에서 잰 표준편차로 정하는 scale 계수다. 기준 풍속 와 채널마다 하나씩 둔다. 같은 기준 풍속의 contour 를 모아 로 먼저 나누고, 그 상태에서 표본 표준편차를 구한 다음, 목표 표준편차를 그 값으로 나눈 것이 다 — . 나누고 난 분포의 표준편차가 목표값에 맞춰지도록 잡는 값이라는 뜻이다. 학습 fold 에서만 구하고 checkpoint 에 함께 저장하며, 되돌릴 때는 같은 계수로 나누기만 하면 된다.

표준편차는 fluid 화소에서만 잰다. 건물 안쪽 화소는 전 채널이 0 으로 채워져 있어 유동 분포가 아니기 때문이다. 건물이 격자에서 차지하는 비율은 0.5% 라 섞어도 값은 0.3% 안에서 같지만, 규칙 자체는 aicfd-grid-indoor-physical 과 같다. 그쪽은 solid 화소의 0 이 0 °C 를 뜻해서 25 °C 대인 실내 온도 분포를 크게 바꾸고, 그래서 차이가 훨씬 크게 난다.

적용은 샘플을 꺼낼 때마다 하고, 배치를 묶는 단계에서는 이미 정해진 계수를 곱하기만 한다.

확산 학습용 변형(edm) 은 구조가 같고 목표 표준편차만 sigma_data 로 바뀐 것이다. 같은 표본 통계를 쓰기 때문에 edm_scale = nondim_scale × sigma_data 가 그대로 성립한다. latent → ldm 은 이름이 비슷해도 다른 이야기다. 대상이 물리량이 아니라 AE 인코더 출력이라 별개의 rescale 이다.

aicfd-grid-indoor-physical — 전역 통계와 기준온도#

Remark 4 때문에 여기서는 속도로 나누는 대신 원점을 옮긴다. scale 은 학습 fold 의 fluid 화소를 전부 모아 채널당 하나씩 구한다.

는 온도 채널에서만 1 인 마스크이고, 는 센서 5점에서 실제로 잰 온도다. scale 는 채널당 상수이고, 샘플마다 달라지는 것은 bias 하나뿐이다.

aicfd-mesh-nasal-physical — 벽면 flux#

mesh vertex 위의 WSS 를 학습 공간으로 보내는 변환이다. WSS 는 유속뿐 아니라 비강이 얼마나 큰지에 따라서도 크게 달라지므로, 두 가지를 같이 걷어내야 한다.

벽면 flux 필드는 WSS 하나다. 아래 지수 는 Remark 3 에서 나온 값이다. 변환에 들어가는 인자는 물리에서 유도한 지수 아니면 해석 설정값에서 읽은 상수다. 데이터에서 구한 통계는 쓰지 않는다.

변환#

기호 뜻
벽면 전단응력의 크기
부호 있는 유속 라벨. 부호는 흡기/호기를 뜻하고 크기와 무관하므로 만 쓴다
cavity 부피. 벽면 mesh 만으로 계산하고(Remark 7) 전처리가 h5 에 volume 으로 저장한다
단위를 걷어내는 계수. 해석 설정값에서 정한다 (크기 계수)

이 식이 좋으냐 나쁘냐는 모델이 아니라 데이터와 변환의 성질로 따진다(Remark 1). 보는 기준은 네 가지다 — 물리적으로 유도되는가, 이상값에 잘 견디는가, remesh 해도 값이 그대로인가, 정확히 되돌릴 수 있는가. 학습 target 은 이 변환을 거친 값을 vertex 로 투영한 것이 전부다. 꼬리를 따로 손질하지 않으므로 (꼬리를 자르지 않는 이유) inverse transform 은 위 식 그대로 정확하다.

유속 지수#

Remark 3 에서 가 나온다. 비강의 Re 는 층류 영역이라 Blasius branch 를 쓴다. 비강처럼 pressure gradient 가 있는 통로에서도 이 지수는 그대로다.

이 데이터의 Re 가 실제로 그 영역에 있다. 100 케이스에서 는 285~2197 이다. 길이 scale 을 통로 단면적으로 바꿔 로 재도 486~4903 이라 결론은 같다. 벽면 값을 만든 CFD 도 사실상 laminar 로 풀렸다. turbulent viscosity 비 의 중앙값이 0.474, p99 가 7.05 라서 cell 절반 이상에서 turbulent viscosity 가 molecular viscosity 를 넘지 못한다.

Remark 5 — pressure gradient 는 계수만 바꾼다

Falkner–Skan 유동 을 보면

이므로 pressure gradient 파라미터 은 계수 에만 들어가고 지수 는 불변이다.

amplitude similarity 를 가정하면 , , 이 전부 와 무관해진다. 그러면 위 식에서 가 들어오는 통로는 하나뿐이라 가 된다.

지수가 흔들리는 경우도 있다. 정규화된 외부 속도 분포가 Re 에 따라 변하거나, separation point 가 움직이거나, 곡률·secondary flow 가 Re 에 의존하거나, 층이 합쳐지거나, transition 이 일어나거나, Stokes 극한()에 가까워질 때다. 검토했지만 쓰지 않은 대안은 설계 근거 에 있다.

부피 지수#

speed 라벨은 그 케이스를 어떤 조건으로 돌렸는지 적어 둔 값이다. 벽 근처에서 공기가 실제로 얼마나 빠른지까지 알려주지는 않는다. 같은 코에서 유속만 바꿀 때야 라벨이 곧 유속이지만, 코가 달라지면 이 둘이 어긋난다.

라벨은 유량이다. 해석은 인두 쪽 경계에 질량유량을 고정하고 콧구멍은 pressure 로 열어 두는 조건으로 돌렸고, 고정한 질량유량은 라벨에 정확히 비례한다 — 라벨 N 이면 다. 이것을 밀도로 나눈 것이 유량 다. 실제 속도는 이 유량을 통로 단면적으로 나눈 값 ()이다. 통로가 굵으면 같은 양을 마셔도 천천히 흐르고, 가늘면 빨라진다. 라벨이 같아도 코가 크면 WSS 가 작게, 작으면 크게 나온다는 뜻이다.

이건 상수 하나 곱해서 지울 수 있는 차이가 아니다. 부피 항을 빼 놓으면 코마다 제각각인 scale 오차가 target 에 그대로 실려 들어간다.

Remark 6 — flow-rate similarity 에서

형상들이 3D geometric similarity 를 만족하면(단면적 , development length ) Remark 3 의 Blasius scaling 이 유량 라벨에 대해 로 정리된다.

물리 상수 는 케이스 공통이라 에 흡수된다.

Remark 7 — 부피는 벽면 mesh 만으로 결정된다

divergence theorem 을 벽면 삼각형과 경계 루프 캡에 대해 더하면, volume mesh 없이도 cavity 부피가 나온다.

벽면 mesh 는 닫혀 있지 않다. 콧구멍과 인두가 경계 루프를 남긴다(형상당 3~4개). 전처리는 그 전에 좌표가 같은 노드를 합친다 — CGNS 는 패치 이음매의 노드를 두 번 적어 두는데, 그대로 두면 이음매까지 개구부로 잡혀 캡이 씌워진다(합치기 전 case 0001 기준 부피가 11% 높게 나왔다). 각 루프를 중심점 부채꼴로 캡하는데, 캡 삼각형은 벽면 경계 변과 반대 방향으로 감아서 곡면 전체의 orientation 을 유지한다. 이렇게 닫아 놓으면 위 합이 정확히 둘러싼 부피가 된다. 결과는 평행이동에 불변이고(수치로 확인한 오차 이내, 뚜껑 없는 정육면체에서 정확히 1), 캡을 어떻게 잡느냐가 바꾸는 것은 개구부 근처의 작은 부피뿐이다.

실제 데이터로도 확인했다. 형상 10개( = 28.5~60.3 cm³)에서 형상별 잔여 scale ( 의 면적가중 중앙값)는 ×4.15 만큼 퍼져 있다. 대 기울기를 재면 () 이다. flow-rate similarity 가 예측하는 과 1.1σ 안에서 맞고, 라벨이 국소 유속이었다면 나왔어야 할 은 기각된다.

으로 보정하고 나면 잔여 폭이 ×1.82 로 줄어든다. 줄어들 뿐 완전히 없어지지는 않는다. 남는 형상 인자(흡기/호기 비대칭 0.78~1.30 포함)는 변환이 처리할 부분이 아니라, 모델이 기하 feature 와 부호 있는 speed FiLM 으로 학습할 몫이다. 지수는 적합값이 아니라 유도값 으로 고정한다. 그래야 분할에 영향받지 않고, 형상 10개에 과적합되지도 않는다.

크기 계수#

지수 둘로 유속과 형상 의존을 걷어내고 나면 값의 크기만 남는다. 그 크기를 학습이 다룰 수 있는 범위로 옮기는 것이 마지막에 곱하는 계수 하나이고, 값은 해석 설정값에서 그대로 나온다. 통계는 쓰지 않는다.

이 자리에 들어가는 것은 와 라벨을 유량으로 환산하는 상수다. 값은 셋 다 알려져 있다 — , , . 셋을 그대로 곱한다. 그러면 변환이 상수배를 거친 값이 아니라 dimensionless group 그 자체가 되고, 크기는 덤으로 맞는다.

계수를 아예 빼면 학습이 안 된다. 곱하지 않은 값은 면적가중 중앙값이 float16 의 최소 정상수보다 작고, 학습을 float16 으로 돌리므로 target 대부분이 subnormal 로 내려앉아 0 으로 뭉개진다. 계수가 있어야 하는 이유는 여기까지다. 어느 값이냐는 Remark 1 로 최종 예측을 바꾸지 않고, loss 가 L1 이라 gradient 크기까지 계수와 무관하다. 이 계수로 옮기면 중앙값이 32 가 되어 안전한 범위에 들어온다.

꼬리를 자르지 않는 이유#

WSS 분포는 꼬리가 두껍다. 면적이 작은 삼각형에서 값이 튀면 그것이 수치 잡음인지 실제 hotspot 인지 구분하기 어렵고, 잡음이라면 학습 target 에서 잘라내는 편이 낫다. 그래서 상위 를 winsorize 하는 방법을 쓸 수 있는데, 이 데이터에서는 자를 만한 것이 없다.

전 케이스에서 면적가중 상위 를 넘는 면들을 따로 보면 이렇다.

게다가 이 모델은 loss 가 L1 이라 꼬리에 끌려가지 않는다. 큰 값이 선형으로만 기여하기 때문이다. 제곱 loss 였다면 상위 0.1% 가 gradient 를 좌우했겠지만, L1 은 그렇지 않다. 잘라서 얻을 것이 없다는 뜻이다.

그래서 학습 target 은 변환값을 그대로 vertex 로 투영한 것이고, physical 진리값(target_wss)과는 상수배 관계다. 자르지 않으니 비강 밸브 제트 같은 실제 hotspot 도 target 에 남는다.

Remark 8 — 면적가중은 remesh 에 불변

면적가중 통계는 mesh 를 얼마나 잘게 쪼갰는지에 영향받지 않는다. 면 위에서 값이 상수인 세분화라면 정확히 그대로다.

면적가중 합 는 표면 적분 의 quadrature 합이다. mesh 를 세밀하게 만들수록 그 적분으로 수렴하고, 적분 자체는 이산화와 무관하니 극한값도 무관하다.

정확 불변은 더 강하게 보일 수 있다. 면 를 자식 면 로 나누면 이고, 값이 면 위에서 상수라면 이므로 기여분 이 그대로 보존된다. 가중 분포함수 가 아예 바뀌지 않으니, 그 lower median 인 도 그대로다. vertex 개수로 세는 통계는 사정이 다르다. 이라 같은 세분화에서도 값이 움직인다.

Remark 8 은 lower median 에만 해당하는 이야기가 아니라 임의의 면적가중 quantile 에 그대로 적용된다. 위의 꼬리 통계와 metric 의 면적가중 평균이 여기에 해당한다.

성질#

정리하면 이 변환은 다음 성질을 갖는다.

한 가지 주의할 점은 target 값이 면적가중 크기 평균이지 벡터 평균의 크기가 아니라는 것이다. 방향이 서로 상쇄되면 라서 둘이 다르다. 그리고 vertex 로 투영하고 난 뒤의 중앙값은 보통 1 이 아니다.

정의되지 않는 조건#

현재 변환이 전제로 하는 단위#

이 변환은 SI 단위로 만든 dimensionless group 그 자체다. 지수 둘이 유속과 형상 의존을 걷어내고, 가 남은 단위를 걷어낸다. 어느 group 인지는 물리 단위로 읽으면 절에 있다.

이 해석이 성립하려면 데이터셋 안에서 단위와 라벨의 뜻이 케이스마다 같아야 한다.

앞의 네 조건은 이 데이터에서 성립한다. WSS 는 N/m², mesh 좌표는 meter 로 저장돼 있다. 유체는 전 케이스가 · 인 공기다. 라벨 N 은 인두 경계에 고정한 질량유량 을 뜻한다.

N/m² 는 Pa 와 같은 단위다. Pa 는 grid 모델이 예측하는 pressure 에만 쓰고, WSS 는 N/m² 로 적는다. 그래서 단위만 봐도 그 값이 pressure 인지 WSS 인지 구분된다.

남는 것은 저장값과 물리값 사이의 환산계수다. , , 처럼 하나씩 붙는데, 위 조건은 이 셋이 케이스마다 흔들리지 않는다는 뜻이다. 케이스 공통 환산계수는 변환에 상수배 하나만 더한다. 예측은 inverse transform 에서 그대로 되돌아 나오지만(Remark 1), 그 상수를 흡수해 주는 것이 없으므로 dimensionless group 이라는 해석은 SI 로 저장했을 때만 성립한다.

물리 단위로 읽으면#

이 변환이 어떤 물리량에 대응하는지는 WSS 를 표준 무차원수로 다시 써 보면 드러난다. 벽면 마찰계수 를 쓰고, 는 characteristic length 로 잰다.

둘을 로 묶으면 WSS 를 유속의 3/2 제곱으로 나누고 길이의 1/2 제곱을 곱한 꼴이 된다.

유속 지수 에서 유도한 가 여기 그대로 들어 있다.

여기에 이 모델이 쓰는 과 를 넣으면 저장값만으로 정리된다.

는 밀도, 동점성계수, 라벨 하나가 뜻하는 질량유량() 처럼 모든 케이스에 공통인 물리 상수만 모은 값이다. 이 데이터의 값을 넣으면 이고, 100 케이스에서 상대 편차가 수준이라 사실상 완전한 상수다. 그러니 학습에 쓰는 와 는 상수배만 다르다. 물리 상수를 넣어 group 을 계산하든 를 데이터에서 정하든 net 이 보는 값은 같고, 데이터에서 정하는 쪽을 쓰는 이유는 그래야 값의 크기가 로 나오기 때문이다.

단위가 맞는다고 형상까지 걷힌 것은 아니다. 여기서 쓰는 과 는 similarity proxy 이지, 비강마다 development length 와 통로 단면적을 실제로 잰 값이 아니다. 그래서 이 보정이 걷어내는 것은 형상 크기의 1차 효과까지다. 이 데이터의 가 중앙값 25.6 (15.2~42.3) 으로 Blasius 평판의 와 자릿수가 다른 것도 단위 문제가 아니라 아직 걷히지 않은 형상 인자이고, 부피 지수 에서 본 잔여 ×1.82 와 같은 이야기다.

유효 범위#

이 변환은 모든 유동 조건에서 성립하는 법칙이 아니라, similarity 가정 두 개 위에 선 근사다.

첫째, 가 많이 낮아지면 유속 지수 가 맞지 않는다. Remark 3 의 가 쪽으로 밀리면서 () 에 가까워지기 때문이다. 유속이 0 에 닿으면 변환 자체가 정의되지 않지만(정의되지 않는 조건), 지수는 그보다 훨씬 앞에서 먼저 어긋난다. 이 데이터의 가장 낮은 케이스가 285 라 여유가 크지는 않다.

둘째, 부피 항은 3D geometric similarity (, ) 를 전제한다. 형상이 전체적으로 같은 비율로 커지고 작아진다고 보는 근사다. 실제 비강은 그렇게 변하지 않는다 — 두개골 크기는 비슷한데 기도 굵기만 다른 경향이 있다. 그런 형상들 사이에서는 단면적과 development length 가 의 단순한 거듭제곱을 따르지 않아 유효 지수가 달라진다. 부피 보정 뒤에도 남는 ×1.82 가 그 몫이다.

그래서 이 변환이 맡는 것은 유속과 전체 크기가 만드는 가장 큰 scale 차이까지다. 남는 국소 형상 차이는 모델이 기하 feature 와 부호 있는 speed FiLM 으로 학습한다.

관련 항목#