3 |
|
|
4 |
#include "EXF_OPTIONS.h" |
#include "EXF_OPTIONS.h" |
5 |
|
|
6 |
|
CBOP |
7 |
|
C !ROUTINE: EXF_CHECK |
8 |
|
C !INTERFACE: |
9 |
|
|
10 |
SUBROUTINE EXF_CHECK( myThid ) |
SUBROUTINE EXF_CHECK( myThid ) |
11 |
|
|
12 |
c ================================================================== |
C !DESCRIPTION: \bv |
13 |
c SUBROUTINE EXF_CHECK |
C *==========================================================* |
14 |
c ================================================================== |
C | S/R EXF_CHECK |
15 |
c |
C | o Check parameters and other package dependences |
16 |
IMPLICIT NONE |
C *==========================================================* |
17 |
|
C \ev |
18 |
|
|
19 |
c == global variables == |
C !USES: |
20 |
|
IMPLICIT NONE |
21 |
|
|
22 |
|
C == Global variables === |
23 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
24 |
#include "SIZE.h" |
#include "SIZE.h" |
25 |
#include "PARAMS.h" |
#include "PARAMS.h" |
26 |
|
|
27 |
#include "EXF_PARAM.h" |
#include "EXF_PARAM.h" |
28 |
#include "EXF_CONSTANTS.h" |
#include "EXF_CONSTANTS.h" |
|
c == routine arguments == |
|
|
|
|
|
c myThid - thread number for this instance of the routine. |
|
29 |
|
|
30 |
|
C !INPUT/OUTPUT PARAMETERS: |
31 |
|
C myThid :: my Thread Id number |
32 |
INTEGER myThid |
INTEGER myThid |
33 |
|
|
34 |
c == local variables == |
C !LOCAL VARIABLES: |
|
|
|
35 |
C msgBuf :: Informational/error message buffer |
C msgBuf :: Informational/error message buffer |
36 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
37 |
|
INTEGER errCount |
38 |
|
CEOP |
39 |
|
|
40 |
|
_BEGIN_MASTER(myThid) |
41 |
|
errCount = 0 |
42 |
|
|
43 |
c == end of interface == |
WRITE(msgBuf,'(A)') 'EXF_CHECK: #define ALLOW_EXF' |
44 |
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
45 |
|
& SQUEEZE_RIGHT, myThid ) |
46 |
|
|
47 |
c check for consistency |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
48 |
|
C check for consistency |
49 |
IF (.NOT. |
IF (.NOT. |
50 |
& (exf_iprec.EQ.precFloat32 .OR. exf_iprec.EQ.precFloat64) |
& (exf_iprec.EQ.precFloat32 .OR. exf_iprec.EQ.precFloat64) |
51 |
& ) THEN |
& ) THEN |
52 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
53 |
& 'S/R EXF_CHECK: value of exf_iprec not allowed' |
& 'S/R EXF_CHECK: value of exf_iprec not allowed' |
54 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
55 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
56 |
ENDIF |
ENDIF |
57 |
|
|
58 |
IF (repeatPeriod.lt.0.) THEN |
IF (repeatPeriod.lt.0.) THEN |
59 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
60 |
& 'S/R EXF_CHECK: repeatPeriod must be positive' |
& 'S/R EXF_CHECK: repeatPeriod must be positive' |
61 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
62 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
63 |
ENDIF |
ENDIF |
64 |
|
|
65 |
IF (useExfYearlyFields.and.repeatPeriod.ne.0.) THEN |
IF (useExfYearlyFields.and.repeatPeriod.ne.0.) THEN |
66 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: The use of ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: The use of ', |
67 |
$ 'useExfYearlyFields AND repeatPeriod is not implemented' |
$ 'useExfYearlyFields AND repeatPeriod is not implemented' |
68 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
69 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
70 |
ENDIF |
ENDIF |
71 |
|
|
72 |
#ifdef ALLOW_BULKFORMULAE |
#ifdef ALLOW_BULKFORMULAE |
73 |
IF ( useAtmWind ) THEN |
IF ( useAtmWind ) THEN |
74 |
IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN |
IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN |
75 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
76 |
& 'S/R EXF_CHECK: use u,v_wind components but not wind-stress' |
& 'S/R EXF_CHECK: use u,v_wind components but not wind-stress' |
77 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
78 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
79 |
ENDIF |
ENDIF |
80 |
ENDIF |
ENDIF |
81 |
#endif |
#endif |
82 |
|
|
85 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
86 |
& 'S/R EXF_CHECK: read-in wind-stress but not u,v_wind components' |
& 'S/R EXF_CHECK: read-in wind-stress but not u,v_wind components' |
87 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
88 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
89 |
ENDIF |
ENDIF |
90 |
ENDIF |
ENDIF |
91 |
|
|
95 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported option', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported option', |
96 |
& ' when ALLOW_ZENITHANGLE is not defined' |
& ' when ALLOW_ZENITHANGLE is not defined' |
97 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
98 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
99 |
ENDIF |
ENDIF |
100 |
#endif |
#endif |
101 |
|
|
104 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ALLOW_ZENITHANGLE does ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ALLOW_ZENITHANGLE does ', |
105 |
& 'not work for carthesian and cylindrical grids' |
& 'not work for carthesian and cylindrical grids' |
106 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
107 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
108 |
ENDIF |
ENDIF |
109 |
IF ( select_ZenAlbedo.LT.0 .OR. select_ZenAlbedo.GT.3 ) THEN |
IF ( select_ZenAlbedo.LT.0 .OR. select_ZenAlbedo.GT.3 ) THEN |
110 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported ', |
111 |
& 'select_ZenAlbedo choice' |
& 'select_ZenAlbedo choice' |
112 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
113 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
114 |
ENDIF |
ENDIF |
115 |
IF ( select_ZenAlbedo.EQ.2 .) THEN |
IF ( select_ZenAlbedo.EQ.2 .) THEN |
116 |
WRITE(msgBuf,'(A,A)') |
WRITE(msgBuf,'(A,A)') |
117 |
& 'S/R EXF_CHECK: *** WARNING *** for daily mean albedo, ', |
& 'S/R EXF_CHECK: *** WARNING *** for daily mean albedo, ', |
118 |
& 'it is advised to use select_ZenAlbedo.EQ.1 instead of 2' |
& 'it is advised to use select_ZenAlbedo.EQ.1 instead of 2' |
119 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
123 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: using diurnal albedo ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: using diurnal albedo ', |
124 |
& 'formula requires diurnal downward shortwave forcing' |
& 'formula requires diurnal downward shortwave forcing' |
125 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
126 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
127 |
ENDIF |
ENDIF |
128 |
IF ( select_ZenAlbedo.GT.2 .AND. swdownperiod.GT. 3600 ) then |
IF ( select_ZenAlbedo.GT.2 .AND. swdownperiod.GT. 3600 ) then |
129 |
WRITE(msgBuf,'(A,A,A)') |
WRITE(msgBuf,'(A,A,A)') |
136 |
#endif |
#endif |
137 |
|
|
138 |
#ifdef USE_EXF_INTERPOLATION |
#ifdef USE_EXF_INTERPOLATION |
139 |
IF ( climsstfile .NE. ' ' ) THEN |
IF ( usingCartesianGrid ) THEN |
140 |
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
141 |
|
& 'USE_EXF_INTERPOLATION assumes latitude/longitude' |
142 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
143 |
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
144 |
|
& 'input and output coordinates. Trivial to extend to' |
145 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
146 |
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
147 |
|
& 'cartesian coordinates, but has not yet been done.' |
148 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
149 |
|
errCount = errCount + 1 |
150 |
|
ENDIF |
151 |
|
|
152 |
|
IF ( climsst_interpMethod.GE.1 .AND. climsstfile.NE.' ' ) THEN |
153 |
IF ( climsst_nlat .GT. MAX_LAT_INC ) THEN |
IF ( climsst_nlat .GT. MAX_LAT_INC ) THEN |
154 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsst_nlat > MAX_LAT_INC' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsst_nlat > MAX_LAT_INC' |
155 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
156 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
157 |
ENDIF |
ENDIF |
158 |
IF ( (climsst_interpMethod.GT.0).AND. |
IF ( climsst_lon_inc.GT.500. ) THEN |
159 |
& (climsst_lon_inc.EQ.UNSET_RL) ) THEN |
WRITE(msgBuf,'(2A,1PE16.8)') 'S/R EXF_CHECK: ', |
160 |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: either ', |
& 'Invalid value for: climsst_lon_inc =', climsst_lon_inc |
161 |
& 'climsst_interpMethod must be set to 0 (no interpolation)' |
c & 'Invalid value for: snowprecip_lon_inc =', snowprecip_lon_inc |
162 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
163 |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: or climsst_lon_inc, etc. ', |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: Fix it ', |
164 |
& 'must be defined explicitely in data.exf' |
& 'or Turn off climsst-interp (interpMethod=0)' |
165 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
166 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
167 |
ENDIF |
ENDIF |
168 |
ENDIF |
ENDIF |
169 |
IF ( climsssfile .NE. ' ' ) THEN |
IF ( climsss_interpMethod.GE.1 .AND. climsssfile.NE.' ' ) THEN |
170 |
IF ( climsss_nlat .GT. MAX_LAT_INC ) THEN |
IF ( climsss_nlat .GT. MAX_LAT_INC ) THEN |
171 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsss_nlat > MAX_LAT_INC' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsss_nlat > MAX_LAT_INC' |
172 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
173 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
174 |
ENDIF |
ENDIF |
175 |
IF ( (climsss_interpMethod.GT.0).AND. |
IF ( climsss_lon_inc.GT.500. ) THEN |
176 |
& (climsss_lon_inc.EQ.UNSET_RL) ) THEN |
WRITE(msgBuf,'(2A,1PE16.8)') 'S/R EXF_CHECK: ', |
177 |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: either ', |
& 'Invalid value for: climsss_lon_inc =', climsss_lon_inc |
|
& 'climsss_interpMethod must be set to 0 (no interpolation)' |
|
178 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
179 |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: or climsss_lon_inc, etc. ', |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: Fix it ', |
180 |
& 'must be defined explicitely in data.exf' |
& 'or Turn off climsst-interp (interpMethod=0)' |
181 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
182 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
183 |
ENDIF |
ENDIF |
184 |
ENDIF |
ENDIF |
185 |
IF ( usingCartesianGrid ) THEN |
|
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
|
|
& 'USE_EXF_INTERPOLATION assumes latitude/longitude' |
|
|
CALL PRINT_ERROR( msgBuf, myThid ) |
|
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
|
|
& 'input and output coordinates. Trivial to extend to' |
|
|
CALL PRINT_ERROR( msgBuf, myThid ) |
|
|
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
|
|
& 'cartesian coordinates, but has not yet been done.' |
|
|
CALL PRINT_ERROR( msgBuf, myThid ) |
|
|
STOP 'ABNORMAL END: S/R EXF_CHECK' |
|
|
ENDIF |
|
186 |
C- some restrictions on 2-component vector field (might be relaxed later on) |
C- some restrictions on 2-component vector field (might be relaxed later on) |
187 |
IF ( ( uwind_interpMethod.GE.1 .AND. uwindfile.NE.' ' ) .OR. |
IF ( ( uwind_interpMethod.GE.1 .AND. uwindfile.NE.' ' ) .OR. |
188 |
& ( vwind_interpMethod.GE.1 .AND. vwindfile.NE.' ' ) ) THEN |
& ( vwind_interpMethod.GE.1 .AND. vwindfile.NE.' ' ) ) THEN |
190 |
IF ( uwind_interpMethod.EQ.0 .OR. uwindfile.EQ.' ' .OR. |
IF ( uwind_interpMethod.EQ.0 .OR. uwindfile.EQ.' ' .OR. |
191 |
& vwind_interpMethod.EQ.0 .OR. vwindfile.EQ.' ' ) THEN |
& vwind_interpMethod.EQ.0 .OR. vwindfile.EQ.' ' ) THEN |
192 |
C- stop if one expects interp+rotation (Curvilin-G) which will not happen |
C- stop if one expects interp+rotation (Curvilin-G) which will not happen |
193 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
194 |
& 'S/R EXF_CHECK: interp. needs 2 components (wind)' |
& 'S/R EXF_CHECK: interp. needs 2 components (wind)' |
195 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
196 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
197 |
ENDIF |
ENDIF |
198 |
IF ( uwindstartdate .NE. vwindstartdate .OR. |
IF ( uwindstartdate .NE. vwindstartdate .OR. |
199 |
& uwindperiod .NE. vwindperiod ) THEN |
& uwindperiod .NE. vwindperiod ) THEN |
204 |
& 'files have to have the same startdate and period, ', |
& 'files have to have the same startdate and period, ', |
205 |
& 'because S/R EXF_SET_UV assumes that.' |
& 'because S/R EXF_SET_UV assumes that.' |
206 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
207 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
208 |
ENDIF |
ENDIF |
209 |
ENDIF |
ENDIF |
210 |
ENDIF |
ENDIF |
211 |
IF ( (ustress_interpMethod.GE.1 .AND. ustressfile.NE.' ') .OR. |
IF ( (ustress_interpMethod.GE.1 .AND. ustressfile.NE.' ') .OR. |
212 |
& (vstress_interpMethod.GE.1 .AND. vstressfile.NE.' ') ) THEN |
& (vstress_interpMethod.GE.1 .AND. vstressfile.NE.' ') ) THEN |
213 |
IF ( readStressOnCgrid ) THEN |
IF ( readStressOnCgrid ) THEN |
214 |
WRITE(msgBuf,'(A,A)') |
WRITE(msgBuf,'(A,A)') |
215 |
& 'S/R EXF_CHECK: readStressOnCgrid=.TRUE. ', |
& 'S/R EXF_CHECK: readStressOnCgrid=.TRUE. ', |
216 |
& 'and interp wind-stress (=A-grid) are not compatible' |
& 'and interp wind-stress (=A-grid) are not compatible' |
217 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
218 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
219 |
ENDIF |
ENDIF |
220 |
IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN |
IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN |
221 |
IF ( ustress_interpMethod.EQ.0 .OR. ustressfile.EQ.' ' .OR. |
IF ( ustress_interpMethod.EQ.0 .OR. ustressfile.EQ.' ' .OR. |
222 |
& vstress_interpMethod.EQ.0 .OR. vstressfile.EQ.' ' ) THEN |
& vstress_interpMethod.EQ.0 .OR. vstressfile.EQ.' ' ) THEN |
223 |
C- stop if one expects interp+rotation (Curvilin-G) which will not happen |
C- stop if one expects interp+rotation (Curvilin-G) which will not happen |
224 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
225 |
& 'S/R EXF_CHECK: interp. needs 2 components (wind-stress)' |
& 'S/R EXF_CHECK: interp. needs 2 components (wind-stress)' |
226 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
227 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
228 |
ENDIF |
ENDIF |
229 |
IF ( ustressstartdate .NE. vstressstartdate .OR. |
IF ( ustressstartdate .NE. vstressstartdate .OR. |
230 |
& ustressperiod .NE. vstressperiod ) THEN |
& ustressperiod .NE. vstressperiod ) THEN |
235 |
& 'files have to have the same startdate and period, ', |
& 'files have to have the same startdate and period, ', |
236 |
& 'because S/R EXF_SET_UV assumes that.' |
& 'because S/R EXF_SET_UV assumes that.' |
237 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
238 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
239 |
ENDIF |
ENDIF |
240 |
ENDIF |
ENDIF |
241 |
ENDIF |
ENDIF |
250 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
251 |
& 'S/R EXF_CHECK: Select 1 wind-stress position: A or C-grid' |
& 'S/R EXF_CHECK: Select 1 wind-stress position: A or C-grid' |
252 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
253 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
254 |
ENDIF |
ENDIF |
255 |
IF (rotateStressOnAgrid.AND..NOT.readStressOnAgrid) THEN |
IF (rotateStressOnAgrid.AND..NOT.readStressOnAgrid) THEN |
256 |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: rotateStressOnAgrid ', |
WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: rotateStressOnAgrid ', |
257 |
& 'only applies to cases readStressOnAgrid is true' |
& 'only applies to cases readStressOnAgrid is true' |
258 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
259 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
260 |
ENDIF |
ENDIF |
261 |
|
|
262 |
ELSE |
ELSE |
263 |
IF ( readStressOnAgrid .OR. readStressOnCgrid .OR. |
IF ( readStressOnAgrid .OR. readStressOnCgrid .OR. |
264 |
& rotateStressOnAgrid) THEN |
& rotateStressOnAgrid) THEN |
265 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
266 |
& 'S/R EXF_CHECK: wind-stress position irrelevant' |
& 'S/R EXF_CHECK: wind-stress position irrelevant' |
267 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
268 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
269 |
ENDIF |
ENDIF |
270 |
ENDIF |
ENDIF |
271 |
|
|
272 |
#ifdef USE_NO_INTERP_RUNOFF |
#ifdef USE_NO_INTERP_RUNOFF |
273 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
274 |
& 'S/R EXF_CHECK: USE_NO_INTERP_RUNOFF code has been removed;' |
& 'S/R EXF_CHECK: USE_NO_INTERP_RUNOFF code has been removed;' |
275 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
276 |
WRITE(msgBuf,'(A,A)') |
WRITE(msgBuf,'(A,A)') |
277 |
& 'S/R EXF_CHECK: use instead "runoff_interpMethod=0"', |
& 'S/R EXF_CHECK: use instead "runoff_interpMethod=0"', |
278 |
& ' in "data.exf" (EXF_NML_04)' |
& ' in "data.exf" (EXF_NML_04)' |
279 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
280 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
281 |
#endif /* USE_NO_INTERP_RUNOFF */ |
#endif /* USE_NO_INTERP_RUNOFF */ |
282 |
|
|
283 |
#ifdef ALLOW_CLIMTEMP_RELAXATION |
#ifdef ALLOW_CLIMTEMP_RELAXATION |
284 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
285 |
& 'ALLOW_CLIMTEMP_RELAXATION no longer supported. Use pkg/rbcs' |
& 'ALLOW_CLIMTEMP_RELAXATION no longer supported. Use pkg/rbcs' |
286 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
287 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
288 |
#endif |
#endif |
289 |
|
|
290 |
#ifdef ALLOW_CLIMSALT_RELAXATION |
#ifdef ALLOW_CLIMSALT_RELAXATION |
291 |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ', |
292 |
& 'ALLOW_CLIMSALT_RELAXATION no longer supported. Use pkg/rbcs' |
& 'ALLOW_CLIMSALT_RELAXATION no longer supported. Use pkg/rbcs' |
293 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
294 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
295 |
#endif |
#endif |
296 |
|
|
297 |
IF ( climsstTauRelax.NE.0. ) THEN |
IF ( climsstTauRelax.NE.0. ) THEN |
298 |
#ifndef ALLOW_CLIMSST_RELAXATION |
#ifndef ALLOW_CLIMSST_RELAXATION |
299 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0' |
300 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
301 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
302 |
& 'S/R EXF_CHECK: but ALLOW_CLIMSST_RELAXATION is not defined' |
& 'S/R EXF_CHECK: but ALLOW_CLIMSST_RELAXATION is not defined' |
303 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
304 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
305 |
#endif |
#endif |
306 |
IF ( climsstfile.EQ.' ' ) THEN |
IF ( climsstfile.EQ.' ' ) THEN |
307 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0 but' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0 but' |
308 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
309 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstfile is not set' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstfile is not set' |
310 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
311 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
312 |
ENDIf |
ENDIf |
313 |
ENDIf |
ENDIf |
314 |
|
|
315 |
IF ( climsssTauRelax.NE.0. ) THEN |
IF ( climsssTauRelax.NE.0. ) THEN |
316 |
#ifndef ALLOW_CLIMSSS_RELAXATION |
#ifndef ALLOW_CLIMSSS_RELAXATION |
317 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0' |
318 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
319 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
320 |
& 'S/R EXF_CHECK: but ALLOW_CLIMSSS_RELAXATION is not defined' |
& 'S/R EXF_CHECK: but ALLOW_CLIMSSS_RELAXATION is not defined' |
321 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
322 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
323 |
#endif |
#endif |
324 |
IF ( climsssfile.EQ.' ' ) THEN |
IF ( climsssfile.EQ.' ' ) THEN |
325 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0 but' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0 but' |
326 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
327 |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssfile is not set' |
WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssfile is not set' |
328 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
329 |
STOP 'ABNORMAL END: S/R EXF_CHECK' |
errCount = errCount + 1 |
330 |
ENDIF |
ENDIF |
331 |
ENDIF |
ENDIF |
332 |
|
|
333 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
334 |
|
|
335 |
|
IF ( errCount.GE.1 ) THEN |
336 |
|
WRITE(msgBuf,'(A,I3,A)') |
337 |
|
& 'EXF_CHECK: detected', errCount,' fatal error(s)' |
338 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
339 |
|
CALL ALL_PROC_DIE( 0 ) |
340 |
|
STOP 'ABNORMAL END: S/R EXF_CHECK' |
341 |
|
ENDIF |
342 |
|
|
343 |
|
_END_MASTER(myThid) |
344 |
|
|
345 |
RETURN |
RETURN |
346 |
END |
END |