Installing CCSM3

From oldwiki.scinet.utoronto.ca
Jump to navigation Jump to search

WARNING: The last edit of this page is over two years old. The information on this page may be out-of-date.

This page is mostly a record of the steps needed to install CCSM3 on the General Purpose Cluster (GPC) (Linux). This may be useful for running the model through it's initialization step, if for example, you want to change the boundary conditions and need to see if the model initializes with the new boundary conditions.

The first several lines of the Macros.Linux (configuration) file (Using Intel Fortran Compilers):

#===============================================================================
# CVS $Id: Macros.Linux,v 1.11.2.4 2007/01/17 05:17:49 tcraig Exp $
# CVS $Source: /fs/cgd/csm/models/CVS.REPOS/shared/bld/Macros.Linux,v $
# CVS $Name: ccsm3_0_1_beta24 $
#===============================================================================
### Makefile macros for "Linux", supports portland + gnu 
# Makefile macros for "Linux", supports Intel compilers + gnu 
#===============================================================================  

INCLDIR    := -I. -I$(FPATH) -I$(SCINET_NETCDF_INC) -I$(INCROOT) -I$(INC_MPI) -I$(NETCDF_MOD)

#SLIBS      := -L$(LIB_NETCDF) -lnetcdf  -llapack -lblas
#SLIBS      := -L$(LIBRARY_PATH) -lmkl_lapack -lmkl_em64t -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -L/usr/local/lib -lnetcdf
SLIBS      := -L$(SCINET_NETCDF_LIB) -lnetcdf

CPP        := NONE
CPPFLAGS   :=
CPPDEFS    := -DLINUX -DFORTRANUNDERSCORE -DLINUX  -DNO_SHR_VMATH
CPPFLAGS   := -DLINUX -DNO_SHR_VMATH -DINTEL_COMPILER -Df2cFortran
FC         := mpif90
#FFLAGS     := -c -r8 -i4 -Kieee -Mrecursive -Mdalign -Mextend
#FFLAGS     := -c -real-size 64 -integer-size 32 -align all -fltconsistency -recursive -extend_source 132
## This compiles on intel x86_64
FFLAGS     := -O0 -cpp -c -real-size 64 -integer-size 32 -align all -fltconsistency -save   

#FFLAGS     := -c -r8 -i4 -autodouble -align all -fltconsistency -recursive -fast
#FFLAGS     := -cpp -c -r8 -i4 -132 -autodouble -convert big_endian -fp-model precise -prec-div -prec-sqrt -recursive -align all -fltconsistency 
CC         := mpicc
CFLAGS     := -c -DUSE_GCC

FIXEDFLAGS := 
FREEFLAGS  := -free
MOD_SUFFIX := mod
LD         := $(FC)
AR         := ar
ULIBS      := -L$(LIBROOT) -lesmf -lmct -lmpeu -lmph
FLIBS      := -L/usr/local/lib


In /project/ccsm/ccsm3_current/scripts/ccsm_utils/Machines

Modified these files:

run.linux.gpc added:

mpirun -np $NTASKS[1] ./$COMPONENTS[1] : -np $NTASKS[2] ./$COMPONENTS[2] : -np $NTASKS[3] ./$COMPONENTS[3] : -np $NTASKS[4] ./$COMPONENTS[4] : -np $NTASKS[5] ./$COMPONENTS[5]


batch.linux.gpc Mirrored the other linux batch config file, you may need to change in your run script after the model is built to run on torque PBS properly

#! /bin/csh -f
#===============================================================================
#  This is a CCSM batch job script for $mach
#===============================================================================
## BATCH INFO
#PBS -N ${jobname}
#PBS -q ${qname}
##PBS -l nodes=${nodes}:ib:ppn=${tasks}
#PBS -l walltime=${tlimit}
#PBS -r n
#PBS -j oe
#PBS -k oe
#PBS -S /bin/csh -V
 
limit coredumpsize 1000000
limit stacksize unlimited


env.linux.gpc

# General machine specific environment variables  - edit before the initial build
# -------------------------------------------------------------------------

setenv LIB_NETCDF $SCINET_NETCDF_LIB
setenv INC_NETCDF $SCINET_NETCDF_INC
setenv INC_MPI $SCINET_MPI_INC
setenv SCRATCH /scratch/$USER/
 
if !($?SCRATCH) then
  set SCRATCH = $HOME
  echo "## Warning: SCRATCH not defined in system environment. Set SCRATCH to be $HOME";
endif
 
setenv EXEROOT             $SCRATCH/exe/$CASE
setenv RUNROOT             $EXEROOT
setenv GMAKE_J             1 

#####set the path for netcdf module: netcdf.mod
if(! $?NETCDF_MOD) then
   ##### user need to set this variable.
   ### setenv NETCDF_MOD /usr/local/lib64/r4i4
endif
 
 
# -------------------------------------------------------------------------
# Environment variables for prestaging input data - edit anytime during run
# -------------------------------------------------------------------------  

setenv DIN_LOC_ROOT        /project/ccsm/inputdata
setenv DIN_LOC_ROOT_USER   /project/ccsm/inputdata_user


Modified check_machine to include gpc:

/project/ccsm/ccsm3_current/scripts/ccsm_utils/Tools/check_machine


Changed:

/project/ccsm/ccsm3_current/scripts/ccsm_utils/Components/esmf.buildlib

diff esmf.buildlib esmf.buildlib~

24c24
< if ($OS == 'Linux')        setenv ESMF_ARCH linux_intel
---
> if ($OS == 'Linux')        setenv ESMF_ARCH linux_pgi

Edit /project/ccsm/ccsm3_current/scripts/ccsm_utils/Components/mct.buildlib

MCT configure wants to grab gfortran because of the PATH order

if ( `uname` == "Linux" ) then
    setenv FC mpif90
endif

Finally make sure the following modules are loaded: intel, intelmpi, netcdf4.0.1_nc3, gcc

I have the following set on GPC:

 Currently Loaded Modulefiles:
 1) intel/intel-v11.1.072     3) gcc/4.4.0                 5) netcdf/4.0.1_nc3_intel    7) parallel-netcdf/1.1.1
 2) intelmpi/impi-4.0.0.027   4) Xlibraries/X11-64         6) python/2.6.2

My .bashrc has:

if [ "${HOST}" == "AIX" ]; then
 # do things for the TCS machine
 :
else
 # do things for the GPC machine
 module load intel intelmpi gcc Xlibraries netcdf python parallel-netcdf
 export MACH="gpc"
 export PATH="/home/$LOGNAME/bin:$PATH:/scinet/gpc/bin"
 :
fi