ビルド(IBAMR)

Building IBAMR(31 Revisions)に基づいて、IBAMRのビルド方法を説明します(和訳)。

以下、IBAMRおよびIBAMRが必要とするサードパーティーのライブラリをLinuxシステム上に構築、インストールする方法を説明します。似たようなオペレーティングシステムにインストールする場合は、最小限ですが修正が必要となります。

前提

  • PETSc、SAMRAI、IBAMR以外のサードパーティーのライブラリはすべて、$HOME/sfw/linuxの中にインストールします。PETSc、SAMRAI、IBAMRはそれぞれ、$HOME/sfw/petsc、$HOME/sfw/samrai、$HOME/sfw/ibamrにインストールされます。異なる場所にライブラリをインストールする場合は、修正してください。
  • シェルはbashを使用しているとします。bash以外のシェル(csh, tcshなど)を使用している場合は読み替えが必要です(例:"export NAME=value"は"setenv NAME value"で置き換えます)。

注意

IBAMRのconfigureは、PETScがインストールしたサードパーティー製のライブラリ群から、IBAMRに必要なライブラリが存在する場所を探索します。現在、HDF5やhypreライブラリを含みます。IBAMR configureは、PETScによって使われるBLASとLAPACKも使用します。IBAMR configureを実行する際、PETScがインストールしたライブラリに関しては、設定フラグを指定する必要はありません。

一般的な注意

  • 必要なライブラリがすでに、システム上で利用可能であったり、あるいは、パッケージとしてインストール可能かもしれません。通常、IBAMRは、既にインストールされているシリアルなライブラリ(Boost、Eigen、HDF5、Silo、muParser)をそのまま利用することができます。
  • システムにインストールされているMPIを使用することができます。
  • IBAMRのビルドには、gfortranのようなFortranコンパイラが必要です。
  • IBAMRはMPIが利用可能であることを要求しますが、特定のMPIライブラリは要求しません。可能であれば、システムにインストールされているMPIを使用することをお勧めします。
  • MPIが必要なサードパーティー製のライブラリ(PETSc、hypre、libMesh、SAMRAI)は、同じMPI実装を使用する必要があります。
  • 必要とされるライブラリをビルドする際に、すべて同じコンパイラ(C、C++、Fortran)を使用する必要があります。
  • GNU M4が必要です。(パッケージマネージャーから利用可能な場合が多い)
  • GNU Readline Libraryが必要です。(パッケージマネージャーから利用可能な場合が多い)
  • SAMRAIをIBAMRで正しく動作させるためにはパッチをあてる必要があります。下記にあ説明を読んでください。
  • SAMRAIは--enable-implicit-template-instantiationフラグを付けて、configureする必要があります。
  • 新しいモデルやコードを開発する場合は、デバッグビルドする必要があります。(開発したすべてのモデルやメソッドが正しく動作する状態になった後に)リリース版を作成するには、PETSc、SAMRAI、IBAMRのみを最適化ビルドする必要があります。

サードパーティー製のライブラリ

セットアップ

 cd $HOME
 mkdir sfw
 cd sfw
 mkdir linux

Boost

現在、IBAMRはバージョン1.57以上のBoostが必要です。

  • 注意: IBAMRのconfigureを使用すると、IBAMRとバンドルされたBoost 1.60の一部が自動的にビルドされます。また、IBAMRとは別にインストールしたBoostも使用可能です。
  • 注意: libMeshを使用する場合は、外部のboostを使用する必要があります。
 cd $HOME/sfw/linux
 mkdir boost
 cd boost
 tar xvfz path/to/boost_1_60_0.tar.gz
 mv boost_1_60_0 1.6.0
 export BOOST_ROOT=$HOME/sfw/linux/boost/1.6.0

Eigen

現在、IBAMRはEigen 3.2.1が必要です。

  • 注意: IBAMRとEigen 3.2.1はバンドルされていて、IBAMRのconfigureで自動的にビルトされます。また、IBAMRとは別にインストールしたEigenも使用可能です。libMeshを使用する場合は、外部のEigenを使用してください。

HDF5

HDF5の最新バージョン(現在、1.8.17)を使用することをお勧めしますが、HDF5の1.8.7以上のバージョンであれば、IBAMRは動作します。

 cd $HOME/sfw/linux
 
 tar xvjf path/to/hdf5-1.8.17.gz.bz2
 cd hdf5-1.8.17
 ./configure \
   CC=gcc \
   CXX=g++ \
   FC=gfortran \
   F77=gfortran \
   --enable-production \
   --disable-debug \
   --prefix=$HOME/sfw/linux/hdf5/1.8.17
 make
 make check
 make install

Silo

(オプション)Siloの最新バージョン(現在、4.10)を使用することをお勧めしますが、Siloの以前のバージョンでもIBAMRとうまく動作します。

  • 注意: Silo 4.10はzlibを必要とします。Ubuntuシステムでは、aptから"zlib1g-dev"の名前のパッケージが利用可能です。 zlibのソースコードからビルドする場合は、そのビルドした場所を指定する必要があります。
 --with-zlib="path/to/zlib/1.2.8/include,path/to/zlib/1.2.8/lib"

includeとlibディレクトリを指定することに注意してください。

 cd $HOME/sfw/linux
 tar xvfz path/to/silo-4.10.2.tar.gz
 cd silo-4.10.2
 ./configure \
   CC=gcc \
   CXX=g++ \
   FC=gfortran \
   F77=gfortran \
   --prefix=$HOME/sfw/linux/silo/4.10.2 \
   --disable-silex
 make
 make install

GNUのreadlineライブラリがインストールされていない場合は、--without-readlineを使用する必要があります。

muParser

  • 注意: muParser 2.2.3にパッチを当てたものがIBAMRにバインドされていて、IBAMRのconfigureで自動的にインストールされます。また、IBAMRとは別にインストールしたmuParserでも使用可能です。

OpenMPI

IBAMRはMPIを要求しますが、必ずしも特定実装のMPIライブラリが必要というわけではありません。可能であれば、システムにインストールされたMPIを使用することをお勧めします。この場合は、このステップをスキップしてください。また、OpenMPIコンパイラーにパスを通す箇所は、システムのMPIライブラリのあるパスに置き換えてください。

システムのMPIを利用できない場合は、最新のOpenMPIを使用することをお勧めします。OpenMPIのウェブサイトからtarballをダウンロードしたら、次のようにしてビルドします。

 cd $HOME/sfw/linux
 tar xvfj path/to/openmpi-1.10.2.tar.bz2
 
 cd openmpi-1.10.2
 ./configure \
   CC=gcc \
   CXX=g++ \
   FC=gfortran \
   F77=gfortran \
   --prefix=$HOME/sfw/linux/openmpi/1.10.2 \
   --disable-mpi-cxx-seek \
   --disable-heterogeneous \
   --enable-orterun-prefix-by-default
 make
 make check
 make install
  • 注意: PETScでMPICHまたはOpenMPIを自動的にダウンロード、インストールすることも可能です。その場合は、MPIコンパイラのラッパーが
 $PETSC_DIR/$PETSC_ARCH/bin

にインストールされます。

  • 注意: ~/.bashrcファイルに以下を追加してください。
 export PATH=$HOME/sfw/linux/openmpi/1.10.2/bin:$PATH
 export MANPATH=$HOME/sfw/linux/openmpi/1.10.2/share/man:$MANPATH

Hypre

IBAMRはHpyre 2.10bかそれ以上を要求します。PETScがインストールするhypreを使用することをお勧めします。

PETSc

IBAMRはPETScの特定バージョン必要とします。ここではPETSc 3.7.2の場合を説明します。以下のconfigureのオプションはhypreを直接ダウンロード、インストールします。

まず、PETScを展開します:

 cd $HOME/sfw
 mkdir petsc
 cd petsc
 wget http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.7.2.tar.gz
 tar xvfz petsc-3.7.2.tar.gz
 mv petsc-3.7.2 3.7.2
 cd 3.7.2

次に、PETScをconfigureしてからデバッグビルドします:

(注意 LDFLAGSオプションはOpenMPIを使用するときだけ必要です。MPICHやその他のMPI実装に対しては不要です。)

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 export PETSC_DIR=$PWD
 export PETSC_ARCH=linux-debug
 ./config/configure.py \
   --CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   --CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   --FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   --LDFLAGS="-L$HOME/sfw/linux/openmpi/1.10.2/lib -Wl,-rpath,$HOME/sfw/linux/openmpi/1.10.2/lib" \
   --with-default-arch=0 \
   --PETSC_ARCH=$PETSC_ARCH \
   --with-debugging=1 \
   --with-c++-support \
   --with-hypre=1 \
   --download-hypre=1
 make
 make test

最後に、最適化モードでconfigureとビルドをします:(注意 LDFLAGSオプションはOpenMPIを使用するときだけ必要です。MPICHやその他のMPI実装に対しては不要です。)

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 export PETSC_DIR=$PWD
 export PETSC_ARCH=linux-opt
 ./config/configure.py \
   --CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   --CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   --FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   --COPTFLAGS="-O3" \
   --CXXOPTFLAGS="-O3" \
   --FOPTFLAGS="-O3" \
   --LDFLAGS="-L$HOME/sfw/linux/openmpi/1.10.2/lib -Wl,-rpath,$HOME/sfw/linux/openmpi/1.10.2/lib" \
   --with-default-arch=0 \
   --PETSC_ARCH=$PETSC_ARCH \
   --with-debugging=0 \
   --with-c++-support \
   --with-hypre=1 \
   --download-hypre=1 \
   --with-x=0
 make
 make test
  • 注意: ~/.bashrcファイルに以下を追加してください。
 export PETSC_DIR=$HOME/sfw/petsc/3.7.2
 export PETSC_ARCH=linux-opt

SAMRAI

IBAMRはSAMRAIの特定バージョンを必要とします。IBAMRが使用するのはSAMRAI 2.4.4です。

まず、SAMRAIを展開します:

 cd $HOME/sfw
 mkdir samrai
 cd samrai
 mkdir 2.4.4
 cd 2.4.4
 tar xvfz SAMRAI-v2.4.4.tar.gz
 mv SAMRAI SAMRAI-2.4.4

次に、SAMRAI-v2.4.4-patch-121212.gzを使用して、SAMRAIにパッチをあてます:

 cd SAMRAI-2.4.4
 ./source/scripts/includes --link
 gunzip -c path/to/SAMRAI-v2.4.4-patch-121212.gz | patch -p2

次に、SAMRAIをconfigure、コンパイルしてデバッグビルドします:

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/samrai/2.4.4
 mkdir objs-opt
 cd objs-opt
 
 ../SAMRAI/configure \
   CFLAGS="-O3" \
   CXXFLAGS="-O3" \
   FFLAGS="-O3" \
   --prefix=$HOME/sfw/samrai/2.4.4/linux-opt \
   --with-CC=gcc \
   --with-CXX=g++ \
   --with-F77=gfortran \
   --with-MPICC=$HOME/sfw/linux/openmpi/1.8.4/bin/mpicc \
   --with-hdf5=$HOME/sfw/linux/hdf5/1.8.17 \
   --without-hypre \
   --with-silo=$HOME/sfw/linux/silo/4.10.2 \
   --without-blaslapack \
   --without-cubes \
   --without-eleven \
   --without-kinsol \
   --without-petsc \
   --without-sundials \
   --without-x \
   --with-doxygen \
   --with-dot \
   --disable-debug \
   --enable-opt \
   --enable-implicit-template-instantiation \
   --disable-deprecated
 make
 make install

最後に、SAMRAIをconfigure、ビルドして最適化ビルドします:

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/samrai/2.4.4
 mkdir objs-opt
 cd objs-opt
 
 ../SAMRAI-2.4.4/configure \
   CFLAGS="-O3" \
   CXXFLAGS="-O3" \
   FFLAGS="-O3" \
   --prefix=$HOME/sfw/samrai/2.4.4/linux-g++-opt \
   --with-CC=gcc \
   --with-CXX=g++ \
   --with-F77=gfortran \
   --with-MPICC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   --with-hdf5=$HOME/sfw/linux/hdf5/1.8.17 \
   --without-hypre \
   --with-silo=$HOME/sfw/linux/silo/4.10.2 \
   --without-blaslapack \
   --without-cubes \
   --without-eleven \
   --without-kinsol \
   --without-petsc \
   --without-sundials \
   --without-x \
   --with-doxygen \
   --with-dot \
   --disable-debug \
   --enable-opt \
   --enable-implicit-template-instantiation \
   --disable-deprecated
 make
 make install

libMesh

(オプション)

IBAMRは現在、libMesh version 1.0.0を使用しています。

 cd $HOME/sfw/linux
 mkdir libmesh
 cd libmesh
 mkdir 1.0.0
 cd 1.0.0 
 wget https://github.com/libMesh/libmesh/releases/download/v1.0.0/libmesh-1.0.0.tar.gz
 tar xvfz libmesh-1.0.0.tar.gz
 mv libmesh-1.0.0 LIBMESH

まず、デバッグビルドします:

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/linux/libmesh/1.0.0
 mkdir objs-debug
 cd objs-debug
 
 export BOOST_ROOT=$HOME/sfw/linux/boost/1.6.0
 ../LIBMESH/configure \
   --prefix=$HOME/sfw/linux/libmesh/1.0.0/1.0.0-debug \
   --with-methods=dbg \
   PETSC_DIR=$HOME/sfw/petsc/3.7.2 \
   PETSC_ARCH=linux-debug \
   CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   F77=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   --enable-triangle \
   --disable-cxx11 \
   --disable-openmp \
   --disable-perflog \
   --disable-strict-lgpl \
   --disable-pthreads \
   --disable-cppthreads \
   --disable-unique-ptr
 
 make
 make install
  • 注意:インストールされたincludeフォルダーの中にboostディレクトリがあると、IBAMRが混乱するので、このboostディレクトリの名前を変えてください。

次に、最適化ビルドします:

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/linux/libmesh/1.0.0
 mkdir objs-opt
 cd objs-opt
 export BOOST_ROOT=$HOME/sfw/linux/boost/1.6.0
 ../LIBMESH/configure \
   --prefix=$HOME/sfw/linux/libmesh/1.0.0/1.0.0-opt \
   --with-methods=opt \
   PETSC_DIR=$HOME/sfw/petsc/3.7.2 \
   PETSC_ARCH=linux-opt \
   CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   F77=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   --enable-triangle \
   --disable-cxx11 \
   --disable-openmp \
   --disable-perflog \
   --disable-strict-lgpl \
   --disable-pthreads \
   --disable-cppthreads \
   --disable-unique-ptr
 
 make
 make install
  • 注意:インストールされたincludeフォルダーの中にboostディレクトリがあると、IBAMRが混乱するので、このboostディレクトリの名前を変えてください。

IBAMR

最初に、IBAMRのコードをダウンロードします:

 cd $HOME/sfw
 mkdir ibamr
 cd ibamr
 git clone https://github.com/IBAMR/IBAMR.git

次に、IBAMRをconfigure、コンパイルしデバッグビルドします:(CXXFLAGSに-std=gnu++11を追加する必要があるかもしれません)

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/ibamr
 mkdir ibamr-objs-dbg
 cd ibamr-objs-dbg
 export BOOST_ROOT=$HOME/sfw/linux/boost/1.6.0
 export PETSC_ARCH=linux-debug
 export PETSC_DIR=$HOME/sfw/petsc/3.7.2
 ../IBAMR/configure \
   CFLAGS="-g -O1 -Wall" \
   CXXFLAGS="-g -O1 -Wall" \
   FCFLAGS="-g -O1 -Wall" \
   CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   CPPFLAGS="-DOMPI_SKIP_MPICXX" \
   --with-hypre=$PETSC_DIR/$PETSC_ARCH \
   --with-samrai=$HOME/sfw/samrai/2.4.4/linux-g++-debug \
   --with-hdf5=$HOME/sfw/linux/hdf5-1.8.17 \
   --with-silo=$HOME/sfw/linux/silo/4.10.2 \
   --with-boost=$HOME/sfw/linux/boost/1.6.0 \
   --enable-libmesh \
   --with-libmesh=$HOME/sfw/linux/libmesh/1.0.0/1.0.0-debug \
   --with-libmesh-method=dbg
 
 make lib
 make examples

IBAMRの例題をコンパイルし、実行させてみましょう:

 cd $HOME/sfw/ibamr/ibamr-objs-dbg/examples/IB/explicit/ex1
 make examples
 ./main2d input2d

次に、IBAMRをconfigure、コンパイルし、最適化ビルドします:

(注意 システムにインストールされたMPIを使用する場合は、下記でシステムのMPIコンパイラーのパスに修正する必要があります)

 cd $HOME/sfw/ibamr
 mkdir ibamr-objs-opt
 cd ibamr-objs-opt
 export BOOST_ROOT=$HOME/sfw/linux/boost/1.6.0
 export PETSC_ARCH=linux-opt
 export PETSC_DIR=$HOME/sfw/petsc/3.7.2
 ../IBAMR/configure \
   CC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   CXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   F77=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   FC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpif90 \
   MPICC=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicc \
   MPICXX=$HOME/sfw/linux/openmpi/1.10.2/bin/mpicxx \
   CFLAGS="-O3 -Wall" \
   CXXFLAGS="-O3 -Wall -std=gnu++11" \
   FFLAGS="-O3 -Wall" \
   FCFLAGS="-O3 -Wall" \
   CPPFLAGS="-DOMPI_SKIP_MPICXX" \
   --with-hypre=$PETSC_DIR/$PETSC_ARCH \
   --with-samrai=$HOME/sfw/samrai/2.4.4/linux-g++-opt \
   --with-hdf5=$HOME/sfw/linux/hdf5/1.8.17 \
   --with-silo=$HOME/sfw/linux/silo/4.10.2 \
   --with-boost=$HOME/sfw/linux/boost/1.6.0 \
   --enable-libmesh \
   --with-libmesh=$HOME/sfw/linux/libmesh/1.0.0/1.0.0-opt \
   --with-libmesh-method=opt
 make
 make check

IBAMRの例題を最適化を有効にして、コンパイルし、実行してみましょう:

 cd $HOME/sfw/ibamr/ibamr-objs-opt/examples/navier_stokes/ex4
 make examples
 ./main3d input3d

結果をVisItに読み込むと、下図のような圧力コンター図などが見られる。

ns_ex4

添付ファイル: filens_ex4.png 1158件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-16 (火) 14:24:46 (729d)