1. 개요
| 메시 생성 Mesh Generation | |
|---|---|
| 목적 | 해석 도메인의 이산화(discretization) |
| 격자 종류 | 구조 격자 / 비구조 격자 / 혼합 격자 |
| 대표 알고리즘 | 들로네 삼각분할, 전진전선법, octree |
| 품질 지표 | 왜도(skewness), 종횡비, 직교성 |
해석의 90%는 격자에서 결정되고, 격자 생성의 90%는 인내심에서 결정된다.
메시 생성(mesh generation) 또는 격자 생성은 연속적인 해석 대상 형상을 유한 개의 작은 요소(element)들로 잘게 나누어, 유한체적법·유한요소법 같은 수치해석이 방정식을 이산화해 풀 수 있는 이산 도메인을 만드는 작업이다. 격자 문서가 “격자란 무엇이며 어떤 종류가 있는가”를 다룬다면, 이 문서는 **“그 격자를 어떤 알고리즘과 도구로 실제로 만들어 내는가”**에 초점을 맞춘다.
전산유체역학과 구조해석 실무에서 전체 해석 시간의 절반 이상이 메시 생성에 소모된다는 것은 업계의 오랜 정설이다. 격자 품질이 나쁘면 아무리 좋은 솔버와 물리 모델을 써도 결과가 틀어지거나 아예 수렴하지 않는다. “Garbage in, garbage out”이 가장 잔인하게 작동하는 단계.1
2. 구조 격자 대 비구조 격자
메시 생성은 크게 두 철학으로 갈린다.
- 구조 격자(structured grid) — 격자점이 규칙적인 (i, j, k) 인덱스로 정렬된 격자. 육면체(hexahedra)로 채우며, 이웃 관계가 인덱스만으로 자명해 메모리 효율과 정확도가 높다. 대신 복잡한 형상을 규칙적 블록으로 쪼개는 데 엄청난 수작업이 든다. 다중 블록(multi-block) 기법으로 형상을 여러 논리 블록으로 나누어 대응한다.
- 비구조 격자(unstructured grid) — 삼각형/사면체(tetrahedra)를 형상에 맞춰 자유롭게 채우는 격자. 인접 정보를 명시적 연결 리스트로 저장해야 해 메모리를 더 먹지만, 복잡한 형상을 자동으로 채울 수 있어 산업 현장의 주력이다.
정확도가 생명인 익형·터보기계 해석은 구조 격자를, 자동차 엔진룸처럼 형상이 지저분한 문제는 비구조 격자를 택하는 것이 일반적. 실제로는 벽 근처만 정렬된 층을 쓰고 나머지는 비구조로 채우는 혼합 격자가 가장 흔하다.
3. 핵심 알고리즘
비구조 격자를 자동 생성하는 알고리즘은 크게 세 계열이다.
3.1. 들로네 기반
들로네 삼각분할은 “어떤 삼각형의 외접원 안에도 다른 점이 들어가지 않는다”는 빈 외접원 조건을 만족하도록 점들을 연결하는 방법이다. 최소각을 최대화해 지나치게 뾰족한 삼각형을 피하므로 격자 품질이 좋고, 점을 하나씩 삽입하며 국소적으로 갱신하는 증분법(incremental insertion)이 빨라 대규모 격자에 널리 쓰인다. 내부 점을 어디에 뿌릴지 정하는 점 배치(point insertion) 전략이 품질을 좌우한다.2
여기서 한 걸음 더 나간 것이 들로네 세분(Delaunay refinement)이다. 루퍼트(Ruppert, 1995)는 품질 조건을 어기는 삼각형의 외심에 새 점(Steiner point)을 계속 꽂는 단순한 규칙만으로 모든 각이 일정 하한 이상이고 삼각형 수가 최적의 상수배 이내라는 두 보장을 동시에 얻을 수 있음을 보였다. “격자 품질이 좋더라”가 경험담이 아니라 정리(theorem)가 된 순간이고, 2차원 메셔의 사실상 표준 뼈대가 되었다. 다만 3차원에서는 사정이 달라서, 부피는 거의 0인데 외접원은 멀쩡한 슬리버(sliver) 사면체가 빈 외접원 조건을 만족하면서도 끼어든다 — 3차원 메셔가 들로네 세분 뒤에 별도의 슬리버 제거 단계를 붙이는 이유다.
3.2. 전진전선법 (Advancing Front)
경계면에서 출발해 도메인 안쪽으로 삼각형/사면체를 한 겹씩 쌓아 나가는 방법. 마치 불이 번지듯 “전선(front)“이 안쪽으로 전진하며, 양쪽에서 자란 전선이 만나면 격자가 완성된다. 3차원 실용화는 뢰너와 파리크(Löhner & Parikh, 1988)가 열었는데, 핵심은 전선의 각 면마다 “이상적인 위치”에 새 점을 놓아 보고 기존 전선과 교차하지 않을 때만 채택하는 탐색·백트래킹 구조다. 경계면이 곧 격자의 출발점이라 경계 근처 격자 품질이 특히 우수해 경계층 해석에 유리하지만, 전선이 충돌하는 지점에서 후보가 전부 기각되는 막다른 골목이 생길 수 있어 그 처리가 까다롭다.3
3.3. 옥트리/사분트리 기반
도메인을 큰 정육면체로 감싼 뒤, 형상이 복잡한 곳을 재귀적으로 8등분(2차원이면 사분트리로 4등분)하며 공간 분할 자료구조를 만들고, 경계에 걸친 셀을 형상에 맞게 잘라내는 방식. 자동화 수준이 높아 “형상만 던지면 격자가 나오는” 상용 자동 메셔의 근간이다. ANSYS의 컷셀(cut-cell), OpenFOAM의 snappyHexMesh가 대표적.
snappyHexMesh는 이 계열의 동작을 이름에서부터 드러낸다. 배경 육면체 격자에서 시작해 castellate(형상 근처를 재귀 세분하고 도메인 밖 셀을 잘라내 계단 모양 표면을 만드는 단계) → snap(그 계단 꼭짓점을 실제 삼각 표면으로 끌어당겨 형상에 붙이는 단계) → addLayers(붙인 표면에서 셀을 밀어내 프리즘 경계층을 삽입하는 단계)의 3단계를 차례로 밟는다. 각 단계마다 최대 비직교각·표면 왜도·오목도 같은 품질 제어값을 두고, 그 값을 어기는 조작은 되돌린다 — 즉 “품질을 만족할 때까지만 형상에 붙인다”는 타협이 알고리즘에 내장되어 있다. 층 삽입이 목표 두께를 못 채우고 몇 겹만 들어가는 흔한 증상은 버그가 아니라 이 품질 제어가 작동한 결과인 경우가 많다.
4. 경계층 격자
CFD에서 벽 근처 경계층은 속도가 급변하는 얇은 영역이라, 벽에 수직으로 극도로 촘촘한 격자가 필요하다. 이를 위해 벽면을 따라 얇고 납작한 프리즘(prism)/육면체 층을 여러 겹 쌓는 것이 표준이다. 첫 격자의 높이는 난류 모델의 벽함수 요구치(y⁺)에 맞춰 결정되며, 이 층을 제대로 못 깔면 벽 전단응력과 열전달 예측이 통째로 틀어진다.4 프리즘 층 바깥은 사면체 비구조 격자로 채우는 것이 전형적인 하이브리드 구성.
5. 격자 품질 지표
만들어진 격자가 쓸 만한지는 정량 지표로 판정한다.
- 왜도(skewness) — 이상적 정삼각형/정사면체 대비 얼마나 일그러졌는가. 1에 가까울수록 최악이며, 보통 0.9를 넘는 셀이 있으면 발산의 씨앗이 된다.
- 종횡비(aspect ratio) — 셀의 가장 긴 변과 짧은 변의 비. 경계층 셀은 의도적으로 크지만, 유동 방향이 아닌 곳에서 크면 정확도가 떨어진다.
- 직교성(orthogonality) — 셀 면 법선과 셀 중심을 잇는 선이 이루는 각. 유한체적법의 플럭스 계산 정확도에 직결된다.
이 지표들이 나쁜 셀 몇 개가 수렴을 통째로 망치는 일이 흔해서, 메시 생성 후 반드시 품질 진단을 돌리는 것이 국룰이다.5
6. 도구와 실무
전문 메시 생성 도구로는 상용의 ANSYS Meshing·ICEM CFD·Pointwise, 오픈소스의 Gmsh·OpenFOAM의 snappyHexMesh/blockMesh, 그리고 삼각분할 라이브러리 Triangle·TetGen 등이 있다. 오픈소스 쪽은 대부분 출처가 명확한 학술 소프트웨어여서 인용까지 같이 해 주는 것이 예의다 — Gmsh는 Geuzaine & Remacle (2009), TetGen은 Si (2015)가 정식 인용 문헌이고, 둘 다 앞 절의 들로네·전진전선 알고리즘을 실제로 구현한 물건이다. 해석 결과를 시각화하는 ParaView는 메시 생성 도구가 아니라 후처리 도구이므로 혼동하지 말 것.6 해석 도중 격자를 자동으로 조밀하게 바꾸는 적응 격자 세분화는 초기 메시 생성의 부담을 덜어 주는 후속 기술로, 두 기법은 상호 보완적이다.
7. 수렴 스터디용 격자 세 벌 만들기
격자는 대개 한 벌로 끝나지 않는다. 메시 독립성 연구를 하려면 체계적으로 세분된 격자 세 벌이 필요한데, 이게 메시 생성 단계에서 미리 설계돼 있지 않으면 나중에 손댈 수 없다.
핵심 원칙은 하나다. 세 격자는 같은 크기 함수(size function)를 스칼라배 한 것이어야 한다. 셀 크기를 정하는 필드 하나를 잡아 두고 , , 처럼 전체를 같은 비율로 줄이는 것이다. 격자마다 표면 세분 레벨을 따로 만지거나, 조밀 격자에만 프리즘 층을 한 겹 더 넣거나, 어느 한 격자만 곡률 세분을 켜면 — 그건 세분화된 세 격자가 아니라 서로 다른 격자 세 개이고, 거기서 뽑은 관측 수렴 차수는 아무 의미가 없다.
실무에서 이게 잘 지켜지지 않는 대표적 지점이 경계층 프리즘 층이다. 층 수와 첫 층 높이를 그대로 둔 채 바깥 사면체만 조밀하게 하면 벽 근처 해상도는 그대로여서 수렴이 위장되고, 반대로 첫 층 높이까지 같은 비율로 줄이면 벽함수를 쓰는 해석에서는 가 구간을 넘어가 벽 모델 자체가 바뀌어 버린다. 후자를 피하려면 처음부터 벽까지 직접 푸는() 격자로 설계하는 편이 스터디가 깨끗하다.
세 격자를 다 만들었으면 각각의 셀 수와 대표 격자 간격을 기록해 둔다. 그 숫자가 격자 수렴 지수 계산의 입력이 되고, 세분 비율이 권장 하한 1.3을 넘었는지도 이때 확인된다.
8. 관련 문서
- 격자 · 적응 격자 세분화
- 메시 독립성 연구 · 격자 수렴 지수
- 들로네 삼각분할 · 공간 분할 자료구조
- 경계층 · 벽함수
- 유한체적법 · 유한요소법
- OpenFOAM · ParaView
- 전산유체역학
9. Footnotes
-
유명한 격언 하나. “해석이 안 맞으면 격자를 의심하고, 격자가 멀쩡해 보이면 다시 한 번 격자를 의심하라.” 물리 모델과 경계 조건을 다 뜯어고쳤는데 답이 안 나오다가, 알고 보니 왜도 0.99짜리 셀 하나가 범인이더라는 이야기는 전설이 아니라 현실이다. ↩
-
순수 들로네 삼각분할만으로는 경계면을 격자 변으로 강제할 수 없어서, 실무에서는 경계를 반드시 보존하는 제약 들로네 삼각분할(constrained Delaunay)을 쓴다. 경계가 뭉개지면 형상 자체가 바뀌어 버리니까. ↩
-
전진전선법이 막다른 골목에 빠지면 남은 구멍을 억지로 채우느라 품질이 나쁜 셀이 한두 개 생기는데, 하필 그 한두 개가 수렴을 잡아먹는다. 들로네 계열과 섞어 쓰는 하이브리드 메셔가 많은 이유이기도 하다 — 몸통은 들로네로 빠르게 채우고, 경계 근처만 전진전선으로 정성껏 쌓는 식이다. ↩
-
y⁺는 벽에서 첫 격자점까지의 무차원 거리다. 벽함수를 쓰면 y⁺ ≈ 30~300, 벽까지 직접 풀려면 y⁺ ≈ 1을 노린다. 이 목표에 맞춰 첫 층 높이를 마이크로미터 단위로 조정하는 것이 CFD 엔지니어의 숙명. ↩
-
상용 솔버는 아예 왜도가 임계치를 넘는 셀 개수를 리포트에 찍어 준다. 그 숫자가 0이 아니면, 커피 한 잔 뽑아 놓고 격자를 다시 손볼 마음의 준비를 하는 게 좋다. ↩
-
은근히 자주 하는 실수다. ParaView는 VTK 기반 후처리·시각화 도구지, 격자를 만들어 주지 않는다. 격자를 만드는 건 Gmsh·Pointwise 같은 메셔들의 몫. ↩
이 문서의 주요 출처
- R. Löhner, P. Parikh (1988), "Generation of three-dimensional unstructured grids by the advancing-front method", Int. J. Numer. Methods Fluids 8(10), 1135-1149 (전진전선법 원논문)
- J. Ruppert (1995), "A Delaunay Refinement Algorithm for Quality 2-Dimensional Mesh Generation", J. Algorithms 18(3), 548-585 (들로네 세분 품질 보장)
- C. Geuzaine, J.-F. Remacle (2009), "Gmsh: A 3-D finite element mesh generator with built-in pre- and post-processing facilities", Int. J. Numer. Methods Eng. 79(11), 1309-1331
- H. Si (2015), "TetGen, a Delaunay-Based Quality Tetrahedral Mesh Generator", ACM Trans. Math. Softw. 41(2), Article 11
- OpenFOAM v12 User Guide - 5.5 Mesh generation with snappyHexMesh (castellate/snap/layer 3단계 · 품질 제어 항목)
의견을 반영할게요. 감사합니다.