Centos系统移植CESM2.1.3解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、环境安装

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值