/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_utils.F
ViewVC logotype

Diff of /MITgcm/pkg/diagnostics/diagnostics_utils.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.26 by jmc, Sat Aug 16 17:28:29 2008 UTC revision 1.32 by jmc, Wed Aug 14 00:54:06 2013 UTC
# Line 5  C $Name$ Line 5  C $Name$
5    
6  C--   File diagnostics_utils.F: General purpose support routines  C--   File diagnostics_utils.F: General purpose support routines
7  C--    Contents:  C--    Contents:
 C--    o GETDIAG  
8  C--    o DIAGNOSTICS_COUNT  C--    o DIAGNOSTICS_COUNT
9    C--    o DIAGNOSTICS_GET_DIAG
10  C--    o DIAGNOSTICS_GET_POINTERS  C--    o DIAGNOSTICS_GET_POINTERS
11    C--    o DIAGNOSTICS_SETKLEV
12  C--    o DIAGS_GET_PARMS_I (Function)  C--    o DIAGS_GET_PARMS_I (Function)
13  C--    o DIAGS_MK_UNITS (Function)  C--    o DIAGS_MK_UNITS (Function)
14  C--    o DIAGS_MK_TITLE (Function)  C--    o DIAGS_MK_TITLE (Function)
15    
16  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
17    
18  CBOP 0  CBOP 0
19  C     !ROUTINE: GETDIAG  C     !ROUTINE: DIAGNOSTICS_COUNT
20    C     !INTERFACE:
21          SUBROUTINE DIAGNOSTICS_COUNT( diagName,
22         I                              biArg, bjArg, myThid )
23    
24    C     !DESCRIPTION:
25    C***********************************************************************
26    C   routine to increment the diagnostic counter only
27    C***********************************************************************
28    C     !USES:
29          IMPLICIT NONE
30    
31    C     == Global variables ===
32    #include "EEPARAMS.h"
33    #include "SIZE.h"
34    #include "DIAGNOSTICS_SIZE.h"
35    #include "DIAGNOSTICS.h"
36    
37    C     !INPUT PARAMETERS:
38    C***********************************************************************
39    C  Arguments Description
40    C  ----------------------
41    C     diagName :: name of diagnostic to increment the counter
42    C     biArg    :: X-direction tile number, or 0 if called outside bi,bj loops
43    C     bjArg    :: Y-direction tile number, or 0 if called outside bi,bj loops
44    C     myThid   :: my thread Id number
45    C***********************************************************************
46          CHARACTER*8 diagName
47          INTEGER biArg, bjArg
48          INTEGER myThid
49    CEOP
50    
51    C     !LOCAL VARIABLES:
52    C ===============
53          INTEGER m, n
54          INTEGER bi, bj
55          INTEGER ipt, ndId
56    c     CHARACTER*(MAX_LEN_MBUF) msgBuf
57    
58          IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN
59            bi = myBxLo(myThid)
60            bj = myByLo(myThid)
61          ELSE
62            bi = MIN(biArg,nSx)
63            bj = MIN(bjArg,nSy)
64          ENDIF
65    
66    C--   Run through list of active diagnostics to find which counter
67    C     to increment (needs to be a valid & active diagnostic-counter)
68          DO n=1,nLists
69           DO m=1,nActive(n)
70            IF ( diagName.EQ.flds(m,n) .AND. idiag(m,n).GT.0 ) THEN
71             ipt = idiag(m,n)
72             IF (ndiag(ipt,bi,bj).GE.0) THEN
73              ndId = jdiag(m,n)
74              ipt = ipt + pdiag(n,bi,bj)*kdiag(ndId)
75    C-    Increment the counter for the diagnostic
76              IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN
77               DO bj=myByLo(myThid), myByHi(myThid)
78                DO bi=myBxLo(myThid), myBxHi(myThid)
79                 ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1
80                ENDDO
81               ENDDO
82              ELSE
83                 ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1
84              ENDIF
85    C-    Increment is done
86             ENDIF
87            ENDIF
88           ENDDO
89          ENDDO
90    
91          RETURN
92          END
93    
94    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
95    
96    CBOP 0
97    C     !ROUTINE: DIAGNOSTICS_GET_DIAG
98    
99  C     !INTERFACE:  C     !INTERFACE:
100        SUBROUTINE GETDIAG(        SUBROUTINE DIAGNOSTICS_GET_DIAG(
101       I                    levreal, undef,       I                    kl, undefRL,
102       O                    qtmp,       O                    qtmp,
103       I                    ndId, mate, ip, im, bi, bj, myThid )       I                    ndId, mate, ip, im, bi, bj, myThid )
104    
105  C     !DESCRIPTION:  C     !DESCRIPTION:
106  C     Retrieve averaged model diagnostic  C     Retrieve time-averaged (or snap-shot) diagnostic field
107    
108  C     !USES:  C     !USES:
109        IMPLICIT NONE        IMPLICIT NONE
# Line 33  C     !USES: Line 113  C     !USES:
113  #include "DIAGNOSTICS.h"  #include "DIAGNOSTICS.h"
114    
115  C     !INPUT PARAMETERS:  C     !INPUT PARAMETERS:
116  C     levreal :: Diagnostic LEVEL  C     kl      :: level selection: >0 : single selected lev ; =0 : all kdiag levels
117  C     undef   :: UNDEFINED VALUE  C     undefRL :: undefined "_RL" type value
118  C     ndId    :: DIAGNOSTIC NUMBER FROM MENU  C     ndId    :: diagnostic Id number (in available diagnostics list)
119  C     mate    :: counter DIAGNOSTIC NUMBER if any ; 0 otherwise  C     mate    :: counter diagnostic number if any ; 0 otherwise
120  C     ip      :: pointer to storage array location for diag.  C     ip      :: pointer to storage array location for diag.
121  C     im      :: pointer to storage array location for mate  C     im      :: pointer to storage array location for mate
122  C     bi      :: X-direction tile number  C     bi      :: X-direction tile number
123  C     bj      :: Y-direction tile number  C     bj      :: Y-direction tile number
124  C     myThid  :: my thread Id number  C     myThid  :: my thread Id number
125        _RL levreal        INTEGER kl
126        _RL undef        _RL undefRL
127        INTEGER ndId, mate, ip, im        INTEGER ndId, mate, ip, im
128        INTEGER bi,bj, myThid        INTEGER bi, bj, myThid
129    
130  C     !OUTPUT PARAMETERS:  C     !OUTPUT PARAMETERS:
131  C     qtmp    ..... AVERAGED DIAGNOSTIC QUANTITY  C     qtmp    :: time-averaged (or snap-shot) diagnostic field
132        _RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,*)
133  CEOP  CEOP
134    
135  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
136        _RL factor        _RL factor
137        INTEGER i, j, ipnt,ipCt        INTEGER i, j, ipnt, ipCt
138        INTEGER lev, levCt, klev        INTEGER k, kd, km, kLev
139    
140        IF (ndId.GE.1) THEN        IF (ndId.GE.1) THEN
141         lev = NINT(levreal)         kLev = kdiag(ndId)
142         klev = kdiag(ndId)         IF ( kl.GE.1 .AND. kl.LE.kLev ) THEN
143         IF (lev.LE.klev) THEN          kLev = 1
144           ELSEIF ( kl.NE.0 ) THEN
145            kLev = 0
146           ENDIF
147    
148           DO k = 1,kLev
149            kd = k
150            IF ( kl.GE.1 ) kd = kl
151    
152          IF ( mate.EQ.0 ) THEN          IF ( mate.EQ.0 ) THEN
153  C-      No counter diagnostics => average = Sum / ndiag :  C-      No counter diagnostics => average = Sum / ndiag :
154    
155            ipnt = ip + lev - 1            ipnt = ip + kd - 1
156            factor = FLOAT(ndiag(ip,bi,bj))            factor = FLOAT(ndiag(ip,bi,bj))
157            IF (ndiag(ip,bi,bj).NE.0) factor = 1. _d 0 / factor            IF (ndiag(ip,bi,bj).NE.0) factor = 1. _d 0 / factor
158    
159    #ifdef ALLOW_FIZHI
160            DO j = 1,sNy+1            DO j = 1,sNy+1
161              DO i = 1,sNx+1              DO i = 1,sNx+1
162                IF ( qdiag(i,j,ipnt,bi,bj) .LE. undef ) THEN                IF ( qdiag(i,j,ipnt,bi,bj) .LE. undefRL ) THEN
163                  qtmp(i,j) = qdiag(i,j,ipnt,bi,bj)*factor                  qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)*factor
164                ELSE                ELSE
165                  qtmp(i,j) = undef                  qtmp(i,j,k) = undefRL
166                ENDIF                ENDIF
167              ENDDO              ENDDO
168            ENDDO            ENDDO
169    #else /* ALLOW_FIZHI */
170              DO j = 1,sNy+1
171                DO i = 1,sNx+1
172                  qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)*factor
173                ENDDO
174              ENDDO
175    #endif /* ALLOW_FIZHI */
176    
177          ELSE          ELSE
178  C-      With counter diagnostics => average = Sum / counter:  C-      With counter diagnostics => average = Sum / counter:
179    
180            ipnt = ip + lev - 1            ipnt = ip + kd - 1
181            levCt= MIN(lev,kdiag(mate))            km = MIN(kd,kdiag(mate))
182            ipCt = im + levCt - 1            ipCt = im + km - 1
183            DO j = 1,sNy+1            DO j = 1,sNy+1
184              DO i = 1,sNx+1              DO i = 1,sNx+1
185                IF ( qdiag(i,j,ipCt,bi,bj) .NE. 0. ) THEN                IF ( qdiag(i,j,ipCt,bi,bj) .NE. 0. ) THEN
186                  qtmp(i,j) = qdiag(i,j,ipnt,bi,bj)                  qtmp(i,j,k) = qdiag(i,j,ipnt,bi,bj)
187       &                    / qdiag(i,j,ipCt,bi,bj)       &                      / qdiag(i,j,ipCt,bi,bj)
188                ELSE                ELSE
189                  qtmp(i,j) = undef                  qtmp(i,j,k) = undefRL
190                ENDIF                ENDIF
191              ENDDO              ENDDO
192            ENDDO            ENDDO
193    
194          ENDIF          ENDIF
        ENDIF  
       ENDIF  
   
       RETURN  
       END  
   
 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  
   
 CBOP 0  
 C     !ROUTINE: DIAGNOSTICS_COUNT  
 C     !INTERFACE:  
       SUBROUTINE DIAGNOSTICS_COUNT (chardiag,  
      I                              biArg, bjArg, myThid)  
   
 C     !DESCRIPTION:  
 C***********************************************************************  
 C   routine to increment the diagnostic counter only  
 C***********************************************************************  
 C     !USES:  
       IMPLICIT NONE  
   
 C     == Global variables ===  
 #include "EEPARAMS.h"  
 #include "SIZE.h"  
 #include "DIAGNOSTICS_SIZE.h"  
 #include "DIAGNOSTICS.h"  
   
 C     !INPUT PARAMETERS:  
 C***********************************************************************  
 C  Arguments Description  
 C  ----------------------  
 C     chardiag :: Character expression for diag to increment the counter  
 C     biArg    :: X-direction tile number, or 0 if called outside bi,bj loops  
 C     bjArg    :: Y-direction tile number, or 0 if called outside bi,bj loops  
 C     myThid   :: my thread Id number  
 C***********************************************************************  
       CHARACTER*8 chardiag  
       INTEGER biArg, bjArg  
       INTEGER myThid  
 CEOP  
   
 C     !LOCAL VARIABLES:  
 C ===============  
       INTEGER m, n  
       INTEGER bi, bj  
       INTEGER ipt  
 c     CHARACTER*(MAX_LEN_MBUF) msgBuf  
   
 C--   Run through list of active diagnostics to find which counter  
 C     to increment (needs to be a valid & active diagnostic-counter)  
       DO n=1,nlists  
        DO m=1,nActive(n)  
         IF ( chardiag.EQ.flds(m,n) .AND. idiag(m,n).GT.0 ) THEN  
          ipt = idiag(m,n)  
          IF (ndiag(ipt,1,1).GE.0) THEN  
 C-    Increment the counter for the diagnostic  
           IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN  
            DO bj=myByLo(myThid), myByHi(myThid)  
             DO bi=myBxLo(myThid), myBxHi(myThid)  
              ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1  
             ENDDO  
            ENDDO  
           ELSE  
              bi = MIN(biArg,nSx)  
              bj = MIN(bjArg,nSy)  
              ndiag(ipt,bi,bj) = ndiag(ipt,bi,bj) + 1  
           ENDIF  
 C-    Increment is done  
          ENDIF  
         ENDIF  
195         ENDDO         ENDDO
196        ENDDO        ENDIF
197    
198        RETURN        RETURN
199        END        END
# Line 213  C     !OUTPUT PARAMETERS: Line 238  C     !OUTPUT PARAMETERS:
238  C     ndId     :: diagnostics  Id number (in available diagnostics list)  C     ndId     :: diagnostics  Id number (in available diagnostics list)
239  C     ip       :: diagnostics  pointer to storage array  C     ip       :: diagnostics  pointer to storage array
240    
   
241        CHARACTER*8 diagName        CHARACTER*8 diagName
242        INTEGER listId        INTEGER listId
243        INTEGER ndId, ip        INTEGER ndId, ip
# Line 230  C     !LOCAL VARIABLES: Line 254  C     !LOCAL VARIABLES:
254  C--   select the 1rst one which name matches:  C--   select the 1rst one which name matches:
255    
256  C-    search for this diag. in the active 2D/3D diagnostics list  C-    search for this diag. in the active 2D/3D diagnostics list
257          DO n=1,nlists          DO n=1,nLists
258           DO m=1,nActive(n)           DO m=1,nActive(n)
259             IF ( ip.EQ.0 .AND. diagName.EQ.flds(m,n)             IF ( ip.EQ.0 .AND. diagName.EQ.flds(m,n)
260       &                  .AND. idiag(m,n).NE.0 ) THEN       &                  .AND. idiag(m,n).NE.0 ) THEN
# Line 240  C-    search for this diag. in the activ Line 264  C-    search for this diag. in the activ
264           ENDDO           ENDDO
265          ENDDO          ENDDO
266    
267        ELSEIF ( listId.LE.nlists ) THEN        ELSEIF ( listId.LE.nLists ) THEN
268  C--   select the unique diagnostic with output-time identical to listId  C--   select the unique diagnostic with output-time identical to listId
269    
270  C-    search for this diag. in the active 2D/3D diagnostics list  C-    search for this diag. in the active 2D/3D diagnostics list
271          DO n=1,nlists          DO n=1,nLists
272           IF ( ip.EQ.0           IF ( ip.EQ.0
273       &        .AND. freq(n) .EQ. freq(listId)       &        .AND. freq(n) .EQ. freq(listId)
274       &        .AND. phase(n).EQ.phase(listId)       &        .AND. phase(n).EQ.phase(listId)
# Line 279  C-    search for this diag. in the activ Line 303  C-    search for this diag. in the activ
303  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
304    
305  CBOP 0  CBOP 0
306    C     !ROUTINE: DIAGNOSTICS_SETKLEV
307    
308    C     !INTERFACE:
309          SUBROUTINE DIAGNOSTICS_SETKLEV(
310         I                                diagName, nLevDiag, myThid )
311    
312    C     !DESCRIPTION:
313    C     *==========================================================*
314    C     | S/R DIAGNOSTICS_SETKLEV
315    C     | o Define explicitly the number of level (stored in kdiag)
316    C     |   of a diagnostic field. For most diagnostics, the number
317    C     |   of levels is derived (in S/R SET_LEVELS) from gdiag(10)
318    C     |   but occasionally one may want to set it explicitly.
319    C     *==========================================================*
320    
321    C     !USES:
322          IMPLICIT NONE
323    #include "EEPARAMS.h"
324    #include "SIZE.h"
325    #include "DIAGNOSTICS_SIZE.h"
326    #include "DIAGNOSTICS.h"
327    
328    C     !INPUT PARAMETERS:
329    C     diagName  :: diagnostic identificator name (8 characters long)
330    C     nLevDiag  :: number of level to set for this diagnostics field
331    C     myThid    :: my Thread Id number
332          CHARACTER*8  diagName
333          INTEGER nLevDiag
334          INTEGER myThid
335    CEOP
336    
337    C     !LOCAL VARIABLES:
338          CHARACTER*(MAX_LEN_MBUF) msgBuf
339          INTEGER n, ndId
340    
341    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
342    
343          _BEGIN_MASTER( myThid)
344    
345    C--   Check if this S/R is called from the right place ;
346    C     needs to be after DIAGNOSTICS_INIT_EARLY and before DIAGNOSTICS_INIT_FIXED
347          IF ( diag_pkgStatus.NE.ready2setDiags ) THEN
348            CALL DIAGNOSTICS_STATUS_ERROR( 'DIAGNOSTICS_SETKLEV',
349         &                   ' ', diagName, ready2setDiags, myThid )
350          ENDIF
351    
352    C--   Find this diagnostics in the list of available diag.
353          ndId = 0
354          DO n = 1,ndiagt
355            IF ( diagName.EQ.cdiag(n) ) THEN
356              ndId = n
357            ENDIF
358          ENDDO
359          IF ( ndId.EQ.0 ) THEN
360            WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SETKLEV: ',
361         &     'diagName="', diagName, '" not known.'
362            CALL PRINT_ERROR( msgBuf, myThid )
363            STOP 'ABNORMAL END: S/R DIAGNOSTICS_SETKLEV'
364          ENDIF
365    
366    C-    Optional level number diagnostics (X): set number of levels
367          IF ( kdiag(ndId).EQ.0
368         &   .AND. gdiag(ndId)(10:10).EQ.'X' ) THEN
369            kdiag(ndId) = nLevDiag
370          ELSEIF ( kdiag(ndId).EQ.nLevDiag
371         &   .AND. gdiag(ndId)(10:10).EQ.'X' ) THEN
372    C-    level number already set to same value: send warning
373            WRITE(msgBuf,'(4A,I5)') '** WARNING ** DIAGNOSTICS_SETKLEV: ',
374         &     'diagName="', diagName, '" , nLevDiag=', nLevDiag
375            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
376         &                      SQUEEZE_RIGHT , myThid )
377            WRITE(msgBuf,'(2A,I5,A)')'** WARNING ** DIAGNOSTICS_SETKLEV:',
378         &     ' level Nb (=', kdiag(ndId), ') already set.'
379            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
380         &                      SQUEEZE_RIGHT , myThid )
381          ELSEIF ( gdiag(ndId)(10:10).EQ.'X' ) THEN
382    C-    level number already set to a different value: do not reset but stop
383            WRITE(msgBuf,'(4A,I5)') 'DIAGNOSTICS_SETKLEV: ',
384         &     'diagName="', diagName, '" , nLevDiag=', nLevDiag
385            CALL PRINT_ERROR( msgBuf, myThid )
386            WRITE(msgBuf,'(2A,I5,3A)') 'DIAGNOSTICS_SETKLEV: ',
387         &     'level Nb already set to', kdiag(ndId), ' => STOP'
388            CALL PRINT_ERROR( msgBuf, myThid )
389          ELSE
390    C-    for now, do nothing but just send a warning
391            WRITE(msgBuf,'(4A,I5)') '** WARNING ** DIAGNOSTICS_SETKLEV: ',
392         &     'diagName="', diagName, '" , nLevDiag=', nLevDiag
393            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
394         &                      SQUEEZE_RIGHT , myThid )
395            WRITE(msgBuf,'(2A,I5,3A)') '** WARNING ** will set level Nb',
396         &     ' from diagCode(ndId=', ndId, ')="', gdiag(ndId)(1:10), '"'
397            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
398         &                      SQUEEZE_RIGHT , myThid )
399            WRITE(msgBuf,'(4A)') '** WARNING ** DIAGNOSTICS_SETKLEV',
400         &     '("', diagName, '") <== Ignore this call.'
401            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
402         &                      SQUEEZE_RIGHT , myThid )
403          ENDIF
404    
405          _END_MASTER( myThid)
406    
407          RETURN
408          END
409    
410    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
411    
412    CBOP 0
413  C     !ROUTINE: DIAGS_GET_PARMS_I  C     !ROUTINE: DIAGS_GET_PARMS_I
414    
415  C     !INTERFACE:  C     !INTERFACE:
# Line 360  C     !LOCAL VARIABLES: Line 491  C     !LOCAL VARIABLES:
491        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
492        INTEGER i,j,n        INTEGER i,j,n
493    
494        DIAGS_MK_UNITS = '          '        DIAGS_MK_UNITS = '                '
495        n = LEN(diagUnitsInPieces)        n = LEN(diagUnitsInPieces)
496    
497        j = 0        j = 0
# Line 372  C     !LOCAL VARIABLES: Line 503  C     !LOCAL VARIABLES:
503        ENDDO        ENDDO
504    
505        IF ( j.GT.16 ) THEN        IF ( j.GT.16 ) THEN
506           WRITE(msgBuf,'(2A,I4,A)') '**WARNING** ',           WRITE(msgBuf,'(2A,I4,A)') '** WARNING ** ',
507       &   'DIAGS_MK_UNITS: too long (',j,' >16) input string'       &   'DIAGS_MK_UNITS: too long (',j,' >16) input string'
508          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
509       &       SQUEEZE_RIGHT , myThid)       &       SQUEEZE_RIGHT , myThid)
510           WRITE(msgBuf,'(3A)') '**WARNING** ',           WRITE(msgBuf,'(3A)') '** WARNING ** ',
511       &   'DIAGS_MK_UNITS: input=', diagUnitsInPieces       &   'DIAGS_MK_UNITS: input=', diagUnitsInPieces
512          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
513       &       SQUEEZE_RIGHT , myThid)       &       SQUEEZE_RIGHT , myThid)
# Line 441  C---+----1----+----2----+----3----+----4 Line 572  C---+----1----+----2----+----3----+----4
572        ENDDO        ENDDO
573    
574        IF ( j.GT.80 ) THEN        IF ( j.GT.80 ) THEN
575           WRITE(msgBuf,'(2A,I4,A)') '**WARNING** ',           WRITE(msgBuf,'(2A,I4,A)') '** WARNING ** ',
576       &   'DIAGS_MK_TITLE: too long (',j,' >80) input string'       &   'DIAGS_MK_TITLE: too long (',j,' >80) input string'
577          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
578       &       SQUEEZE_RIGHT , myThid)       &       SQUEEZE_RIGHT , myThid)
579           WRITE(msgBuf,'(3A)') '**WARNING** ',           WRITE(msgBuf,'(3A)') '** WARNING ** ',
580       &   'DIAGS_MK_TITLE: input=', diagTitleInPieces       &   'DIAGS_MK_TITLE: input=', diagTitleInPieces
581          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,          CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
582       &       SQUEEZE_RIGHT , myThid)       &       SQUEEZE_RIGHT , myThid)

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.22