| 1 | gforget | 1.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 |  |  |  |