/[MITgcm]/MITgcm/pkg/layers/layers_check.F
ViewVC logotype

Diff of /MITgcm/pkg/layers/layers_check.F

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

revision 1.8 by jmc, Thu Jun 11 21:40:40 2015 UTC revision 1.9 by jmc, Fri Jun 12 16:21:31 2015 UTC
# Line 23  C     myThid   :: my Thread Id number Line 23  C     myThid   :: my Thread Id number
23  C     LOCAL VARIABLES:  C     LOCAL VARIABLES:
24  C     msgBuf   :: Informational/error message buffer  C     msgBuf   :: Informational/error message buffer
25        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
26        INTEGER iLa, k        CHARACTER*(40) tmpName
27          CHARACTER*(1) sfx
28          INTEGER iLa, k, errCount
29        _RL tmpVar        _RL tmpVar
30    
31  #ifdef ALLOW_LAYERS  #ifdef ALLOW_LAYERS
# Line 31  C     msgBuf   :: Informational/error me Line 33  C     msgBuf   :: Informational/error me
33    
34         WRITE(msgBuf,'(A)') 'LAYERS_CHECK: #define LAYERS'         WRITE(msgBuf,'(A)') 'LAYERS_CHECK: #define LAYERS'
35         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
36       &                     SQUEEZE_RIGHT , 1)       &                     SQUEEZE_RIGHT, myThid )
37    
38  C--   Print out some key parameters :  C--   Print out some key parameters :
39         CALL WRITE_0D_I( NZZ, INDEX_NONE, 'NZZ =',         CALL WRITE_0D_I( NZZ, INDEX_NONE, 'NZZ =',
# Line 41  C--   Print out some key parameters : Line 43  C--   Print out some key parameters :
43    
44        DO iLa=1,layers_maxNum        DO iLa=1,layers_maxNum
45         IF ( layers_num(iLa).NE.0 ) THEN         IF ( layers_num(iLa).NE.0 ) THEN
46            sfx = '#'
47            IF ( iLa.LE.9 ) WRITE(sfx,'(I1)') iLa
48    
49          CALL WRITE_0D_I( layers_num(iLa), INDEX_NONE, 'layers_num =',          WRITE(tmpName,'(3A)') 'layers_num(', sfx, ') ='
50       &  '/* (1) theta; (2) salt; (3) prho; as averaging field */' )          CALL WRITE_0D_I( layers_num(iLa), INDEX_NONE, tmpName(1:15),
51          CALL WRITE_0D_C( layers_name(iLa),-1,INDEX_NONE,'layers_name =',       &   ' /* averaging field: 1= theta, 2= salt, 3= prho */' )
52       &  '/* (TH) theta; (SLT) salt; (RHO) prho; as averaging field */')          WRITE(tmpName,'(3A)') 'layers_name(', sfx, ') ='
53          CALL WRITE_0D_L ( layers_bolus(iLa), INDEX_NONE,          CALL WRITE_0D_C( layers_name(iLa),-1,INDEX_NONE, tmpName(1:16),
54       &  'layers_bolus =',' /* include potential GM bolus velocity */')       &   ' /* averaging field: TH = theta, SLT= salt, RHO= prho */' )
55            WRITE(tmpName,'(3A)') 'layers_bolus(', sfx, ') ='
56            IF ( useGMRedi )
57         &  CALL WRITE_0D_L ( layers_bolus(iLa), INDEX_NONE, tmpName(1:17),
58         &   ' /* include potential GM bolus velocity */')
59            WRITE(tmpName,'(3A)') 'layers_krho(', sfx, ') ='
60          IF ( layers_num(iLa).EQ.3 )          IF ( layers_num(iLa).EQ.3 )
61       &  CALL WRITE_0D_I( layers_krho(iLa), INDEX_NONE, 'layers_krho =',       &  CALL WRITE_0D_I( layers_krho(iLa), INDEX_NONE, tmpName(1:16),
62       &  ' /* model level to reference potential density to */' )       &   ' /* model level to reference potential density to */' )
63            WRITE(tmpName,'(3A)') 'layers_bounds(*,', sfx, ') ='
64          CALL WRITE_1D_RL( layers_bounds(1,iLa), Nlayers+1, INDEX_K,          CALL WRITE_1D_RL( layers_bounds(1,iLa), Nlayers+1, INDEX_K,
65       &  'layers_bounds =', ' /* boundaries of tracer-averaging bins */')       &   tmpName(1:20), ' /* boundaries of tracer-averaging bins */')
66    
67         ENDIF !IF ( layers_num(iLa).NE.0 ) THEN         ENDIF !IF ( layers_num(iLa).NE.0 ) THEN
68        ENDDO !DO iLa=1,layers_maxNum        ENDDO !DO iLa=1,layers_maxNum
69    
70  C--   Check parameters:  C--   Check parameters:
71          errCount = 0
72        DO iLa=1,layers_maxNum        DO iLa=1,layers_maxNum
73    
74         IF ( layers_num(iLa).NE.0 ) THEN         IF ( layers_num(iLa).NE.0 ) THEN
75  C-    check for inconsistent density layers_bounds specification  C-    Check for inconsistent density layers_bounds specification
76  C     make sure layers_bounds is increasing:  C     a) make sure layers_bounds is increasing:
77          DO k=1,Nlayers          DO k=1,Nlayers
78           IF ( layers_bounds(k,iLa).GE.layers_bounds(k+1,iLa) ) THEN           IF ( layers_bounds(k,iLa).GE.layers_bounds(k+1,iLa) ) THEN
79            WRITE(msgBuf,'(A,I2,A,I4)') 'LAYERS_CHECK(iLa=', iLa,            WRITE(msgBuf,'(A,I2,A,I4)') 'LAYERS_CHECK(iLa=', iLa,
80       &      '): layers_bounds k -> k+1 not increasing at k=', k       &      '): layers_bounds k -> k+1 not increasing at k=', k
81            CALL PRINT_ERROR( msgBuf, myThid )            CALL PRINT_ERROR( msgBuf, myThid )
82            STOP 'ABNORMAL END: S/R LAYERS_CHECK'            errCount = errCount + 1
83           ENDIF           ENDIF
84          ENDDO          ENDDO
85         ENDIF         ENDIF
86    
87         IF ( layers_num(iLa).EQ.3 ) THEN         IF ( layers_num(iLa).EQ.3 ) THEN
88  C     Pot.Density is now expressed as rho-1000 (previously just rho):  C     Pot.Density is now expressed as rho-1000 (previously just rho):
89  C     check for realistic layers_bounds values:  C     b) check for realistic layers_bounds values:
90          tmpVar = layers_bounds(Nlayers+1,iLa) - layers_bounds(1,iLa)          tmpVar = layers_bounds(Nlayers+1,iLa) - layers_bounds(1,iLa)
91          IF ( tmpVar.LE.50. .AND. layers_bounds(1,iLa).GE.950. ) THEN          IF ( tmpVar.LE.50. .AND. layers_bounds(1,iLa).GE.950. ) THEN
92            WRITE(msgBuf,'(A,I2,A)') 'LAYERS_CHECK(iLa=', iLa,            WRITE(msgBuf,'(A,I2,A)') 'LAYERS_CHECK(iLa=', iLa,
# Line 84  C     check for realistic layers_bounds Line 95  C     check for realistic layers_bounds
95            WRITE(msgBuf,'(A,I2,A)') 'LAYERS_CHECK(iLa=', iLa,            WRITE(msgBuf,'(A,I2,A)') 'LAYERS_CHECK(iLa=', iLa,
96       &      '): while it should be expressed as "rho - 1000"'       &      '): while it should be expressed as "rho - 1000"'
97            CALL PRINT_ERROR( msgBuf, myThid )            CALL PRINT_ERROR( msgBuf, myThid )
98            STOP 'ABNORMAL END: S/R LAYERS_CHECK'            errCount = errCount + 1
99            ENDIF
100    C-     Check for valid density reference level:
101            IF ( layers_krho(iLa).LT.1 .OR. layers_krho(iLa).GT.Nr ) THEN
102              WRITE(msgBuf,'(2A,I3,A,I9)') 'LAYERS_CHECK: ',
103         &        'Invalid layer_krho(iLa=', iLa,') =', layers_krho(iLa)
104              CALL PRINT_ERROR( msgBuf, myThid )
105              errCount = errCount + 1
106          ENDIF          ENDIF
107         ENDIF         ENDIF
108    
109        ENDDO        ENDDO
110    
111          IF ( errCount.GE.1 ) THEN
112            WRITE(msgBuf,'(A,I3,A)')
113         &       'LAYERS_CHECK: detected', errCount,' fatal error(s)'
114            CALL PRINT_ERROR( msgBuf, myThid )
115            CALL ALL_PROC_DIE( 0 )
116            STOP 'ABNORMAL END: S/R LAYERS_CHECK'
117          ELSE
118           WRITE(msgBuf,'(A)') 'LAYERS_CHECK: done'
119           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
120         &                     SQUEEZE_RIGHT, myThid )
121          ENDIF
122    
123        _END_MASTER(myThid)        _END_MASTER(myThid)
124  #endif /* ALLOW_LAYERS */  #endif /* ALLOW_LAYERS */
125    

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22