File indexing completed on 2024-05-11 05:10:24 UTC
view on githubraw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
9b091adb85 Jean*0001 #include "DIAG_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE DIAGSTATS_SET_REGIONS( myThid )
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 IMPLICIT NONE
0017
0018
0019 #include "EEPARAMS.h"
0020 #include "SIZE.h"
0021 #include "PARAMS.h"
0022 #include "DIAGNOSTICS_SIZE.h"
0023 #include "DIAGSTATS_REGIONS.h"
0024
0025
0026
0027
0028 INTEGER myThid
0029
0030
0031
0032
0033 CHARACTER*(MAX_LEN_MBUF) msgBuf
0034 INTEGER iLen
0035 INTEGER i, j
0036 INTEGER bi, bj
0037 #ifdef DIAGSTATS_REGION_MASK
0038 CHARACTER*(MAX_LEN_MBUF) tmpBuf
0039 INTEGER ioUnit
0040 INTEGER k, nbReg
41c4545f8f Jean*0041 _RS tmpVar(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
970e63b3d6 Jean*0042 COMMON / SET_REGIONS_LOCAL / tmpVar
9b091adb85 Jean*0043 #else
0044 LOGICAL flag
0045 #endif
0046 INTEGER ILNBLNK
0047 EXTERNAL ILNBLNK
0048
0049 #ifdef DIAGSTATS_REGION_MASK
0050
0051
0052 DO bj = myByLo(myThid), myByHi(myThid)
0053 DO bi = myBxLo(myThid), myBxHi(myThid)
0054 DO k=1,sizRegMsk
41c4545f8f Jean*0055 DO j=1-OLy,sNy+OLy
0056 DO i=1-OLx,sNx+OLx
9b091adb85 Jean*0057 diagSt_regMask(i,j,k,bi,bj) = 0.
0058 ENDDO
0059 ENDDO
0060 ENDDO
0061 ENDDO
0062 ENDDO
970e63b3d6 Jean*0063 ioUnit = -1
9b091adb85 Jean*0064
0065 _BEGIN_MASTER( myThid )
970e63b3d6 Jean*0066 ioUnit = standardMessageUnit
9b091adb85 Jean*0067
02e1437ea2 Jean*0068 IF ( (diagSt_regMaskFile.NE.' ' .AND. nSetRegMskFile.EQ.0)
0069 & .OR.(diagSt_regMaskFile.EQ.' ' .AND. nSetRegMskFile.GT.0) ) THEN
9b091adb85 Jean*0070 WRITE(msgBuf,'(2A)') 'DIAGSTATS_SET_REGIONS:',
02e1437ea2 Jean*0071 & ' regMaskFile and nSetRegMskFile Not consistent'
9b091adb85 Jean*0072 CALL PRINT_ERROR( msgBuf , myThid )
0073 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_REGIONS'
0074 ENDIF
02e1437ea2 Jean*0075 IF ( nSetRegMskFile.GT.sizRegMsk ) THEN
9b091adb85 Jean*0076 WRITE(msgBuf,'(2A,I4,A,I4)') 'DIAGSTATS_SET_REGIONS:',
02e1437ea2 Jean*0077 & ' regMaskFile set-index number=', nSetRegMskFile,
9b091adb85 Jean*0078 & ' exceeds sizRegMsk=', sizRegMsk
0079 CALL PRINT_ERROR( msgBuf , myThid )
0080 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_REGIONS'
0081 ENDIF
0082 _END_MASTER( myThid )
0083
0084
0085 IF ( diagSt_regMaskFile .NE. ' ' ) THEN
970e63b3d6 Jean*0086 _BARRIER
9b091adb85 Jean*0087 iLen = ILNBLNK(diagSt_regMaskFile)
970e63b3d6 Jean*0088 IF (ioUnit.GE.0 ) WRITE(ioUnit,'(2A)')
9b091adb85 Jean*0089 & ' DIAGSTATS_SET_REGIONS: start reading region-mask file: ',
0090 & diagSt_regMaskFile(1:iLen)
02e1437ea2 Jean*0091 DO k=1,nSetRegMskFile
9b091adb85 Jean*0092
970e63b3d6 Jean*0093 IF (ioUnit.GE.0 ) WRITE(ioUnit,'(A,I3)')
02e1437ea2 Jean*0094 & ' DIAGSTATS_SET_REGIONS: reading set k=',k
9b091adb85 Jean*0095 CALL READ_REC_XY_RS( diagSt_regMaskFile, tmpVar, k,
0096 & nIter0, myThid )
970e63b3d6 Jean*0097 IF (ioUnit.GE.0 ) WRITE(ioUnit,'(A,I3,A)')
02e1437ea2 Jean*0098 & ' DIAGSTATS_SET_REGIONS: set k=',k,' <= done'
9b091adb85 Jean*0099
0100 _EXCH_XY_RS( tmpVar, myThid )
0101 DO bj = myByLo(myThid), myByHi(myThid)
0102 DO bi = myBxLo(myThid), myBxHi(myThid)
41c4545f8f Jean*0103 DO j=1-OLy,sNy+OLy
0104 DO i=1-OLx,sNx+OLx
9b091adb85 Jean*0105 diagSt_regMask(i,j,k,bi,bj) = tmpVar(i,j,bi,bj)
0106 ENDDO
0107 ENDDO
0108 ENDDO
0109 ENDDO
0110
0111 ENDDO
0112 ENDIF
0113
0114
02e1437ea2 Jean*0115
0116
9b091adb85 Jean*0117
457000cc7d Jean*0118 _BEGIN_MASTER( myThid )
0119 nSetRegMask = nSetRegMskFile
0120 _END_MASTER( myThid )
9b091adb85 Jean*0121
0122
0123
0124
0125 _BEGIN_MASTER( myThid )
0126
0127 nbReg = 0
0128 DO j=1,nRegions
0129
0130 IF ( diagSt_kRegMsk(j).LT.0 .OR.
0131 & diagSt_kRegMsk(j).GT.sizRegMsk ) THEN
0132 WRITE(msgBuf,'(2A,I3,A,I4)') 'DIAGSTATS_SET_REGIONS: ',
0133 & '(region',j,') invalid region-mask index :',diagSt_kRegMsk(j)
0134 CALL PRINT_ERROR( msgBuf , myThid )
0135 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_REGIONS'
0136
02e1437ea2 Jean*0137 ELSEIF ( diagSt_kRegMsk(j).GT.nSetRegMask ) THEN
9b091adb85 Jean*0138 WRITE(msgBuf,'(2A,I3,A,I3,A)') 'DIAGSTATS_SET_REGIONS: ',
0139 & 'region',j,' , kRegMsk=', diagSt_kRegMsk(j),
0140 & ' <- has not been set !'
0141 CALL PRINT_ERROR( msgBuf , myThid )
0142 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_REGIONS'
0143 ELSEIF ( diagSt_kRegMsk(j).NE.0 ) THEN
0144 nbReg = nbReg + 1
0145
0146
0147
0148
0149
0150
0151
0152
41c4545f8f Jean*0153
9b091adb85 Jean*0154
0155
0156
0157
0158 ENDIF
0159 ENDDO
0160
0161
0162
0163
0164
0165 WRITE(msgBuf,'(A,I4,A)') 'DIAGSTATS_SET_REGIONS: define',
0166 & nbReg,' regions:'
0167 iLen = ILNBLNK(msgBuf)
0168 DO j=1,nRegions
0169 IF ( diagSt_kRegMsk(j).NE.0 ) THEN
0170 iLen = MIN( iLen, MAX_LEN_MBUF -3 )
0171 tmpBuf(1:iLen) = msgBuf(1:iLen)
0172 WRITE(msgBuf,'(A,I3)') tmpBuf(1:iLen),j
0173 iLen = iLen+3
0174 ENDIF
0175 ENDDO
0176 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0177 & SQUEEZE_RIGHT , myThid)
0178 WRITE(msgBuf,'(2A)')
0179 & '------------------------------------------------------------'
0180 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0181 & SQUEEZE_RIGHT , myThid)
0182
0183 _END_MASTER( myThid )
0184
0185 #else /* DIAGSTATS_REGION_MASK */
0186
0187
0188 DO bj = myByLo(myThid), myByHi(myThid)
0189 DO bi = myBxLo(myThid), myBxHi(myThid)
0190
0191
41c4545f8f Jean*0192 DO j=1-OLy,1-OLy
0193 DO i=1-OLx,1-OLx
9b091adb85 Jean*0194 diagSt_regMask(i,j,1,bi,bj) = 0.
0195 ENDDO
0196 ENDDO
0197 ENDDO
0198 ENDDO
0199
0200 _BEGIN_MASTER( myThid )
0201
0202 flag = .FALSE.
0203 DO j=1,nRegions
0204 flag = flag .OR. diagSt_kRegMsk(j).NE.0
0205 & .OR. diagSt_vRegMsk(j).NE.0.
0206 ENDDO
0207 iLen = ILNBLNK(diagSt_regMaskFile)
02e1437ea2 Jean*0208 IF ( flag .OR. iLen.GE.1 .OR. nSetRegMskFile.NE.0 ) THEN
9b091adb85 Jean*0209 WRITE(msgBuf,'(2A)') 'DIAGSTATS_SET_REGIONS:',
0210 & ' #define DIAGSTATS_REGION_MASK missing in DIAG_OPTIONS.h'
0211 CALL PRINT_ERROR( msgBuf , myThid )
0212 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_REGIONS'
0213 ENDIF
0214
0215 WRITE(msgBuf,'(A)') 'DIAGSTATS_SET_REGIONS: define no region'
0216 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0217 & SQUEEZE_RIGHT , myThid)
0218 WRITE(msgBuf,'(2A)')
0219 & '------------------------------------------------------------'
0220 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0221 & SQUEEZE_RIGHT , myThid)
0222
0223 _END_MASTER( myThid )
0224
0225 #endif /* DIAGSTATS_REGION_MASK */
0226
0227 RETURN
0228 END