Changeset 11296
- Timestamp:
- 2019-07-18T15:41:15+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11233_obsasm_docfixes/doc
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11233_obsasm_docfixes/doc/latex/NEMO/subfiles/chap_ASM.tex
r11151 r11296 8 8 \label{chap:ASM} 9 9 10 Authors: D. Lea, M. Martin, K. Mogensen, A. Weaver , ... % do we keep10 Authors: D. Lea, M. Martin, K. Mogensen, A. Weaver. 11 11 12 12 \minitoc … … 15 15 16 16 The ASM code adds the functionality to apply increments to the model variables: temperature, salinity, 17 sea surface height, velocity and sea ice concentration. 17 sea surface height, velocity and sea ice concentration. 18 18 These are read into the model from a NetCDF file which may be produced by separate data assimilation code. 19 19 The code can also output model background fields which are used as an input to data assimilation code. … … 56 56 Typically the increments are spread evenly over the full window. 57 57 In addition, two different weighting functions have been implemented. 58 The first function employs constant weights,58 The first function (namelist option \np{niaufn} = 0) employs constant weights, 59 59 \begin{align} 60 60 \label{eq:F1_i} … … 66 66 0 & {\mathrm if} \; \; \; t_{i} > t_{n} 67 67 \end{array} 68 \right. 68 \right. 69 69 \end{align} 70 70 where $M = m-n$. 71 The second function employs peaked hat-like weights in order to give maximum weight in the centre of the sub-window,71 The second function (namelist option \np{niaufn} = 1) employs peaked hat-like weights in order to give maximum weight in the centre of the sub-window, 72 72 with the weighting reduced linearly to a small value at the window end-points: 73 73 \begin{align} … … 83 83 \right. 84 84 \end{align} 85 where $\alpha^{-1} = \sum_{i=1}^{M/2} 2i$ and $M$ is assumed to be even. 85 where $\alpha^{-1} = \sum_{i=1}^{M/2} 2i$ and $M$ is assumed to be even. 86 86 The weights described by \autoref{eq:F2_i} provide a smoother transition of the analysis trajectory from 87 87 one assimilation cycle to the next than that described by \autoref{eq:F1_i}. … … 105 105 \right., 106 106 \end{equation} 107 where 107 where the divergence is defined as 108 108 \[ 109 109 % \label{eq:asm_div} … … 122 122 The divergence damping is activated by assigning to \np{nn\_divdmp} in the \textit{nam\_asminc} namelist 123 123 a value greater than zero. 124 By choosing this value to be of the order of 100 the increments in 125 the vertical velocity will be significantly reduced. 124 This specifies the number of iterations of the divergence damping. Setting a value of the order of 100 will result in a significant reduction in the vertical velocity induced by the increments. 126 125 127 126 … … 131 130 \label{sec:ASM_details} 132 131 133 Here we show an example \ngn{nam asm} namelist and the header of an example assimilation increments file on132 Here we show an example \ngn{nam\_asminc} namelist and the header of an example assimilation increments file on 134 133 the ORCA2 grid. 135 134 136 %------------------------------------------nam asm-----------------------------------------------------135 %------------------------------------------nam_asminc----------------------------------------------------- 137 136 % 138 137 \nlst{nam_asminc} -
NEMO/branches/2019/dev_r11233_obsasm_docfixes/doc/latex/NEMO/subfiles/chap_OBS.tex
r11151 r11296 8 8 \label{chap:OBS} 9 9 10 Authors: D. Lea, M. Martin, K. Mogensen, A. Vidard, A. Weaver, A. Ryan , ... % do we keep that ?10 Authors: D. Lea, M. Martin, K. Mogensen, A. Vidard, A. Weaver, A. Ryan. 11 11 12 12 \minitoc … … 14 14 \newpage 15 15 16 The observation and model comparison code (OBS)reads in observation files16 The observation and model comparison code, the observation operator (OBS), reads in observation files 17 17 (profile temperature and salinity, sea surface temperature, sea level anomaly, sea ice concentration, and velocity) and calculates an interpolated model equivalent value at the observation location and nearest model timestep. 18 18 The resulting data are saved in a ``feedback'' file (or files). … … 22 22 The OBS code is called from \mdl{nemogcm} for model initialisation and to calculate the model equivalent values for observations on the 0th timestep. 23 23 The code is then called again after each timestep from \mdl{step}. 24 The code is only activated if the namelist logical \np{ln\_diaobs} is set to true.24 The code is only activated if the \ngn{namobs} namelist logical \np{ln\_diaobs} is set to true. 25 25 26 26 For all data types a 2D horizontal interpolator or averager is needed to … … 28 28 For {\em in situ} profiles, a 1D vertical interpolator is needed in addition to 29 29 provide model fields at the observation depths. 30 This now works in a generalised vertical coordinate system. 30 This now works in a generalised vertical coordinate system. 31 31 32 32 Some profile observation types (\eg tropical moored buoys) are made available as daily averaged quantities. … … 36 36 the observation operator code can calculate equivalent night-time average model SST fields by 37 37 setting the namelist value \np{ln\_sstnight} to true. 38 Otherwise the model value from the nearest timestep to the observation time is used.39 40 The code is controlled by the namelist \ textit{namobs}.38 Otherwise (by default) the model value from the nearest timestep to the observation time is used. 39 40 The code is controlled by the namelist \ngn{namobs}. 41 41 See the following sections for more details on setting up the namelist. 42 42 … … 47 47 \autoref{sec:OBS_theory} introduces some of the theoretical aspects of the observation operator including 48 48 interpolation methods and running on multiple processors. 49 \autoref{sec:OBS_ ooo} describes the offline observation operator code.49 \autoref{sec:OBS_sao} describes the standalone observation operator code. 50 50 \autoref{sec:OBS_obsutils} introduces some utilities to help working with the files produced by the OBS code. 51 51 … … 56 56 \label{sec:OBS_example} 57 57 58 This section describes an example of running the observation operator codeusing59 profile data which can be freely downloaded.60 It shows how to adapt an existing run and build of NEMO to run the observation operator. 58 In this section an example of running the observation operator code is described using 59 profile observation data which can be freely downloaded. 60 It shows how to adapt an existing run and build of NEMO to run the observation operator. Note also the observation operator and the assimilation increments code are run in the \np{ORCA2\_ICE\_OBS} SETTE test. 61 61 62 62 \begin{enumerate} … … 65 65 \item Download some EN4 data from \href{http://www.metoffice.gov.uk/hadobs}{www.metoffice.gov.uk/hadobs}. 66 66 Choose observations which are valid for the period of your test run because 67 the observation operator compares the model and observations for a matching date and time. 68 69 \item Compile the OBSTOOLS code using:67 the observation operator compares the model and observations for a matching date and time. 68 69 \item Compile the OBSTOOLS code in the \np{tools} directory using: 70 70 \begin{cmds} 71 ./maketools -n OBSTOOLS -m [ARCH] .71 ./maketools -n OBSTOOLS -m [ARCH] 72 72 \end{cmds} 73 73 74 \item Convert the EN4 data into feedback format: 74 replacing \np{[ARCH]} with the build architecture file for your machine. Note the tools are checked out from a separate repository under \np{utils/tools}. 75 76 \item Convert the EN4 data into feedback format: 75 77 \begin{cmds} 76 78 enact2fb.exe profiles_01.nc EN.4.1.1.f.profiles.g10.YYYYMM.nc … … 87 89 This can be expensive, particularly for large numbers of observations, 88 90 setting \np{ln\_grid\_search\_lookup} allows the use of a lookup table which 89 is saved into an ``xypos``file (or files).91 is saved into an \np{cn\_gridsearch} file (or files). 90 92 This will need to be generated the first time if it does not exist in the run directory. 91 93 However, once produced it will significantly speed up future grid searches. 92 94 Setting \np{ln\_grid\_global} means that the code distributes the observations evenly between processors. 93 95 Alternatively each processor will work with observations located within the model subdomain 94 (see section~\autoref{subsec:OBS_parallel}).96 (see \autoref{subsec:OBS_parallel}). 95 97 96 98 A number of utilities are now provided to plot the feedback files, convert and recombine the files. 97 These are explained in more detail in section~\autoref{sec:OBS_obsutils}.99 These are explained in more detail in \autoref{sec:OBS_obsutils}. 98 100 Utilites to convert other input data formats into the feedback format are also described in 99 section~\autoref{sec:OBS_obsutils}.101 \autoref{sec:OBS_obsutils}. 100 102 101 103 \section{Technical details (feedback type observation file headers)} … … 110 112 %------------------------------------------------------------------------------------------------------------- 111 113 112 The observation operator code uses the "feedback"observation file format for all data types.114 The observation operator code uses the feedback observation file format for all data types. 113 115 All the observation files must be in NetCDF format. 114 116 Some example headers (produced using \mbox{\textit{ncdump~-h}}) for profile data, sea level anomaly and 115 117 sea surface temperature are in the following subsections. 116 118 117 \subsection{Profile feedback }119 \subsection{Profile feedback file} 118 120 119 121 \begin{clines} … … 271 273 \end{clines} 272 274 273 \subsection{Sea level anomaly feedback }275 \subsection{Sea level anomaly feedback file} 274 276 275 277 \begin{clines} … … 395 397 \end{clines} 396 398 397 T he mean dynamic topography (MDT) must be provided in a separate file defined on399 To use Sea Level Anomaly (SLA) data the mean dynamic topography (MDT) must be provided in a separate file defined on 398 400 the model grid called \ifile{slaReferenceLevel}. 399 401 The MDT is required in order to produce the model equivalent sea level anomaly from the model sea surface height. … … 417 419 \end{clines} 418 420 419 \subsection{Sea surface temperature feedback }421 \subsection{Sea surface temperature feedback file} 420 422 421 423 \begin{clines} … … 547 549 the same size as the footprint. 548 550 NEMO therefore has the capability to specify either an interpolation or an averaging 549 (for surface observation types only). 551 (for surface observation types only). 550 552 551 553 The main namelist option associated with the interpolation/averaging is \np{nn\_2dint}. … … 559 561 \item \np{nn\_2dint}\forcode{ = 4}: Polynomial interpolation 560 562 \item \np{nn\_2dint}\forcode{ = 5}: Radial footprint averaging with diameter specified in the namelist as 561 \np{rn\_ ???\_avglamscl} in degrees or metres (set using \np{ln\_???\_fp\_indegs})563 \np{rn\_[var]\_avglamscl} in degrees or metres (set using \np{ln\_[var]\_fp\_indegs}) 562 564 \item \np{nn\_2dint}\forcode{ = 6}: Rectangular footprint averaging with E/W and N/S size specified in 563 the namelist as \np{rn\_ ???\_avglamscl} and \np{rn\_???\_avgphiscl} in degrees or metres564 (set using \np{ln\_ ???\_fp\_indegs})565 the namelist as \np{rn\_[var]\_avglamscl} and \np{rn\_[var]\_avgphiscl} in degrees or metres 566 (set using \np{ln\_[var]\_fp\_indegs}) 565 567 \end{itemize} 566 The ??? in the last two options indicate these options should be specified for each observation typefor568 Replace \np{[var]} in the last two options with the observation type (sla, sst, sss or sic) for 567 569 which the averaging is to be performed (see namelist example above). 568 570 The \np{nn\_2dint} default option can be overridden for surface observation types using 569 namelist values \np{nn\_2dint\_ ???} where ??? is one of sla,sst,sss,sic.571 namelist values \np{nn\_2dint\_[var]} where \np{[var]} is the observation type. 570 572 571 573 Below is some more detail on the various options for interpolation and averaging available in NEMO. … … 573 575 \subsubsection{Horizontal interpolation} 574 576 575 Consider an observation point ${\mathrm P}$ with with longitude and latitude $({\lambda_{}}_{\mathrm P}, \phi_{\mathrm P})$and577 Consider an observation point ${\mathrm P}$ with with longitude and latitude (${\lambda_{}}_{\mathrm P}$, $\phi_{\mathrm P}$) and 576 578 the four nearest neighbouring model grid points ${\mathrm A}$, ${\mathrm B}$, ${\mathrm C}$ and ${\mathrm D}$ with 577 579 longitude and latitude ($\lambda_{\mathrm A}$, $\phi_{\mathrm A}$),($\lambda_{\mathrm B}$, $\phi_{\mathrm B}$) etc. 578 580 All horizontal interpolation methods implemented in NEMO estimate the value of a model variable $x$ at point $P$ as 579 581 a weighted linear combination of the values of the model variables at the grid points ${\mathrm A}$, ${\mathrm B}$ etc.: 582 580 583 \begin{align*} 581 {x_{}}_{\mathrm P} & \hspace{-2mm} = \hspace{-2mm} &582 583 584 585 584 {x_{}}_{\mathrm P} = 585 \frac{1}{w} \left( {w_{}}_{\mathrm A} {x_{}}_{\mathrm A} + 586 {w_{}}_{\mathrm B} {x_{}}_{\mathrm B} + 587 {w_{}}_{\mathrm C} {x_{}}_{\mathrm C} + 588 {w_{}}_{\mathrm D} {x_{}}_{\mathrm D} \right) 586 589 \end{align*} 590 587 591 where ${w_{}}_{\mathrm A}$, ${w_{}}_{\mathrm B}$ etc. are the respective weights for the model field at 588 592 points ${\mathrm A}$, ${\mathrm B}$ etc., and $w = {w_{}}_{\mathrm A} + {w_{}}_{\mathrm B} + {w_{}}_{\mathrm C} + {w_{}}_{\mathrm D}$. … … 597 601 For example, the weight given to the field ${x_{}}_{\mathrm A}$ is specified as the product of the distances 598 602 from ${\mathrm P}$ to the other points: 599 \begin{align*} 603 604 \begin{alignat*}{2} 600 605 {w_{}}_{\mathrm A} = s({\mathrm P}, {\mathrm B}) \, s({\mathrm P}, {\mathrm C}) \, s({\mathrm P}, {\mathrm D}) 601 \end{align *}602 where 603 \begin{align*}604 s\left ({\mathrm P}, {\mathrm M} \right ) 605 & \hspace{-2mm} = \hspace{-2mm} &606 \cos^{-1} \! \left\{606 \end{alignat*} 607 608 where 609 610 \begin{alignat*}{2} 611 s\left({\mathrm P}, {\mathrm M} \right) & = & \hspace{0.25em} \cos^{-1} \! \left\{ 607 612 \sin {\phi_{}}_{\mathrm P} \sin {\phi_{}}_{\mathrm M} 608 + \cos {\phi_{}}_{\mathrm P} \cos {\phi_{}}_{\mathrm M} 609 \cos ({\lambda_{}}_{\mathrm M} - {\lambda_{}}_{\mathrm P}) 613 + \cos {\phi_{}}_{\mathrm P} \cos {\phi_{}}_{\mathrm M} 614 \cos ({\lambda_{}}_{\mathrm M} - {\lambda_{}}_{\mathrm P}) 610 615 \right\} 611 \end{align*} 616 \end{alignat*} 617 612 618 and $M$ corresponds to $B$, $C$ or $D$. 613 619 A more stable form of the great-circle distance formula for small distances ($x$ near 1) 614 620 involves the arcsine function (\eg see p.~101 of \citet{daley.barker_bk01}: 615 \begin{align*} 616 s\left( {\mathrm P}, {\mathrm M} \right) & \hspace{-2mm} = \hspace{-2mm} & \sin^{-1} \! \left\{ \sqrt{ 1 - x^2 } \right\} 617 \end{align*} 621 622 \begin{alignat*}{2} 623 s\left( {\mathrm P}, {\mathrm M} \right) = \sin^{-1} \! \left\{ \sqrt{ 1 - x^2 } \right\} 624 \end{alignat*} 625 618 626 where 619 \begin{align*} 620 x & \hspace{-2mm} = \hspace{-2mm} & 621 {a_{}}_{\mathrm M} {a_{}}_{\mathrm P} + {b_{}}_{\mathrm M} {b_{}}_{\mathrm P} + {c_{}}_{\mathrm M} {c_{}}_{\mathrm P} 622 \end{align*} 623 and 624 \begin{align*} 625 {a_{}}_{\mathrm M} & \hspace{-2mm} = \hspace{-2mm} & \sin {\phi_{}}_{\mathrm M}, \\ 626 {a_{}}_{\mathrm P} & \hspace{-2mm} = \hspace{-2mm} & \sin {\phi_{}}_{\mathrm P}, \\ 627 {b_{}}_{\mathrm M} & \hspace{-2mm} = \hspace{-2mm} & \cos {\phi_{}}_{\mathrm M} \cos {\phi_{}}_{\mathrm M}, \\ 628 {b_{}}_{\mathrm P} & \hspace{-2mm} = \hspace{-2mm} & \cos {\phi_{}}_{\mathrm P} \cos {\phi_{}}_{\mathrm P}, \\ 629 {c_{}}_{\mathrm M} & \hspace{-2mm} = \hspace{-2mm} & \cos {\phi_{}}_{\mathrm M} \sin {\phi_{}}_{\mathrm M}, \\ 630 {c_{}}_{\mathrm P} & \hspace{-2mm} = \hspace{-2mm} & \cos {\phi_{}}_{\mathrm P} \sin {\phi_{}}_{\mathrm P}. 631 \end{align*} 627 628 \begin{alignat*}{2} 629 x = {a_{}}_{\mathrm M} {a_{}}_{\mathrm P} + {b_{}}_{\mathrm M} {b_{}}_{\mathrm P} + {c_{}}_{\mathrm M} {c_{}}_{\mathrm P} 630 \end{alignat*} 631 632 and 633 634 \begin{alignat*}{3} 635 & {a_{}}_{\mathrm M} & = && \quad \sin {\phi_{}}_{\mathrm M}, \\ 636 & {a_{}}_{\mathrm P} & = && \quad \sin {\phi_{}}_{\mathrm P}, \\ 637 & {b_{}}_{\mathrm M} & = && \quad \cos {\phi_{}}_{\mathrm M} \cos {\phi_{}}_{\mathrm M}, \\ 638 & {b_{}}_{\mathrm P} & = && \quad \cos {\phi_{}}_{\mathrm P} \cos {\phi_{}}_{\mathrm P}, \\ 639 & {c_{}}_{\mathrm M} & = && \quad \cos {\phi_{}}_{\mathrm M} \sin {\phi_{}}_{\mathrm M}, \\ 640 & {c_{}}_{\mathrm P} & = && \quad \cos {\phi_{}}_{\mathrm P} \sin {\phi_{}}_{\mathrm P}. 641 \end{alignat*} 632 642 633 643 \item[2.] {\bfseries Great-Circle distance-weighted interpolation with small angle approximation.} 634 644 Similar to the previous interpolation but with the distance $s$ computed as 635 \begin{align *}645 \begin{alignat*}{2} 636 646 s\left( {\mathrm P}, {\mathrm M} \right) 637 & \hspace{-2mm} = \hspace{-2mm} & 638 \sqrt{ \left( {\phi_{}}_{\mathrm M} - {\phi_{}}_{\mathrm P} \right)^{2} 647 & = & \sqrt{ \left( {\phi_{}}_{\mathrm M} - {\phi_{}}_{\mathrm P} \right)^{2} 639 648 + \left( {\lambda_{}}_{\mathrm M} - {\lambda_{}}_{\mathrm P} \right)^{2} 640 649 \cos^{2} {\phi_{}}_{\mathrm M} } 641 \end{align *}650 \end{alignat*} 642 651 where $M$ corresponds to $A$, $B$, $C$ or $D$. 643 652 … … 649 658 a cell with coordinates (0,0), (1,0), (0,1) and (1,1). 650 659 This method is based on the \href{https://github.com/SCRIP-Project/SCRIP}{SCRIP interpolation package}. 651 660 652 661 \end{enumerate} 653 662 … … 660 669 \item The maximum number of grid points is calculated in the local grid domain for which 661 670 the averaging is likely need to cover. 662 \item The l ats/longs of the grid points surrounding the nearest model grid box are extracted using671 \item The longitudes and latitudes of the grid points surrounding the nearest model grid box are extracted using 663 672 existing mpi routines. 664 673 \item The weights for each grid point associated with each observation are calculated, … … 673 682 674 683 Examples of the weights calculated for an observation with rectangular and radial footprints are shown in 675 Figs.~\autoref{fig:obsavgrec} and~\autoref{fig:obsavgrad}.684 \autoref{fig:obsavgrec} and~\autoref{fig:obsavgrad}. 676 685 677 686 %>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 696 705 Weights associated with each model grid box (blue lines and numbers) 697 706 for an observation at -170.5\deg{E}, 56.0\deg{N} with a radial footprint with diameter 1\deg. 698 } 707 } 699 708 \end{center} 700 709 \end{figure} … … 706 715 For many grids used by the NEMO model, such as the ORCA family, the horizontal grid coordinates $i$ and $j$ are not simple functions of latitude and longitude. 707 716 Therefore, it is not always straightforward to determine the grid points surrounding any given observational position. 708 Before the interpolation can be performed, a search algorithm is then required to determine the corner points of 717 Before the interpolation can be performed, a search algorithm is then required to determine the corner points of 709 718 the quadrilateral cell in which the observation is located. 710 This is the most difficult and time consuming part of the 2D interpolation procedure. 719 This is the most difficult and time consuming part of the 2D interpolation procedure. 711 720 A robust test for determining if an observation falls within a given quadrilateral cell is as follows. 712 721 Let ${\mathrm P}({\lambda_{}}_{\mathrm P} ,{\phi_{}}_{\mathrm P} )$ denote the observation point, 713 722 and let ${\mathrm A}({\lambda_{}}_{\mathrm A} ,{\phi_{}}_{\mathrm A} )$, ${\mathrm B}({\lambda_{}}_{\mathrm B} ,{\phi_{}}_{\mathrm B} )$, 714 723 ${\mathrm C}({\lambda_{}}_{\mathrm C} ,{\phi_{}}_{\mathrm C} )$ and ${\mathrm D}({\lambda_{}}_{\mathrm D} ,{\phi_{}}_{\mathrm D} )$ 715 denote the bottom left, bottom right, top left and top right corner points of the cell, respectively. 716 To determine if P is inside the cell, we verify that the cross-products 724 denote the bottom left, bottom right, top left and top right corner points of the cell, respectively. 725 To determine if P is inside the cell, we verify that the cross-products 717 726 \begin{align*} 718 727 \begin{array}{lllll} … … 750 759 be searched for on a regular grid. 751 760 For each observation position, the closest point on the regular grid of this position is computed and 752 the $i$ and $j$ ranges of this point searched to determine the precise four points surrounding the observation. 761 the $i$ and $j$ ranges of this point searched to determine the precise four points surrounding the observation. 753 762 754 763 \subsection{Parallel aspects of horizontal interpolation} … … 757 766 For horizontal interpolation, there is the basic problem that 758 767 the observations are unevenly distributed on the globe. 759 In numerical models, it is common to divide the model grid into subgrids (or domains) where768 In \NEMO the model grid is divided into subgrids (or domains) where 760 769 each subgrid is executed on a single processing element with explicit message passing for 761 770 exchange of information along the domain boundaries when running on a massively parallel processor (MPP) system. 762 This approach is used by \NEMO. 763 764 For observations there is no natural distribution since the observations are not equally distributed on the globe. 771 772 For observations there is no natural distribution since the observations are not equally distributed on the globe. 765 773 Two options have been made available: 766 774 1) geographical distribution; … … 784 792 the domain of the grid-point parallelization. 785 793 \autoref{fig:obslocal} shows an example of the distribution of the {\em in situ} data on processors with 786 a different colour for each observation on a given processor for a 4 $\times$ 2 decomposition with ORCA2. 794 a different colour for each observation on a given processor for a 4 $\times$ 2 decomposition with ORCA2. 787 795 The grid-point domain decomposition is clearly visible on the plot. 788 796 789 797 The advantage of this approach is that all information needed for horizontal interpolation is available without 790 798 any MPP communication. 791 Of course, this is under the assumption that we areonly using a $2 \times 2$ grid-point stencil for799 This is under the assumption that we are dealing with point observations and only using a $2 \times 2$ grid-point stencil for 792 800 the interpolation (\eg bilinear interpolation). 793 801 For higher order interpolation schemes this is no longer valid. … … 827 835 At the bottom boundary, this is done using the land-ocean mask. 828 836 837 For profile observation types we do both vertical and horizontal interpolation. NEMO has a generalised vertical coordinate system this means the vertical level depths can vary with location. Therefore, it is necessary first to perform vertical interpolation of the model value to the observation depths for each of the four surrounding grid points. After this the model values, at these points, at the observation depth, are horizontally interpolated to the observation location. 838 829 839 \newpage 830 840 831 841 % ================================================================ 832 % Offline observation operator documentation842 % Standalone observation operator documentation 833 843 % ================================================================ 834 844 835 845 %\usepackage{framed} 836 846 837 \section{ Offline observation operator}838 \label{sec:OBS_ ooo}847 \section{Standalone observation operator} 848 \label{sec:OBS_sao} 839 849 840 850 \subsection{Concept} 841 851 842 The obs oper maps model variables to observation space. 843 It is possible to apply this mapping without running the model. 844 The software which performs this functionality is known as the \textbf{offline obs oper}. 845 The obs oper is divided into three stages. 846 An initialisation phase, an interpolation phase and an output phase. 847 The implementation of which is outlined in the previous sections. 848 During the interpolation phase the offline obs oper populates the model arrays by 849 reading saved model fields from disk. 850 851 There are two ways of exploiting this offline capacity. 852 The observation operator maps model variables to observation space. This is normally done while the model is running, i.e. online, it is possible to apply this mapping offline without running the model with the \textbf{standalone observation operator} (SAO). The process is divided into an initialisation phase, an interpolation phase and an output phase. 853 During the interpolation phase the SAO populates the model arrays by 854 reading saved model fields from disk. The interpolation and the output phases use the same OBS code described in the preceeding sections. 855 856 There are two ways of exploiting the standalone capacity. 852 857 The first is to mimic the behaviour of the online system by supplying model fields at 853 858 regular intervals between the start and the end of the run. 854 859 This approach results in a single model counterpart per observation. 855 This kind of usage produces feedback files the same file format as the online obs oper.856 The second is to take advantage of the offline setting in which857 multiple model counterparts can be calculated perobservation.860 This kind of usage produces feedback files the same file format as the online observation operator. 861 The second is to take advantage of the ability to run offline by calculating 862 multiple model counterparts for each observation. 858 863 In this case it is possible to consider all forecasts verifying at the same time. 859 By forecast, I mean any method which produces an estimate of physical reality which is not an observed value. 860 In the case of class 4 files this means forecasts, analyses, persisted analyses and 861 climatological values verifying at the same time. 862 Although the class 4 file format doesn't account for multiple ensemble members or 863 multiple experiments per observation, it is possible to include these components in the same or multiple files. 864 By forecast, we mean any method which produces an estimate of physical reality which is not an observed value. 864 865 865 866 %-------------------------------------------------------------------------------------------------------- 866 % offline_oper.exe867 % sao.exe 867 868 %-------------------------------------------------------------------------------------------------------- 868 869 869 \subsection{Using the offline observation operator}870 \subsection{Using the standalone observation operator} 870 871 871 872 \subsubsection{Building} 872 873 873 In addition to \emph{OPA\_SRC} the offline obs oper requires the inclusion of the \emph{OOO\_SRC} directory.874 \emph{ OOO\_SRC} contains a replacement \mdl{nemo} and \mdl{nemogcm} which874 In addition to \emph{OPA\_SRC} the SAO requires the inclusion of the \emph{SAO\_SRC} directory. 875 \emph{SAO\_SRC} contains a replacement \mdl{nemo} and \mdl{nemogcm} which 875 876 overwrites the resultant \textbf{nemo.exe}. 876 This is the approach taken by \emph{SAS\_SRC} and\emph{OFF\_SRC}.877 Note this a similar approach to that taken by the standalone surface scheme \emph{SAS\_SRC} and the offline TOP model \emph{OFF\_SRC}. 877 878 878 879 %-------------------------------------------------------------------------------------------------------- 879 % Running 880 % Running 880 881 %-------------------------------------------------------------------------------------------------------- 881 882 \subsubsection{Running} 882 883 883 The simplest way to use the executable is to edit and append the \textbf{ooo.nml} namelist to 884 a full NEMO namelist and then to run the executable as if it were nemo.exe. 885 886 \subsubsection{Quick script} 887 888 A useful Python utility to control the namelist options can be found in \textbf{OBSTOOLS/OOO}. 889 The functions which locate model fields and observation files can be manually specified. 890 The package can be installed by appropriate use of the included setup.py script. 891 892 Documentation can be auto-generated by Sphinx by running \emph{make html} in the \textbf{doc} directory. 884 The simplest way to use the executable is to edit and append the \textbf{sao.nml} namelist to 885 a full NEMO namelist and then to run the executable as if it were nemo.exe. 893 886 894 887 %-------------------------------------------------------------------------------------------------------- 895 888 % Configuration section 896 889 %-------------------------------------------------------------------------------------------------------- 897 \subsection{Configuring the offline observation operator}898 The observation files and settings understood by \ textbf{namobs} have been outlined in the online obs oper section.899 In addition there are two further namelists wich control the operation of the offline obs oper.900 \textbf{nam ooo} which controls the input model fields and \textbf{namcl4} which901 controls the production of class 4 files. 890 \subsection{Configuring the standalone observation operator} 891 The observation files and settings understood by \ngn{namobs} have been outlined in the online observation operator section. 892 In addition there are two further namelists wich control the operation of the SAO. 893 \textbf{namsao} which controls the input model fields and \textbf{namcl4} which 894 controls the production of class 4 files. 902 895 903 896 \subsubsection{Single field} 904 897 905 In offline mode model arrays are populated at appropriate time steps via input files.906 At present, \textbf{tsn} and \textbf{sshn} are populated by the default read routines. 898 In the SAO the model arrays are populated at appropriate time steps via input files. 899 At present, \textbf{tsn} and \textbf{sshn} are populated by the default read routines. 907 900 These routines will be expanded upon in future versions to allow the specification of any model variable. 908 901 As such, input files must be global versions of the model domain with 909 902 \textbf{votemper}, \textbf{vosaline} and optionally \textbf{sshn} present. 910 903 911 For each field read there must be an entry in the \textbf{nam ooo} namelist specifying904 For each field read there must be an entry in the \textbf{namsao} namelist specifying 912 905 the name of the file to read and the index along the \emph{time\_counter}. 913 906 For example, to read the second time counter from a single file the namelist would be. … … 915 908 \begin{forlines} 916 909 !---------------------------------------------------------------------- 917 ! nam ooo Offline obs_oper namelist910 ! namsao Standalone obs_oper namelist 918 911 !---------------------------------------------------------------------- 919 ! ooo_files specifies the files containing the model counterpart920 ! nn_ ooo_idx specifies the time_counter index within the model file921 &nam ooo922 ooo_files = "foo.nc"923 nn_ ooo_idx = 2912 ! sao_files specifies the files containing the model counterpart 913 ! nn_sao_idx specifies the time_counter index within the model file 914 &namsao 915 sao_files = "foo.nc" 916 nn_sao_idx = 2 924 917 / 925 918 \end{forlines} … … 927 920 \subsubsection{Multiple fields per run} 928 921 929 Model field iteration is controlled via \textbf{nn\_ ooo\_freq} which922 Model field iteration is controlled via \textbf{nn\_sao\_freq} which 930 923 specifies the number of model steps at which the next field gets read. 931 924 For example, if 12 hourly fields are to be interpolated in a setup where 288 steps equals 24 hours. … … 933 926 \begin{forlines} 934 927 !---------------------------------------------------------------------- 935 ! nam ooo Offline obs_oper namelist928 ! namsao Standalone obs_oper namelist 936 929 !---------------------------------------------------------------------- 937 ! ooo_files specifies the files containing the model counterpart938 ! nn_ ooo_idx specifies the time_counter index within the model file939 ! nn_ ooo_freq specifies number of time steps between read operations940 &nam ooo941 ooo_files = "foo.nc" "foo.nc"942 nn_ ooo_idx = 1 2943 nn_ ooo_freq = 144930 ! sao_files specifies the files containing the model counterpart 931 ! nn_sao_idx specifies the time_counter index within the model file 932 ! nn_sao_freq specifies number of time steps between read operations 933 &namsao 934 sao_files = "foo.nc" "foo.nc" 935 nn_sao_idx = 1 2 936 nn_sao_freq = 144 944 937 / 945 938 \end{forlines} … … 952 945 %\end{framed} 953 946 954 It is easy to see how a collection of fields taken frona number of files at different indices can be combined at947 A collection of fields taken from a number of files at different indices can be combined at 955 948 a particular frequency in time to generate a pseudo model evolution. 956 As long as all that is needed is a single model counterpart at a regular interval then 957 namooo is all that needs to be edited. 958 However, a far more interesting approach can be taken in which multiple forecasts, analyses, persisted analyses and 959 climatologies are considered against the same set of observations. 960 For this a slightly more complicated approach is needed. 961 It is referred to as \emph{Class 4} since it is the fourth metric defined by the GODAE intercomparison project. 962 963 %-------------------------------------------------------------------------------------------------------- 964 % Class 4 file section 965 %-------------------------------------------------------------------------------------------------------- 966 \subsubsection{Multiple model counterparts per observation a.k.a Class 4} 967 968 A generalisation of feedback files to allow multiple model components per observation. 969 For a single observation, as well as previous forecasts verifying at the same time 970 there are also analyses, persisted analyses and climatologies. 971 972 973 The above namelist performs two basic functions. 974 It organises the fields given in \textbf{namooo} into groups so that observations can be matched up multiple times. 975 It also controls the metadata and the output variable of the class 4 file when a write routine is called. 976 977 %\begin{framed} 978 \textbf{Note: ln\_cl4} must be set to \forcode{.true.} in \textbf{namobs} to use class 4 outputs. 979 %\end{framed} 980 981 \subsubsection{Class 4 naming convention} 982 983 The standard class 4 file naming convention is as follows. 984 985 \noindent 986 \linebreak 987 \textbf{\$\{prefix\}\_\$\{yyyymmdd\}\_\$\{sys\}\_\$\{cfg\}\_\$\{vn\}\_\$\{kind\}\_\$\{nproc\}}.nc 988 989 \noindent 990 \linebreak 991 Much of the namelist is devoted to specifying this convention. 992 The following namelist settings control the elements of the output file names. 993 Each should be specified as a single string of character data. 994 995 \begin{description} 996 \item[cl4\_prefix] 997 Prefix for class 4 files \eg class4 998 \item[cl4\_date] 999 YYYYMMDD validity date 1000 \item[cl4\_sys] 1001 The name of the class 4 model system \eg FOAM 1002 \item[cl4\_cfg] 1003 The name of the class 4 model configuration \eg orca025 1004 \item[cl4\_vn] 1005 The name of the class 4 model version \eg 12.0 1006 \end{description} 1007 1008 \noindent 1009 The kind is specified by the observation type internally to the obs oper. 1010 The processor number is specified internally in NEMO. 1011 1012 \subsubsection{Class 4 file global attributes} 1013 1014 Global attributes necessary to fulfill the class 4 file definition. 1015 These are also useful pieces of information when collaborating with external partners. 1016 1017 \begin{description} 1018 \item[cl4\_contact] 1019 Contact email for class 4 files. 1020 \item[cl4\_inst] 1021 The name of the producers institution. 1022 \item[cl4\_cfg] 1023 The name of the class 4 model configuration \eg orca025 1024 \item[cl4\_vn] 1025 The name of the class 4 model version \eg 12.0 1026 \end{description} 1027 1028 \noindent 1029 The obs\_type, creation date and validity time are specified internally to the obs oper. 1030 1031 \subsubsection{Class 4 model counterpart configuration} 1032 1033 As seen previously it is possible to perform a single sweep of the obs oper and 1034 specify a collection of model fields equally spaced along that sweep. 1035 In the class 4 case the single sweep is replaced with multiple sweeps and 1036 a certain ammount of book keeping is needed to ensure each model counterpart makes its way to 1037 the correct piece of memory in the output files. 1038 1039 \noindent 1040 \linebreak 1041 In terms of book keeping, the offline obs oper needs to know how many full sweeps need to be performed. 1042 This is specified via the \textbf{cl4\_match\_len} variable and 1043 is the total number of model counterparts per observation. 1044 For example, a 3 forecasts plus 3 persistence fields plus an analysis field would be 7 counterparts per observation. 1045 1046 \begin{forlines} 1047 cl4_match_len = 7 1048 \end{forlines} 1049 1050 Then to correctly allocate a class 4 file the forecast axis must be defined. 1051 This is controlled via \textbf{cl4\_fcst\_len}, which in out above example would be 3. 1052 1053 \begin{forlines} 1054 cl4_fcst_len = 3 1055 \end{forlines} 1056 1057 Then for each model field it is necessary to designate what class 4 variable and index along 1058 the forecast dimension the model counterpart should be stored in the output file. 1059 As well as a value for that lead time in hours, this will be useful when interpreting the data afterwards. 1060 1061 \begin{forlines} 1062 cl4_vars = "forecast" "forecast" "forecast" "persistence" "persistence" 1063 "persistence" "best_estimate" 1064 cl4_fcst_idx = 1 2 3 1 2 3 1 1065 cl4_leadtime = 12 36 60 1066 \end{forlines} 1067 1068 In terms of files and indices of fields inside each file the class 4 approach makes use of 1069 the \textbf{namooo} namelist. 1070 If our fields are in separate files with a single field per file our example inputs will be specified. 1071 1072 \begin{forlines} 1073 ooo_files = "F.1.nc" "F.2.nc" "F.3.nc" "P.1.nc" "P.2.nc" "P.3.nc" "A.1.nc" 1074 nn_ooo_idx = 1 1 1 1 1 1 1 1075 \end{forlines} 1076 1077 When we combine all of the naming conventions, global attributes and i/o instructions the class 4 namelist becomes. 1078 1079 \begin{forlines} 1080 !---------------------------------------------------------------------- 1081 ! namooo Offline obs_oper namelist 1082 !---------------------------------------------------------------------- 1083 ! ooo_files specifies the files containing the model counterpart 1084 ! nn_ooo_idx specifies the time_counter index within the model file 1085 ! nn_ooo_freq specifies number of time steps between read operations 1086 &namooo 1087 ooo_files = "F.1.nc" "F.2.nc" "F.3.nc" "P.1.nc" "P.2.nc" "P.3.nc" "A.1.nc" 1088 nn_ooo_idx = 1 1 1 1 1 1 1 1089 / 1090 !---------------------------------------------------------------------- 1091 ! namcl4 Offline obs_oper class 4 namelist 1092 !---------------------------------------------------------------------- 1093 ! 1094 ! Naming convention 1095 ! ----------------- 1096 ! cl4_prefix specifies the output file prefix 1097 ! cl4_date specifies the output file validity date 1098 ! cl4_sys specifies the model counterpart system 1099 ! cl4_cfg specifies the model counterpart configuration 1100 ! cl4_vn specifies the model counterpart version 1101 ! cl4_inst specifies the model counterpart institute 1102 ! cl4_contact specifies the file producers contact details 1103 ! 1104 ! I/O specification 1105 ! ----------------- 1106 ! cl4_vars specifies the names of the output file netcdf variable 1107 ! cl4_fcst_idx specifies output file forecast index 1108 ! cl4_fcst_len specifies forecast axis length 1109 ! cl4_match_len specifies number of unique matches per observation 1110 ! cl4_leadtime specifies the forecast axis lead time 1111 ! 1112 &namcl4 1113 cl4_match_len = 7 1114 cl4_fcst_len = 3 1115 cl4_fcst_idx = 1 2 3 1 2 3 1 1116 cl4_vars = "forecast" "forecast" "forecast" "persistence" "persistence" 1117 "persistence" "best_estimate" 1118 cl4_leadtime = 12 36 60 1119 cl4_prefix = "class4" 1120 cl4_date = "20130101" 1121 cl4_vn = "12.0" 1122 cl4_sys = "FOAM" 1123 cl4_cfg = "AMM7" 1124 cl4_contact = "example@example.com" 1125 cl4_inst = "UK Met Office" 1126 / 1127 \end{forlines} 1128 1129 \subsubsection{Climatology interpolation} 1130 1131 The climatological counterpart is generated at the start of the run by 1132 restarting the model from climatology through appropriate use of \textbf{namtsd}. 1133 To override the offline observation operator read routine and to take advantage of the restart settings, 1134 specify the first entry in \textbf{cl4\_vars} as "climatology". 1135 This will then pipe the restart from climatology into the output class 4 file. 1136 As in every other class 4 matchup the input file, input index and output index must be specified. 1137 These can be replaced with dummy data since they are not used but 1138 they must be present to cycle through the matchups correctly. 1139 1140 \subsection{Advanced usage} 1141 1142 In certain cases it may be desirable to include both multiple model fields per observation window with 1143 multiple match ups per observation. 1144 This can be achieved by specifying \textbf{nn\_ooo\_freq} as well as the class 4 settings. 1145 Care must be taken in generating the ooo\_files list such that the files are arranged into 1146 consecutive blocks of single match ups. 1147 For example, 2 forecast fields of 12 hourly data would result in 4 separate read operations but 1148 only 2 write operations, 1 per forecast. 1149 1150 \begin{forlines} 1151 ooo_files = "F1.nc" "F1.nc" "F2.nc" "F2.nc" 1152 ... 1153 cl4_fcst_idx = 1 2 1154 \end{forlines} 1155 1156 The above notation reveals the internal split between match up iterators and file iterators. 1157 This technique has not been used before so experimentation is needed before results can be trusted. 949 If all that is needed is a single model counterpart at a regular interval then 950 the standard SAO is all that is required. 951 However, it is possible to extend this approach by comparing multiple forecasts, analyses, persisted analyses and 952 climatologies with the same set of observations. 953 This approach is referred to as \emph{Class 4} since it is the fourth metric defined by the GODAE intercomparison project. This requires multiple runs of the SAO and running an additional utility (not currently in the NEMO repository) to combine the feedback files into one class 4 file. 1158 954 1159 955 \newpage … … 1162 958 \label{sec:OBS_obsutils} 1163 959 1164 Some tools for viewing and processing of observation and feedback files are provided in1165 the NEMO repository for convenience.1166 These include OBSTOOLS which are a collection of \fortran programs which are helpful to deal with feedback files.960 For convenience some tools for viewing and processing of observation and feedback files are provided in 961 the NEMO repository. 962 These tools include OBSTOOLS which are a collection of \fortran programs which are helpful to deal with feedback files. 1167 963 They do such tasks as observation file conversion, printing of file contents, 1168 964 some basic statistical analysis of feedback files. 1169 The other tool is an IDL program called dataplot which uses a graphical interface to965 The other main tool is an IDL program called dataplot which uses a graphical interface to 1170 966 visualise observations and feedback files. 1171 967 OBSTOOLS and dataplot are described in more detail below. … … 1174 970 1175 971 A series of \fortran utilities is provided with NEMO called OBSTOOLS. 1176 This are helpful in handling observation files and the feedback file output from the NEMO observation operator. 1177 The utilities are as follows 1178 1179 \subsubsection{c4comb} 1180 1181 The program c4comb combines multiple class 4 files produced by individual processors in 1182 an MPI run of NEMO offline obs\_oper into a single class 4 file. 1183 The program is called in the following way: 1184 1185 1186 \footnotesize 1187 \begin{cmds} 1188 c4comb.exe outputfile inputfile1 inputfile2 ... 1189 \end{cmds} 972 This are helpful in handling observation files and the feedback file output from the NEMO observation operator. A brief description of some of the utilities follows 1190 973 1191 974 \subsubsection{corio2fb} 1192 975 1193 976 The program corio2fb converts profile observation files from the Coriolis format to the standard feedback format. 1194 The program is called in the following way: 1195 1196 \footnotesize 977 It is called in the following way: 978 1197 979 \begin{cmds} 1198 980 corio2fb.exe outputfile inputfile1 inputfile2 ... … … 1202 984 1203 985 The program enact2fb converts profile observation files from the ENACT format to the standard feedback format. 1204 The program is called in the following way: 1205 1206 \footnotesize 986 It is called in the following way: 987 1207 988 \begin{cmds} 1208 989 enact2fb.exe outputfile inputfile1 inputfile2 ... … … 1213 994 The program fbcomb combines multiple feedback files produced by individual processors in 1214 995 an MPI run of NEMO into a single feedback file. 1215 The program is called in the following way: 1216 1217 \footnotesize 996 It is called in the following way: 997 1218 998 \begin{cmds} 1219 999 fbcomb.exe outputfile inputfile1 inputfile2 ... … … 1223 1003 1224 1004 The program fbmatchup will match observations from two feedback files. 1225 The program is called in the following way: 1226 1227 \footnotesize 1005 It is called in the following way: 1006 1228 1007 \begin{cmds} 1229 1008 fbmatchup.exe outputfile inputfile1 varname1 inputfile2 varname2 ... … … 1234 1013 The program fbprint will print the contents of a feedback file or files to standard output. 1235 1014 Selected information can be output using optional arguments. 1236 The program is called in the following way: 1237 1238 \footnotesize 1015 It is called in the following way: 1016 1239 1017 \begin{cmds} 1240 1018 fbprint.exe [options] inputfile … … 1246 1024 -B Select observations based on QC flags 1247 1025 -u unsorted 1248 -s ID select station ID 1026 -s ID select station ID 1249 1027 -t TYPE select observation type 1250 -v NUM1-NUM2 select variable range to print by number 1028 -v NUM1-NUM2 select variable range to print by number 1251 1029 (default all) 1252 -a NUM1-NUM2 select additional variable range to print by number 1030 -a NUM1-NUM2 select additional variable range to print by number 1253 1031 (default all) 1254 -e NUM1-NUM2 select extra variable range to print by number 1032 -e NUM1-NUM2 select extra variable range to print by number 1255 1033 (default all) 1256 1034 -d output date range … … 1262 1040 1263 1041 The program fbsel will select or subsample observations. 1264 The program is called in the following way: 1265 1266 \footnotesize 1042 It is called in the following way: 1043 1267 1044 \begin{cmds} 1268 1045 fbsel.exe <input filename> <output filename> … … 1272 1049 1273 1050 The program fbstat will output summary statistics in different global areas into a number of files. 1274 The program is called in the following way: 1275 1276 \footnotesize 1051 It is called in the following way: 1052 1277 1053 \begin{cmds} 1278 1054 fbstat.exe [-nmlev] <filenames> … … 1283 1059 The program fbthin will thin the data to 1 degree resolution. 1284 1060 The code could easily be modified to thin to a different resolution. 1285 The program is called in the following way: 1286 1287 \footnotesize 1061 It is called in the following way: 1062 1288 1063 \begin{cmds} 1289 1064 fbthin.exe inputfile outputfile … … 1293 1068 1294 1069 The program sla2fb will convert an AVISO SLA format file to feedback format. 1295 The program is called in the following way: 1296 1297 \footnotesize 1070 It is called in the following way: 1071 1298 1072 \begin{cmds} 1299 1073 sla2fb.exe [-s type] outputfile inputfile1 inputfile2 ... … … 1306 1080 1307 1081 The program vel2fb will convert TAO/PIRATA/RAMA currents files to feedback format. 1308 The program is called in the following way: 1309 1310 \footnotesize 1082 It is called in the following way: 1083 1311 1084 \begin{cmds} 1312 1085 vel2fb.exe outputfile inputfile1 inputfile2 ... … … 1320 1093 1321 1094 An IDL program called dataplot is included which uses a graphical interface to 1322 visualise observations and feedback files. 1095 visualise observations and feedback files. Note a similar package has recently developed in python (also called dataplot) which does some of the same things that the IDL dataplot does. Please contact the authors of the this chapter if you are interested in this. 1096 1323 1097 It is possible to zoom in, plot individual profiles and calculate some basic statistics. 1324 1098 To plot some data run IDL and then: 1325 \footnotesize 1099 1326 1100 \begin{minted}{idl} 1327 1101 IDL> dataplot, "filename" … … 1331 1105 for example multiple feedback files from different processors or from different days, 1332 1106 the easiest method is to use the spawn command to generate a list of files which can then be passed to dataplot. 1333 \footnotesize 1107 1334 1108 \begin{minted}{idl} 1335 1109 IDL> spawn, 'ls profb*.nc', files … … 1362 1136 observation minus background value. 1363 1137 The next group of radio buttons selects the map projection. 1364 This can either be regular l atitude longitude grid, or north or south polar stereographic.1138 This can either be regular longitude latitude grid, or north or south polar stereographic. 1365 1139 The next group of radio buttons will plot bad observations, switch to salinity and 1366 1140 plot density for profile observations. -
NEMO/branches/2019/dev_r11233_obsasm_docfixes/doc/namelists/namobs
r11005 r11296 8 8 ln_sla = .false. ! Logical switch for SLA observations 9 9 ln_sst = .false. ! Logical switch for SST observations 10 ln_sss = .false. ! Logical swit hcfor SSS observations10 ln_sss = .false. ! Logical switch for SSS observations 11 11 ln_sic = .false. ! Logical switch for Sea Ice observations 12 12 ln_vel3d = .false. ! Logical switch for velocity observations
Note: See TracChangeset
for help on using the changeset viewer.