观潮 · 模式预报与气象 AI 观察
WRF | 库的安装
**介绍**
```bash
库的版本
mpich-3.0.4
zlib-1.2.7
libpng-1.2.50
jasper-1.900.1
hdf5-1.10.5
netcdf-c-4.8.1
netcdf-fortran-4.5.4
netcdf-cxx4-4.3.1
openmpi-3.0.0
编译器版本
编译器使用的是gun
gfortran的版本最好不要高于7,因为fortran大于7的版本中iand函数的定义变了
可能会报intmath的错。
```
**文件所用脚本**
```bash
gfortran是Fortran 95 编译器,支持Fortran95和一部分Fortran2003的功能
which gfortran
/usr/bin/gcc
which cpp
/usr/bin/cpp
gcc是GCC中的GUN C Compiler(C 编译器)
which gcc
/usr/bin/gcc
查看gcc版本
gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
```
```bash
#!/bin/bash
#系统初始编译器配置
#yum install gcc
#yum install cpp gcc-c++
#yum install gcc-gfortran
#yum install unzip bzip2 time nfs-utils perl tcsh wget m4 mlocate.x86_64 libX11-devel.x86_64 libXext-devel.x86_64 libXrender-devel.x86_64 fontconfig-devel.x86_64 curl-devel cmake subversion
source libraries.sh
mpich-3.0.4
tar xzvf mpich-3.0.4.tar.gz
cd mpich-3.0.4
./configure --prefix=$DIR/mpich
make
make install
cd ..
rm -rf mpich-3.0.4
source libraries.sh
zlib-1.2.7
tar xzvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure --prefix=$DIR/grib2
make
make install
cd ..
rm -rf zlib-1.2.7
source libraries.sh
libpng-1.2.50
tar xzvf libpng-1.2.50.tar.gz
cd libpng-1.2.50
./configure --prefix=$DIR/grib2
make
make install
cd ..
rm -rf libpng-1.2.50
source libraries.sh
jasper-1.900.1
tar xzvf jasper-1.900.1.tar.gz
cd jasper-1.900.1
./configure --prefix=$DIR/grib2
make
make install
cd ..
rm -rf jasper-1.900.1
source libraries.sh
tar xzvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure --prefix=$DIR/hdf5
make
make install
cd ..
rm -rf zlib-1.2.7
source libraries.sh
hdf5-1.10.5
tar xzvf hdf5-1.10.5.tar.gz
cd hdf5-1.10.5/
./configure --prefix=$DIR/hdf5 --with-zlib=$DIR/hdf5
make
make install
cd ..
rm -rf hdf5-1.10.5
source libraries.sh
netcdf-c-4.8.1
unzip netcdf-c-4.8.1.zip
cd netcdf-c-4.8.1/
CPPFLAGS="-I$DIR/hdf5/include" LDFLAGS="-L$DIR/hdf5/lib" ./configure --prefix=$DIR/netcdf --enable-netcdf-4 --enable-netcdf4 --enable-shared --disable-dap
make
make install
cd ..
rm -rf netcdf-c-4.8.1
source libraries.sh
netcdf-fortran-4.5.4
unzip netcdf-fortran-4.5.4.zip
cd netcdf-fortran-4.5.4/
CPPFLAGS="-I$DIR/netcdf/include" LDFLAGS="-L$DIR/netcdf/lib" ./configure --prefix=$DIR/netcdf
make
make install
cd ..
rm -rf netcdf-fortran-4.5.4
source libraries.sh
netcdf-cxx4-4.3.1
unzip netcdf-cxx4-4.3.1.zip
cd netcdf-cxx4-4.3.1/
CPPFLAGS="-I$DIR/hdf5/include -I$DIR/netcdf/include" LDFLAGS="-L$DIR/hdf5/lib -L$DIR/netcdf/lib" ./configure --prefix=$DIR/netcdf
make
make install
cd ..
rm -rf netcdf-cxx4-4.3.1
source libraries.sh
openmpi-3.0.0
tar xzvf openmpi-3.0.0.tar.tar
cd openmpi-3.0.0
./configure --prefix=$DIR/openmpi3.0.0
make
make install
cd ..
rm -rf openmpi-3.0.0
source libraries.sh
```
```bash
#!/bin/bash
注意修改路径
if [ ! -d "/home/daimu/Desktop/LIBRARIES" ];then
mkdir /home/daimu/Desktop/LIBRARIES
else
echo "文件夹已经存在"
fi
export DIR=/home//LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export CFLAGS=-m64
export F77=gfortran
export FFLAGS=-m64
#mpich
export PATH=$DIR/mpich/bin:$PATH
#zlib libpng jasper
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include
zlib
export LD_LIBRARY_PATH=$DIR/hdf5/lib:$LD_LIBRARY_PATH
hdf5
export PATH=$DIR/hdf5/bin:$PATH
export LD_LIBRARY_PATH=$DIR/hdf5/lib:$LD_LIBRARY_PATH
export HDF5_HOME=$DIR/hdf5
export HDF5_INCDIR=$HDF5_HOME/include
export HDF5_LIBDIR=$HDF5_HOME/lib
netcdf
export PATH=$DIR/netcdf/bin:$PATH
export LD_LIBRARY_PATH=$DIR/netcdf/lib:$LD_LIBRARY_PATH
export NETCDF=$DIR/netcdf
export NETCDF_INC=$NETCDF/include
export NETCDF_LIB=$NETCDF/lib
export NETCDF_INCDIR=$NETCDF/include
export NETCDF_LIBDIR=$NETCDF/lib
export NETCDFPATH=$NETCDF
openmpi
MPI_HOME=$DIR/openmpi3.0.0
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH
```
intel编译器设置
```bash
source /opt/intel2018/bin/compilervars.sh intel64
export DIR=/home/deepin/data/wmj/Daimu/LIBRARIES_intel2
export CC=icc
export CXX=icpc
export FC=ifort
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
```
Ps: 编译器和库测试
mpi和opempi
编译时的选择
serial
表示串行计算;
smpar
表示内存共享并行计算(shared memory option),即使用openMP,大部分多核电脑都支持这项功能;
dmpar 表示分布式并行计算(distributed memory option),即使用MPI 进行并行计算
,主要用在计算集群,单个电脑就没必要用了;
dm+sm 表示同时使用openMP与MPI两种并行方式.
mpich和openmpi的区别
openmpi是共享式内存结构上的并行计算,就是一台服务器上的多个线程的并行计算
mpich则是分布式内存结构的并行计算,由很多个服务器共同并行计算,是塔式结构。
上述两种并行库对模型计算有影响吗?当然是有的。WRF中的AFWA模块主要是用来诊断降水,极端天气,能见度,水汽,冰,云,热,湍流等的一些变量。如果需要打开这个模块,那么需要保证并行库是mpich的,否则会报错。