C $Header: /u/gcmpack/MITgcm/model/src/do_gterm_blocking_exchanges.F,v 1.17 2005/04/15 14:06:15 jmc Exp $
C $Name:  $

#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"

CBOP
C     !ROUTINE: DO_GTERM_BLOCKING_EXCHANGES
C     !INTERFACE:
      SUBROUTINE DO_GTERM_BLOCKING_EXCHANGES(myThid)
C     !DESCRIPTION: \bv
C     *==========================================================*
C     | SUBROUTINE DO_GTERM_BLOCKING_EXCHANGES                    
C     | o Controlling routine for exchanging edge info.           
C     *==========================================================*
C     | One key trick used in UV us that we over-compute and      
C     | arrange our time-stepping loop so that we only need one   
C     | edge exchange for the explicit code per timestep.         
C     *==========================================================*
C     \ev
C     !USES:
      IMPLICIT NONE
C     == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "DYNVARS.h"

C     !INPUT/OUTPUT PARAMETERS:
C     == Routine arguments ==
C     myThid - Thread number for this instance of the routine.
      INTEGER myThid
CEOP

c     _EXCH_XYZ_R8( Gu , myThid )
c     _EXCH_XYZ_R8( Gv , myThid )
c     _EXCH_XYZ_R8( Gt , myThid )
c     _EXCH_XYZ_R8( Gs , myThid )
#ifdef ALLOW_ADAMSBASHFORTH_3
C_jmc: requires to pass "myIter" as argument !!!
C_jmc: leave it commented since this S/R is never called
c     m1 = 1 + mod(myIter+1,2)
c     CALL EXCH_UV_XYZ_RL(guNm(1-Olx,1-Oly,1,1,1,m1),
c    &                    gvNm(1-Olx,1-Oly,1,1,1,m1),.TRUE.,myThid)
c     _EXCH_XYZ_R8( gtNm(1-Olx,1-Oly,1,1,1,m1), myThid )
c     _EXCH_XYZ_R8( gsNm(1-Olx,1-Oly,1,1,1,m1), myThid )
#else /* ALLOW_ADAMSBASHFORTH_3 */
      CALL EXCH_UV_XYZ_RL(guNm1,gvNm1,.TRUE.,myThid)
c     _EXCH_XYZ_R8( guNm1 , myThid )
c     _EXCH_XYZ_R8( gvNm1 , myThid )
      _EXCH_XYZ_R8( gtNm1 , myThid )
      _EXCH_XYZ_R8( gsNm1 , myThid )
#endif /* ALLOW_ADAMSBASHFORTH_3 */
c     _EXCH_XYZ_R8( uVel , myThid )
c     _EXCH_XYZ_R8( vVel , myThid )
c     _EXCH_XYZ_R8( theta , myThid )
c     _EXCH_XYZ_R8( salt , myThid )

#ifdef ALLOW_PTRACERS
ceh3 add an IF ( usePTRACERS ) THEN
      CALL PTRACERS_GTERM_BLOCKING_EXCH(myThid)
#endif /* ALLOW PTRACERS */

      RETURN
      END