48 |
PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats ) |
PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats ) |
49 |
INTEGER bi, bj |
INTEGER bi, bj |
50 |
INTEGER i, k, kd, kCnt, klev, kMlev |
INTEGER i, k, kd, kCnt, klev, kMlev |
51 |
|
_RL tmpMin, tmpMax, tmpVol |
52 |
|
|
53 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
54 |
|
|
91 |
kd = iSm + k - 1 |
kd = iSm + k - 1 |
92 |
IF ( qSdiag(0,jReg,kd,bi,bj).GT.0. ) THEN |
IF ( qSdiag(0,jReg,kd,bi,bj).GT.0. ) THEN |
93 |
IF ( qtmp2(0,k).LE.0. ) THEN |
IF ( qtmp2(0,k).LE.0. ) THEN |
94 |
DO i=0,nStats |
DO i=0,1 |
95 |
qtmp2(i,k) = qSdiag(i,jReg,kd,bi,bj) |
qtmp2(i,k) = qSdiag(i,jReg,kd,bi,bj) |
96 |
ENDDO |
ENDDO |
97 |
ELSE |
ELSE |
98 |
DO i=0,iv |
DO i=0,1 |
99 |
qtmp2(i,k) = qtmp2(i,k) + qSdiag(i,jReg,kd,bi,bj) |
qtmp2(i,k) = qtmp2(i,k) + qSdiag(i,jReg,kd,bi,bj) |
100 |
ENDDO |
ENDDO |
|
qtmp2(im,k) = MIN( qtmp2(im,k),qSdiag(im,jReg,kd,bi,bj) ) |
|
|
qtmp2(ix,k) = MAX( qtmp2(ix,k),qSdiag(ix,jReg,kd,bi,bj) ) |
|
101 |
ENDIF |
ENDIF |
102 |
ENDIF |
ENDIF |
103 |
ENDDO |
ENDDO |
109 |
|
|
110 |
C-- Global min,max & sum (at each level) over all thread & processors : |
C-- Global min,max & sum (at each level) over all thread & processors : |
111 |
DO k=1,klev |
DO k=1,klev |
112 |
|
tmpVol = qtmp1(0,k) |
113 |
DO i=0,iv |
DO i=0,iv |
114 |
_GLOBAL_SUM_R8(qtmp1(i,k),myThid) |
_GLOBAL_SUM_R8(qtmp1(i,k),myThid) |
115 |
ENDDO |
ENDDO |
116 |
qtmp1(im,k) = -qtmp1(im,k) |
IF ( qtmp1(0,k).GT.0. .AND. tmpVol.LE.0. ) THEN |
117 |
_GLOBAL_MAX_R8(qtmp1(im,k),myThid) |
C- In case 1 processor has only empty tiles: |
118 |
qtmp1(im,k) = -qtmp1(im,k) |
tmpMax = qtmp1(1,k)/qtmp1(0,k) |
119 |
_GLOBAL_MAX_R8(qtmp1(ix,k),myThid) |
tmpmin = -tmpMax |
120 |
|
ELSE |
121 |
|
tmpMin = -qtmp1(im,k) |
122 |
|
tmpMax = qtmp1(ix,k) |
123 |
|
ENDIF |
124 |
|
_GLOBAL_MAX_R8(tmpMin,myThid) |
125 |
|
_GLOBAL_MAX_R8(tmpMax,myThid) |
126 |
|
qtmp1(im,k) = -tmpMin |
127 |
|
qtmp1(ix,k) = tmpMax |
128 |
ENDDO |
ENDDO |
129 |
IF ( mate.GT.0 ) THEN |
IF ( mate.GT.0 ) THEN |
130 |
DO k=1,kMlev |
DO k=1,kMlev |
131 |
DO i=0,iv |
DO i=0,1 |
132 |
_GLOBAL_SUM_R8(qtmp2(i,k),myThid) |
_GLOBAL_SUM_R8(qtmp2(i,k),myThid) |
133 |
ENDDO |
ENDDO |
|
qtmp2(im,k) = -qtmp2(im,k) |
|
|
_GLOBAL_MAX_R8(qtmp2(im,k),myThid) |
|
|
qtmp2(im,k) = -qtmp2(im,k) |
|
|
_GLOBAL_MAX_R8(qtmp2(ix,k),myThid) |
|
134 |
ENDDO |
ENDDO |
135 |
ENDIF |
ENDIF |
136 |
|
|
137 |
C-- Vertical integral, min & max : |
C-- Vertical integral, min & max : |
138 |
DO k=1,klev |
DO k=1,klev |
139 |
|
IF ( qtmp1(0,k).GT.0. ) THEN |
140 |
IF ( qtmp1(0,0).LE.0. ) THEN |
IF ( qtmp1(0,0).LE.0. ) THEN |
141 |
DO i=0,nStats |
DO i=0,nStats |
142 |
qtmp1(i,0) = qtmp1(i,k) |
qtmp1(i,0) = qtmp1(i,k) |
148 |
qtmp1(im,0) = MIN(qtmp1(im,0),qtmp1(im,k)) |
qtmp1(im,0) = MIN(qtmp1(im,0),qtmp1(im,k)) |
149 |
qtmp1(ix,0) = MAX(qtmp1(ix,0),qtmp1(ix,k)) |
qtmp1(ix,0) = MAX(qtmp1(ix,0),qtmp1(ix,k)) |
150 |
ENDIF |
ENDIF |
151 |
|
ENDIF |
152 |
ENDDO |
ENDDO |
153 |
IF ( mate.GT.0 ) THEN |
IF ( mate.GT.0 ) THEN |
154 |
DO k=1,kMlev |
DO k=1,kMlev |
155 |
|
IF ( qtmp2(0,k).GT.0. ) THEN |
156 |
IF ( qtmp2(0,0).LE.0. ) THEN |
IF ( qtmp2(0,0).LE.0. ) THEN |
157 |
DO i=0,nStats |
DO i=0,1 |
158 |
qtmp2(i,0) = qtmp2(i,k) |
qtmp2(i,0) = qtmp2(i,k) |
159 |
ENDDO |
ENDDO |
160 |
ELSE |
ELSE |
161 |
DO i=0,iv |
DO i=0,1 |
162 |
qtmp2(i,0) = qtmp2(i,0) + qtmp2(i,k) |
qtmp2(i,0) = qtmp2(i,0) + qtmp2(i,k) |
163 |
ENDDO |
ENDDO |
|
qtmp2(im,0) = MIN(qtmp2(im,0),qtmp2(im,k)) |
|
|
qtmp2(ix,0) = MAX(qtmp2(ix,0),qtmp2(ix,k)) |
|
164 |
ENDIF |
ENDIF |
165 |
|
ENDIF |
166 |
ENDDO |
ENDDO |
167 |
ENDIF |
ENDIF |
168 |
|
|