はじめに
クラウドの普及に伴い「いつでも好きなときに好きなだけ計算リソースを確保して、構造解析や流体解析を実行する」といったことが可能になりつつあります。ただ、商用ソフトウェアを使用している場合、同時実行する最大コア数に応じてライセンスが必要となるケースがあり、クラウドの柔軟性を活かしきれないことがあります(注1)
FrontISTR は、 東京大学奥田研究室 にて開発された、オープンソースの構造解析ソルバーです。オープンソースであり、ライセンスを気にせず使えるため、クラウドの柔軟性をフルに活かすことができます。この記事では FrontISTR Ver.4.6 を、AWSの仮想サーバ(Amazon EC2)にインストールして、チュートリアルの計算を実行してみます。実行結果の可視化には、 REVOCAP PrePost の 1.7.01 を使用します。インストールが簡単な構成をとりたいため、FrontISTRはUbuntu, REVOCAP PrePostはWindows Serverにインストールします。これらのサーバ間のファイルのやりとりにはAmazon S3を使用します
(注1)計算の実行時間に応じた従量課金のライセンスがあるソフトウェアもあります。詳しくはご利用のソフトウェアのライセンス体系をご確認ください
前準備
FrontISTRを使うには、ユーザーIDを取得する必要があります。こちら のサイトにアクセスし、必要事項を入力してユーザーIDを取得します。ID取得後、 トップ画面 右側カラムの「FrontISTRリザーバ」をクリックします。ユーザ名とパスワードを入力し、「最新版FrontISTRおよびREVOCAP_PrePost」の欄の「こちら」をクリックすると、FrontISTRのソースコードやドキュメントをダウンロードできるようになります
今回使用するインストーラは、以下の3つになります
(1) REVOCAP_Refiner-1.1.04.tar.gz
「REVOCAP_Refiner-1.1.04をアップロード (160726)」の「ソースコード、ドキュメントを含む全体のアーカイブファイル」をクリックして取得
(2) FrontISTR_V46.tar.gz
「FrontISTR Ver.4.6(170914)」の「ソースコード、ドキュメントを含む全体のアーカイブファイル」をクリックして取得
(3) REVOCAP_PrePost-1.7.01.msi
「REVOCAP_PrePost 1.7.01(160128)」の「REVOCAP_PrePostインストールキット」をクリックして取得
EC2の構築
VPC内にUbuntuとWindowsのEC2インスタンスを1台ずつ起動します。以下の環境で、インストール、チュートリアルの実行、計算結果の可視化ができることを確認できました。
Ubuntu
項目 | 設定値 |
---|---|
Region | us-east-1 |
AMI | Ubuntu Server 16.04 LTS (HVM), SSD Volume Type (ami-cd0f5cb6) |
Instance Type | t2.micro |
VPC | Default |
Subnet | Default |
Storage(EBS) | 8GiB |
Windows
項目 | 設定値 |
---|---|
Region | us-east-1 |
AMI | Microsoft Windows Server 2016 Base (ami-27a58d5c) |
Instance Type | m4.large |
VPC | Default |
Subnet | Default |
Storage(EBS) | 30GiB |
UbuntuインスタンスにはSSH接続, WindowsインスタンスにはRDP接続できるようにSecurity Groupを設定しておきます。
アプリケーションのインストール
FrontISTRのインストール
FrontISTRのインストール手順は、FrontISTRのダウンロードサイトからアクセスできます。今回はUbuntuにインストールするので「FrontISTR v4.5のインストール虎の巻(Ubuntu 16.04 LTS編)(161129)」を参考にします。(上記は旧バージョンである Ver.4.5 のインストール手順ですが、Ver.4.6 でも手順はほぼ同じです)。こちらのQiitaの記事 も参考になります。
まずはアップデートをします
$ sudo apt -y update
次に、後ほどS3へのアクセスで使用するため、AWS CLIをインストールしておきます
$ sudo apt -y install awscli
$ aws --version
aws-cli/1.11.13 Python/3.5.2 Linux/4.4.0-1022-aws botocore/1.4.70
先ほど取得したインストーラのうち、以下の2つのファイルをEC2のubuntuユーザのホームディレクトリ(/home/ubuntu)に配置します。
- REVOCAP_Refiner-1.1.04.tar.gz
- FrontISTR_V46.tar.gz
必要なパッケージのインストールを行います
$ sudo apt -y install build-essential
$ sudo apt -y install libtrilinos-ml-dev
$ sudo apt -y install libtrilinos-aztecoo-dev libtrilinos-zoltan-dev
$ sudo apt -y install libopenblas-dev libmumps-dev libmetis-dev
REVOCAP_Refiner-1.1.04.tar.gz を解凍し、解凍された中身をmakeします
$ tar xvf REVOCAP_Refiner-1.1.04.tar.gz
$ cd REVOCAP_Refiner-1.1.04
$ make
FrontISTR_V46.tar.gz を解凍します
$ cd ..
$ tar xvf FrontISTR_V46.tar.gz
Makefile.am を編集します。エディタで編集してもよいですが、sedコマンドでやるなら以下のようになります
$ sed -i -e "/^\\t@cd hecmw2 && \$(MAKE).*/s/^/# /g" Makefile.am
$ sed -i -e "/^\\t@cd fistr2 && \$(MAKE).*/s/^/# /g" Makefile.am
Makefile.conf.org をコピーし、Makefile.conf というファイル名で保存します
$ cp Makefile.conf.org Makefile.conf
Makefile.conf を編集します。エディタで編集してもよいですが、sedコマンドでやるなら以下のようになります
$ sed -i -e "s/^MPIDIR.*/MPIDIR = \/usr\/lib\/openmpi/g" Makefile.conf
$ sed -i -e "s/^MPIBINDIR.*/MPIBINDIR = \/usr\/bin/g" Makefile.conf
$ sed -i -e "s/^MPILIBDIR.*/MPILIBDIR = \$(MPIDIR)\/lib/g" Makefile.conf
$ sed -i -e "s/^MPIINCDIR.*/MPIINCDIR = \$(MPIDIR)\/include/g" Makefile.conf
$ sed -i -e "s/^MPILIBS.*/MPILIBS = -lmpi -lmpi_mpifh/g" Makefile.conf
$ sed -i -e "s/^METISDIR.*/METISDIR = \/usr\/lib\/x86_64-linux-gnu/g" Makefile.conf
$ sed -i -e "s/^METISINCDIR.*/METISINCDIR = \/usr\/include/g" Makefile.conf
$ sed -i -e "s/^HECMW_METIS_VER.*/HECMW_METIS_VER= 5/g" Makefile.conf
$ sed -i -e "s/^REFINERDIR.*/REFINERDIR = \$(HOME)\/REVOCAP_Refiner-1.1.04/g" Makefile.conf
$ sed -i -e "s/^REFINERLIBDIR.*/REFINERLIBDIR = \$(REFINERDIR)\/lib\/x86_64-linux/g" Makefile.conf
$ sed -i -e "s/^MUMPSDIR.*/MUMPSDIR = \/usr/g" Makefile.conf
$ sed -i -e "s/^MLDIR.*/MLDIR = \/usr/g" Makefile.conf
$ sed -i -e "s/^MLINCDIR.*/MLINCDIR = \$(MLDIR)\/include\/trilinos/g" Makefile.conf
$ sed -i -e "s/^MLLIBDIR.*/MLLIBDIR = \$(MLDIR)\/lib\/x86_64-linux-gnu/g" Makefile.conf
$ sed -i -e "/^MLLIBDIR.*/a MLLIBS = -ltrilinos_ml -ltrilinos_zoltan" Makefile.conf
$ sed -i -e "s/^CC.*/CC = mpicc -fopenmp/g" Makefile.conf
$ sed -i -e "s/^LDFLAGS.*/LDFLAGS = -lstdc++ -lm/g" Makefile.conf
$ sed -i -e "s/^CPP .*/CPP = mpic++ -fopenmp/g" Makefile.conf
$ sed -i -e "s/^F90 .*/F90 = mpif90 -fopenmp/g" Makefile.conf
$ sed -i -e "s/^F90LDFLAGS.*/F90LDFLAGS = -lstdc++ -lopenblas/g" Makefile.conf
$ sed -i -e "s/^F90FPP.*/F90FPP = -cpp/g" Makefile.conf
$ sed -i -e "s/^F90LINKER.*/F90LINKER = mpif90 -fopenmp/g" Makefile.conf
最後に以下の3つのコマンドを実行して、FrontISTRのコンパイルは完了です
$ ./setup.sh -p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml
$ make
$ make install
$HOME/FrontISTR/bin ディレクトリ内に、fistr1 などの実行ファイルが作られていれば成功です
$ ls $HOME/FrontISTR/bin
fistr1 hec2rcap hecmw_part1 hecmw_vis1 neu2fstr rconv rmerge
このディレクトリにはパスを通しておくとよいです
$ export PATH=${PATH}:/home/ubuntu/FrontISTR/bin
$ echo "export PATH=${PATH}:/home/ubuntu/FrontISTR/bin" >> /home/ubuntu/.bashrc
REVOCAP PrePost
WindowsのEC2インスタンスにRDP接続し、まずは AWS CLI をインストールしておきます。インストール出来たら、コマンドプロンプトで、正常にインストールされているか確認します
C:\Users\Administrator>aws --version
aws-cli/1.11.158 Python/2.7.9 Windows/2012Server botocore/1.7.16
次に、REVOCAP PrePostのインストーラ(REVOCAP_PrePost-1.7.01.msi)をデスクトップなどに配置します ダブルクリックするとセットアップウィザードが開くので、指示に従ってインストールします
デスクトップにショートカットのアイコンがつくられるので、ダブルクリックして、 REVOCAP PrePost が起動するか確かめます
チュートリアルの実行
UbuntuのEC2インスタンスに戻り、FrontISTRのチュートリアルを実行してみます。ここでは、1つめのチュートリアルであるElastic hinge(弾性ヒンジ)を実行します
$ cd $HOME/tutorial/01_elastic_hinge/
$ fistr1
上記のコマンドを実行すると、解析が始まり途中経過が標準出力されるので、しばらく待ちます。解析が終わったら、ディレクトリの中身をS3にコピーしておきます
$ aws s3 cp ./ s3://[MyBucketName]/FrontISTR_V46/tutorial/01_elastic_hinge/ --recursive
可視化
コマンドプロンプトで以下のコマンドを実行し、S3から解析に使用したファイルをダウンロードします
C:\Users\Administrator>aws s3 cp s3://[MyBucketName]/FrontISTR_V46/tutorial/01_elastic_hinge/ C:\Users\Administrator\Downloads\ --recursive
以下のようにREVOCAP PrePostを操作すると、計算結果を可視化できます このチュートリアルでは、上図に示されているように、穴の開いたヒンジを解析対象としています。解析の結果、ヒンジに力を加えたときの応力分布(どこにどれくらいの力がかかっているのか)や変形の状態が得られました。この例では、応力の一指標であるミーゼス応力の分布を色で示し、ヒンジの変形の状態をグラフィック上で表示しています。
終わりに
この記事では、オープンソースの構造解析ソルバーであるForntISTRをAmazon EC2にて動作させ、解析結果をREVOCAP ProPostで可視化しました。 FrontISTRは並列計算にも対応可能とのことなので、クラスタリングにも挑戦してみたいところです。