65 |
under consideration, |
under consideration, |
66 |
% |
% |
67 |
\begin{equation} |
\begin{equation} |
68 |
\begin{split} |
\begin{aligned} |
69 |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
{\cal M} \, : & \, U \,\, \longrightarrow \, V \\ |
70 |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
~ & \, \vec{u} \,\, \longmapsto \, \vec{v} \, = \, |
71 |
{\cal M}(\vec{u}) |
{\cal M}(\vec{u}) |
72 |
\label{fulloperator} |
\label{fulloperator} |
73 |
\end{split} |
\end{aligned} |
74 |
\end{equation} |
\end{equation} |
75 |
% |
% |
76 |
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. |
150 |
$\left\langle \,\, , \,\, \right\rangle $ |
$\left\langle \,\, , \,\, \right\rangle $ |
151 |
% |
% |
152 |
\begin{equation} |
\begin{equation} |
153 |
\begin{split} |
\begin{aligned} |
154 |
{\cal J} & = \, |
{\cal J} & = \, |
155 |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
{\cal J} |_{\vec{u}^{(0)}} \, + \, |
156 |
\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 |
159 |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
{\cal J} |_{\vec{v}^{(0)}} \, + \, |
160 |
\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 |
161 |
\, + \, O(\delta \vec{v}^2) |
\, + \, O(\delta \vec{v}^2) |
162 |
\end{split} |
\end{aligned} |
163 |
\label{deljidentity} |
\label{deljidentity} |
164 |
\end{equation} |
\end{equation} |
165 |
% |
% |
200 |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
invoking the adjoint $ M^{\ast } $ of the tangent linear model $ M $ |
201 |
% |
% |
202 |
\begin{equation} |
\begin{equation} |
203 |
\begin{split} |
\begin{aligned} |
204 |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
\nabla _{u}{\cal J}^T |_{\vec{u}} & |
205 |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
= \, M^T |_{\vec{u}} \cdot \nabla _{v}{\cal J}^T |_{\vec{v}} \\ |
206 |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
~ & = \, M^T |_{\vec{u}} \cdot \delta \vec{v}^{\ast} \\ |
207 |
~ & = \, \delta \vec{u}^{\ast} |
~ & = \, \delta \vec{u}^{\ast} |
208 |
\end{split} |
\end{aligned} |
209 |
\label{adjoint} |
\label{adjoint} |
210 |
\end{equation} |
\end{equation} |
211 |
% |
% |
253 |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
= \nabla_v {\cal J} \cdot \delta \vec{v} $ ) |
254 |
% |
% |
255 |
\begin{equation} |
\begin{equation} |
256 |
\begin{split} |
\begin{aligned} |
257 |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
\nabla_v {\cal J} (M(\delta \vec{u})) & = \, |
258 |
\nabla_v {\cal J} \cdot M_{\Lambda} |
\nabla_v {\cal J} \cdot M_{\Lambda} |
259 |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda} \cdot ...... \cdot |
260 |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
M_{1} \cdot M_{0} \cdot \delta \vec{u} \\ |
261 |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
~ & = \, \nabla_v {\cal J} \cdot \delta \vec{v} \\ |
262 |
\end{split} |
\end{aligned} |
263 |
\label{forward} |
\label{forward} |
264 |
\end{equation} |
\end{equation} |
265 |
% |
% |
267 |
% |
% |
268 |
\begin{equation} |
\begin{equation} |
269 |
\boxed{ |
\boxed{ |
270 |
\begin{split} |
\begin{aligned} |
271 |
M^T ( \nabla_v {\cal J}^T) & = \, |
M^T ( \nabla_v {\cal J}^T) & = \, |
272 |
M_{0}^T \cdot M_{1}^T |
M_{0}^T \cdot M_{1}^T |
273 |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
\cdot ...... \cdot M_{\lambda}^T \cdot ...... \cdot |
276 |
\cdot ...... \cdot |
\cdot ...... \cdot |
277 |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
\nabla_{v^{(\lambda)}} {\cal J}^T \\ |
278 |
~ & = \, \nabla_u {\cal J}^T |
~ & = \, \nabla_u {\cal J}^T |
279 |
\end{split} |
\end{aligned} |
280 |
} |
} |
281 |
\label{reverse} |
\label{reverse} |
282 |
\end{equation} |
\end{equation} |
295 |
% |
% |
296 |
\begin{equation} |
\begin{equation} |
297 |
\boxed{ |
\boxed{ |
298 |
\begin{split} |
\begin{aligned} |
299 |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
\nabla_{v^{(\lambda)}} {\cal J}^T |_{\vec{v}^{(\lambda)}} |
300 |
& = \, |
& = \, |
301 |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
M_{\lambda}^T |_{\vec{v}^{(\lambda)}} \cdot ...... \cdot |
302 |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
M_{\Lambda}^T |_{\vec{v}^{(\lambda)}} \cdot \delta \vec{v}^{\ast} \\ |
303 |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
~ & = \, \delta \vec{v}^{(\lambda) \, \ast} |
304 |
\end{split} |
\end{aligned} |
305 |
} |
} |
306 |
\end{equation} |
\end{equation} |
307 |
% |
% |
418 |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
$ \delta v^{(\lambda) \, \ast}_{j} = \frac{\partial}{\partial v^{(\lambda)}_{j}} |
419 |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
{\cal J}^T $, $ j = 1, \ldots , n_{\lambda} $, |
420 |
for intermediate components, yielding |
for intermediate components, yielding |
421 |
|
{\small |
422 |
\begin{equation} |
\begin{equation} |
423 |
\small |
\begin{aligned} |
|
\begin{split} |
|
424 |
\left( |
\left( |
425 |
\begin{array}{c} |
\begin{array}{c} |
426 |
\delta v^{(\lambda) \, \ast}_1 \\ |
\delta v^{(\lambda) \, \ast}_1 \\ |
465 |
\delta v^{\ast}_{n} \\ |
\delta v^{\ast}_{n} \\ |
466 |
\end{array} |
\end{array} |
467 |
\right) |
\right) |
468 |
\end{split} |
\end{aligned} |
469 |
\end{equation} |
\end{equation} |
470 |
|
} |
471 |
|
|
472 |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
Eq. (\ref{forward}) and (\ref{reverse}) are perhaps clearest in |
473 |
showing the advantage of the reverse over the forward mode |
showing the advantage of the reverse over the forward mode |
538 |
Then, $ \nabla_v {\cal J} $ takes the form |
Then, $ \nabla_v {\cal J} $ takes the form |
539 |
% |
% |
540 |
\begin{equation*} |
\begin{equation*} |
541 |
\begin{split} |
\begin{aligned} |
542 |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
\nabla_v {\cal J}^T & = \, 2 \, \, H \cdot |
543 |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
\left( \, {\cal H}(\vec{v}) - \vec{d} \, \right) \\ |
544 |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
~ & = \, 2 \sum_{j} \left\{ \sum_k |
545 |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
\frac{\partial {\cal H}_k}{\partial v_{j}} |
546 |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
\left( {\cal H}_k (\vec{v}) - d_k \right) |
547 |
\right\} \, {\vec{f}_{j}} \\ |
\right\} \, {\vec{f}_{j}} \\ |
548 |
\end{split} |
\end{aligned} |
549 |
\end{equation*} |
\end{equation*} |
550 |
% |
% |
551 |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
where $H_{kj} = \partial {\cal H}_k / \partial v_{j} $ is the |
731 |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
{\tt ALLOW\_GRADIENT\_CHECK} is defined. In this case |
732 |
the driver routine {\it grdchk\_main} is called after |
the driver routine {\it grdchk\_main} is called after |
733 |
the gradient has been computed via the adjoint |
the gradient has been computed via the adjoint |
734 |
(cf. Section \ref{section_grdchk}). |
(cf. Section \ref{sec:ad_gradient_check}). |
735 |
|
|
736 |
%------------------------------------------------------------------ |
%------------------------------------------------------------------ |
737 |
|
|
741 |
In order to configure AD-related setups the following packages need |
In order to configure AD-related setups the following packages need |
742 |
to be enabled: |
to be enabled: |
743 |
{\it |
{\it |
744 |
\begin{table}[h!] |
\begin{table}[!ht] |
745 |
\begin{tabular}{l} |
\begin{tabular}{l} |
746 |
autodiff \\ |
autodiff \\ |
747 |
ctrl \\ |
ctrl \\ |
785 |
to generate, and on which AD tool is available (TAF or TAMC), |
to generate, and on which AD tool is available (TAF or TAMC), |
786 |
the following {\tt make} targets are available: |
the following {\tt make} targets are available: |
787 |
|
|
788 |
\begin{table}[h!] |
\begin{table}[!ht] |
789 |
{\footnotesize |
{\footnotesize |
790 |
\begin{tabular}{|ccll|} |
\begin{tabular}{|ccll|} |
791 |
\hline |
\hline |
1105 |
the chosen cost function contributions. |
the chosen cost function contributions. |
1106 |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
In the present example ({\bf ALLOW\_COST\_TRACER}), |
1107 |
S/R {\it cost\_tracer} is called. |
S/R {\it cost\_tracer} is called. |
1108 |
It accumulates {\bf objf\_tracer} according to eqn. (\ref{???}). |
It accumulates {\bf objf\_tracer} according to eqn. (ref:ask-the-author). |
1109 |
% |
% |
1110 |
\subsubsection{Finalize all contributions} |
\subsubsection{Finalize all contributions} |
1111 |
% |
% |
1268 |
a perturbation anomaly is added to the field in S/R |
a perturbation anomaly is added to the field in S/R |
1269 |
{\it ctrl\_map\_ini} |
{\it ctrl\_map\_ini} |
1270 |
% |
% |
1271 |
|
%\begin{eqnarray} |
1272 |
\begin{equation} |
\begin{equation} |
1273 |
\begin{split} |
\begin{aligned} |
1274 |
u & = \, u_{[0]} \, + \, \Delta u \\ |
u & = \, u_{[0]} \, + \, \Delta u \\ |
1275 |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
{\bf tr1}(...) & = \, {\bf tr1_{ini}}(...) \, + \, {\bf xx\_tr1}(...) |
1276 |
\label{perturb} |
\label{perturb} |
1277 |
\end{split} |
\end{aligned} |
1278 |
\end{equation} |
\end{equation} |
1279 |
|
%\end{eqnarray} |
1280 |
% |
% |
1281 |
{\bf xx\_tr1} is a 3-dim. global array |
{\bf xx\_tr1} is a 3-dim. global array |
1282 |
holding the perturbation. In the case of a simple |
holding the perturbation. In the case of a simple |
1502 |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
$ u_{[k+1]} $ then serves as input for a forward/adjoint run |
1503 |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
to determine $ {\cal J} $ and $ \nabla _{u}{\cal J} $ at iteration step |
1504 |
$ k+1 $. |
$ k+1 $. |
1505 |
Tab. \ref{???} sketches the flow between forward/adjoint model |
Tab. ref:ask-the-author sketches the flow between forward/adjoint model |
1506 |
and the minimization routine. |
and the minimization routine. |
1507 |
|
|
1508 |
|
{\scriptsize |
1509 |
\begin{eqnarray*} |
\begin{eqnarray*} |
|
\scriptsize |
|
1510 |
\begin{array}{ccccc} |
\begin{array}{ccccc} |
1511 |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
u_{[0]} \,\, , \,\, \Delta u_{[k]} & ~ & ~ & ~ & ~ \\ |
1512 |
{\Big\downarrow} |
{\Big\downarrow} |
1557 |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
~ & ~ & ~ & ~ & \Delta u_{[k+1]} \\ |
1558 |
\end{array} |
\end{array} |
1559 |
\end{eqnarray*} |
\end{eqnarray*} |
1560 |
|
} |
1561 |
|
|
1562 |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
The routines {\it ctrl\_unpack} and {\it ctrl\_pack} provide |
1563 |
the link between the model and the minimization routine. |
the link between the model and the minimization routine. |
1564 |
As described in Section \ref{???} |
As described in Section ref:ask-the-author |
1565 |
the {\it unpack} and {\it pack} routines read and write |
the {\it unpack} and {\it pack} routines read and write |
1566 |
control and gradient {\it vectors} which are compressed |
control and gradient {\it vectors} which are compressed |
1567 |
to contain only wet points, in addition to the full |
to contain only wet points, in addition to the full |