C $Header: /u/gcmpack/MITgcm/pkg/matrix/matrix_store_tendency.F,v 1.6 2014/08/11 20:29:06 jmc Exp $
C $Name: $
#include "MATRIX_OPTIONS.h"
C-- File matrix_store_tendency.F:
C Contents
C o MATRIX_STORE_TENDENCY_EXP
C o MATRIX_STORE_TENDENCY_IMP
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: MATRIX_STORE_TENDENCY_EXP
C !INTERFACE: ==========================================================
SUBROUTINE MATRIX_STORE_TENDENCY_EXP(
I iTracer, bi, bj,
U tracNew,
I myTime, myIter, myThid )
C !DESCRIPTION:
C This routine accumalates the explicit tendency matrix. Note that
C on entry gPtr is the tracer field after explicit advection-
C diffusion. On exit, gPtr is set to the initial tracer field for
C the next step (implicit matrix calculation).
C !USES: ===============================================================
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS_PARAMS.h"
#include "MATRIX.h"
C !INPUT/OUTPUT PARAMETERS: ============================================
C tracNew :: updated tracer field (after adding explicit contributions)
INTEGER iTracer
INTEGER bi, bj
_RL myTime
_RL tracNew(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
INTEGER myIter
INTEGER myThid
#ifdef ALLOW_MATRIX
C !LOCAL VARIABLES: ====================================================
INTEGER i,j,k
CEOP
DO k=1,Nr
DO j=1-OLy, sNy+OLy
DO i=1-OLx, sNx+OLx
MATRIX(i,j,k,bi,bj,iTracer,1) = MATRIX(i,j,k,bi,bj,iTracer,1)
& + ( tracNew(i,j,k) - PTRACERS_initial(i,j,k,bi,bj,iTracer) )
tracNew(i,j,k) = PTRACERS_initial(i,j,k,bi,bj,iTracer)
ENDDO
ENDDO
ENDDO
C- Increment counter when processing the last pTracer
IF ( iTracer.EQ.PTRACERS_numInUse ) THEN
expMatrixCounter(bi,bj) = expMatrixCounter(bi,bj) + 1
ENDIF
#endif /* ALLOW_MATRIX */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: MATRIX_STORE_TENDENCY_IMP
C !INTERFACE: ==========================================================
SUBROUTINE MATRIX_STORE_TENDENCY_IMP(
I bi, bj, myTime, myIter, myThid )
C !DESCRIPTION:
C This routine accumalates the implicit update matrix. Note that on
C entry PTR is the tracer field after implicit advection-
C diffusion. On exit, PTR is set to the initial tracer field.
C !USES: ===============================================================
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS_PARAMS.h"
#include "PTRACERS_FIELDS.h"
#include "MATRIX.h"
C !INPUT/OUTPUT PARAMETERS: ============================================
INTEGER bi, bj
_RL myTime
INTEGER myIter
INTEGER myThid
#ifdef ALLOW_MATRIX
C !LOCAL VARIABLES: ====================================================
INTEGER iTracer
INTEGER i,j,k
CEOP
DO iTracer=1,PTRACERS_numInUse
DO k=1,Nr
DO j=1-OLy, sNy+OLy
DO i=1-OLx, sNx+OLx
MATRIX(i,j,k,bi,bj,iTracer,2) =
& MATRIX(i,j,k,bi,bj,iTracer,2)
& + pTracer(i,j,k,bi,bj,iTracer)
pTracer(i,j,k,bi,bj,iTracer)=
& PTRACERS_initial(i,j,k,bi,bj,iTracer)
ENDDO
ENDDO
ENDDO
ENDDO
impMatrixCounter(bi,bj) = impMatrixCounter(bi,bj) + 1
#endif /* ALLOW_MATRIX */
RETURN
END