/[MITgcm]/MITgcm/pkg/exf/exf_check_range.F
ViewVC logotype

Annotation of /MITgcm/pkg/exf/exf_check_range.F

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


Revision 1.33 - (hide annotations) (download)
Fri Jan 27 17:01:04 2017 UTC (7 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.32: +139 -165 lines
doesn't need to include FFIELDS.h

1 jmc 1.33 C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_check_range.F,v 1.32 2017/01/11 03:45:34 gforget Exp $
2 jmc 1.27 C $Name: $
3 heimbach 1.1
4     #include "EXF_OPTIONS.h"
5    
6 jmc 1.33 SUBROUTINE EXF_CHECK_RANGE( myTime, myIter, myThid )
7 heimbach 1.1
8 jmc 1.33 C ==================================================================
9     C SUBROUTINE EXF_CHECK_RANGE
10     C ==================================================================
11 heimbach 1.1
12 jmc 1.33 IMPLICIT NONE
13 heimbach 1.1
14 jmc 1.33 C == global variables ==
15 heimbach 1.1 #include "EEPARAMS.h"
16     #include "SIZE.h"
17     #include "GRID.h"
18    
19 jmc 1.27 #include "EXF_PARAM.h"
20 jmc 1.33 c#include "EXF_CONSTANTS.h"
21 jmc 1.27 #include "EXF_FIELDS.h"
22 heimbach 1.1
23 jmc 1.33 C == routine arguments ==
24     C myThid - thread number for this instance of the routine.
25     _RL myTime
26     INTEGER myIter, myThid
27    
28     C == local variables ==
29     INTEGER i, j, bi, bj
30     INTEGER exferr
31 heimbach 1.1
32 jmc 1.33 C == end of interface ==
33 heimbach 1.1
34 heimbach 1.3 exferr = 0
35    
36 jmc 1.29 C-- Only master thread can safely write directly to standard output:
37     _BARRIER
38     _BEGIN_MASTER( myThid )
39 jmc 1.33
40     c DO bj = myByLo(myThid), myByHi(myThid)
41     c DO bi = myBxLo(myThid), myBxHi(myThid)
42     DO bj = 1, nSy
43     DO bi = 1, nSx
44 dimitri 1.26
45     C Change checking range because some atmospheric fields will
46     C not always have valid values in the tile edges.
47 jmc 1.33 c DO j = 1-OLy, sNy+OLy
48     c DO i = 1-OLx, sNx+OLx
49     DO j = 1, sNy
50     DO i = 1, sNx
51    
52     C Heat flux.
53     IF ( ( hflux(i,j,bi,bj) .GT. 1600. .OR.
54 mlosch 1.25 & hflux(i,j,bi,bj) .LT. -500. ) .AND.
55 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
56     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
57 mlosch 1.25 & 'EXF WARNING: hflux out of range for bi,bj,i,j,it= ',
58 jmc 1.33 & bi, bj, i, j, myIter, hflux(i,j,bi,bj)
59 mlosch 1.25 exferr = 1
60 jmc 1.33 ENDIF
61    
62     C Freshwater flux.
63     IF ( ABS(sflux(i,j,bi,bj)) .GT. 1.E-6 .AND.
64     & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
65     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
66 mlosch 1.25 & 'EXF WARNING: sflux out of range for bi,bj,i,j,it= ',
67 jmc 1.33 & bi, bj, i, j, myIter, sflux(i,j,bi,bj)
68 mlosch 1.25 exferr = 1
69 jmc 1.33 ENDIF
70    
71     C Zonal wind stress.
72     IF ( ABS(ustress(i,j,bi,bj)) .GT. 2.7 .AND.
73     & maskW(i,j,1,bi,bj) .NE. 0. ) THEN
74     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
75 mlosch 1.25 & 'EXF WARNING: ustress out of range for bi,bj,i,j,it= ',
76 jmc 1.33 & bi, bj, i, j, myIter, ustress(i,j,bi,bj)
77 mlosch 1.25 exferr = 1
78 jmc 1.33 ENDIF
79    
80     C Meridional wind stress.
81     IF ( ABS(vstress(i,j,bi,bj)) .GT. 2.3 .AND.
82     & maskS(i,j,1,bi,bj) .NE. 0. ) THEN
83     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
84 mlosch 1.25 & 'EXF WARNING: vstress out of range for bi,bj,i,j,it= ',
85 jmc 1.33 & bi, bj, i, j, myIter, vstress(i,j,bi,bj)
86 mlosch 1.25 exferr = 1
87 jmc 1.33 ENDIF
88    
89     IF ( useAtmWind ) THEN
90     C zonal wind speed
91     IF ( ABS(uwind(i,j,bi,bj)) .GT. 100. .AND.
92     & maskW(i,j,1,bi,bj) .NE. 0. ) THEN
93     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
94 mlosch 1.25 & 'EXF WARNING: uwind out of range for bi,bj,i,j,it= ',
95 jmc 1.33 & bi, bj, i, j, myIter, uwind(i,j,bi,bj)
96     exferr = 1
97     ENDIF
98    
99     C zonal wind speed
100     IF ( ABS(vwind(i,j,bi,bj)) .GT. 100. .AND.
101     & maskS(i,j,1,bi,bj) .NE. 0. ) THEN
102     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
103 mlosch 1.25 & 'EXF WARNING: vwind out of range for bi,bj,i,j,it= ',
104 jmc 1.33 & bi, bj, i, j, myIter, vwind(i,j,bi,bj)
105     exferr = 1
106     ENDIF
107     ENDIF
108    
109     C wind speed modulus
110     IF ( ( wspeed(i,j,bi,bj) .LT. 0. .OR.
111 mlosch 1.25 & wspeed(i,j,bi,bj) .GT. 100. ) .AND.
112 jmc 1.33 & maskS(i,j,1,bi,bj) .NE. 0. ) THEN
113     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
114 mlosch 1.25 & 'EXF WARNING: wspeed out of range for bi,bj,i,j,it= ',
115 jmc 1.33 & bi, bj, i, j, myIter, wspeed(i,j,bi,bj)
116 mlosch 1.25 exferr = 1
117 jmc 1.33 ENDIF
118    
119 heimbach 1.1 #ifdef ALLOW_ATM_TEMP
120 jmc 1.33 C 2-m air temperature
121     IF ( (atemp(i,j,bi,bj) .LT. 183 .OR.
122 mlosch 1.25 & atemp(i,j,bi,bj) .GT. 343 ) .AND.
123 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
124     WRITE(standardMessageUnit,'(2A,5(1X,I6),2X,D22.15)')
125 mlosch 1.25 & 'EXF WARNING: atemp + exf_offset_atemp ',
126     & 'out of range for bi,bj,i,j,it= ',
127 jmc 1.33 & bi, bj, i, j, myIter, atemp(i,j,bi,bj)
128 mlosch 1.25 exferr = 1
129 jmc 1.33 ENDIF
130    
131     C 2-m specific humidity
132     IF ( (aqh(i,j,bi,bj) .LT. 0. .OR.
133 mlosch 1.25 & aqh(i,j,bi,bj) .GT. 0.1 ) .AND.
134 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
135     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
136 mlosch 1.25 & 'EXF WARNING: aqh out of range for bi,bj,i,j,it= ',
137 jmc 1.33 & bi, bj, i, j, myIter, aqh(i,j,bi,bj)
138 mlosch 1.25 exferr = 1
139 jmc 1.33 ENDIF
140    
141     C precipitation rate
142     IF ( (precip(i,j,bi,bj) .LT. 0. .OR.
143 mlosch 1.25 & precip(i,j,bi,bj) .GT. 2.E-6 ) .AND.
144 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
145     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
146 mlosch 1.25 & 'EXF WARNING: precip out of range for bi,bj,i,j,it= ',
147 jmc 1.33 & bi, bj, i, j, myIter, precip(i,j,bi,bj)
148 mlosch 1.25 exferr = 1
149 jmc 1.33 ENDIF
150    
151     C snow
152     IF ( (snowprecip(i,j,bi,bj) .LT. 0. .OR.
153 mlosch 1.25 & snowprecip(i,j,bi,bj) .GT. 2.E-6 ) .AND.
154 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
155     WRITE(standardMessageUnit,'(2A,5(1X,I6),2X,D22.15)')
156     & 'EXF WARNING: snowprecip out of range ',
157 mlosch 1.25 & 'for bi,bj,i,j,it= ',
158 jmc 1.33 & bi, bj, i, j, myIter, snowprecip(i,j,bi,bj)
159 mlosch 1.25 exferr = 1
160 jmc 1.33 ENDIF
161 heimbach 1.1 #endif
162    
163     #ifdef SHORTWAVE_HEATING
164 jmc 1.33 C Short wave radiative flux.
165     IF ( (swflux(i,j,bi,bj) .GT. 1. .OR.
166 mlosch 1.25 & swflux(i,j,bi,bj) .LT. -1000. ) .AND.
167 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
168     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
169 mlosch 1.25 & 'EXF WARNING: swflux out of range for bi,bj,i,j,it= ',
170 jmc 1.33 & bi, bj, i, j, myIter, swflux(i,j,bi,bj)
171 mlosch 1.25 exferr = 1
172 jmc 1.33 ENDIF
173 heimbach 1.1 #endif
174    
175 heimbach 1.3 #ifdef ALLOW_RUNOFF
176 jmc 1.33 C Runoff.
177     IF ( (runoff(i,j,bi,bj) .LT. 0. .OR.
178 mlosch 1.25 & runoff(i,j,bi,bj) .GT. 1.E-6 ) .AND.
179 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
180     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
181 mlosch 1.25 & 'EXF WARNING: runoff out of range for bi,bj,i,j,it= ',
182 jmc 1.33 & bi, bj, i, j, myIter, runoff(i,j,bi,bj)
183     WRITE(standardMessageUnit,'(A)')
184 mlosch 1.25 & 'Please note that input units for runoff are'
185 jmc 1.33 WRITE(standardMessageUnit,'(A)')
186 mlosch 1.25 & 'm/s not m/yr. If input file is in m/yr, set'
187 jmc 1.33 WRITE(standardMessageUnit,'(A)')
188 mlosch 1.25 & 'exf_inscal_runoff=3.170979198E-8'
189 jmc 1.33 WRITE(standardMessageUnit,'(A)')
190 mlosch 1.25 & 'in the data.exf input file.'
191     exferr = 1
192 jmc 1.33 ENDIF
193 dimitri 1.31 # ifdef ALLOW_RUNOFTEMP
194 jmc 1.33 C Runoff temperature.
195     IF ( (runoftemp(i,j,bi,bj) .LT. -2. .OR.
196 dimitri 1.31 & runoff(i,j,bi,bj) .GT. 36 ) .AND.
197 jmc 1.33 & maskC(i,j,1,bi,bj) .NE. 0. ) THEN
198     WRITE(standardMessageUnit,'(A,5(1X,I6),2X,D22.15)')
199 dimitri 1.31 & 'EXF WARNING: runoftemp out of range at bi,bj,i,j,it= ',
200 jmc 1.33 & bi, bj, i, j, myIter, runoff(i,j,bi,bj)
201 dimitri 1.31 exferr = 1
202 jmc 1.33 ENDIF
203 dimitri 1.31 # endif /* ALLOW_RUNOFTEMP */
204     #endif /* ALLOW_RUNOFF */
205 jmc 1.33 ENDDO
206     ENDDO
207 heimbach 1.1
208 jmc 1.33 ENDDO
209     ENDDO
210    
211     IF ( exferr .NE. 0 ) THEN
212     WRITE(standardMessageUnit,'(A)')
213 mlosch 1.25 & 'EXF WARNING: If you think these values are OK '
214 jmc 1.33 WRITE(standardMessageUnit,'(A)')
215 mlosch 1.25 & 'EXF WARNING: then set useExfCheckRange=.FALSE.'
216 jmc 1.29 STOP 'ABNORMAL END: S/R EXF_CHECK_RANGE'
217 jmc 1.33 ENDIF
218 jmc 1.29 _END_MASTER( myThid )
219 mlosch 1.25
220 jmc 1.29 RETURN
221     END

  ViewVC Help
Powered by ViewVC 1.1.22