|
|
|
Next: 3.19.3 Compiling the model
Up: 3.19 Sensitivity of Air-Sea
Previous: 3.19.1 Overview of the
Contents
Subsections
The model configuration for this experiment resides under the
directory verification/carbon/.
The code customization routines are in verification/carbon/code/:
- .genmakerc
- COST_CPPOPTIONS.h
- CPP_EEOPTIONS.h
- CPP_OPTIONS.h
- CTRL_OPTIONS.h
- ECCO_OPTIONS.h
- SIZE.h
- adcommon.h
- tamc.h
The runtime flag and parameters settings are contained in
verification/carbon/input/,
together with the forcing fields and and restart files:
- data
- data.cost
- data.ctrl
- data.gmredi
- data.grdchk
- data.optim
- data.pkg
- eedata
- topog.bin
- windx.bin, windy.bin
- salt.bin, theta.bin
- SSS.bin, SST.bin
- pickup*
Finally, the file to generate the adjoint code resides in
:
Below we describe the customizations of this files which are
specific to this experiment.
This file overwrites default settings of genmake.
In the present example it is used to switch on the following
packages which are related to automatic differentiation
and are disabled by default:
set ENABLE=( autodiff cost ctrl ecco gmredi grdchk kpp )
Other packages which are not needed are switched off:
set DISABLE=( aim obcs zonal_filt shap_filt cal exf )
These files used to contain package-specific CPP-options
(see Section ref:ask-the-author).
For technical reasons those options have been grouped together
in the file ECCO_OPTIONS.h.
To retain the modularity, the files have been kept and contain
the standard include of the CPP_OPTIONS.h file.
This file contains 'wrapper'-specific CPP options.
It only needs to be changed if the code is to be run
in a parallel environment (see Section ref:ask-the-author).
This file contains model-specific CPP options
(see Section ref:ask-the-author).
Most options are related to the forward model setup.
They are identical to the global steady circulation setup of
verification/global_ocean.90x40x15/.
The three options specific to this experiment are
#define ALLOW_PASSIVE_TRACER
This flag enables the code to carry through the
advection/diffusion of a passive tracer along the
model integration.
#define ALLOW_MIT_ADJOINT_RUN
This flag enables the inclusion of some AD-related fields
concerning initialization, link between control variables
and forward model variables, and the call to the top-level
forward/adjoint subroutine adthe_main_loop
instead of the_main_loop.
#define ALLOW_GRADIENT_CHECK
This flag enables the gradient check package.
After computing the unperturbed cost function and its gradient,
a series of computations are performed for which
an element of the control vector is perturbed
the cost function w.r.t. the perturbed element is
computed
the difference between the perturbed and unperturbed
cost function is computed to compute the finite difference gradient
the finite difference gradient is compared with the
adjoint-generated gradient.
The gradient check package is further described in Section ???.
The CPP options of several AD-related packages are grouped
in this file:
- Overall ECCO-related execution modus:
These determine whether a pure forward run,
a sensitivity run or an iteration of optimization is
performed. These options are not needed in the present context.
- Adjoint support package: pkg/autodiff/
This package contains hand-written adjoint code such as
active file handling, flow directives for files which must not
be differentiated, and TAMC-specific header files.
#define ALLOW_AUTODIFF_TAMC
defines TAMC-related features in the code.
#define ALLOW_TAMC_CHECKPOINTING
enables the checkpointing feature of TAMC
(see Section ref:ask-the-author).
In the present example a 3-level checkpointing is implemented.
The code contains the relevant store directives, common block
and tape initializations, storing key computation,
and loop index handling.
The checkpointing length at each level is defined in
file tamc.h, cf. below.
The out and intermediate loop directivs are contained
in the files checkpoint_lev3_directives.h,
checkpoint_lev2_directives.h (package pkg/autodiff).
#define ALLOW_AUTODIFF_MONITOOR
enables the monitoring of intermediate adjoint variables
(see Section ref:ask-the-author).
#define ALLOW_DIVIDED_ADJOINT
enables adjoint dump and restart
(see Section ref:ask-the-author).
- Cost function package: pkg/cost/
This package contains all relevant routines for
initializing, accumulating and finalizing the cost function
(see Section ref:ask-the-author).
#define ALLOW_COST
enables all general aspects of the cost function handling,
in particular the hooks in the forward code for
initializing, accumulating and finalizing the cost function.
#define ALLOW_COST_TRACER
includes the call to the cost function for this
particular experiment, eqn. (3.95).
- Control variable package: pkg/ctrl/
This package contains all relevant routines for
the handling of the control vector.
Each control variable can be enabled/disabled with its own flag:
#define ALLOW_THETA0_CONTROL |
initial temperature |
#define ALLOW_SALT0_CONTROL |
initial salinity |
#define ALLOW_TR0_CONTROL |
initial passive tracer concentration |
#define ALLOW_TAUU0_CONTROL |
zonal wind stress |
#define ALLOW_TAUV0_CONTROL |
meridional wind stress |
#define ALLOW_SFLUX0_CONTROL |
freshwater flux |
#define ALLOW_HFLUX0_CONTROL |
heat flux |
#define ALLOW_DIFFKR_CONTROL |
diapycnal diffusivity |
#undef ALLOW_KAPPAGM_CONTROL |
isopycnal diffusivity |
The file contains the grid point dimensions of the forward
model. It is identical to the verification/exp2/:
sNx = 90
sNy = 40
Nr = 20
It corresponds to a single-tile/single-processor setup:
nSx = nSy = 1, nPx = nPy = 1,
with standard overlap dimensioning
OLx = OLy = 3.
This file contains common blocks of some adjoint variables
that are generated by TAMC.
The common blocks are used by the adjoint support routine
addummy_in_stepping which needs to access those variables:
common /addynvars_r/ |
is related to DYNVARS.h |
common /addynvars_cd/ |
is related to DYNVARS.h |
common /addynvars_diffkr/ |
is related to DYNVARS.h |
common /addynvars_kapgm/ |
is related to DYNVARS.h |
common /adtr1_r/ |
is related to TR1.h |
common /adffields/ |
is related to FFIELDS.h |
Note that if the structure of the common block changes in the
above header files of the forward code, the structure
of the adjoint common blocks will change accordingly.
Thus, it has to be made sure that the structure of the
adjoint common block in the hand-written file adcommon.h
complies with the automatically generated adjoint common blocks
in adjoint_model.F.
The header file is enabled via the CPP-option
ALLOW_AUTODIFF_MONITOR.
This routine contains the dimensions for TAMC checkpointing
and some indices relevant for storing ky computations.
- #ifdef ALLOW_TAMC_CHECKPOINTING
3-level checkpointing is enabled, i.e. the timestepping
is divided into three different levels (see Section ref:ask-the-author).
The model state of the outermost (nchklev_3) and the
intermediate (nchklev_2) timestepping loop are stored to file
(handled in the_main_loop).
The innermost loop (nchklev_1)
avoids I/O by storing all required variables
to common blocks. This storing may also be necessary if
no checkpointing is chosen
(nonlinear functions, if-statements, iterative loops, ...).
In the present example the dimensions are chosen as follows:
nchklev_1 = 36
nchklev_2 = 30
nchklev_3 = 60
To guarantee that the checkpointing intervals span the entire
integration period the following relation must be satisfied:
nchklev_1*nchklev_2*nchklev_3
nTimeSteps
where nTimeSteps is either specified in data
or computed via
nTimeSteps = (endTime-startTime)/deltaTClock .
- #undef ALLOW_TAMC_CHECKPOINTING
No checkpointing is enabled.
In this case the relevant counter is nchklev_0.
Similar to above, the following relation has to be satisfied
nchklev_0
nTimeSteps.
The following parameters may be worth describing:
isbyte
maxpass
This file contains all relevant parameter flags and
lists to run TAMC or TAF.
It is assumed that TAMC is available to you, either locally,
being installed on your network, or remotely through the 'TAMC Utility'.
TAMC is called with the command tamc followed by a
number of options. They are described in detail in the
TAMC manual Giering [1999].
Here we briefly discuss the main flags used in the makefile.
The standard output for TAF is written to file
taf.log.
- tamc
- -input <variable names>
-output <variable name> -i4 -r4 ...
-toplevel <S/R name> -reverse <file names>
- taf
- -input <variable names>
-output <variable name> -i4 -r4 ...
-toplevel <S/R name> -reverse <file names>
-flow taf_flow.log -nonew_arg
- -toplevel <S/R name>
Name of the toplevel routine, with respect to which the
control flow analysis is performed.
- -input <variable names>
List of independent variables
with respect to which the
dependent variable
is differentiated.
- -output <variable name>
Dependent variable
which is to be differentiated.
- -reverse <file names>
Adjoint code is generated to compute the sensitivity of an
independent variable w.r.t. many dependent variables.
In the discussion of Section ???
the generated adjoint top-level routine computes the product
of the transposed Jacobian matrix
times
the gradient vector
.
<file names> refers to the list of files .f which are to be
analyzed by TAMC. This list is generally smaller than the full list
of code to be compiled. The files not contained are either
above the top-level routine (some initializations), or are
deliberately hidden from TAMC, either because hand-written
adjoint routines exist, or the routines must not (or don't have to)
be differentiated. For each routine which is part of the flow tree
of the top-level routine, but deliberately hidden from TAMC
(or for each package which contains such routines),
a corresponding file .flow exists containing flow directives
for TAMC.
- -i4 -r4
- -flow taf_flow.log
Will cause TAF to produce a flow listing file
named taf_flow.log in which
the set of active and passive variables are identified
for each subroutine.
- -nonew_arg
The default in the order of the parameter list of
adjoint routines has changed.
Before TAF 1.3 the default was compatible with the
TAMC-generated list. As of TAF 1.3 the order of adjoint
routine parameter lists is no longer copatible with TAMC.
To restore compatibility when using TAF 1.3 and higher,
this argument is needed.
It is currently crucial to use since all hand-written
adjoint routines refer to the TAMC default.
Contains two-dimendional bathymetry information
These contain the initial values
(salinity, temperature, salt.bin, theta.bin),
surface boundary values (surface wind stresses,
(windx.bin, windy.bin), and surface restoring fields
(SSS.bin, SST.bin).
Contains model state after model spinup.
Next: 3.19.3 Compiling the model
Up: 3.19 Sensitivity of Air-Sea
Previous: 3.19.1 Overview of the
Contents
mitgcm-support@mitgcm.org
Copyright © 2006
Massachusetts Institute of Technology |
Last update 2018-01-23 |
|
|