/[MITgcm]/manual/s_autodiff/doc_ad_examples.tex
ViewVC logotype

Annotation of /manual/s_autodiff/doc_ad_examples.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (hide annotations) (download) (as text)
Wed Apr 24 11:01:47 2002 UTC (23 years, 2 months ago) by heimbach
Branch: MAIN
Changes since 1.1: +49 -5 lines
File MIME type: application/x-tex
Starting update of part 5.

1 heimbach 1.2 % $Header: /u/gcmpack/mitgcmdoc/part5/doc_ad_examples.tex,v 1.1 2002/02/28 19:32:20 cnh Exp $
2 cnh 1.1 % $Name: $
3    
4     %**********************************************************************
5     \section{Sensitivity of Air-Sea Exchange to Tracer Injection Site }
6     \label{sect:eg-simple-tracer-adjoint}
7     \label{sec_ad_setup_ex}
8     %**********************************************************************
9    
10     The MITGCM has been adapted to enable AD using TAMC or TAF.
11     The present description, therefore, is specific to the
12     use of TAMC or TAF as AD tool.
13     The following sections describe the steps which are necessary to
14     generate a tangent linear or adjoint model of the MITGCM.
15     We take as an example the sensitivity of carbon sequestration
16     in the ocean.
17     The AD-relevant hooks in the code are sketched in
18     \ref{fig:adthemodel}, \ref{fig:adthemain}.
19    
20     \subsection{Overview of the experiment}
21    
22     We describe an adjoint sensitivity analysis of out-gassing from
23     the ocean into the atmosphere of a carbon-like tracer injected
24     into the ocean interior (see \cite{hil-eta:01}).
25    
26     \subsubsection{Passive tracer equation}
27    
28     For this work the MITGCM was augmented with a thermodynamically
29     inactive tracer, $C$. Tracer residing in the ocean
30     model surface layer is out-gassed according to a relaxation time scale,
31     $\mu$. Within the ocean interior, the tracer is passively advected
32     by the ocean model currents. The full equation for the time evolution
33     %
34     \begin{equation}
35     \label{carbon_ddt}
36     \frac{\partial C}{\partial t} \, = \,
37     -U\cdot \nabla C \, - \, \mu C \, + \, \Gamma(C) \,+ \, S
38     \end{equation}
39     %
40     also includes a source term $S$. This term
41     represents interior sources of $C$ such as would arise due to
42     direct injection.
43     The velocity term, $U$, is the sum of the
44     model Eulerian circulation and an eddy-induced velocity, the latter
45     parameterized according to Gent/McWilliams
46     (\cite{gen-mcw:90, gen-eta:95}).
47     The convection function, $\Gamma$, mixes $C$ vertically wherever the
48     fluid is locally statically unstable.
49    
50     The out-gassing time scale, $\mu$, in eqn. (\ref{carbon_ddt})
51     is set so that \( 1/\mu \sim 1 \ \mathrm{year} \) for the surface
52     ocean and $\mu=0$ elsewhere. With this value, eqn. (\ref{carbon_ddt})
53     is valid as a prognostic equation for small perturbations in oceanic
54     carbon concentrations. This configuration provides a
55     powerful tool for examining the impact of large-scale ocean circulation
56     on $ CO_2 $ out-gassing due to interior injections.
57     As source we choose a constant in time injection of
58     $ S = 1 \,\, {\rm mol / s}$.
59    
60     \subsubsection{Model configuration}
61    
62     The model configuration employed has a constant
63     $4^\circ \times 4^\circ$ resolution horizontal grid and realistic
64     geography and bathymetry. Twenty vertical layers are used with
65     vertical spacing ranging
66     from 50 m near the surface to 815 m at depth.
67     Driven to steady-state by climatological wind-stress, heat and
68     fresh-water forcing the model reproduces well known large-scale
69     features of the ocean general circulation.
70    
71     \subsubsection{Out-gassing cost function}
72    
73     To quantify and understand out-gassing due to injections of $C$
74     in eqn. (\ref{carbon_ddt}),
75     we define a cost function $ {\cal J} $ that measures the total amount of
76     tracer out-gassed at each timestep:
77     %
78     \begin{equation}
79     \label{cost_tracer}
80     {\cal J}(t=T)=\int_{t=0}^{t=T}\int_{A} \mu C \, dA \, dt
81     \end{equation}
82     %
83     Equation(\ref{cost_tracer}) integrates the out-gassing term, $\mu C$,
84     from (\ref{carbon_ddt})
85     over the entire ocean surface area, $A$, and accumulates it
86     up to time $T$.
87     Physically, ${\cal J}$ can be thought of as representing the amount of
88     $CO_2$ that our model predicts would be out-gassed following an
89     injection at rate $S$.
90     The sensitivity of ${\cal J}$ to the spatial location of $S$,
91     $\frac{\partial {\cal J}}{\partial S}$,
92     can be used to identify regions from which circulation
93     would cause $CO_2$ to rapidly out-gas following injection
94     and regions in which $CO_2$ injections would remain effectively
95     sequestered within the ocean.
96    
97     \subsection{Code configuration}
98    
99     The model configuration for this experiment resides under the
100     directory {\it verification/carbon/}.
101     The code customization routines are in {\it verification/carbon/code/}:
102     %
103     \begin{itemize}
104     %
105     \item {\it .genmakerc}
106     %
107     \item {\it COST\_CPPOPTIONS.h}
108     %
109     \item {\it CPP\_EEOPTIONS.h}
110     %
111     \item {\it CPP\_OPTIONS.h}
112     %
113     \item {\it CTRL\_OPTIONS.h}
114     %
115     \item {\it ECCO\_OPTIONS.h}
116     %
117     \item {\it SIZE.h}
118     %
119     \item {\it adcommon.h}
120     %
121     \item {\it tamc.h}
122     %
123     \end{itemize}
124     %
125     The runtime flag and parameters settings are contained in
126     {\it verification/carbon/input/},
127     together with the forcing fields and and restart files:
128     %
129     \begin{itemize}
130     %
131     \item {\it data}
132     %
133     \item {\it data.cost}
134     %
135     \item {\it data.ctrl}
136     %
137     \item {\it data.gmredi}
138     %
139     \item {\it data.grdchk}
140     %
141     \item {\it data.optim}
142     %
143     \item {\it data.pkg}
144     %
145     \item {\it eedata}
146     %
147     \item {\it topog.bin}
148     %
149     \item {\it windx.bin, windy.bin}
150     %
151     \item {\it salt.bin, theta.bin}
152     %
153     \item {\it SSS.bin, SST.bin}
154     %
155     \item {\it pickup*}
156     %
157     \end{itemize}
158     %
159     Finally, the file to generate the adjoint code resides in
160     $ adjoint/ $:
161     %
162     \begin{itemize}
163     %
164     \item {\it makefile}
165     %
166     \end{itemize}
167     %
168    
169     Below we describe the customizations of this files which are
170     specific to this experiment.
171    
172     \subsubsection{File {\it .genmakerc}}
173     This file overwrites default settings of {\it genmake}.
174     In the present example it is used to switch on the following
175     packages which are related to automatic differentiation
176     and are disabled by default: \\
177     \hspace*{4ex} {\tt set ENABLE=( autodiff cost ctrl ecco gmredi grdchk kpp )} \\
178     Other packages which are not needed are switched off: \\
179     \hspace*{4ex} {\tt set DISABLE=( aim obcs zonal\_filt shap\_filt cal exf )}
180    
181     \subsubsection{File {\it COST\_CPPOPTIONS.h, CTRL\_OPTIONS.h}}
182    
183     These files used to contain package-specific CPP-options
184     (see Section \ref{???}).
185     For technical reasons those options have been grouped together
186     in the file {\it ECCO\_OPTIONS.h}.
187     To retain the modularity, the files have been kept and contain
188     the standard include of the {\it CPP\_OPTIONS.h} file.
189    
190     \subsubsection{File {\it CPP\_EEOPTIONS.h}}
191    
192     This file contains 'wrapper'-specific CPP options.
193     It only needs to be changed if the code is to be run
194     in a parallel environment (see Section \ref{???}).
195    
196     \subsubsection{File {\it CPP\_OPTIONS.h}}
197    
198     This file contains model-specific CPP options
199     (see Section \ref{???}).
200     Most options are related to the forward model setup.
201     They are identical to the global steady circulation setup of
202 heimbach 1.2 {\it verification/global\_ocean.90x40x15/}.
203 cnh 1.1 The three options specific to this experiment are \\
204     \hspace*{4ex} {\tt \#define ALLOW\_PASSIVE\_TRACER} \\
205     This flag enables the code to carry through the
206     advection/diffusion of a passive tracer along the
207     model integration. \\
208     \hspace*{4ex} {\tt \#define ALLOW\_MIT\_ADJOINT\_RUN} \\
209     This flag enables the inclusion of some AD-related fields
210     concerning initialization, link between control variables
211     and forward model variables, and the call to the top-level
212     forward/adjoint subroutine {\it adthe\_main\_loop}
213     instead of {\it the\_main\_loop}. \\
214     \hspace*{4ex} {\tt \#define ALLOW\_GRADIENT\_CHECK} \\
215     This flag enables the gradient check package.
216     After computing the unperturbed cost function and its gradient,
217     a series of computations are performed for which \\
218     $\bullet$ an element of the control vector is perturbed \\
219     $\bullet$ the cost function w.r.t. the perturbed element is
220     computed \\
221     $\bullet$ the difference between the perturbed and unperturbed
222     cost function is computed to compute the finite difference gradient \\
223     $\bullet$ the finite difference gradient is compared with the
224     adjoint-generated gradient.
225     The gradient check package is further described in Section ???.
226    
227     \subsubsection{File {\it ECCO\_OPTIONS.h}}
228    
229     The CPP options of several AD-related packages are grouped
230     in this file:
231     %
232     \begin{itemize}
233     %
234     \item
235 heimbach 1.2 Overall ECCO-related execution modus: \\
236     These determine whether a pure forward run,
237     a sensitivity run or an iteration of optimization is
238     performed. These options are not needed in the present context.
239     %
240     \item
241 cnh 1.1 Adjoint support package: {\it pkg/autodiff/} \\
242     This package contains hand-written adjoint code such as
243     active file handling, flow directives for files which must not
244     be differentiated, and TAMC-specific header files. \\
245 heimbach 1.2 %
246 cnh 1.1 \hspace*{4ex} {\tt \#define ALLOW\_AUTODIFF\_TAMC} \\
247     defines TAMC-related features in the code. \\
248 heimbach 1.2 %
249 cnh 1.1 \hspace*{4ex} {\tt \#define ALLOW\_TAMC\_CHECKPOINTING} \\
250     enables the checkpointing feature of TAMC
251     (see Section \ref{???}).
252     In the present example a 3-level checkpointing is implemented.
253     The code contains the relevant store directives, common block
254     and tape initializations, storing key computation,
255     and loop index handling.
256     The checkpointing length at each level is defined in
257     file {\it tamc.h}, cf. below.
258 heimbach 1.2 The out and intermediate loop directivs are contained
259     in the files {\it checkpoint\_lev3\_directives.h},
260     {\it checkpoint\_lev2\_directives.h} (package {\it pkg/autodiff}). \\
261     %
262     \hspace*{4ex} {\tt \#define ALLOW\_AUTODIFF\_MONITOOR} \\
263     enables the monitoring of intermediate adjoint variables
264     (see Section \ref{???}). \\
265     %
266     \hspace*{4ex} {\tt \#define ALLOW\_DIVIDED\_ADJOINT} \\
267     enables adjoint dump and restart
268     (see Section \ref{???}).
269 cnh 1.1 %
270     \item Cost function package: {\it pkg/cost/} \\
271     This package contains all relevant routines for
272     initializing, accumulating and finalizing the cost function
273     (see Section \ref{???}). \\
274     \hspace*{4ex} {\tt \#define ALLOW\_COST} \\
275     enables all general aspects of the cost function handling,
276     in particular the hooks in the forward code for
277     initializing, accumulating and finalizing the cost function. \\
278     \hspace*{4ex} {\tt \#define ALLOW\_COST\_TRACER} \\
279     includes the call to the cost function for this
280     particular experiment, eqn. (\ref{cost_tracer}).
281     %
282     \item Control variable package: {\it pkg/ctrl/} \\
283     This package contains all relevant routines for
284     the handling of the control vector.
285     Each control variable can be enabled/disabled with its own flag: \\
286     \begin{tabular}{ll}
287     \hspace*{2ex} {\tt \#define ALLOW\_THETA0\_CONTROL} &
288     initial temperature \\
289     \hspace*{2ex} {\tt \#define ALLOW\_SALT0\_CONTROL} &
290     initial salinity \\
291     \hspace*{2ex} {\tt \#define ALLOW\_TR0\_CONTROL} &
292     initial passive tracer concentration \\
293     \hspace*{2ex} {\tt \#define ALLOW\_TAUU0\_CONTROL} &
294     zonal wind stress \\
295     \hspace*{2ex} {\tt \#define ALLOW\_TAUV0\_CONTROL} &
296     meridional wind stress \\
297     \hspace*{2ex} {\tt \#define ALLOW\_SFLUX0\_CONTROL} &
298     freshwater flux \\
299     \hspace*{2ex} {\tt \#define ALLOW\_HFLUX0\_CONTROL} &
300     heat flux \\
301     \hspace*{2ex} {\tt \#define ALLOW\_DIFFKR\_CONTROL} &
302     diapycnal diffusivity \\
303     \hspace*{2ex} {\tt \#undef ALLOW\_KAPPAGM\_CONTROL} &
304     isopycnal diffusivity \\
305     \end{tabular}
306     %
307     \end{itemize}
308    
309     \subsubsection{File {\it SIZE.h}}
310    
311     The file contains the grid point dimensions of the forward
312     model. It is identical to the {\it verification/exp2/}: \\
313     \hspace*{4ex} {\tt sNx = 90} \\
314     \hspace*{4ex} {\tt sNy = 40} \\
315     \hspace*{4ex} {\tt Nr = 20} \\
316     It corresponds to a single-tile/single-processor setup:
317     {\tt nSx = nSy = 1, nPx = nPy = 1},
318     with standard overlap dimensioning
319     {\tt OLx = OLy = 3}.
320    
321     \subsubsection{File {\it adcommon.h}}
322    
323     This file contains common blocks of some adjoint variables
324     that are generated by TAMC.
325     The common blocks are used by the adjoint support routine
326     {\it addummy\_in\_stepping} which needs to access those variables:
327    
328     \begin{tabular}{ll}
329     \hspace*{4ex} {\tt common /addynvars\_r/} &
330     \hspace*{4ex} is related to {\it DYNVARS.h} \\
331     \hspace*{4ex} {\tt common /addynvars\_cd/} &
332     \hspace*{4ex} is related to {\it DYNVARS.h} \\
333     \hspace*{4ex} {\tt common /addynvars\_diffkr/} &
334     \hspace*{4ex} is related to {\it DYNVARS.h} \\
335     \hspace*{4ex} {\tt common /addynvars\_kapgm/} &
336     \hspace*{4ex} is related to {\it DYNVARS.h} \\
337     \hspace*{4ex} {\tt common /adtr1\_r/} &
338     \hspace*{4ex} is related to {\it TR1.h} \\
339     \hspace*{4ex} {\tt common /adffields/} &
340     \hspace*{4ex} is related to {\it FFIELDS.h}\\
341     \end{tabular}
342    
343     Note that if the structure of the common block changes in the
344     above header files of the forward code, the structure
345     of the adjoint common blocks will change accordingly.
346     Thus, it has to be made sure that the structure of the
347     adjoint common block in the hand-written file {\it adcommon.h}
348     complies with the automatically generated adjoint common blocks
349     in {\it adjoint\_model.F}.
350 heimbach 1.2 The header file is enabled via the CPP-option
351     {\bf ALLOW\_AUTODIFF\_MONITOR}.
352 cnh 1.1
353     \subsubsection{File {\it tamc.h}}
354    
355 heimbach 1.2 This routine contains the dimensions for TAMC checkpointing
356     and some indices relevant for storing ky computations.
357 cnh 1.1 %
358     \begin{itemize}
359     %
360     \item {\tt \#ifdef ALLOW\_TAMC\_CHECKPOINTING} \\
361     3-level checkpointing is enabled, i.e. the timestepping
362     is divided into three different levels (see Section \ref{???}).
363     The model state of the outermost ({\tt nchklev\_3}) and the
364     intermediate ({\tt nchklev\_2}) timestepping loop are stored to file
365     (handled in {\it the\_main\_loop}).
366     The innermost loop ({\tt nchklev\_1})
367     avoids I/O by storing all required variables
368     to common blocks. This storing may also be necessary if
369     no checkpointing is chosen
370     (nonlinear functions, if-statements, iterative loops, ...).
371     In the present example the dimensions are chosen as follows: \\
372     \hspace*{4ex} {\tt nchklev\_1 = 36 } \\
373     \hspace*{4ex} {\tt nchklev\_2 = 30 } \\
374     \hspace*{4ex} {\tt nchklev\_3 = 60 } \\
375     To guarantee that the checkpointing intervals span the entire
376     integration period the following relation must be satisfied: \\
377     \hspace*{4ex} {\tt nchklev\_1*nchklev\_2*nchklev\_3 $ \ge $ nTimeSteps} \\
378     where {\tt nTimeSteps} is either specified in {\it data}
379     or computed via \\
380     \hspace*{4ex} {\tt nTimeSteps = (endTime-startTime)/deltaTClock }.
381     %
382     \item {\tt \#undef ALLOW\_TAMC\_CHECKPOINTING} \\
383     No checkpointing is enabled.
384     In this case the relevant counter is {\tt nchklev\_0}.
385     Similar to above, the following relation has to be satisfied \\
386     \hspace*{4ex} {\tt nchklev\_0 $ \ge $ nTimeSteps}.
387     %
388     \end{itemize}
389    
390     The following parameters may be worth describing: \\
391     %
392     \hspace*{4ex} {\tt isbyte} \\
393     \hspace*{4ex} {\tt maxpass} \\
394     ~
395    
396     \subsubsection{File {\it makefile}}
397    
398     This file contains all relevant parameter flags and
399     lists to run TAMC or TAF.
400     It is assumed that TAMC is available to you, either locally,
401     being installed on your network, or remotely through the 'TAMC Utility'.
402     TAMC is called with the command {\tt tamc} followed by a
403     number of options. They are described in detail in the
404     TAMC manual \cite{gie:99}.
405     Here we briefly discuss the main flags used in the {\it makefile}
406     %
407     \begin{itemize}
408     \item [{\tt tamc}] {\tt
409     -input <variable names>
410 heimbach 1.2 -output <variable name> -i4 -r4 ... \\
411 cnh 1.1 -toplevel <S/R name> -reverse <file names>
412     }
413 heimbach 1.2 \item [{\tt taf}] {\tt
414     -input <variable names>
415     -output <variable name> -i4 -r4 ... \\
416     -toplevel <S/R name> -reverse <file names> \\
417     -nonew_arg -flow taf_flow.log
418     }
419 cnh 1.1 \end{itemize}
420     %
421     \begin{itemize}
422     %
423     \item {\tt -toplevel <S/R name>} \\
424     Name of the toplevel routine, with respect to which the
425     control flow analysis is performed.
426     %
427     \item {\tt -input <variable names>} \\
428     List of independent variables $ u $ with respect to which the
429     dependent variable $ J $ is differentiated.
430     %
431     \item {\tt -output <variable name>} \\
432     Dependent variable $ J $ which is to be differentiated.
433     %
434     \item {\tt -reverse <file names>} \\
435     Adjoint code is generated to compute the sensitivity of an
436     independent variable w.r.t. many dependent variables.
437     In the discussion of Section ???
438     the generated adjoint top-level routine computes the product
439     of the transposed Jacobian matrix $ M^T $ times
440     the gradient vector $ \nabla_v J $.
441     \\
442     {\tt <file names>} refers to the list of files {\it .f} which are to be
443     analyzed by TAMC. This list is generally smaller than the full list
444     of code to be compiled. The files not contained are either
445     above the top-level routine (some initializations), or are
446     deliberately hidden from TAMC, either because hand-written
447     adjoint routines exist, or the routines must not (or don't have to)
448     be differentiated. For each routine which is part of the flow tree
449     of the top-level routine, but deliberately hidden from TAMC
450     (or for each package which contains such routines),
451     a corresponding file {\it .flow} exists containing flow directives
452     for TAMC.
453     %
454 heimbach 1.2 \item {\tt -i4 -r4} \\
455 cnh 1.1 ~
456 heimbach 1.2 %
457     \item {\tt -flow taf_flow.log} \\
458     Will cause TAF to produce a flow listing file in which
459     the set of active and passive variables are identified
460     for each subroutine.
461     %
462     \item {\tt -nonew_arg} \\
463     The default in the order of the parameter list of
464     adjoint routines has changed.
465     Before TAF 1.3 the default was compatible with the
466     TAMC-generated list. As of TAF 1.3 the order of adjoint
467     routine parameter lists is no longer copatible with TAMC.
468     To restore compatibility when using TAF 1.3 and higher,
469     this argument is needed.
470     It is currently crucial to use since all hand-written
471     adjoint routines refer to the TAMC default.
472 cnh 1.1 %
473     \end{itemize}
474    
475    
476     \subsubsection{The input parameter files}
477    
478     \paragraph{File {\it data}}
479    
480     \paragraph{File {\it data.cost}}
481    
482     \paragraph{File {\it data.ctrl}}
483    
484     \paragraph{File {\it data.gmredi}}
485    
486     \paragraph{File {\it data.grdchk}}
487    
488     \paragraph{File {\it data.optim}}
489    
490     \paragraph{File {\it data.pkg}}
491    
492     \paragraph{File {\it eedata}}
493    
494     \paragraph{File {\it topog.bin}}
495    
496     \paragraph{File {\it windx.bin, windy.bin}}
497    
498     \paragraph{File {\it salt.bin, theta.bin}}
499    
500     \paragraph{File {\it SSS.bin, SST.bin}}
501    
502     \paragraph{File {\it pickup*}}
503    
504     \subsection{Compiling the model and its adjoint}
505    
506     The built process of the adjoint model is slightly more
507     complex than that of compiling the forward code.
508     The main reason is that the adjoint code generation requires
509     a specific list of routines that are to be differentiated
510     (as opposed to the automatic generation of a list of
511     files to be compiled by genmake).
512     This list excludes routines that don't have to be or must not be
513     differentiated. For some of the latter routines flow directives
514     may be necessary, a list of which has to be given as well.
515     For this reason, a separate {\it makefile} is currently
516     maintained in the directory {\tt adjoint/}. This
517     makefile is responsible for the adjoint code generation.
518    
519     In the following we describe the build process step by step,
520     assuming you are in the directory {\tt bin/}.
521     A summary of steps to follow is given at the end.
522    
523     \paragraph{Adjoint code generation and compilation -- step by step}
524    
525     \begin{enumerate}
526     %
527     \item
528     {\tt ln -s ../verification/???/code/.genmakerc .} \\
529     {\tt ln -s ../verification/???/code/*.[Fh] .} \\
530     Link your customized genmake options, header files,
531     and modified code to the compile directory.
532     %
533     \item
534     {\tt ../tools/genmake -makefile} \\
535     Generate your Makefile (cf. Section ???).
536     %
537     \item
538     {\tt make depend} \\
539     Dependency analysis for the CPP pre-compiler (cf. Section ???).
540     %
541     \item
542     {\tt make small\_f} \\
543     This is the first difference between forward code compilation
544     and adjoint code generation and compilation.
545     Instead of going through the entire compilation process
546     (CPP precompiling -- {\tt .f}, object code generation -- {\tt .o},
547     linking of object files and libraries to generate executable),
548     only the CPP compiler is invoked at this stage to generate
549     the {\tt .f} files.
550     %
551     \item
552     {\tt cd ../adjoint} \\
553     {\tt make adtaf} or {\tt make adtamc} \\
554     Depending on whether you have TAF or TAMC at your disposal,
555     you'll choose {\tt adtaf} or {\tt adtamc} as your
556     make target for the {\it makefile} in the directory {\tt adjoint/}.
557     Several things happen at this stage.
558     %
559     \begin{enumerate}
560     %
561     \item
562     The initial template file {\it adjoint\_model.F} which is part
563     of the compiling list created by {\it genmake} is restored.
564     %
565     \item
566     All Fortran routines {\tt *.f} in {\tt bin/} are
567     concatenated into a single file (it's current name is
568     {\it tamc\_code.f}).
569     %
570     \item
571     Adjoint code is generated by TAMC or TAF.
572     The adjoint code is written to the file {\it tamc\_code\_ad.f}.
573     It contains all adjoint routines of the forward routines
574     concatenated in {\it tamc\_code.f}.
575     For a given forward routines {\tt subroutine routinename}
576     the adjoint routine is named {\tt adsubroutine routinename}
577     by default (that default can be changed via the flag
578     {\tt -admark <markname>}).
579     Furthermore, it may contain modified code which
580     incorporates the translation of adjoint store directives
581     into specific Fortran code.
582     For a given forward routines {\tt subroutine routinename}
583     the modified routine is named {\tt mdsubroutine routinename}.
584     TAMC or TAF info is written to file
585     {\it tamc\_code.prot} or {\it taf.log}, respectively.
586     %
587     \end{enumerate}
588     %
589     \item
590     {\tt make adchange} \\
591     The multi-threading capability of the MITGCM requires a slight
592     change in the parameter list of some routines that are related to
593     to active file handling.
594     This post-processing invokes the sed script {\it adjoint\_ecco\_sed.com}
595     to insert the threading counter {\bf myThId} into the parameter list
596     of those subroutines.
597     The resulting code is written to file {\it tamc\_code\_sed\_ad.f}
598     and appended to the file {\it adjoint\_model.F}.
599     This concludes the adjoint code generation.
600     %
601     \item
602     {\tt cd ../bin} \\
603     {\tt make} \\
604     The file {\it adjoint\_model.F} now contains the full adjoint code.
605     All routines are now compiled.
606     %
607     \end{enumerate}
608    
609     \paragraph{Adjoint code generation and compilation -- summary}
610     ~ \\
611    
612     \[
613     \boxed{
614     \begin{split}
615     ~ & \mbox{\tt cd bin} \\
616     ~ & \mbox{\tt ln -s ../verification/my\_experiment/code/.genmakerc .} \\
617     ~ & \mbox{\tt ln -s ../verification/my\_experiment/code/*.[Fh] .} \\
618     ~ & \mbox{\tt ../tools/genmake -makefile} \\
619     ~ & \mbox{\tt make depend} \\
620     ~ & \mbox{\tt make small\_f} \\
621     ~ & \mbox{\tt cd ../adjoint} \\
622     ~ & \mbox{\tt make adtaf <OR: make adtamc>} \\
623     ~ & \mbox{\tt make adchange} \\
624     ~ & \mbox{\tt cd ../bin} \\
625     ~ & \mbox{\tt make} \\
626     \end{split}
627     }
628     \]
629    

  ViewVC Help
Powered by ViewVC 1.1.22