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

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

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


Revision 1.11 - (show annotations) (download)
Sun Jul 23 00:24:18 2017 UTC (6 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, HEAD
Changes since 1.10: +2 -2 lines
allows for negative "jdiag" (interpret |jdiag| instead)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_check.F,v 1.10 2017/01/11 00:22:48 gforget 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_CHECK
9
10 C !INTERFACE:
11 SUBROUTINE DIAGNOSTICS_CHECK(myThid)
12
13 C !DESCRIPTION:
14 C Check option and parameter consistency
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "GRID.h"
22 #include "DIAGNOSTICS_SIZE.h"
23 #include "DIAGNOSTICS.h"
24
25 C !INPUT PARAMETERS:
26 INTEGER myThid
27 CEOP
28
29 C !LOCAL VARIABLES:
30 CHARACTER*(MAX_LEN_MBUF) msgBuf
31 INTEGER ld,md,nd
32 INTEGER k,m
33 INTEGER jpoint1, ipoint1, jpoint2, ipoint2
34 _RL margin
35
36 _BEGIN_MASTER(myThid)
37
38 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
39 C Check diagnostics parameter consistency
40
41 IF ( useMissingValue .AND. .NOT. diag_mnc ) THEN
42 WRITE(msgBuf,'(2A)') '** WARNING ** DIAGNOSTICS_CHECK: ',
43 & 'ignore "useMissingValue" since "diag_mnc" is off'
44 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
45 & SQUEEZE_RIGHT , myThid )
46 ENDIF
47
48 IF ( diag_mnc.AND.(diagMdsDir.NE.' ') ) THEN
49 WRITE(msgBuf,'(A,A)') 'S/R DIAGNOSTICS_CHECK: diagMdsDir ',
50 & 'and pkg/mnc cannot be used together'
51 CALL PRINT_ERROR( msgBuf, myThid )
52 CALL ALL_PROC_DIE( 0 )
53 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
54 ENDIF
55
56 IF ( (mdsioLocalDir.NE.' ').AND.(diagMdsDir.NE.' ') ) THEN
57 WRITE(msgBuf,'(A)')
58 & 'S/R DIAGNOSTICS_CHECK: mdsioLocalDir and diagMdsDir cannot be'
59 CALL PRINT_ERROR( msgBuf, myThid )
60 WRITE(msgBuf,'(A)')
61 & 'S/R DIAGNOSTICS_CHECK: specified at the same time'
62 CALL PRINT_ERROR( msgBuf, myThid )
63 CALL ALL_PROC_DIE( 0 )
64 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
65 ENDIF
66
67 #ifdef DIAGNOSTICS_HAS_PICKUP
68 IF ( diag_pickup_read ) THEN
69 WRITE(msgBuf,'(2A)') '**CAUTION** (DIAGNOSTICS_CHECK): ',
70 & 'reading diagnostics previous state'
71 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
72 & SQUEEZE_RIGHT , myThid)
73 WRITE(msgBuf,'(2A)') '**CAUTION** ',
74 & ' from a pickup file can only work if data.diagnostics'
75 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
76 & SQUEEZE_RIGHT , myThid)
77 WRITE(msgBuf,'(2A)') '**CAUTION** ',
78 & ' is not changed (<= further checking not yet implemented)'
79 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
80 & SQUEEZE_RIGHT , myThid)
81 ENDIF
82 #else /* undef DIAGNOSTICS_HAS_PICKUP */
83 C- stop if trying to use part of the code that is not compiled:
84 IF ( diag_pickup_read ) THEN
85 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
86 & 'diag_pickup_read is TRUE ',
87 & 'but DIAGNOSTICS_HAS_PICKUP is "#undef"'
88 CALL PRINT_ERROR( msgBuf , myThid)
89 ENDIF
90 IF ( diag_pickup_write ) THEN
91 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
92 & 'diag_pickup_write is TRUE ',
93 & 'but DIAGNOSTICS_HAS_PICKUP is "#undef"'
94 CALL PRINT_ERROR( msgBuf , myThid)
95 ENDIF
96 IF ( diag_pickup_read .OR. diag_pickup_write ) THEN
97 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
98 ENDIF
99 #endif /* DIAGNOSTICS_HAS_PICKUP */
100
101 C- File names:
102 DO ld = 2,nlists
103 DO m = 1,ld-1
104 IF ( fnames(ld).EQ.fnames(m) ) THEN
105 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
106 & 'found 2 identical filenames:'
107 CALL PRINT_ERROR( msgBuf , myThid )
108 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
109 & '1rst (m=', m, ' ): ', fnames(m)
110 CALL PRINT_ERROR( msgBuf , myThid )
111 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
112 & ' 2nd (n=', ld, ' ): ', fnames(ld)
113 CALL PRINT_ERROR( msgBuf , myThid )
114 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
115 ENDIF
116 ENDDO
117 ENDDO
118
119 DO ld = 2,diagSt_nbLists
120 DO m = 1,ld-1
121 IF ( diagSt_Fname(ld).EQ.diagSt_Fname(m) ) THEN
122 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
123 & 'found 2 identical stat_fname:'
124 CALL PRINT_ERROR( msgBuf , myThid )
125 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
126 & '1rst (m=', m, ' ): ', diagSt_Fname(m)
127 CALL PRINT_ERROR( msgBuf , myThid )
128 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
129 & ' 2nd (n=', ld, ' ): ', diagSt_Fname(ld)
130 CALL PRINT_ERROR( msgBuf , myThid )
131 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
132 ENDIF
133 ENDDO
134 ENDDO
135
136 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
137 C- Check for field that appears 2 times (or more) with differents frequency:
138 C disable this checking since now diagnostics pkg can handle this case.
139
140 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
141
142 C-- Vertical Interpolation: check for compatibility:
143 C better to stop here, rather much later, when trying to write output
144 DO ld = 1,nlists
145 IF ( fflags(ld)(2:2).EQ.'P' ) THEN
146 IF ( fluidIsAir ) THEN
147 C- check that interpolated levels are >0 & fall within the domain +/- X %
148 C (needs p>0 for p^kappa ; here take a 10 % margin)
149 margin = rkSign*(rF(Nr+1)-rF(1))*0.1 _d 0
150 DO k=1,nlevels(ld)
151 IF ( levs(k,ld)-MAX(rF(1),rF(Nr+1)).GT.margin
152 & .OR. levs(k,ld)-MIN(rF(1),rF(Nr+1)).LT.-margin
153 & .OR. levs(k,ld).LE.0. ) THEN
154
155 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
156 & 'Vertical Interp. for list l=', ld,
157 & ', filename: ', fnames(ld)
158 CALL PRINT_ERROR( msgBuf , myThid )
159 WRITE(msgBuf,'(2A,I4,3(A,F16.8))') 'DIAGNOSTICS_CHECK: ',
160 & ' lev(k=', k, ') p=', levs(k,ld),
161 & ' not in the domain:',rF(1),' :',rF(Nr+1)
162 CALL PRINT_ERROR( msgBuf , myThid )
163 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
164 ENDIF
165 ENDDO
166 ELSE
167 C- p^kappa interpolation: meaningfull only if Atmosphere & P-coordiante
168 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
169 & 'INTERP_VERT not allowed in this config'
170 CALL PRINT_ERROR( msgBuf , myThid )
171 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
172 & ' for list l=', ld, ', filename: ', fnames(ld)
173 CALL PRINT_ERROR( msgBuf , myThid )
174 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
175 ENDIF
176 IF (select_rStar.GT.0) THEN
177 C- If nonlinear free surf is active, need averaged pressures
178 DO md = 1,nfields(ld)
179 nd = ABS(jdiag(md,ld))
180 CALL DIAGNOSTICS_GET_POINTERS( 'RSURF ', ld,
181 & jpoint1, ipoint1, myThid )
182 IF ( useFIZHI .AND.
183 & gdiag(nd)(10:10) .EQ. 'L') THEN
184 CALL DIAGNOSTICS_GET_POINTERS('FIZPRES ', ld,
185 & jpoint2, ipoint2, myThid )
186 ELSE
187 CALL DIAGNOSTICS_GET_POINTERS('RCENTER ', ld,
188 & jpoint2, ipoint2, myThid )
189 ENDIF
190 IF ( ipoint1.EQ.0 .OR. ipoint2.EQ.0 ) THEN
191 WRITE(msgBuf,'(2A,I5)') 'DIAGNOSTICS_CHECK: ',
192 & 'to interpolate diags from output list:', ld
193 CALL PRINT_ERROR( msgBuf , myThid )
194 IF ( ipoint1.EQ.0 .AND. jpoint1.EQ.0 ) THEN
195 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
196 & 'needs to turn ON surface pressure diagnostic "RSURF "'
197 CALL PRINT_ERROR( msgBuf , myThid )
198 ELSEIF ( ipoint1.EQ.0 ) THEN
199 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
200 & 'needs surface pressure diagnostic "RSURF " ',
201 & 'with same output time'
202 CALL PRINT_ERROR( msgBuf , myThid )
203 ENDIF
204 IF ( ipoint2.EQ.0 .AND. jpoint2.EQ.0 ) THEN
205 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
206 & 'needs to turn ON 3-D pressure diagnostic "RCENTER "'
207 CALL PRINT_ERROR( msgBuf , myThid )
208 ELSEIF ( ipoint2.EQ.0 ) THEN
209 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
210 & 'needs 3-D pressure diagnostic "RCENTER " ',
211 & 'with same output time'
212 CALL PRINT_ERROR( msgBuf , myThid )
213 ENDIF
214 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
215 ENDIF
216 ENDDO
217 ENDIF
218 ENDIF
219 ENDDO
220
221 _END_MASTER(myThid)
222
223 RETURN
224 END

  ViewVC Help
Powered by ViewVC 1.1.22