FrontISTRをWindows 10のDockerで使ってみた
FrontISTRというCAEソフトがあります。このソフトのマニュアルを読むと、基本的にLinuxにインストールして使用するソフトなのですが、ふと公式サイトを見たところDockerリポジトリーが公開されていたので、Dockerリポジトリーを使ってWindows上にインストールしてみました。
Windowsであればバイナリファイルが配布されていますし、WSL2(Windows Subsystem for Linux)のUbuntuを使えば公式マニュアル通りにインストールできると思いますが、今回はDockerの練習もかねて、Dockerを使用しました。
前提のシステム要件
まず、Windows 10にWSL2をインストールします。手順はこちらのページにまとめました。
続いて、Docker Desktopをインストールします。この手順は、こちらのページにまとめています。
FrontISTRのDockerリポジトリーをダウンロード
FrontISTRのダウンロードページに行くと、各バージョンのDockerイメージを落とせるよう、docker pull
コマンドが掲載されています。
今回はv5.1をインストールします。v5.1の「Docker」のリンクをクリックし、docker pull
コマンドをコピーします。
PowerShell(もしくはコマンドプロンプト)を起動して、コピーしたコマンドを実行します。
PS C:\> docker pull registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1
v5.1: Pulling from frontistr-commons/frontistr/fistr1
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
380ba44ad6e5: Pull complete
2931644c996b: Pull complete
Digest: sha256:a47784568fb143dee548c54ceb9c3204f33031257af5120315f0525f8caeb6cb
Status: Downloaded newer image for registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1
registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1
pull
できたら、一度イメージの一覧を表示してみます。ダウンロードできていることが分かります。
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
中略
registry.gitlab.com/frontistr-commons/frontistr/fistr1 v5.1 3ac2f6883392 4 weeks ago 191MB
Dockerをインタラクティブに動かしてチュートリアルをしてみる
まず、ダウンロードしたリポジトリーを使って、インタラクティブに使えるコンテナを作ってFrontISTRを動かしてみたいと思います。
Dockerコンテナの作成
ダウンロードしたリポジトリーを使って、コンテナを作ります。今回実行したコマンドはdocker create -i --name fistr51 -v c:\:/mnt/win-c registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1
です。
-i
はインタラクティブ動作をさせるためのものです。--name
は分かりやすい名前をつけます。今回はfistr51
にしました。-v
で、ホスト側のフォルダをコンテナ側にマウントします。今回は、WindowsのCドライブを、Linux側の/mnt/win-c
にマウントしました。
最後の引数は、使用するリポジトリーです。リポジトリー名:タグを指定しています。
docker create
すると、Docker Desktopのダッシュボードにも、作成したコンテナが表示されます。
PS C:\> docker create -i --name fistr51 -v c:\:/mnt/win-c registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1
1f7026581f6cd31546eeb556c6fdf056949d4c0d0b6bd4f4cd08d13d232b8e35
続いて、作成したコンテナを実行します。docker start fistr51
というように、先ほど指定したコンテナ名でスタートします。このコマンドは、Docker DesktopのダッシュボードからSTARTボタンを押しても同じです。ちなみに、上記のdocker create
の代わりに、docker run
を使用すると、コンテナ作成後に自動的にコンテナが動き出しますので、docker start
は不要です。
PS C:\> docker start fistr51
fistr51
続いて、docker exec
コマンドで起動したコンテナのシェルを開きます。末尾のパスは、使用するシェルへのパスを指定します。実行すると、コンテナ側のプロンプトが表示されます。
PS C:\> docker exec -i -t fistr51 /bin/bash
root@1f7026581f6c:/#
試しにfistr1
を実行すると、バージョン情報が表示されます。
root@1f7026581f6c:/# fistr1
##################################################################
# FrontISTR #
##################################################################
---
version: 5.1.0
git_hash: f3fe347a8fd83cd45983476521d43061c8528da0
以下略
これでコンテナの用意ができました。
チュートリアルを実行
公式のチュートリアルをしてみます。前述のダウンロードページから、v5.1のソースコードを落としてきて、Cドライブの直下に解凍します。
bashで、チュートリアルのフォルダに移動します。
root@1f7026581f6c:/# cd /mnt/win-c/FrontISTR-v5.1/tutorial/01_elastic_hinge/
root@1f7026581f6c:/mnt/win-c/FrontISTR-v5.1/tutorial/01_elastic_hinge#
ここでfistr1
を実行すると、チュートリアルの計算が始まります。
root@1f7026581f6c:/mnt/win-c/FrontISTR-v5.1/tutorial/01_elastic_hinge# fistr1
##################################################################
# FrontISTR #
##################################################################
---
version: 5.1.0
git_hash: f3fe347a8fd83cd45983476521d43061c8528da0
build:
date: 2020-06-30T13:56:53Z
MPI: enabled
OpenMP: enabled
option: "-p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml "
HECMW_METIS_VER: 5
execute:
date: 2020-08-02T15:11:56+0000
processes: 1
threads: 8
cores: 8
host:
0: 1f7026581f6c
---
...
Step control not defined! Using default step=1
fstr_setup: OK
Start visualize PSF 1 at timestep 0
loading step= 1
sub_step= 1, current_time= 0.0000E+00, time_inc= 0.1000E+01
loading_factor= 0.0000000 1.0000000
### 3x3 BLOCK CG, SSOR, 1
1 1.903375E+00
2 1.974378E+00
3 2.534627E+00
4 3.004045E+00
中略
2965 1.188443E-08
2966 1.143242E-08
2967 1.077974E-08
2968 1.003847E-08
2969 9.378912E-09
### Relative residual = 9.39860E-09
### summary of linear solver
2969 iterations 9.398601E-09
set-up time : 1.830644E-01
solver time : 8.181565E+01
solver/comm time : 6.386476E-01
solver/matvec : 2.922772E+01
solver/precond : 4.454701E+01
solver/1 iter : 2.755664E-02
work ratio (%) : 9.921941E+01
Start visualize PSF 1 at timestep 1
### FSTR_SOLVE_NLGEOM FINISHED!
====================================
TOTAL TIME (sec) : 86.59
pre (sec) : 0.79
solve (sec) : 85.80
====================================
FrontISTR Completed !!
どうやら、ちゃんと動いているっぽそうです。
exit
を実行すると、コンテナ中のシェルから抜け出せます。
root@1f7026581f6c:/mnt/win-c/FrontISTR-v5.1/tutorial/01_elastic_hinge# exit
exit
PS C:\>
また、docker stop fistr51
で、実行していたコンテナを停止できます。停止は少し時間がかかるようです。このコマンドは、Docker DesktopのダッシュボードからSTOPを押しても実行できます。
PS C:\> docker stop fistr51
fistr51
PS C:\>
単発でコンテナを作成してチュートリアルをしてみる
別の方法でもチュートリアルの計算をやってみたいと思います。
前述の方法では、インタラクティブシェルが動くコンテナを作成しました。対して、単発でコンテナを作成して、FrontISTRを実行して、計算が終わったらコンテナを削除する、という方法でも使用できますので、それをやってみたいと思います。といっても、打つコマンドは実質一つだけです。
上と同じように、FrontISTRの公式ページからv5.1のソースコードをダウンロードし、Cドライブ直下に解凍します。
PowerShellを開き、cdコマンドでチュートリアルのフォルダに移動します。
PS C:\> cd C:\FrontISTR-v5.1\tutorial\01_elastic_hinge
次に、Dockerコンテナを作成して実行するコマンドを実行します。コマンドはdocker run --name fistr51a --rm -v ${pwd}:/mnt/work -w /mnt/work registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1 fistr1
です。
docker run
は、前述の実行例で言う、docker create
とdocker start
を組み合わせたものです。--name
は前述の例と同様、コンテナの名前を任意で指定します。この引数は必須ではないですが、コンテナ名が分かっていると計算を中断させやすいので、明示的に指定しておきます。--rm
は、実行後にコンテナを消去するよう設定しています。-v
では、Windows側のカレントディレクトリ(この例では01_elastic_hinge
)を、Linux側の/mnt/work
にマウントするように設定しています。-w
は、Linux側のカレントディレクトリを指定しています。-v
でマウントしたディレクトリ、つまりWindows側のカレントディレクトリを指定しています。
続く引数は、起動するDockerリポジトリーのリポジトリー名:タグを指定します。
最後の引数は、Dockerコンテナで実行するコマンドを指定します。ここでは単にfistr1
を実行します。
ちなみに、-v
で指定している${pwd}
は、PowerShellでカレントディレクトリのパスを表す変数です。なので、コマンドプロンプトで動かしたい場合は、代替の記載をする必要があります。
PS C:\FrontISTR-v5.1\tutorial\01_elastic_hinge> docker run --name fistr51a --rm -v ${pwd}:/mnt/work -w /mnt/work registry.gitlab.com/frontistr-commons/frontistr/fistr1:v5.1 fistr1
実行結果はこちらです。
##################################################################
# FrontISTR #
##################################################################
---
version: 5.1.0
git_hash: f3fe347a8fd83cd45983476521d43061c8528da0
build:
date: 2020-06-30T13:56:53Z
MPI: enabled
OpenMP: enabled
option: "-p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml "
HECMW_METIS_VER: 5
execute:
date: 2020-08-03T10:30:14+0000
processes: 1
threads: 8
cores: 8
host:
0: 0362a984dc2a
---
...
Step control not defined! Using default step=1
fstr_setup: OK
Start visualize PSF 1 at timestep 0
loading step= 1
sub_step= 1, current_time= 0.0000E+00, time_inc= 0.1000E+01
loading_factor= 0.0000000 1.0000000
### 3x3 BLOCK CG, SSOR, 1
1 1.903375E+00
2 1.974378E+00
3 2.534627E+00
4 3.004045E+00
中略
2965 1.187363E-08
2966 1.142312E-08
2967 1.078976E-08
2968 1.004497E-08
2969 9.373681E-09
### Relative residual = 9.38945E-09
### summary of linear solver
2969 iterations 9.389448E-09
set-up time : 1.834822E-01
solver time : 7.461448E+01
solver/comm time : 6.376212E-01
solver/matvec : 2.920223E+01
solver/precond : 3.728695E+01
solver/1 iter : 2.513118E-02
work ratio (%) : 9.914545E+01
Start visualize PSF 1 at timestep 1
### FSTR_SOLVE_NLGEOM FINISHED!
====================================
TOTAL TIME (sec) : 79.46
pre (sec) : 0.76
solve (sec) : 78.69
====================================
FrontISTR Completed !!
PS C:\FrontISTR-v5.1\tutorial\01_elastic_hinge>
この方法でも、ちゃんと動いてそうです。こちらの方法の場合、計算が終了したら自動的にコンテナも消去されます。
ちなみに、この方法で実行しているときにCtrl+Cでコマンドを中断すると、プロンプトが戻ってきて一見すると計算を中断できたように見えます。ですが、裏ではDockerコンテナが生きていて、計算が続行しています。
ですので、中断した際は、合わせてコンテナを停止するコマンドも実行します。コンテナの停止は、docker stop fistr51a
でできます。停止次第、自動的にコンテナが削除されます。
PS C:\FrontISTR-v5.1\tutorial\01_elastic_hinge> docker stop fistr51a
fistr51a
コンテナの停止は、Docker Desktopのダッシュボードからも行えます。そちらの方が分かりやすいかもしれません。
ディスカッション
コメント一覧
まだ、コメントがありません