Back to home page

darwin3

 
 

    


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
                

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 40.

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

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 46.

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

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 62.

0061 resolution ’physics’ grid as well as on the coarser resolution

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 63.

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

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 104.

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

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 107.

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