4.2. Dynamics

The CICE cicecore/ directory consists of the non icepack source code. Within that directory there are the following subdirectories

cicecore/cicedyn/analysis contains higher level history and diagnostic routines.

cicecore/cicedyn/dynamics contains all the dynamical evp, eap, and transport routines.

cicecore/cicedyn/general contains routines associated with forcing, flux calculation, initialization, and model timestepping.

cicecore/cicedyn/infrastructure contains most of the low-level infrastructure associated with communication (halo updates, gather, scatter, global sums, etc) and I/O reading and writing binary and netcdf files.

cicecore/drivers/ contains subdirectories that support stand-alone drivers and other high level coupling layers.

cicecore/shared/ contains some basic methods related to grid decomposition, time managers, constants, kinds, and restart capabilities.

4.2.1. Dynamical Solvers

The dynamics solvers are found in cicecore/cicedyn/dynamics/. A couple of different solvers are available including EVP, EAP and VP. The dynamics solver is specified in namelist with the kdyn variable. kdyn=1 is evp, kdyn=2 is eap, kdyn=3 is VP.

Two alternative implementations of EVP are included. The first alternative is the Revised EVP, triggered when the revised_evp is set to true. The second alternative is the 1d EVP solver triggered when the evp_algorithm is set to shared_mem_1d as oppose to the default setting of evp_standard_2d. The solutions with evp_algorithm set to standard_2d or shared_mem_1d will not be bit-for-bit identical when compared to each other. The reason for this is floating point round off errors that occur unless strict compiler flags are used. evp_algorithm=shared_mem_1d is primarily built for OpenMP. If MPI domain splitting is used then the solver will only run on the master processor. evp_algorithm=shared_mem_1d is not supported with the tripole grid.

4.2.2. Transport

The transport (advection) methods are found in cicecore/cicedyn/dynamics/. Two methods are supported, upwind and remap. These are set in namelist via the advection variable. Transport can be disabled with the ktransport namelist variable.