[MITgcm-support] Re: doubly-reentrant

Baylor Fox-Kemper baylor at MIT.EDU
Thu Mar 31 10:20:25 EST 2005

Yes Joe (and mitgcm-support for posterity),
   That's true.  As I understand the finite volume part of it, you 
figure the flux through every face of a volume centered on the 
(temperature, salt, divergence) point.

First, you also don't change tracer inside topography:  in 
gad_advection, when you figure the flux divergence you get lines like:

      &       _recip_hFacC(i,j,k,bi,bj)*recip_drF(k)
      &       *recip_rA(i,j,bi,bj)
      &       *( af(i+1,j)-af(i,j)
      &         -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j))
      &        )

The hFacC (from ini_masks_etc.F) here gives you the topography, i.e., 
in a wall you don't change temp.  But, you might still have a flux 
through topography...

There is a mask hfacW that is 0 for blocked western cell faces, 1 for 
open cell faces, and a fraction for lopped cell faces.  Similarly hfacS 
is for southern faces...

You then use this factor to calculate cell face area (which you do 
every timestep in calc_common_factors, called from thermodynamics.F to 
be sure that the free surface is treated properly):

C--   Calculate tracer cell face open areas
       DO j=jMin,jMax
        DO i=iMin,iMax
         xA(i,j) = _dyG(i,j,bi,bj)
      &   *drF(k)*_hFacW(i,j,k,bi,bj)
         yA(i,j) = _dxG(i,j,bi,bj)
      &   *drF(k)*_hFacS(i,j,k,bi,bj)

So, now xa has info about the topography built in.

For the advective fluxes, you also make sure topography is built into 
uTrans and vTrans (also from calc_common_factors):

C--   Calculate velocity field "volume transports" through
C--   tracer cell faces.
       DO j=jMin,jMax
        DO i=iMin,iMax
         uTrans(i,j) = uVel(i,j,k,bi,bj)*xA(i,j)
         vTrans(i,j) = vVel(i,j,k,bi,bj)*yA(i,j)

So for diffusive fluxes, you find in gad_diff_x that xA comes in to set 
the b.c.:

       DO j=1-Oly,sNy+Oly
        DO i=1-Olx+1,sNx+Olx
         dfx(i,j) = -diffKh*xA(i,j)
      &      *_recip_dxC(i,j,bi,bj)
      &      *(Tracer(i,j)-Tracer(i-1,j))
      &      *CosFacU(j,bi,bj)

And for all of the various flux limiting advection schemes 
(gad_*_adv_*.F) you find that the fluxes are always proportional in the 
end to a uFlux which already has the b.c. built in...or that there is 
an xA to make it work.

Similar detective work looking for hFacUp will tell you when vertical 
fluxes are blocked by topography...


On Mar 31, 2005, at 8:51 AM, Joseph LaCasce wrote:

> Hey Baylor---
> What does that mean, exactly? If the boundary lies, say, in the
> middle of a channel, you still have to impose no flux on either
> side of it, don't you?
> j
> -- 
> J.H. LaCasce, Phone: +47 22 96 33 11; FAX: +47 22 69 63 55
> Norwegian Meteorological Institute, P.O. Box 43 Blindern, 0313 Oslo
> or (UPS) Niels Henrik Abelsvei 40, 0371 Oslo, Norway
> http://met.no/english/r_and_d_activities/people/josephhl.html

More information about the MITgcm-support mailing list