SIMWIKI DOC // 소프트웨어

OpenFOAM

소프트웨어 전산유체역학 CONVERGED last update 2026-07-01 09:47:18

OpenFOAM
종류오픈소스 CFD 툴박스
개발OpenCFD Ltd (ESI Group)
언어C++
라이선스GPL v3
최초 공개2004년
플랫폼Linux (주력), Windows/macOS

1. 개요[편집]

라이선스 비용은 0원이다. 대신 당신의 시간과 정신력으로 지불하게 된다.

OpenFOAM(Open Field Operation And Manipulation)은 C++로 작성된 오픈소스 전산유체역학 툴박스다. 정확히는 CFD 전용 프로그램이라기보다, 연속체 역학의 편미분방정식을 유한체적법으로 풀기 위한 라이브러리와 그 위에 구현된 솔버·유틸리티의 모음이다. 소스가 완전히 공개되어 있고 병렬 코어 수 제한이 없어, 학계와 산업계를 가리지 않고 상용 코드의 대안 혹은 보완재로 널리 쓰인다.

가격표에 0이 하나 적은 것이 아니라 아예 0원이라는 점 때문에 상용 코드 라이선스 비용에 시달리는 조직에게 구원처럼 보이지만, 공식 GUI가 없고 학습 곡선이 가파르다는 점에서 공짜 점심은 아니다.

2. 역사[편집]

전신인 FOAM은 1980년대 말~1990년대에 임페리얼 칼리지 런던의 헨리 웰러(Henry Weller)와 흐르보예 야삭(Hrvoje Jasak) 등이 개발했다. 당시 지배적이던 포트란 CFD 코드에 대한 반란으로, C++의 객체지향과 연산자 오버로딩으로 텐서 수학을 코드에 직접 표현하겠다는 설계 철학이 핵심이었다. 이후 Nabla Ltd를 통해 상용 판매되다가, 2004년 OpenCFD Ltd가 GPL 라이선스로 전면 공개하면서 OpenFOAM이 되었다.

이후의 역사는 포크(fork)의 역사다.1

  • ESI-OpenCFD 버전 (openfoam.com) — OpenCFD Ltd는 2011년 SGI에, 2012년 ESI Group에 인수되었다. 상표권 “OpenFOAM”의 보유자이며, v1606부터 연도+월 형식(v2312, v2406, …)으로 연 2회 릴리스한다.
  • Foundation 버전 (openfoam.org) — 원저자 헨리 웰러가 이끄는 OpenFOAM Foundation이 배포하며, CFD Direct가 개발을 주도한다. 정수 버전 번호(10, 11, 12, …)를 쓴다.
  • foam-extend — 야삭이 주도하는 커뮤니티 포크로, 실험적 기능(중첩 격자, 블록 연성 솔버 등)을 과감하게 수용하는 노선이다.

세 갈래는 케이스 파일이 미묘하게 호환되지 않아서, 인터넷에서 주운 튜토리얼이 내 버전에서 안 돌아가는 것은 OpenFOAM 입문의 통과의례다.

3. 케이스 구조[편집]

OpenFOAM에는 프로젝트 파일이라는 개념이 없다. 케이스는 정해진 구조의 디렉토리이며, 모든 설정은 텍스트 딕셔너리 파일로 이루어진다.

cavity/
├── 0/            # 초기·경계 조건 필드 (U, p, k, omega, ...)
├── constant/     # 격자(polyMesh/), 물성치, 난류 모델 설정
└── system/       # controlDict, fvSchemes, fvSolution
  • 0/ — 각 물리량 필드의 초기값과 경계 조건을 담는다. 디렉토리 이름이 0인 이유는 시간 0초의 상태이기 때문. 시간 전진에 따라 0.1/, 0.2/ 같은 시간 디렉토리가 늘어난다.
  • constant/격자 데이터(polyMesh)와 물성, 난류 모델(turbulenceProperties) 등 해석 중 변하지 않는 정보.
  • system/ — 시간 간격과 출력 주기(controlDict), 이산화 스킴(fvSchemes), 선형 솔버와 알고리즘 설정(fvSolution).

4. 주요 솔버[편집]

솔버가 물리 모델별로 따로 존재하는 것이 OpenFOAM의 전통적 구조다.2

  • simpleFoam — 정상상태 비압축성 난류 유동. 이름 그대로 SIMPLE 알고리즘 기반이다.
  • pisoFoam — 비정상 비압축성 유동. PISO 알고리즘으로 시간 정확도를 확보하며, CFL 조건의 제약을 받는다.
  • pimpleFoam — PISO와 SIMPLE을 결합한 PIMPLE 알고리즘. 외부 반복을 통해 큰 시간 간격에서도 안정적으로 돌아가는 실무의 주력이다.
  • interFoam — VOF(Volume of Fluid) 기반 2상 유동 솔버. 자유수면, 슬로싱, 월파 해석의 단골이다.

5. 유틸리티[편집]

  • blockMesh — 딕셔너리로 정의하는 정렬 육면체 격자 생성기. 꼭짓점 좌표를 손으로 적어야 해서 복잡한 형상에는 고행이다.
  • snappyHexMesh — STL 표면에 육면체 지배(hex-dominant) 격자를 자동 생성하는 도구. 강력하지만 설정 딕셔너리의 파라미터가 수십 개라, 이것만 다루는 튜토리얼 시리즈가 따로 있을 정도다.
  • decomposePar / reconstructPar — 병렬 계산을 위한 도메인 분할과 재조합. MPI 코어 수에 제한이 없다는 것이 상용 코드 대비 최대 무기다.
  • checkMesh격자 품질 검사. 비직교성과 skewness를 검사해 통과/실패를 알려주는 문지기.

후처리는 ParaView가 사실상 표준이다.3

6. 코드로 쓰는 방정식[편집]

OpenFOAM의 백미는 C++ 연산자 오버로딩으로 구현된 텐서 DSL이다. 지배 방정식이 거의 수식 그대로 코드가 된다.

solve
(
    fvm::ddt(rho, U)
  + fvm::div(phi, U)
  - fvm::laplacian(mu, U)
 ==
  - fvc::grad(p)
);

fvm:: 네임스페이스는 해당 항을 음적(implicit)으로 이산화하여 행렬 계수에 반영하고, fvc:: 네임스페이스는 현재 필드값으로 양적(explicit) 계산하여 소스항으로 처리한다. 즉 어떤 항을 행렬 좌변에 넣을지 우변에 넣을지를 네임스페이스 선택만으로 결정하는 것. 나비에-스토크스 방정식을 이 정도 가독성으로 코드에 옮긴 시스템은 지금 봐도 드물다. 새 물리 모델을 추가하고 싶은 연구자에게 이 구조는 강력한 유인이다.

7. 장점과 단점[편집]

장점

  • 무료이며 소스가 완전 공개되어 있다. 솔버 내부가 궁금하면 열어보면 된다.
  • 병렬 코어 수 무제한. HPC 클러스터에 1만 코어를 던져도 라이선스 서버가 화내지 않는다.
  • 라이브러리 구조 덕분에 커스텀 솔버·경계 조건·물리 모델 개발이 자유롭다.

단점

  • 공식 GUI가 없다. 모든 설정은 텍스트 파일 편집이며, 오타 하나에 솔버는 장문의 C++ 스택 트레이스로 응답한다.
  • 학습 곡선이 가파르다는 표현은 관대하고, 절벽에 가깝다.
  • 공식 문서가 만성적으로 부족하여 소스 코드가 곧 문서인 경우가 많다.4
  • 포크 3파전으로 인해 버전 간 파편화가 존재한다.

상용 코드인 ANSYS Fluent와 비교하면 “지원과 편의를 돈으로 사느냐, 자유를 시간으로 사느냐”의 구도로 요약된다.

8. 커뮤니티[편집]

문서화 부족을 메우는 것은 커뮤니티다. CFD Online 포럼의 OpenFOAM 게시판은 20년치 시행착오의 아카이브로, 웬만한 에러 메시지는 검색하면 2009년쯤 같은 고통을 겪은 선배가 나온다. 그 외 OpenFOAM Wiki, 연례 OpenFOAM Workshop, 각종 대학 강의 자료가 사실상의 교과서 역할을 한다.

9. 관련 문서[편집]

10. Footnotes[편집]

  1. 오픈소스답게 갈라섰다. 세 진영 모두 자신이 정통이라 생각하며, 사용자들은 그저 자기 튜토리얼이 돌아가는 버전을 정통으로 모신다.

  2. Foundation 버전 11부터는 모듈형 솔버(foamRun) 체계로 재편되었다. 물론 그 덕분에 버전 간 파편화는 한층 더 깊어졌다.

  3. paraFoam이라는 실행 명령이 있지만 실체는 ParaView를 띄워주는 래퍼 스크립트다.

  4. “Doxygen이 있잖아요”라는 답변은 OpenFOAM 커뮤니티식 유머로 통한다. 클래스 상속 계보를 다섯 단계쯤 거슬러 올라가 본 사람만 웃을 수 있다.