安装依赖库
这次所需要有 zlib,HDF5,NetCDF-C以及NetCDF-Fortran
安装HDF5
$ ./configure --prefix=你的安装路径/hdf5 --enable-fortran --enable-fortran2003 --enable-parallel
$ make -j 48
$ make install
添加环境变量
$ vim ~/.bashrc
export HDF5=你的安装路径/hdf5
export PATH=$HDF5/bin:$PATH
export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH
export INCLUDE=$HDF5/include:$INCLUDE
# 保存退出后
$ source ~/.bashrc
安装NetCDF-C
$ ./configure --prefix=你的安装路径/netcdf LDFLAGS="-L$HDF5/lib" CPPFLAGS="-I$HDF5/include" CC=mpiicc --disable-dap
$ make -j 48
$ make install
添加环境变量
export NETCDF=/usr/local/netcdf
export PATH=$NETCDF/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH
export INCLUDE=$NETCDF/include:$INCLUDE
# 保存后退出
$ source ~/.bashrc
安装NetCDF-Fortran
$ ./configure --prefix=你的安装路径/netcdf CPPFLAGS="-I$HDF5/include -I$NETCDF/include" LDFLAGS="-L$HDF5/lib -L$NETCDF/lib" CC=mpiicc FC=mpiif90 F77=mpiif90 # 与NetCDF-C安装在同一目录下
$ make -j 48
$ make install
CESM2 主程序安装
# 解压从官网下载好的压缩包
$ tar zxf cesm2.tgz
$ cd cesm/cime/config/cesm/machines/
# 修改 config_machines.xml 文件
$ vim config_machines.xml
```xml
<!-- 机器代号 -->
<machine MACH="amd">
<!-- 描述性的话 -->
<DESC>
amd machine 128 core
</DESC>
<NODENAME_REGEX>amd</NODENAME_REGEX>
<!-- 系统和编译器 -->
<OS>LINUX</OS>
<COMPILERS>intel</COMPILERS>
<!-- mpi库 -->
<MPILIBS>impi</MPILIBS>
<!-- 下面这些文件夹根据你的实际情况进行改动 -->
<CIME_OUTPUT_ROOT>/root/soft/cesm/output</CIME_OUTPUT_ROOT>
<DIN_LOC_ROOT>/root/soft/cesm/output/input</DIN_LOC_ROOT>
<DIN_LOC_ROOT_CLMFORC>/root/soft/cesm/output/ptclm-data</DIN_LOC_ROOT_CLMFORC>
<DOUT_S_ROOT>/root/soft/cesm/output/$CASE</DOUT_S_ROOT>
<BASELINE_ROOT>/root/soft/cesm/output/cesm_baselines</BASELINE_ROOT>
<CCSM_CPRNC>/root/soft/cesm/output/cprnc</CCSM_CPRNC>
<!-- make 时候并行的数量,相当于 make -j 24 -->
<GMAKE_J>24</GMAKE_J>
<!-- 根据你的机器来确定提交作业的方式,这台机器没有作业调度系统所以写的 none -->
<BATCH_SYSTEM>none</BATCH_SYSTEM>
<SUPPORTED_BY>amd@amd</SUPPORTED_BY>
<MAX_TASKS_PER_NODE>24</MAX_TASKS_PER_NODE>
<MAX_MPITASKS_PER_NODE>24</MAX_MPITASKS_PER_NODE>
<PROJECT_REQUIRED>FALSE</PROJECT_REQUIRED>
<!-- 软件运行方式 -->
<mpirun mpilib="default">
<executable>mpiexec</executable>
<arguments>
<arg name="anum_tasks"> -np {
{
total_tasks }} </arg>
</arguments>
</mpirun>
<!-- 这台机器没有集成 module,根据实际情况填写 -->
<module_system type="none"/>
<!-- 这里是一些环境变量 -->
<environment_variables>
<env name="OMP_STACKSIZE">256M</env>
</environment_variables>
<environment_variables>
<env name="OMP_STACKSIZE">256M</env>
</environment_variables>
</machine>
如果有作业调度系统,需要修改下面的文件,没有可以添加下面两行
$ vim config_batch.xml
<!-- 这台机器没有作业调度,根据你的实际情况填写 -->
<batch_system MACH="amd" type="none" version="9.1">
</batch_system>
保存后退出
进入 /cesm/cime/scripts
$ cd 你的路径/cesm/cime/scripts
$ ./create_newcase -case test_case \ # 你想创建的文件夹名称
-res f19_g16 -compset X \ # 这些参数可以使用 ./create_newcase -h 查看
-mach amd # 刚才在 config_machines.xml 文件中添加的机器代号
$ cd test_case
$ ./case.setup
如果上面两步出错则需要检查 config_machines.xml 和 config_batch.xml 文件里更改的内容
$ vim Macros.make
# 修改以下内容
MPIFC := mpiif90
MPICC := mpiicc
MPICXX := mpiicxx
# 在 endif 后面加入
NETCDF_PATH := 你的NetCDF安装路径
HDF5_PATH := 你的HDF5安装路径
SLIBS += -L${NETCDF_PATH}/lib -lnetcdff -lnetcdf -L${HDF5_PATH}/lib -lhdf5_hl -lhdf5 -ldl -lm -lz -lcurl -L${MKLROOT}/lib/intel64 -lmkl_rt -lpthread -ldl
LDFLAGS += -L${NETCDF_PATH}/lib -lnetcdff -lnetcdf -L${HDF5_PATH}/lib -lhdf5_hl -lhdf5 -ld -lm -lz -lcurl -L${MKLROOT}/lib/intel64 -lmkl_rt -lpthread-ldl
# 注释下面的代码
#ifeq ($(MPILIB),mvapich2)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),mpich2)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),mpt)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),openmpi)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),mpich)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),mvapich)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),impi)
#SLIBS := $(SLIBS) #-mkl=cluster
#endif
#ifeq ($(MPILIB),mpi-serial)
#SLIBS := $(SLIBS) #-mkl
#endif
保存后退出
$ ./case.build
安装成功后在 output/test_case/bld 文件夹中可以看到 cesm.exe 文件
总结一下安装的难点:在理解了 config_machines.xml 和 config_batch.xml 文件中各个参数含义的情况下,根据实际的情况进行参数的修改
常见错误
-
报错 ld: 找不到 -lcsm_share
解决办法:cd 到你的output目录下,将test_case/bld/intel/mpich/nodebug/nothreads/mct/noesmf/c1a1l1i1o1r1g1w1e1/csm_share/
中的 libcsm_share.a 文件复制到 test_case/bld/intel/mpich/nodebug/nothreads/mct/noesmf/c1a1l1i1o1r1g1w1e1/lib 中 -
报错 DEV_ERROR: Invalid arguments trying to run subprocess:git status
解决办法:
使用 ./case.build --skip-provenance-check