Skip to content

Latest commit

 

History

History
477 lines (268 loc) · 18.4 KB

Century5、DayCent5模型环境配置.md

File metadata and controls

477 lines (268 loc) · 18.4 KB

Century5、DayCent5模型环境配置

本教程基于ubuntu Linux系统来进行环境配置 ubuntu虚拟机安装教程

由于处于Linux环境下,一些常用的命令行指令可参考这里 常见的Linux指令

在编译Century5、DayCent5模型时需要gcc、g++环境 Ubuntu配置gcc环境

为了方便操作,这里所有的命令都是在windows的终端上使用ssh连接虚拟后进行指令输入 ubuntu启用ssh

一、准备

在Windows的终端上使用ssh连接虚拟机

image-20240222134718071

为了方便管理,后续的文件上传都会指定一个文件夹这里使用的是 /home/monarch/data 这是我monarch 目录下的一个空目录,需要自己新建,大家可以随意指定

# 切换到指定目录
cd /home/monarch/data
# 查看当前目录下文件 注:我的是空路径
ls

image-20240222135054391

二、第三方库

DayCent5模型的编译需要netcdf的支持,而netcdf需要hdf5、libxml2、m4、curl的支持,并且本模型还有并行计算的版本,所以这里考虑安装openmpi库来构建netcdf

由于安装的路径涉及系统路径,所以本教程是以root方式登录的终端

1、openmpi 编译安装

openmpi下载:openmpi download

image-20240222134034054

用windows下载好压缩包后,在下载路径下打开终端(cmd),使用scp命令传输文件

image-20240222134320460

image-20240222135158688

# 查看当前目录下文件
dir

image-20240222135249685

# 传输文件到虚拟机 会让你输入用户密码
scp openmpi-5.0.2.tar.gz [email protected]:/home/monarch/data

image-20240222135501048

切换到连接虚拟机的终端,使用ls命令查看文件

image-20240222135539618

说明文件已经传输完毕,接下来就是解压

# 解压文件
tar -xzvf openmpi-5.0.2.tar.gz
# 查看文件
ls

image-20240222135653884

得到openmpi-5.0.2目录,进入这个目录,查看文件

cd openmpi-5.0.2
ls

image-20240222135901720

configure文件介绍:是一个可执行文件,是用于配置make编译的一些参数,可以指定软件的安装位置和其他的参数,使用configure --help可以查看这个可执行文件有哪些参数

image-20240222140238323

执行下面的命令,然后等待结果

./configure --prefix=${GCC_PACKAGE_HOME}/package --bindir=${GCC_PACKAGE_HOME}/bin --includedir=${GCC_PACKAGE_HOME}/include --libdir=${GCC_PACKAGE_HOME}/lib --disable-mpi-f77 --disable-mpi-f90 --enable-static --enable-shared --enable-mpi-io

重要参数:

  • --prefix: 指定安装路径
  • --bindir: 指定可执行文件安装路径
  • --includedir: 指定头文件安装路径
  • --libdir: 指定二进制文件(静态库和动态库)文件安装路径
  • --enable-static :生成静态链接库
  • --enable-shared:生成动态链接库

image-20240222142537254

执行结束

image-20240222142600751

使用ls命令查看文件

image-20240222142644496

这个Makefile文件就是刚刚configure脚本得到的结果,然后我们就可以用make指令去编译这个软件

# make 是linux中常用的编译指令,它需要有Makefile才能知道具体需要怎么编译
make -j 4
# -j 参数是指定编译时的线程数,这里指定4个线程

image-20240222143031330

开始编译openmpi这个第三方库,编译需要一定的时间,我们可以先去把其他第三方库都下载下来然后传输到虚拟机并解压

编译完成后使用下面的指令,将编译的结果安装到之前配置的gcc第三方库的位置

make installl

image-20240222145331726

安装完成后,我们进入examples目录下,验证安装结果

image-20240222145600234

image-20240222145650087

先直接make编译

image-20240222145847955

然后使用下面的命令来并行运行,得到如下结果说明安装成功

mpirun --allow-run-as-root -np 4 hello_c 

image-20240222150051242

2、zlib安装

zlib下载:zlib download

image-20240222143458867

使用scp命令上传到虚拟机,并解压

image-20240222143758443

进入zlib-1.3.1目录,查看文件

image-20240222143836345

同样用cnofigure脚本进行构建Makefile,具体命令如下

./configure --prefix=${GCC_PACKAGE_HOME}/package --includedir=${GCC_PACKAGE_HOME}/include --libdir=${GCC_PACKAGE_HOME}/lib

image-20240222144003824

然后用make编译

image-20240222144040409

最后使用make install 进行安装

image-20240222144110220

3、HDF5安装

HDF5下载:HDF5 download

image-20240222144555587

image-20240222144600790

image-20240222144635499

image-20240222144638710

同理,下载后上传到虚拟机并解压

image-20240222144849549

进入文件夹,查看文件

image-20240222144924057

执行configure命令,这一步之前首先要把openmpi安装好

./configure --prefix=${GCC_PACKAGE_HOME}/package --bindir=${GCC_PACKAGE_HOME}/bin --includedir=${GCC_PACKAGE_HOME}/include --libdir=${GCC_PACKAGE_HOME}/lib --with-zlib=${GCC_PACKAGE_HOME}/include --enable-static --enable-shared --disable-fortran CC=${GCC_PACKAGE_HOME}/bin/mpicc  CFLAGS='-I${GCC_PACKAGE_HOME}/include -fPIC' LDFLAGS='-L${GCC_PACKAGE_HOME}/lib'
  • CC: 指定c语言编译器,这里指定的时openmpi中的mpicc

image-20240222150157846

执行结果

image-20240222150353502

同上,使用make编译安装,最终结果

image-20240222151237113

4、netcdf安装

netcdf下载: netcdf download

image-20240222150900101

下载,上传,解压

image-20240222151131535

进入文件夹,查看文件,运行configure指令

./configure --prefix=${GCC_PACKAGE_HOME}/package --bindir=${GCC_PACKAGE_HOME}/bin --includedir=${GCC_PACKAGE_HOME}/include --libdir=${GCC_PACKAGE_HOME}/lib --disable-examples --disable-hdf4-file-tests --disable-dap --disable-v2 --enable-netcdf4 CC=${GCC_PACKAGE_HOME}/bin/mpicc CFLAGS='-I${GCC_PACKAGE_HOME}/include -fPIC' LDFLAGS='-L${GCC_PACKAGE_HOME}/lib'

image-20240222151336932

这时会报错

image-20240222151420846

需要我们去安装libxml2,运行以下指令

apt -y install libxml2-dev

image-20240222151812866

然后再执行configure命令

报错

image-20240222151943732

需要m4,执行下列指令安装

apt -y install m4

image-20240222152055442

再次执行configure命令,报错

image-20240222152142591

执行下列指令安装curl

apt -y install libcurl4-openssl-dev

image-20240222152510270

执行configure命令,这一次不会报错了,可以得到最终结果

image-20240222152609280

使用make编译并安装

image-20240222152726122

三、模型的编译

我们打开模型的目录

image-20240222161133188

其中IRC_source.zip是要上传到虚拟机用来编译的文件,而DayCent_Manual_full_05.02.108-1.pdf是模型的介绍,包含模型的输入输出

用scp把IRC_source.zip上传到虚拟机

image-20240222161424734

然后执行命令

# tar 只能解压 tar或tar.gz文件,zip文件需要unzip来解压
unzip IRC_source.zip

image-20240222161606947

进入IRC目录,查看文件,有一个rev974目录,进入这个目录,查看文件

image-20240222161734551

  • Ecosystem目录:是模型的源码目录,后续生成的可执行文件也在这个目录中
  • build-century5.sh: 是构建Century5模型的脚本
  • build-daycent5.sh: 构建DayCent5模型的脚本

1、Century5 模型构建

直接运行build-century5.sh脚本,等待运行结果

./build-century5.sh

image-20240222162034253

编译失败,主要集中在以下两个错误

image-20240223165931366

image-20240223170049984

第一个错误是由于我们的g++版本为13.2.0,默认使用的是c++17规范,而显然模型源码与这个规范相冲突,解决方法是在模型编译参数中添加 -std=c++98 让其按照c++98的规范来编译源码,需要修改以下几个文件,都是使用vim来打开

vim Numerical/blitz/make.gxx.sh

image-20240223170526121

修改为,然后保存退出

image-20240223170604365

vim Ecosystem/Weather/projects/gxx/Makefile.WeatherDataFramework.gxx

在45行的位置,修改C_FLAGS参数

image-20240223170732286

修改为,保存并退出

image-20240223170817390

vim Ecosystem/Weather/projects/gxx/Makefile.WeatherLib.gxx

在40行的位置

image-20240223170958920

修改为

image-20240223171035085

第二个错误是由于源码文件WeatherTransform.h在调用模板函数时没有显示的声明,所以需要修改该文件,在函数前加上 template 来显示声明

vim Ecosystem/Weather/src/WeatherTransform.h

在118行的位置

image-20240223171415063

修改为

image-20240223171451355

然后再执行build-century5.sh脚本,等待结果

image-20240223172724444

编译成功,这时会在 Ecosystem/Century5/bin 目录下生成century.gxx.exe,我们进入这个路径,查看文件

image-20240223172816702

执行

./century.gxx.exe

会显示模型有哪些参数,这些参数的解释,并给出一个例子

image-20240223173044785

在当前目录下,还有一个 examples 文件夹,里面有两个文件夹,一个是日尺度的数据,一个是月尺度的数据,我们进入月尺度的目录,查看文件

image-20240223173613701

其中以 .100为后缀的就是站点文件,.sch为管理文件,我们以c3grs.100和c3grs.sch为例运行以下century5模型

首先我们先创建一个result文件夹作为输出路径

image-20240223173936498

然后执行下面的命令

../../century.gxx.exe -s c3grs.100 -m c3grs.sch -o result/c3grs -ts -ar -d1
  • ../../century.gxx.exe : 表示指定上两级目录下的century.gxx.exe模型可执行文件
  • -s c3grs.100 :指定c3grs.100为站点文件
  • -m c3grs.sch: 指定3grs.sch为管理文件
  • -o result/c3grs: 指定result/为输出路径,并指定c3grs为输出文件前缀
  • -ts : 表示输出文件为csv格式
  • -ar : 表示输出文件为替换
  • -d1: 显示程序运行时间

image-20240223174440394

执行完成,得到的结果在result目录中,进入result目录,查看文件

image-20240223174531571

里面包含六个csv文件和一个日志文件log,模型演示就到这里了

2、DayCent5模型构建

直接执行脚本 build-daycent5.sh,由于在构建Century5模型时已经完成了对源码的修改,所以现在应该可以直接成功构建该模型

image-20240223174900022

image-20240223175459319

构建完成,同样在Ecosystem/Century5/bin目录下会生成一个可执行文件daycent.gxx.exe

image-20240223175608863

模型具体的使用方式由于没有具体的例子,所以就不作演示了

现在,模型的编译与构建就完成了,具体的使用方法需要去参考模型中的介绍文件

image-20240223175838162

四、模型设置别名方便使用

由于模型在一个指定的目录中,每次调用可能有很长的文件路径,所以可以使用别名的方式来方便调用亦或者将模型可执行文件所在文件夹加入系统环境路径中

我这里的模型路径在 /home/monarch/data/IRC/rev974/Ecosystem/Century5/bin 路径下所以可以如下设置

alias century5='/home/monarch/data/IRC/rev974/Ecosystem/Century5/bin/century.gxx.exe'
alias daycent5='/home/monarch/data/IRC/rev974/Ecosystem/Century5/bin/daycent.gxx.exe'

这只是临时的终端配置,如果要永久生效,可以将上述命令写入/etc/profile配置文件中,这时,不管我们在那个路径,都可以使用century5和daycent5来调用模型

例如我在用户文件夹下调用daycent5模型

image-20240223181014301