/[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.7 - (show annotations) (download)
Sun Dec 24 20:22:56 2006 UTC (17 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58u_post, checkpoint58w_post, checkpoint58x_post, checkpoint58t_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint59, checkpoint58y_post, checkpoint58v_post
Changes since 1.6: +95 -12 lines
add some early check if doing vertical.interp:
 better to stop here, rather much later, when trying to write output.

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_check.F,v 1.6 2005/11/04 01:30:33 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_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 #ifdef DIAGNOSTICS_HAS_PICKUP
42 IF ( diag_pickup_read ) THEN
43 WRITE(msgBuf,'(2A)') '**CAUTION** (DIAGNOSTICS_CHECK): ',
44 & 'reading diagnostics previous state'
45 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
46 & SQUEEZE_RIGHT , myThid)
47 WRITE(msgBuf,'(2A)') '**CAUTION** ',
48 & ' from a pickup file can only work if data.diagnostics'
49 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
50 & SQUEEZE_RIGHT , myThid)
51 WRITE(msgBuf,'(2A)') '**CAUTION** ',
52 & ' is not changed (<= further checking not yet implemented)'
53 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
54 & SQUEEZE_RIGHT , myThid)
55 ENDIF
56 #else /* undef DIAGNOSTICS_HAS_PICKUP */
57 C- stop if trying to use part of the code that is not compiled:
58 IF ( diag_pickup_read ) THEN
59 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
60 & 'diag_pickup_read is TRUE ',
61 & 'but DIAGNOSTICS_HAS_PICKUP is "#undef"'
62 CALL PRINT_ERROR( msgBuf , myThid)
63 ENDIF
64 IF ( diag_pickup_write ) THEN
65 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
66 & 'diag_pickup_write is TRUE ',
67 & 'but DIAGNOSTICS_HAS_PICKUP is "#undef"'
68 CALL PRINT_ERROR( msgBuf , myThid)
69 ENDIF
70 IF ( diag_pickup_read .OR. diag_pickup_write ) THEN
71 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
72 ENDIF
73 #endif /* DIAGNOSTICS_HAS_PICKUP */
74
75 C- File names:
76 DO ld = 2,nlists
77 DO m = 1,ld-1
78 IF ( fnames(ld).EQ.fnames(m) ) THEN
79 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
80 & 'found 2 identical filenames:'
81 CALL PRINT_ERROR( msgBuf , myThid )
82 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
83 & '1rst (m=', m, ' ): ', fnames(m)
84 CALL PRINT_ERROR( msgBuf , myThid )
85 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
86 & ' 2nd (n=', ld, ' ): ', fnames(ld)
87 CALL PRINT_ERROR( msgBuf , myThid )
88 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
89 ENDIF
90 ENDDO
91 ENDDO
92
93 DO ld = 2,diagSt_nbLists
94 DO m = 1,ld-1
95 IF ( diagSt_Fname(ld).EQ.diagSt_Fname(m) ) THEN
96 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
97 & 'found 2 identical stat_fname:'
98 CALL PRINT_ERROR( msgBuf , myThid )
99 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
100 & '1rst (m=', m, ' ): ', diagSt_Fname(m)
101 CALL PRINT_ERROR( msgBuf , myThid )
102 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
103 & ' 2nd (n=', ld, ' ): ', diagSt_Fname(ld)
104 CALL PRINT_ERROR( msgBuf , myThid )
105 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
106 ENDIF
107 ENDDO
108 ENDDO
109
110 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
111 C- Check for field that appears 2 times (or more) with differents frequency:
112 C disable this checking since now diagnostics pkg can handle this case.
113
114 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
115
116 C-- Vertical Interpolation: check for compatibility:
117 C better to stop here, rather much later, when trying to write output
118 DO ld = 1,nlists
119 IF ( fflags(ld)(2:2).EQ.'P' ) THEN
120 IF ( fluidIsAir ) THEN
121 C- check that interpolated levels are >0 & fall within the domain +/- X %
122 C (needs p>0 for p^kappa ; here take a 10 % margin)
123 margin = rkSign*(rF(Nr+1)-rF(1))*0.1 _d 0
124 DO k=1,nlevels(ld)
125 IF ( levs(k,ld)-MAX(rF(1),rF(Nr+1)).GT.margin
126 & .OR. levs(k,ld)-MIN(rF(1),rF(Nr+1)).LT.-margin
127 & .OR. levs(k,ld).LE.0. ) THEN
128
129 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
130 & 'Vertical Interp. for list l=', ld,
131 & ', filename: ', fnames(ld)
132 CALL PRINT_ERROR( msgBuf , myThid )
133 WRITE(msgBuf,'(2A,I4,3(A,F16.8))') 'DIAGNOSTICS_CHECK: ',
134 & ' lev(k=', k, ') p=', levs(k,ld),
135 & ' not in the domain:',rF(1),' :',rF(Nr+1)
136 CALL PRINT_ERROR( msgBuf , myThid )
137 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
138 ENDIF
139 ENDDO
140 ELSE
141 C- p^kappa interpolation: meaningfull only if Atmosphere & P-coordiante
142 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
143 & 'INTERP_VERT not allowed in this config'
144 CALL PRINT_ERROR( msgBuf , myThid )
145 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_CHECK: ',
146 & ' for list l=', ld, ', filename: ', fnames(ld)
147 CALL PRINT_ERROR( msgBuf , myThid )
148 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
149 ENDIF
150 IF (select_rStar.GT.0) THEN
151 C- If nonlinear free surf is active, need averaged pressures
152 DO md = 1,nfields(ld)
153 nd = jdiag(md,ld)
154 CALL DIAGNOSTICS_GET_POINTERS( 'RSURF ', ld,
155 & jpoint1, ipoint1, myThid )
156 IF ( useFIZHI .AND.
157 & gdiag(nd)(10:10) .EQ. 'L') THEN
158 CALL DIAGNOSTICS_GET_POINTERS('FIZPRES ', ld,
159 & jpoint2, ipoint2, myThid )
160 ELSE
161 CALL DIAGNOSTICS_GET_POINTERS('RCENTER ', ld,
162 & jpoint2, ipoint2, myThid )
163 ENDIF
164 IF ( ipoint1.EQ.0 .OR. ipoint2.EQ.0 ) THEN
165 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_CHECK: ',
166 & 'to interpolate diags from output list:', ld
167 CALL PRINT_ERROR( msgBuf , myThid )
168 IF ( ipoint1.EQ.0 .AND. jpoint1.EQ.0 ) THEN
169 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
170 & 'needs to turn ON surface pressure diagnostic "RSURF "'
171 CALL PRINT_ERROR( msgBuf , myThid )
172 ELSEIF ( ipoint1.EQ.0 ) THEN
173 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
174 & 'needs surface pressure diagnostic "RSURF " ',
175 & 'with same output time'
176 CALL PRINT_ERROR( msgBuf , myThid )
177 ENDIF
178 IF ( ipoint2.EQ.0 .AND. jpoint2.EQ.0 ) THEN
179 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
180 & 'needs to turn ON 3-D pressure diagnostic "RCENTER "'
181 CALL PRINT_ERROR( msgBuf , myThid )
182 ELSEIF ( ipoint2.EQ.0 ) THEN
183 WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_CHECK: ',
184 & 'needs 3-D pressure diagnostic "RCENTER " ',
185 & 'with same output time'
186 CALL PRINT_ERROR( msgBuf , myThid )
187 ENDIF
188 STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
189 ENDIF
190 ENDDO
191 ENDIF
192 ENDIF
193 ENDDO
194
195 _END_MASTER(myThid)
196
197 RETURN
198 END

  ViewVC Help
Powered by ViewVC 1.1.22