The CCSM has a special csm_share libary. This share code was build
with ccsm in mind. It has modules that define constants, handle
system calls, facsilitate component communication, and carry out
internal timing among other things.
The CCSM also may use a number of general-purpose software libraries that
are or are not widely distributed and in some cases relatively new.
Examples include locally developed utility libraries like a timing
library or calendar manager as well as externally developed libraries like
the Model Coupling Toolkit (MCT) developed at Argonne National Laboratory or
the Message Passing Handshaking (MPH) developed at Lawrence Berkeley National
It is desirable that all such libraries are integrated
into the CCSM in an orderly and consistent fashion.
This section describes the policies for integrating such libraries.
csm_share code will be a unique ccsm ``component''. The source will be available in the repository similar to all other components and it will be compiled directly into ccsm components as necessary. The requirements for csm_share are
Unit tests should be built for csm_share.
When more than one model component uses the same constant, that constant
should be defined in the share constant module and all components that
use that constant should use the value defined in that module.
These can either be manually verified by checking that
constants in components agree with the values in the module or by
specifically ``using'' the shr_const_module and defining internal constants
from the module directly. The second method is recommended. The share
constants values will be reviewed
periodically by scientific staff and new constants may be added from time
The values of the share constants are
``to be filled in later''
For the convenience of users and also for faster modification and debugging in case of problems, we will bundle these library source codes with the CCSM distribution. These libraries will be integrated into the CCSM as follows:
In addition to the above we set certain requirements for external packages. These are: