LoginSignup
15

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-07-26

お知らせ

この記事は古い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)
- Mac版は オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v5.0αのインストール (macOS High Sierra 10.13.4)

を参照してください。

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に必要なのはMLzoltanだけです。

$ 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

ファイルの内容については、マニュアルを参照してください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15