build delft3d on ubuntu 16

2020-04-06  本文已影响0人  西贝_贾

一些基础论坛知识

Please check the following sites for additional information:

General information: http://oss.deltares.nl/web/delft3d/source-code

FAQ : http://oss.deltares.nl/web/delft3d/faq

Compile forum : http://oss.deltares.nl/web/delft3d/general/-/message_boards?_19_mbCategoryId=200432

Copyright (C) Stichting Deltares, 2011-2017.

本教程适用于Ubuntu 16,高版本的有问题,使用的某个包版本过新

安装必要的包

按照以下命令安装所需的包,这些可以使用系统自带的版本,delft3d的源

码可以自行下载


sudo apt-get update

sudo apt-get upgrade

sudo apt-get install subversion

sudo apt-get install autoconf

sudo apt-get install libtool

sudo apt-get install flex

sudo apt-get install g++ 

sudo apt-get install gfortran

sudo apt-get install libstdc++6

sudo apt-get install byacc

sudo apt-get install libexpat1-dev

sudo apt-get install uuid-dev

sudo apt-get install ruby

sudo apt-get install gedit

svn co https://svn.oss.deltares.nl/repos/delft3d/trunk delft3dtrunk

cd ~/delft3dtrunk/src

安装特定的库文件

需要几个特定的库文件,包括zlib,hdf5,netcdf-c,netcdf-f,mpich2

In your home directory, go to Downloads and make a directory, e.g. libraries for installation all the libraries. type in:

建立临时文件夹


cd ~/Downloads

mkdir libraries

cd libraries

编译安装库

Download the libraries codes and compile them.


      BASHRC="~/.bashrc"

这一步不是必须的,可能没用

安装zlib


v=1.2.8 

wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/zlib-${v}.tar.gz

tar -xf zlib-${v}.tar.gz && cd zlib-${v}

export ZLIB_DIR=/usr/local/zlib-${v}

这儿的zlib可以自由下载,版本不低于这个都可以,ZLIB_DIR导出共后续设置环境变量使用


./configure --prefix=$ZLIB_DIR

#sudo make check install

make

sudo make install

export PKG_CONFIG_PATH=$ZLIB_DIR/lib/pkgconfig:$PKG_CONFIG_PATH

这一步先导出吧,后续编译hdf5时指定了with-zlib的路径,所以不是必须的

安装HDF5


v=1.8.13

wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/hdf5-${v}.tar.gz

tar -xf hdf5-${v}.tar.gz && cd hdf5-${v}

echo "# HDF5 libraries for Delft3D"

export HDF5_DIR="/usr/local/hdf5-${v}"

这步的HDF5_DIR导出也是共后续使用,config的时候要指定zlib的路径


./configure --enable-shared=yes --enable-hl --prefix=$HDF5_DIR --with-zlib=$ZLIB_DIR

make -j 2 /* -j 2 的意思是使用2个核心进行编译,不需要

make

make check

sudo make install

cd ..

导出HDF5的路径,hdf5没有使用pkg-config,所以不用导出PKG_CONFIG_PATH 变量


export PATH=$HDF5_DIR/bin:$PATH

export LD_LIBRARY_PATH=$ZLIB_DIR/lib:$HDF5_DIR/lib:$LD_LIBRARY_PATH

安装netcdf c

官方帮助文档见unidata

这儿的netcdf可以使用新的版本,netcdf其实就是netcdf clibrary,也是

netcdf最基础的库,必须首先安装这个,我用了4.7.4版本的


v=4.4.0

wget http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-${v}.tar.gz

tar -xf netcdf-${v}.tar.gz && cd netcdf-${v}

echo "# NETCDF4 libraries for Delft3D"

export NETCDF4_DIR="/usr/local/netcdf-4.4.0"

编译参数给出HDF5和zlib的路径,最好先写hdf5的


export CPPFLAGS="-I$HDF5_DIR/include -I$ZLIB_DIR/include"

export LDFLAGS="-L$HDF5_DIR/lib -L$ZLIB_DIR/lib"

./configure --enable-netcdf-4 --enable-shared=yes --enable-dap --prefix=$NETCDF4_DIR

以上三行命令如果不分开写的话可以不用导出export CPPFLAGS LDFLAGS,如果单独运行了,就得导出变量

如果一起写的话如下:


CPPFLAGS="-I$HDF5_DIR/include -I$ZLIB_DIR/include" \

LDFLAGS="-L$HDF5_DIR/lib -L$ZLIB_DIR/lib" \

./configure --enable-netcdf-4 --enable-shared=yes --enable-dap --prefix=$NETCDF4_DIR

配置无误,然后编译,安装,然后导出netcdf的变量


make

make check # 这步check个人认为有必要

sudo make install

cd ..

export PATH=$PATH:$NETCDF4_DIR/bin

export LD_LIBRARY_PATH=$NETCDF4_DIR/lib:$LD_LIBRARY_PATH

export PKG_CONFIG_PATH=$NETCDF4_DIR/lib/pkgconfig:$PKG_CONFIG_PATH

安装netcdf fortran

官方帮助文档见Netcdf fortran


v=4.4.4

wget http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-${v}.tar.gz

unzip netcdf-fortran-${v}.zip && cd netcdf-fortran-${v}

export NETCDF_FOR_DIR=/usr/local/netcdf-f-${v}

此处我把netcdf fortran和netcdf c分别安装到了不同的文件夹,也可以在同一文件夹安装。


export CPPFLAGS="-I$NETCDF4_DIR/include"

export LDFLAGS="-L$NETCDF4_DIR/lib"

这两步导出了netcdf c的处理变量,安装netcdf fortran只需要netcdf c,hdf5和zlib的不需要,然后编译安装即可


./configure --prefix=$NETCDF4_DIR

make

make check # 有必要,可以发现问题

sudo make install

cd ..

安装完成后没有导出netcdf fortran的一些环境变量,是因为安装mpich不需要,这些环境变量最后统一在bashrc文件中初始化。

安装MPICH


v=3.2

wget http://www.mpich.org/static/downloads/${v}/mpich-${v}.tar.gz

tar -xzf mpich-${v}.tar.gz

cd mpich-${v}

export MPICH2_DIR="/usr/local/mpich-${v}"

./configure --prefix=$MPICH2_DIR

make

sudo make install

cd ..

export PATH=$MPICH2_DIR/bin:$PATH

export LD_LIBRARY_PATH=$MPICH2_DIR/lib:$LD_LIBRARY_PATH

export PKG_CONFIG_PATH=$MPICH2_DIR/lib/pkgconfig:$PKG_CONFIG_PATH

编译安装完库后可以将环境变量添加到shell的配置文件中,此处用的是zsh,如果是其它的手动替换。


echo "export PATH=$MPICH2_DIR/bin:$NETCDF_FOR_DIR/bin:$NETCDF4_DIR/bin:$HDF5_DIR/bin:$PATH" >> ~/.zshrc

echo "export LD_LIBRARY_PATH=$MPICH2_DIR/lib:$NETCDF_FOR_DIR/lib:$NETCDF4_DIR/lib:$HDF5_DIR/lib:$ZLIB_DIR/lib:$LD_LIBRARY_PATH" >> ~/.zshrc

echo "export PKG_CONFIG_PATH=$MPICH2_DIR/lib/pkgconfig:$NETCDF_FOR_DIR/lib/pkgconfig:$NETCDF4_DIR/lib/pkgconfig:$ZLIB_DIR/lib/pkgconfig:$PKG_CONFIG_PATH" >> ~/.zshrc

编译Delft3D源码

Go back to ~/delft3dtrunk/src, build DELFT3D source code,

Check in file ./build_ubuntu1604.sh that all references to libraries, include files, etc. match with the paths on your system, and then type in, for example:

切换到源码的文件夹,修改build.sh文件,指定正确的mpich,netcdf,hdf5及zlib的路径,然后用build.sh直接编译即可


./build_ubuntu1604.sh -gnu -64bit

另一种方法是手动config,手动编译,这样的话需要给出几个附加的环境变量。


export MPI_INCLUDE=$MPICH2_DIR/include

export MPILIBS_ADDITIONAL="-L$MPICH2_DIR/lib -lfmpich -lmpich -lmpl"

export MPIFC=$MPICH2_DIR/bin/mpif90

export MPIF77=$MPICH2_DIR/bin/mpif77

export MPICXX=$MPICH2_DIR/bin/mpicxx

编译成功后的操作

官方给出的操作如下:

After finishing the compiling, there must be a bin directory in ~/delft3dtrunk. You probably have to copy some mpi libraries to the bin directory.


cp ~/Downloads/libraries/mpich-3.2/lib/* ~/delft3dtrunk/bin/lnx64/flow2d3d/bin

cp ~/Downloads/libraries/mpich-3.2/bin/* ~/delft3dtrunk/bin/lnx64/flow2d3d/bin

cd ~/delft3dtrunk/bin/lnx64/flow2d3d/bin

chmod a+x *

官方文档给出的这两步其实是将所有运行需要的库文件都复制到了delft3d的bin文件夹,这样在运行时自动从当前文件夹查找,这是一种方法,好处是在其它机器上部署的话直接把这个文件夹拷走就行了?我自己没有试过。

另一种方法是之前已经安装了许多依赖,因此可以将之前安装的库文件添加到环境变量里,就不用复制了。执行以下代码:


sudo mkdir -p /usr/local/delft3d

sudo cp -r bin /usr/local/delft3d/

sudo cp -r lib /usr/local/delf3d/

echo "export PATH=/usr/local/delft3d/bin:$PATH"

echo "export LD_LIBRARY_PATH=/usr/local/delft3d/lib:$LD_LIBRARY_PATH"

测试

官方给出的教程:

Running examples without GUI

============================

In directory "examples\01_standard":

REMARK:

  1. In step 3, you can get the version of libraries of netcdf, netcdf-fortran, mpich2 by changing the v variable .

  2. In step 3, if it complains " The install directory can't be the same with the build or src directory", you may have to adjust the directory name and the path accordingly.

两个联系人

qinghua.ye@deltares.nl

adri.mourits@deltares.nl

上一篇下一篇

猜你喜欢

热点阅读