Docker-Compose로 OpenFOAM 개발 환경 구축

소개



Docker에서 OpenFOAM 개발 및 컴퓨팅 환경을 구축하는 방법을 기록해 둡니다.
OpenFOAM은 fundation 버전을 가정합니다.

이 내용은 github에 공개되어 있으므로 참고해 주셨으면합니다.
htps : // 기주 b. 코 m / 속눈썹 다 이스케 / 오펜 후 아 m도 c 케 rs rt

환경



docker와 docker-compose는 이미 설치되어 있다고 가정합니다.

docker 버전 19.03.4
docker-compose version 1.24.1

구성



디렉토리 구성은 다음과 같습니다.
project
├ docker-compose.yml
├ docker
|  └ openfoam
|    └ Dockerfile
└ of-develop(このディレクトリ内で開発する)

환경 구축



1. 디렉토리 생성



위의 구성을 참조하여 디렉토리와 파일을 만들거나 github에서 clone하십시오.
git clone https://github.com/matsubaraDaisuke/openfoam-docker-start.git
cd openfoam-docker-start

2.docker-compose.yml



이번에 사용하는 컨테이너는 openfoam뿐이므로 다음과 같이 씁니다. 파이썬 라이브러리 등을 결합하고 싶다면 필요에 따라 늘립니다.
volumes: 곳에서 openfoam의 $WM_PROJECT_USER_DIR에 마운트하고 있음을 알 수 있습니다.

docker-compose.yml
version: '3'

services:
    openfoam:
      container_name: openfoam
      build: ./docker/openfoam
      volumes:
      - ./of-develop:/home/openfoam

3.Dockerfile 만들기



OpenFOAM 용 Dockerfile을 만듭니다.
이번에는 version7을 이용합니다.
htps : // 후 b. 두 c r. 코 m/r/오펜후아아 m/오펜후아아 m7-파라ゔぃ에w56

다른 버전을 사용하려면 아래 링크에서 다른 컨테이너를 찾으십시오.
htps : // 후 b. 두 c r. 코 m/r/오펜후아아 m/

./openfoam/Dockerfile
FROM openfoam/openfoam7-paraview56

WORKDIR /home/openfoam

4. 동작 확인


docker-compose.yml가있는 디렉토리에서 다음 명령을 실행하면 빌드가 시작됩니다.

호스트
$ docker-compose up --build

문제없이 끝나면 다음 명령을 사용하여 openfoam 컨테이너에 들어갈 수 있습니다.

호스트
$ docker-compose run openfoam /bin/sh

컨테이너 내에서 pwd하면 /home/openfoam에 있음을 알 수 있습니다.
또한 적절한 파일을 만들면 touch a.foam 호스트 of-developa.foam가 출력되는지 확인할 수 있습니다.



OpenFOAM도 그대로 이용할 수 있는 상태로 되어 있는 것을 확인할 수 있습니다.

container
$ simpleFoam -help

Usage: simpleFoam [OPTIONS]
options:
  -case <dir>       specify alternate case directory, default is the cwd
  -fileHandler <handler>
                    override the fileHandler
  -hostRoots <(((host1 dir1) .. (hostN dirN))>
                    slave root directories (per host) for distributed running
  -libs <(lib1 .. libN)>
                    pre-load libraries
  -listFunctionObjects
                    List functionObjects
  -listFvOptions    List fvOptions
  -listRegisteredSwitches
                    List switches registered for run-time modification
  -listScalarBCs    List scalar field boundary conditions (fvPatchField<scalar>)
  -listSwitches     List switches declared in libraries but not set in
                    etc/controlDict
  -listTurbulenceModels
                    List turbulenceModels
  -listUnsetSwitches
                    List switches declared in libraries but not set in
                    etc/controlDict
  -listVectorBCs    List vector field boundary conditions (fvPatchField<vector>)
  -noFunctionObjects
                    do not execute functionObjects
  -parallel         run in parallel
  -postProcess      Execute functionObjects only
  -roots <(dir1 .. dirN)>
                    slave root directories for distributed running
  -srcDoc           display source code in browser
  -doc              display application documentation in browser
  -help             print the usage

Using: OpenFOAM-7 (see https://openfoam.org)
Build: *******

계산 입력 파일과 환경을 공유하려는 경우



(계산 자체도 상대에게 밀어붙이고 싶은 사람용)

먼저 계산 결과를 공유하는 예제를 작성해 보겠습니다.
컨테이너 내에서 튜토리얼의 pitzDaily를 복사합니다.

container
$ cp -r $WM_PROJECT_DIR/tutorials/incompressible/simpleFoam/pitzDaily .



of-develop 디렉토리 아래에 케이스 파일이 있습니다.
이 상태에서 docker-compose.yml 등으로 세트로 보내면 좋을 것입니다.
데이터 용량도 303KB로 경량입니다.

데이터를 수신 한 측은 위의 동작 확인 항목과 동일한 조작을 한 후 케이스 파일에서 계산을 실행하는 것이 좋습니다.

container
$ cd pitzDaily
$ blockMesh
$ simpleFoam

계산 결과는 of-develo/pitzDaily 디렉토리에 출력됩니다.

케이스 파일을 보내는 사람은 실행에 필요한 명령을 Makefile 등에 기술해 주면 더 친절하다고 생각됩니다.

이와 같이, 계산과 입력 파일과 계산 환경의 정보를 세트로 해 git등으로 관리하는 것으로, 기술적 부채가 되는 것을 피할 수가 있습니다.

솔버 개발을 원한다면



적절한 솔버를 복사합니다.

container
cp -r $WM_PROJECT_DIR/applications/solvers/basic/laplacianFoam/ .

철자 laplacianFoam2라는 해법을 작성해 보겠습니다.

파일 이름 변경

container
mv laplacianFoam.C  laplacianFoam2.C
laplacianFoam/Make/files 수정

laplacianFoam/Make/files
laplacianFoam2.C

EXE = $(FOAM_USER_APPBIN)/laplacianFoam2



마지막으로 컴파일합니다.

container (laplacianFoam 바로 아래)
$ wmake

성공하면 다음과 같이 실행할 수 있다고 생각합니다.

container
$ laplacianFoam2 -help

Usage: laplacianFoam2 [OPTIONS]
options:
  -case <dir>       specify alternate case directory, default is the cwd
  -fileHandler <handler>
                    override the fileHandler
  -hostRoots <(((host1 dir1) .. (hostN dirN))>
                    slave root directories (per host) for distributed running
  -libs <(lib1 .. libN)>
                    pre-load libraries
  -listFunctionObjects
                    List functionObjects
  -listFvOptions    List fvOptions
  -listRegisteredSwitches
                    List switches registered for run-time modification
  -listScalarBCs    List scalar field boundary conditions (fvPatchField<scalar>)
  -listSwitches     List switches declared in libraries but not set in
                    etc/controlDict
  -listUnsetSwitches
                    List switches declared in libraries but not set in
                    etc/controlDict
  -listVectorBCs    List vector field boundary conditions (fvPatchField<vector>)
  -noFunctionObjects
                    do not execute functionObjects
  -parallel         run in parallel
  -roots <(dir1 .. dirN)>
                    slave root directories for distributed running
  -srcDoc           display source code in browser
  -doc              display application documentation in browser
  -help             print the usage

Using: OpenFOAM-7 (see https://openfoam.org)
Build: ******

이상의 방법으로, 개조하는 솔버의 부분만이, 호스트측에서 보이는 상황에서 개발을 진행할 수가 있습니다. 버전의 차이에 의한 결과의 비교 등도 편하게 실시할 수 있을 것이다.
이번은 무리하게 compose로 할 필요는 없다고 생각합니다만, 개발 도중에 다양한 이미지를 조합하고 싶어진 경우를 상정해 이렇게 하고 있습니다.

좋은 웹페이지 즐겨찾기