CLM模型运行
提示:linux ubuntu系统,确保安装完成intel编译器,netcdf库
1.环境变量设置
在HOME
目录下勾选显示隐藏文件
,找到~/.bashrc
文件,双击打开,查找export
,在该句下行添加下方环境变量
# 安装intel虚拟机位置在~/intel,
source ~/intel/oneapi/setvars.sh
source ~/intel/oneapi/setvars.sh
用于设置Intel oneAPI开发环境。这个命令的具体功能是执行setvars.sh脚本,该脚本包含了设置环境变量所需的指令,使用户可以使用Intel oneAPI工具集进行开发。这个命令用于在当前shell会话中执行脚本。与直接运行脚本不同,source命令会在当前的shell环境中执行脚本,这意味着脚本中设置的任何环境变量都会应用于当前的会话。
export CC=icc
export FC=ifort
export F77=ifort
export F90=ifort
export CXX=icpc
export MPICC=mpiicc
export MPIFC=mpiifort
export MPIF77=mpiifort
export MPIF90=mpiifort
export MPICXX=mpiicpc
export NETCDF=~/netcdf-intel
export NETCDF_HOME=~/netcdf-intel
export NETCDF_PATH=~/netcdf-intel
export HDF5=~/netcdf-intel
export LD_LIBRARY_PATH=~/netcdf-intel/lib:$LD_LIBRARY_PATH
ulimit -s unlimited
2.inputdata数据下载
下载地址https://svn-ccsm-inputdata.cgd.ucar.edu/trunk/inputdata
inputdata
放在HOME
目录下~/cesm/inputdata
3.设置文件修改
1) machine文件修改
cd ~/DGVM/clm5.0/cime/config/cesm/machines/
# 备份文件
cp config_machines.xml config_machines.xml.orig
gedit config_machines.xml
将下述代码添加到该文件中
<machine MACH="myintel">
<DESC>
</DESC>
<NODENAME_REGEX>regex.expression.matching.your.machine</NODENAME_REGEX>
<OS>LINUX</OS>
<PROXY> https://howto.get.out </PROXY>
<COMPILERS>intel</COMPILERS>
<MPILIBS>impi</MPILIBS>
<PROJECT>none</PROJECT>
<SAVE_TIMING_DIR> </SAVE_TIMING_DIR>
<CIME_OUTPUT_ROOT>$ENV{HOME}/cesm/scratch</CIME_OUTPUT_ROOT>
<DIN_LOC_ROOT>$ENV{HOME}/cesm/inputdata</DIN_LOC_ROOT>
<DIN_LOC_ROOT_CLMFORC>$ENV{HOME}/cesm/inputdata/lmwg</DIN_LOC_ROOT_CLMFORC>
<DOUT_S_ROOT>$ENV{HOME}/cesm/archive/$CASE</DOUT_S_ROOT>
<BASELINE_ROOT>$ENV{HOME}/cesm/cesm_baselines</BASELINE_ROOT>
<CCSM_CPRNC>$ENV{HOME}/cesm/tools/cime/tools/cprnc/cprnc</CCSM_CPRNC>
<GMAKE>make</GMAKE>
<GMAKE_J>2</GMAKE_J>
<BATCH_SYSTEM>none</BATCH_SYSTEM>
<SUPPORTED_BY>me@my.address</SUPPORTED_BY>
<MAX_TASKS_PER_NODE>2</MAX_TASKS_PER_NODE>
<MAX_MPITASKS_PER_NODE>2</MAX_MPITASKS_PER_NODE>
<PROJECT_REQUIRED>FALSE</PROJECT_REQUIRED>
<mpirun mpilib="default">
<executable>mpirun</executable>
<arguments>
<arg name="ntasks"> -np {{ total_tasks }} </arg>
</arguments>
</mpirun>
<module_system type="none"/>
<environment_variables>
<env name="OMP_STACKSIZE">256M</env>
<env name="NETCDF_PATH">/home/dell/netcdf-intel</env>
</environment_variables>
<resource_limits>
<resource name="RLIMIT_STACK">-1</resource>
</resource_limits>
</machine>
2)complier文件修改
cd ~/DGVM/clm5.0/cime/config/cesm/machines/
cp config_compilers.xml config_compilers.xml.orig
gedit config_compilers.xml
查找intel
修改该部分,修改后内容是
<compiler COMPILER="intel">
<CFLAGS>
<base> -qno-opt-dynamic-align -fp-model precise -std=gnu99 </base>
<append compile_threaded="true"> -qopenmp </append>
<append DEBUG="FALSE"> -O2 -debug minimal </append>
<append DEBUG="TRUE"> -O0 -g </append>
</CFLAGS>
<CPPDEFS>
<!-- http://software.intel.com/en-us/articles/intel-composer-xe/ -->
<append> -DFORTRANUNDERSCORE -DCPRINTEL</append>
</CPPDEFS>
<CXX_LDFLAGS>
<base> -cxxlib </base>
</CXX_LDFLAGS>
<CXX_LINKER>FORTRAN</CXX_LINKER>
<FC_AUTO_R8>
<base> -r8 </base>
</FC_AUTO_R8>
<FFLAGS>
<base> -qno-opt-dynamic-align -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source </base>
<append compile_threaded="true"> -qopenmp </append>
<append DEBUG="TRUE"> -O0 -g -check uninit -check bounds -check pointers -fpe0 -check noarg_temp_created </append>
<append DEBUG="FALSE"> -O2 -debug minimal </append>
</FFLAGS>
<FFLAGS_NOOPT>
<base> -O0 </base>
<append compile_threaded="true"> -qopenmp </append>
</FFLAGS_NOOPT>
<FIXEDFLAGS>
<base> -fixed -132 </base>
</FIXEDFLAGS>
<FREEFLAGS>
<base> -free </base>
</FREEFLAGS>
<HAS_F2008_CONTIGUOUS>TRUE</HAS_F2008_CONTIGUOUS>
<LDFLAGS>
<append compile_threaded="true"> -qopenmp </append>
</LDFLAGS>
<MPICC> mpiicc </MPICC>
<MPICXX> mpiicpc </MPICXX>
<MPIFC> mpiifort </MPIFC>
<SCC> icc </SCC>
<SCXX> icpc </SCXX>
<SFC> ifort </SFC>
<SLIBS>
<append MPILIB="mpich"> -mkl=cluster </append>
<append MPILIB="mpich2"> -mkl=cluster </append>
<append MPILIB="mvapich"> -mkl=cluster </append>
<append MPILIB="mvapich2"> -mkl=cluster </append>
<append MPILIB="mpt"> -mkl=cluster </append>
<append MPILIB="openmpi"> -mkl=cluster </append>
<append MPILIB="impi"> -qmkl=cluster -L/home/dell/netcdf-intel/lib -lnetcdf -lnetcdff </append>
<append MPILIB="mpi-serial"> -mkl </append>
</SLIBS>
<SUPPORTS_CXX>TRUE</SUPPORTS_CXX>
</compiler>
4. case 创建、编译及运行
以上环境都设置好之后,进行case创建和编译
# 转到clm5.0/cime/scripts/文件夹下
cd ~/DGVM/clm5.0/cime/scripts/
# 1-分辨率
./query_config --grids
# 2-模块配置
./query_config --compsets
# 3-创建 case
./create_newcase --case 1850CLM50Bgc --res f19_g16 --compset I1850Clm50Bgc --compiler intel --mach myintel --run-unsupported
# 4-进入文件夹
cd 1850CLM50Bgc
# 5-编辑env_run,将DATM_CLMNCEP_YR_START 和DATM_CLMNCEP_YR_END改为自己inputdata输入数据的时间
gedit env_run.xml
# 6-设置case
./case.setup
# 7-编译case,必须使用python2.7
/usr/bin/python2.7 ./case.build --skip-provenance-check
# 8-确认核数
./preview_run
# 9-确认数据
./check_input_data
# 10-进入run目录
cd ~/cesm/scratch/1850Clm50Bgc/run
# 11-创建文件夹
mkdir timing/checkpoints -p
# 12-运行case
mpirun -np 16 ../bld/cesm.exe
I1850
: 这部分通常指的是时间或者实验类型。在这个例子中,“I”可能代表“历史”(historical),而“1850”表示年份,指的是该模型配置旨在模拟的年份或时间段。
Clm50
: 这部分指的是特定的陆地模型版本。在CESM中,“Clm”代表“Community Land Model”,一个高级陆地表面过程模型,而“50”可能是版本号。
Bgc
: 这通常代表“生物地球化学”(Biogeochemistry),指该模型包括了生物地球化学循环的模拟,比如碳循环、氮循环等。