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.