お知らせ
この記事は古いFrontISTRの構築方法について説明しています。
より、新しい方法を参照してください。
ここでは、FrontISTRをUbuntu 16.04 LTSで手軽に構築する方法を紹介します。
注意
この文章は公式のものではありません。また、内容の正確性について保証するものではありません。また、筆者は一切の責任を負いません。AS ISでご覧ください。
詳しいインストール方法は、FrontISTRのインストールガイドおよびマニュアルをご覧ください。
FrontISTRマニュアル(日本語版)
FrontISTR manual(English)
Windows版は オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v4.6のインストール (Windows10 - MinGW-w64)
CentOS 7.3版は オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v4.6のインストール (CentOS 7.3)
を参照してください。
FrontISTRを構築するには、様々なライブラリが必要になりますが、バイナリパッケージを利用することで手間を省きます。
ここに書かれている方法は、Ubuntu 16.04 LTSに対応します。
ライブラリをソースから構築する場合は、【参考】ライブラリを自力で構築する方法を参考にしてください。
はじめに
FrontISTRは東京大学 奥田研究室で開発されている、本格的な構造解析プログラムです。FrontISTR研究会から、研究会の案内や資料、ソフトウェアが入手できます。
スパコンからWindowsパソコンまで動かすことが出来る点が特徴の一つです。
準備
予めubuntu 16.04 LTSをインストールし、OSが動作可能な状態にしてください。
ダウンロード
以下のソフトを入手してください。
ソフトウェア | 入手先 |
---|---|
FrontISTR_V46.tar.gz | http://www.multi.k.u-tokyo.ac.jp/FrontISTR |
REVOCAP_Refiner-1.1.04 | http://www.multi.k.u-tokyo.ac.jp/FrontISTR |
必要なライブラリの導入
バイナリパッケージの導入
上記以外のソフトはバイナリパッケージから導入します。
$ sudo apt install build-essential gfortran
$ sudo apt install openmpi-bin libopenmpi-dev
$ sudo apt install libtrilinos-ml-dev
$ sudo apt install libtrilinos-aztecoo-dev libtrilinos-zoltan-dev
$ sudo apt install libopenblas-dev libmumps-dev libmetis-dev
REVOCAP_Refinerの構築
REVOCAP_Refinerをコンパイルします。
$ tar xvf REVOCAP_Refiner-1.1.04.tar.gz
$ cd REVOCAP_Refiner-1.1.04
$ make
FrontISTRの構築
必要なライブラリの導入が済んだらFrontISTRを構築します。
FrontISTRで有効にする機能は
- hecmw_part1領域分割ツールなどのツール群生成
- REVOCAP_Refiner (メッシュの細分化機能)
- MPI (PCクラスタ等の並列実行環境)
- OpenMP (マルチコアCPUを利用)
- METIS (メッシュの領域分割のために必要)
- MUMPS (直接法ソルバー)
- LAPACK (CG法やGMRES法を用いた前処理適用後の条件数推定機能を利用)
- Trilinos-ML (代数マルチグリッド法に基づく前処理)
です。これらの機能を有効にしたバイナリを作成します。
$ tar xvf FrontISTR_V46.tar.gz
$ cd FrontISTR_4.6
さらにMakefile.am
を編集し構築する必要のない部分を除外します。
$ vi Makefile.am
PREFIX = @prefix@
BINDIR = @bindir@
LIBDIR = @libdir@
INCLUDEDIR = @includedir@
MAKE = @make@
AR = @ar@
CP = @cp@
RM = @rm@
MV = @mv@
RANLIB = @ranlib@
MKDIR = @mkdir@
all:
@cd hecmw1 && $(MAKE)
@cd fistr1 && $(MAKE)
# @cd hecmw2 && $(MAKE)
# @cd fistr2 && $(MAKE)
@cd fistr && $(MAKE)
clean:
@cd hecmw1 && $(MAKE) clean
@cd fistr1 && $(MAKE) clean
# @cd hecmw2 && $(MAKE) clean
# @cd fistr2 && $(MAKE) clean
@cd fistr && $(MAKE) clean
distclean:
@cd hecmw1 && $(MAKE) distclean
@cd fistr1 && $(MAKE) distclean
# @cd hecmw2 && $(MAKE) distclean
# @cd fistr2 && $(MAKE) distclean
@cd fistr && $(MAKE) distclean
- $(RM) ./bin/*
install:
if [ ! -d $(PREFIX) ]; then \
$(MKDIR) $(PREFIX); \
fi
if [ ! -d $(BINDIR) ]; then \
$(MKDIR) $(BINDIR); \
fi
@cd hecmw1 && $(MAKE) install
@cd fistr1 && $(MAKE) install
# @cd hecmw2 && $(MAKE) install
# @cd fistr2 && $(MAKE) install
@cd fistr && $(MAKE) install
hecmw2
およびfistr2
は構築しませんので、コメントアウトしてください。
Makefile.confの編集
$ cp Makefile.conf.org Makefile.conf
$ vi Makefile.conf
以下の内容でMakefile.conf
を編集してください。
##################################################
# #
# Setup Configulation File for FrontISTR #
# #
##################################################
# MPI
MPIDIR = /usr/lib/openmpi
MPIBINDIR = /usr/bin
MPILIBDIR = $(MPIDIR)/lib
MPIINCDIR = $(MPIDIR)/include
MPILIBS = -lmpi -lmpi_mpifh
# for install option only
PREFIX = $(HOME)/FrontISTR
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include
# Metis
METISDIR = /usr/lib/x86_64-linux-gnu
METISLIBDIR = $(METISDIR)
METISINCDIR = /usr/include
HECMW_METIS_VER= 5
# ParMetis
PARMETISDIR = $(HOME)/ParMetis-3.1
PARMETISLIBDIR = $(PARMETISDIR)
PARMETISINCDIR = $(PARMETISDIR)/ParMETISLib
# Refiner
REFINERDIR = $(HOME)/Software/REVOCAP_Refiner-1.1.04
REFINERINCDIR = $(REFINERDIR)/Refiner
REFINERLIBDIR = $(REFINERDIR)/lib/x86_64-linux
# Coupler
REVOCAPDIR = $(HOME)/REVOCAP_Coupler
REVOCAPINCDIR = $(REVOCAPDIR)/librcap
REVOCAPLIBDIR = $(REVOCAPDIR)/librcap
# MUMPS
MUMPSDIR = /usr
MUMPSINCDIR = $(MUMPSDIR)/include
MUMPSLIBDIR = $(MUMPSDIR)/lib
# MKL PARDISO
MKLDIR = $(HOME)/
MKLINCDIR = $(MKLDIR)/include
MKLLIBDIR = $(MKLDIR)/lib
# ML
MLDIR = /usr
MLINCDIR = $(MLDIR)/include/trilinos
MLLIBDIR = $(MLDIR)/lib/x86_64-linux-gnu
MLLIBS = -ltrilinos_ml -ltrilinos_zoltan
# C compiler settings
CC = mpicc -fopenmp
CFLAGS =
LDFLAGS = -lstdc++ -lm
OPTFLAGS = -O3
# C++ compiler settings
CPP = mpic++ -fopenmp
CPPFLAGS =
CPPLDFLAGS =
CPPOPTFLAGS = -O3
# Fortran compiler settings
F90 = mpif90 -fopenmp
F90FLAGS =
F90LDFLAGS = -lstdc++ -lopenblas
F90OPTFLAGS = -O2
F90FPP = -cpp
F90LINKER = mpif90 -fopenmp
MAKE = make
AR = ar ruv
MV = mv -f
CP = cp -f
RM = rm -f
MKDIR = mkdir -p
この手順で用いるMETISはVersion5.1.0です。
HECMW_METIS_VER = 5
を指定してください。
gfortranのプリプロセッサ指定は
-cpp
です。F90FPP = -cpp
を指定してください。
編集が出来たらsetup.sh
を実行してください。
$ ./setup.sh -p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml
setup.sh
の実行が済んだらコンパイルしてバイナリを作成します。
$ make
$ make install
構築したバイナリをインストールをすると、$(HOME)/FrontISTR/bin
以下に
$ ls $HOME/FrontISTR/bin
fistr1 hec2rcap hecmw_part1 hecmw_vis1 neu2fstr rconv rmerge
などのバイナリがコピーされ実行できる状態になります。
通常はここまでの手順で十分です。
【参考】ライブラリを自力で構築する方法
FrontISTRを構築するのに必要なライブラリは
- OpenMPI (MPI)
- OpenBLAS (LAPACK)
- Metis
- MUMPS
- Scalapack
- Trilinos ML
です。 Ubuntu-16.04上で構築する例を示します。
ただし、MPIの構築方法については省きます。OS付属のMPIを利用することをおすすめします。
パッケージのインストール
ubuntuのパッケージは、以下の物をインストールしておくとトラブルが少ないと思います。
$ sudo apt install build-essential gfortran libopenmpi-dev openmpi-bin
また、metisの構築に cmake
が必要となりますので、インストールしておくと良いでしょう。
$ sudo apt install cmake cmake-curses-gui cmake-extras cmake-qt-gui extra-cmake-modules
FrontISTRを構築する準備が出来ましたので、必要なソフトウェアをダウンロードしてください。
ダウンロード
ライブラリ名 | ダウンロード先 | 備考 |
---|---|---|
OpenBLAS-0.2.20 | http://www.openblas.net | リファレンスのLAPACKよりも速い |
metis-5.1.0 | http://glaros.dtc.umn.edu/gkhome/metis/metis/download | scotch-metisも利用可 |
scalapack-2.0.2 | http://www.netlib.org/scalapack/ | MUMPSで利用 |
MUMPS_5.1.2 | http://mumps.enseeiht.fr/ | 要ユーザ登録 |
trilinos-12.12.1 | https://trilinos.org/download/ | 要ユーザ登録 |
OpenBLASの構築
OpenBLASは、高速なLAPACK/BLASのフリーの実装です。
OpenMPを有効にしたライブラリを構築します。
$ tar xvf OpenBLAS-0.2.20.tar.gz
$ cd OpenBLAS-0.2.20
$ make BINARY=64 NO_SHARED=1 USE_OPENMP=1
$ make PREFIX=$HOME/local install
OpenBLASをLAPACKとして利用する場合、-llapack
の代わりに-lopenblas
と指定してください。
METISの構築
グラフパーティショナのライブラリです。この他、Scotchに同梱されるmetis互換層も利用できます。
OpenMPを有効にしたライブラリを構築します。
METISの構築にはcmake
が必要ですので、予めインストールしておいてください。
$ tar xvf metis-5.1.0.tar.gz
$ cd metis-5.1.0
$ make config prefix=$HOME/local openmp=1 cc=gcc
$ make
$ make install
Scalapackの構築
scalapackは、この後説明をするMUMPSの構築に必要となります。
また、scalapackの構築には、予めMPIがインストールされている必要があります。
$ tar xvf scalapack-2.0.2.tgz
$ cd scalapack-2.0.2
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=$HOME/local \
-DCMAKE_EXE_LINKER_FLAGS="-fopenmp" \
-DBLAS_LIBRARIES=$HOME/local/lib/libopenblas.a \
-DLAPACK_LIBRARIES=$HOME/local/lib/libopenblas.a \
..
$ make
$ make install
MUMPSの構築
MUMPSは直接法のソルバです。
$ tar xvf MUMPS_5.1.2.tar.gz
$ cd MUMPS_5.1.2
Make.inc
ディレクトリにある、Makefile.inc.generic
を元にMakefile.inc
を環境に合わせた内容へ書き換えます。
$ cp Make.inc/Makefile.inc.generic Makefile.inc
$ vi Makefile.inc
LMETISDIR = $(HOME)/local
IMETIS = -I$(LMETISDIR)/include
LMETIS = -L$(LMETISDIR)/lib -lmetis
ORDERINGSF = -Dmetis -Dpord
CC = mpicc -fopenmp
FC = mpif90 -fopenmp
FL = mpif90 -fopenmp
SCALAP = -L$(HOME)/local/lib -lscalapack
INCPAR = -I/usr/lib/openmpi/include
LIBPAR = $(SCALAP) -L/usr/lib/openmpi -lmpi -lmpi_mpifh
LIBBLAS = -L$(HOME)/local/lib -lopenblas
OPTF = -O -DMUMPS_OPENMP
OPTC = -O -I. -DMUMPS_OPENMP
OPTL = -O
ファイルの修正が済んだらライブラリを構築します。
$ make
$ cp lib/*.a $HOME/local/lib
$ cp include/*.h $HOME/local/include
Trilinos MLの構築
Trilinosには多くのライブラリ含まれていますが、FrontISTRに必要なのはML
とzoltan
だけです。
$ tar xvf trilinos-12.12.1-Source.tar.gz
$ cd trilinos-12.12.1-Source
$ mkdir build
$ cd build
$ cmake \
-DCMAKE_INSTALL_PREFIX=$HOME/local \
-DTrilinos_ENABLE_ML=ON \
-DTrilinos_ENABLE_Zoltan=ON \
-DTrilinos_ENABLE_OpenMP=ON \
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
-DTPL_BLAS_LIBRARIES=$HOME/local/lib/libopenblas.a \
-DTPL_LAPACK_LIBRARIES=$HOME/local/lib/libopenblas.a \
-DTPL_ENABLE_MPI=ON \
..
$ make
$ make install
ここで示した手順では、ライブラリを$HOME/local
以下にインストールをしました。Ubuntu以外のOSでも基本的には同様に構築することができます。
FrontISTRのビルド設定
自前でライブラリをビルドした場合のMakefile.conf
は以下のようになります。
##################################################
# #
# Setup Configulation File for FrontISTR #
# #
##################################################
# MPI
MPIDIR = /usr/lib/openmpi
MPIBINDIR = /usr/bin
MPILIBDIR = $(MPIDIR)/lib
MPIINCDIR = $(MPIDIR)/include
MPILIBS = -lmpi -lmpi_cxx -lmpi_mpifh
# for install option only
PREFIX = $(HOME)/FrontISTR
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include
# Metis
METISDIR = $(HOME)/local
METISLIBDIR = $(METISDIR)/lib
METISINCDIR = $(METISDIR)/include
HECMW_METIS_VER= 5
# ParMetis
PARMETISDIR = $(HOME)/ParMetis-3.1
PARMETISLIBDIR = $(PARMETISDIR)
PARMETISINCDIR = $(PARMETISDIR)/ParMETISLib
# Refiner
REFINERDIR = $(HOME)/Software/REVOCAP_Refiner-1.1.04
REFINERINCDIR = $(REFINERDIR)/Refiner
REFINERLIBDIR = $(REFINERDIR)/lib/x86_64-linux
# Coupler
REVOCAPDIR = $(HOME)/REVOCAP_Coupler
REVOCAPINCDIR = $(REVOCAPDIR)/librcap
REVOCAPLIBDIR = $(REVOCAPDIR)/librcap
# MUMPS
MUMPSDIR = $(HOME)/local
MUMPSINCDIR = $(MUMPSDIR)/include
MUMPSLIBDIR = $(MUMPSDIR)/lib
MUMPSLIBS = -ldmumps -lmumps_common -lpord -L$(HOME)/local/lib -lscalapack
# MKL PARDISO
MKLDIR = $(HOME)/
MKLINCDIR = $(MKLDIR)/include
MKLLIBDIR = $(MKLDIR)/lib
# ML
MLDIR = $(HOME)/local
MLINCDIR = $(MLDIR)/include
MLLIBDIR = $(MLDIR)/lib
# C compiler settings
CC = mpicc -fopenmp
CFLAGS =
LDFLAGS = -lstdc++ -lm
OPTFLAGS = -O3
# C++ compiler settings
CPP = mpicxx -fopenmp
CPPFLAGS =
CPPLDFLAGS =
CPPOPTFLAGS = -O3
# Fortran compiler settings
F90 = mpif90 -fopenmp
F90FLAGS =
F90LDFLAGS = -lstdc++ -L$(HOME)/local -lopenblas
F90OPTFLAGS = -O2
F90FPP = -cpp
F90LINKER = mpif90 -fopenmp
MAKE = make
AR = ar ruv
MV = mv -f
CP = cp -f
RM = rm -f
MKDIR = mkdir -p
ファイルを保存したら、setup.sh
を起動します。
./setup.sh -p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml
$ make
$ make install
でインストールが完了です。
テスト
インストールされた FrontISTR (fistr1
) を実行してみましょう。
$ export PATH=$HOME/FrontISTR/bin:$PATH
$ which fistr1
~/FrontISTR/bin/fistr1
$ cd $HOME/Software/FrontISTR_V46/tutorial
$ ls
01_elastic_hinge 07_viscoelastic_cylinder 13_dynamic_beam_nonlinear
02_elastic_hinge_parallel 08_creep_cylinder 14_dynamic_plate_contact
03_hyperelastic_cylinder 09_contact_hertz 15_eigen_spring
04_hyperelastic_spring 10_contact_2tubes 16_heat_block
05_plastic_cylinder 11_contact_2beam 17_freq_beam
06_plastic_can 12_dynamic_beam 18_cavity_flow
様々な例題が同梱されています。この中の 01_elastic_hinge
を実行してみましょう。
01_elastic_hinge
ディレクトリに移動し、ディレクトリの中に格納されているファイルを見てみます。
$ cd 01_elastic_hinge
$ ls
hecmw_ctrl.dat hinge.cnt hinge.msh
この中には3つのファイルが格納されています。FrontISTRで解析する場合、この3つの入力ファイルが最低必要になります。
ファイル名 | 名前 | 説明 |
---|---|---|
hecmw_ctrl.dat | 全体制御ファイル | 解析で使う入力ファイル名や、結果の出力ファイル名を指定します |
hinge.cnt | 解析制御データ | 解析の種別や条件などを指定します |
hinge.msh | メッシュファイル | 解析対象のメッシュ情報や材料データを指定します |
FrontISTR の実行名は fistr1
です。引数は特にありません。3つのファイルが入ったディレクトリで起動してみてください。
$ fistr1
Step control not defined! Using default step=1
fstr_setup: OK
### 3x3 B-SSOR-CG(0) 1
1 1.903375E+00
2 1.974378E+00
3 2.534627E+00
...
...
Start visualize PSF 1 at timestep 1
====================================
TOTAL TIME (sec) : 61.42
pre (sec) : 0.67
solve (sec) : 60.75
====================================
FrontISTR Completed !!
しばらくすると解析が終了し、結果ファイルなどが出力されます。
$ ls
0.log FSTR.msg hecmw_ctrl.dat hinge.cnt hinge.res.0.1
FSTR.dbg.0 FSTR.sta hecmw_vis.ini hinge.msh hinge_vis_psf.0001.inp
ファイルの内容については、マニュアルを参照してください。