Help us understand the problem. What is going on with this article?

オープンソース大規模並列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)

ricos
FEMによる構造解析、機械学習の専門家集団。計算資源のクラウド提供もしています。
https://www.ricos.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした