一些基础论坛知识
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":
-
Execute script "run_flow2d3d.sh"
Parallel:
-
Depending on your system settings, you might need to change the script "run_flow2d3d_parallel.sh"
-
Execute script "run_flow2d3d_parallel.sh"
-
REMARK:
-
In step 3, you can get the version of libraries of netcdf, netcdf-fortran, mpich2 by changing the v variable .
-
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.
网友评论