CESM2安装——小白手把手

一、依赖库安装

安装之前,最好可以检查一下你的~/.bashrc 里面的

1.安装HDF5

tar -xvf hdf5-1.8.21.tar -C unzip/     #-C 是指定解压后的路径
cd hdf5-1.8.21/
./configure --prefix=/home/gukq20/pengyf/tools/hdf5
#这里的--prefix=指示hdf5的安装的路径
make
make check     #这一步可以不进行
make install

操作完应该是这样的,两个make。
在这里插入图片描述
(这里强调(下面不在说明),所有在bashrc中写入的东西都是变成长期变量,永久有效,除非你把他删了;但是下面会有在命令行输入的就属于临时变量,如果关了这个界面或者换了一个terminal界面就得重新输入这些东西,因为只有在改terminal有效)

vim ~/.bashrc    
需要的的部分就只有下面的第一行,这个是你安装的路径,也就是第一步--prefix=的部分
然后将下面的内容复制到./barshrc文件的额最后就行了(记得改路径)

#hdf5
export HDF5=/home/gukq20/pengyf/tools/hdf5
export HDF5_LIB=$HDF5/lib
export HDF5_INC=$HDF5/include
export PATH=$HDF5/bin:$PATH
export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH

然后在命令行输入:
source  ~/.bashrc 

注意:netcdf4.2以上的版本c库和fortran库分开,要先安装netcdf-c,然后再安装netcdf-fortran

2.安装netcdf

(1)安装netcdf-c
tar -xvf netcdf-c-4.4.1.tar -C unzip/     
cd unzip/netcdf-c-4.4.1
which ifort    
#先检查一下是否有ifort   如果输出了一个路径就是有,不惜要你在安装了。(校服务器上是有的)
#下面的不特别说明都在命令行界面输入。
export CC=icc
export CXX=icpc
export CFLAGS='-O3 -ip -no-prec-div -xSSSE3'
export CXXFLAGS='-O3 -ip -no-prec-div -xSSSE3'
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -ip -no-prec-div -xSSSE3'
export CPP='icc -E'
export CXXCPP='icpc -E'
#下面这两行的路径还是上面hdf5安装的路径
export CPPFLAGS='-I/home/gukq20/pengyf/tools/hdf5/include'
export LDFLAGS='-L/home/gukq20/pengyf/tools/hdf5/lib'

./configure  --disable-dap  --prefix=/home/gukq20/pengyf/tools/netcdf4.4-c
make 
make check   #这一步可以不用
make isntall 

make成功后的截图:
make成功的截图
make install 成功后的截图:很直观的提示successfully。
在这里插入图片描述

(2)安装netcdf-f

如果你还在刚刚安装netcdf-c的界面的话,就不需要在输入上一步的export,直接输入下面的这几行,同样的路径得改,如果换了terminal还是要重新输入一次,在进行以下操作。
以下都省略解压和进入解压后的目录的步骤,请自己操作

export LD_LIBRARY_PATH=/home/gukq20/pengyf/tools/netcdf4.4-c/lib:$LD_LIBRARY_PATH
export CPPFLAGS=-I/home/gukq20/pengyf/tools/netcdf4.4-c/include
export LDFLAGS=-L/home/gukq20/pengyf/tools/netcdf4.4-c/lib
./configure  --disable-dap  --prefix=/home/gukq20/pengyf/tools/netcdf4.4-intelf
make 
make check   #这一步可以不用
make isntall 

make和make install 成功的标志:
在这里插入图片描述
在这里插入图片描述
将下面的环境变量写入~/.bashrc

#netcdf-c
export NETCDF_C=/home/gukq20/pengyf/tools/netcdf4.4-c
export NETCDF_C_LIB=$NETCDF_C/lib
export NETCDF_C_INC=$NETCDF_C/include
export PATH=$NETCDF_C/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF_C/lib:$LD_LIBRARY_PATH

#netcdf-f
export NETCDF_F=/home/gukq20/pengyf/tools/netcdf4.4-intelf
export NETCDF_F_LIB=$NETCDF_F/lib
export NETCDF_F_INC=$NETCDF_F/include
export PATH=$NETCDF_F/bin:$PATH
export LD_LIBRARY_PATH=$NETCDF_F/lib:$LD_LIBRARY_PATH

然后source ~/.bashrc

3.安装perl5

./Configure -des -Dprefix=/home/gukq20/pengyf/tools/perl-5.16.1
make
make install

安装成功截图
在这里插入图片描述

将环境变量写进~/.bashrc文件中

#perl 
export PERL=/home/gukq20/pengyf/tools/perl-5.16.1
export PATH=$PERL/bin:$PATH
export PERL_LOCAL_LIB_ROOT=$PERL
export PERL_LIB=$PERL/lib
export PERL_MB_OPT="--install_base $PERL"
export PERL_MM_OPT="INSTALL_BASE=$PERL"
#export PERL5LIB=$PERL/lib:$PERL/lib/perl5:$PERL5LIB
export PERL5LIB=/home/gukq20/pengyf/tools/perl-5.16.1/lib:/home/gukq20/pengyf/tools/perl-5.16.1/lib/perl5:$PERL5LIB

然后source ~/.bashrc

4.安装libxml2

./configure --prefix=/home/gukq20/pengyf/tools/libxml2
make
make install

安装成功截图
在这里插入图片描述

5.安装4个xml组件(一定要按顺序)

XML-NamespaceSupport-1.12
XML-SAX-Base-1.09
XML-SAX-1.00
XML-LibXML-2.0132

perl Makefile.PL   #自己会去找perl的路径
make
make  install

安装的整个过程截图
在这里插入图片描述

perl Makefile.PL
make
make install

成功截图如下:
在这里插入图片描述

perl Makefile.PL
make
make install

成功截图如下:
在这里插入图片描述

perl Makefile.PL INC='-I/home/gukq20/pengyf/tools/libxml2/include/libxml2/' LIBS='-L/home/gukq20/pengyf/tools/libxml2/lib' DEBUG=1
make
make install

这个一定要注意这个INC和LIBS的路径,写错了就会报错。注意:如果这里报错了,就在INC那个路径往里写或者往外写几层,可能就可以了,尝试一下
成功截图如下:
在这里插入图片描述

6.安装ESMF

先将环境变量写入~/.bashrc
需要改的有第一行和第二行,第一行是安装包解压后的路径,第二行是你要安装的路径

#ESMF   
export ESMF_DIR=/home/gukq20/pengyf/packages/unzip/esmf-ESMF_7_1_0r
export instl_path=/home/gukq20/pengyf/tools/esmf
export ESMF_BOPT=g
export ESMF_COMM=mpiuni
export ESMF_COMPILER=gfortran
export ESMF_ABI=64
export ESMF_INSTALL_PREFIX=$instl_path/esmf_install
#export ESMF_NETCDF=$instl_path/esmf/netcdf
export ESMF_NETCDF_INCLUDE=$instl_path/esmf/netcdf/include
#export ESMF_NETCDF_LIBPATH=$instl_path/netcdf-4.6.1/lib
export ESMF_NETCDF_LIBPATH=$instl_path/esmf/netcdf/lib
export ESMF_NETCDF_LIBS="-lnetcdf -lnetcdff"

export ESMF_OS=Linux
export ESMF_TESTMPMD=ON
export ESMF_PTHREADS=ON
export ESMF_OPENMP=ON
export ESMF_TESTEXHAUSTIVE=ON
export ESMF_TESTHARNESS_ARRAY=RUN_ESMF_TestHarnessArrayUNI_2
export ESMF_TESTHARNESS_FIELD=RUN_ESMF_TestHarnessFieldUNI_1
export ESMF_NO_INTEGER_1_BYTE=FALSE
export ESMF_NO_INTEGER_2_BYTE=FALSE
export ESMF_FORTRANSYMBOLS=default
export ESMF_DEFER_LIB_BUILD=ON
export ESMF_TESTWITHTHREADS=OFF
export ESMF_CXXCOMPILER=g++
export ESMF_CXXLINKER=g++
export ESMF_F90COMPILER=gfortran
export ESMF_F90LINKER=gfortran
export ESMF_INSTALL_BINDIR=bin/bing/Linux.gfortran.64.mpiuni.default
export ESMF_INSTALL_MODDIR=mod/modg/Linux.gfortran.64.mpiuni.default
export ESMF_INSTALL_LIBDIR=lib/libg/Linux.gfortran.64.mpiuni.default
export ESMF_INSTALL_HEADERDIR=include
export ESMF_INSTALL_DOCDIR=doc


export ESMFBIN_PATH=$ESMF/bin/bing/Linux.gfortran.64.mpiuni.default
export ESMFLIB_PATH=$ESMF/lib/libg/Linux.gfortran.64.mpiuni.default

export MPIEXEC=$MPICH/bin/mpiexec

export MY_ESMF_REGRID=$instl_path/esmf/bin/bing/Linux.gfortran.64.mpiuni.default/ESMF_RegridWeightGen

写进去之后记得souce ~/.bashrc

make
make isntall

7.安装cmake

安装cmake的时候小白遇到了两种气矿,一个安装包解压后是lib,share,include这几个常见的安装后的目录的;这个只需要写环境变量就可以了;另一种是需要我们编译安装的,如下:(./bootstrap这一定要执行,不然会报gmake的错)

wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -zxvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap
gmake
gmake install

./configure  --prefix=****
make
make install 
export cmake=/home/gukq20/pengyf/tools/cmake
export PATH=$PATH:$cmake/bin

二、下载安装包

1.下载安装包和模块库
mkdir modlel
cd model
git clone -b release-cesm2.1.3 https://github.com/ESCOMP/CESM.git my_cesm_sandbox
cd my_cesm_sandbox
git tag --list 'release-cesm2*'    #列出发布的版本
./manage_externals/checkout_externals    
#如果上面这步失败了再运行一次应该就可以了,如果还是不行执行
./manage_externals/checkout_externals --logging
#查看日志文件(manage_externals.log)看看是什么问题,确保下载完了在用程序检查完整性
./manage_externals/checkout_externals -S

如果下载完整就会看到

Processing externals description file : Externals.cfg
Processing externals description file : Externals_CLM.cfg
Processing externals description file : Externals_POP.cfg
Processing externals description file : Externals_CISM.cfg
Checking status of externals: clm, fates, ptclm, mosart, ww3, cime, cice, pop, cvmix, marbl, cism, source_cism, rtm, cam,
    ./cime
    ./components/cam
    ./components/cice
    ./components/cism
    ./components/cism/source_cism
    ./components/clm
    ./components/clm/src/fates
    ./components/clm/tools/PTCLM
    ./components/mosart
    ./components/pop
    ./components/pop/externals/CVMix
    ./components/pop/externals/MARBL
    ./components/rtm
    ./components/ww3
2.修改两个文件

建议直接复制下面这些内容改一下路径就好,不然这个改错了一个空格都会报错(曾经经历过)

cd cime/config/cesm/machines
vim config_machines.xml

<?xml version="1.0"?>

<!--

===============================================================
COMPILER and COMPILERS
===============================================================
If a machine supports multiple compilers - then
- the settings for COMPILERS should reflect the supported compilers
as a comma separated string
- the setting for COMPILER should be the default compiler
(which is one of the values in COMPILERS)

===============================================================
MPILIB and MPILIBS
===============================================================
If a machine supports only one MPILIB is supported - then
the setting for  MPILIB and MPILIBS should be blank ("")
If a machine supports multiple mpi libraries (e.g. mpich and openmpi)
- the settings for MPILIBS should reflect the supported mpi libraries
as a comma separated string

The default settings for COMPILERS and MPILIBS is blank (in config_machines.xml)

Normally variable substitutions are not made until the case scripts are run, however variables
of the form $ENV{VARIABLE_NAME} are substituted in create_newcase from the environment
variable of the same name if it exists.

===============================================================
PROJECT_REQUIRED
===============================================================
A machine may need the PROJECT xml variable to be defined either because it is
used in some paths, or because it is used to give an account number in the job
submission script. If either of these are the case, then PROJECT_REQUIRED
should be set to TRUE for the given machine.


mpirun: the mpirun command that will be used to actually launch the model.
The attributes used to choose the mpirun command are:

mpilib: can either be 'default' the name of an mpi library, or a compiler name so one can choose the mpirun
based on the mpi library in use.

the 'executable' tag must have arguments required for the chosen mpirun, as well as the executable name.

unit_testing: can be 'true' or 'false'.
This allows using a different mpirun command to launch unit tests

-->

<config_machines version="2.0">
  <machine MACH="ibmintel">
    <DESC>centos7 linux</DESC>
    <NODENAME_REGEX>pengyf</NODENAME_REGEX>
    <OS>LINUX</OS>
    <COMPILERS>intel</COMPILERS>
    <MPILIBS>impi</MPILIBS>
    <PROJECT>none</PROJECT>
    <SAVE_TIMING_DIR>$ENV{HOME}</SAVE_TIMING_DIR>
    <CIME_OUTPUT_ROOT>/home/gukq20/pengyf/model/cesm2/cime/case</CIME_OUTPUT_ROOT>
    <DIN_LOC_ROOT>/home/gukq20/pengyf/model/cesm2/cesminput</DIN_LOC_ROOT>
    <DIN_LOC_ROOT_CLMFORC>/home/gukq20/pengyf/model/cesm2/cesminput/atm/datm7</DIN_LOC_ROOT_CLMFORC>
    <DOUT_S_ROOT>$CIME_OUTPUT_ROOT/cases</DOUT_S_ROOT>
    <BASELINE_ROOT>/home/gukq20/pengyf/model/cesm2/cime/ccsm_baselines</BASELINE_ROOT>
    <CCSM_CPRNC>/home/gukq20/pengyf/model/cesm2/cime/tools/cprnc</CCSM_CPRNC>
    <GMAKE>make</GMAKE>
    <GMAKE_J>16</GMAKE_J>
    <BATCH_SYSTEM>none</BATCH_SYSTEM>
    <SUPPORTED_BY>pengyf16@lzu.edu.cn</SUPPORTED_BY>
    <MAX_TASKS_PER_NODE>128</MAX_TASKS_PER_NODE>
    <MAX_MPITASKS_PER_NODE>128</MAX_MPITASKS_PER_NODE>
    <mpirun mpilib="default">
      <executable>mpirun</executable>
      <arguments>
        <arg name="num_tasks"> -n 128</arg>
        <arg name="lib">-genv  LD_LIBRARY_PATH /home/gukq20/pengyf/tools/netcdf4.4-intelf/lib:$LD_LIBRARY_PATH</arg>
        </arguments>
    </mpirun>
    <module_system type="none">
    </module_system>
    <environment_variables>
      <env name="NETCDFROOT">/home/gukq20/pengyf/tools/netcdf4.4-intelf</env>
      <env name="OMP_STACKSIZE">256M</env>
      <env name="PATH">$ENV{HOME}/bin:$ENV{PATH}</env>
      <env name="HDF5_PATH">/home/gukq20/pengyf/tools/hdf5</env>
      <env name="ZLIB_PATH">/home/gukq20/pengyf/tools/zlib-1.2.11</env>
      <env name="ESMF_PAHT">/home/gukq20/pengyf/tools/esmf</env>
    </environment_variables>
  </machine>
  <default_run_suffix>
    <default_run_exe>${EXEROOT}/cesm.exe</default_run_exe>
    <default_run_misc_suffix> >> cesm.log </default_run_misc_suffix>
    </default_run_suffix>
  </config_machines>
vim config_compilers.xml

这个需要改的就只有netcdf的路径

<?xml version="1.0" encoding="UTF-8"?>
<config_compilers version="2.0">
<!--
========================================================================
This file defines compiler flags for building CESM.  General flags are listed first
followed by flags specific to particular operating systems, followed by particular machines.

More general flags are replaced by more specific flags.

Attributes indicate that an if clause should be added to the Macros so that these flags are added
only under the conditions described by the attribute(s).

The env_mach_specific file may set environment variables or load modules which set environment variables
which are then  used in the Makefile.   For example the NETCDF_PATH on many machines is set by a module.

========================================================================
Serial/MPI compiler specification
========================================================================

SCC   and  SFC specifies the serial compiler
MPICC and  MPICC specifies the mpi compiler

if $MPILIB is set to mpi-serial then
CC = $SCC
FC = $SFC
MPICC = $SCC
MPIFC = $SFC
INC_MPI = $(CIMEROOT)/src/externals/mct/mpi-serial

========================================================================
Options for including C++ code in the build
========================================================================

SUPPORTS_CXX (TRUE/FALSE): Whether we have defined all the necessary
settings for including C++ code in the build for this compiler (or
this compiler/machine combination). See below for a description of the
necessary settings.

The following are required for a compiler to support the inclusion of
C++ code:

SCXX: serial C++ compiler

MPICXX: mpi C++ compiler

CXX_LINKER (CXX/FORTRAN): When C++ code is included in the build, do
we use a C++ or Fortran linker?

In addition, some compilers require additional libraries or link-time
flags, specified via CXX_LIBS or CXX_LDFLAGS, as in the following
examples:

<CXX_LIBS> -L/path/to/directory -lfoo </CXX_LIBS>

or

<CXX_LDFLAGS> -cxxlib </CXX_LDFLAGS>

Note that these libraries or LDFLAGS will be added on the link line,
regardless of whether we are using a C++ or Fortran linker. For
example, if CXX_LINKER=CXX, then the above CXX_LIBS line should
specify extra libraries needed when linking C++ and fortran code using
a C++ linker. If CXX_LINKER=FORTRAN, then the above CXX_LDFLAGS line
should specify extra LDFLAGS needed when linking C++ and fortran code
using a fortran linker.

-->
<!-- Define default values that can be overridden by specific
     compilers -->

<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>
  <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>
  <NETCDF_PATH>/home/gukq20/pengyf/tools/netcdf4.4-intelf/</NETCDF_PATH>
  <SLIBS>
    <base> -L${NETCDF_PATH}/lib  -lnetcdff -L$ENV{MKL_PATH} -lmkl_rt</base>
    <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"> -mkl=cluster </append>
    <append MPILIB="mpi-serial"> -mkl </append>
  </SLIBS>
  <SUPPORTS_CXX>TRUE</SUPPORTS_CXX>
</compiler>
</config_compilers>
  • 34
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值