提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、环境安装
netcdf之前的步骤请参考之前的博文
https://blog.csdn.net/weixin_43934886/article/details/130197311?spm=1001.2014.3001.5501
1.netcdf-4.8.1安装
建议安装4.8.1以上的netcdf-C,fortran版本的netcdf可以选择4.5以上的
首先下载并解压一下
wget https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/src/netcdf-c-4.8.1.tar.gz
tar -zxvf netcdf-c-4.8.1.tar.gz
cd netcdf-c-4.8.1.tar.gz
接下来configure一下
./configure --prefix=/path/to/NETCDF CPPFLAGS="-I/path/to/HDF5/include" LDFLAGS="-L/path/to/HDF5/lib" --enable-fortran --enable-static=yes --enable-parallel --enable-shared CFLAGS="-O3 -fPIC -Wno-incompatible-pointer-types-discards-qualifiers -Wno-non-literal-conversion" FCFLAGS="-O3 -fPIC" LDFLAGS="-Wl,--build-id" --enable-fortran --enable-netcdf4 --enable-parallel CC=mpicc FC=mpif90 CXX=mpicxx
编译安装
make && make install
安装完成后记得修改环境变量
export PATH=/path/to/NETCDF/bin:$PATH
export LD_LIBRARY_PATH=/path/to/NETCDF/lib:$LD_LIBRARY_PATH
检查一下是否成功
nc-config --all
应该出现如下结果
2.netcdf-fortran-4.5.3
先下载解压
wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.5.3/netcdf-fortran-4.5.3.tar.gz
tar -zxvf netcdf-fortran-4.5.3.tar.gz
cd netcdf-fortran-4.5.3
接着Configure一下
./configure --prefix=/path/to/NETCDF CPPFLAGS="-I/path/to/HDF5/include -I/path/to/NETCDF/include" LDFLAGS=" -L/path/to/HDF5/lib -L/path/to/NETCDF/lib -lnetcdf" --enable-fortran --enable-static=yes --enable-parallel --enable-shared CFLAGS="-O3 -fPIC -Wno-incompa tible-pointer-types-discards-qualifiers -Wno-non-literal-conversion" FCFLAGS="-O3 -fPIC" LDFLAGS="-Wl,--build-id" --en able-fortran --enable-netcdf4 --enable-parallel CC=mpicc FC=mpif90 CXX=mpicxx F77=mpif77
*注意这里一定要记得指定F77的编译器为mpif77,安装路径要与netcdf-C的一致
编译安装
make && make install
检查一下安装是否成功
nf-config --all
3.Lapack 3.8.0
下载并解压
wget http://www.netlib.org/lapack/lapack-3.8.0.tar.gz
tar -zxvf lapack-3.8.0.tar.gz
cd lapack-3.8.0
编译:
cp make.inc.example make.inc
make
将库文件拷贝到统一的环境目录
cp *.a /path/to/lapack
4.BLAS
下载并解压
wget http://www.netlib.org/blas/blas-3.8.0.tgz
tar -zxvf blas-3.8.0.tgz
cd blas-3.8.0
编译:
cp make.inc.example make.inc
make
将库文件拷贝到统一的环境目录
cp blas_LINUX.a /path/to/BLAS/libblas.a
二、算例创建与配置
1.文件配置
进入算例目录
cd …/my_cesm_sandbox/
有一下几个文件:
进入cime
cd cime
修改机器配置文件
vim ./config/cesm/machines/config_machines.xml
在空白处加入以下内容:(标蓝色为–mach的内容,可自定义)
<machine MACH="User">
<DESC>
good luck~
</DESC>
<NODENAME_REGEX>regex.expression.matching.your.machine</NODENAME_REGEX>
<OS>LINUX</OS>
<PROXY> https://howto.get.out </PROXY>
<COMPILERS>pgi</COMPILERS>
<MPILIBS>openmpi</MPILIBS>
<PROJECT>none</PROJECT>
<SAVE_TIMING_DIR> </SAVE_TIMING_DIR>
<CIME_OUTPUT_ROOT>/path/to/output/CESM/output-2.0/scratch</CIME_OUTPUT_ROOT>
<! -- 这是输出文件目录,包括输出结果,之后标黄的都是 -->
<DIN_LOC_ROOT>/path/to/input</DIN_LOC_ROOT>
<!-- 这是输入文件目录,主要用于存放需要的输入数据,之后标绿的都是 -->
<DIN_LOC_ROOT_CLMFORC>/CESMroot/CESM/INPUTDAT/inputdata/lmwg</DIN_LOC_ROOT_CLMFORC>
<DOUT_S_ROOT>/path/to/output/output-2.0/archive/$CASE</DOUT_S_ROOT>
<BASELINE_ROOT>/path/baseline/cesm_baselines2.0</BASELINE_ROOT>
<CCSM_CPRNC>...../my_cesm_sandbox/cime/tools/cprnc</CCSM_CPRNC>
<!-- 这是性能工具,可有可无 -->
<GMAKE>make</GMAKE>
<GMAKE_J>4</GMAKE_J>
<BATCH_SYSTEM>none</BATCH_SYSTEM>
<SUPPORTED_BY>xzw~</SUPPORTED_BY>
<!-- 这是我哈哈哈 -->
<MAX_TASKS_PER_NODE>8</MAX_TASKS_PER_NODE>
<MAX_MPITASKS_PER_NODE>8</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">
</module_system>
<environment_variables>
<env name="OMP_STACKSIZE">512M</env>
</environment_variables>
<resource_limits>
<resource name="RLIMIT_STACK">-1</resource>
</resource_limits>
</machine>
2.创建算例并运行
进入scripts目录,创建算例
./create_newcase --case Xtest --res f19_g16 --compset X --mach User
cd Xtest
初始化算例
./case.setup
初始化结束以后,打开Macros.make
清空原有内容,改成如下内容:(标蓝的地方是需要注意软件安装的目录)
ifeq ($(COMPILER),gnu)
CPPDEFS := $(CPPDEFS) -DFORTRANUNDERSCORE -DNO_R16 -DNO_SHR_VMATH -DCPRPGI
FC_AUTO_R8 := -fdefault-real-8
HAS_F2008_CONTIGUOUS := FALSE
FFLAGS_NOOPT := -O0
LDFLAGS := -Wl,--allow-multiple-definition -L/path/to/BLAS/lib -lblas
SUPPORTS_CXX := TRUE
CFLAGS += -O2 -g
FFLAGS := -O2 -g -fconvert=big-endian -ffixed-line-length-132 -Kieee -Mextend -byteswapio -Mflushz
FIXEDFLAGS := -Mfixed
SCC := clang
SFC := flang
MPICC := mpicc
MPIFC := mpif90
MPICXX := mpicxx
FREEFLAGS := -Mfreeform
CXX_LINKER := FORTRAN
SCXX := clang++
NETCDF_PATH := /path/to/netcdf
endif
ifeq ($(MODEL),pop)
CPPDEFS := $(CPPDEFS) -D_USE_FLOW_CONTROL
endif
ifeq ($(COMPILER),gnu)
ifeq ($(compile_threaded),true)
FFLAGS := $(FFLAGS) -mp
CFLAGS := $(CFLAGS) -mp
endif
ifeq ($(DEBUG),TRUE)
FFLAGS := $(FFLAGS) -g -fbounds-check
CFLAGS := $(CFLAGS) -g -fbounds-check
endif
ifeq ($(DEBUG),FALSE)
FFLAGS := $(FFLAGS) -O
CFLAGS := $(CFLAGS) -O
endif
ifeq ($(compile_threaded),true)
LDFLAGS := $(LDFLAGS) -mp
endif
endif
保存退出后,提交编译
./case.build
等待编译完成,如果编译有问题要重新编译,需要先./case.build --clean-all
再./case.build
编译完成后会提示sucess(如图)
提交运行
./case.submit
等待运行完成(如下图所示)
总结
以上便是总结的cesm2.1.3版本的移植方法,源代码可以直接从cesm官方check出来,也可以通过百度网盘下载
链接:https://pan.baidu.com/s/14unOhxSJKq4MrSnEht_obQ?pwd=h3bc
提取码:h3bc
输入数据在编译后自动下载,网速不快的小伙伴需要点耐心~如果实在下不动,直接从这里下载
链接:https://pan.baidu.com/s/1Kxx-A5xXVoKrc2IL3VA3vw?pwd=b6ez
提取码:b6ez