运行和验证

单节点

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

    1. 打开“config_machines.xml”文件。
      vi /path/to/CESM/CESM-release-cesm2.1.3/cime/config/cesm/machines/config_machines.xml
    2. 按“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实际配置修改为自己指定的路径。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  3. 执行以下命令修改“config_compilers.xml”文件。

    1. 打开“config_compilers.xml”文件。
      vi /path/to/CESM/CESM-cesm2.1.3/cime/config/cesm/machines/config_compilers.xml
    2. 按“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实际配置修改为自己指定的路径。

    3. 按“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”文件。

    1. 打开“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
    2. 按“i”进入编辑模式,修改文件中第227行的内容,如图光标所在处。

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

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

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

    1. 打开“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
    2. 按“i”进入编辑模式,修改如下内容。

      删除第70行defined CPRGNU之前的感叹号“!”。

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

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

    3. 按“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”文件。

    1. 打开“config_machines.xml”文件。
      vi /path/to/CESM/CESM-cesm2.1.3/cime/config/cesm/machines/config_machines.xml
    2. 按“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实际配置修改为自己指定的路径。

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  3. 执行以下命令修改“config_compilers.xml”文件。

    1. 打开“config_compilers.xml”文件。
      vi /path/to/CESM/CESM-cesm2.1.3/cime/config/cesm/machines/config_compiler.xml
    2. 按“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实际配置修改为自己指定的路径。

    3. 按“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”文件。

    1. 打开“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
    2. 按“i”进入编辑模式,修改文件中第227行的内容,如图光标所在处。

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

    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

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

    1. 打开“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
    2. 按“i”进入编辑模式,修改如下内容。

      删掉第70行defined CPRGNU之前的感叹号“!”。

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

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

    3. 按“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。