C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/diagnostics/diagnostics_set_levels.F,v 1.2 2004/12/15 00:18:39 jmc Exp $ C $Name: $ #include "DIAG_OPTIONS.h" CBOP 0 C !ROUTINE: DIAGNOSTICS_SET_LEVELS C !INTERFACE: SUBROUTINE DIAGNOSTICS_SET_LEVELS( myThid ) C !DESCRIPTION: C Initialize Diagnostic Levels, according to GDIAG C for all available diagnostics C Notes: needs to be called after all packages set they own available C diagnostics C \begin{center} C \begin{tabular}[h]{|c|c|}\hline C \textbf{Positions} & \textbf{Characters} C & \textbf{Meanings} \\\hline C parse(10) & 0 & levels = 0 \\ C & 1 & levels = 1 \\ C & R & levels = Nr \\ C & L & levels = MAX(Nr,NrPhys) \\ C & M & levels = MAX(Nr,NrPhys) - 1 \\ C \end{tabular} C \end{center} C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "DIAGNOSTICS_SIZE.h" #include "DIAGNOSTICS.h" #ifdef ALLOW_FIZHI #include "fizhi_SIZE.h" #else INTEGER Nrphys PARAMETER (Nrphys=0) #endif C !INPUT PARAMETERS: C myThid :: my Thread Id number INTEGER myThid CEOP C !LOCAL VARIABLES: INTEGER l, n, nlevs INTEGER dUnit, stdUnit CHARACTER*(MAX_LEN_MBUF) msgBuf CHARACTER*(72) ccHead, ccLine INTEGER ILNBLNK EXTERNAL ILNBLNK C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| nlevs = MAX(Nr,Nrphys) c Diagnostic Levels c ----------------- DO n = 1,ndiagt IF (gdiag(n)(10:10) .EQ. '0') kdiag(n) = 0 IF (gdiag(n)(10:10) .EQ. '1') kdiag(n) = 1 IF (gdiag(n)(10:10) .EQ. 'R') kdiag(n) = Nr IF (gdiag(n)(10:10) .EQ. 'L') kdiag(n) = nlevs IF (gdiag(n)(10:10) .EQ. 'M') kdiag(n) = nlevs - 1 ENDDO _BEGIN_MASTER( myThid ) stdUnit = standardMessageUnit WRITE(msgBuf,'(2A)') & '------------------------------------------------------------' CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid) WRITE(msgBuf,'(A)') 'DIAGNOSTICS_SET_LEVELS: done' CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid) WRITE(msgBuf,'(A,I4)') & ' Total Nb of available Diagnostics: ndiagt=', ndiagt CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C write a summary of the (long) list of all available diagnostics: IF ( debugLevel.GE.debLevA ) THEN WRITE(msgBuf,'(2A)') & ' write list of available Diagnostics to file: ', & 'available_diagnostics' CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid) WRITE(ccHead,'(2A)') & ' Num |<-Name->|Levs|<-parsing code->|<-- Units -->|', & '<- Tile (max=80c)' DO l=1,LEN(ccLine) ccLine(l:l) = '-' ENDDO CALL MDSFINDUNIT( dUnit, mythid ) OPEN(dUnit, file='available_diagnostics', status='unknown', & form='formatted') WRITE(dUnit,'(A,I4)') & ' Total Nb of available Diagnostics: ndiagt=', ndiagt WRITE(dUnit,'(A)') ccLine WRITE(dUnit,'(A)') ccHead WRITE(dUnit,'(A)') ccLine DO n=1,ndiagt IF ( MOD(n,100).EQ.0 ) THEN WRITE(dUnit,'(A)') ccLine WRITE(dUnit,'(A)') ccHead WRITE(dUnit,'(A)') ccLine ENDIF l = ILNBLNK(tdiag(n)) IF (l.GE.1) THEN WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|', & kdiag(n),' |',gdiag(n),'|',udiag(n),'|',tdiag(n)(1:l) ELSE WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|', & kdiag(n),' |',gdiag(n),'|',udiag(n),'|' ENDIF ENDDO WRITE(dUnit,'(A)') ccLine WRITE(dUnit,'(A)') ccHead WRITE(dUnit,'(A)') ccLine CLOSE(dUnit) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| ENDIF _END_MASTER( myThid ) RETURN END