Setting up CAM on your own linux PC

CAM is the atmospheric component of NoRESM. It is possible to compile and run CAM on your own Linux PC. This makes it easier to debug simple tests using programs like ddd or gdb. CAM 5.3 compiles with gfortran.

Obtain CAM 5.3 source code

svn checkout
https://svn-ccsm-release.cgd.ucar.edu/model_versions/cesm1_2_0

You will be asked for a user name and password. You can easily get that from NCAR through http://www.cesm.ucar.edu/models/cesm1.0/register/register_cesm1.0.cgi

(the first time it will use your unix user name.. Just type the wrong password, and then it will prompt you for another user name, then use the one provided by NCAR).

  • To use the development version of CAM5-Oslo, check out NorESM (not
    CESM) from the noresm repository**
svn checkout
https://svn.met.no/NorESM/noresm/branches/featureCAM5-OsloDevelopment_trunk2.0-4
myCamOsloDev

Compile the netcdf libraries using gfortran

1) INSTALL NETCDF (4.2): Follow instructions on http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-install/Quick-Instructions.html#Quick-Instructions

I created library directories on /home/alfg/LIBS/.

For example /home/alfg/LIBS/netcdf-4.2.gfortran. These directories are use as “prefix=” in the installation guide..

When installing:

  • Use instructions on how to build with hdf5
  • Use the instructions about shared libraries. (There are also instructions about static libraries)
  • Remember to set the LD_LIBRARY_PATH variable as described. Otherwise it does not work.

==> Some exceptions

(Build order is wrong) http://mail.lists.hdfgroup.org/pipermail/hdf-forum_lists.hdfgroup.org/2013-May/006818.html

(Have to do separately)

make
make check
make install

Add the following to your .bashrc file:

export FC=gfortran
export CC=gcc
export CFLAGS=-O0
export CXX=g++
export CXXFLAGS=-O0

The netcdf c-library complains about a non-successful compilation because it can not find Doxyfile. This is not important. The compilation needs also the following env-variables: CPPFLAGS=-I${dir}/include, LDFLAGS=-L${dir}/lib, where “dir” is directory you use for the “configure” scripts

3) Get the netcdf source code (including the c-headers) from http://www.unidata.ucar.edu/software/netcdf/docs/getting.html a) make b) make check c) make install

4) Get fortran netcdf api (http://www.unidata.ucar.edu/downloads/netcdf/index.jsp) and follow http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-fortran-install.html

Compile CAM on your Linux PC

When you have succesfully obtained netCDF libraries, you need to set some environent variables in order to tell CAM where to find these libraries, add the following to your .bashrc file (but change the path to the correct path). Make sure you have the netcdf.mod-file in “MOD_NETCF”. These environment variables are used by the CAM “configure” script!

export INC_NETCDF=/home/alfg/LIBS/netcdf-4.2.gfortran/include export
LIB_NETCDF=/home/alfg/LIBS/netcdf-4.2.gfortran/lib export
MOD_NETCDF=/home/alfg/LIBS/netcdf-4.2.gfortran/include export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIB_NETCDF

The steps for building and installing CAM are well described at http://www.cesm.ucar.edu/models/cesm1.0/cam/docs/ug5_1/ug.html

You need the following settings in your .bashrc file:

export camcfg=/path/to/CESM_1_2_0/cesm1_2_0/models/atm/cam/bld
export CSMDATA=/path/to/cam/input/data

This command configures CAM (not including any CAM-Oslo code) on my machine. It creates a Makefile used later for compilation.

$camcfg/configure -dyn fv -debug -hgrid 10x15 -fc gfortran -nospmd
-nosmp -test -fc_type gnu
  • As long as $camcfg is defined, you can execute this from any
    directory..**

Then you need the following commands **executed from the same directory as you executed “configure”** $camcfg/build-namelist -test -config config_cache.xml

make

The input data have been collected and put at norstore:

/projects/NS2345K/noresm/CAM5.3_PCLinux/CAM5.3Input10x15/csm/inputdata

You should copy these files to somewhere on your computer. The CSMDATA environment variable should point to the “input-data” directory after the copying. For example I copied it to /disk1/alfg/csm/, so my $CSMDATA is alfg@pc4400:$ echo $CSMDATA /disk1/alfg/csm/inputdata

Finally run the model simply executing the command ./cam

NOTE: In CAM5.5 (upcoming versions) this same procedure is supposed to work with the following command (NOT VERIFIED):

$camcfg/configure -fc
gfortran -fc_type gnu -debug -nospmd -nosmp -dyn fv -res 10x15 -ice sice
-phys cam5

Including cam-oslo code

This assumes you checked out NorESM (and CESM) with subversion

Works with latest version of oslo aerosol development branch

$camcfg/configure -dyn fv -debug -hgrid 10x15 -fc gfortran -nospmd -nosmp -test -fc_type gnu -chem trop_mam_oslo ``

There are additional input needed for the CAM-Oslo code. They are available in the same input-directory as the normal CESM-input files. As long as the whole input directory is copied and the CSMDATA-environmen-variable is set, you don’t have to do anything. The input-directory at norstore is:

/projects/NS2345K/noresm/CAM5.3_PCLinux/CAM5.3Input10x15/csm/inputdata

Debug the model using ddd or gdb

Some first test show that the following information is useful:

gdb hangs forever on backtrace commmand sometimes. Adding //set print frame-arguments none// to your ~/.gdbinit file solves that problem on the expense of less information on “bt” command.

ddd sometimes hangs forever on startup. If that happens you need to remove the ~/.ddd/init file

gdb has problems with printing info about allocatable arrays. Allocatable arrays have to be displayed as “*((real_8 *)my_array + N)@M” where N is number of elements beyond first element and M is number of elements to show. (See bottom of this page (and links therein) http://stackoverflow.com/questions/11786958/how-to-print-fortran-arrays-in-gdb)

It is sometimes useful to let the compiler tell you about additional errors. Assuming you use gfortran on your PC: See https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html for additional options. For example if you want to check just about everything, add “-fcheck=all” to the “FC_FLAGS” in the gfortran section. (Note: Running configure again re-generates the Makefile)

View results

ncview has trouble visualizing results which are of this coarse resolution (10x15 degrees). Panoply is a better option. Download from http://www.giss.nasa.gov/tools/panoply/download_gen.html

`` - Unpack the files``
`` - Add the folder where you find panoply.sh to your path (in your .bashrc file, add: export PATH=$PATH:/path/to/panoply/dot/sh)``
`` - launch program with “panoply.sh netcdfFileName” from any folder``

Configure your case

If you want an other configuration than the standard configuration, you must add a use-case. The use case is an xml-file which is added to the /cesm1_2_0/models/atm/cam/bld/namelist_files/use_cases/ directory.

Below is an example of a use-case which writes some more frequent output (every hour) to history files.

The file says that we have 5 different history files. The first one is the monthly output with max one time step. The other files are output every hour (-1) with max number of samples 30 in each file.

For each of the different files (1-5) we have specified the fields we want to output. For example in the second, we output QREFHT, TREFHTMN etc..

Fields which end in “:I” are instantaneous values as opposed to time averages.

Save the xml-file to the use_cases directory as “my_case.xml” and run the command

$camcfg/build-namelist -test -config config_cache.xml -use_case my_case

 <?xml version="1.0"?>

 1,30,30,30,30

 0,-1,-1,-1,-1

 'QREFHT','TREFHTMN','TREFHTMX','TREFHT','PRECT','PRECC','PRECSC','PRECSL','PSL','T','Z3','U','V','PS','TS','SST','PHIS','CLDTOT'
 'U850:I','V850:I','T850:I','Q850:I','OMEGA850:I','U:I','V:I','T:I','PS:I','PSL:I','Q:I','PHIS:I'
 'PRECT','LHFLX','SHFLX','FLDS','FLNS','FSNS','PRECC','PRECSC','PRECSL'
 'TREFHT:I','QREFHT:I','TS:I','SST:I','PS:I'