1. sakurano

    No comment

    sakurano
Changes in body
Source | HTML | Preview

細かいことは抜きにして、最も手っ取り早く、かつなるべく高機能に動かすことを前提に作成しています。

Ubuntu 16.04 LTS & v4.6でしたら以下の記事も参考になります。
オープンソース大規模並列FEM非線形構造解析プログラム FrontISTR v4.6のインストール (ubuntu 16.04 LTS)

何のために本記事があるかといえば、cmakeを使う例が触れられていないこと、同様インストールパッケージでcmakeすると問題が起きるためです。
Ubuntuと限定していますが、他のOSでも共通する内容はたくさんあります。

パッケージインストール

不要なパッケージも込みで、トラブルシューティングが必要ないようにしています。

sudo apt install build-essential cmake gfortran git curl ruby
sudo apt install libopenmpi-dev libmetis5 libopenblas-dev libmumps-dev libmetis-dev 
sudo apt install trilinos-all-dev libptscotch-dev

※FrontISTRのcmakeのTrilinosのサーチで問題がおきるため、trilinosの全パッケージとScotchを入れています。
※ 本来はtrilinosのうち、MLとzoltanしか使いません。

FrontISTRをコンパイルとインストール

ユーザローカルバイナリとしてインストール

通常、共用計算機を前提とする科学技術計算のプログラムは、ユーザフォルダ内で完結させることが推奨されるので、スーパーユーザ権限を使うことはやらないことが多いです。
ということで、RHEL系でもDebian系でも共通して使えるよう(つまり余計なことをしなくてもパスが通っているように)、~/.local/binにインストールしてみましょう。
(※ 「~/」 はユーザのホームディレクトリを表しています。)

git clone https://github.com/FrontISTR/FrontISTR
cd FrontISTR/; mkdir build; cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ../
make -j 16
make install 
source ~/.profile

※ 今回初めて~/.local/フォルダができた場合、最後のsource文を実行することで、PATHが通ります。
※ 仕様として、ログイン時に、~/.local/binがあるときだけパスが通るためです。
MPIとスレッド並列が同時に有効になっています。注意点を確認して下さい。

システム共通バイナリとしてインストール

/usr/local/binにバイナリを配置する場合。自分のローカルならこういう使い方もあります。

git clone https://github.com/FrontISTR/FrontISTR
cd FrontISTR/; mkdir build; cd build
cmake ../
make -j 16
sudo make install 

MPIとスレッド並列が同時に有効になっています。注意点を確認して下さい。

REVOCAP_Refinerが欲しい時

~/.local/lib、~/.local/includeに入れてしまいます。
こちらを実行したあとに、「インストール」を再度実行することで、Refinerがリンクされます。

BUILD_ROOT=`pwd`
LIB_ROOT=${HOME}/.local
MAKE_PAR=16

git clone https://github.com/FrontISTR/REVOCAP_Refiner
cd REVOCAP_Refiner
make -j${MAKE_PAR}
cp lib/x86_64-linux/libRcapRefiner.a ${LIB_ROOT}/lib
cp Refiner/rcapRefiner.h ${LIB_ROOT}/include

(参考) オプショナルライブラリを自力で用意する方法

必要なライブラリのみを、ユーザのローカルに入れておくということは、一般によく行われます。
そこで、参考として、必要なライブラリを自力で手っ取り早くコンパイルする参考になるスクリプト例を置いておきます。

MPIだけ環境側で用意しておけば他のライブラリは自力でコンパイルして用意することができます。
(※MPIは環境依存が多いので、一般にかけないので、他の記事等を参照して頑張って下さい。)

なお、あらかじめのお断りとして、MUMPSはCeCILLライセンスを公称しているので、再配布が許されるはずです。再配布された場合と同様(登録をしなくても入手可)という考えのもと、公式への直リンクを貼っています。
MUMPS公式では、登録を求めておりますので、登録をしていただければ幸いです。

BUILD_ROOT=`pwd`
LIB_ROOT=${HOME}/.local
MAKE_PAR=16
# END modify.

mkdir -p ${LIB_ROOT}/bin ${LIB_ROOT}/lib ${LIB_ROOT}/include
export PATH=${LIB_ROOT}/bin:$PATH


########################################
# OpenBLAS
########################################
git clone -b v0.2.20 https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make -j${MAKE_PAR} DYNAMIC_ARCH=1 USE_OPENMP=1 BINARY=64 NO_SHARED=1
make PREFIX=${LIB_ROOT} install
cd ${BUILD_ROOT}

########################################
# metis-5.1.0
########################################
curl -L -O http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
tar xvf metis-5.1.0.tar.gz
cd metis-5.1.0
make config prefix=${LIB_ROOT} cc=gcc
make -j${MAKE_PAR}
make install
cd ${BUILD_ROOT}

########################################
# scalapack-2.0.2
########################################
curl -L -O http://www.netlib.org/scalapack/scalapack-2.0.2.tgz
tar xvf scalapack-2.0.2.tgz
cd scalapack-2.0.2
mkdir build
cd build
cmake \
  -DCMAKE_INSTALL_PREFIX=${LIB_ROOT} \
  -DCMAKE_EXE_LINKER_FLAGS="-fopenmp" \
  -DBLAS_LIBRARIES=$LIB_ROOT/lib/libopenblas.a \
  -DLAPACK_LIBRARIES=$LIB_ROOT/lib/libopenblas.a \
  ..
make -j${MAKE_PAR}
make install
cd ${BUILD_ROOT}

########################################
# MUMPS-5.1.2
########################################
curl -L -O http://mumps.enseeiht.fr/MUMPS_5.1.2.tar.gz
tar xvf MUMPS_5.1.2.tar.gz
cd MUMPS_5.1.2
cp Make.inc/Makefile.inc.generic Makefile.inc
sed -i \
  -e "s|^#LMETISDIR = .*$|LMETISDIR = ${LIB_ROOT}|" \
  -e "s|^#IMETIS    = .*$|IMETIS = -I\$(LMETISDIR)/include|" \
  -e "s|^#LMETIS    = -L\$(LMETISDIR) -lmetis$|LMETIS = -L\$(LMETISDIR)/lib -lmetis|" \
  -e "s|^ORDERINGSF  = -Dpord$|ORDERINGSF = -Dpord -Dmetis|" \
  -e "s|^CC      = cc|CC      = mpicc|"  \
  -e "s|^FC      = f90|FC      = mpif90|"  \
  -e "s|^FL      = f90|FL      = mpif90|" \
  -e "s|^LAPACK = -llapack|LAPACK = -L${LIB_ROOT}/lib -lopenblas|" \
  -e "s|^SCALAP  = -lscalapack -lblacs|SCALAP  = -L${LIB_ROOT}/lib -lscalapack|" \
  -e "s|^LIBBLAS = -lblas|LIBBLAS = -L${LIB_ROOT}/lib -lopenblas|" \
  -e "s|^OPTF    = -O|OPTF    = -O -fopenmp|" \
  -e "s|^OPTC    = -O -I\.|OPTC    = -O -I. -fopenmp|" \
  -e "s|^OPTL    = -O|OPTL    = -O -fopenmp|" Makefile.inc
make alllib -j${MAKE_PAR}
cp include/*.h ${LIB_ROOT}/include
cp lib/*.a ${LIB_ROOT}/lib
cd ${BUILD_ROOT}

########################################
# Trilinos 12.12.1
########################################
git clone -b trilinos-release-12-12-1 https://github.com/trilinos/Trilinos.git
cd Trilinos

mkdir build
cd build
cmake \
  -DCMAKE_INSTALL_PREFIX=${LIB_ROOT} \
  -DCMAKE_C_COMPILER=mpicc \
  -DCMAKE_CXX_COMPILER=mpicxx \
  -DCMAKE_Fortran_COMPILER=mpif90 \
  -DTPL_ENABLE_LAPACK=ON \
  -DTPL_ENABLE_SCALAPACK=ON \
  -DTPL_ENABLE_METIS=ON \
  -DTPL_ENABLE_MUMPS=ON \
  -DTPL_ENABLE_MPI=ON \
  -DTrilinos_ENABLE_ML=ON \
  -DTrilinos_ENABLE_Zoltan=ON \
  -DTrilinos_ENABLE_OpenMP=ON \
  -DTrilinos_ENABLE_Amesos=OFF \
  -DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF \
  -DMETIS_LIBRARY_DIRS=$LIB_ROOT/lib \
  -DMUMPS_LIBRARY_DIRS=$LIB_ROOT/lib \
  -DBLAS_LIBRARY_DIRS=$LIB_ROOT/lib \
  -DLAPACK_LIBRARY_DIRS=$LIB_ROOT/lib \
  -DSCALAPACK_LIBRARY_DIRS=$LIB_ROOT/lib \
  -DBLAS_LIBRARY_NAMES="openblas" \
  -DLAPACK_LIBRARY_NAMES="openblas" \
  ..
make -j${MAKE_PAR}
make install
cd ${BUILD_ROOT}

########################################
# REVOCAP_Refiner-1.1.04
########################################
git clone https://github.com/FrontISTR/REVOCAP_Refiner
cd REVOCAP_Refiner
make -j${MAKE_PAR}
cp lib/x86_64-linux/libRcapRefiner.a ${LIB_ROOT}/lib
cp Refiner/rcapRefiner.h ${LIB_ROOT}/include
cd ${BUILD_ROOT}

########################################
# FrontISTR
########################################
git clone https://github.com/FrontISTR/FrontISTR.git
cd FrontISTR
mkdir build; cd build
cmake \
  -DCMAKE_INSTALL_PREFIX=${LIB_ROOT} \
  -DBLAS_LIBRARIES=${LIB_ROOT}/lib/libopenblas.a \
  -DLAPACK_LIBRARIES=${LIB_ROOT}/lib/libopenblas.a \
  ..
make -j${MAKE_PAR}
make install