C $Header: /u/gcmpack/MITgcm/pkg/matrix/matrix_write_tendency.F,v 1.5 2012/04/02 21:26:12 jmc Exp $ C $Name: $ #include "MATRIX_OPTIONS.h" C !ROUTINE MATRIX_WRITE_TENDENCY.F C This routine writes both the explicit and implicit matrices C to file. SUBROUTINE MATRIX_WRITE_TENDENCY( myTime, myIter, myThid ) IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "PTRACERS_SIZE.h" #include "PTRACERS_PARAMS.h" #include "MATRIX.h" _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_MATRIX LOGICAL DIFFERENT_MULTIPLE EXTERNAL INTEGER bi,bj,i,j,k,iTracer,iRec CHARACTER*(MAX_LEN_FNAM) suff CHARACTER*(MAX_LEN_MBUF) msgBuf _RL recipImpMatrixCounter, recipExpDeltaTtracer C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( DIFFERENT_MULTIPLE(expMatrixWriteTime,myTime,deltaTClock) & ) THEN bj=myByLo(myThid) bi=myBxLo(myThid) recipExpDeltaTtracer = expMatrixCounter(bi,bj)*dTtracerLev(1) recipExpDeltaTtracer = 1. _d 0 / recipExpDeltaTtracer iRec = expMatrixWriteCount DO iTracer=1,PTRACERS_numInUse DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo (myThid),myBxHi(myThid) 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) & *recipExpDeltaTtracer ENDDO ENDDO ENDDO ENDDO ENDDO _BEGIN_MASTER(myThid) bj=myByLo(myThid) bi=myBxLo(myThid) WRITE(msgBuf,'(A,I4,2I6)') 'Writing explicit matrix :', & iTracer, expMatrixWriteCount, expMatrixCounter(bi,bj) CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) _END_MASTER(myThid) WRITE(suff,'(A9,I2.2)') 'MATRIXEXP',iTracer CALL WRITE_REC_XYZ_RL(suff, & MATRIX(1-OLx,1-OLy,1,1,1,iTracer,1),iRec,myIter,myThid) ENDDO _BARRIER _BEGIN_MASTER(myThid) expMatrixWriteCount = expMatrixWriteCount + 1 _END_MASTER(myThid) C Reset explicit matrix DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo (myThid),myBxHi(myThid) expMatrixCounter(bi,bj) = 0 ENDDO ENDDO DO iTracer=1,PTRACERS_numInUse DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo (myThid),myBxHi(myThid) DO k=1,Nr DO j=1-OLy, sNy+OLy DO i=1-OLx, sNx+OLx MATRIX(i,j,k,bi,bj,iTracer,1) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO ENDDO ENDDO ENDIF IF ( DIFFERENT_MULTIPLE(impMatrixWriteTime,myTime,deltaTClock) & ) THEN bj=myByLo(myThid) bi=myBxLo(myThid) recipImpMatrixCounter = impMatrixCounter(bi,bj) recipImpMatrixCounter = 1. _d 0 / recipImpMatrixCounter iRec = impMatrixWriteCount DO iTracer=1,PTRACERS_numInUse DO bj=myByLo(myThid), myByHi (myThid) DO bi=myBxLo (myThid), myBxHi (myThid) 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) & *recipImpMatrixCounter ENDDO ENDDO ENDDO ENDDO ENDDO _BEGIN_MASTER(myThid) bj=myByLo(myThid) bi=myBxLo(myThid) WRITE(msgBuf,'(A,I4,2I6)') 'Writing implicit matrix :', & iTracer, impMatrixWriteCount, impMatrixCounter(bi,bj) CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) _END_MASTER(myThid) WRITE(suff,'(A9,I2.2)') 'MATRIXIMP',iTracer CALL WRITE_REC_XYZ_RL(suff, & MATRIX(1-OLx,1-OLy,1,1,1,iTracer,2),iRec,myIter,myThid) ENDDO _BARRIER _BEGIN_MASTER(myThid) impMatrixWriteCount = impMatrixWriteCount + 1 _END_MASTER(myThid) C Reset implicit matrix DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo (myThid),myBxHi(myThid) impMatrixCounter(bi,bj) = 0 ENDDO ENDDO DO iTracer=1,PTRACERS_numInUse DO bj=myByLo(myThid), myByHi (myThid) DO bi=myBxLo (myThid), myBxHi (myThid) DO k=1,Nr DO j=1-OLy, sNy+OLy DO i=1-OLx, sNx+OLx MATRIX(i,j,k,bi,bj,iTracer,2) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_MATRIX */ RETURN END