[MITgcm-support] Higher-Order Boundary condition

Baylor Fox-Kemper baylor at MIT.EDU
Fri Jun 23 15:37:28 EDT 2006


Hi Joe (and mitgcm-support),
Well, I followed the adage, 'Use the force, read the source!', and  
have discovered the following boundary conditions are supposed to be  
applied to the momentum equations:

First, without no_slip_side, we find the following situation:

  Vector Invariant Form:

harmonic drag terms:
uD2 = viscAhD*cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj) -  
viscAhZ*_recip_hFacW(i,j,k,bi,bj)*( Zip-Zij )*recip_DYG(i,j,bi,bj)
vD2 = viscAhZ*_recip_hFacS(i,j,k,bi,bj)*cosFacV(j,bi,bj)*( Zpj-Zij ) 
*recip_DXG(i,j,bi,bj)+viscAhD*( Dij-Dim )*recip_DYC(i,j,bi,bj)

where Dij is the Del . U_h and Zij is the Del x U_h.

Zij is set to zero in the boundaries, and down-weighted for partial  
cells (it is volume-weighted by hfacZ).  That is, for vertical walls,  
slip conditions are assumed as the vorticity is set to zero on the  
boundary.

Dij may or may not be down-weighted for partial cells (depending on  
the flag hDivScheme), but since the normal velocity is always zero at  
a boundary, it is not necessary to specify anything else about the  
divergence.

The magnitude of the friction has effects from the cosine factors,  
which depend on the latitude and the flag isotropic_cos_scaling, but  
the boundary condition is unaffected (I think).

biharmonic:
uD4=viscA4D*cosFacU(j,bi,bj)*( Dij-Dmj )*recip_DXC(i,j,bi,bj)- 
viscA4Z*_recip_hFacW(i,j,k,bi,bj)*( Zip-Zij )*recip_DYG(i,j,bi,bj) )

This time, though Dij is Del . Del^2 U_h and Zij is Del x Del^2 U_h.

The same boundary conditions are asserted for Del^2 U_h as for U_h.   
This is true whether the viscosity is constant or variable (e.g.,  
Smagorinsky).

Thus, the boundary conditions for no_slip_side=no_slip_bottom=.false.:

Del x U_h=0 and Del x Del^2 U_h=0.  These are called **slip** and  
**superslip** by Pedlosky.

It would be relatively easy to implement hyperslip, but this  
currently isn't done.

  Flux Form:

xViscFluxV(i,j) =_dyU(i,j,bi,bj)*drF(k)*hFacZ(i,j)*(-viscAh_Z(i,j)* 
(vFld(i,j)-vFld(i-1,j))*cosFacV(J,bi,bj)+viscA4_Z(i,j)*(del2v(i,j)- 
del2v(i-1,j))

yViscFluxU(i,j) =_dxV(i,j,bi,bj)*drF(k)*hFacZ(i,j)*(-viscAh_Z(i,j)* 
(uFld(i,j)-uFld(i,j-1))+viscA4_Z(i,j)*(del2u(i,j)-del2u(i,j-1))

Now, the viscous momentum flux is down-weighted and set to zero at  
the boundaries (where hFacZ is zero).

So, we have the same situation now, except implemented a bit  
differently, as instead of making the viscous drag (flux divergence)  
sense the boundaries by setting the vorticity and Del^2 vorticity to  
zero on the boundary, we set the flux through the boundary to zero  
which is later differentiated.  Again, though, these are equivalent  
to **slip** and **superslip**.

Without no_slip_bottom, Bottom boundary conditions are set the same  
way as in the fluxform above (whether or not the vector-invariant  
equations are used, which is a bit of a cheat, because this means the  
boundary conditions are not really 'vector-invariant', since they are  
implemented differently in z than in x and y).  Also, there is no  
biharmonic vertical viscosity, so no higher-order boundary conditions  
are possible.

When no_slip_side is used, a side drag is applied, whether for  
fluxform or vector invariant (no-slip is not implemented as a flux).

vDragTerms(i,j) =-_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)*recip_rAs 
(i,j,bi,bj)*( hFacZClosedW*_dyU( i ,j,bi,bj)*_recip_dxV( i ,j,bi,bj)
      &         *( viscAh_Z(i  ,j)*vFld(i,j)*cosFacV(j,bi,bj)-viscA4_Z 
(i+1,j)*del2v(i,j)*cosFacV(j,bi,bj) ))*drF(k)*2
uDragTerms(i,j) =-_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)*recip_rAw 
(i,j,bi,bj)*( hFacZClosedS*_dxV(i, j ,bi,bj)*_recip_dyU(i, j ,bi,bj)
      &         *( viscAh_Z(i,j  )*uFld(i,j)-viscA4_Z(i,j  )*del2u 
(i,j) ) )*drF(k)*2

So, when the cell is closed to the west, a drag is applied on v,  
which is 2*(Ah V-A4 Del^2 V)/dxV, which is equivalent to setting V to  
zero on the cell face to the west to zero (the 2 accounts for the  
fact that V is in the middle of the cell in x, but the east and west  
coasts are on the cell face in x).  My interpretation of this is that  
the boundary conditions are V=0 and Del^2 V=0 on the coasts, which is  
is no-slip and d^2V/dx^2=0 (super-no-slip?).

When no_slip_bottom is used, a bottom drag is applied at the bottom,  
but since there is no biharmonic vertical viscosity, only no-slip is  
applied.


So, in summary, it looks like the boundary conditions are either

1) slip (V_x=0) and super-slip (V_xxx=0) with no_slip_sides=.false.

or

2) no-slip (V=0) and super-no-slip (V_xx=0) with no_slip_sides=.true.

The bottom boundary conditions are either slip or no-slip.

It seems like these continue to hold even when the more obscure flags  
(ISOTROPIC_COS_SCALING+COSINEMETH_III) are used, which had the  
possibility of changing to something like hyperslip depending on how  
they were done.

Cheers,
    -Baylor



More information about the MITgcm-support mailing list