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

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

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

revision 1.22 by mlosch, Mon Jan 6 14:52:38 2014 UTC revision 1.30 by jmc, Fri Feb 3 02:05:33 2017 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "EXF_OPTIONS.h"  #include "EXF_OPTIONS.h"
5    
6    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    CBOP
13    C     !ROUTINE: EXF_CHECK
14    C     !INTERFACE:
15    
16        SUBROUTINE EXF_CHECK( myThid )        SUBROUTINE EXF_CHECK( myThid )
17    
18  c     ==================================================================  C     !DESCRIPTION: \bv
19  c     SUBROUTINE EXF_CHECK  C     *==========================================================*
20  c     ==================================================================  C     | S/R EXF_CHECK
21  c  C     | o Check parameters and other package dependences
22        IMPLICIT NONE  C     *==========================================================*
23    C     \ev
24    
25  c     == global variables ==  C     !USES:
26          IMPLICIT NONE
27    
28    C     == Global variables ===
29  #include "EEPARAMS.h"  #include "EEPARAMS.h"
30  #include "SIZE.h"  #include "SIZE.h"
31  #include "PARAMS.h"  #include "PARAMS.h"
32    
33  #include "EXF_PARAM.h"  #include "EXF_PARAM.h"
34  #include "EXF_CONSTANTS.h"  #include "EXF_CONSTANTS.h"
 c     == routine arguments ==  
   
 c     myThid - thread number for this instance of the routine.  
35    
36    C     !INPUT/OUTPUT PARAMETERS:
37    C     myThid   :: my Thread Id number
38        INTEGER myThid        INTEGER myThid
39    
40  c     == local variables ==  C     !LOCAL VARIABLES:
   
41  C     msgBuf   :: Informational/error message buffer  C     msgBuf   :: Informational/error message buffer
42        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
43          INTEGER errCount
44    CEOP
45    
46          _BEGIN_MASTER(myThid)
47          errCount = 0
48    
49  c     == end of interface ==        WRITE(msgBuf,'(A)') 'EXF_CHECK: #define ALLOW_EXF'
50          CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
51         &                    SQUEEZE_RIGHT, myThid )
52    
53  c     check for consistency  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
54    C     check for consistency
55        IF (.NOT.        IF (.NOT.
56       &     (exf_iprec.EQ.precFloat32 .OR. exf_iprec.EQ.precFloat64)       &     (exf_iprec.EQ.precFloat32 .OR. exf_iprec.EQ.precFloat64)
57       &     ) THEN       &     ) THEN
58         WRITE(msgBuf,'(A)')         WRITE(msgBuf,'(A)')
59       &      'S/R EXF_CHECK: value of exf_iprec not allowed'       &      'S/R EXF_CHECK: value of exf_iprec not allowed'
60         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
61         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
62        ENDIF        ENDIF
63    
64        IF (repeatPeriod.lt.0.) THEN        IF (repeatPeriod.lt.0.) THEN
65         WRITE(msgBuf,'(A)')         WRITE(msgBuf,'(A)')
66       &      'S/R EXF_CHECK: repeatPeriod must be positive'       &      'S/R EXF_CHECK: repeatPeriod must be positive'
67         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
68         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
69        ENDIF        ENDIF
70    
71        IF (useExfYearlyFields.and.repeatPeriod.ne.0.) THEN        IF (useExfYearlyFields.and.repeatPeriod.ne.0.) THEN
72         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: The use of ',         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: The use of ',
73       $      'useExfYearlyFields AND repeatPeriod is not implemented'       $      'useExfYearlyFields AND repeatPeriod is not implemented'
74         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
75         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
76        ENDIF        ENDIF
77    
 #ifdef ALLOW_BULKFORMULAE  
78        IF ( useAtmWind ) THEN        IF ( useAtmWind ) THEN
79        IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN         IF ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN
80          WRITE(msgBuf,'(A)')          WRITE(msgBuf,'(A)')
81       &   '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'
82          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
83          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
84        ENDIF         ENDIF
85        ENDIF        ENDIF
 #endif  
86    
87        IF ( .NOT.useAtmWind ) THEN        IF ( .NOT.useAtmWind ) THEN
88         IF ( uwindfile .NE. ' ' .OR. vwindfile .NE. ' ' ) THEN         IF ( uwindfile .NE. ' ' .OR. vwindfile .NE. ' ' ) THEN
89          WRITE(msgBuf,'(A)')          WRITE(msgBuf,'(A)')
90       & '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'
91          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
92          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
93         ENDIF         ENDIF
94        ENDIF        ENDIF
95    
96  #ifndef ALLOW_ZENITHANGLE  #ifdef ALLOW_SALTFLX
97        IF ( useExfZenAlbedo .OR. useExfZenIncoming .OR.        IF ( useSEAICE .OR. useThSIce )  THEN
98       &     select_ZenAlbedo .NE. 0 ) THEN         IF ( saltflxfile .NE. ' ' ) THEN
99          WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported option',          WRITE(msgBuf,'(2A)') 'S/R EXF_CHECK: exf salt flux is not',
100       &        ' when ALLOW_ZENITHANGLE is not defined'       &       ' allowed when using either pkg/seaice or pkg/thsice'
101          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
102          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
103           ENDIF
104        ENDIF        ENDIF
105  #endif  #endif /* ALLOW_SALTFLX */
106    
107  #ifdef ALLOW_ZENITHANGLE  #ifdef ALLOW_ZENITHANGLE
108        IF ( usingCartesianGrid .OR. usingCylindricalGrid ) THEN        IF ( ( useExfZenIncoming .OR. select_ZenAlbedo.NE.0 ) .AND.
109         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ALLOW_ZENITHANGLE does ',       &     ( usingCartesianGrid .OR. usingCylindricalGrid ) ) THEN
110       &      'not work for carthesian and cylindrical grids'         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ZENITHANGLE code ',
111         &      'does not work for cartesian and cylindrical grids'
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.LT.0 .OR. select_ZenAlbedo.GT.3 ) THEN        IF ( select_ZenAlbedo.LT.0 .OR. select_ZenAlbedo.GT.3 ) THEN
116         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported ',         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported ',
117       &      'select_ZenAlbedo choice'       &      'select_ZenAlbedo choice'
118         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
119         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
120        ENDIF        ENDIF
121        IF ( select_ZenAlbedo.EQ.2 .) THEN        IF ( select_ZenAlbedo.EQ.2 ) THEN
122         WRITE(msgBuf,'(A,A)')         WRITE(msgBuf,'(A,A)')
123       &      'S/R EXF_CHECK: *** WARNING *** for daily mean albedo, ',       &      'S/R EXF_CHECK: *** WARNING *** for daily mean albedo, ',
124       &      'it is advised to use select_ZenAlbedo.EQ.1 instead of 2'       &      'it is advised to use select_ZenAlbedo.EQ.1 instead of 2'
125         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
126       &                     SQUEEZE_RIGHT, myThid )       &                     SQUEEZE_RIGHT, myThid )
127        ENDIF        ENDIF
128        IF ( select_ZenAlbedo.GT.2 .AND. swdownperiod.GT. 21600 ) THEN        IF ( select_ZenAlbedo.EQ.3 .AND. swdownperiod.GT.21600. ) THEN
129         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: using diurnal albedo ',         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: using diurnal albedo ',
130       &        'formula requires diurnal downward shortwave forcing'       &        'formula requires diurnal downward shortwave forcing'
131         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
132         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
133        ENDIF        ENDIF
134        IF ( select_ZenAlbedo.GT.2 .AND. swdownperiod.GT. 3600 ) then        IF ( select_ZenAlbedo.EQ.3 .AND. swdownperiod.GT.3600. ) THEN
135         WRITE(msgBuf,'(A,A,A)')         WRITE(msgBuf,'(A,A,A)')
136       &      'S/R EXF_CHECK: *** WARNING *** ',       &      'S/R EXF_CHECK: *** WARNING *** ',
137       &      'the diurnal albedo formula is likely not safe for such ',       &      'the diurnal albedo formula is likely not safe for such ',
# Line 120  c     check for consistency Line 139  c     check for consistency
139         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
140       &                     SQUEEZE_RIGHT, myThid )       &                     SQUEEZE_RIGHT, myThid )
141        ENDIF        ENDIF
142  #endif  #else /* ALLOW_ZENITHANGLE */
143          IF ( useExfZenIncoming .OR. select_ZenAlbedo.NE.0 ) THEN
144  #ifdef USE_EXF_INTERPOLATION          WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: unsupported option',
145        IF ( climsstfile .NE. ' ' ) THEN       &        ' when ALLOW_ZENITHANGLE is not defined'
        IF ( climsst_nlat .GT. MAX_LAT_INC ) THEN  
         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsst_nlat > MAX_LAT_INC'  
         CALL PRINT_ERROR( msgBuf, myThid )  
         STOP 'ABNORMAL END: S/R EXF_CHECK'  
        ENDIF  
       ENDIF  
       IF ( climsssfile .NE. ' ' ) THEN  
        IF ( climsss_nlat .GT. MAX_LAT_INC ) THEN  
         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsss_nlat > MAX_LAT_INC'  
146          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
147          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
        ENDIF  
148        ENDIF        ENDIF
149    #endif /* ALLOW_ZENITHANGLE */
150    
151    #ifdef USE_EXF_INTERPOLATION
152        IF ( usingCartesianGrid ) THEN        IF ( usingCartesianGrid ) THEN
153         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
154       &      'USE_EXF_INTERPOLATION assumes latitude/longitude'       &      'USE_EXF_INTERPOLATION assumes latitude/longitude'
# Line 147  c     check for consistency Line 159  c     check for consistency
159         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',         WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
160       &      'cartesian coordinates, but has not yet been done.'       &      'cartesian coordinates, but has not yet been done.'
161         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
162         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
163        ENDIF        ENDIF
164    
165          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          CALL EXF_CHECK_INTERP('saltflx',saltflxfile,saltflx_interpMethod,
178         &     saltflx_nlat,saltflx_lon_inc,errCount,myThid)
179          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          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          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    
223  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)
224        IF ( ( uwind_interpMethod.GE.1 .AND. uwindfile.NE.' ' ) .OR.        IF ( ( uwind_interpMethod.GE.1 .AND. uwindfile.NE.' ' ) .OR.
225       &     ( vwind_interpMethod.GE.1 .AND. vwindfile.NE.' ' ) ) THEN       &     ( vwind_interpMethod.GE.1 .AND. vwindfile.NE.' ' ) ) THEN
# Line 156  C-    some restrictions on 2-component v Line 227  C-    some restrictions on 2-component v
227          IF ( uwind_interpMethod.EQ.0 .OR. uwindfile.EQ.' ' .OR.          IF ( uwind_interpMethod.EQ.0 .OR. uwindfile.EQ.' ' .OR.
228       &       vwind_interpMethod.EQ.0 .OR. vwindfile.EQ.' ' ) THEN       &       vwind_interpMethod.EQ.0 .OR. vwindfile.EQ.' ' ) THEN
229  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
230           WRITE(msgBuf,'(A)')           WRITE(msgBuf,'(A)')
231       &        'S/R EXF_CHECK: interp. needs 2 components (wind)'       &        'S/R EXF_CHECK: interp. needs 2 components (wind)'
232           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
233           STOP 'ABNORMAL END: S/R EXF_CHECK'           errCount = errCount + 1
234          ENDIF          ENDIF
235          IF ( uwindstartdate .NE. vwindstartdate .OR.          IF ( uwindStartTime .NE. vwindStartTime .OR.
236       &       uwindperiod    .NE. vwindperiod   ) THEN       &       uwindperiod    .NE. vwindperiod   ) THEN
237           WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',           WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
238       &        'For CurvilinearGrid/RotatedGrid, the u and v wind '       &        'For CurvilinearGrid/RotatedGrid, the u and v wind '
239           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
240           WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',           WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',
241       &        'files have to have the same startdate and period, ',       &        'files have to have the same StartTime and period, ',
242       &        'because S/R EXF_SET_UV assumes that.'       &        'because S/R EXF_SET_UV assumes that.'
243           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
244           STOP 'ABNORMAL END: S/R EXF_CHECK'           errCount = errCount + 1
245          ENDIF          ENDIF
246         ENDIF         ENDIF
247        ENDIF        ENDIF
248        IF ( (ustress_interpMethod.GE.1 .AND. ustressfile.NE.' ') .OR.        IF ( (ustress_interpMethod.GE.1 .AND. ustressfile.NE.' ') .OR.
249       &     (vstress_interpMethod.GE.1 .AND. vstressfile.NE.' ') ) THEN       &     (vstress_interpMethod.GE.1 .AND. vstressfile.NE.' ') ) THEN
250         IF ( readStressOnCgrid ) THEN         IF ( readStressOnCgrid ) THEN
251          WRITE(msgBuf,'(A,A)')          WRITE(msgBuf,'(A,A)')
252       &       'S/R EXF_CHECK: readStressOnCgrid=.TRUE. ',       &       'S/R EXF_CHECK: readStressOnCgrid=.TRUE. ',
253       &       'and interp wind-stress (=A-grid) are not compatible'       &       'and interp wind-stress (=A-grid) are not compatible'
254          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
255          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
256         ENDIF         ENDIF
257         IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN         IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
258          IF ( ustress_interpMethod.EQ.0 .OR. ustressfile.EQ.' ' .OR.          IF ( ustress_interpMethod.EQ.0 .OR. ustressfile.EQ.' ' .OR.
259       &       vstress_interpMethod.EQ.0 .OR. vstressfile.EQ.' ' ) THEN       &       vstress_interpMethod.EQ.0 .OR. vstressfile.EQ.' ' ) THEN
260  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
261           WRITE(msgBuf,'(A)')           WRITE(msgBuf,'(A)')
262       &        'S/R EXF_CHECK: interp. needs 2 components (wind-stress)'       &        'S/R EXF_CHECK: interp. needs 2 components (wind-stress)'
263           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
264           STOP 'ABNORMAL END: S/R EXF_CHECK'           errCount = errCount + 1
265          ENDIF          ENDIF
266          IF ( ustressstartdate .NE. vstressstartdate .OR.          IF ( ustressStartTime .NE. vstressStartTime .OR.
267       &       ustressperiod    .NE. vstressperiod   ) THEN       &       ustressperiod    .NE. vstressperiod   ) THEN
268           WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',           WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
269       &    'For CurvilinearGrid/RotatedGrid, the u and v wind stress '       &    'For CurvilinearGrid/RotatedGrid, the u and v wind stress '
270           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
271           WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',           WRITE(msgBuf,'(A,A,A)') 'S/R EXF_CHECK: ',
272       &        'files have to have the same startdate and period, ',       &        'files have to have the same StartTime and period, ',
273       &        'because S/R EXF_SET_UV assumes that.'       &        'because S/R EXF_SET_UV assumes that.'
274           CALL PRINT_ERROR( msgBuf, myThid )           CALL PRINT_ERROR( msgBuf, myThid )
275           STOP 'ABNORMAL END: S/R EXF_CHECK'           errCount = errCount + 1
276          ENDIF          ENDIF
277         ENDIF         ENDIF
278        ENDIF        ENDIF
279    
280        IF ( (ustress_interpMethod.EQ.0 .AND. ustressfile.NE.' ') .OR.        IF ( (ustress_interpMethod.EQ.0 .AND. ustressfile.NE.' ') .OR.
281       &     (vstress_interpMethod.EQ.0 .AND. vstressfile.NE.' ') ) THEN       &     (vstress_interpMethod.EQ.0 .AND. vstressfile.NE.' ') ) THEN
282  #else /* ifndef USE_EXF_INTERPOLATION */  #else /* ndef USE_EXF_INTERPOLATION */
283        IF     ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN        IF     ( ustressfile .NE. ' ' .OR. vstressfile .NE. ' ' ) THEN
284  #endif /* USE_EXF_INTERPOLATION */  #endif /* USE_EXF_INTERPOLATION */
285         IF (     (readStressOnAgrid.AND.readStressOnCgrid) .OR.         IF (     (readStressOnAgrid.AND.readStressOnCgrid) .OR.
# Line 216  C-    stop if one expects interp+rotatio Line 287  C-    stop if one expects interp+rotatio
287          WRITE(msgBuf,'(A)')          WRITE(msgBuf,'(A)')
288       & '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'
289          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
290          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
291           ENDIF
292           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            errCount = errCount + 1
297         ENDIF         ENDIF
298    
299        ELSE        ELSE
300         IF ( readStressOnAgrid .OR. readStressOnCgrid ) THEN         IF ( readStressOnAgrid .OR. readStressOnCgrid .OR.
301         &      rotateStressOnAgrid) THEN
302          WRITE(msgBuf,'(A)')          WRITE(msgBuf,'(A)')
303       &       'S/R EXF_CHECK: wind-stress position irrelevant'       &       'S/R EXF_CHECK: wind-stress position irrelevant'
304          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
305          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
306         ENDIF         ENDIF
307        ENDIF        ENDIF
308    
309  #ifdef USE_NO_INTERP_RUNOFF  #ifdef USE_NO_INTERP_RUNOFF
310        WRITE(msgBuf,'(A)')        WRITE(msgBuf,'(A)')
311       &     'S/R EXF_CHECK: USE_NO_INTERP_RUNOFF code has been removed;'       &     'S/R EXF_CHECK: USE_NO_INTERP_RUNOFF code has been removed;'
312        CALL PRINT_ERROR( msgBuf, myThid )        CALL PRINT_ERROR( msgBuf, myThid )
313        WRITE(msgBuf,'(A,A)')        WRITE(msgBuf,'(A,A)')
314       &     'S/R EXF_CHECK: use instead "runoff_interpMethod=0"',       &     'S/R EXF_CHECK: use instead "runoff_interpMethod=0"',
315       &      ' in "data.exf" (EXF_NML_04)'       &      ' in "data.exf" (EXF_NML_04)'
316        CALL PRINT_ERROR( msgBuf, myThid )        CALL PRINT_ERROR( msgBuf, myThid )
317        STOP 'ABNORMAL END: S/R EXF_CHECK'        errCount = errCount + 1
318  #endif /* USE_NO_INTERP_RUNOFF */  #endif /* USE_NO_INTERP_RUNOFF */
319    
320  #ifdef ALLOW_CLIMTEMP_RELAXATION  #ifdef ALLOW_CLIMTEMP_RELAXATION
321        WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',        WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
322       &     'ALLOW_CLIMTEMP_RELAXATION no longer supported. Use pkg/rbcs'       &     'ALLOW_CLIMTEMP_RELAXATION no longer supported. Use pkg/rbcs'
323        CALL PRINT_ERROR( msgBuf, myThid )        CALL PRINT_ERROR( msgBuf, myThid )
324        STOP 'ABNORMAL END: S/R EXF_CHECK'        errCount = errCount + 1
325  #endif  #endif /* ALLOW_CLIMTEMP_RELAXATION */
326    
327  #ifdef ALLOW_CLIMSALT_RELAXATION  #ifdef ALLOW_CLIMSALT_RELAXATION
328        WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',        WRITE(msgBuf,'(A,A)') 'S/R EXF_CHECK: ',
329       &     'ALLOW_CLIMSALT_RELAXATION no longer supported. Use pkg/rbcs'       &     'ALLOW_CLIMSALT_RELAXATION no longer supported. Use pkg/rbcs'
330        CALL PRINT_ERROR( msgBuf, myThid )        CALL PRINT_ERROR( msgBuf, myThid )
331        STOP 'ABNORMAL END: S/R EXF_CHECK'        errCount = errCount + 1
332  #endif  #endif /* ALLOW_CLIMSALT_RELAXATION */
333    
334        IF ( climsstTauRelax.NE.0. ) THEN        IF ( climsstTauRelax.NE.0. ) THEN
335  #ifndef ALLOW_CLIMSST_RELAXATION  #ifndef ALLOW_CLIMSST_RELAXATION
336         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0'         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0'
337         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
338         WRITE(msgBuf,'(A)')         WRITE(msgBuf,'(A)')
339       &      'S/R EXF_CHECK: but ALLOW_CLIMSST_RELAXATION is not defined'       &      'S/R EXF_CHECK: but ALLOW_CLIMSST_RELAXATION is not defined'
340         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
341         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
342  #endif  #endif /* ndef ALLOW_CLIMSST_RELAXATION */
343         IF ( climsstfile.EQ.' ' ) THEN         IF ( climsstfile.EQ.' ' ) THEN
344          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0 but'          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstTauRelax > 0 but'
345          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
346          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstfile is not set'          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsstfile is not set'
347          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
348          STOP 'ABNORMAL END: S/R EXF_CHECK'          errCount = errCount + 1
349         ENDIf         ENDIf
350        ENDIf        ENDIf
351          
352        IF ( climsssTauRelax.NE.0. ) THEN        IF ( climsssTauRelax.NE.0. ) THEN
353  #ifndef ALLOW_CLIMSSS_RELAXATION  #ifndef ALLOW_CLIMSSS_RELAXATION
354         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0'         WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0'
355         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
356         WRITE(msgBuf,'(A)')         WRITE(msgBuf,'(A)')
357       &      'S/R EXF_CHECK: but ALLOW_CLIMSSS_RELAXATION is not defined'       &      'S/R EXF_CHECK: but ALLOW_CLIMSSS_RELAXATION is not defined'
358         CALL PRINT_ERROR( msgBuf, myThid )         CALL PRINT_ERROR( msgBuf, myThid )
359         STOP 'ABNORMAL END: S/R EXF_CHECK'         errCount = errCount + 1
360  #endif  #endif /* ALLOW_CLIMSSS_RELAXATION */
361         IF ( climsssfile.EQ.' ' ) THEN         IF ( climsssfile.EQ.' ' ) THEN
362          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0 but'          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssTauRelax > 0 but'
363          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
364          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssfile is not set'          WRITE(msgBuf,'(A)') 'S/R EXF_CHECK: climsssfile is not set'
365          CALL PRINT_ERROR( msgBuf, myThid )          CALL PRINT_ERROR( msgBuf, myThid )
366            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          STOP 'ABNORMAL END: S/R EXF_CHECK'          STOP 'ABNORMAL END: S/R EXF_CHECK'
378          ENDIF
379    
380          _END_MASTER(myThid)
381    
382          RETURN
383          END
384    
385    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
386    
387    CBOP
388    C     !ROUTINE: EXF_CHECK_INTERP
389    C     !INTERFACE:
390    
391          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    
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          CHARACTER*(*) loc_name
414          CHARACTER*(*) loc_file
415          INTEGER loc_interpMethod
416          INTEGER loc_nlat
417          _RL loc_lon_inc
418          INTEGER errCount
419          INTEGER myThid
420    
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         ENDIF
442        ENDIF        ENDIF
443    

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.30

  ViewVC Help
Powered by ViewVC 1.1.22