2 |
% $Name$ |
% $Name$ |
3 |
|
|
4 |
Author: Patrick Heimbach |
Author: Patrick Heimbach |
5 |
|
\label{ask_the_author:doc_ad_2} |
6 |
|
|
7 |
{\sf Automatic differentiation} (AD), also referred to as algorithmic |
{\sf Automatic differentiation} (AD), also referred to as algorithmic |
8 |
(or, more loosely, computational) differentiation, involves |
(or, more loosely, computational) differentiation, involves |
11 |
software tool is used that parses and transforms source files |
software tool is used that parses and transforms source files |
12 |
according to a set of linguistic and mathematical rules. AD tools are |
according to a set of linguistic and mathematical rules. AD tools are |
13 |
like source-to-source translators in that they parse a program code as |
like source-to-source translators in that they parse a program code as |
14 |
input and produce a new program code as output. However, unlike a |
input and produce a new program code as output |
15 |
|
(we restrict our discussion to source-to-source tools, ignoring |
16 |
|
operator-overloading tools). However, unlike a |
17 |
pure source-to-source translation, the output program represents a new |
pure source-to-source translation, the output program represents a new |
18 |
algorithm, such as the evaluation of the Jacobian, the Hessian, or |
algorithm, such as the evaluation of the Jacobian, the Hessian, or |
19 |
higher derivative operators. In principle, a variety of derived |
higher derivative operators. In principle, a variety of derived |
24 |
Algorithms in Fortran), developed by Ralf Giering (\cite{gie-kam:98}, |
Algorithms in Fortran), developed by Ralf Giering (\cite{gie-kam:98}, |
25 |
\cite{gie:99,gie:00}). The first application of the adjoint of MITgcm |
\cite{gie:99,gie:00}). The first application of the adjoint of MITgcm |
26 |
for sensitivity studies has been published by \cite{maro-eta:99}. |
for sensitivity studies has been published by \cite{maro-eta:99}. |
27 |
\cite{sta-eta:97,sta-eta:01} use MITgcm and its adjoint for ocean |
\cite{stam-etal:97,stam-etal:02} use MITgcm and its adjoint for ocean |
28 |
state estimation studies. In the following we shall refer to TAMC and |
state estimation studies. In the following we shall refer to TAMC and |
29 |
TAF synonymously, except were explicitly stated otherwise. |
TAF synonymously, except were explicitly stated otherwise. |
30 |
|
|
31 |
TAMC exploits the chain rule for computing the first derivative of a |
As of mid-2007 we are also able to generate fairly efficient |
32 |
|
adjoint code of the MITgcm using a new, open-source AD tool, |
33 |
|
called OpenAD (see \cite{naum-etal:06,utke-etal:08}. |
34 |
|
This enables us for the first time to compare adjoint models |
35 |
|
generated from different AD tools, providing an additional |
36 |
|
accuracy check, complementary to finite-difference gradient checks. |
37 |
|
OpenAD and its application to MITgcm is described in detail |
38 |
|
in section \ref{sec_ad_openad}. |
39 |
|
|
40 |
|
The AD tool exploits the chain rule for computing the first derivative of a |
41 |
function with respect to a set of input variables. Treating a given |
function with respect to a set of input variables. Treating a given |
42 |
forward code as a composition of operations -- each line representing |
forward code as a composition of operations -- each line representing |
43 |
a compositional element, the chain rule is rigorously applied to the |
a compositional element, the chain rule is rigorously applied to the |
66 |
under consideration, |
under consideration, |
67 |
% |
% |
68 |
\begin{equation} |
\begin{equation} |
69 |
\begin{split} |
\begin{aligned} |
70 |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
71 |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
72 |
{\cal M}(\vec{u}) |
{\cal M}(\vec{u}) |
73 |
\label{fulloperator} |
\label{fulloperator} |
74 |
\end{split} |
\end{aligned} |
75 |
\end{equation} |
\end{equation} |
76 |
% |
% |
77 |
The vectors $ \vec{u} \in U $ and $ v \in V $ may be represented w.r.t. |
The vectors $ \vec{u} \in U $ and $ v \in V $ may be represented w.r.t. |
151 |
$\left\langle \,\, , \,\, \right\rangle $ |
$\left\langle \,\, , \,\, \right\rangle $ |
152 |
% |
% |
153 |
\begin{equation} |
\begin{equation} |
154 |
\begin{split} |
\begin{aligned} |
155 |
{\cal J} & = \, |
{\cal J} & = \, |
156 |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
157 |
\left\langle \, \nabla _{u}{\cal J}^T |_{\vec{u}^{(0)}} \, , \, \delta \vec{u} \, \right\rangle |
\left\langle \, \nabla _{u}{\cal J}^T |_{\vec{u}^{(0)}} \, , \, \delta \vec{u} \, \right\rangle |
160 |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
161 |
\left\langle \, \nabla _{v}{\cal J}^T |_{\vec{v}^{(0)}} \, , \, \delta \vec{v} \, \right\rangle |
\left\langle \, \nabla _{v}{\cal J}^T |_{\vec{v}^{(0)}} \, , \, \delta \vec{v} \, \right\rangle |
162 |
\, + \, O(\delta \vec{v}^2) |
\, + \, O(\delta \vec{v}^2) |
163 |
\end{split} |
\end{aligned} |
164 |
\label{deljidentity} |
\label{deljidentity} |
165 |
\end{equation} |
\end{equation} |
166 |
% |
% |
201 |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
202 |
% |
% |
203 |
\begin{equation} |
\begin{equation} |
204 |
\begin{split} |
\begin{aligned} |
205 |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
206 |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
207 |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
208 |
~ & = \, \delta \vec{u}^{\ast} |
~ & = \, \delta \vec{u}^{\ast} |
209 |
\end{split} |
\end{aligned} |
210 |
\label{adjoint} |
\label{adjoint} |
211 |
\end{equation} |
\end{equation} |
212 |
% |
% |
254 |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
255 |
% |
% |
256 |
\begin{equation} |
\begin{equation} |
257 |
\begin{split} |
\begin{aligned} |
258 |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
259 |
\nabla_v {\cal J} \cdot M_{\Lambda} |
\nabla_v {\cal J} \cdot M_{\Lambda} |
260 |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
261 |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
262 |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
263 |
\end{split} |
\end{aligned} |
264 |
\label{forward} |
\label{forward} |
265 |
\end{equation} |
\end{equation} |
266 |
% |
% |
268 |
% |
% |
269 |
\begin{equation} |
\begin{equation} |
270 |
\boxed{ |
\boxed{ |
271 |
\begin{split} |
\begin{aligned} |
272 |
M^T ( \nabla_v {\cal J}^T) & = \, |
M^T ( \nabla_v {\cal J}^T) & = \, |
273 |
M_{0}^T \cdot M_{1}^T |
M_{0}^T \cdot M_{1}^T |
274 |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
277 |
\cdot ...... \cdot |
\cdot ...... \cdot |
278 |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
279 |
~ & = \, \nabla_u {\cal J}^T |
~ & = \, \nabla_u {\cal J}^T |
280 |
\end{split} |
\end{aligned} |
281 |
} |
} |
282 |
\label{reverse} |
\label{reverse} |
283 |
\end{equation} |
\end{equation} |
296 |
% |
% |
297 |
\begin{equation} |
\begin{equation} |
298 |
\boxed{ |
\boxed{ |
299 |
\begin{split} |
\begin{aligned} |
300 |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
301 |
& = \, |
& = \, |
302 |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
303 |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
304 |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
305 |
\end{split} |
\end{aligned} |
306 |
} |
} |
307 |
\end{equation} |
\end{equation} |
308 |
% |
% |
419 |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
420 |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
421 |
for intermediate components, yielding |
for intermediate components, yielding |
422 |
|
{\small |
423 |
\begin{equation} |
\begin{equation} |
424 |
\small |
\begin{aligned} |
|
\begin{split} |
|
425 |
\left( |
\left( |
426 |
\begin{array}{c} |
\begin{array}{c} |
427 |
\delta v^{(\lambda) \, \ast}_1 \\ |
\delta v^{(\lambda) \, \ast}_1 \\ |
466 |
\delta v^{\ast}_{n} \\ |
\delta v^{\ast}_{n} \\ |
467 |
\end{array} |
\end{array} |
468 |
\right) |
\right) |
469 |
\end{split} |
\end{aligned} |
470 |
\end{equation} |
\end{equation} |
471 |
|
} |
472 |
|
|
473 |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
474 |
showing the advantage of the reverse over the forward mode |
showing the advantage of the reverse over the forward mode |
539 |
Then, $ \nabla_v {\cal J} $ takes the form |
Then, $ \nabla_v {\cal J} $ takes the form |
540 |
% |
% |
541 |
\begin{equation*} |
\begin{equation*} |
542 |
\begin{split} |
\begin{aligned} |
543 |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
544 |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
545 |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
546 |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
547 |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
548 |
\right\} \, {\vec{f}_{j}} \\ |
\right\} \, {\vec{f}_{j}} \\ |
549 |
\end{split} |
\end{aligned} |
550 |
\end{equation*} |
\end{equation*} |
551 |
% |
% |
552 |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
665 |
%\psfrag{v_kn^lev2}{\mathinfigure{v_{k_{n}^{lev2}}}} |
%\psfrag{v_kn^lev2}{\mathinfigure{v_{k_{n}^{lev2}}}} |
666 |
%\psfrag{v_k1^lev1}{\mathinfigure{v_{k_{1}^{lev1}}}} |
%\psfrag{v_k1^lev1}{\mathinfigure{v_{k_{1}^{lev1}}}} |
667 |
%\psfrag{v_kn^lev1}{\mathinfigure{v_{k_{n}^{lev1}}}} |
%\psfrag{v_kn^lev1}{\mathinfigure{v_{k_{n}^{lev1}}}} |
668 |
%\mbox{\epsfig{file=part5/checkpointing.eps, width=0.8\textwidth}} |
%\mbox{\epsfig{file=s_autodiff/figs/checkpointing.eps, width=0.8\textwidth}} |
669 |
\resizebox{5.5in}{!}{\includegraphics{part5/checkpointing.eps}} |
\resizebox{5.5in}{!}{\includegraphics{s_autodiff/figs/checkpointing.eps}} |
670 |
%\psfull |
%\psfull |
671 |
\end{center} |
\end{center} |
672 |
\caption{ |
\caption{ |
694 |
|
|
695 |
In this section we describe in a general fashion |
In this section we describe in a general fashion |
696 |
the parts of the code that are relevant for automatic |
the parts of the code that are relevant for automatic |
697 |
differentiation using the software tool TAF. |
differentiation using the software tool TAF. |
698 |
|
Modifications to use OpenAD are described in \ref{sec_ad_openad}. |
699 |
|
|
700 |
\input{part5/doc_ad_the_model} |
\input{s_autodiff/text/doc_ad_the_model} |
701 |
|
|
702 |
The basic flow is depicted in \ref{fig:adthemodel}. |
The basic flow is depicted in \ref{fig:adthemodel}. |
703 |
If CPP option \texttt{ALLOW\_AUTODIFF\_TAMC} is defined, |
If CPP option \texttt{ALLOW\_AUTODIFF\_TAMC} is defined, |
732 |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
733 |
the driver routine {\it grdchk\_main} is called after |
the driver routine {\it grdchk\_main} is called after |
734 |
the gradient has been computed via the adjoint |
the gradient has been computed via the adjoint |
735 |
(cf. Section \ref{section_grdchk}). |
(cf. Section \ref{sec:ad_gradient_check}). |
736 |
|
|
737 |
%------------------------------------------------------------------ |
%------------------------------------------------------------------ |
738 |
|
|
742 |
In order to configure AD-related setups the following packages need |
In order to configure AD-related setups the following packages need |
743 |
to be enabled: |
to be enabled: |
744 |
{\it |
{\it |
745 |
\begin{table}[h!] |
\begin{table}[!ht] |
746 |
\begin{tabular}{l} |
\begin{tabular}{l} |
747 |
autodiff \\ |
autodiff \\ |
748 |
ctrl \\ |
ctrl \\ |
778 |
|
|
779 |
%------------------------------------------------------------------ |
%------------------------------------------------------------------ |
780 |
|
|
781 |
\subsection{Building the AD code |
\subsection{Building the AD code using TAF |
782 |
\label{section_ad_build}} |
\label{section_ad_build}} |
783 |
|
|
784 |
The build process of an AD code is very similar to building |
The build process of an AD code is very similar to building |
786 |
to generate, and on which AD tool is available (TAF or TAMC), |
to generate, and on which AD tool is available (TAF or TAMC), |
787 |
the following {\tt make} targets are available: |
the following {\tt make} targets are available: |
788 |
|
|
789 |
\begin{table}[h!] |
\begin{table}[!ht] |
790 |
{\footnotesize |
{\footnotesize |
791 |
\begin{tabular}{ccll} |
\begin{tabular}{|ccll|} |
792 |
|
\hline |
793 |
~ & {\it AD-target} & {\it output} & {\it description} \\ |
~ & {\it AD-target} & {\it output} & {\it description} \\ |
794 |
\hline |
\hline |
795 |
\hline |
\hline |
808 |
~ & ~ & ~ & and compiles all code \\ |
~ & ~ & ~ & and compiles all code \\ |
809 |
~ & ~ & ~ & (use of TAF is set as default) \\ |
~ & ~ & ~ & (use of TAF is set as default) \\ |
810 |
\hline |
\hline |
|
\hline |
|
811 |
\end{tabular} |
\end{tabular} |
812 |
} |
} |
813 |
\end{table} |
\end{table} |
816 |
% |
% |
817 |
\begin{itemize} |
\begin{itemize} |
818 |
% |
% |
819 |
\item [$<$TOOL$>$] |
\item $<$TOOL$>$ |
820 |
% |
% |
821 |
\begin{itemize} |
\begin{itemize} |
822 |
% |
% |
825 |
% |
% |
826 |
\end{itemize} |
\end{itemize} |
827 |
% |
% |
828 |
\item [$<$MODE$>$] |
\item $<$MODE$>$ |
829 |
% |
% |
830 |
\begin{itemize} |
\begin{itemize} |
831 |
% |
% |
867 |
\item |
\item |
868 |
A header file {\tt AD\_CONFIG.h} is generated which contains a CPP option |
A header file {\tt AD\_CONFIG.h} is generated which contains a CPP option |
869 |
on which code ought to be generated. Depending on the {\tt make} target, |
on which code ought to be generated. Depending on the {\tt make} target, |
870 |
the contents is |
the contents is one of the following: |
871 |
\begin{itemize} |
\begin{itemize} |
872 |
\item |
\item |
873 |
{\tt \#define ALLOW\_ADJOINT\_RUN} |
{\tt \#define ALLOW\_ADJOINT\_RUN} |
883 |
and all {\tt .flow} files that are part of the list {\bf AD\_FLOW\_FILES}. |
and all {\tt .flow} files that are part of the list {\bf AD\_FLOW\_FILES}. |
884 |
% |
% |
885 |
\item |
\item |
886 |
The AD tool is invoked with the {\bf <MODE>\_<TOOL>\_FLAGS}. |
The AD tool is invoked with the {\tt <MODE>\_<TOOL>\_FLAGS}. |
887 |
The default AD tool flags in {\tt genmake2} can be overrwritten by |
The default AD tool flags in {\tt genmake2} can be overrwritten by |
888 |
an {\tt adjoint\_options} file (similar to the platform-specific |
an {\tt adjoint\_options} file (similar to the platform-specific |
889 |
{\tt build\_options}, see Section ???. |
{\tt build\_options}, see Section ???. |
1016 |
are controlled by the package {\it pkg/ctrl} and will be treated |
are controlled by the package {\it pkg/ctrl} and will be treated |
1017 |
in the next section. |
in the next section. |
1018 |
|
|
1019 |
\input{part5/doc_cost_flow} |
\input{s_autodiff/text/doc_cost_flow} |
1020 |
|
|
1021 |
\subsubsection{Enabling the package} |
\subsubsection{Enabling the package} |
1022 |
|
|
1106 |
the chosen cost function contributions. |
the chosen cost function contributions. |
1107 |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
1108 |
S/R {\it cost\_tracer} is called. |
S/R {\it cost\_tracer} is called. |
1109 |
It accumulates {\bf objf\_tracer} according to eqn. (\ref{???}). |
It accumulates {\bf objf\_tracer} according to eqn. (\ref{ask_the_author:doc_ad_2}). |
1110 |
% |
% |
1111 |
\subsubsection{Finalize all contributions} |
\subsubsection{Finalize all contributions} |
1112 |
% |
% |
1131 |
\end{equation} |
\end{equation} |
1132 |
% |
% |
1133 |
The total cost function {\bf fc} will be the |
The total cost function {\bf fc} will be the |
1134 |
'dependent' variable in the argument list for TAMC, i.e. |
'dependent' variable in the argument list for TAF, i.e. |
1135 |
\begin{verbatim} |
\begin{verbatim} |
1136 |
tamc -output 'fc' ... |
taf -output 'fc' ... |
1137 |
\end{verbatim} |
\end{verbatim} |
1138 |
|
|
1139 |
%%%% \end{document} |
%%%% \end{document} |
1140 |
|
|
1141 |
\input{part5/doc_ad_the_main} |
\input{s_autodiff/text/doc_ad_the_main} |
1142 |
|
|
1143 |
\subsection{The control variables (independent variables) |
\subsection{The control variables (independent variables) |
1144 |
\label{section_ctrl}} |
\label{section_ctrl}} |
1158 |
(parameter setting, initialization, perturbation) |
(parameter setting, initialization, perturbation) |
1159 |
are controlled by the package {\it pkg/ctrl}. |
are controlled by the package {\it pkg/ctrl}. |
1160 |
|
|
1161 |
\input{part5/doc_ctrl_flow} |
\input{s_autodiff/text/doc_ctrl_flow} |
1162 |
|
|
1163 |
\subsubsection{genmake and CPP options} |
\subsubsection{genmake and CPP options} |
1164 |
% |
% |
1248 |
% |
% |
1249 |
The dependency flow for differentiation w.r.t. the controls |
The dependency flow for differentiation w.r.t. the controls |
1250 |
starts with adding a perturbation onto the input variable, |
starts with adding a perturbation onto the input variable, |
1251 |
thus defining the independent or control variables for TAMC. |
thus defining the independent or control variables for TAF. |
1252 |
Three types of controls may be considered: |
Three types of controls may be considered: |
1253 |
% |
% |
1254 |
\begin{itemize} |
\begin{itemize} |
1269 |
a perturbation anomaly is added to the field in S/R |
a perturbation anomaly is added to the field in S/R |
1270 |
{\it ctrl\_map\_ini} |
{\it ctrl\_map\_ini} |
1271 |
% |
% |
1272 |
|
%\begin{eqnarray} |
1273 |
\begin{equation} |
\begin{equation} |
1274 |
\begin{split} |
\begin{aligned} |
1275 |
u & = \, u_{[0]} \, + \, \Delta u \\ |
u & = \, u_{[0]} \, + \, \Delta u \\ |
1276 |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
1277 |
\label{perturb} |
\label{perturb} |
1278 |
\end{split} |
\end{aligned} |
1279 |
\end{equation} |
\end{equation} |
1280 |
|
%\end{eqnarray} |
1281 |
% |
% |
1282 |
{\bf xx\_tr1} is a 3-dim. global array |
{\bf xx\_tr1} is a 3-dim. global array |
1283 |
holding the perturbation. In the case of a simple |
holding the perturbation. In the case of a simple |
1284 |
sensitivity study this array is identical to zero. |
sensitivity study this array is identical to zero. |
1285 |
However, it's specification is essential in the context |
However, it's specification is essential in the context |
1286 |
of automatic differentiation since TAMC |
of automatic differentiation since TAF |
1287 |
treats the corresponding line in the code symbolically |
treats the corresponding line in the code symbolically |
1288 |
when determining the differentiation chain and its origin. |
when determining the differentiation chain and its origin. |
1289 |
Thus, the variable names are part of the argument list |
Thus, the variable names are part of the argument list |
1290 |
when calling TAMC: |
when calling TAF: |
1291 |
% |
% |
1292 |
\begin{verbatim} |
\begin{verbatim} |
1293 |
tamc -input 'xx_tr1 ...' ... |
taf -input 'xx_tr1 ...' ... |
1294 |
\end{verbatim} |
\end{verbatim} |
1295 |
% |
% |
1296 |
Now, as mentioned above, MITgcm avoids maintaining |
Now, as mentioned above, MITgcm avoids maintaining |
1297 |
an array for each control variable by reading the |
an array for each control variable by reading the |
1298 |
perturbation to a temporary array from file. |
perturbation to a temporary array from file. |
1299 |
To ensure the symbolic link to be recognized by TAMC, a scalar |
To ensure the symbolic link to be recognized by TAF, a scalar |
1300 |
dummy variable {\bf xx\_tr1\_dummy} is introduced |
dummy variable {\bf xx\_tr1\_dummy} is introduced |
1301 |
and an 'active read' routine of the adjoint support |
and an 'active read' routine of the adjoint support |
1302 |
package {\it pkg/autodiff} is invoked. |
package {\it pkg/autodiff} is invoked. |
1303 |
The read-procedure is tagged with the variable |
The read-procedure is tagged with the variable |
1304 |
{\bf xx\_tr1\_dummy} enabling TAMC to recognize the |
{\bf xx\_tr1\_dummy} enabling TAF to recognize the |
1305 |
initialization of the perturbation. |
initialization of the perturbation. |
1306 |
The modified call of TAMC thus reads |
The modified call of TAF thus reads |
1307 |
% |
% |
1308 |
\begin{verbatim} |
\begin{verbatim} |
1309 |
tamc -input 'xx_tr1_dummy ...' ... |
taf -input 'xx_tr1_dummy ...' ... |
1310 |
\end{verbatim} |
\end{verbatim} |
1311 |
% |
% |
1312 |
and the modified operation to (\ref{perturb}) |
and the modified operation to (\ref{perturb}) |
1503 |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
1504 |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
1505 |
$ k+1 $. |
$ k+1 $. |
1506 |
Tab. \ref{???} sketches the flow between forward/adjoint model |
Tab. \ref{ask_the_author:doc_ad_2} sketches the flow between forward/adjoint model |
1507 |
and the minimization routine. |
and the minimization routine. |
1508 |
|
|
1509 |
|
{\scriptsize |
1510 |
\begin{eqnarray*} |
\begin{eqnarray*} |
|
\scriptsize |
|
1511 |
\begin{array}{ccccc} |
\begin{array}{ccccc} |
1512 |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
1513 |
{\Big\downarrow} |
{\Big\downarrow} |
1558 |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
1559 |
\end{array} |
\end{array} |
1560 |
\end{eqnarray*} |
\end{eqnarray*} |
1561 |
|
} |
1562 |
|
|
1563 |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
1564 |
the link between the model and the minimization routine. |
the link between the model and the minimization routine. |
1565 |
As described in Section \ref{???} |
As described in Section \ref{ask_the_author:doc_ad_2} |
1566 |
the {\it unpack} and {\it pack} routines read and write |
the {\it unpack} and {\it pack} routines read and write |
1567 |
control and gradient {\it vectors} which are compressed |
control and gradient {\it vectors} which are compressed |
1568 |
to contain only wet points, in addition to the full |
to contain only wet points, in addition to the full |