변경 이력#

과거에 산출된 값을 현재 값과 비교하거나, 예전 checkpoint 를 다시 다룰 때 필요한 정보.

metric 정의 변경 (2026-07)#

다섯 모델의 metric.py 가 서로 어긋나 있던 것을 정리하면서 지표 정의가 바뀌었다. 이 시점 이전에 산출된 지표 값은 현재 값과 직접 비교할 수 없다.

변경 이전 현재
rel_l2% 정의 스칼라 필드에서 제곱근 누락, pixel space 는 정의 자체가 달랐음 다섯 모델 모두
rmse 정의 물리량 모델에서 격자점 수로 나누지 않은 합이라 격자 해상도에 의존 격자점 수로 나눈 참 RMS
지표 이름 mrse% rel_l2% (값과 식은 불변)
계산 영역 캔버스 전체 fluid 영역만 (회귀 경로)
mesh 가중 vertex 단순 평균 면적 가중
샘플 단위 배치 안에서 합산 → 배치 크기에 값이 의존 샘플 하나씩 계산 후 평균
3D 테스트 샘플 슬라이스 1장 케이스 전체
공간 분리 물리 공간과 정규화 공간을 따로 계산 물리 공간 한 번의 패스

과거 산출물 다룰 때#

아직 캔버스 전체로 계산되는 경로#

fluid 한정은 회귀 경로에 적용돼 있다. 다음은 캔버스 전체다.

WSS 정규화 변경 (2026-08)#

이전 현재
변환
기준값 표준편차 (목표 표준편차 1) 면적가중 중앙값 (목표 중앙값 1)
극단값 처리 얕은 clip 으로 scale 보호 clip 없음. 중앙값이 극단값에 둔감

이전 방식은 몇 개 안 되는 극단값이 표준편차를 좌우해서 clip 이 필요했다. 현재 방식은 정보 손실이 없고 inverse transform 이 정확하다.

target_stats 는 학습된 모델의 일부다. checkpoint 에 저장된 값을 그대로 쓰며, 다른 fold 나 다른 지수로 다시 계산하면 그 모델의 예측 scale 이 달라진다. 2026-08 이전 checkpoint 는 옛 변환 기준의 a_ref 를 갖고 있다.

현재 사양은 nondim 참고.

WSS 정규화 변경 2차 (2026-08)#

이전 현재
변환
기준값 학습 fold 면적가중 중앙값 (checkpoint 동결) 물리 유도 지수 + 고정 코드 literal. 학습 통계 없음
극단값 처리 clip 없음. 중앙값이 극단값에 둔감 학습 target 을 per-case 면적가중 quantile 0.999 로 winsorize
데이터 — h5 에 volume 추가 (벽면 mesh divergence theorem, 전처리가 backfill)

형상별 잔여 scale(×3.89)가 cavity 부피와 상관해서 항으로 보정한다. 이 시점 이전 checkpoint 는 target_stats 기반이라 현재 코드로 평가할 수 없고, target 공간도 달라 학습 곡선을 직접 비교할 수 없다.

현재 사양은 nondim 참고.

WSS 정규화 변경 3차 (2026-08)#

이전 현재
변환
크기 계수 고정 코드 literal 2.7e7. 전 데이터(평가 fold 포함) 면적가중 중앙값의 역수 해석 설정값에서 계산한다 — ρ, ν, 라벨을 질량유량으로 바꾸는 상수의 곱. 통계가 들어가지 않는다
극단값 처리 학습 target 을 per-case 면적가중 quantile 0.999 로 winsorize 자르지 않는다

literal 은 평가 fold 까지 포함한 통계였다. 한동안 학습 fold 의 면적가중 중앙값으로 대신했다가, 계수 자리에 들어갈 상수가 이미 해석 설정에 다 있다는 것이 확인되면서 그쪽으로 옮겼다. 그래서 지금은 target 공간에 통계가 하나도 없고, 변환은 상수배를 거친 값이 아니라 dimensionless group 그 자체다. 크기도 따로 맞출 필요가 없다 — 면적가중 중앙값이 32 로 나와 float16 범위 안에 들어온다.

clip 은 재 보니 자를 대상이 없었다. 상위 면적 0.1% 를 넘는 면들의 면적 중앙값이 전체의 0.53배로 sliver 라 하기 어렵고, 최댓값도 cap 의 2.34배에 그쳤다. L1 loss 가 이미 꼬리에 둔감하다.

이 시점 이전 checkpoint 는 target 공간이 상수배만큼 다르다.

mesh 노드 병합 (2026-08)#

CGNS 가 패치 이음매의 노드를 두 번 적어 두는 것을 전처리가 그대로 받아들이고 있었다. 벽면이 위상적으로 여러 조각(case 0001 은 8조각)이라 Laplacian 이 조각마다 끊겼고, 부피 계산은 이음매를 개구부로 보고 캡을 씌웠다. 전처리에서 좌표가 같은 노드를 합치도록 바꿨다.

이전 현재
벽면 연결성 case 0001 기준 8조각 전 케이스 한 덩어리
경계 루프 형상당 12~67개 (이음매 포함) 3~4개 (콧구멍·인두)
cavity 부피 18~54 cm³ 28.5~60.3 cm³
부피 지수 실측 기울기 −0.95±0.29 (r=−0.76), 보정 후 잔여 ×3.18 −1.39±0.20 (r=−0.92), 보정 후 ×1.82

부피가 바뀌므로 이 시점 이전 h5 와 그 데이터로 학습한 checkpoint 는 target scale 이 다르다. 형상별 잔여가 절반으로 준 것은 그만큼이 부피 계산 오차였다는 뜻이다.

좌표 정규화 기준 (2026-08)#

확산 시간은 학습되는 값이고, 뜻하는 바는 geodesic conv 의 kernel 크기다. 형상마다 같은 크기를 뜻해야 하는데 좌표를 최대 반지름으로 정규화하고 있었다. 그 반지름은 중심에서 가장 먼 점 하나 — 전두동이나 인두 끝 — 가 정하는 값이라 통로 크기와 무관하고, 형상 10개 사이에서 정규화 후 표면적이 ×1.56 만큼 어긋나 있었다. 표면적을 1 로 맞추는 방식으로 바꿨다. 퍼짐은 ×1.000, 평균 edge 의 변동계수는 0.097 에서 0.053 으로 줄었다.

좌표가 바뀌므로 operator cache 의 hash 도 바뀐다. 이 시점 이전 cache 는 재사용되지 않고 eigenbasis 를 다시 만든다.

repo 이름 변경 (2026-10)#

repo 이름을 aicfd-<표현>-<대상>-<target> 순서로 바꿨다. 이전 이름은 접두사 aicfd-·aifem- 이 표현을 대신했고, 렌더 이미지를 pixel 이라고 불렀다.

이전 이름 현재 이름
aicfd-building-pixel aicfd-grid-building-rgb
aicfd-building-physical aicfd-grid-building-physical
aicfd-indoor-physical aicfd-grid-indoor-physical
aicfd-nasal-pixel aicfd-grid-nasal-rgb
aifem-nasal-physical aicfd-mesh-nasal-physical

2026-10-01 이전의 output 폴더, Notion 지표 기록, NAS 경로에는 이전 이름이 남아 있다. aicfd-mesh-nasal-physical 의 패키지 디렉터리도 aifem/ 에서 aicfd/ 로 바꿨다. checkpoint 에 저장된 config 의 _target_ 이 aifem. 으로 시작하는 output 은 aicfd. 로 고쳐야 읽힌다. 가중치는 그대로 쓴다.

데이터 재생성 이력#

모델 보간 안전장치 O(1) clip 양자화 범위
aicfd-grid-indoor-physical 적용 적용 ( m/s, °C) 실제 분포에 맞게 재산정 완료
aicfd-grid-building-physical 적용 미적용 안전장치 도입 이전 범위 유지

aicfd-grid-building-physical 의 양자화 범위를 좁히는 절차는 운영 절차 에 있다.