Edited at

オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v5.0αのインストール (macOS High Sierra 10.13.4)

More than 1 year has passed since last update.


FrontISTR v5.0αのインストール


(macOS High Sierra 10.13.4)

ここでは、FrontISTR v5.0α を macOS High Sierra 10.13.4 でビルドする方法を紹介します。


注意

この文章は公式のものではありません。また、内容の正確性について保証するものではありません。また、筆者は一切の責任を負いません。


はじめに

FrontISTRは東京大学 奥田研究室で開発されている、本格的な構造解析プログラムです。FrontISTR研究会から、研究会の案内や資料、ソフトウェアが入手できます。

スパコンからWindowsパソコンまで動かすことが出来る点が特徴の一つです。


準備

予め macOS High Sierra 10.13.4 が動作可能な状態にしてください。


Homebrewによるパッケージのインストール

本資料では、環境構築のために、macOS 用パッケージマネージャー Homebrewを利用します。

はじめに、https://brew.sh/index_jaからHomebrewのインストールを行ってください。

その後、以下のコマンドで、コンパイル環境をインストールします。

$ brew install gcc

$ brew install cmake
$ brew install open-mpi


ライブラリのビルドとインストール

FrontISTRのビルドに必要なライブラリをビルドし、インストールします。

必要なライブラリは、


  • OpenBLAS (LAPACK)

  • Scalapack

  • Metis 5

  • MUMPS

  • Trilinos ML

  • REVOCAP_Refiner

  • OpenMPI

です。この内、OpenMPIについては前の手順でインストールしました。


ソースのダウンロード

ソフトウェア名
ダウンロード先
備考

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/
要ユーザ登録、反復法前処理に利用

REVOCAP_Refiner-1.1.04
http://www.multi.k.u-tokyo.ac.jp/FrontISTR
要ユーザ登録、FrontISTRリザーバの「最新版FrontISTRおよびREVOCAP_PrePost」よりダウンロード


ライブラリのビルド

作業をするディレクトリは $HOME/Software、ライブラリをインストールするディレクトリは $HOME/.local として説明をします。

$ cd $HOME

$ mkdir Software
$ mkdir .local

PATH 環境変数を確認してください。

$ echo $PATH

/usr/lib64/openmpi/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/home/user/.local/bin:/home/user/bin

また、$HOME/.local/binPATHを通しておくと便利です。

% mkdir -p $HOME/.local/bin

% cd $HOME/.local/bin
% export PATH=`pwd`:$PATH


OpenBLASの構築

OpenBLASは、高速なLAPACK/BLASのフリーの実装です。

OpenMPを有効にしたライブラリを構築します。

% tar xvf OpenBLAS-0.2.20.tar.gz

% cd OpenBLAS-0.2.20
% make BINARY=64 NO_SHARED=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 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 \
..
% make
% make install


MUMPSの構築

MUMPSは直接法のソルバです。

% tar xvf MUMPS_5.1.1.tar.gz

% cd MUMPS_5.1.1
% sed -e "s|mpiicc|mpicc|g" -e "s|mpiifort|mpif90|g" -e "s|-nofor_main| |g" -e "s|-qopenmp| |g" Make.inc/Makefile.INTEL.PAR > Makefile.inc
% make d
% cp lib/*.a $HOME/.local/lib
% cp include/*.h $HOME/.local/include


Trilinos MLの構築

Trilinosには多くのライブラリ含まれていますが、FrontISTRに必要なのはMLzoltanだけです。

% tar xvf trilinos-12.10.1-Source.tar.gz

% cd trilinos-12.10.1-Source
% mkdir build
% cd build
% cmake \
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
-DTPL_ENABLE_MPI=ON \
-DTrilinos_ENABLE_CXX11=OFF \
-DTrilinos_ENABLE_Fortran:BOOL=OFF \
-DTrilinos_ENABLE_OpenMP:BOOL=OFF \
-DTrilinos_ENABLE_Zoltan=ON \
-DTrilinos_ENABLE_ML=ON \
-DTPL_ENABLE_ParMETIS=OFF \
-DParMETIS_LIBRARY_DIRS=$HOME/.local/lib \
-DParMETIS_INCLUDE_DIRS=$HOME/.local/include \
-DTPL_BLAS_LIBRARIES:STRING="-lopenblas" \
-DTPL_LAPACK_LIBRARIES:STRING="-lopenblas" \
-DCMAKE_INSTALL_PREFIX=$HOME/.local \
..
% make
% make install

ここで示した手順では、ライブラリを$HOME/.local以下にインストールをしました。

macOS以外のOSでも基本的には同様に構築することができます。


FrontISTRの構築

必要なライブラリの導入が済んだらFrontISTRを構築します。

FrontISTRで有効にする機能は


  • hecmw_part1領域分割ツールなどのツール群生成

  • REVOCAP_Refiner (メッシュの細分化機能)

  • MPI (PCクラスタ等の並列実行環境)

  • OpenMP (マルチコアCPUを利用)

  • METIS (メッシュの領域分割のために必要)

  • MUMPS (直接法ソルバー)

  • LAPACK (CG法やGMRES法を用いた前処理適用後の条件数推定機能を利用)

  • Trilinos-ML (代数マルチグリッド法に基づく前処理)

です。これらの機能を有効にしたバイナリを作成します。

% git clone https://github.com/FrontISTR/FrontISTR.git


Makefile.confの編集

% cp Makefile.conf.org Makefile.conf

% vi Makefile.conf

以下の内容でMakefile.confを編集してください。

##################################################

# #
# Setup Configulation File for FrontISTR #
# #
##################################################

# MPI
MPIDIR =
MPIBINDIR =
MPILIBDIR =
MPIINCDIR =
MPILIBS =

# for install option only
PREFIX = $(HOME)/FrontISTR
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include

# Metis
METISDIR = $(HOME)/FrontISTR_tools
METISLIBDIR = $(METISDIR)/lib
METISINCDIR = $(METISDIR)/include
HECMW_METIS_VER= 5

# ParMetis
PARMETISDIR = $(HOME)/ParMetis-3.1
PARMETISLIBDIR = $(PARMETISDIR)
PARMETISINCDIR = $(PARMETISDIR)/ParMETISLib

# Refiner
REFINERDIR = $(HOME)/FrontISTR_tools
REFINERINCDIR = $(REFINERDIR)/include
REFINERLIBDIR = $(REFINERDIR)/lib

# Coupler
REVOCAPDIR = $(HOME)/REVOCAP_Coupler
REVOCAPINCDIR = $(REVOCAPDIR)/librcap
REVOCAPLIBDIR = $(REVOCAPDIR)/librcap

# MUMPS
MUMPSDIR = $(HOME)/FrontISTR_tools
MUMPSINCDIR = $(MUMPSDIR)/include
MUMPSLIBDIR = $(MUMPSDIR)/lib

# MKL PARDISO
MKLDIR = $(HOME)/
MKLINCDIR = $(MKLDIR)/include
MKLLIBDIR = $(MKLDIR)/lib

# ML
MLDIR = $(HOME)/FrontISTR_tools
MLINCDIR = $(MLDIR)/include
MLLIBDIR = $(MLDIR)/lib

# C compiler settings
CC = mpicc
CFLAGS =
LDFLAGS = -lm
OPTFLAGS = -O3

# C++ compiler settings
CPP = mpic++
CPPFLAGS =
CPPLDFLAGS =
CPPOPTFLAGS = -O3

# Fortran compiler settings
F90 = mpif90
F90FLAGS =
F90LDFLAGS =
F90OPTFLAGS = -O2
F90FPP = -cpp
F90LINKER = mpif90

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を指定してください。

また、特徴として、arコマンドがGNU準拠のものではないので、エラーがある場合にMakefileが止まってしまいます。これを避けるために、arコマンドの先頭にハイフンを挟む必要があります。

あわせて、OpenMPによるスレッド並列を実施したい場合には、-fopenmpオプションを当該部分に追記してください。この場合、領域分割プログラム(パーティショナ)などがスレッド並列による出力に対応され、計算時間の大きな短縮に繋がります。

# C compiler settings

CC = mpicc
CFLAGS =
LDFLAGS = -lm
OPTFLAGS = -O3 -fopenmp

# C++ compiler settings
CPP = mpic++
CPPFLAGS =
CPPLDFLAGS =
CPPOPTFLAGS = -O3 -fopenmp

# Fortran compiler settings
F90 = mpif90
F90FLAGS =
F90LDFLAGS =
F90OPTFLAGS = -O2 -fopenmp
F90FPP = -cpp
F90LINKER = mpif90

編集が出来たらsetup.shを実行してください。

% ./setup.sh -p --with-tools --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

などのバイナリがコピーされ実行できる状態になります。

通常はここまでの手順で十分です。


謝辞

本記事は、以下の記事を参考に、著者の許可を得て作成したものです。感謝いたします。

オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v4.6のインストール (CentOS 7.3)