Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:41:36 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
2fa42a6013 Alis*0001 #include "KPP_OPTIONS.h"
141e734c73 Jean*0002 #ifdef ALLOW_GMREDI
                0003 # include "GMREDI_OPTIONS.h"
                0004 #endif
3b6d2d02e0 Mart*0005 #undef  MULTIPLE_RECORD_KPP_STATE_FILES
8b6db0f7a7 Jean*0006 
3b6d2d02e0 Mart*0007 CBOP
cd56dd0428 Jean*0008 C     !ROUTINE: KPP_OUTPUT
c9c3d7103f Ed H*0009 
3b6d2d02e0 Mart*0010 C     !INTERFACE:
cd56dd0428 Jean*0011       SUBROUTINE KPP_OUTPUT( myTime, myIter, myThid )
c9c3d7103f Ed H*0012 
cd56dd0428 Jean*0013 C     !DESCRIPTION:
                0014 C     Create the KPP diagnostic output.
c9c3d7103f Ed H*0015 C
                0016 C     The following CPP flag (MULTIPLE_RECORD_KPP_STATE_FILES) is
                0017 C     #define/#undefed here since it is specific to this routine and
                0018 C     very user-preference specific.
cd56dd0428 Jean*0019 C
c9c3d7103f Ed H*0020 C     If #undefed (default) the state files are written as in all
                0021 C     versions prior to checkpoint32, where a file is created per
                0022 C     variable, per time and per tile. This *has* to be the default
                0023 C     because most users use this mode and all utilities and scripts
                0024 C     (diagnostic) assume this form.  It is also robust, as explained
                0025 C     below.
cd56dd0428 Jean*0026 C
c9c3d7103f Ed H*0027 C     If #defined, subsequent snap-shots are written as records in the
                0028 C     same file (no iteration number in filenames).
                0029 C
                0030 C     Advantages:
                0031 C     - fewer files
                0032 C     - for small problems, is easy to copy the output around
                0033 C     Disadvantages:
                0034 C     - breaks a lot of diagnostic scripts
                0035 C     - for large or long problems this creates huge files
                0036 C     - is an unexpected, unsolicited change in behaviour which came
                0037 C     as a surprise (in c32) and inconvenience to several users
                0038 C     - can not accomodate changing the frequency of output
                0039 C     after a pickup (this is trivial in previous method
                0040 C     but needs new code and parameters in this new method)
3b6d2d02e0 Mart*0041 
ef080e1d37 Dimi*0042 C     !USES:
2fa42a6013 Alis*0043       IMPLICIT NONE
                0044 #include "SIZE.h"
                0045 #include "EEPARAMS.h"
                0046 #include "PARAMS.h"
                0047 #include "KPP.h"
                0048 #include "KPP_PARAMS.h"
cd56dd0428 Jean*0049 #include "KPP_TAVE.h"
141e734c73 Jean*0050 #ifdef ALLOW_GMREDI
                0051 # include "GMREDI.h"
                0052 #endif
                0053 #ifdef ALLOW_MNC
                0054 # include "MNC_PARAMS.h"
                0055 #endif
02f4da180f Oliv*0056 #ifdef ALLOW_OFFLINE
                0057 # include "OFFLINE_SWITCH.h"
                0058 #endif
2fa42a6013 Alis*0059 
3b6d2d02e0 Mart*0060 C     !INPUT/OUTPUT PARAMETERS:
cd56dd0428 Jean*0061 C     myTime :: my time in simulation ( s )
                0062 C     myIter :: my Iteration number
                0063 C     myThid :: my Thread Id number
fc64655a31 Dimi*0064       _RL     myTime
2fa42a6013 Alis*0065       INTEGER myIter
                0066       INTEGER myThid
                0067 
                0068 #ifdef ALLOW_KPP
                0069 
8b6db0f7a7 Jean*0070 C     !FUNCTIONS:
94a46dfe0d Jean*0071       LOGICAL  DIFFERENT_MULTIPLE
                0072       EXTERNAL DIFFERENT_MULTIPLE
141e734c73 Jean*0073 #ifdef ALLOW_DIAGNOSTICS
                0074       LOGICAL  DIAGNOSTICS_IS_ON
                0075       EXTERNAL DIAGNOSTICS_IS_ON
                0076 #endif
8b6db0f7a7 Jean*0077 
                0078 C     !LOCAL VARIABLES:
141e734c73 Jean*0079 C     kpp_drctrec  :: next record to dump for KPP files
                0080       INTEGER kpp_drctrec
                0081       COMMON / KPP_RECORDNUM1 / kpp_drctrec
                0082 C     local variable:
df5a9764ba Jean*0083       CHARACTER*(10) suff
141e734c73 Jean*0084 #if (defined ALLOW_TIMEAVE) || (defined ALLOW_DIAGNOSTICS)
8b6db0f7a7 Jean*0085       INTEGER bi, bj
141e734c73 Jean*0086       INTEGER i, j, k
                0087       _RL tmpFac
                0088 #endif
                0089 #ifdef ALLOW_TIMEAVE
956c0a5824 Patr*0090       _RL DDTT
fc64655a31 Dimi*0091       LOGICAL dumpFiles
8b6db0f7a7 Jean*0092 #endif
141e734c73 Jean*0093 #ifdef ALLOW_DIAGNOSTICS
                0094       _RL tmpLoc(1:sNx,1:sNy,Nr)
                0095 #endif
8b6db0f7a7 Jean*0096 #ifdef ALLOW_MNC
b22b541fe9 Ed H*0097       CHARACTER*(1) pf
8b6db0f7a7 Jean*0098 #endif
ef080e1d37 Dimi*0099 CEOP
2fa42a6013 Alis*0100 
8b6db0f7a7 Jean*0101 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0102 
02f4da180f Oliv*0103 #ifdef ALLOW_OFFLINE
                0104       IF ( .NOT.(useOffLine.AND.offlineLoadKPP) ) THEN
                0105 #else
                0106       IF ( .TRUE. ) THEN
                0107 #endif
                0108 
8b6db0f7a7 Jean*0109 C     Initialize record numbers in KPP_TAVE
                0110       IF ( myIter.EQ.nIter0 ) THEN
                0111         _BEGIN_MASTER( myThid )
                0112         kpp_drctrec = 1
                0113 #ifdef ALLOW_TIMEAVE
                0114         kpp_drctrecTave = 1
                0115 #endif
                0116         _END_MASTER( myThid )
                0117         _BARRIER
b22b541fe9 Ed H*0118       ENDIF
                0119 
2fa42a6013 Alis*0120 C----------------------------------------------------------------
                0121 C     Dump snapshot of KPP variables.
                0122 
cd56dd0428 Jean*0123       IF ( myIter.NE.nIter0 .AND.
94a46dfe0d Jean*0124      &     DIFFERENT_MULTIPLE(kpp_dumpFreq,myTime,deltaTClock)
2fa42a6013 Alis*0125      &     ) THEN
cd56dd0428 Jean*0126 
c9c3d7103f Ed H*0127         IF (KPPwriteState .AND. snapshot_mdsio) THEN
3b6d2d02e0 Mart*0128 #ifdef MULTIPLE_RECORD_KPP_STATE_FILES
c9c3d7103f Ed H*0129 C         Write each snap-shot as a new record in one file per variable
108c31e771 Ed H*0130 C         - creates relatively few files but these files can become huge
                0131 C         NOTE: file size and number problems are *SOLVED* by MNC
c9c3d7103f Ed H*0132           CALL WRITE_REC_XYZ_RL('KPPviscAz',KPPviscAz,kpp_drctrec,
                0133      &         myIter,myThid)
                0134           CALL WRITE_REC_XYZ_RL('KPPdiffKzT',KPPdiffKzT,kpp_drctrec,
                0135      &         myIter,myThid)
                0136           CALL WRITE_REC_XYZ_RL('KPPdiffKzS',KPPdiffKzS,kpp_drctrec,
                0137      &         myIter,myThid)
                0138           CALL WRITE_REC_XYZ_RL('KPPghat',KPPghat,kpp_drctrec,
                0139      &         myIter,myThid)
                0140           CALL WRITE_REC_XY_RL('KPPhbl',KPPhbl,kpp_drctrec,
                0141      &         myIter,myThid)
cd56dd0428 Jean*0142 C--     Increment record counter
                0143           _BARRIER
                0144           _BEGIN_MASTER( myThid )
                0145           kpp_drctrec = kpp_drctrec + 1
                0146           _END_MASTER( myThid )
                0147           _BARRIER
3b6d2d02e0 Mart*0148 #else /* MULTIPLE_RECORD_KPP_STATE_FILES */
c9c3d7103f Ed H*0149 C         Write each snap-shot as a new file - creates many files but
108c31e771 Ed H*0150 C         for large configurations is easier to transfer
                0151 C         NOTE: file size and number problems are *SOLVED* by MNC
df5a9764ba Jean*0152           IF ( rwSuffixType.EQ.0 ) THEN
                0153             WRITE(suff,'(I10.10)') myIter
                0154           ELSE
                0155             CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
                0156           ENDIF
c9c3d7103f Ed H*0157           CALL WRITE_FLD_XYZ_RL('KPPviscAz.',suff,KPPviscAz,
                0158      &         myIter,myThid)
                0159           CALL WRITE_FLD_XYZ_RL('KPPdiffKzT.',suff,KPPdiffKzT,
                0160      &         myIter,myThid)
                0161           CALL WRITE_FLD_XYZ_RL('KPPdiffKzS.',suff,KPPdiffKzS,
                0162      &         myIter,myThid)
                0163           CALL WRITE_FLD_XYZ_RL('KPPghat.',suff,KPPghat,
                0164      &         myIter,myThid)
                0165           CALL WRITE_FLD_XY_RL('KPPhbl.',suff,KPPhbl,
                0166      &         myIter,myThid)
3b6d2d02e0 Mart*0167 #endif /* MULTIPLE_RECORD_KPP_STATE_FILES */
c9c3d7103f Ed H*0168         ENDIF
2fa42a6013 Alis*0169 
c9c3d7103f Ed H*0170 #ifdef ALLOW_MNC
6e5c016417 Patr*0171         IF (KPPwriteState .AND. useMNC .AND. snapshot_mnc) THEN
8b6db0f7a7 Jean*0172           IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
                0173             pf(1:1) = 'D'
                0174           ELSE
                0175             pf(1:1) = 'R'
                0176           ENDIF
c9c3d7103f Ed H*0177           CALL MNC_CW_SET_UDIM('kpp_state', -1, myThid)
987ff12cb6 Ed H*0178           CALL MNC_CW_RL_W_S('D','kpp_state',0,0,'T',myTime,myThid)
5220a1ccab Ed H*0179           CALL MNC_CW_SET_UDIM('kpp_state', 0, myThid)
987ff12cb6 Ed H*0180           CALL MNC_CW_I_W_S('I','kpp_state',0,0,'iter',myIter,myThid)
b22b541fe9 Ed H*0181           CALL MNC_CW_RL_W(pf,'kpp_state',0,0,
c9c3d7103f Ed H*0182      &         'KPPviscAz', KPPviscAz, myThid)
b22b541fe9 Ed H*0183           CALL MNC_CW_RL_W(pf,'kpp_state',0,0,
c9c3d7103f Ed H*0184      &         'KPPdiffKzT', KPPdiffKzT, myThid)
b22b541fe9 Ed H*0185           CALL MNC_CW_RL_W(pf,'kpp_state',0,0,
c9c3d7103f Ed H*0186      &         'KPPdiffKzS', KPPdiffKzS, myThid)
b22b541fe9 Ed H*0187           CALL MNC_CW_RL_W(pf,'kpp_state',0,0,
6e5c016417 Patr*0188      &         'KPPGHAT', KPPghat, myThid)
b22b541fe9 Ed H*0189           CALL MNC_CW_RL_W(pf,'kpp_state',0,0,
6e5c016417 Patr*0190      &         'KPPHBL', KPPhbl, myThid)
c9c3d7103f Ed H*0191         ENDIF
                0192 #endif /*  ALLOW_MNC  */
2fa42a6013 Alis*0193 
                0194       ENDIF
cd56dd0428 Jean*0195 
2fa42a6013 Alis*0196 C----------------------------------------------------------------
                0197 C     Do KPP time averaging.
                0198 
0ac82346d7 Jean*0199 #ifdef ALLOW_TIMEAVE
8b6db0f7a7 Jean*0200       IF ( KPP_taveFreq .GT. 0. _d 0 ) THEN
2fa42a6013 Alis*0201 
                0202 C     Initialize averages to zero
8b6db0f7a7 Jean*0203        IF ( myIter.EQ.nIter0 ) THEN
0e5cee27f0 Jean*0204 
c9c3d7103f Ed H*0205         DO bj = myByLo(myThid), myByHi(myThid)
                0206           DO bi = myBxLo(myThid), myBxHi(myThid)
                0207             CALL TIMEAVE_RESET(KPPviscAztave, Nr,bi,bj,myThid)
                0208             CALL TIMEAVE_RESET(KPPdiffKzTtave,Nr,bi,bj,myThid)
141e734c73 Jean*0209             CALL TIMEAVE_RESET(KPPghatKStave, Nr,bi,bj,myThid)
c9c3d7103f Ed H*0210             CALL TIMEAVE_RESET(KPPdiffKzStave,Nr,bi,bj,myThid)
                0211             CALL TIMEAVE_RESET(KPPhbltave,    1, bi,bj,myThid)
8b6db0f7a7 Jean*0212             KPP_timeAve(bi,bj) = 0.
c9c3d7103f Ed H*0213           ENDDO
                0214         ENDDO
0e5cee27f0 Jean*0215 
8b6db0f7a7 Jean*0216        ELSE
cd56dd0428 Jean*0217 
2fa42a6013 Alis*0218 C     Time Average KPP fields
df5a9764ba Jean*0219         DDTT = deltaTClock
141e734c73 Jean*0220         IF ( useGMRedi .AND. KPP_ghatUseTotalDiffus ) THEN
                0221           tmpFac = 1. _d 0
                0222         ELSE
                0223           tmpFac = 0. _d 0
                0224         ENDIF
8b6db0f7a7 Jean*0225         DO bj = myByLo(myThid), myByHi(myThid)
                0226          DO bi = myBxLo(myThid), myBxHi(myThid)
c9c3d7103f Ed H*0227           CALL TIMEAVE_CUMULATE(
                0228      &         KPPviscAztave, KPPviscAz, Nr,DDTT,bi,bj,myThid)
                0229           CALL TIMEAVE_CUMULATE(
                0230      &         KPPdiffKzTtave,KPPdiffKzT,Nr,DDTT,bi,bj,myThid)
                0231           CALL TIMEAVE_CUMULATE(
                0232      &         KPPdiffKzStave,KPPdiffKzS,Nr,DDTT,bi,bj,myThid)
141e734c73 Jean*0233           DO k=2,Nr
                0234            DO j=1,sNy
                0235             DO i=1,sNx
                0236               KPPghatKStave(i,j,k,bi,bj) = KPPghatKStave(i,j,k,bi,bj)
                0237      &          + ( KPPdiffKzS(i,j,k,bi,bj)
                0238 #ifdef ALLOW_GMREDI
                0239      &             +tmpFac*Kwz(i,j,k,bi,bj)
                0240 #endif
                0241      &            )*KPPghat(i,j,k-1,bi,bj)*DDTT
                0242             ENDDO
                0243            ENDDO
                0244           ENDDO
c9c3d7103f Ed H*0245           CALL TIMEAVE_CUMULATE(
                0246      &         KPPhbltave,    KPPhbl,    1, DDTT,bi,bj,myThid)
                0247 C         Keep record of how much time has been integrated over
8b6db0f7a7 Jean*0248           KPP_timeAve(bi,bj) = KPP_timeAve(bi,bj)+DDTT
                0249          ENDDO
c9c3d7103f Ed H*0250         ENDDO
0e5cee27f0 Jean*0251 
8b6db0f7a7 Jean*0252        ENDIF
cd56dd0428 Jean*0253 
c9c3d7103f Ed H*0254 C     Dump files and restart average computation if needed
8b6db0f7a7 Jean*0255        dumpFiles = .FALSE.
                0256        IF ( myIter .NE. nIter0 ) THEN
742cf4499c Jean*0257         dumpFiles =
                0258      &     DIFFERENT_MULTIPLE(KPP_taveFreq,myTime,deltaTClock)
fc64655a31 Dimi*0259 #ifdef ALLOW_CAL
742cf4499c Jean*0260         IF ( useCAL ) THEN
7a31080eb8 Jean*0261           CALL CAL_TIME2DUMP( zeroRL, KPP_taveFreq, deltaTClock,
742cf4499c Jean*0262      U                        dumpFiles,
                0263      I                        myTime, myIter, myThid )
                0264         ENDIF
fc64655a31 Dimi*0265 #endif
8b6db0f7a7 Jean*0266        ENDIF
fc64655a31 Dimi*0267 
8b6db0f7a7 Jean*0268        IF (dumpFiles) THEN
c9c3d7103f Ed H*0269 C       Normalize by integrated time
                0270         DO bj = myByLo(myThid), myByHi(myThid)
                0271           DO bi = myBxLo(myThid), myBxHi(myThid)
8b6db0f7a7 Jean*0272             CALL TIMEAVE_NORMALIZE( KPPviscAztave,
                0273      &                              KPP_timeAve, Nr, bi, bj, myThid )
                0274             CALL TIMEAVE_NORMALIZE( KPPdiffKzTtave,
                0275      &                              KPP_timeAve, Nr, bi, bj, myThid )
141e734c73 Jean*0276             CALL TIMEAVE_NORMALIZE( KPPghatKStave,
8b6db0f7a7 Jean*0277      &                              KPP_timeAve, Nr, bi, bj, myThid )
                0278             CALL TIMEAVE_NORMALIZE( KPPdiffKzStave,
                0279      &                              KPP_timeAve, Nr, bi, bj, myThid )
                0280             CALL TIMEAVE_NORMALIZE( KPPhbltave,
                0281      &                              KPP_timeAve, 1 , bi, bj, myThid )
c9c3d7103f Ed H*0282           ENDDO
                0283         ENDDO
cd56dd0428 Jean*0284 
108c31e771 Ed H*0285         IF (KPPwriteState .AND. timeave_mdsio) THEN
c9c3d7103f Ed H*0286 #ifdef MULTIPLE_RECORD_KPP_STATE_FILES
108c31e771 Ed H*0287 C         Write each tave output as a new record in one file per variable
c9c3d7103f Ed H*0288 C         - creates relatively few files but these files can become huge
108c31e771 Ed H*0289 C         NOTE: file size and number problems are *SOLVED* by MNC
141e734c73 Jean*0290           CALL WRITE_REC_XYZ_RL('KPPviscAz-T',KPPviscAztave,
c9c3d7103f Ed H*0291      &         kpp_drctrecTave,myIter,myThid)
141e734c73 Jean*0292           CALL WRITE_REC_XYZ_RL('KPPdiffKzT-T',KPPdiffKzTtave,
c9c3d7103f Ed H*0293      &         kpp_drctrecTave,myIter,myThid)
141e734c73 Jean*0294           CALL WRITE_REC_XYZ_RL('KPPdiffKzS-T',KPPdiffKzStave,
c9c3d7103f Ed H*0295      &         kpp_drctrecTave,myIter,myThid)
141e734c73 Jean*0296           CALL WRITE_REC_XYZ_RL('KPPghatKS-T',KPPghatKStave,
c9c3d7103f Ed H*0297      &         kpp_drctrecTave,myIter,myThid)
141e734c73 Jean*0298           CALL WRITE_REC_XY_RL('KPPhbl-T',KPPhbltave,
c9c3d7103f Ed H*0299      &         kpp_drctrecTave,myIter,myThid)
                0300 C--       Increment record counter
cd56dd0428 Jean*0301           _BARRIER
                0302           _BEGIN_MASTER( myThid )
c9c3d7103f Ed H*0303           kpp_drctrecTave = kpp_drctrecTave + 1
cd56dd0428 Jean*0304           _END_MASTER( myThid )
                0305           _BARRIER
c9c3d7103f Ed H*0306 #else /* MULTIPLE_RECORD_KPP_STATE_FILES */
108c31e771 Ed H*0307 C         Write each tave output as a new file - creates many files but for
                0308 C         large configurations is easier to transfer
                0309 C         NOTE: file size and number problems are *SOLVED* by MNC
df5a9764ba Jean*0310           IF ( rwSuffixType.EQ.0 ) THEN
                0311             WRITE(suff,'(I10.10)') myIter
                0312           ELSE
                0313             CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
                0314           ENDIF
141e734c73 Jean*0315           CALL WRITE_FLD_XYZ_RL('KPPviscAz-T.',suff,KPPviscAztave,
c9c3d7103f Ed H*0316      &         myIter,myThid)
141e734c73 Jean*0317           CALL WRITE_FLD_XYZ_RL('KPPdiffKzT-T.',suff,KPPdiffKzTtave,
c9c3d7103f Ed H*0318      &         myIter,myThid)
141e734c73 Jean*0319           CALL WRITE_FLD_XYZ_RL('KPPdiffKzS-T.',suff,KPPdiffKzStave,
c9c3d7103f Ed H*0320      &         myIter,myThid)
141e734c73 Jean*0321           CALL WRITE_FLD_XYZ_RL('KPPghatKS-T.',suff,KPPghatKStave,
c9c3d7103f Ed H*0322      &         myIter,myThid)
141e734c73 Jean*0323           CALL WRITE_FLD_XY_RL('KPPhbl-T.',suff,KPPhbltave,
c9c3d7103f Ed H*0324      &         myIter,myThid)
cd56dd0428 Jean*0325 #endif /* MULTIPLE_RECORD_KPP_STATE_FILES */
c9c3d7103f Ed H*0326         ENDIF
cd56dd0428 Jean*0327 
c9c3d7103f Ed H*0328 #ifdef ALLOW_MNC
6e5c016417 Patr*0329         IF (KPPwriteState .AND. useMNC .AND. timeave_mnc) THEN
8b6db0f7a7 Jean*0330           IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
                0331             pf(1:1) = 'D'
                0332           ELSE
                0333             pf(1:1) = 'R'
                0334           ENDIF
c9c3d7103f Ed H*0335           CALL MNC_CW_SET_UDIM('kpp_timeave', -1, myThid)
987ff12cb6 Ed H*0336           CALL MNC_CW_RL_W_S('D','kpp_timeave',0,0,'T',myTime,myThid)
5220a1ccab Ed H*0337           CALL MNC_CW_SET_UDIM('kpp_timeave', 0, myThid)
987ff12cb6 Ed H*0338           CALL MNC_CW_I_W_S('I','kpp_timeave',0,0,'iter',myIter,myThid)
b22b541fe9 Ed H*0339           CALL MNC_CW_RL_W(pf,'kpp_timeave',0,0,
141e734c73 Jean*0340      &         'KPPviscAz', KPPviscAztave, myThid)
b22b541fe9 Ed H*0341           CALL MNC_CW_RL_W(pf,'kpp_timeave',0,0,
141e734c73 Jean*0342      &         'KPPdiffKzT', KPPdiffKzTtave, myThid)
b22b541fe9 Ed H*0343           CALL MNC_CW_RL_W(pf,'kpp_timeave',0,0,
141e734c73 Jean*0344      &         'KPPdiffKzS', KPPdiffKzStave, myThid)
b22b541fe9 Ed H*0345           CALL MNC_CW_RL_W(pf,'kpp_timeave',0,0,
141e734c73 Jean*0346      &         'KPPghatKS', KPPghatKStave, myThid)
b22b541fe9 Ed H*0347           CALL MNC_CW_RL_W(pf,'kpp_timeave',0,0,
141e734c73 Jean*0348      &         'KPPHBL', KPPhbltave, myThid)
c9c3d7103f Ed H*0349         ENDIF
                0350 #endif /*  ALLOW_MNC  */
                0351 
                0352 C       Reset averages to zero
                0353         DO bj = myByLo(myThid), myByHi(myThid)
                0354           DO bi = myBxLo(myThid), myBxHi(myThid)
                0355             CALL TIMEAVE_RESET(KPPviscAztave, Nr,bi,bj,myThid)
                0356             CALL TIMEAVE_RESET(KPPdiffKzTtave,Nr,bi,bj,myThid)
141e734c73 Jean*0357             CALL TIMEAVE_RESET(KPPghatKStave, Nr,bi,bj,myThid)
c9c3d7103f Ed H*0358             CALL TIMEAVE_RESET(KPPdiffKzStave,Nr,bi,bj,myThid)
                0359             CALL TIMEAVE_RESET(KPPhbltave,    1, bi,bj,myThid)
8b6db0f7a7 Jean*0360             KPP_timeAve(bi,bj) = 0.
c9c3d7103f Ed H*0361           ENDDO
                0362         ENDDO
cd56dd0428 Jean*0363 
8b6db0f7a7 Jean*0364 C--   end if dumpFiles
                0365        ENDIF
cd56dd0428 Jean*0366 
8b6db0f7a7 Jean*0367 C--   end if KPP_taveFreq > 0
                0368       ENDIF
0e5cee27f0 Jean*0369 #endif /* ALLOW_TIMEAVE */
7e819019d5 Dimi*0370 
                0371 #ifdef ALLOW_DIAGNOSTICS
c3cd6c250f Jean*0372 C     do not fill during call from INITIALISE_VARIA
afb6ba5661 Oliv*0373       IF ( useDiagnostics .AND. myIter.NE.nIter0 ) THEN
7e819019d5 Dimi*0374        CALL DIAGNOSTICS_FILL(KPPviscAz ,'KPPviscA',0,Nr,0,1,1,myThid)
                0375        CALL DIAGNOSTICS_FILL(KPPdiffKzS,'KPPdiffS',0,Nr,0,1,1,myThid)
                0376        CALL DIAGNOSTICS_FILL(KPPdiffKzT,'KPPdiffT',0,Nr,0,1,1,myThid)
141e734c73 Jean*0377        IF ( DIAGNOSTICS_IS_ON( 'KPPghatK', myThid ) ) THEN
                0378         IF ( useGMRedi .AND. KPP_ghatUseTotalDiffus ) THEN
                0379           tmpFac = 1. _d 0
                0380         ELSE
                0381           tmpFac = 0. _d 0
                0382         ENDIF
                0383         DO bj = myByLo(myThid), myByHi(myThid)
                0384          DO bi = myBxLo(myThid), myBxHi(myThid)
                0385           DO j=1,sNy
                0386             DO i=1,sNx
                0387               tmpLoc(i,j,1) = 0. _d 0
                0388             ENDDO
                0389           ENDDO
                0390           DO k=2,Nr
                0391            DO j=1,sNy
                0392             DO i=1,sNx
                0393               tmpLoc(i,j,k) = KPPghat(i,j,k-1,bi,bj)*
                0394      &                      ( KPPdiffKzS(i,j,k,bi,bj)
                0395 #ifdef ALLOW_GMREDI
                0396      &                      + tmpFac*Kwz(i,j,k,bi,bj)
                0397 #endif
                0398      &                      )
                0399             ENDDO
                0400            ENDDO
                0401           ENDDO
                0402           CALL DIAGNOSTICS_FILL(tmpLoc,'KPPghatK',0,Nr,3,bi,bj,myThid)
                0403          ENDDO
                0404         ENDDO
                0405        ENDIF
7e819019d5 Dimi*0406        CALL DIAGNOSTICS_FILL(KPPhbl    ,'KPPhbl  ',0,1 ,0,1,1,myThid)
                0407        CALL DIAGNOSTICS_FILL(KPPfrac   ,'KPPfrac ',0,1 ,0,1,1,myThid)
30c6f5b1cd An T*0408 #ifdef ALLOW_SALT_PLUME
                0409        CALL DIAGNOSTICS_FILL(KPPplumefrac,'KPPpfrac',0,1 ,0,1,1,myThid)
                0410 #endif /* ALLOW_SALT_PLUME */
7e819019d5 Dimi*0411       ENDIF
                0412 #endif /* ALLOW_DIAGNOSTICS */
cd56dd0428 Jean*0413 
02f4da180f Oliv*0414 C--   end if useOffLine
                0415       ENDIF
                0416 
0e5cee27f0 Jean*0417 #endif /* ALLOW_KPP */
cd56dd0428 Jean*0418 
2fa42a6013 Alis*0419       RETURN
                0420       END