WSLのUbuntu 16.04でDelft3Dのビルド(GNUコンパイラ)
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 59659
もしsvn: E120106: ra_serf: The server sent a truncated HTTP response body.
のようなエラーで途中で止まってしまった場合は,59659
ディレクトリに移動してから,以下を実行します.
svn cleanup
svn update
カレントディレクトリの下にできた,59659/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/59659 $configureArgs &> $log \
以上で準備が整いましたので,ビルドします.時間がかかります.
./build_ubuntu1604.sh -gnu -64bit
テストケースの実行(ここはまだ未確認)
環境設定用のスクリプトdelft3d_env.sh
を/home/teem/winc/cal/Delft3D/59659
の中に以下の内容で作成します.
#!/bin/bash
export PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/flow2d3d/bin:$PATH
export PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/wave/bin:$PATH
export PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/swan/scripts:$PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/flow2d3d/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/wave/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/59659/bin/lnx64/swan/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/teem/winc/cal/Delft3D/59659/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/59659/delft3d_env.sh