---
title: 运行和验证
description: "1. 使用PuTTY工具，以root用户登录服务器。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/openmind_kunpengcesm_02_0031.html
sourcePath: /source/zh/kunpenghpcs/hpcindapp/prtg-osc/openmind_kunpengcesm_02_0031.html
indexId: 1f01a3870f5a7df03e23ea547bfb0f70718284446a4b4320fb825a6803998c9a75
---
# 运行和验证

#### 单节点

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令修改“config_machines.xml”文件。

  a. 打开“config_machines.xml”文件。

```
vi
/path/to/CESM
/CESM-release-cesm2.1.3/cime/config/cesm/machines/config_machines.xml
```


  b. 按“i”进入编辑模式，修改如下粗体内容。

```
<machine MACH="centos7-linux">
<DESC>
Example port to centos7 linux system with gcc, netcdf, pnetcdf and mpich
using modules from http://www.admin-magazine.com/HPC/Articles/Environment-Modules
</DESC>
<NODENAME_REGEX>n2</NODENAME_REGEX>
<OS>LINUX</OS>
<PROXY> https://howto.get.out </PROXY>
<COMPILERS>gnu</COMPILERS>
<MPILIBS>openmpi</MPILIBS>
<PROJECT>none</PROJECT>
<SAVE_TIMING_DIR> </SAVE_TIMING_DIR>
<CIME_OUTPUT_ROOT>/CESMroot/cesm/scratch</CIME_OUTPUT_ROOT>
<DIN_LOC_ROOT>/CESMroot/cesm/inputdata</DIN_LOC_ROOT>
<DIN_LOC_ROOT_CLMFORC>/CESMroot/cesm/inputdata/lmwg</DIN_LOC_ROOT_CLMFORC>
<DOUT_S_ROOT>/CESMroot/cesm/archive/$CASE</DOUT_S_ROOT>
<BASELINE_ROOT>/CESMroot/cesm/cesm_baselines</BASELINE_ROOT>
<CCSM_CPRNC>/CESMroot/cesm/tools/cime/tools/cprnc/cprnc</CCSM_CPRNC>
<GMAKE>make</GMAKE>
<GMAKE_J>8</GMAKE_J>
<BATCH_SYSTEM>none</BATCH_SYSTEM>
<SUPPORTED_BY>me@my.address</SUPPORTED_BY>
<MAX_TASKS_PER_NODE>96</MAX_TASKS_PER_NODE>
<MAX_MPITASKS_PER_NODE>96</MAX_MPITASKS_PER_NODE>
<PROJECT_REQUIRED>FALSE</PROJECT_REQUIRED>
<mpirun mpilib="default">
<executable>mpirun</executable>
<arguments>
<arg name="ntasks">--allow-run-as-root --mca btl ^openib -np {{ total_tasks }} </arg>
</arguments>
</mpirun>
<module_system type="module" allow_error="true">
<init_path lang="perl">/usr/share/Modules/init/perl.pm</init_path>
<init_path lang="python">/usr/share/Modules/init/python.py</init_path>
<init_path lang="csh">/usr/share/Modules/init/csh</init_path>
<init_path lang="sh">/usr/share/Modules/init/sh</init_path>
<cmd_path lang="perl">/usr/bin/modulecmd perl</cmd_path>
<cmd_path lang="python">/usr/bin/modulecmd python</cmd_path>
<cmd_path lang="sh">module</cmd_path>
<cmd_path lang="csh">module</cmd_path>
<modules>
<command name="purge"/>
</modules>
</module_system>
<environment_variables>
<env name="NETCDF_PATH">
/path/to/NETCDF
</env>
<env name="NETCDF_FORTRAN_PATH">
/path/to/NETCDF
</env>
<env name="NETCDF_C_PATH">
/path/to/NETCDF
</env>
<env name="MPI_PATH">
/path/to/HMPI
</env>
<env name="OMP_STACKSIZE">256M</env>
</environment_variables>
<resource_limits>
<resource name="RLIMIT_STACK">-1</resource>
</resource_limits>
</machine>
```


**表1 config_machines.xml文件修改参数说明**

| 参数 | 说明 |
| --- | --- |
| <NODENAME\_REGEX> | 选项根据用户具体节点名称配置。 |
| <COMPILERS> | 编译器写成GNU。 |
| <MPILIBS> | 改为OpenMPI。 |
| <MAX\_TASKS\_PER\_NODE> | 根据用户环境，最大值为节点CPU核心总数。 |
| <MAX\_MPITASKS\_PER\_NODE> | 根据用户环境，最大值为节点CPU核心总数。 |
| <executable> | 默认是mpiexec，需修改mpirun。 |
| <arguments> | 修改为\-\-allow\-run\-as\-root \-\-mca btl ^openib \-np {{ total\_tasks }}，系统会自动生成线程总数。 |
| <environment\_variables> | 根据用户安装位置配置依赖函数路径。 |
| <CIME\_OUTPUT\_ROOT> <DIN\_LOC\_ROOT> <DIN\_LOC\_ROOT\_CLMFORC> <DOUT\_S\_ROOT> <BASELINE\_ROOT> <CCSM\_CPRNC> | 默认值：$ENV{HOME}，CESM数据目录，根据实际情况修改。 |


    请用户根据表1实际配置修改为自己指定的路径。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
3. 执行以下命令修改“config_compilers.xml”文件。

  a. 打开“config_compilers.xml”文件。

```
vi
/path/to/CESM
/CESM-release-cesm2.1.3/path/to/CESM/CESM-cesm2.1.3/cime/config/cesm/machines/config_compilers.xml
```


  b. 按“i”进入编辑模式，修改如下粗体内容。

```
<compiler COMPILER="gnu">
<CFLAGS>
<base>  -O3 -mcpu=tsv110 -Hx,54,0x08 </base>
<append compile_threaded="true"> -fopenmp </append>
<append DEBUG="TRUE"> -g -Wall -Og -fbacktrace -ffpe-trap=invalid,zero,overflow -fcheck=bounds </append>
<append DEBUG="FALSE"> -O </append>
</CFLAGS>
<CPPDEFS>
<!-- http://gcc.gnu.org/onlinedocs/gfortran/ -->
<append> -DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU</append>
</CPPDEFS>
<CXX_LINKER>FORTRAN</CXX_LINKER>
<FC_AUTO_R8>
<base> -fdefault-real-8 </base>
</FC_AUTO_R8>
<FFLAGS>
<!-- -ffree-line-length-none and -ffixed-line-length-none need to be in FFLAGS rather than in FIXEDFLAGS/FREEFLAGS
so that these are passed to cmake builds (cmake builds don't use FIXEDFLAGS and FREEFLAGS). -->
<base>  -fconvert=big-endian -O3 -mcpu=tsv110 -Hx,54,0x08 -I
/path/to/NETCDF
/include -I
/path/to/HDF5
/include -I
/path/to/OPENBLAS
/include </base>
<append compile_threaded="true"> -fopenmp </append>
<!-- Ideally, we would also have 'invalid' in the ffpe-trap list. But at
least with some versions of gfortran (confirmed with 5.4.0, 6.3.0 and
7.1.0), gfortran's isnan (which is called in cime via the
CPRGNU-specific shr_infnan_isnan) causes a floating point exception
when called on a signaling NaN. -->
<append DEBUG="TRUE"> -g -Wall -Og -fbacktrace -ffpe-trap=zero,overflow -fcheck=bounds </append>
<append DEBUG="FALSE"> -O </append>
</FFLAGS>
<FFLAGS_NOOPT>
<base> -O0 </base>
</FFLAGS_NOOPT>
<FIXEDFLAGS>
<base>  -ffixed-form </base>
</FIXEDFLAGS>
<FREEFLAGS>
<base> -ffree-form </base>
</FREEFLAGS>
<HAS_F2008_CONTIGUOUS>FALSE</HAS_F2008_CONTIGUOUS>
<LDFLAGS>
<append compile_threaded="true"> -fopenmp -L
/path/to/NETCDF
/lib  -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm –lz </append>
</LDFLAGS>
<MPICC> /path/to/HMPI/bin/mpicc  </MPICC>
<MPICXX> /path/to/HMPI/bin/mpicxx </MPICXX>
<MPIFC> /path/to/HMPI/bin/mpifort </MPIFC>
<SCC> /path/to/bisheng/bin/clang </SCC>
<SCXX> /path/to/bisheng/bin/clang++ </SCXX>
<SFC> /path/to/bisheng/bin/flang </SFC>
<SUPPORTS_CXX>TRUE</SUPPORTS_CXX>
<SLIBS>
<append> -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm –lz </append>
</SLIBS>
```


**表2 config_compilers.xml文件修改参数说明**

| 参数 | 说明 |
| --- | --- |
| <CFLAGS> | 添加参数\-mcpu=tsv110。 |
| <FFLAGS> | 添加参数\-mcpu=tsv110，并且链接所有依赖库的include路径。 |
| <MPICC> | 指定为Hyper MPI的mpicc路径。 |
| <MPICXX> | 指定为Hyper MPI的mpicxx所在位置。 |
| <MPIFC> | 指定为Hyper MPI的mpifort所在位置。 |
| <SCC> | 指定为毕昇编译器的clang所在路径。 |
| <SCXX> | 指定为毕昇编译器的clang++所在路径。 |
| <SFC> | 指定为毕昇编译器的flang所在路径。 |
| <LDFLAGS> | 链接所有依赖环境的lib库，使用参数\-L。 |
| <SLIBS> | 链接所有依赖环境的lib库，使用参数\-L。 |


    请用户根据表2实际配置修改为自己指定的路径。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. 执行以下命令进入工作目录。

```
cd
/path/to/CESM
/CESM-release-cesm2.1.3/path/to/CESM/CESM-cesm2.1.3/cime/scripts
```


5. 执行以下命令创建算例。

```
./create_newcase --case mycase --compset X --res f19_g16 --mach=centos7-linux
```


  成功后回显信息如图所示：

6. 执行以下命令下载输入数据，此处没有离线算例包，所有的组件根据命令行自动下载。

```
cd mycase
./check_case
./check_input_data --download
```


  每个模块下载成功后都成功会显示SUCCESS字样，用户可等其自动结束。

7. 执行以下命令运行CESM程序。

```
./case.setup
```


  成功回显信息如图所示：

8. 检查Macro.make文件中的编译选项，Macro.make文件需要与config_compilers.xml文件中一致。选项包括<CFLAGS>、<FFLAGS>、<MPICC>、<MPICXX>、<MPIFC>、<SCC>、<SCXX>、<SFC>、<LDFLAGS>、<SLIBS>。

```
SUPPORTS_CXX := FALSE
ifeq ($(COMPILER),gnu)
FC_AUTO_R8 :=  -fdefault-real-8
HAS_F2008_CONTIGUOUS := FALSE
FFLAGS_NOOPT :=  -O0
SUPPORTS_CXX := TRUE
FFLAGS :=   -fconvert=big-endian -O3 -mcpu=tsv110 -Hx,54,0x08 -I
/path/to/NETCDF
/include -I
/path/to/HDF5
/include -I
/path/to/OPENBLAS
/include
FIXEDFLAGS :=   -ffixed-form
SCC :=  /path/to/bisheng/bin/clang
SFC :=  /path/to/bisheng/bin/flang
MPICC :=  /path/to
/HMPI
/bin/mpicc
CFLAGS :=   -O3 -mcpu=tsv110 -Hx,54,0x08
MPIFC :=  /path/to/
HMPI
/bin/mpifort
MPICXX :=  /path/to/
HMPI
/bin/mpicxx
FREEFLAGS :=  -ffree-form
CXX_LINKER := FORTRAN
SCXX :=  /path/to/bisheng/bin/clang++
endif
ifeq ($(MODEL),pop)
CPPDEFS := $(CPPDEFS)  -D_USE_FLOW_CONTROL
endif
ifeq ($(COMPILER),gnu)
CPPDEFS := $(CPPDEFS)  -DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU
SLIBS := $(SLIBS)  -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz
ifeq ($(compile_threaded),true)
FFLAGS := $(FFLAGS)  -fopenmp
CFLAGS := $(CFLAGS)  -fopenmp
endif
ifeq ($(DEBUG),TRUE)
FFLAGS := $(FFLAGS)  -g -Wall -Og -fbacktrace -ffpe-trap=zero,overflow -fcheck=bounds
CFLAGS := $(CFLAGS)  -g -Wall -Og -fbacktrace -ffpe-trap=invalid,zero,overflow -fcheck=bounds
endif
ifeq ($(DEBUG),FALSE)
FFLAGS := $(FFLAGS)  -O
CFLAGS := $(CFLAGS)  -O
endif
ifeq ($(compile_threaded),true)
LDFLAGS := $(LDFLAGS)  -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz
endif
endif
```


9. 执行以下命令修改“CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in”文件。

  a. 打开“CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in
```


  b. 按“i”进入编辑模式，修改文件中第227行的内容，如图光标所在处。
    执行9.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
10. 执行以下命令修改“CESM-release-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90”文件。

  a. 打开“CESM-release-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90
```


  b. 按“i”进入编辑模式，修改如下内容。
    删除第70行defined CPRGNU之前的感叹号“！”。

    删掉第115行defined CPRGNU之前的感叹号“！”。

    执行10.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
11. 执行以下命令构建cesm.exe运行文件。

  - 第一种方式。

```
./case.build --skip-provenance-check
```


  - 第二种方式。

```
./case.build
```


    成功回显信息如图所示：

    用户需将所在系统中“cmake3”软连接到“cmake”，同时指定“cmake”路径。如在root用户下，如果用户CMake已经是3.0版本以上，请忽略ln -sf /usr/bin/cmake3 /usr/bin/cmake。

```
ln -sf /usr/bin/cmake3 /usr/bin/cmake
```


12. 执行以下命令运行cesm.exe。

```
./case.submit
```


  当CESM运行的结尾处出现如图所示内容时，表示CESM程序运行正常结束。

  需要查看输出到屏幕中的日志，手动计算出时间差，数值越少性能越优，如图，算例开始时间为2021-10-20 16:19:28，结束时间为2021-10-20 16:20:02，那么此算例运行时间为34s。


#### 多节点

1. 使用PuTTY工具，以root用户登录服务器。
2. 执行以下命令修改“config_machines.xml”文件。

  a. 打开“config_machines.xml”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/config/cesm/machines/config_machines.xml
```


  b. 按“i”进入编辑模式，修改如下粗体内容。

```
<machine MACH="centos7-linux">
<DESC>
Example port to centos7 linux system with gcc, netcdf, pnetcdf and mpich
using modules from http://www.admin-magazine.com/HPC/Articles/Environment-Modules
</DESC>
<NODENAME_REGEX>n2</NODENAME_REGEX>
<OS>LINUX</OS>
<PROXY> https://howto.get.out </PROXY>
<COMPILERS>gnu</COMPILERS>
<MPILIBS>openmpi</MPILIBS>
<PROJECT>none</PROJECT>
<SAVE_TIMING_DIR> </SAVE_TIMING_DIR>
<CIME_OUTPUT_ROOT>/CESMroot/cesm/scratch</CIME_OUTPUT_ROOT>
<DIN_LOC_ROOT>/CESMroot/cesm/inputdata</DIN_LOC_ROOT>
<DIN_LOC_ROOT_CLMFORC>/CESMroot/cesm/inputdata/lmwg</DIN_LOC_ROOT_CLMFORC>
<DOUT_S_ROOT>/CESMroot/cesm/archive/$CASE</DOUT_S_ROOT>
<BASELINE_ROOT>/CESMroot/cesm/cesm_baselines</BASELINE_ROOT>
<CCSM_CPRNC>/CESMroot/cesm/tools/cime/tools/cprnc/cprnc</CCSM_CPRNC>
<GMAKE>make</GMAKE>
<GMAKE_J>8</GMAKE_J>
<BATCH_SYSTEM>none</BATCH_SYSTEM>
<SUPPORTED_BY>me@my.address</SUPPORTED_BY>
<MAX_TASKS_PER_NODE>96</MAX_TASKS_PER_NODE>
<MAX_MPITASKS_PER_NODE>96</MAX_MPITASKS_PER_NODE>
<PROJECT_REQUIRED>FALSE</PROJECT_REQUIRED>
<mpirun mpilib="default">
<executable>mpirun</executable>
<arguments>
<arg name="ntasks">--allow-run-as-root --mca btl ^openib --machinefile path/to/machinefile -np 192 -N 96 -x PATH=
/path/to/bisheng/
bin:
/path/to/HMPI
/bin:
/path/to/NETCDF
/bin:$PATH -x
LD_LIBRARY_PATH=
/path/to/bisheng
/lib:
/path/to/HMPI
/lib:
/path/to/NETCDF/lib:
$LD_LIBRARY_PATH </arg>
</arguments>
</mpirun>
<module_system type="module" allow_error="true">
<init_path lang="perl">/usr/share/Modules/init/perl.pm</init_path>
<init_path lang="python">/usr/share/Modules/init/python.py</init_path>
<init_path lang="csh">/usr/share/Modules/init/csh</init_path>
<init_path lang="sh">/usr/share/Modules/init/sh</init_path>
<cmd_path lang="perl">/usr/bin/modulecmd perl</cmd_path>
<cmd_path lang="python">/usr/bin/modulecmd python</cmd_path>
<cmd_path lang="sh">module</cmd_path>
<cmd_path lang="csh">module</cmd_path>
<modules>
<command name="purge"/>
</modules>
</module_system>
<environment_variables>
<env name="NETCDF_PATH">
/path/to/NETCDF
</env>
<env name="NETCDF_FORTRAN_PATH">
/path/to/NETCDF
</env>
<env name="NETCDF_C_PATH">
/path/to/NETCDF
</env>
<env name="MPI_PATH">
/path/to/HMPI
/env>
<env name="OMP_STACKSIZE">256M</env>
</environment_variables>
<resource_limits>
<resource name="RLIMIT_STACK">-1</resource>
</resource_limits>
</machine>
```


**表3 config_machines.xml文件修改参数说明**

| 参数 | 说明 |
| --- | --- |
| <NODENAME\_REGEX> | 选项根据用户具体节点名称配置。 |
| <COMPILERS> | 编译器写成GNU。 |
| <MPILIBS> | 改为OpenMPI。 |
| <MAX\_TASKS\_PER\_NODE> | 根据用户环境，最大值为节点CPU核心总数。 |
| <MAX\_MPITASKS\_PER\_NODE> | 同上，最大值为节点CPU核心总数。 |
| <executable> | 默认是mpiexec，需修改mpirun； |
| <arguments> | 对于多节点来说，需要修改的是的ntasks值，例如，若用户使用两个96核心数的节点满核运行，那么总进程数ntasks设为96\*2=192，\-np为192，每个节点上进程数\-N为96。同时多节点运行需要加入编译器的路径和依赖库的路径，路径之间用\-x参数隔开。 |
| <environment\_variables> | 根据用户安装位置配置依赖函数路径。 |
| <CIME\_OUTPUT\_ROOT> <DIN\_LOC\_ROOT> <DIN\_LOC\_ROOT\_CLMFORC> <DOUT\_S\_ROOT> <BASELINE\_ROOT> <CCSM\_CPRNC> | 默认值：$ENV{HOME}，CESM数据目录,根据实际情况修改。 |


    请用户根据表3实际配置修改为自己指定的路径。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
3. 执行以下命令修改“config_compilers.xml”文件。

  a. 打开“config_compilers.xml”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/config/cesm/machines/config_compiler.xml
```


  b. 按“i”进入编辑模式，修改如下粗体内容。

```
<compiler COMPILER="gnu">
<CFLAGS>
<base>  -O3 -mcpu=tsv110 -Hx,54,0x08 </base>
<append compile_threaded="true"> -fopenmp </append>
<append DEBUG="TRUE"> -g -Wall -Og -fbacktrace -ffpe-trap=invalid,zero,overflow -fcheck=bounds </append>
<append DEBUG="FALSE"> -O </append>
</CFLAGS>
<CPPDEFS>
<!-- http://gcc.gnu.org/onlinedocs/gfortran/ -->
<append> -DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU</append>
</CPPDEFS>
<CXX_LINKER>FORTRAN</CXX_LINKER>
<FC_AUTO_R8>
<base> -fdefault-real-8 </base>
</FC_AUTO_R8>
<FFLAGS>
<!-- -ffree-line-length-none and -ffixed-line-length-none need to be in FFLAGS rather than in FIXEDFLAGS/FREEFLAGS
so that these are passed to cmake builds (cmake builds don't use FIXEDFLAGS and FREEFLAGS). -->
<base>  -fconvert=big-endian -O3 -mcpu=tsv110 -Hx,54,0x08 -I
/path/to/NETCDF
/include -I
/path/to/HDF5
/include -I
/path/to/OPENBLAS
/include </base>
<append compile_threaded="true"> -fopenmp </append>
<!-- Ideally, we would also have 'invalid' in the ffpe-trap list. But at
least with some versions of gfortran (confirmed with 5.4.0, 6.3.0 and
7.1.0), gfortran's isnan (which is called in cime via the
CPRGNU-specific shr_infnan_isnan) causes a floating point exception
when called on a signaling NaN. -->
<append DEBUG="TRUE"> -g -Wall -Og -fbacktrace -ffpe-trap=zero,overflow -fcheck=bounds </append>
<append DEBUG="FALSE"> -O </append>
</FFLAGS>
<FFLAGS_NOOPT>
<base> -O0 </base>
</FFLAGS_NOOPT>
<FIXEDFLAGS>
<base>  -ffixed-form </base>
</FIXEDFLAGS>
<FREEFLAGS>
<base> -ffree-form </base>
</FREEFLAGS>
<HAS_F2008_CONTIGUOUS>FALSE</HAS_F2008_CONTIGUOUS>
<LDFLAGS>
<append compile_threaded="true"> -fopenmp -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm –lz </append>
</LDFLAGS>
<MPICC> /path/to/
HMPI
/bin/mpicc  </MPICC>
<MPICXX> /path/to/
HMPI
/bin/mpicxx </MPICXX>
<MPIFC> /path/to/
HMPI
/bin/mpifort </MPIFC>
<SCC> /path/to/bisheng/bin/clang </SCC>
<SCXX> /path/to/bisheng/bin/clang++ </SCXX>
<SFC> /path/to/bisheng/bin/flang </SFC>
<SUPPORTS_CXX>TRUE</SUPPORTS_CXX>
<SLIBS>
<append> -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz </append>
</SLIBS>
```


**表4 config_compilers.xml文件修改参数说明**

| 参数 | 说明 |
| --- | --- |
| <CFLAGS> | 添加参数\-mcpu=tsv110。 |
| <FFLAGS> | 添加参数\-mcpu=tsv110，并且链接所有依赖库的include路径。 |
| <MPICC> | 指定为Hyper MPI的mpicc路径。 |
| <MPICXX> | 指定为Hyper MPI的mpicxx所在位置。 |
| <MPIFC> | 指定为Hyper MPI的mpifort所在位置。 |
| <SCC> | 指定为毕昇编译器的clang所在路径。 |
| <SCXX> | 指定为毕昇编译器的clang++所在路径。 |
| <SFC> | 指定为毕昇编译器的flang所在路径。 |
| <LDFLAGS> | 链接所有依赖环境的lib库，使用参数\-L。 |
| <SLIBS> | 链接所有依赖环境的lib库，使用参数\-L。 |


    请用户根据表4实际配置修改为自己指定的路径。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. 执行以下命令进入工作目录。

```
cd
/path/to/CESM
/CESM-cesm2.1.3/cime/scripts
```


5. 执行以下命令创建算例。

```
./create_newcase --case mycase --compset X --res f19_g16 --mach=centos7-linux
```


  回显信息如图所示：

6. 执行以下命令下载输入数据。

```
cd mycase
./check_case
./check_input_data --download
```


  每个模块下载成功后都成功会显示SUCCESS字样，用户可等其自动结束。

7. 执行以下命令运行CESM程序。

```
./case.setup
```


8. 检查Macro.make文件中的编译选项，Macro.make文件编译选项内容需要与config_compilers.xml文件中一致。选项包括<CFLAGS>、<FFLAGS>、<MPICC>、<MPICXX>、<MPIFC>、<SCC>、<SCXX>、<SFC>、<LDFLAGS>、<SLIBS>。

```
SUPPORTS_CXX := FALSE
ifeq ($(COMPILER),gnu)
FC_AUTO_R8 :=  -fdefault-real-8
HAS_F2008_CONTIGUOUS := FALSE
FFLAGS_NOOPT :=  -O0
SUPPORTS_CXX := TRUE
FFLAGS :=   -fconvert=big-endian -O3 -mcpu=tsv110 -Hx,54,0x08 -I
/path/to/NETCDF
/include -I
/path/to/HDF5
/include -I
/path/to/OPENBLAS
/include
FIXEDFLAGS :=   -ffixed-form
SCC :=  /path/to/bisheng/bin/clang
SFC :=  /path/to/bisheng/bin/flang
MPICC :=  /path/to/HMPI/bin/mpicc
CFLAGS :=   -O3 -mcpu=tsv110 -Hx,54,0x08
MPIFC :=  /path/to/HMPI/bin/mpifort
MPICXX :=  /path/to/HMPI/bin/mpicxx
FREEFLAGS :=  -ffree-form
CXX_LINKER := FORTRAN
SCXX :=  /path/to/bisheng/bin/clang++
endif
ifeq ($(MODEL),pop)
CPPDEFS := $(CPPDEFS)  -D_USE_FLOW_CONTROL
endif
ifeq ($(COMPILER),gnu)
CPPDEFS := $(CPPDEFS)  -DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU
SLIBS := $(SLIBS)  -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz
ifeq ($(compile_threaded),true)
FFLAGS := $(FFLAGS)  -fopenmp
CFLAGS := $(CFLAGS)  -fopenmp
endif
ifeq ($(DEBUG),TRUE)
FFLAGS := $(FFLAGS)  -g -Wall -Og -fbacktrace -ffpe-trap=zero,overflow -fcheck=bounds
CFLAGS := $(CFLAGS)  -g -Wall -Og -fbacktrace -ffpe-trap=invalid,zero,overflow -fcheck=bounds
endif
ifeq ($(DEBUG),FALSE)
FFLAGS := $(FFLAGS)  -O
CFLAGS := $(CFLAGS)  -O
endif
ifeq ($(compile_threaded),true)
LDFLAGS := $(LDFLAGS)  -L
/path/to/NETCDF
/lib -L
/path/to/HDF5
/lib -L
/path/to/OPENBLAS
/lib -lopenblas -lnetcdff -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz
endif
endif
```


9. 执行以下命令修改“CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in”文件。

  a. 打开“CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/src/share/util/shr_infnan_mod.F90.in
```


  b. 按“i”进入编辑模式，修改文件中第227行的内容，如图光标所在处。
    执行9.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
10. 执行以下命令修改“CESM-release-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90”文件。

  a. 打开“CESM-release-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90”文件。

```
vi
/path/to/CESM
/CESM-cesm2.1.3/cime/src/share/util/shr_sys_mod.F90
```


  b. 按“i”进入编辑模式，修改如下内容。
    删掉第70行defined CPRGNU之前的感叹号“！”。

    删掉第115行defined CPRGNU之前的感叹号“！”。

    执行10.a之后，按“Esc”键，输入“:set nu”，按“Enter”即可显示出行号。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
11. 执行以下命令构建cesm.exe运行文件。

  - 第一种方式。

```
./case.build --skip-provenance-check
```


  - 第二种方式。

```
./case.build
```


    成功回显信息如下图：

    用户需将所在系统中“cmake3”软连接到“cmake”，同时指定“cmake”路径。如在root用户下，如果用户CMake已经是3.0版本以上，请忽略ln -sf /usr/bin/cmake3 /usr/bin/cmake。

```
ln -sf /usr/bin/cmake3 /usr/bin/cmake
```


12. 执行以下命令运行cesm.exe。

```
./case.submit
```


  当CESM运行的结尾处出现如图所示内容时，表示CESM程序运行正常结束。

  需要查看输出到屏幕中的日志，手动计算出时间差，数值越少性能越优，如图，两节点时，算例开始时间为2021-10-22 20:27:51，结束时间为2021-10-22 20:28:29，那么此算例运行时间为38s。
