소개
Boreas FFD란?
Boreas FFD는 실내 기류(IDC 랙 배치·공조·클린룸·차량 캐빈 등)의 온도·유속·오염도 분포를 빠르게 스크리닝하기 위한 FFD(Fast Fluid Dynamics) 솔버입니다. FFD는 Zuo & Chen(2009)이 Stam의 Stable Fluids(1999)를 실내 기류 해석용으로 정립한 방법이며, Boreas는 여기에 clew가 octree 격자·GPU 가속 등 자체 수치·구현 기법을 더한 독자 구현체입니다. "풀 CFD급 정밀도"가 아니라 엔지니어링 판단에 필요한 적정 수준의 정확도를 제공하면서, 거친 격자 + 큰 시간간격으로도 항상 안정적으로 수렴하는 실무 스크리닝 도구를 지향합니다.
격자는 cell-octree 직교격자(OpenFOAM snappyHexMesh의 castellated 단계와 유사)를 쓰고, 벽·물체 표면은 body-fit이 아니라 stair-step(계단형)으로 처리합니다.
Boreas는 반도체 공정 라인의 기류 모델링·디지털트윈 구현을 위해 고객사 요청에 의해 개발된 모듈입니다. 격자를 작게 잡으면 실시간에 가까운 연산도 가능하고, 설계 단계에서 수십~수백 케이스를 반복 비교할 수도 있습니다. 상용 CFD 라이선스와 계산 시간이 병목이 되는 팀(반도체 팹 설비팀, IDC/HVAC EPC 등)이 설계 후보안을 빠르게 스크리닝하거나 디지털 트윈의 시뮬레이션 엔진으로 쓰는 것을 전제로 설계됐습니다.
주요 기능
- 임의형상 도메인: 박스가 아닌 내부 공간(STL 경계)만 격자화 — 캐빈, 꺾인 실내 등
- 정밀도 3단: 필드 fp32 + 누적·기하 fp64 (드리프트·기하 견고성 확보)
- 물리 모델: 부력(Boussinesq) · Chen/LVEL 난류 · 랙/에어컨/서큘레이터 재순환 ·
다종 species · age-of-air · 체적 열원 · 시간평균 · upwind 보존 이류(열/오염물 수지용) - 무조건 안정 시간적분: semi-Lagrangian 이류(CFL 제약 없음) + 암시 확산·투영
이런 경우에 적합합니다
실내 공조·랙홀·클린룸 등에서 온도·유속·오염도 분포를 빠르게 스크리닝 하고 싶을 때
여러 배치안(디퓨저 위치, 랙 배열, 서큘레이터 용량 등)을 격자를 성글게 잡고 여러 번 돌려 비교하고 싶을 때
열·오염물 정상상태 수지(랙 발열=제거열, CO₂ 발생량=배기유출량 등)를 확인하고 싶을 때
이런 경우에는 맞지 않습니다
벽 근처 경계층을 정밀하게 모사해야 하는 경우 — 실내 스케일(Re ~ 10⁴–10⁵)에서 경계층 두께는 mm 단위인데, 본 솔버가 쓰는 스크리닝 격자(cm~dm)로는 모사되지 않습니다. 기본 난류모델(laminar)은 분자 점성만 반영하므로 벽 감속·제트 확산이 사실상 빠진 "비점성에 가까운" 해가 나올 수 있습니다.
곡면 형상을 정확히 표현해야 하는 경우 — 벽은 항상 stair-step(계단형)이며, body-fit/cut-cell 격자는 지원하지 않습니다.
문헌 벤치마크 대비 오차 10% 미만의 정밀도가 필요한 경우 — Boreas 자체의 검증된 오차 수준이 대략 10% 내외입니다(아래 "결과 해석 시 유의할 점" 참고). 정밀 CFD의 대체재가 아닙니다.
여러 노드로 분산 실행해야 할 만큼 큰 도메인 — 단일 노드 전용입니다(MPI 없음).
시스템 요구사항
Windows 또는 Linux에서 실행됩니다. GPU와 CPU를 모두 지원하며, OpenMP로 멀티코어를
활용할 수 있습니다(--threads N, 선택 사항 — 스레드 수를 바꿔도 결과는 비트 단위로 동일).
설치
담당 팀에서 배포하는 실행 파일 패키지를 받아 압축을 풀면 바로 사용 수 있습니다(별도 컴파일 불필요).
Windows
- 배포 패키지(zip)를 원하는 폴더에 압축 해제 (예:
C:\Boreas) - (선택) 매번 전체 경로를 입력하지 않으려면 해당 폴더를 PATH에 추가
- 설치 확인:bat
boreas2.exe version
Linux
tar -xzf boreas2-<버전>-linux64.tar.gz
cd boreas2
./boreas2 version # 설치 확인빠른 시작 튜토리얼
1단계: 케이스 파일 작성
Boreas는 JSONC(주석 허용 JSON) 별도의 격자 생성없이 케이스 파일 하나로 도메인·경계조건·물성·실행 옵션을 전부 정의합니다. 아래는 5m × 5m × 5m 방에 천장 원형 디퓨저로 냉기를 공급하고 바닥 모서리 두 곳으로 배기하는 최소 예제입니다:
// 5m 룸 + 천장 원형 디퓨저(실린더 패치) 급기 + 바닥 코너 배기 2개
{
"grid": { "h0": 0.25, "cells": [20, 20, 20], "bands": [] },
"params": {
"dt": 0.5, "turbulence": "chen", "init_temp": 26,
"buoyancy": { "beta": 3.4e-3, "t_ref": 26 },
"pressure": { "max_cycles": 60, "tol": 1e-10 }
},
"bc": [
// 천장 중앙 r=0.5 원형 디퓨저 — 냉기 하향 토출 (실린더 선택 볼륨)
{ "type": "inlet", "region": { "type": "cylinder", "center": [2.5, 2.5, 5.0],
"r": 0.5, "h": 0.02 }, "speed": 1.5, "temp": 18 },
{ "type": "outlet", "region": { "type": "box", "center": [0.5, 0.5, 0],
"size": [1, 1, 0] } },
{ "type": "outlet", "region": { "type": "box", "center": [4.5, 4.5, 0],
"size": [1, 1, 0] } }
],
"run": { "steps": 120, "log_every": 40,
"vtk_flow": "flow.vtu", "fluid_only": true }
}전체 스키마(모든 키·기본값·주석)는 docs/case-reference.jsonc에 있습니다.
2단계: 실행
boreas2 my_case.jsonc --threads 4--threads N은 OpenMP 스레드 수입니다(기본 1 = 직렬).
3단계: 결과 확인
실행하면 <케이스 파일 위치>/<케이스이름>_NNN/ 폴더(재실행할 때마다 번호 증가,
이전 결과 보존)가 생기고 다음이 저장됩니다:
flow.vtu(+ 스냅샷.pvd) — 전체 유동장slice.vtu— 단면monitors.csv— 지정한 모니터 지점의 시계열run.log— 실행 로그
이 파일들은 ParaView로 열어 유동 구조(스트림라인·속도 벡터·온도 분포 등)를 확인할 수 있습니다.
결과 분석 시 유의할 점
"안정 ≠ 정확" — 이 솔버의 무조건 안정성은 "발산하지 않는다"는 뜻이지 "물리적으로 정확하다"는 뜻이 아닙니다. dt를 과도하게 크게, 격자를 과도하게 곱게 잡으면(확산수 ν·dt/h² ≫ 1) 압력/확산 솔버가 충분히 수렴하지 못한 채 다음 스텝으로 넘어가면서 유효 점성이 손실되어 자연대류 등에서 속도가 과대(+20% 이상까지) 산출될 수 있습니다. 결과가 이상하게 크거나 작다면 먼저
pressure.tol/max_cycles를 확인하세요.이류 스킴은 목적에 맞게 선택: 기본값
advection: "semi"(semi-Lagrangian)는 빠르지만 비보존이라 장시간 케이스에서 열/물질 수지가 수 % 어긋날 수 있습니다. 랙 발열=제거열, CO₂ 발생량=배기유출량 같은 정상상태 수지 보고서가 목적이라면 반드시advection: "upwind"로 바꾸세요.난류모델은 벽 근처 효과가 중요한지로 선택: 기본값
laminar는 분자 점성만 반영해 벽 감속·제트 확산이 빠질 수 있습니다. 디퓨저 토출이나 벽면 냉방처럼 벽 근처 거동이 중요하면chen(0방정식, 벽 거리 기반) 또는lvel(벽법칙 기반, 저유속에서는 자연스럽게 층류로 되돌아감)을 쓰세요. 다만chen은 확산이 강성해져 스텝당 계산 비용이 눈에 띄게(경우에 따라 2배 이상) 늘어날 수 있습니다.장비·벽 표면은 격자면에 맞춰 배치: 랙·서큘레이터 같은 장비의 박스 표면 좌표는 격자 크기(
h0)의 배수에 맞추세요. 어긋나면 stair-step 표면이 의도한 격자면과 다른 면으로 밀려나 흡배기 패치(두께 0)가 빗나가는 사례가 실제로 있었습니다.관통형 장비는 몸체(solid)가 반드시 있어야 함: 흡배기 패치는 solid 표면을 wall로 승격하는 방식이라, 몸체 없이 패치만 있는 "블레이드리스" 형태는 지원하지 않습니다.
정상상태 조기 종료 활용:
run.stop_when_steady를 켜두면 정상상태 도달을 감지해 스텝 수를 크게 줄일 수 있습니다(실제 사례에서 고정 스텝 대비 64% 절감).검증 오차 범위: 문헌 벤치마크(Lid-driven cavity, 자연대류 등) 대비 대략 10% 내외 오차 범위 내에서 검증되었습니다 — 자세한 수치는 이 사이트의 "검증" 문서들을 참고하세요.
다음 단계
- 케이스 파일 전체 옵션:
docs/case-reference.jsonc(재순환기·species·시간평균 등) - 문헌 벤치마크 대비 검증 결과: 이 사이트의 "검증" 문서들 (Lid-driven cavity, 자연대류, 실내 강제/혼합대류 등)
- 여러 케이스 한 번에 실행: 배포 패키지에 포함된 일괄 실행 스크립트