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

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

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


Revision 1.10 - (hide annotations) (download)
Wed Jan 11 00:22:48 2017 UTC (7 years, 3 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66i, checkpoint66h
Changes since 1.9: +20 -1 lines
- add run-time variable diagMdsDir to specify a directory where diagnostics will be written when using mds
- note: cannot be used with either pkg/mnc or mdsioLocalDir that alredy use subirectories

1 gforget 1.10 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_check.F,v 1.9 2011/06/27 22:23:09 jmc Exp $
2 jmc 1.1 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 jmc 1.7
16 jmc 1.1 C !USES:
17     IMPLICIT NONE
18     #include "SIZE.h"
19     #include "EEPARAMS.h"
20     #include "PARAMS.h"
21 jmc 1.7 #include "GRID.h"
22 jmc 1.1 #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 jmc 1.7 INTEGER ld,md,nd
32     INTEGER k,m
33     INTEGER jpoint1, ipoint1, jpoint2, ipoint2
34     _RL margin
35 jmc 1.1
36     _BEGIN_MASTER(myThid)
37    
38     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
39     C Check diagnostics parameter consistency
40    
41 jmc 1.9 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 gforget 1.10 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 jmc 1.3 #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 jmc 1.7
101 jmc 1.1 C- File names:
102 jmc 1.7 DO ld = 2,nlists
103     DO m = 1,ld-1
104     IF ( fnames(ld).EQ.fnames(m) ) THEN
105 jmc 1.1 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
106     & 'found 2 identical filenames:'
107     CALL PRINT_ERROR( msgBuf , myThid )
108 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
109 jmc 1.1 & '1rst (m=', m, ' ): ', fnames(m)
110     CALL PRINT_ERROR( msgBuf , myThid )
111 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
112 jmc 1.7 & ' 2nd (n=', ld, ' ): ', fnames(ld)
113 jmc 1.1 CALL PRINT_ERROR( msgBuf , myThid )
114     STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
115     ENDIF
116     ENDDO
117     ENDDO
118    
119 jmc 1.7 DO ld = 2,diagSt_nbLists
120     DO m = 1,ld-1
121     IF ( diagSt_Fname(ld).EQ.diagSt_Fname(m) ) THEN
122 jmc 1.4 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_CHECK: ',
123     & 'found 2 identical stat_fname:'
124     CALL PRINT_ERROR( msgBuf , myThid )
125 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
126 jmc 1.4 & '1rst (m=', m, ' ): ', diagSt_Fname(m)
127     CALL PRINT_ERROR( msgBuf , myThid )
128 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
129 jmc 1.7 & ' 2nd (n=', ld, ' ): ', diagSt_Fname(ld)
130 jmc 1.4 CALL PRINT_ERROR( msgBuf , myThid )
131     STOP 'ABNORMAL END: S/R DIAGNOSTICS_CHECK'
132     ENDIF
133     ENDDO
134     ENDDO
135    
136 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
137     C- Check for field that appears 2 times (or more) with differents frequency:
138 jmc 1.5 C disable this checking since now diagnostics pkg can handle this case.
139 jmc 1.1
140     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
141    
142 jmc 1.7 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 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
156 jmc 1.7 & '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 jmc 1.8 WRITE(msgBuf,'(2A,I5,2A)') 'DIAGNOSTICS_CHECK: ',
172 jmc 1.7 & ' 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 = 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 jmc 1.8 WRITE(msgBuf,'(2A,I5)') 'DIAGNOSTICS_CHECK: ',
192 jmc 1.7 & '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 jmc 1.1 _END_MASTER(myThid)
222    
223     RETURN
224     END

  ViewVC Help
Powered by ViewVC 1.1.22