| 1 |
\section{CTRL: Model Parameter Adjustment Capability} |
| 2 |
\label{sec:pkg:ctrl} |
| 3 |
\begin{rawhtml} |
| 4 |
<!-- CMIREDIR:package_ctrl: --> |
| 5 |
\end{rawhtml} |
| 6 |
|
| 7 |
\def\mitgcmCheckpointVersion{65x} |
| 8 |
|
| 9 |
The parameters available for configuring generic cost terms in \texttt{data.ctrl} are given in table~\ref{tbl:gencost_ctrl_params}. |
| 10 |
|
| 11 |
\begin{table}[!ht] |
| 12 |
\centering |
| 13 |
\begin{tabular}{lll} |
| 14 |
parameter & type & function \\ \hline |
| 15 |
\texttt{xx\_gen*\_file} & character(*) & Name of control. Prefix from table~\ref{tbl:gencost_ctrl_files} + suffix. \\ |
| 16 |
\texttt{xx\_gen*\_weight} & character(*) & Weights in the form of $\sigma_{\vec{u}_j}^{-2}$ \\ |
| 17 |
\texttt{xx\_gen*\_bounds} & real(5) & Apply bounds \\ |
| 18 |
\texttt{xx\_gen*\_preproc} & character(*) & Control preprocessor(s) (see table~\ref{tbl:gencost_ctrl_preproc}) \\ |
| 19 |
\texttt{xx\_gen*\_preproc\_c} & character(*) & Preprocessor character arguments \\ |
| 20 |
\texttt{xx\_gen*\_preproc\_i} & integer(*) & Preprocessor integer arguments \\ |
| 21 |
\texttt{xx\_gen*\_preproc\_r} & real(*) & Preprocessor real arguments \\ |
| 22 |
\texttt{gen*Precond} & real & Preconditioning factor ($=1$ by default) \\ |
| 23 |
\texttt{mult\_gen*} & real & Cost function multiplier $\beta_j$ ($= 1$ by default) \\ |
| 24 |
\texttt{xx\_gentim2d\_period} & real & Frequency of adjustments (in seconds) \\ |
| 25 |
\texttt{xx\_gentim2d\_startdate1} & integer & Adjustment start date \\ |
| 26 |
\texttt{xx\_gentim2d\_startdate2} & integer & Default: model start date \\ |
| 27 |
\texttt{xx\_gentim2d\_cumsum} & logical & Accumulate control adjustments \\ |
| 28 |
\texttt{xx\_gentim2d\_glosum} & logical & Global sum of adjustment (output is still 2D) \\ |
| 29 |
\end{tabular} |
| 30 |
\caption{Parameters in \texttt{ctrl\_nml\_genarr} namelist in \texttt{data.ctrl}. The \texttt{*} can be replaced by \texttt{arr2d}, \texttt{arr3d}, or \texttt{tim2d} for time-invariant two and three dimensional controls and time-varying 2D controls, respectively. Parameters for \texttt{genarr2d}, \texttt{genarr3d}, and \texttt{gentime2d} are arrays of length \texttt{maxCtrlArr2D}, \texttt{maxCtrlArr3D}, and \texttt{maxCtrlTim2D}, respectively, with one entry per term in the cost function.} |
| 31 |
\label{tbl:gencost_ctrl_params} |
| 32 |
\end{table} |
| 33 |
|
| 34 |
\begin{table}[!ht] |
| 35 |
\centering |
| 36 |
\begin{tabular}{lll} |
| 37 |
& name & description \\ \hline \hline |
| 38 |
2D, time-invariant controls & \texttt{genarr2d} \\ |
| 39 |
& \texttt{xx\_etan} & initial sea surface height \\ |
| 40 |
& \texttt{xx\_bottomdrag} & bottom drag \\ |
| 41 |
& \texttt{xx\_geothermal} & geothermal heat flux \\ \hline |
| 42 |
3D, time-invariant controls & \texttt{genarr3d} \\ |
| 43 |
& \texttt{xx\_theta} & initial potential temperature \\ |
| 44 |
& \texttt{xx\_salt} & initial salinity \\ |
| 45 |
& \texttt{xx\_kapgm} & GM coefficient \\ |
| 46 |
& \texttt{xx\_kapredi} & isopycnal diffusivity \\ |
| 47 |
& \texttt{xx\_diffkr} & diapycnal diffusivity \\ \hline |
| 48 |
2D, time-varying controls & \texttt{gentim2D} \\ |
| 49 |
& \texttt{xx\_atemp} & atmospheric temperature \\ |
| 50 |
& \texttt{xx\_aqh} & atmospheric specific humidity \\ |
| 51 |
& \texttt{xx\_swdown} & downward shortwave \\ |
| 52 |
& \texttt{xx\_lwdown} & downward longwave \\ |
| 53 |
& \texttt{xx\_precip} & precipitation \\ |
| 54 |
& \texttt{xx\_uwind} & zonal wind \\ |
| 55 |
& \texttt{xx\_vwind} & meridional wind \\ |
| 56 |
& \texttt{xx\_tauu} & zonal wind stress \\ |
| 57 |
& \texttt{xx\_tauv} & meridional wind stress \\ |
| 58 |
& \texttt{xx\_gen\_precip} & globally averaged precipitation? \\ |
| 59 |
\end{tabular} |
| 60 |
\caption{Generic control prefixes implemented as of checkpoint \mitgcmCheckpointVersion.} |
| 61 |
\label{tbl:gencost_ctrl_files} |
| 62 |
\end{table} |
| 63 |
|
| 64 |
\begin{table}[!ht] |
| 65 |
\centering |
| 66 |
\begin{tabular}{lll} |
| 67 |
name & description & arguments \\ \hline\hline |
| 68 |
\texttt{WC01} & Correlation modeling & integer: operator type (default: 1) \\ |
| 69 |
\texttt{smooth} & Smoothing without normalization & integer: operator type (default: 1) \\ |
| 70 |
\texttt{docycle} & Average period replication & integer: cycle length \\ |
| 71 |
\texttt{replicate} & Alias for \texttt{docycle} & \ \ \ \ (units of \texttt{xx\_gentim2d\_period}) \\ |
| 72 |
\texttt{rmcycle} & Periodic average subtraction & integer: cycle length \\ |
| 73 |
\texttt{variaweight} & Use time-varying weight & --- \\ |
| 74 |
\texttt{noscaling}$^{a}$ & Do not scale with \texttt{xx\_gen*\_weight} & --- \\ |
| 75 |
\texttt{documul} & Sets \texttt{xx\_gentim2d\_cumsum} & ---\\ |
| 76 |
\texttt{doglomean} & Sets \texttt{xx\_gentim2d\_glosum} & --- \\ |
| 77 |
\end{tabular} |
| 78 |
\caption{\texttt{xx\_gen????d\_preproc} options implemented as of checkpoint \mitgcmCheckpointVersion. Notes: $^a$: If \texttt{noscaling} is false, the control adjustment is scaled by one on the square root of the weight before being added to the base control variable; if \texttt{noscaling} is true, the control is multiplied by the weight in the cost function itself.} |
| 79 |
\label{tbl:gencost_ctrl_preproc} |
| 80 |
\end{table} |
| 81 |
|
| 82 |
The control problem is non-dimensional by default, as reflected in the omission of weights in control penalties [($\vec{u}_j^T\vec{u}_j$ in \eqref{eq:Jtotal}]. Non-dimensional controls ($\vec{u}_j$) are scaled to physical units ($\vec{v}_j$) through multiplication by the respective uncertainty fields ($\sigma_{\vec{u}_j}$), as part of the generic preprocessor $\mathcal{Q}$ in \eqref{eq:Upreproc}. Besides the scaling of $\vec{u}_j$ to physical units, the preprocessor $\mathcal{Q}$ can include, for example, spatial correlation modeling (using an implementation of Weaver and Coutier, 2001) by setting \texttt{xx\_gen*\_preproc = 'WC01'}. Alternatively, setting \texttt{xx\_gen*\_preproc = 'smooth'} activates the smoothing part of \texttt{WC01}, but omits the normalization. Additionally, bounds for the controls can be specified by setting \texttt{xx\_gen*\_bounds}. In forward mode, adjustments to the $i^\text{th}$ control are clipped so that they remain between \texttt{xx\_gen*\_bounds(i,1)} and \texttt{xx\_gen*\_bounds(i,4)}. If \texttt{xx\_gen*\_bounds(i,1)} $<$ \texttt{xx\_gen*\_bounds(i+1,1)} for $i = 1, 2, 3$, then the bounds will ``emulate a local minimum;''\footnote{Not sure what this means.} otherwise, the bounds have no effect in adjoint mode. |
| 83 |
|
| 84 |
For the case of time-varying controls, the frequency is specified by \texttt{xx\_gentim2d\_period}. The generic control package interprets special values of \texttt{xx\_gentim2d\_period} in the same way as the \texttt{exf} package: a value of $-12$ implies cycling monthly fields while a value of $0$ means that the field is steady. Time varying weights can be provided by specifying the preprocessor \texttt{variaweight}, in which case the \texttt{xx\_gentim2d\_weight} file must contain as many records as the control parameter time series itself (approximately the run length divided by \texttt{xx\_gentim2d\_period}). |
| 85 |
|
| 86 |
The parameter \texttt{mult\_gen*} sets the multiplier for the corresponding cost function penalty [$\beta_j$ in \eqref{eq:Jtotal}; $\beta_j = 1$ by default). The preconditioner, $\cal{R}$, does not directly appear in the estimation problem, but only serves to push the optimization process in a certain direction in control space; this operator is specified by \texttt{gen*Precond} ($=1$ by default). |
| 87 |
|
| 88 |
|
| 89 |
|