Windows 10 ProのWSLのUbuntu 16.04でGNUコンパイラを用い,Delft3Dのビルドをした備忘録です.Ubuntu 18.04とIntelコンパイラの組み合わせでもビルドを試みましたが,うまくいかなかったのと,UTSIPインターン学生対応で急いでいたため,こちらの情報を基本的に踏襲し,Ubuntu 16.04とGNUコンパイラの組み合わせで,パッケージの最新版にこだわらず,ビルドすることとしました.2019年6月12日現在の情報です.

準備

最初にWindowsのshared folderを設定します.WindowsのCドライブに~/wincでアクセスできるようにするため,~/.bashrcの最後に以下を追記します.


if [ -d winc ] ; then
  echo "Windows shared folders ready"
else
  ln -s /mnt/c winc
fi

変更された.bashrcを反映させるため,ホームディレクトリで,以下を実行します.


source .bashrc

以下の通り準備を進めます.インストール不要のものもあるかもしれません.


sudo apt update 
sudo apt upgrade 

sudo apt install build-essential subversion autoconf libtool
sudo apt install bison flex g++ gfortran libstdc++6 byacc libexpat1 libexpat1-dev
sudo apt install uuid-dev ruby make
sudo apt install libcurl4-openssl-dev 
sudo apt install -y pkg-config 

必要なツールのインストール

次に必要なツールをビルドしていきます.ビルド用のディレクトリを作成し,移動します.ここでは,ホームディレクトリの直下に作成した~/srcで作業を進めます.

MPICH-3.2

MPICH-3.2のインストールは非常に時間がかかります.


wget http://www.mpich.org/static/downloads/3.2/mpich-3.2.tar.gz
tar -xzf mpich-3.2.tar.gz
cd mpich-3.2
./configure --prefix=/opt/mpich-3.2
make 
sudo make install
cd ..

ZLIB-1.2.8


wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/zlib-1.2.8.tar.gz
tar -xzf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib-1.2.8
make
sudo make install
cd ..

HDF5


wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.16/src/hdf5-1.8.16.tar.gz
tar -zxf hdf5-1.8.16.tar.gz
cd hdf5-1.8.16
./configure --prefix=/usr/local/hdf5-1.8.16 --with-zlib=/usr/local/zlib-1.2.8
make 
sudo make install
cd ..

netCDF4-CおよびnetCDF4-Fortran


wget https://github.com/Unidata/netcdf-c/archive/v4.4.1.tar.gz
tar -xzf v4.4.1.tar.gz
cd netcdf-c-4.4.1
./configure --prefix=/usr/local/netcdf4.4 --enable-netcdf-4 --enable-shared --enable-dap CPPFLAGS="-I/usr/local/hdf5-1.8.16/include -I/usr/local/zlib-1.2.8/include -I/usr/local/netcdf4.4/include" LDFLAGS="-L/usr/local/hdf5-1.8.16/lib -L/usr/local/zlib-1.2.8/lib -L/usr/local/netcdf4.4/lib"
make 
sudo make install
cd ..

wget https://github.com/Unidata/netcdf-fortran/archive/v4.4.4.tar.gz
tar -xzf v4.4.4.tar.gz
cd netcdf-fortran-4.4.4
./configure --prefix=/usr/local/netcdf4.4 --enable-shared CPPFLAGS="-I/usr/local/hdf5-1.8.16/include -I/usr/local/netcdf4.4/include" LDFLAGS="-L/usr/local/hdf5-1.8.16/lib -L/usr/local/netcdf4.4/lib"
make 
sudo make install
cd ..

Delft3Dのビルド

ソースコードをダウンロードするディレクトリを/home/teem/winc/cal/Delft3Dとし,ここに移動します.ここで,/home/teemはホームディレクトリ,/wincは最初に設定した,WindowsのCドライブです.subversionでcheckoutします.ダウンロードには1時間20分くらいかかりました.


svn checkout https://svn.oss.deltares.nl/repos/delft3d/tags/delft3d4/59659 delft3d_repository

もしsvn: E120106: ra_serf: The server sent a truncated HTTP response body.のようなエラーで途中で止まってしまった場合は,delft3d_repositoryディレクトリに移動してから,以下を実行します.


svn cleanup
svn update

カレントディレクトリの下にできた,delft3d_repository/srcに移動し,build_ubuntu1604.shの3カ所を以下のように編集します.
260行目あたりのif [ "$compiler" = 'gnu' ]; thenと直下のelseの間を次のように編集します.この2行も含めて記述しています.


if [ "$compiler" = 'gnu' ]; then
    addpath PATH /opt/mpich-3.2/bin
    export MPI_INCLUDE=/opt/mpich-3.2/include
    export MPILIBS_ADDITIONAL="-L/opt/mpich-3.2/lib -lfmpich -lmpich -lmpl"
    export MPIFC=/opt/mpich-3.2/bin/mpif90
else

次に,300行目あたりのnetcdfに関わる1つの行を以下のように編集します.


export NETCDFROOT=/usr/local/netcdf4.4

最後に,385行目あたりの./configureで始まる部分を以下のように,ソースコードのインストール先に合わせて編集します.ここで指定したディレクトリに実行形式がインストールされます.


        ./configure --prefix=/home/teem/winc/cal/Delft3D/delft3d_repository $configureArgs &> $log \

以上で準備が整いましたので,ビルドします.時間がかかります.


./build_ubuntu1604.sh -gnu -64bit

テストケースの実行(ここはまだ未確認)

環境設定用のスクリプトdelft3d_env.sh/home/teem/winc/cal/Delft3D/delft3d_repositoryの中に以下の内容で作成します.


#!/bin/bash
export PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/flow2d3d/bin:$PATH
export PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/wave/bin:$PATH
export PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/swan/scripts:$PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/flow2d3d/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/wave/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/swan/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/delft3d_repository/bin/lnx64/swan/scripts:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/mpich-3.2/lib:$LD_LIBRARY_PATH
export PATH=/opt/mpich-3.2/bin:$PATH

Delft3Dを実行する前には環境変数を設定するため,以下を実行します.


source /home/teem/winc/cal/Delft3D/delft3d_repository/delft3d_env.sh

参考資料

  1. Paul Liu. Successfully installed and run Delft3d on Amazon AWS Ubuntu 16.04 (EC2). url
  2. tmegos blog. svn: E120106: ra_serf: The server sent a truncated HTTP response body. url