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

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

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


Revision 1.30 - (hide annotations) (download)
Fri Feb 3 02:05:33 2017 UTC (7 years, 3 months ago) by jmc
Branch: MAIN
Changes since 1.29: +16 -18 lines
fix some ALLOW_ZENITHANGLE check.

1 jmc 1.30 C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_check.F,v 1.29 2017/01/31 18:59:14 jmc Exp $
2 jmc 1.4 C $Name: $
3 heimbach 1.1
4     #include "EXF_OPTIONS.h"
5    
6 gforget 1.27 C-- File exf_check.F: Routines to check EXF settings
7     C-- Contents
8     C-- o EXF_CHECK
9     C-- o EXF_CHECK_INTERP
10    
11     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
12 jmc 1.25 CBOP
13     C !ROUTINE: EXF_CHECK
14     C !INTERFACE:
15    
16 jmc 1.17 SUBROUTINE EXF_CHECK( myThid )
17 heimbach 1.1
18 jmc 1.25 C !DESCRIPTION: \bv
19     C *==========================================================*
20     C | S/R EXF_CHECK
21     C | o Check parameters and other package dependences
22     C *==========================================================*
23     C \ev
24    
25     C !USES:
26 jmc 1.16 IMPLICIT NONE
27 heimbach 1.1
28 jmc 1.25 C == Global variables ===
29 heimbach 1.1 #include "EEPARAMS.h"
30     #include "SIZE.h"
31     #include "PARAMS.h"
32    
33 jmc 1.4 #include "EXF_PARAM.h"
34     #include "EXF_CONSTANTS.h"
35 heimbach 1.1
36 jmc 1.25 C !INPUT/OUTPUT PARAMETERS:
37     C myThid :: my Thread Id number
38 jmc 1.17 INTEGER myThid
39 heimbach 1.1
40 jmc 1.25 C !LOCAL VARIABLES:
41 gforget 1.14 C msgBuf :: Informational/error message buffer
42     CHARACTER*(MAX_LEN_MBUF) msgBuf
43 jmc 1.25 INTEGER errCount
44     CEOP
45    
46     _BEGIN_MASTER(myThid)
47     errCount = 0
48 gforget 1.14
49 jmc 1.25 WRITE(msgBuf,'(A)') 'EXF_CHECK: #define ALLOW_EXF'
50     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
51     & SQUEEZE_RIGHT, myThid )
52 heimbach 1.1
53 jmc 1.25 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
54     C check for consistency
55 mlosch 1.22 IF (.NOT.
56 jmc 1.12 & (exf_iprec.EQ.precFloat32 .OR. exf_iprec.EQ.precFloat64)
57 mlosch 1.22 & ) THEN
58     WRITE(msgBuf,'(A)')
59     & 'S/R EXF_CHECK: value of exf_iprec not allowed'
60     CALL PRINT_ERROR( msgBuf, myThid )
61 jmc 1.25 errCount = errCount + 1
62 mlosch 1.22 ENDIF
63    
64     IF (repeatPeriod.lt.0.) THEN
65 jmc 1.25 WRITE(msgBuf,'(A)')
66 mlosch 1.22 & 'S/R EXF_CHECK: repeatPeriod must be positive'
67     CALL PRINT_ERROR( msgBuf, myThid )
68 jmc 1.25 errCount = errCount + 1
69 mlosch 1.22 ENDIF
70    
71     IF (useExfYearlyFields.and.repeatPeriod.ne.0.) THEN
72     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: The use of ',
73     $ 'useExfYearlyFields AND repeatPeriod is not implemented'
74     CALL PRINT_ERROR( msgBuf, myThid )
75 jmc 1.25 errCount = errCount + 1
76 mlosch 1.22 ENDIF
77 heimbach 1.1
78 jmc 1.20 IF ( useAtmWind ) THEN
79 jmc 1.25 IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN
80 mlosch 1.22 WRITE(msgBuf,'(A)')
81     & 'S/R EXF_CHECK: use u,v_wind components but not wind-stress'
82     CALL PRINT_ERROR( msgBuf, myThid )
83 jmc 1.25 errCount = errCount + 1
84     ENDIF
85 jmc 1.20 ENDIF
86 gforget 1.18
87 jmc 1.20 IF ( .NOT.useAtmWind ) THEN
88 mlosch 1.22 IF ( uwindfile .NE. ' ' .OR. vwindfile .NE. ' ' ) THEN
89     WRITE(msgBuf,'(A)')
90 gforget 1.19 & 'S/R EXF_CHECK: read-in wind-stress but not u,v_wind components'
91 mlosch 1.22 CALL PRINT_ERROR( msgBuf, myThid )
92 jmc 1.25 errCount = errCount + 1
93 mlosch 1.22 ENDIF
94 jmc 1.20 ENDIF
95 jmc 1.6
96 gforget 1.27 #ifdef ALLOW_SALTFLX
97     IF ( useSEAICE .OR. useThSIce ) THEN
98     IF ( saltflxfile .NE. ' ' ) THEN
99     WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: exf salt flux is not',
100     & ' allowed when using either pkg/seaice or pkg/thsice'
101     CALL PRINT_ERROR( msgBuf, myThid )
102     errCount = errCount + 1
103     ENDIF
104     ENDIF
105 jmc 1.28 #endif /* ALLOW_SALTFLX */
106 gforget 1.27
107 gforget 1.13 #ifdef ALLOW_ZENITHANGLE
108 jmc 1.30 IF ( ( useExfZenIncoming .OR. select_ZenAlbedo.NE.0 ) .AND.
109     & ( usingCartesianGrid .OR. usingCylindricalGrid ) ) THEN
110     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ZENITHANGLE code ',
111     & 'does not work for cartesian and cylindrical grids'
112 mlosch 1.22 CALL PRINT_ERROR( msgBuf, myThid )
113 jmc 1.25 errCount = errCount + 1
114 mlosch 1.22 ENDIF
115     IF ( select_ZenAlbedo.LT.0 .OR. select_ZenAlbedo.GT.3 ) THEN
116     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported ',
117     & 'select_ZenAlbedo choice'
118     CALL PRINT_ERROR( msgBuf, myThid )
119 jmc 1.25 errCount = errCount + 1
120 mlosch 1.22 ENDIF
121 jmc 1.30 IF ( select_ZenAlbedo.EQ.2 ) THEN
122 jmc 1.25 WRITE(msgBuf,'(A,A)')
123 mlosch 1.22 & 'S/R EXF_CHECK: *** WARNING *** for daily mean albedo, ',
124     & 'it is advised to use select_ZenAlbedo.EQ.1 instead of 2'
125     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
126     & SQUEEZE_RIGHT, myThid )
127 gforget 1.13 ENDIF
128 jmc 1.30 IF ( select_ZenAlbedo.EQ.3 .AND. swdownperiod.GT.21600. ) THEN
129 mlosch 1.22 WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: using diurnal albedo ',
130 gforget 1.14 & 'formula requires diurnal downward shortwave forcing'
131 mlosch 1.22 CALL PRINT_ERROR( msgBuf, myThid )
132 jmc 1.25 errCount = errCount + 1
133 gforget 1.13 ENDIF
134 jmc 1.30 IF ( select_ZenAlbedo.EQ.3 .AND. swdownperiod.GT.3600. ) THEN
135 mlosch 1.22 WRITE(msgBuf,'(A,A,A)')
136     & 'S/R EXF_CHECK: *** WARNING *** ',
137     & 'the diurnal albedo formula is likely not safe for such ',
138     & 'coarse temporal resolution downward shortwave forcing'
139     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
140     & SQUEEZE_RIGHT, myThid )
141 gforget 1.13 ENDIF
142 jmc 1.30 #else /* ALLOW_ZENITHANGLE */
143     IF ( useExfZenIncoming .OR. select_ZenAlbedo.NE.0 ) THEN
144     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported option',
145     & ' when ALLOW_ZENITHANGLE is not defined'
146     CALL PRINT_ERROR( msgBuf, myThid )
147     errCount = errCount + 1
148     ENDIF
149 jmc 1.28 #endif /* ALLOW_ZENITHANGLE */
150 gforget 1.13
151 dimitri 1.3 #ifdef USE_EXF_INTERPOLATION
152 jmc 1.25 IF ( usingCartesianGrid ) THEN
153     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
154     & 'USE_EXF_INTERPOLATION assumes latitude/longitude'
155     CALL PRINT_ERROR( msgBuf, myThid )
156     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
157     & 'input and output coordinates. Trivial to extend to'
158     CALL PRINT_ERROR( msgBuf, myThid )
159     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
160     & 'cartesian coordinates, but has not yet been done.'
161     CALL PRINT_ERROR( msgBuf, myThid )
162     errCount = errCount + 1
163     ENDIF
164    
165 gforget 1.26 CALL EXF_CHECK_INTERP('ustress',ustressfile,ustress_interpMethod,
166     & ustress_nlat,ustress_lon_inc,errCount,myThid)
167     CALL EXF_CHECK_INTERP('vstress',vstressfile,vstress_interpMethod,
168     & vstress_nlat,vstress_lon_inc,errCount,myThid)
169     CALL EXF_CHECK_INTERP('hflux',hfluxfile,hflux_interpMethod,
170     & hflux_nlat,hflux_lon_inc,errCount,myThid)
171     CALL EXF_CHECK_INTERP('sflux',sfluxfile,sflux_interpMethod,
172     & sflux_nlat,sflux_lon_inc,errCount,myThid)
173     CALL EXF_CHECK_INTERP('swflux',swfluxfile,swflux_interpMethod,
174     & swflux_nlat,swflux_lon_inc,errCount,myThid)
175     CALL EXF_CHECK_INTERP('runoff',runofffile,runoff_interpMethod,
176     & runoff_nlat,runoff_lon_inc,errCount,myThid)
177 gforget 1.27 CALL EXF_CHECK_INTERP('saltflx',saltflxfile,saltflx_interpMethod,
178     & saltflx_nlat,saltflx_lon_inc,errCount,myThid)
179 gforget 1.26 CALL EXF_CHECK_INTERP('atemp',atempfile,atemp_interpMethod,
180     & atemp_nlat,atemp_lon_inc,errCount,myThid)
181     CALL EXF_CHECK_INTERP('aqh',aqhfile,aqh_interpMethod,
182     & aqh_nlat,aqh_lon_inc,errCount,myThid)
183 jmc 1.28 CALL EXF_CHECK_INTERP( 'hs', hs_file, hs_interpMethod,
184     & hs_nlat, hs_lon_inc, errCount, myThid )
185     CALL EXF_CHECK_INTERP( 'hl', hl_file, hl_interpMethod,
186     & hl_nlat, hl_lon_inc, errCount, myThid )
187 gforget 1.26 CALL EXF_CHECK_INTERP('evap',evapfile,evap_interpMethod,
188     & evap_nlat,evap_lon_inc,errCount,myThid)
189     CALL EXF_CHECK_INTERP('precip',precipfile,precip_interpMethod,
190     & precip_nlat,precip_lon_inc,errCount,myThid)
191     CALL EXF_CHECK_INTERP('snowprecip',
192     & snowprecipfile,snowprecip_interpMethod,
193     & snowprecip_nlat,snowprecip_lon_inc,errCount,myThid)
194     CALL EXF_CHECK_INTERP('uwind',uwindfile,uwind_interpMethod,
195     & uwind_nlat,uwind_lon_inc,errCount,myThid)
196     CALL EXF_CHECK_INTERP('vwind',vwindfile,vwind_interpMethod,
197     & vwind_nlat,vwind_lon_inc,errCount,myThid)
198     CALL EXF_CHECK_INTERP('wspeed',wspeedfile,wspeed_interpMethod,
199     & wspeed_nlat,wspeed_lon_inc,errCount,myThid)
200     CALL EXF_CHECK_INTERP('lwflux',lwfluxfile,lwflux_interpMethod,
201     & lwflux_nlat,lwflux_lon_inc,errCount,myThid)
202     CALL EXF_CHECK_INTERP('swdown',swdownfile,swdown_interpMethod,
203     & swdown_nlat,swdown_lon_inc,errCount,myThid)
204     CALL EXF_CHECK_INTERP('lwdown',lwdownfile,lwdown_interpMethod,
205     & lwdown_nlat,lwdown_lon_inc,errCount,myThid)
206     CALL EXF_CHECK_INTERP('apressure',
207     & apressurefile,apressure_interpMethod,
208     & apressure_nlat,apressure_lon_inc,errCount,myThid)
209     CALL EXF_CHECK_INTERP('areamask',
210     & areamaskfile,areamask_interpMethod,
211     & areamask_nlat,areamask_lon_inc,errCount,myThid)
212     CALL EXF_CHECK_INTERP('climsst',climsstfile,climsst_interpMethod,
213     & climsst_nlat,climsst_lon_inc,errCount,myThid)
214     CALL EXF_CHECK_INTERP('climsss',climsssfile,climsss_interpMethod,
215     & climsss_nlat,climsss_lon_inc,errCount,myThid)
216     CALL EXF_CHECK_INTERP('climustr',
217     & climustrfile,climustr_interpMethod,
218     & climustr_nlat,climustr_lon_inc,errCount,myThid)
219     CALL EXF_CHECK_INTERP('climvstr',
220     & climvstrfile,climvstr_interpMethod,
221     & climvstr_nlat,climvstr_lon_inc,errCount,myThid)
222 jmc 1.25
223 jmc 1.15 C- some restrictions on 2-component vector field (might be relaxed later on)
224     IF ( ( uwind_interpMethod.GE.1 .AND. uwindfile.NE.' ' ) .OR.
225     & ( vwind_interpMethod.GE.1 .AND. vwindfile.NE.' ' ) ) THEN
226     IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
227 mlosch 1.22 IF ( uwind_interpMethod.EQ.0 .OR. uwindfile.EQ.' ' .OR.
228     & vwind_interpMethod.EQ.0 .OR. vwindfile.EQ.' ' ) THEN
229 jmc 1.15 C- stop if one expects interp+rotation (Curvilin-G) which will not happen
230 jmc 1.25 WRITE(msgBuf,'(A)')
231 mlosch 1.22 & 'S/R EXF_CHECK: interp. needs 2 components (wind)'
232     CALL PRINT_ERROR( msgBuf, myThid )
233 jmc 1.25 errCount = errCount + 1
234 mlosch 1.22 ENDIF
235 jmc 1.29 IF ( uwindStartTime .NE. vwindStartTime .OR.
236 mlosch 1.22 & uwindperiod .NE. vwindperiod ) THEN
237     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
238     & 'For CurvilinearGrid/RotatedGrid, the u and v wind '
239     CALL PRINT_ERROR( msgBuf, myThid )
240     WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',
241 jmc 1.29 & 'files have to have the same StartTime and period, ',
242 mlosch 1.22 & 'because S/R EXF_SET_UV assumes that.'
243     CALL PRINT_ERROR( msgBuf, myThid )
244 jmc 1.25 errCount = errCount + 1
245 mlosch 1.22 ENDIF
246 jmc 1.15 ENDIF
247     ENDIF
248     IF ( (ustress_interpMethod.GE.1 .AND. ustressfile.NE.' ') .OR.
249     & (vstress_interpMethod.GE.1 .AND. vstressfile.NE.' ') ) THEN
250     IF ( readStressOnCgrid ) THEN
251 jmc 1.25 WRITE(msgBuf,'(A,A)')
252 mlosch 1.22 & 'S/R EXF_CHECK: readStressOnCgrid=.TRUE. ',
253     & 'and interp wind-stress (=A-grid) are not compatible'
254     CALL PRINT_ERROR( msgBuf, myThid )
255 jmc 1.25 errCount = errCount + 1
256 jmc 1.15 ENDIF
257     IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
258 mlosch 1.22 IF ( ustress_interpMethod.EQ.0 .OR. ustressfile.EQ.' ' .OR.
259     & vstress_interpMethod.EQ.0 .OR. vstressfile.EQ.' ' ) THEN
260 jmc 1.15 C- stop if one expects interp+rotation (Curvilin-G) which will not happen
261 jmc 1.25 WRITE(msgBuf,'(A)')
262 mlosch 1.22 & 'S/R EXF_CHECK: interp. needs 2 components (wind-stress)'
263     CALL PRINT_ERROR( msgBuf, myThid )
264 jmc 1.25 errCount = errCount + 1
265 mlosch 1.22 ENDIF
266 jmc 1.29 IF ( ustressStartTime .NE. vstressStartTime .OR.
267 mlosch 1.22 & ustressperiod .NE. vstressperiod ) THEN
268     WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
269     & 'For CurvilinearGrid/RotatedGrid, the u and v wind stress '
270     CALL PRINT_ERROR( msgBuf, myThid )
271     WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',
272 jmc 1.29 & 'files have to have the same StartTime and period, ',
273 mlosch 1.22 & 'because S/R EXF_SET_UV assumes that.'
274     CALL PRINT_ERROR( msgBuf, myThid )
275 jmc 1.25 errCount = errCount + 1
276 mlosch 1.22 ENDIF
277 jmc 1.15 ENDIF
278 jmc 1.6 ENDIF
279 jmc 1.15
280     IF ( (ustress_interpMethod.EQ.0 .AND. ustressfile.NE.' ') .OR.
281     & (vstress_interpMethod.EQ.0 .AND. vstressfile.NE.' ') ) THEN
282 jmc 1.30 #else /* ndef USE_EXF_INTERPOLATION */
283 jmc 1.15 IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN
284     #endif /* USE_EXF_INTERPOLATION */
285 mlosch 1.22 IF ( (readStressOnAgrid.AND.readStressOnCgrid) .OR.
286     & .NOT.(readStressOnAgrid.OR.readStressOnCgrid) ) THEN
287     WRITE(msgBuf,'(A)')
288 jmc 1.6 & 'S/R EXF_CHECK: Select 1 wind-stress position: A or C-grid'
289 mlosch 1.22 CALL PRINT_ERROR( msgBuf, myThid )
290 jmc 1.25 errCount = errCount + 1
291 mlosch 1.22 ENDIF
292 gforget 1.23 IF (rotateStressOnAgrid.AND..NOT.readStressOnAgrid) THEN
293     WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: rotateStressOnAgrid ',
294     & 'only applies to cases readStressOnAgrid is true'
295     CALL PRINT_ERROR( msgBuf, myThid )
296 jmc 1.25 errCount = errCount + 1
297 gforget 1.23 ENDIF
298    
299 jmc 1.6 ELSE
300 jmc 1.25 IF ( readStressOnAgrid .OR. readStressOnCgrid .OR.
301 gforget 1.23 & rotateStressOnAgrid) THEN
302 mlosch 1.22 WRITE(msgBuf,'(A)')
303     & 'S/R EXF_CHECK: wind-stress position irrelevant'
304     CALL PRINT_ERROR( msgBuf, myThid )
305 jmc 1.25 errCount = errCount + 1
306 mlosch 1.22 ENDIF
307 jmc 1.6 ENDIF
308 jmc 1.15
309     #ifdef USE_NO_INTERP_RUNOFF
310 jmc 1.25 WRITE(msgBuf,'(A)')
311 mlosch 1.22 & 'S/R EXF_CHECK: USE_NO_INTERP_RUNOFF code has been removed;'
312 jmc 1.15 CALL PRINT_ERROR( msgBuf, myThid )
313 jmc 1.25 WRITE(msgBuf,'(A,A)')
314 mlosch 1.22 & 'S/R EXF_CHECK: use instead "runoff_interpMethod=0"',
315 jmc 1.15 & ' in "data.exf" (EXF_NML_04)'
316     CALL PRINT_ERROR( msgBuf, myThid )
317 jmc 1.25 errCount = errCount + 1
318 jmc 1.15 #endif /* USE_NO_INTERP_RUNOFF */
319 dimitri 1.3
320 heimbach 1.2 #ifdef ALLOW_CLIMTEMP_RELAXATION
321 mlosch 1.22 WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
322     & 'ALLOW_CLIMTEMP_RELAXATION no longer supported. Use pkg/rbcs'
323     CALL PRINT_ERROR( msgBuf, myThid )
324 jmc 1.25 errCount = errCount + 1
325 jmc 1.28 #endif /* ALLOW_CLIMTEMP_RELAXATION */
326 heimbach 1.1
327 heimbach 1.2 #ifdef ALLOW_CLIMSALT_RELAXATION
328 mlosch 1.22 WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
329     & 'ALLOW_CLIMSALT_RELAXATION no longer supported. Use pkg/rbcs'
330     CALL PRINT_ERROR( msgBuf, myThid )
331 jmc 1.25 errCount = errCount + 1
332 jmc 1.28 #endif /* ALLOW_CLIMSALT_RELAXATION */
333 heimbach 1.2
334 jmc 1.17 IF ( climsstTauRelax.NE.0. ) THEN
335     #ifndef ALLOW_CLIMSST_RELAXATION
336 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0'
337     CALL PRINT_ERROR( msgBuf, myThid )
338 jmc 1.25 WRITE(msgBuf,'(A)')
339 mlosch 1.22 & 'S/R EXF_CHECK: but ALLOW_CLIMSST_RELAXATION is not defined'
340     CALL PRINT_ERROR( msgBuf, myThid )
341 jmc 1.25 errCount = errCount + 1
342 jmc 1.28 #endif /* ndef ALLOW_CLIMSST_RELAXATION */
343 jmc 1.17 IF ( climsstfile.EQ.' ' ) THEN
344 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0 but'
345 jmc 1.17 CALL PRINT_ERROR( msgBuf, myThid )
346 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstfile is not set'
347 jmc 1.17 CALL PRINT_ERROR( msgBuf, myThid )
348 jmc 1.25 errCount = errCount + 1
349 jmc 1.17 ENDIf
350     ENDIf
351 jmc 1.25
352 jmc 1.17 IF ( climsssTauRelax.NE.0. ) THEN
353     #ifndef ALLOW_CLIMSSS_RELAXATION
354 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0'
355     CALL PRINT_ERROR( msgBuf, myThid )
356 jmc 1.25 WRITE(msgBuf,'(A)')
357 mlosch 1.22 & 'S/R EXF_CHECK: but ALLOW_CLIMSSS_RELAXATION is not defined'
358     CALL PRINT_ERROR( msgBuf, myThid )
359 jmc 1.25 errCount = errCount + 1
360 jmc 1.28 #endif /* ALLOW_CLIMSSS_RELAXATION */
361 jmc 1.17 IF ( climsssfile.EQ.' ' ) THEN
362 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0 but'
363 jmc 1.17 CALL PRINT_ERROR( msgBuf, myThid )
364 mlosch 1.22 WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssfile is not set'
365 jmc 1.17 CALL PRINT_ERROR( msgBuf, myThid )
366 jmc 1.25 errCount = errCount + 1
367     ENDIF
368     ENDIF
369    
370     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
371    
372     IF ( errCount.GE.1 ) THEN
373     WRITE(msgBuf,'(A,I3,A)')
374     & 'EXF_CHECK: detected', errCount,' fatal error(s)'
375     CALL PRINT_ERROR( msgBuf, myThid )
376     CALL ALL_PROC_DIE( 0 )
377 jmc 1.17 STOP 'ABNORMAL END: S/R EXF_CHECK'
378     ENDIF
379    
380 jmc 1.25 _END_MASTER(myThid)
381    
382 jmc 1.6 RETURN
383     END
384 gforget 1.26
385     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
386    
387     CBOP
388     C !ROUTINE: EXF_CHECK_INTERP
389     C !INTERFACE:
390    
391 jmc 1.28 SUBROUTINE EXF_CHECK_INTERP(
392     I loc_name, loc_file,
393     I loc_interpMethod, loc_nlat, loc_lon_inc,
394     U errCount,
395     I myThid )
396 gforget 1.26
397     C !DESCRIPTION: \bv
398     C *==========================================================*
399     C | S/R EXF_CHECK_INTERP
400     C | o Check parameters for one of the pkg/exf variable
401     C *==========================================================*
402     C \ev
403    
404     C !USES:
405     IMPLICIT NONE
406    
407     C == Global variables ===
408     #include "EEPARAMS.h"
409     #include "EXF_PARAM.h"
410    
411     C !INPUT/OUTPUT PARAMETERS:
412     C myThid :: my Thread Id number
413 jmc 1.28 CHARACTER*(*) loc_name
414     CHARACTER*(*) loc_file
415     INTEGER loc_interpMethod
416 gforget 1.26 INTEGER loc_nlat
417     _RL loc_lon_inc
418 jmc 1.28 INTEGER errCount
419     INTEGER myThid
420 gforget 1.26
421     C !LOCAL VARIABLES:
422     C msgBuf :: Informational/error message buffer
423     CHARACTER*(MAX_LEN_MBUF) msgBuf
424     CEOP
425    
426     IF ( loc_interpMethod.GE.1 .AND. loc_file.NE.' ' ) THEN
427     IF ( loc_nlat .GT. MAX_LAT_INC ) THEN
428     WRITE(msgBuf,'(3A)') 'S/R EXF_CHECK_INTERP: ',loc_name,
429     & '_nlat > MAX_LAT_INC'
430     CALL PRINT_ERROR( msgBuf, myThid )
431     errCount = errCount + 1
432     ENDIF
433     IF ( loc_lon_inc.GT.500. ) THEN
434     WRITE(msgBuf,'(4A,1PE16.8)') 'S/R EXF_CHECK_INTERP: ',
435     & 'Invalid value for: ',loc_name,'_lon_inc =', loc_lon_inc
436     CALL PRINT_ERROR( msgBuf, myThid )
437     WRITE(msgBuf,'(4A)') 'S/R EXF_CHECK_INTERP: Fix it ',
438     & 'or Turn off ',loc_name,'-interp (interpMethod=0)'
439     CALL PRINT_ERROR( msgBuf, myThid )
440     errCount = errCount + 1
441     ENDIF
442     ENDIF
443    
444     RETURN
445     END

  ViewVC Help
Powered by ViewVC 1.1.22