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