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

Contents of /MITgcm/pkg/diagnostics/diagnostics_addtolist.F

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


Revision 1.4 - (show annotations) (download)
Wed Aug 14 00:54:06 2013 UTC (10 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64o, checkpoint64n, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.3: +4 -15 lines
add a parameter (diag_pkgSatus) to track the status of the pkg activation;
this replace/extend the use of logical param "settingDiags" (to check
when adding diag to the list) to also check any DIAGNOSTICS_[]FILL* call.

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_addtolist.F,v 1.3 2010/01/15 00:25:58 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP 0
8 C !ROUTINE: DIAGNOSTICS_ADDTOLIST
9
10 C !INTERFACE:
11 SUBROUTINE DIAGNOSTICS_ADDTOLIST (
12 O diagNum,
13 I diagName, diagCode, diagUnits, diagTitle, diagMate,
14 I myThid )
15
16 C !DESCRIPTION:
17 C routine to add 1 diagnostics to the list of available diagnostics:
18 C set the attributes:
19 C name (=cdiag), parsing code (=gdiag), units (=udiag), title (=tdiag)
20 C and diagnostic mate number (=hdiag) of the new diagnostic and
21 C update the total number of available diagnostics
22 C Note: needs to be called after DIAGNOSTICS_INIT_EARLY
23 C and before DIAGNOSTICS_INIT_FIXED
24
25 C !USES:
26 IMPLICIT NONE
27 #include "SIZE.h"
28 #include "EEPARAMS.h"
29 #include "DIAGNOSTICS_SIZE.h"
30 #include "DIAGNOSTICS.h"
31
32 C !INPUT PARAMETERS:
33 C diagName :: diagnostic name to declare
34 C diagCode :: parser code for this diagnostic
35 C diagUnits :: field units for this diagnostic
36 C diagTitle :: field description for this diagnostic
37 C diagMate :: diagnostic mate number
38 C myThid :: my Thread Id number
39 CHARACTER*8 diagName
40 CHARACTER*16 diagCode
41 CHARACTER*16 diagUnits
42 CHARACTER*(*) diagTitle
43 INTEGER diagMate
44 INTEGER myThid
45
46 C !OUTPUT PARAMETERS:
47 C numDiag :: diagnostic number in the list of available diagnostics
48 INTEGER diagNum
49 CEOP
50
51 C !LOCAL VARIABLES:
52 C msgBuf :: Informational/error message buffer
53 CHARACTER*(MAX_LEN_MBUF) msgBuf
54 INTEGER n
55
56 C-- Initialise
57 diagNum = 0
58
59 _BEGIN_MASTER( myThid)
60
61 C-- Check if this S/R is called from the right place ;
62 C needs to be after DIAGNOSTICS_INIT_EARLY and before DIAGNOSTICS_INIT_FIXED
63 IF ( diag_pkgStatus.NE.ready2setDiags ) THEN
64 CALL DIAGNOSTICS_STATUS_ERROR( 'DIAGNOSTICS_ADDTOLIST',
65 & ' ', diagName, ready2setDiags, myThid )
66 ENDIF
67
68 C-- Search for "diagName" in the list of available diagnostics:
69 DO n=1,ndiagt
70 IF ( cdiag(n).EQ.diagName ) THEN
71 diagNum = n
72 IF ( gdiag(n).EQ.diagCode .AND. hdiag(n).EQ.diagMate ) THEN
73 C- diagnostics is already defined and has the same characteristics
74 WRITE(msgBuf,'(3A,I6,A)') 'DIAGNOSTICS_ADDTOLIST: diag=',
75 & diagName,' is already defined (# ',n,' )'
76 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
77 & SQUEEZE_RIGHT , myThid)
78 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_ADDTOLIST:',
79 & ' with same parser => update Title & Units '
80 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
81 & SQUEEZE_RIGHT , myThid)
82 udiag(diagNum) = diagUnits
83 tdiag(diagNum) = diagTitle
84 ELSE
85 C- diagnostics is already defined but with different characteristics
86 WRITE(msgBuf,'(3A,I6,A)') 'DIAGNOSTICS_ADDTOLIST: diag=',
87 & diagName,' is already defined (# ',n,' )'
88 CALL PRINT_ERROR( msgBuf , myThid)
89 WRITE(msgBuf,'(4A,I6)') 'DIAGNOSTICS_ADDTOLIST: cannot ',
90 & 'change parser="',gdiag(n),'" & mate=',hdiag(n)
91 CALL PRINT_ERROR( msgBuf , myThid)
92 WRITE(msgBuf,'(4A,I6,A)') 'DIAGNOSTICS_ADDTOLIST:',
93 & ' to : "',diagCode,'" and mate=',diagMate,' ; => STOP'
94 CALL PRINT_ERROR( msgBuf , myThid)
95 STOP 'ABNORMAL END: S/R DIAGNOSTICS_ADDTOLIST'
96 ENDIF
97 ENDIF
98 ENDDO
99
100 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
101
102 IF ( diagNum.EQ.0 ) THEN
103 C-- Add one diagnostic to the list of available diagnostics:
104 diagNum = ndiagt + 1
105
106 IF ( diagNum .LE. ndiagMax ) THEN
107 cdiag(diagNum) = diagName
108 gdiag(diagNum) = diagCode
109 hdiag(diagNum) = diagMate
110 udiag(diagNum) = diagUnits
111 tdiag(diagNum) = diagTitle
112 ndiagt = diagNum
113 ELSE
114 WRITE(msgBuf,'(2A,I6)') 'DIAGNOSTICS_ADDTOLIST:',
115 & ' Exceed Max.Number of diagnostics ndiagMax=', ndiagMax
116 CALL PRINT_ERROR( msgBuf , myThid)
117 WRITE(msgBuf,'(2A)')
118 & 'DIAGNOSTICS_ADDTOLIST: when setting diagnostic: ',diagName
119 CALL PRINT_ERROR( msgBuf , myThid)
120 STOP 'ABNORMAL END: S/R DIAGNOSTICS_ADDTOLIST'
121 ENDIF
122
123 ENDIF
124
125 _END_MASTER( myThid )
126
127 RETURN
128 END

  ViewVC Help
Powered by ViewVC 1.1.22