본문 바로가기

2016

2016. 01. 28 / 하루생각 Blog


[OpenFOAM 시작하기] OpenFOAM이란

일본어 원문링크


  들어가기 

OpenFOAM을 시작해 보려는 분들을 위한 오픈폼 정보



  오픈폼에 대한 착각 


오픈폼은 통상 말하는 유체해석솔버와 다르며, 유한체적법을 중심으로하는 편미분방정식 솔버 개발용 클래스 라이브러리와, 그것을 이용해 작성된 몇가지의 솔버와 유틸리티 툴 묶음이다. 일반적인 상용프로그램의 경우 필요한 기능을 활성화시키기 위해 버튼을 누르기만 하면 되는것과 달리 필요한 기능을 가지는 솔버를 제공되는 표준솔버 중에서 선택하게 된다. 유저가 필요로 하는 기능을 가지는 솔버가 존재하지 않는 경우 직접 솔버를 개발할 필요가 있다. 어떤의미로는 상당한 지식과 시간, 경우에 따라서는 재정을 필요로 하게 된다.



  OpenFOAM이란? 

OpenFOAM(Open source Field Operation And Manipulation, 오픈폼)은 GNU General Public License (GPL)을 기반으로하는 오픈소스 전산유체해석(Computational Fluid Dynamics:CFD) 툴킷이다. 객체지향프로그래밍 언어 C++로 개발된 편미분방정식 솔버개발용 클래스 라이브러리이며 C++의 문법을 활용해 높은 가독성과 확장성을 제공한다. 예를들면 스칼라수송방정식을 계산하는 코드의 경우 다음과 같이 기술 가능하다.


Solve
(
    fem::ddt(T)
  + fvm::div(phi, T)
  - fvm::laplacian(DT, T)
);

이와 같이, 전산유체역학의 지식을 숙지했다면 코드를 보고 대략적인 의미를 파악할수 있으며 유체장(field)의 방정식을 푸는 솔버도 익숙한 표현으로 기술된다.


또한, 오픈폼은 위에서 말한 클래스 라이브러리를 이용해 작성된 표준 솔버, 유틸리티 툴이 다수 내장되어 있다. 표준솔버중에는 경우에 따라 바로 사용가능한 수준의 것도 포함되어 있다.


원래 영국의 Imperial College에서 개발된 것을 Nabla사가 "FOAM"이라는 이름으로 판매했던 것을 2004년 OpenCFD사가 "OpenFOAM"이라는 오픈소스로 공개하였다. 2011년 8월 OpenCFD사는 Silicon Graphics사(SGI)에 인수되었으나 OpenFOAM은 비영리단체 OpenFOAM Foundation에서 계속해 오픈소스로서 공개하도록 되었다. 2012년 9월 OpenCFD사는 또한번 ESI Group에 인수된다. "OpenFOAM"은 OpenCFD사에 상표등록되어 있다.


2015 년 3월, OpenFOAM의(더 정확히는 FOAM의) 창시자인 Henry Weller는 OpenCFD사에서 나와 CFD Direct라는 회사를 차려  OpenFOAM Foundation/OpenFOAM 프로젝트 멤버의 입장에서 OepnFOAM의 개발을 진행중인 듯 하다.


2016 년 현재, OpenFOAM의 권리보유자에 의한 "공식적" 인 배포는 OpenFOAM Foundation에 의한 OpenFOAM과, OpenCFD 사 (ESI)에 의한 OpenFOAM+ 가 있다. 이것에 대해 CFD Online에서 논의되고 있다. (OpenFOAM v3.0+ ??). OpenFOAM을 RHEL 이라고한다면 OpenFOAM+ 은 Fedora 와 같은 개념인가? (반대인가?)


  무엇을 할 수 있는가 


표준 솔버의 범위에서 아래와 같은 것이 가능하다.

  • 비압축성유체의 정상/비정상난류해석

  • 압축성유체의 정상/비정상열대류해석

  • 유체,고체열전도(CHT)해석

  • 다상유동해석(경계면추적법/다상유체모델)

이 외에도 일반적이진 않은 연소모델을 이용한 연소해석솔버, 아음속 및 초음속을 포함하는 압축성유체솔버 등이 있다. 입자계산도 가능은 하나 현재 일부 특정 솔버만 지원하는 상태이다. 또한, 상용솔버와 비교해 표준 솔버는 일반적으로 수렴성이 좋지 않으며 격자의 품질에 민감하게 반응해 계산을 수행하는 것 자체가 어려운 경우도 적지 않다.



  대상 유저 


오픈폼을 사용하려면 문제에 따라 기존의 솔버를 수정하거나 새로운 솔버 또는 라이브러리를 개발해야하는 경우가 적지않게 발생한다. 또한, 기본적으로 리눅스상에서 구동된다. 따라서, 유저는 리눅스를 다루는 것에 익숙하여야하며 C++를 이용한 프로그램을 개발할 수 있어야 하고 전산유체역학 이론과 해당 문제의 물리적 현상에 대해 알고 있어야 한다. 따라서, 주 대상 유저는 연구자나 학생, 수치계산에 충분한 시간을 들일 수 있는 엔지니어 등이 해당한다.



 오픈 소스? 


오픈폼은 오픈 소스 소프트웨어이며 무료로 사용가능한 유체해석 소프트웨어로서 주목을 받고 있으나 "무료" 자체는 오픈 소스 소프트웨어의 성질에 해당하지 않는다. 오픈소스소프트웨어란 소스코드가 공개되어 있어 소스코드를 재배포 가능한 소프트웨어를 일컫는다. 이러한 성질에 의해 예를들어 소프트웨어를 유료로 하여도 구입한 사람이 무료로 소스코드를 재배포할 가능성이 크다. 그래서 결과적으로 무료로 제공하는 경우가 많다.

따라서, 유료의 오픈소스 소프트웨어도 존재할 수 있다. 개인 단위의 구매가 불가능한 가격(예를 들어 1억원 상당)을 붇이게 되면 재배포를 실직적으로 막을수 있다. 특히, 오픈폼과 같이 높은 전문성을 요구하는 소프트웨어의 경우 이것이 현실적으로 가능하다. 하지만, 소스코드의 내용에 대해 비밀유지계약을 체결하면 확실한 재배포를 막을 수 있다.

오픈 소스 소프트웨어의 이용에 있어 아래와 같은 제약이 있다.

  • 보증 불가능하다.

  • 소스코드를 변수정한 소프트웨어를 제공할 경우, 제공처에 소스코드를 공개해야만 한다(GPL의 제한)

2번째의 제약은 오픈폼을 포함해 리눅스를 시작으로하는 다수의 오픈소스 소프트웨어에 채용되어있는 라이센스인 GNU General Public License (GPL)의 제약이다.(정확히는 "GPL의 소프트웨어를 수정해 제공할 경우, 그 소프트웨어를 GPL에 제공해야한다". 이러한 제약을 "저주"라고 빈정거리는 사람도 있다)

즉, 혼자서 사용하는데 제약은 없다. 하지만 무료이며 무보증이므로 사용에 있어 개인의 노력이 요구된다. 사용이 불편하며 지나치게 독특한 오픈소프트웨어도 적지않다(오픈폼도 예외되지 않는다). 이것은 "불편하면 상용소프트웨어를 쓰시오"라는 것이 아니라 "마음에 들지 않는 부분을 직접 개선해 프로젝트에 공헌해 주시오"의 의미이다. 사용자를 위한 매뉴얼이 존재하지 않는것도 많으며(이것 또한 오픈폼에도 해당) 웹상의 단편적인 정보나 소스코드로부터 필요한 정보를 찾아야 한다. 자신이 직접 문제를 해결하는것을 좋아하는 사람이 아니라면 오픈폼을 포함하는 오픈소스소프트웨어를 사용하는 것은 쉽지 않다.

사용에 있어 개인의 노력에 대해 비용(시간 등을 포함해)이 무료라고하는 금전적인 메리트를 훨씬 뛰어넘을 수 있다는 것을 고려해야한다. "값비싼" 상용 소프트웨어의 경우가 현실적인 선택지인 경우도 있으므로 오픈폼을 이용함에 있어 충분한 사전검토가 필요하다.



 어떻게 사용할 것인가 


먼저 오픈폼을 상용소프트웨어의 대체물로 생각한다면 오픈폼은 설정이 기본적으로 텍스트 베이스이며 솔버의 개발이나 수정을 필요로 하는 경우가 있으므로 일반적인 상용소프트웨어보다 훨씬 많은 수고를 들일 각오가 필요하다. 상용소프트웨어의 라이센스비와 오픈폼을 이용하며 늘어나는 인건비와 시간을 저울에 달고 비교해볼 필요가 있다. "무료"라는 것은 시간으로 돈을 사는것이다. 경우에 따라서는 돈으로 시간을 사는것이 올바른 선택일 수 있다.

상용 소프트웨어에서는 라이센스비용이 막대하게 증가하는 대규모병렬해석을 위해 오픈폼을 이용하는 경우가 있다. 현재 오픈폼을 이용하는 비용보다 대규모병렬해석용 상용라이센스의 경우가 압도적으로 고가이므로 대규모 병렬해석에 오픈폼을 사용하는 가치는 상당하다.

특정 제품의 설계 등 문제를 한정할 수 있는 경우 그것에 대한 솔버를 간이 인터페이스를 구성해 전용 설계툴로서 사용하는 경우가 있다. 물론 초기자본은 필요하나 한번 구성을 완료하면 유지비를 극소화할 수 있으므로 상용 소프트웨어를 이용하는 경우와 비교해 초기자금을 회수 할 수 있다.

현실적으로 상용소프트웨어를 구매할 수 없어 오픈폼을 이용하는 경우가 많으나 추천하지 않는다. 다른 선택지가 없는 경우라면 독학으로 어떻게든 하는 기개를 보여야 한다.

마지막으로 오픈폼은 오픈소스이며, 소스코드를 직접 볼수 있는 것이 큰 특징이다. 코드는 적절히 추상화되어 있어 나름대로 읽기쉽게 적혀 있으므로 전산유체역학을 학습하기 위한 좋은 교재로도 활용가능하다.



 무엇부터 시작해야하는가 


(위의 글들을 읽고도 오픔폼을 사용할 마음이 있다면) 먼저 윈도우나 맥에서 가상머신(VirtualBox 또는 VMWare 등)에 사전에 오픈폼이 설치된 리눅스(DEXCS for OpenFOAM 등)을 셋업하는것이 편리하다. 또는 우분투를 설치하고 직접 오픈폼을 인스톨하는것도 어렵지 않다.

오픈폼 환경이 준비되었다면 튜토리얼케이스를 실행해보는것이 좋다.



  오픈폼의 이용수단 


오픈폼을 사용하는 방법에는 아래와 같은 수단이 있다.

  • 오픈폼이 사전에 설치된 시스템을 도입

  • 리눅스머신에 오픈폼을 설치

  • 윈도우버전을 사용



  오픈폼이 사전에 설치된 시스템을 도입 


리눅스나 오픈폼을 셋업하는 허들이 높게 느껴지는 사람들을 위해 오픈폼이 사전에 설치된 리눅스 환경이 제공되고 있다.

  • DEXCS for OpenFOAM

  • CAELinux

  • GeekoCFD


- DEXCS for OpenFOAM (DEXCS)

원래 덴소의 사내교육용 시스템으로 개발된 것으로 ADVENTURE 를 사용하는 시스템이였으나, 오픈폼버전도 제공되고 있다. LiveDVD의 형태로 배포되며 하드디스크에 인스톨도 가능하다. LiveDVD의 형태로 배포되며 하드디스크에 인스톨도 가능하다. OpenFOAM 과 관련한 각종 툴도 동봉되어 있다.

- CAELinux (CAELinux)

OpenFOAM 뿐만 아니라 다양한 무료 CAE소프트웨어가 설치된 리눅스 환경. LiveDVD.

- GeekoCFD(GeekoCFD)

OpenFOAM 을 중심으로 하는 CFD관련 소프트웨어가 설치되어 있는 리눅스 환경. LiveDVD.



  리눅스 머신을 준비해 오픈폼을 설치 


오픈폼은 리눅스용으로 개발되어있으며 리눅스머신에 설치하는것이 직관적이다. 리눅스를 도입하는 방법에는 아래와 같다.

  • 리눅스 전용 머신을 준비

  • 윈도우/리눅스 듀얼부팅 환경을 구축

  • 윈도우 위에 가상머신을 설치

  • USB메모리 기동의 리눅스를 사용


- Linux 전용머신을 준비

가장 직관적인 방법. 강도높은 계산을 필요로 하는 사람에게 적합. 머신을 준비해 직접 리눅스를 설치하는 방법과 리눅스가 설치된 머신을 구입하는 방법이 있다.

- Windows/Linux 듀얼부팅 환경을 구축

Windows 로도 Linux로도 사용가능한 머신을 준비. 하드디스크를 2개로 나누어 한쪽에는 윈도우 한쪽에는 리눅스를 설치한다. 이미 사용중인 윈도우 머신의 하드디스크에서 파티션을 구성해 리눅스를 설치하는것도 가능하다, 실패할경우 윈도우 환경이 파손될 우려가 있다.

- Windows 위에 가상머신을 설치

VirtualBox 또는 VMWare 등의 가상머신을 사용. 가장 안전한 방법에 해당하나 가상머신은 머신에 부담을 주게 되며 성능이 떨어진다. 최신의 가상화지원기능을 가지는 멀티CPU라면 적절히 사용가능할 수도 있다. SSD가 있으면 좋다.

- USB 메모리 기동의 리눅스 사용

USB 메모리에 리눅스를 넣어 사용. USB메모리 부팅이 가능한 머신을 준비할 필요가 있다. 파일시스템을 FAT32로 포맷(최대 4GB).

- Distribution 배포판

Linux 에는 Red Hat, openSUSE, Ubuntu 등의 다양한 "Distrubution"(배포 패키지)가 있으며 기본적으로는 모두 사용가능하다. 하지만 OpenFOAM과 호환성이 좋지 않은 것도 존재한다. 최근에는 Ubuntu 용의 OpenFOAM 바이너리 패키지가 배포되고 있으므로 우분투를 사용하는게 무난하다. 옛날 버전의 경우 Ubuntu 이외에도 openSUSE、Red Hat Enterprise Linux、Fedora용의 바이너리가 존재한다.

- 문제점

Linux 인스톨은 배포판과 머신의 호환성이 좋지 않은 경우도 있다. 또한, 오픈폼을과의 호환성이 문제가 되기도 한다. 문제해결을 위해 리눅스 시스템의 지식이나 프로그래밍 지식을 필요로 한다. 리눅스를 사용한다는 것 자체가 상당히 어려울 수 있다.

 

  Docker를 사용 

Docker란, 컨테이너형 가상화 기술의 하나로, VirtualBox 와 같은 가상화에 비해 구동이 가볍다는 특징이 있다. OpenCFD사 버전의 OpenFOAM+ 가 Docker 컨테이너의 형태로 제공되고 있다.

  • OpenFOAM binary Installation (OpenCFD)
  • OpenFOAM Installation on Windows (OpenCFD)

Linux/Windows/Mac OS X 어디에서는 작동한다. 컨테이너의 내용물은 Linux이므로, 이론적으로는 기능을 모두 사용가능하지만 윈도우 버전은 포스트를 컨테이너에서 기동하는것이 불편하다. 컨테이너의 기동시간을 제외하면 솔버의 실행속도는 윈도우용으로 컴파일 된 버전의 속도가 조금 빠른 것 같다.
만약 그럴 의도가 있다면, Docker를 이용해 자신만의 OpenFOAM 환경을 구축하는것이 가능하다.  SSH/X11 을 이용하면 윈도우에서 도 컨테이너에서 포스트를 사용할 수 있다. 하지만 환경구축이 쉽지많은 않다.

 

  윈도우 버전을 사용 

본래 리눅스용으로 개발된 오픈폼이지만 윈도우버전도 존재한다.

  • OpenFOAM for Windows (Creative Fields)
  • simFlow engine (OpenFOAM for Windows)
  • OpenFOAM for Windows (CFD support)
  • Caelus

과거 버전들

  • OpenFOAM extensions
  • OpenFOAM for MS windows binary release
  • OpenFOAM 1.6 binary for win32
  • OpenFOAM 2.1.x for Win64
  • OpenFlow
  • blueCFD


- OpenFOAM for Windows (Creative Fields) (Creative Fields)

Version 2.3.0, 3.1 (extend) 의 Windows 바이너리 제공.

- simFlow engine (OpenFOAM for Windows) (simFlow)

Version 2.3.0, 2.3.1 의 Windows 바이너리 제공. 패치도 제공되고 있다.

- OpenFOAM for Windows (CFD support) (CFD support)

Version 2.3.x 의 Windows 바이너리 제공.

- Caelus (Caelus (Applied CCM))

OpenFOAM의 fork 인듯하다. Windows 바이너리 제공


과거 버전들

- OpenFOAM extensions (OpenFOAM extensions)

    1.4 의 Cygwin 판을 제공.

- OpenFOAM for MS windows binary release (OpenFOAM for MS windows binary release)

    Windows 네이티브인 OpenFOAM. 1.5 베이스. 몇몇 솔버가 이식되어 있다.

- OpenFOAM 1.6 binary for win32 (OpenFOAM 1.6 binary for win32)

    Windows 네이티브인  OpenFOAM 1.6 베이스. 병렬계산 불가능.

- OpenFOAM 1.7.0 for Win32 (OpenFOAM 1.7.0 for Win32)

    Windows 네이티브인 OpenFOAM 1.7. 병렬계산이 가능하다고 한다.

- OpenFOAM 2.1.x for Win64 (OpenFOAM 2.1.x for Win64)

    Windows 네이티브인 OpenFOAM 2.1.x. Open MPI 를 이용한 병렬계산 가능.

- OpenFlow (Symscape)

    Windows 용으로 빌드한 OpenFOAM (유료). 빌드순서와 패치 공개. (OpenFOAM 2.2.x on Windows).

 - blueCFD (blueCAPE)

    Windows 용으로 빌드한 OpenFOAM + α (유료). 싱글코어용은 무료.



  관련 프로젝트 

  • OpenFOAM extensions
  • PyFoam
  • swak4Foam
  • Discretizer
  • Helyx-OS
  • cfMesh

- OpenFOAM extensions (OpenFOAM extensions)

OpenFOAM 확장판. Git 또는 SVN 를 이용해 제공.

  • Git: OpenFOAM-1.6-ext,foam-extend-3.0,foam-extend-3.1
  • SVN: OpenFOAM-1.4-dev,OpenFOAM-1.4.1-dev,OpenFOAM-1.5-dev,OpenFOAM-1.6-ext(trunk/Core 중)

Files 에는 바이너리 패키지도 있다.

- PyFoam (PyFoam)

Python 으로 OpenFOAM 의 데이터 조작 가능. 계산중의 Residual변화를 gnuplot에 표시하는 커맨드 등이 있다.

- swak4Foam (swak4Foam)

복잡한 경계조건을 설정할 수 있는 툴이 포함되어 있다.

- Discretizer (Discretizer)

OpenFOAM 용 GUI 툴.

- Helyx-OS (Helyx-OS)

OpenFOAM 용 GUI 툴.

- cfMesh (cfMesh)

OpenFOAM 용 자동 격자생성기.


  표준솔버 이외의 솔버 

  • CFDEM
  • OpenQBMM
  • S-CLSVOF법 솔버
  • EDC 솔버
  • flameletFoam

- CFDEM (CFDEM project)

OpenFOAM 과 DEM 솔버 LIGGHTS 로 CFD-DEM 연성을 수행

- OpenQBMM (OpenQBMM)

OpenFOAM에 의한 Quadrature-Based Moments Methods (QBMM)을 이용한 다분산계혼합류 솔버

- S-CLSVOF법 솔버

S-CLSVOF법을 구현. interFoam의 설명도 참고하면 좋다

- EDC 솔버

EDC 솔버. 조금은 오래됬지만 참고할만 하다.

또, simFlow-engine의 레포지토리에 왠일인지 EDC 솔버가 포함되어있는 시기가 있다 (simFlows-engine-2.2).

- flameletFoam

Extend-bazarr/solvers/combustion/flameletFoam (OpenFOAM Wiki)

flamelet 솔버


  소스코드를 읽기위한 툴 


솔버를 사용만 하려면 필요가 없으나 소스코드를 이해하고싶다면 그 전용 툴을 사용하면 좋다. 클래스 정의로의 이동이 편리하다.

프로젝드를 작성해 프로젝트의 디렉토리를 오픈폼 디렉토리로 설정하면 된다(파일이 많으므로 프로젝트 작성에 시간이 걸린다).

코드를 직접 읽지 않고, Doxygen의 문서를 참고하는 방법도 있다. 개인적으로는 GNU GLOBAL을 좋아한다.



 오픈폼 버전에 대해 


오픈폼의 버전에 대해서는, 특별이 문제가 되지 않는다면 최신버전을 사용하는것이 좋으나 유저가 작성해 공개한 솔버나 라이브러리는 예전 버전에서 작성된게 많으므로 그런 것들을 사용하려면 대응하는 버전 (버전 2.x 계통인 경우가 많다)을 사용해야 한다. 최신버전을 위한 환경을 준비할 수 없거나, 이미 옛버전에서 구축된 솔버나 라이브러라가 있어서 어쩔 수 없이 옛 버전을 사용하는 경우가 빈번한데 크게 문제되지는 않는다(여유가 된다면 최신의 버그정보를 찾아봐두면 좋다).

OpenFOAM의 버전은, 예를들어 2.4.0 이라는것과 2.4.x 이라는 것이 있다. 2.4.0 이 공식배포판이며 2.4.x 는 버그수정버전에 해당한다(Whats the difference of OpenFOAM-dev and OpenFOAM-2.x.x?). 특별히 상관없다면 공식공개버전을 사용하면 된다. 또한 별도의 OpenFOAM-dev 라는것도 있으며, 이것은 개발자버전에 해당한다. 2.4.x 나 OpenFOAM-dev 는 GitHub 레포지토리에 있다.

OpenFOAM Foundation 버전의 openFOAM과 OpenCFD (ESI) 버전의 OpenFOAM+ 의 차이는, OpenFOAM v3.0+ ?? 에 있듯이, RHEL과 Fedora의 차이와 같은 개념 정도이다. 아마도 자기 마음대로 하고싶은 Weller씨와 커뮤니티의 요구사항을 받아들이고 싶은 ESI의 견해차이가 낳은 구분인 것 같다. 어느쪽이 어떻게 될지는 좀 더 지켜봐야 할 것 같다.


  관련문헌 

첫번째 논문이 OpenFOAM 유저로써 가장 중요한 논문이다.


  참고도서 

  • Suhas V. Patankar, Numerical Heat Transfrer and Fluid Flow, 1980
  • Joel H. Ferziger and M. Peric, Computational Methods for Fluid Dynamics, Springer, 2002
  • H. K. Versteeg and W. Malalasekera,n Introduction to Computational Fluid Dynamics, Pretense Hall, 2007

첫 번째 파탄카의 책은 수치유체역학을 공부하는데 기본중 기본이다. 하지만 표현이 오픈폼과 맞지 않다. 퍼지거의 책은 표현이 오픈폼에 가까워 오픈폼을 이해하는데 참고하기 좋다. Versteeg의 책은 난류모델이나 이산화스킴에 대해 이해하기 쉽게 설명되어 있다.


  관련링크 


프로필사진

하루생각

OneDay by Eric

에릭의 티스토리 http://onedayof.tistory.com


[원문출처 : http://onedayof.tistory.com/entry/OpenFOAM-%EA%B0%9C%EB%A1%A0]

Creative Commons License
크리에이티브 커먼즈 라이선스
맨 위로
맨 위로