C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_ascii_out.F,v 1.8 2017/12/12 17:40:28 jmc Exp $ C $Name: $ #include "DIAG_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: DIAGSTATS_ASCII_OUT C !INTERFACE: SUBROUTINE DIAGSTATS_ASCII_OUT( I statGlob, nLev, ndId, I mId, listId, myIter, myThid ) C !DESCRIPTION: C Write Global statistic to ASCII file C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "DIAGNOSTICS_SIZE.h" #include "DIAGNOSTICS.h" C !INPUT PARAMETERS: C statGlob ..... AVERAGED DIAGNOSTIC QUANTITY C nLev .... 2nd Dimension (max Nb of levels) of statGlob array C ndId ... diagnostic Id number (in diagnostics long list) C mId ..... field rank in list "listId" C listId ..... current output Stream list C myIter ..... current Iteration Number C myThid ..... my thread Id number INTEGER nLev _RL statGlob(0:nStats,0:nLev,0:nRegions) INTEGER ndId, mId, listId INTEGER myIter, myThid CEOP C !LOCAL VARIABLES: INTEGER im, ix, iv PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats ) INTEGER i, j, k, kLev, nUnit C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| _BEGIN_MASTER( myThid) IF ( diagSt_Ascii .AND. myProcId.EQ.0 ) THEN nUnit = diagSt_ioUnit(listId) kLev = kdiag(ndId) C- single level field: Vertical Integral (k=0) & 1rst level are identical C => write only 1 of the 2: IF ( kLev.EQ.1 ) kLev = 0 kLev = MIN( kLev, nLev ) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| DO j=0,nRegions IF ( diagSt_region(j,listId).GE.1 ) THEN WRITE(nUnit,'(3A,I10,2(A,I4))') ' field : ', cdiag(ndId), & ' ; Iter =',myIter,' ; region #',j, ' ; nb.Lev =',kdiag(ndId) c WRITE(nUnit,'(5A)') ' k |', c & ' -- Average -- |', ' -- Std.Dev -- |', c & ' -- min -- |', ' -- max -- |' c WRITE(nUnit,'(6A)') ' k |', c & ' -- Average -- |', ' -- Std.Dev -- |', c & ' -- min -- |', ' -- max -- |',' -- Vol' WRITE(nUnit,'(6A)') ' k |', & ' -- Average -- |', ' -- Std.Dev -- |', & ' -- min -- |', ' -- max -- |',' -- Vol' DO k=0,kLev C full precision, do not write the volume: c WRITE(nUnit,'(I3,1P4E20.12)') k,(statGlob(i,k,j),i=1,nStats) C reduced precision + write the volume (usefull for testing): c WRITE(nUnit,'(I3,1P5E18.10)') c & k, (statGlob(i,k,j),i=1,nStats), statGlob(0,k,j) C full precision + write the volume: WRITE(nUnit,'(I3,1P5E21.13)') & k, (statGlob(i,k,j),i=1,nStats), statGlob(0,k,j) ENDDO ENDIF ENDDO WRITE(nUnit,'(A)') ' ' C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| ENDIF _END_MASTER( myThid ) RETURN END