CESM移植记录

2023.8.15 更新
以下记录可能偏旧,最近在移植时有所更新,最新移植记录可参考 CESM2.1.3 移植记录

引言

8月初花了10天左右把CESM移植到HPC服务器上,现在因为登录节点和计算节点的不同,一些软件目录不共享,CESM运行有点问题,同时因为有点完美主义,对原来的目录结构不太满意,所以重新移植了一遍到指定的目录下。

第一次移植时遇到很多困难,所幸一路搜索各种博客和论坛都能找到解决方案。感念大家的分享精神,这次在移植的过程中也特意做个记录,给大家做个参考。

需要的环境和一些基础软件比如python,git什么的我就不多说了,可以参考别的博客。

我在安装的过程中是把命令写入shell脚本中执行的,这样基本上一路执行安装脚本,然后配置环境变量就可以完成安装了。下面分块把具体执行的命令列出来,并在我的能力范围内解释一下一些命令的作用方便理解。

服务器Linux版本:CentOS7
编译器:intel编译器

安装包存放路径是 /home/packages/installation_cesm/
安装目录是 /home/software/libcesm/
源代码存放目录是 /home/model/cesm/my_cesm_sandbox

在最后会把脚本和安装包以及CESM的源代码打包放在网盘里面供大家直接下载。

软件安装

1. perl5
perl5是CESM里面比较重要的一个包,我这次重装就是因为在运行一些复杂点的组件时开始调用perl发现找不到,而最开始是用yum装在默认路径下的。问了老师才知道计算节点上只共享/home目录,因此重新从源代码编译,方便指定路径安装。

01_perl5.sh

export CC=icc
export CXX=icpc
export CPP='icc -E'
export CXXCPP='icpc -E'
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPPFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export FCLAGS='-O3 -xHost -ip -no-prec-div -static-intel'

DIR=/home/software/libcesm/perl5

tar -xvf perl-5.28.0.tar.gz
cd perl-5.28.0
./Configure -des -Dusethreads -Dprefix=${DIR}
make
make test
make install

这里开头的几个环境变量设置是我从老师原有的几个安装脚本中copy过来的,各自的含义就是配置各个编译命令用什么编译器,更深入的我也不是很了解,可以自行查询。

其余的就是解压安装包,然后一步步通过make安装。

装好后在 ~/.bashrc 中配置perl5环境变量。然后source一下或者重启终端,用env测试一下看看有没有添加成功。

# perl5
export PATH=/home/software/libcesm/perl5/bin:$PATH

perl --version 验证

This is perl 5, version 28, subversion 0 (v5.28.0) built for x86_64-linux-thread-multi

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

2. cmake
cmake同上。
这里用configure最后好像也是会调用bootstrap,所以参考网上的直接用bootstrap设置了。

02_cmake.sh

export CC=icc
export CXX=icpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'

DIR=/home/software/libcesm/cmake

tar -xvf cmake-2.8.12.2.tar.gz
cd cmake-2.8.12.2
./bootstrap --prefix=${DIR}
make
make install

配置cmake环境变量。

# cmake
export PATH=/home/software/libcesm/cmake/bin:$PATH

cmake --version 验证

cmake version 2.8.12.2

3. mpich
开头的unset同样是copy过来的,因为没什么影响也懒得删了,根据自己系统配置来就行。

03_mpich.sh

unset F90
unset F90FLAGS

export CC=icc
export CXX=icpc
export CPP='icc -E'
export CXXCPP='icpc -E'
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPPFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export FCLAGS='-O3 -xHost -ip -no-prec-div -static-intel'

DIR=/home/software/libcesm/mpich

tar -xvf mpich-3.4.2.tar.gz
cd mpich-3.4.2
./configure --prefix=${DIR}
make
make check
make install

装完后配置mpich环境变量。

# mpich
export PATH=/home/software/libcesm/mpich/bin:/home/software/libcesm/mpich/include:$PATH
export LD_LIBRARY_PATH=/home/software/libcesm/mpich/lib:$LD_LIBRARY_PATH

4. zlib
这个比较简单,安装也很快。

04_zlib.sh

export CC=icc
export CXX=icpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'

DIR=/home/software/libcesm/zlib

tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=${DIR}
make
make check
make install

这个环境变量看别的教程好像没有配置,我也不知道要不要,为了统一索性配上了。

# zlib
export PATH=/home/software/libcesm/zlib/include:$PATH
export LIBRARY_PATH=/home/software/libcesm/zlib/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/software/libcesm/zlib/lib:$LD_LIBRARY_PATH

5. hdf5
这个比较重要也很容易配错,中间报错的解决方法就各自寻找吧,第一次配的时候我也忘记记录了。
编译器设置要带上上面刚装的 mpi,如上各设置所示。
在配置文件中还要给出zlib所在的目录 --with-zlib=/home/software/libcesm/zlib

05_hdf5.sh

export CC=mpiicc
export CXX=mpiicpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=mpiifort
export FC=mpiifort
export F90=mpiifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'

DIR=/home/software/libcesm/hdf5

tar -xvf hdf5-1.10.4.tar.gz
cd hdf5-1.10.4
./configure --with-zlib=/home/software/libcesm/zlib --prefix=${DIR} --enable-fortran --enable-fortran2003 -enable-parallel --with-pic
make
make check
make install
cd ..

配置hdf5环境变量。

# hdf5
export PATH=/home/software/libcesm/hdf5/bin:/home/software/libcesm/hdf5/include:$PATH
export LD_LIBRARY_PATH=/home/software/libcesm/hdf5/lib:$LD_LIBRARY_PATH

6. pnetcdf
这里CFLAGS CXXFLAGS等参数设置添加了-fPIC,不加这个的话在linux64系统下编译似乎会出错,加上就没问题了。
下面./configure--enable-relax-coord-bound好像是让编译条件放宽一点?默认是另外一个设置,在别的博客上见到过,不过现在找不到了,第一次安装的时候加上这个参数就没报错了。

06_pnetcdf.sh

export CC=mpiicc
export CXX=mpiicpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel -fPIC'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel -fPIC'
export F77=mpiifort
export FC=mpiifort
export F90=mpiifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel -fPIC'
export CPP='mpiicc -E'
export CXXCPP='mpiicpc -E'

DIR=/home/software/libcesm/pnetcdf

tar -xvf pnetcdf-1.12.0.tar.gz
cd pnetcdf-1.12.0
./configure --prefix=${DIR} --enable-relax-coord-bound

make
make check
make install

配置pnetcdf环境变量。

# pnetcdf
export PATH=/home/software/libcesm/pnetcdf/bin:/home/software/libcesm/pnetcdf/include:$PATH
export LD_LIBRARY_PATH=/home/software/libcesm/pnetcdf/lib:$LD_LIBRARY_PATH
export MANPATH=/home/software/libcesm/pnetcdf/share/man:$MANPATH

7. netcdf-c
netcdf从某个版本开始分成了netcdf-c和netcdf-fortran,要分别安装,先装netcdf-c。
注意,两个要装在同一目录下
在这里要给出hdf5和pnetcdf的路径,所以安装顺序不能乱改。

07_netcdf_c.sh

export CC=mpiicc
export CXX=mpiicpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=mpiifort
export FC=mpiifort
export F90=mpiifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'
export CPPFLAGS='-I/home/software/libcesm/hdf5/include -I/home/software/libcesm/pnetcdf/include'
export LDFLAGS='-L/home/software/libcesm/hdf5/lib -L/home/software/libcesm/pnetcdf/lib'

DIR=/home/software/libcesm/netcdf

tar -xvf netcdf-c-4.7.4.tar.gz
cd netcdf-c-4.7.4

./configure --prefix=${DIR} --enable-pnetcdf
make
make check
make install

配置netcdf环境变量。

# netcdf
export PATH=/home/software/libcesm/netcdf/bin:/home/software/libcesm/netcdf/include:$PATH
export LIBRARY_PATH=/home/software/libcesm/netcdf/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/software/libcesm/netcdf/lib:$LD_LIBRARY_PATH
export MANPATH=/home/software/libcesm/netcdf/share/man:$MANPATH

nc-config --all 验证

This netCDF 4.7.4 has been built with the following features: 

  --cc            -> mpiicc
  --cflags        -> -I/home/software/libcesm/netcdf/include -I/home/software/libcesm/hdf5/include -I/home/software/libcesm/pnetcdf/include
  --libs          -> -L/home/software/libcesm/netcdf/lib -lnetcdf
  --static        -> -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl 

  --has-c++       -> no
  --cxx           -> 

  --has-c++4      -> no
  --cxx4          -> 

  --has-fortran   -> yes
  --fc            -> mpiifort
  --fflags        -> -I/home/software/libcesm/netcdf/include -I/home/software/libcesm/netcdf/include
  --flibs         -> -L/home/software/libcesm/netcdf/lib -lnetcdff
  --has-f90       -> 
  --has-f03       -> yes

  --has-dap       -> yes
  --has-dap2      -> yes
  --has-dap4      -> yes
  --has-nc2       -> yes
  --has-nc4       -> yes
  --has-hdf5      -> yes
  --has-hdf4      -> no
  --has-logging   -> no
  --has-pnetcdf   -> yes
  --has-szlib     -> no
  --has-cdf5      -> yes
  --has-parallel4 -> yes
  --has-parallel  -> yes

  --prefix        -> /home/software/libcesm/netcdf
  --includedir    -> /home/software/libcesm/netcdf/include
  --libdir        -> /home/software/libcesm/netcdf/lib
  --version       -> netCDF 4.7.4

注意这里 --has-nc4 -> yes ,如果netcdf版本较低,可能这个参数是 no,然后运行cesm就会报错,这个错误第一次移植时花了一整天才在论坛上找到解决方案,很坑。

8. netcdf-fortran
接下来装netcdf-f。
注意,两个要装在同一目录下
参数中除了之前的hdf5和pnetcdf外,还要带上上一步的netcdf-c。

08_netcdf_f.sh

export CC=mpiicc
export CXX=mpiicpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=mpiifort
export FC=mpiifort
export F90=mpiifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'
export CFLAGS=$(nc-config --cflags)
export CPPFLAGS='-I/home/software/libcesm/netcdf/include -I/home/software/libcesm/hdf5/include -I/home/software/libcesm/pnetcdf/include'
export LDFLAGS='-L/home/software/libcesm/netcdf/lib -L/home/software/libcesm/hdf5/lib -L/home/software/libcesm/pnetcdf/lib'

DIR=/home/software/libcesm/netcdf

tar -xvf netcdf-fortran-4.5.3.tar.gz
cd netcdf-fortran-4.5.3
./configure --prefix=${DIR} --enable-pnetcdf
make
make check
make install

由于装在同一目录,环境变量在netcdf-c时已经配置过了,就不用再配了

验证 nf-config --all

This netCDF-Fortran 4.5.3 has been built with the following features: 

  --cc        -> mpiicc
  --cflags    -> -I/home/software/libcesm/netcdf/include -I/home/software/libcesm/netcdf/include -I/home/software/libcesm/hdf5/include -I/home/software/libcesm/pnetcdf/include

  --fc        -> mpiifort
  --fflags    -> -I/home/software/libcesm/netcdf/include -I/home/software/libcesm/netcdf/include
  --flibs     -> -L/home/software/libcesm/netcdf/lib -lnetcdff 
  --has-f90   -> 
  --has-f03   -> yes

  --has-nc2   -> yes
  --has-nc4   -> yes

  --prefix    -> /home/software/libcesm/netcdf
  --includedir-> /home/software/libcesm/netcdf/include
  --version   -> netCDF-Fortran 4.5.3

9. lapack blas
这两个是线性代数的计算包。
blas包含在lapack的安装包内,但默认不编译,所以要修改 Makefile 文件让它编译。
如下面注释所示,然后通过 make 安装,再进入到LAPACKE文件夹中再 make 一次,最后把产生的 .h 文件和 .a 文件都放到安装目录里面就可以了。

09_lapack_blas.sh

export CC=icc
export CXX=icpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'

DIR=/home/software/libcesm/lapack


tar -xvf lapack-3.10.1.tar.gz
cd lapack-3.10.1
cp INSTALL/make.inc.ifort make.inc

# 修改Makefile文件使其编译blas
sed -i '12s/^/#/g'  Makefile
sed -i '13s/#//g'  Makefile
# /*******************************************************************
# .PHONY: lib
# lib: lapacklib tmglib
# #lib: blaslib variants lapacklib tmglib
# 变成
# .PHONY: lib
# #lib: lapacklib tmglib
# lib: blaslib variants lapacklib tmglib
# *******************************************************************/

make
cd LAPACKE
make

mkdir ${DIR}
mkdir ${DIR}/include
mkdir ${DIR}/lib

cp include/*.h ${DIR}/include/

cd ..
cp *.a ${DIR}/lib/

配置环境变量

# lapack
export PATH=/home/software/libcesm/lapack/include:$PATH
export LD_LIBRARY_PATH=/home/software/libcesm/lapack/lib:$LD_LIBRARY_PATH

10. esmf
这个的重要程度就不必多说了,看网上说他的安装文件和安装位置必须在同一个目录下,因此和上面的软件安装略有不同,要把安装包解压到安装目录里面,之后再直接 make 就可以了。

10_esmf.sh

ESMF_HOME=/home/software/libcesm/esmf/esmf-ESMF_7_1_0r
export ESMF_DIR=$ESMF_HOME
export ESMF_COMM=intelmpi
export ESMF_COMPILER=intel
export ESMF_ABI=64
export ESMF_INSTALL_PREFIX=/home/software/libcesm/esmf/esmf_install
export ESMF_NETCDF_INCLUDE=/home/software/libcesm/netcdf/include
export ESMF_NETCDF_LIBPATH=/home/software/libcesm/netcdf/lib
export ESMF_NETCDF_LIBS="-lnetcdf -lnetcdff"

export ESMF_CCOMPILER="mpiicc -cc=icc"
export ESMF_CXXCOMPILER=mpiicpc
export ESMF_CXXLINKER=mpiicpc
export ESMF_F90COMPILER=mpiifort
export ESMF_F90LINKER=mpiifort

unzip esmf-ESMF_7_1_0r.zip -d /home/software/libcesm/esmf/
cd $ESMF_DIR
make
make check 
make install 

软件安装到这里就基本完成了,下面是配置cesm的运行环境。

cesm源代码移植

cesm源代码在github上下载,然后再根据里面的external的需求来继续clone到本地,在这里之前已经挂梯子装好了,文章最后会把装好依赖库的源码打包到网盘。

源码在服务器上的路径 /home/model/cesm/my_cesm_sandbox

在源码能完整clone到本地的情况下,这部分就主要是配置 config_machines.xmlconfig_compilers.xmlconfig_batch.xml 这三个xml文件。
然后在自己HOME目录下新建文件夹 .cime ,将这三个文件放到这个目录下,用来覆盖cesm原有的配置。
这里直接列出来我自己的配置。
要是想自己写的话可以参考cesm源代码里面 /home/model/cesm/my_cesm_sandbox/cime/config/cesm/machines 下的这三个文件,但不建议直接修改里面的东西。

  1. config_machines.xml

简单说一下我的配置思路,<machine> 是机器的名称,可以理解为方便模式识别的id。
下面就是一些系统的配置,其中,
<COMPILERS> 要与在 config_compilers.xml 中写的编译器名称要一样,这样才能将machinecompiler绑定起来。
<SAVE_TIMING_DIR> 之后的这几个标签,我的思路是输出文件放在 cesm_files 这个文件夹下,其后各种子文件夹是看别人博客模仿着写的,可以根据自己需要修改。
然后模式的输入数据 <DIN_LOC_ROOT><DIN_LOC_ROOT_CLMFORC> 统一放在cesm源码里面,方便大家统一调用,避免重复下载。
<BATCH_SYSTEM> 填入的是作业系统的名称( config_batch.xml 中),我虽然用了slurm作业系统,但没搞明白这里的作业提交逻辑,因此这里写的是none ,后续再自己写slurm脚本,利用sbatch进行提交作业。
<MAX_TASKS_PER_NODE> 是CPU的核数,根据自己系统进行设置。
<environment_variables> 是导入环境变量,一般来说再在 ~/.bashrc 里面写过就不用了,但我看别人都有写,为了保险,就写上了。

注意,其中的 $HOME 请替换为自己的目录,cesm在读取这个文件时似乎不会转义,因此写绝对路径,不要用变量代替。

<?xml version="1.0"?> 
<config_machines version="2.0">
  <machine MACH="daqi">
    <DESC>test</DESC>
    <NODENAME_REGEX>ln9.*</NODENAME_REGEX>
    <OS>LINUX</OS>
    <COMPILERS>intel</COMPILERS>
    <MPILIBS>intelmpi</MPILIBS>
    <PROJECT>none</PROJECT>
    <SAVE_TIMING_DIR>$HOME/cesm_files/timing</SAVE_TIMING_DIR>
    <CIME_OUTPUT_ROOT>$HOME/cesm_files/output</CIME_OUTPUT_ROOT>
    <DIN_LOC_ROOT>/home/model/cesm/my_cesm_sandbox/inputdata</DIN_LOC_ROOT>
    <DIN_LOC_ROOT_CLMFORC>/home/model/cesm/my_cesm_sandbox/inputdata/atm/datm7</DIN_LOC_ROOT_CLMFORC>
    <DOUT_S_ROOT>$HOME/cesm_files/output/$CASE</DOUT_S_ROOT>
    <BASELINE_ROOT>$HOME/cesm_files/output/baselines</BASELINE_ROOT>
    <CCSM_CPRNC>$HOME/cesm_files/output/cprnc</CCSM_CPRNC>
    <GMAKE>make</GMAKE>
    <GMAKE_J>8</GMAKE_J>
    <BATCH_SYSTEM>none</BATCH_SYSTEM>
    <SUPPORTED_BY>@sysu.edu.cn</SUPPORTED_BY>
    <MAX_TASKS_PER_NODE>20</MAX_TASKS_PER_NODE>
    <MAX_MPITASKS_PER_NODE>20</MAX_MPITASKS_PER_NODE>
    <PROJECT_REQUIRED>FALSE</PROJECT_REQUIRED>
    <mpirun mpilib="default">
      <executable>mpirun</executable>
        <arguments>
          <arg name="num_tasks" > -n {{ total_tasks }}</arg>
        </arguments>
    </mpirun>
    <module_system type="none"></module_system>
    <environment_variables>
      <env name="OMP_STACKSIZE">256M</env>
      <env name="NETCDF_PATH">/home/software/libcesm/netcdf</env>
      <env name="HDF5_PATH">/home/software/libcesm/hdf</env>
      <env name="ZLIB_PATH">/home/software/libcesm/zlib</env>
      <env name="ESMF_PATH">/home/software/libcesm/esmf/esmf_install</env>
    </environment_variables>
  </machine>
</config_machines>
  1. config_compilers.xml

这里就是配置各种编译器设置,参数,环境变量了,看标签名就挺好理解的,就不多说了。
注意这里 <compiler COMPILER="intel" MACH="daqi"> 我是避免出意外刻意写得这么绑定的,宽松一些的可以参考cesm源码里面标准的 config_compilers.xml

<?xml version="1.0"?>
<config_compilers version="2.0">
  <compiler COMPILER="intel" MACH="daqi">
    <CPPDEFS>
      <append>-DLINUX</append>
    </CPPDEFS>
    <LDFLAGS>
      <append compile_threaded="TRUE"> -fopenmp </append>
      <append> -mkl </append>
    </LDFLAGS>
    <CFLAGS>
      <append DEBUG="FALSE"> -O2 </append>
    </CFLAGS>
    <CONFIG_ARGS>
      <base> --host=Linux </base>
    </CONFIG_ARGS>
    <FFLAGS>
      <append DEBUG="FALSE"> -O2 </append>
    </FFLAGS>

    <MPICC> mpiicc </MPICC>
    <MPICXX> mpiicpc </MPICXX>
    <MPIFC> mpiifort </MPIFC>
    <SCC> icc </SCC>
    <SCXX> icpc </SCXX>
    <SFC> ifort </SFC>
    <ESMF_LIBDIR>/home/software/libcesm/esmf/esmf_install/bin/binO/Linux.intel.64.intelmpi.default</ESMF_LIBDIR>
    <MPI_PATH>/home/software/libcesm/mpich</MPI_PATH>
    <NETCDF_PATH>/home/software/libcesm/netcdf</NETCDF_PATH>
    <PNETCDF_PATH>/home/software/libcesm/pnetcdf</PNETCDF_PATH>

    <SLIBS>
      <append>-L/home/software/libcesm/netcdf/lib -lnetcdf -lnetcdff -L/home/software/libcesm/hdf5/lib -lhdf5 -lhdf5_hl -L/home/software/libcesm/zlib/lib -lz -L/home/software/libcesm/lapack/lib -llapack</append>
    </SLIBS>
  </compiler>
</config_compilers>
  1. config_batchs.xml
    因为不用他的作业系统,所以这里直接删掉全部内容,设为 none
<?xml version="1.0"?>
<config_batch version="2.0">
  <batch_system MACH="daqi" type="none" >
  </batch_system>
</config_batch>

cesm运行

cesm的运行基本就是四个步骤:(1)创建;(2)设置算例;(3)编译;(4)运行。
如果前面都弄好了的话在这里基本是不会有什么问题的。
下面就演示一下我自己创建算例的过程,给大家做个参考。

  1. 创建算例
    首先进入cesm源码的 cime/scripts 目录:
cd /home/model/cesm/my_cesm_sandbox/cime/scripts

然后调用 create_new_case 创建新算例

./create_newcase --case $HOME/cases/compset_QPC6 --compset QPC6 --res f09_f09_mg17 --mach daqi

这里,--case 是指定算例的路径和名字,默认放在 scripts 路径下,--compset 是基础组件的名字,--res 是设置分辨率, --mach 是调用哪台mach的配置。
compset和res的选择可以参考官方指南

注意,我这个组件和分辨率的配置是官方经过科学验证后认可的配置,如果是自己搭配的组件和分辨率没经过官方科学验证的话,在最后需要加上 --run-unsupported 参数。

  1. 设置算例
    进入我们新建的算例所在的目录:
cd $HOME/cases/compset_QPC6

在这里,可以通过 xmlchange 改写一些参数的设置,设置完之后
输入命令设置算例:

./case.setup

这一步基本不会有什么问题,基本就是走个过场(

  1. 编译算例
    这一步就很关键了,错误基本都出在这里,在这一步就是编译算例的运行环境。
    直接调用命令
./case.build

程序就会自动编译各个组件,中间报错就各自寻找解决方案吧,我遇到的太多了(心累
最后看到程序输出

MODEL BUILD HAS FINISHED SUCCESSFULLY

就代表模型的移植基本成功了。

  1. 运行算例
    这一步就是让模型开始运行推演了,
    调用命令
./case.submit

之后程序会自动检测需要哪些输入数据,然后自行下载,如果模型比较复杂的话,需要的输入数据会很多,需要下载比较长的时间。
在所有输入数据都下载完毕后,程序就会自己开始运算。

写在最后

移植cesm真的花了挺长时间,幸好网络上有很多前辈留下的经验帖和移植记录作为参考、以及官方论坛上的问答,让我一直能够解决中途遇见的各种bug。
在此感谢以下几篇博客的作者:

  1. 【教程】在天河上安装、移植并验证CESM2.2.0
  2. cesm2(clm5.0)移植方法
  3. CESM2笔记——porting-新机器移植
  4. 安装CESM记录
  5. CESM 2.1.1 移植指南(CentOS 7.6)
  6. CESM2运行简明教程

以及特别感谢官方论坛的各位:
DiscussCESM Forums

在论坛上基本上所有碰见的报错都可以找到类似的问题,里面的人也都会很热心地解答,他们的讨论过程给我调试错误提供了很多灵感,大家要是移植过程中遇到什么 错误也可以先上去搜一搜。

最后,真的十分感谢大家的无私奉献精神,让我获益匪浅,也让我萌生了写下这篇博客的念头,希望这篇博客能够帮到正在移植cesm的您。

附录

  1. 安装包
    链接:https://pan.baidu.com/s/1za2ZP1V62QWGGb_8rpxaNw
    提取码:hu7j

  2. cesm源码
    链接:https://pan.baidu.com/s/1M6l-trumaqswWw3JwSs3nA?pwd=aqyj
    提取码:aqyj

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值