It is possible to enable some features by selecting which code should
be part of the principal program. Each of these optionnal features are
associated with a select flag.
For example
double precision is used instead of simple precision with
the ‘double’ select flag,
the model is a subroutine with the select flag ‘monitor’,
the Kalman filter code is set with ‘kalman’ and the 1D gridded
model capabilities are associated with ‘grid1d’.
To select a given feature the cmz statement sel select_flag
should
be written down in the ‘selseq.kumac’ found in the model directory.
With make either the corresponding variable should be set to 1 or it
should be added to the SEL
make variable, depending on the feature.
Other features don’t need different or additional code to be used.
Most of the features are enabled by setting specific logical variables to
‘.true.’. This is the case for
zback
for the adjoint model, zcommand
if the command is in a file
and zlaw
if it is a function and zkalman
for the Kalman filter.
These select and logical flags are described in the corresponding sections.
In cmz an alternative of writing select flags to ‘selseq.kumac’ is to
drive the compilation with smod sel_flag
. In that case the
sel_flag is selected and the files and executable goes to a directory
named ‘sel_flag’.
The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.