*ビルド(IBAMR)  [#wda5b7ef]

[[Building IBAMR(31 Revisions):https://github.com/IBAMR/IBAMR/wiki/Building]]に基づいて、IBAMRのビルド方法を説明します(和訳)。

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

***前提 [#gc0f17e4]

-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"で置き換えます)。

***注意 [#l1b2f91c]

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

**一般的な注意 [#ydc8d83f]

-必要なライブラリがすでに、システム上で利用可能であったり、あるいは、パッケージとしてインストール可能かもしれません。通常、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:http://www.gnu.org/software/m4/m4.html]]が必要です。(パッケージマネージャーから利用可能な場合が多い)

-[[GNU Readline Library:https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html]]が必要です。(パッケージマネージャーから利用可能な場合が多い)

-SAMRAIをIBAMRで正しく動作させるためにはパッチをあてる必要があります。下記にあ説明を読んでください。

-SAMRAIは--enable-implicit-template-instantiationフラグを付けて、configureする必要があります。

-新しいモデルやコードを開発する場合は、デバッグビルドする必要があります。(開発したすべてのモデルやメソッドが正しく動作する状態になった後に)リリース版を作成するには、PETSc、SAMRAI、IBAMRのみを最適化ビルドする必要があります。

**サードパーティー製のライブラリ [#p501c2b8]

***セットアップ [#h24d00f0]

  cd $HOME
  mkdir sfw
  cd sfw
  mkdir linux

***[[Boost:http://www.boost.org/]] [#fd4305f4]

現在、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:http://eigen.tuxfamily.org/index.php?title=Main_Page]] [#w30f617d]

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

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

***[[HDF5:http://www.hdfgroup.org/HDF5/]] [#s8926a74]

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:https://wci.llnl.gov/simulation/computer-codes/silo]] [#y4a99de1]

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

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

  --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:http://muparser.beltoforion.de/]] [#a1887224]

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

***[[OpenMPI:http://www.open-mpi.org/]] [#x2019ffc]

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:http://acts.nersc.gov/hypre/]] [#o57e31cc]

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

***[[PETSc:http://www.mcs.anl.gov/petsc/]] [#z9469998]

IBAMRはPETScの特定バージョン必要とします。ここではPETSc 3.7.2の場合を説明します。以下のconfigureのオプションは[[hypre:http://acts.nersc.gov/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:https://computation.llnl.gov/project/SAMRAI/]] [#gdca3df6]

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:https://github.com/IBAMR/IBAMR/releases/download/v0.1-rc1/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:http://libmesh.github.io/]] [#e42df352]

(オプション)

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 [#ybba4352]

最初に、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
  setenv BOOST_ROOT $HOME/sfw/linux/boost/1.6.0
  setenv PETSC_ARCH linux-debug
  setenv PETSC_DIR $HOME/sfw/petsc/3.7.2
  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-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に読み込むと、下図のような圧力コンター図などが見られる。

#ref(ns_ex4.png,center,nowrap,50%,ns_ex4);

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS