Back to home page

MITgcm

 
 

    


Warning, /doc/phys_pkgs/gridalt.rst is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit bf89a37a on 2019-03-17 03:29:27 UTC
8679f9097b Jeff*0001 .. _sec_phys_pkg_gridalt:
                0002 
                0003 Gridalt - Alternate Grid Package
                0004 --------------------------------
                0005 
                0006 
                0007 Introduction
                0008 ++++++++++++
                0009 
                0010 The gridalt package :cite:`mol:09` is designed to allow different components of MITgcm
                0011 to be run using horizontal and/or vertical grids which are different
                0012 from the main model grid. The gridalt routines handle the definition of
                0013 the all the various alternative grid(s) and the mappings between them
                0014 and the MITgcm grid. The implementation of the gridalt package which
                0015 allows the high end atmospheric physics (fizhi) to be run on a high
                0016 resolution and quasi terrain-following vertical grid is documented here.
                0017 The package has also (with some user modifications) been used for other
                0018 calculations within the GCM.
                0019 
                0020 The rationale for implementing the atmospheric physics on a high
                0021 resolution vertical grid involves the fact that the MITgcm :math:`p^*`
                0022 (or any pressure-type) coordinate cannot maintain the vertical
                0023 resolution near the surface as the bottom topography rises above sea
                0024 level. The vertical length scales near the ground are small and can vary
                0025 on small time scales, and the vertical grid must be adequate to resolve
                0026 them. Many studies with both regional and global atmospheric models have
                0027 demonstrated the improvements in the simulations when the vertical
                0028 resolution near the surface is increased (). Some of the benefit of
                0029 increased resolution near the surface is realized by employing the
                0030 higher resolution for the computation of the forcing due to turbulent
                0031 and convective processes in the atmosphere.
                0032 
                0033 The parameterizations of atmospheric subgrid scale processes are all
                0034 essentially one-dimensional in nature, and the computation of the terms
                0035 in the equations of motion due to these processes can be performed for
                0036 the air column over one grid point at a time. The vertical grid on which
                0037 these computations take place can therefore be entirely independant of
                0038 the grid on which the equations of motion are integrated, and the
                0039 ’tendency’ terms can be interpolated to the vertical grid on which the
                0040 equations of motion are integrated. A modified :math:`p^*` coordinate,
                0041 which adjusts to the local terrain and adds additional levels between
                0042 the lower levels of the existing :math:`p^*` grid (and perhaps between
                0043 the levels near the tropopause as well), is implemented. The vertical
                0044 discretization is different for each grid point, although it consist of
                0045 the same number of levels. Additional ’sponge’ levels aloft are added
                0046 when needed. The levels of the physics grid are constrained to fit
                0047 exactly into the existing :math:`p^*` grid, simplifying the mapping
                0048 between the two vertical coordinates. This is illustrated as follows:
                0049 
                0050 
                0051  .. figure:: figs/vertical.*
                0052     :width: 70%
                0053     :align: center
                0054     :alt: vertical discretisation
                0055     :name: grid_alt_vertical
                0056 
                0057     Vertical discretization for MITgcm (dark grey lines) and for the atmospheric physics (light grey lines). In this implementation, all MITgcm level interfaces must coincide with atmospheric physics level interfaces.
                0058 
                0059 
                0060 The algorithm presented here retains the state variables on the high
                0061 resolution ’physics’ grid as well as on the coarser resolution
                0062 ’dynamics‘ grid, and ensures that the two estimates of the state ’agree’
                0063 on the coarse resolution grid. It would have been possible to implement
                0064 a technique in which the tendencies due to atmospheric physics are
                0065 computed on the high resolution grid and the state variables are
                0066 retained at low resolution only. This, however, for the case of the
                0067 turbulence parameterization, would mean that the turbulent kinetic
                0068 energy source terms, and all the turbulence terms that are written in
                0069 terms of gradients of the mean flow, cannot really be computed making
                0070 use of the fine structure in the vertical.
                0071 
                0072 Equations on Both Grids
                0073 +++++++++++++++++++++++
                0074 
                0075 In addition to computing the physical forcing terms of the momentum,
                0076 thermodynamic and humidity equations on the modified (higher resolution)
                0077 grid, the higher resolution structure of the atmosphere (the boundary
                0078 layer) is retained between physics calculations. This neccessitates a
                0079 second set of evolution equations for the atmospheric state variables on
                0080 the modified grid. If the equation for the evolution of :math:`U` on
                0081 :math:`p^*` can be expressed as:
                0082 
                0083 .. math::
                0084 
                0085    \left . \frac{\partial U}{\partial t} \right |_{p^*}^{total} = 
                0086    \left . \frac{\partial U}{\partial t} \right |_{p^*}^{dynamics} + 
                0087    \left . \frac{\partial U}{\partial t} \right |_{p^*}^{physics}
                0088 
                0089 where the physics forcing terms on :math:`p^*` have been mapped from the
                0090 modified grid, then an additional equation to govern the evolution of
                0091 :math:`U` (for example) on the modified grid is written:
                0092 
                0093 .. math::
                0094 
                0095    \left . \frac{\partial U}{\partial t} \right |_{p^{*m}}^{total} = 
                0096    \left . \frac{\partial U}{\partial t} \right |_{p^{*m}}^{dynamics} + 
                0097    \left . \frac{\partial U}{\partial t} \right |_{p^{*m}}^{physics} +
                0098    \gamma ({\left . U \right |_{p^*}} - {\left . U \right |_{p^{*m}}})
                0099 
                0100 where :math:`p^{*m}` refers to the modified higher resolution grid, and
                0101 the dynamics forcing terms have been mapped from :math:`p^*` space. The
                0102 last term on the RHS is a relaxation term, meant to constrain the state
                0103 variables on the modified vertical grid to ‘track’ the state variables
                0104 on the :math:`p^*` grid on some time scale, governed by :math:`\gamma`.
                0105 In the present implementation, :math:`\gamma = 1`, requiring an
                0106 immediate agreement between the two ’states’.
                0107 
                0108 Time stepping Sequence
                0109 ++++++++++++++++++++++
                0110 
                0111 If we write :math:`T_{phys}` as the temperature (or any other state
                0112 variable) on the high resolution physics grid, and :math:`T_{dyn}` as
                0113 the temperature on the coarse vertical resolution dynamics grid, then:
                0114 
                0115 #. Compute the tendency due to physics processes.
                0116 
                0117 #. Advance the physics state: :math:`{{T^{n+1}}^{**}}_{phys}(l) = {T^n}_{phys}(l) + \delta T_{phys}`.
                0118 
                0119 #. Interpolate the physics tendency to the dynamics grid, and advance the dynamics state by physics and dynamics tendencies: :math:`{T^{n+1}}_{dyn}(L) = {T^n}_{dyn}(L) + \delta T_{dyn}(L) + [\delta T _{phys}(l)](L)`.
                0120 
                0121 #. Interpolate the dynamics tendency to the physics grid, and update the physics grid due to dynamics tendencies: :math:`{{T^{n+1}}^*}_{phys}(l)` = :math:`{{T^{n+1}}^{**}}_{phys}(l) + {\delta T_{dyn}(L)}(l)`.
                0122 
                0123 #. Apply correction term to physics state to account for divergence from dynamics state: :math:`{T^{n+1}}_{phys}(l)` = :math:`{{T^{n+1}}^*}_{phys}(l) + \gamma \{  T_{dyn}(L) - [T_{phys}(l)](L) \}(l)`. Where :math:`\gamma=1` here.
                0124 
                0125 Interpolation
                0126 +++++++++++++
                0127 
                0128 In order to minimize the correction terms for the state variables on
                0129 the alternative, higher resolution grid, the vertical interpolation
                0130 scheme must be constructed so that a dynamics-to-physics interpolation
                0131 can be exactly reversed with a physics-to-dynamics mapping. The simple
                0132 scheme employed to achieve this is:
                0133 
bf89a37abc Phob*0134 Coarse to fine: For all physics layers l in dynamics layer L, :math:`T_{phys}(l) = \{T_{dyn}(L)\} = T_{dyn}(L)`.
8679f9097b Jeff*0135 
bf89a37abc Phob*0136 Fine to coarse: For all physics layers l in dynamics layer L, :math:`T_{dyn}(L) = [T_{phys}(l)] = \int{T_{phys} dp }`.
8679f9097b Jeff*0137 
                0138 Where :math:`\{\}` is defined as the dynamics-to-physics operator and
                0139 :math:`[ ]` is the physics-to-dynamics operator, :math:`T` stands for
                0140 any state variable, and the subscripts :math:`phys` and :math:`dyn`
                0141 stand for variables on the physics and dynamics grids, respectively.
                0142 
                0143 Key subroutines, parameters and files 
                0144 ++++++++++++++++++++++++++++++++++++++
                0145 
                0146 One of the central elements of the gridalt package is the routine which
bf89a37abc Phob*0147 is called from subroutine :filelink:`gridalt_initialise <pkg/gridalt/gridalt_initialise.F>` to define the grid to be
                0148 used for the high end physics calculations. Routine :filelink:`make_phys_grid <pkg/gridalt/make_phys_grid.F>`
8679f9097b Jeff*0149 passes back the parameters which define the grid, ultimately stored in
bf89a37abc Phob*0150 the common block :filelink:`gridalt_mapping <pkg/gridalt/gridalt_mapping.F>`.
8679f9097b Jeff*0151 
                0152 ::
                0153 
                0154            subroutine make_phys_grid(drF,hfacC,im1,im2,jm1,jm2,Nr,
                0155          . Nsx,Nsy,i1,i2,j1,j2,bi,bj,Nrphys,Lbot,dpphys,numlevphys,nlperdyn)
                0156     c***********************************************************************
                0157     c Purpose: Define the grid that the will be used to run the high-end
                0158     c          atmospheric physics.
                0159     c
                0160     c Algorithm: Fit additional levels of some (~) known thickness in
                0161     c          between existing levels of the grid used for the dynamics
                0162     c
                0163     c Need:    Information about the dynamics grid vertical spacing
                0164     c
                0165     c Input:   drF         - delta r (p*) edge-to-edge
                0166     c          hfacC       - fraction of grid box above topography
                0167     c          im1, im2    - beginning and ending i - dimensions
                0168     c          jm1, jm2    - beginning and ending j - dimensions
                0169     c          Nr          - number of levels in dynamics grid
                0170     c          Nsx,Nsy     - number of processes in x and y direction
                0171     c          i1, i2      - beginning and ending i - index to fill
                0172     c          j1, j2      - beginning and ending j - index to fill
                0173     c          bi, bj      - x-dir and y-dir index of process
                0174     c          Nrphys      - number of levels in physics grid
                0175     c
                0176     c Output:  dpphys      - delta r (p*) edge-to-edge of physics grid
                0177     c          numlevphys  - number of levels used in the physics
                0178     c          nlperdyn    - physics level number atop each dynamics layer
                0179     c
                0180     c NOTES: 1) Pressure levs are built up from bottom, using p0, ps and dp:
                0181     c              p(i,j,k)=p(i,j,k-1) + dp(k)*ps(i,j)/p0(i,j)
                0182     c        2) Output dp's are aligned to fit EXACTLY between existing
                0183     c           levels of the dynamics vertical grid
                0184     c        3) IMPORTANT! This routine assumes the levels are numbered
                0185     c           from the bottom up, ie, level 1 is the surface.
                0186     c           IT WILL NOT WORK OTHERWISE!!!
                0187     c        4) This routine does NOT work for surface pressures less
                0188     c           (ie, above in the atmosphere) than about 350 mb
                0189     c***********************************************************************
                0190 
                0191 In the case of the grid used to compute the atmospheric physical forcing
bf89a37abc Phob*0192 (:ref:`sub_phys_pkg_fizhi`), the locations of the grid points move in time with the
                0193 MITgcm :math:`p^*` coordinate, and subroutine :filelink:`gridalt_update <pkg/gridalt/gridalt_update.F>` is called
8679f9097b Jeff*0194 during the run to update the locations of the grid points:
                0195 
                0196 ::
                0197 
                0198            subroutine gridalt_update(myThid)
                0199     c***********************************************************************
                0200     c Purpose: Update the pressure thicknesses of the layers of the
                0201     c          alternative vertical grid (used now for atmospheric physics).
                0202     c
                0203     c Calculate: dpphys    - new delta r (p*) edge-to-edge of physics grid
                0204     c                        using dpphys0 (initial value) and rstarfacC
                0205     c***********************************************************************
                0206 
                0207 The gridalt package also supplies utility routines which perform the
                0208 mappings from one grid to the other. These routines are called from the
                0209 code which computes the fields on the alternative (fizhi) grid.
                0210 
                0211 ::
                0212 
                0213           subroutine dyn2phys(qdyn,pedyn,im1,im2,jm1,jm2,lmdyn,Nsx,Nsy,
                0214          . idim1,idim2,jdim1,jdim2,bi,bj,windphy,pephy,Lbot,lmphy,nlperdyn,
                0215          . flg,qphy)
                0216     C***********************************************************************
                0217     C Purpose:
                0218     C   To interpolate an arbitrary quantity from the 'dynamics' eta (pstar)
                0219     C               grid to the higher resolution physics grid
                0220     C Algorithm:
                0221     C   Routine works one layer (edge to edge pressure) at a time.
                0222     C   Dynamics -> Physics retains the dynamics layer mean value,
                0223     C   weights the field either with the profile of the physics grid
                0224     C   wind speed (for U and V fields), or uniformly (T and Q)
                0225     C
                0226     C Input:
                0227     C   qdyn..... [im,jm,lmdyn] Arbitrary Quantity on Input Grid
                0228     C   pedyn.... [im,jm,lmdyn+1] Pressures at bottom edges of input levels
                0229     C   im1,2 ... Limits for Longitude Dimension of Input
                0230     C   jm1,2 ... Limits for Latitude  Dimension of Input
                0231     C   lmdyn.... Vertical  Dimension of Input
                0232     C   Nsx...... Number of processes in x-direction
                0233     C   Nsy...... Number of processes in y-direction
                0234     C   idim1,2.. Beginning and ending i-values to calculate
                0235     C   jdim1,2.. Beginning and ending j-values to calculate
                0236     C   bi....... Index of process number in x-direction
                0237     C   bj....... Index of process number in x-direction
                0238     C   windphy.. [im,jm,lmphy] Magnitude of the wind on the output levels
                0239     C   pephy.... [im,jm,lmphy+1] Pressures at bottom edges of output levels
                0240     C   lmphy.... Vertical  Dimension of Output
                0241     C   nlperdyn. [im,jm,lmdyn] Highest Physics level in each dynamics level
                0242     C   flg...... Flag to indicate field type (0 for T or Q, 1 for U or V)
                0243     C
                0244     C Output:
                0245     C   qphy..... [im,jm,lmphy] Quantity at output grid (physics grid)
                0246     C
                0247     C Notes:
                0248     C   1) This algorithm assumes that the output (physics) grid levels
                0249     C      fit exactly into the input (dynamics) grid levels
                0250     C***********************************************************************
                0251 
                0252 And similarly, gridalt contains subroutine phys2dyn.
                0253 
9ce7d74115 Jeff*0254 .. _gridalt_diagnostics:
                0255 
8679f9097b Jeff*0256 Gridalt Diagnostics
                0257 +++++++++++++++++++
                0258 
                0259 ::
                0260 
                0261 
                0262     ------------------------------------------------------------------------
                0263     <-Name->|Levs|<-parsing code->|<--  Units   -->|<- Tile (max=80c) 
                0264     ------------------------------------------------------------------------
                0265     DPPHYS  | 20 |SM      ML      |Pascal          |Pressure Thickness of Layers on Fizhi Grid
                0266 
                0267 Dos and donts
                0268 +++++++++++++
                0269 
                0270 Gridalt Reference
                0271 +++++++++++++++++
                0272 
                0273 Experiments and tutorials that use gridalt
                0274 ++++++++++++++++++++++++++++++++++++++++++
                0275 
bf89a37abc Phob*0276 -  Fizhi experiment, in :filelink:`verification/fizhi-cs-32x32x10` verification directory
8679f9097b Jeff*0277 
                0278