where is the bathymetry, and the basal elevation is equal to . If ice is floating, then the assumption of hydrostasy and constant density gives
where is a representative ocean density, and . Again by hydrostasy, floation is assumed wherever
is satisfied. Floatation criteria is stored in float_frac_streamice, equal to 1 where ice is at floatation. The strain rates are generalized to the case of orthogonal curvilinear coordinates, to include the "metric" terms that arise when casting the equations of motion on a sphere or projection on to a sphere (see pkg/SEAICE, 6.6.2.4.8 of the MITgcm documentation). Thus has the form arising from Glen's law
though the form is slightly different if a hybrid formulation is used. Whether is nonzero depends on whether the floatation condition is satisfied. Currently this is determined simply on an instantaneous cell-by-cell basis (unless subgrid interpolation is used), as is the surface elevation , but possibly this should be rethought if the effects of tides are to be considered. has the form Again, the form is slightly different if a hybrid formulation is to be used. The scalar term multiplying is referred to as below. The momentum equations are solved together with appropriate boundary conditions, discussed below. In the case of a calving front boundary condition (CFBC), the boundary condition has the following form: Here is the normal to the boundary, and is the bathymetry.
6.6.4.2.1 Hybrid SIA-SSA stress balanceThe SSA does not take vertical shear stress or strain rates (e.g., , ) into account. Although there are other terms in the stress tensor, studies have found that in all but a few cases, vertical shear and longitudinal stresses (represented by the SSA) are sufficient to represent glaciological flow. streamice can allow for representation of vertical shear, although the approximation is made that longitudinal stresses are depth-independent. The stress balance is referred to as "hybrid" because it is a joining of the SSA and the Shallow Ice Approximation (SIA), which only accounts only for vertical shear. Such hybrid formulations have been shown to be valid over a larger range of conditions than SSA (Schoof and Hindmarsh 2010, Goldberg 2011). In the hybrid formulation, and , the depth-averaged and velocities, replace and in (6.88), (6.89), and (6.90), and gradients such as are replaced by . Viscosity becomes
In the formulation for , , the horizontal velocity at is used instead. The details are given in Goldberg (2011).
6.6.4.3 Numerical Scheme
6.6.4.3.1 Stress/momentum equationsThe stress balance is solved for velocities using a very straightforward, structured-grid finite element method. Generally a finite element method is used to deal with irregularly shaped domains, or to deal with complicated boundary conditions; in this case it is the latter, as explained below. (NOTE: this is not meant as a finite element tutorial, and various mathematical objects are defined nonrigorously. It is simply meant as an overview of the numerical scheme used.) In this method, the numerical velocities and (or , if a hybrid formulation) have a bilinear shape within each cell. For instance, referring to Fig. 6.6.4.3, at a point ( ) within cell ( ), and assuming a rectangular mesh, the velocity would be given by
where
and e.g. is the nodal value of at the top right corner of the cell. In finite element terms, the functions multiplying a nodal value of are the shape functions corresponding to that node, e.g. in cell ( ). Note that is defined at the center of each cell. In the code velocities are U_STREAMICE and V_STREAMICE, and thickness is H_STREAMICE. If we take a vector-valued function which is in the ``solution space'' of ( ) (i.e. and are bilinear in each cell as defined above, and are zero where velocities are imposed), take the dot product with by (6.88,6.89), and integrate by parts over the domain , we get the weak form of the momentum equation: where is the part of the domain boundary where a calving front stress condition is imposed, and is the driving stress . Note that the boundary integral does not involve viscosity, or any velocity-dependent terms. This is the advantage of using a finite-element formulation: viscosity need not be represented at boundaries, and so no complicated one-sided derivative expressions need to be used. Let be the vector of all nodal values that determine . If we assume that and are independent of , then for any , the left hand side of (6.104) is a linear functional of , i.e. a linear operator that returns a scalar. We can choose and so that they are nonzero only at a single node; and we can evaluate (6.104) for each such and , giving a linearly independent set of equations for and . The left hand side of (6.104) for each and is evaluated in the subroutine STREAMICE_CG_ACTION() in the source file streamice_cg_functions.f. The right hand side is evaluated in STREAMICE_DRIVING_STRESS(). The latter is not a straightforward calculation, since the thickness and the surface are not expressed by piecewise bilinear functions, and is discussed below. STREAMICE_CG_ACTION() represents the action of a matrix on the vector represented by and STREAMICE_DRIVING_STRESS() gives the right hand side of a linear system of equations. This information is enough to solve the linear system, and this is done with the method of conjugate gradients, implemented (with simple Jacobi preconditioning) in STREAMICE_CG_SOLVE(). The full nonlinear system is solved in STREAMICE_VEL_SOLVE(). This subroutine evaluates driving stress and then calls a loop in which a sequence of linear systems is solved. After each linear solve, the viscosity (the array visc_streamice) and basal traction (tau_beta_eff_streamice) is updated from the new iterate of and . The iteration continues until a desired tolerance is reached or the maximum number of iterations is reached. Rather than calling STREAMICE_CG_ACTION() each iteration of the conjugate gradient, the sparse matrix can be constructed explicitly. This is done if STREAMICE_CONSTRUCT_MATRIX is #defined in STREAMICE_OPTIONS.h. This speeds up the solution because STREAMICE_CG_ACTION() contains a number of nested loops related to quadrature points and interactions between nodes of a cell. The driving stress is not as straightforward to deal with in the weak formulation, as and are considered constant in a cell. Furthermore, in the ice shelf the driving stress can be written as Among other things, this (along with equations 6.96 and 6.97) implies that for an unconfined shelf (one for which the only boundaries are a calving front and a grounding line), the stress state along the grounding line depends only on the location at depth of the grounding line. The numerical representation of velocities must respect this. Thus the driving stress contribution in the momentum equation at node is given as follows.
where
is the area of cell ( ) and is the width of the cell at its midpoint. Cases I, II, and III refer to the situations when (I) both cells ( ) and ( ) are in the domain, (II) only cell ( ) is in the domain, and (III) only cell ( ) is in the domain. (The fact that is being calculated means that the implied boundary is a calving stress boundary, as explained below.) The above expression gives the contribution from the cells above node ( ) (in the direction). A similar expression gives the contribution from cells ( ) and ( ), and corresponding expressions approximate driving stress in the momentum equation. In the ice shelf, the case I expressions give approximations for (6.105) which are discretely integrable; in grounded ice the expression need not be integrable, so any errors associated with varying grid metrics can be subsumed into the discretization error.
6.6.4.3.2 Orthogonal curvilinear coordinatesIf the grid is not rectangular, but given in orthogonal curvilinear coordinates, the evaluation of (6.104) is not exact, since the gradient of the basis functions are approximated, as we do not have complete knowledge of the coordinate system, only the grid metrics. Still, we consider nodal basis functions that are equal to 1 at a single node, and zero elsewhere in a cell. A cell ( ) has separation at the bottom and at the top (referred to as dxG(i,j) and dxG(i,j+1) in the code). So, for instance, for a cell given by , the -derivative of the basis function centered at ( ) is approximated by
where is the -coordinate of the quadrature point being used. (The code currently uses 2-point gauss quadrature to evaluate the integrals in (6.104); with a rectangular grid and cellwise-constant and , this is exact.) Basis function derivatives and quadrature weights are stored in Dphi and grid_jacq_streamice. Both are initialized in STREAMICE_INIT_PHI, called only once.
6.6.4.3.3 Boundary conditions and masksThe computational domain (which may be smaller than the array/grid as defined by SIZE.h and GRID.h) is determined by a number of mask arrays within the STREAMICE package. They are
Essentially controls the domain; it is specified at initialization and does not change unless calving front advance is allowed. and are defined at initialization as well. Masks are either initialized through binary files or through the text file data.streamice (see the streamice tutorial) The values of and determine which nodal values of and are involved in the solve for velocities. Before each call to STREAMICE_VEL_SOLVE(), and are re-initialized. Values are only relevant if they border a cell where . Furthermore, if a cell face is a ``no-slip'' face, both and are set to zero at the face's nodal endpoints. If the face is a Dirichlet boundary, both nodal endpoints are set to 3. If on the boundary of a cell, i.e. it is a no-stress boundary, then is set to 1 at both endpoints while is set to zero (i.e. no normal flow). If the face is a flux boundary, velocities are set to zero (see ???). For a calving stress front, and are 1: the nodes represent active degrees of freedom. With and appropriately initialized, STREAMICE_VEL_SOLVE can proceed rather generally. Contributions to (6.104) are only evaluated if in a given cell, and a given nodal basis function is only considered if or at that node.
6.6.4.3.4 Thickness evolution(6.90) is solved in the subroutine STREAMICE_ADVECT_THICKNESS, similarly to the advection routines in MITgcm. Mass fluxes are evaluated, first in the -direction. This is done in the generic subroutine STREAMICE_ADV_FLUX_FL_X. Flux velocity in the direction at face ( ) are generated by averaging and . Assuming the flux velocity is positive, if and are equal to 1, then flux thickness, i.e. the interpolation of at face ( ), is through a minmod limiter as in the generic_advdiff package. If these values are not available, then a zero-order upwind flux is used. The exception is when STREAMICE_ufacemask(i,j) is equal to 4; then u_flux_bdry_SI(i,j) is used for the flux. Fluxes are then differenced to update in cells that are active ( ); a similar procedure follows for the direction.
6.6.4.3.5 Ice front advanceFlux out of the domain across Dirichlet boundaries is ignored, and flux at no-flow or no-stress boundaries is zero. However, fluxes that cross calving boundaries are stored, and if STREAMICE_move_front=.true., then STREAMICE_ADV_FRONT is called after all cells with have their thickness updated. In this subroutine, cells with or with nonzero fluxes entering their boundaries are processed. The algorithm is based on Albrecht (2011). In this scheme, if cell ( ) fits the criteria, a reference thickness is found, defined as an average over the thickness of all neighboring cells with that are contributing mass to ( ). The total mass input over the time step to ( ) is calculated as . This is added to the volume of ice already in the cell, which is nonzero only if at the beginning of the time step, and is equal to
(If is not equal to 1, then has not yet been updated in the current time step.) is stored in the array area_shelf_streamice. The total volume, , is then equal to . Next an effective thickness
is found. If (but nonzero) then
If calve_to_mask=.true., this sets a limit to how far the front can advance, even if advance is allowed. The front will not advance into cells where the array calve_mask is not equal to 1. This mask must be set through a binary input file. No calving parameterisation is implemented in STREAMICE. However, front advancement is a precursor for such a development to be added.
6.6.4.3.6 Surface/basal mass balanceAfter updating thickness in fully- and partially-covered cells, surface and basal mass balances are applied to nonempty cells. Currently surface mass balance is a uniform value, set through the parameter streamice_adot_uniform. Basal melt rates are stored in the array BDOT_streamice, but are multiplied through by float_frac_streamice before being applied.
Next: 6.7 Packages Related to Up: 6.6 Sea Ice Packages Previous: 6.6.3 SHELFICE Package Contents mitgcm-support@mitgcm.org |
|
|
|
|