/[MITgcm]/MITgcm/pkg/exch2/exch2_uv_3d_rx.template
ViewVC logotype

Diff of /MITgcm/pkg/exch2/exch2_uv_3d_rx.template

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

revision 1.6 by jmc, Tue May 12 19:44:58 2009 UTC revision 1.7 by jmc, Sun Jun 28 00:57:51 2009 UTC
# Line 53  C     == Local variables == Line 53  C     == Local variables ==
53  C     OL[wens]       :: Overlap extents in west, east, north, south.  C     OL[wens]       :: Overlap extents in west, east, north, south.
54  C     exchWidth[XY]  :: Extent of regions that will be exchanged.  C     exchWidth[XY]  :: Extent of regions that will be exchanged.
55        INTEGER OLw, OLe, OLn, OLs, exchWidthX, exchWidthY        INTEGER OLw, OLe, OLn, OLs, exchWidthX, exchWidthY
56        INTEGER bi, bj, myTile, k, j        INTEGER bi, bj, myTile, k
57  #ifdef W2_FILL_NULL_REGIONS  #ifdef W2_FILL_NULL_REGIONS
58        INTEGER i        INTEGER i, j
59    #else
60    # ifdef DO_CORNER_COPY_V2U
61          INTEGER j
62    # endif
63  #endif  #endif
64  CEOP  CEOP
65    
# Line 65  CEOP Line 69  CEOP
69        OLs        = OLy        OLs        = OLy
70        exchWidthX = OLx        exchWidthX = OLx
71        exchWidthY = OLy        exchWidthY = OLy
 C     ** NOTE ** The exchange routine we use here does not  
 C                require the preceeding and following barriers.  
 C                However, the slow, simple exchange interface  
 C                that is calling it here is meant to ensure  
 C                that threads are synchronised before exchanges  
 C                begine.  
   
       IF (useCubedSphereExchange) THEN  
72    
73         CALL EXCH2_RX2_CUBE( Uphi, Vphi, withSigns, 'Cg',         CALL EXCH2_RX2_CUBE( Uphi, Vphi, withSigns, 'Cg',
74       I            OLw, OLe, OLs, OLn, myNz,       I            OLw, OLe, OLs, OLn, myNz,
# Line 82  C                begine. Line 78  C                begine.
78       I            OLw, OLe, OLs, OLn, myNz,       I            OLw, OLe, OLs, OLn, myNz,
79       I            exchWidthX, exchWidthY,       I            exchWidthX, exchWidthY,
80       I            FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )       I            FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )
 c      CALL EXCH2_RX2_CUBE( Uphi, Vphi, withSigns, 'Cg',  
 c    I            OLw, OLe, OLs, OLn, myNz,  
 c    I            exchWidthX, exchWidthY,  
 c    I            FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )  
81    
82          IF (useCubedSphereExchange) THEN
83    C---  using CubedSphereExchange:
84        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
85         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
86          myTile = W2_myTileList(bi)          myTile = W2_myTileList(bi,bj)
87    
88  #ifdef DO_CORNER_COPY_V2U  #ifdef DO_CORNER_COPY_V2U
89          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
90       &       exch2_isSedge(myTile) .EQ. 1 ) THEN       &       exch2_isSedge(myTile) .EQ. 1 ) THEN
91           DO k=1,myNz           DO k=1,myNz
92  C         Uphi(snx+1,    0,k,bi,bj)= vPhi(snx+1,    1,k,bi,bj)  C         Uphi(sNx+1,    0,k,bi,bj)= vPhi(sNx+1,    1,k,bi,bj)
93            DO j=1-olx,0            DO j=1-olx,0
94             Uphi(snx+1,    j,k,bi,bj)= vPhi(snx+(1-j),    1,k,bi,bj)             Uphi(sNx+1,    j,k,bi,bj)= vPhi(sNx+(1-j),    1,k,bi,bj)
95            ENDDO            ENDDO
96           ENDDO           ENDDO
97          ENDIF          ENDIF
# Line 105  C         Uphi(snx+1,    0,k,bi,bj)= vPh Line 99  C         Uphi(snx+1,    0,k,bi,bj)= vPh
99           IF ( exch2_isEedge(myTile) .EQ. 1 .AND.           IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
100       &        exch2_isNedge(myTile) .EQ. 1 ) THEN       &        exch2_isNedge(myTile) .EQ. 1 ) THEN
101            DO k=1,myNz            DO k=1,myNz
102  C          Uphi(snx+1,sny+1,k,bi,bj)=-vPhi(snx+1,sny+1,k,bi,bj)  C          Uphi(sNx+1,sNy+1,k,bi,bj)=-vPhi(sNx+1,sNy+1,k,bi,bj)
103             DO j=1,olx             DO j=1,olx
104              Uphi(snx+1,sny+j,k,bi,bj)=-vPhi(snx+j,sny+1,k,bi,bj)              Uphi(sNx+1,sNy+j,k,bi,bj)=-vPhi(sNx+j,sNy+1,k,bi,bj)
105             ENDDO             ENDDO
106            ENDDO            ENDDO
107           ENDIF           ENDIF
# Line 115  C          Uphi(snx+1,sny+1,k,bi,bj)=-vP Line 109  C          Uphi(snx+1,sny+1,k,bi,bj)=-vP
109           IF ( exch2_isEedge(myTile) .EQ. 1 .AND.           IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
110       &        exch2_isNedge(myTile) .EQ. 1 ) THEN       &        exch2_isNedge(myTile) .EQ. 1 ) THEN
111            DO k=1,myNz            DO k=1,myNz
112  C          Uphi(snx+1,sny+1,k,bi,bj)= vPhi(snx+1,sny+1,k,bi,bj)  C          Uphi(sNx+1,sNy+1,k,bi,bj)= vPhi(sNx+1,sNy+1,k,bi,bj)
113             DO j=1,olx             DO j=1,olx
114              Uphi(snx+1,sny+j,k,bi,bj)= vPhi(snx+j,sny+1,k,bi,bj)              Uphi(sNx+1,sNy+j,k,bi,bj)= vPhi(sNx+j,sNy+1,k,bi,bj)
115             ENDDO             ENDDO
116            ENDDO            ENDDO
117           ENDIF           ENDIF
# Line 131  C        to compute vorticity on a wider Line 125  C        to compute vorticity on a wider
125          IF ( exch2_isWedge(myTile) .EQ. 1 .AND.          IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
126       &       exch2_isSedge(myTile) .EQ. 1 ) THEN       &       exch2_isSedge(myTile) .EQ. 1 ) THEN
127  C        Zero SW corner points  C        Zero SW corner points
128           DO K=1,myNz           DO k=1,myNz
129  #ifdef W2_FILL_NULL_REGIONS  #ifdef W2_FILL_NULL_REGIONS
130            DO J=1-OLx,0            DO j=1-OLx,0
131             DO I=1-OLx,0             DO i=1-OLx,0
132              uPhi(I,J,K,bi,bj)=e2FillValue_RX              uPhi(i,j,k,bi,bj)=e2FillValue_RX
133             ENDDO             ENDDO
134            ENDDO            ENDDO
135            DO J=1-OLx,0            DO j=1-OLx,0
136             DO I=1-OLx,0             DO i=1-OLx,0
137              vPhi(I,J,K,bi,bj)=e2FillValue_RX              vPhi(i,j,k,bi,bj)=e2FillValue_RX
138             ENDDO             ENDDO
139            ENDDO            ENDDO
140  #endif  #endif
141              uPhi(0,0,K,bi,bj)=vPhi(1,0,K,bi,bj)              uPhi(0,0,k,bi,bj)=vPhi(1,0,k,bi,bj)
142              vPhi(0,0,K,bi,bj)=uPhi(0,1,K,bi,bj)              vPhi(0,0,k,bi,bj)=uPhi(0,1,k,bi,bj)
143           ENDDO           ENDDO
144          ENDIF          ENDIF
145    
146          IF ( exch2_isWedge(myTile) .EQ. 1 .AND.          IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
147       &       exch2_isNedge(myTile) .EQ. 1 ) THEN       &       exch2_isNedge(myTile) .EQ. 1 ) THEN
148  C        Zero NW corner points  C        Zero NW corner points
149           DO K=1,myNz           DO k=1,myNz
150  #ifdef W2_FILL_NULL_REGIONS  #ifdef W2_FILL_NULL_REGIONS
151            DO J=sNy+1,sNy+OLy            DO j=sNy+1,sNy+OLy
152             DO I=1-OLx,0             DO i=1-OLx,0
153              uPhi(I,J,K,bi,bj)=e2FillValue_RX              uPhi(i,j,k,bi,bj)=e2FillValue_RX
154             ENDDO             ENDDO
155            ENDDO            ENDDO
156            DO J=sNy+2,sNy+OLy            DO j=sNy+2,sNy+OLy
157             DO I=1-OLx,0             DO i=1-OLx,0
158              vPhi(I,J,K,bi,bj)=e2FillValue_RX              vPhi(i,j,k,bi,bj)=e2FillValue_RX
159             ENDDO             ENDDO
160            ENDDO            ENDDO
161  #endif  #endif
162            IF ( withSigns ) THEN            IF ( withSigns ) THEN
163              uPhi(0,sNy+1,K,bi,bj)=-vPhi(1,sNy+2,K,bi,bj)              uPhi(0,sNy+1,k,bi,bj)=-vPhi(1,sNy+2,k,bi,bj)
164              vPhi(0,sNy+2,K,bi,bj)=-uPhi(0,sNy,K,bi,bj)              vPhi(0,sNy+2,k,bi,bj)=-uPhi(0,sNy,k,bi,bj)
165            ELSE            ELSE
166              uPhi(0,sNy+1,K,bi,bj)= vPhi(1,sNy+2,K,bi,bj)              uPhi(0,sNy+1,k,bi,bj)= vPhi(1,sNy+2,k,bi,bj)
167              vPhi(0,sNy+2,K,bi,bj)= uPhi(0,sNy,K,bi,bj)              vPhi(0,sNy+2,k,bi,bj)= uPhi(0,sNy,k,bi,bj)
168            ENDIF            ENDIF
169           ENDDO           ENDDO
170          ENDIF          ENDIF
# Line 178  C        Zero NW corner points Line 172  C        Zero NW corner points
172          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
173       &       exch2_isSedge(myTile) .EQ. 1 ) THEN       &       exch2_isSedge(myTile) .EQ. 1 ) THEN
174  C        Zero SE corner points  C        Zero SE corner points
175           DO K=1,myNz           DO k=1,myNz
176  #ifdef W2_FILL_NULL_REGIONS  #ifdef W2_FILL_NULL_REGIONS
177            DO J=1-OLx,0            DO j=1-OLx,0
178             DO I=sNx+2,sNx+OLx             DO i=sNx+2,sNx+OLx
179              uPhi(I,J,K,bi,bj)=e2FillValue_RX              uPhi(i,j,k,bi,bj)=e2FillValue_RX
180             ENDDO             ENDDO
181            ENDDO            ENDDO
182            DO J=1-OLx,0            DO j=1-OLx,0
183             DO I=sNx+1,sNx+OLx             DO i=sNx+1,sNx+OLx
184              vPhi(I,J,K,bi,bj)=e2FillValue_RX              vPhi(i,j,k,bi,bj)=e2FillValue_RX
185             ENDDO             ENDDO
186            ENDDO            ENDDO
187  #endif  #endif
188            IF ( withSigns ) THEN            IF ( withSigns ) THEN
189              uPhi(sNx+2,0,K,bi,bj)=-vPhi(sNx,0,K,bi,bj)              uPhi(sNx+2,0,k,bi,bj)=-vPhi(sNx,0,k,bi,bj)
190              vPhi(sNx+1,0,K,bi,bj)=-uPhi(sNx+2,1,K,bi,bj)              vPhi(sNx+1,0,k,bi,bj)=-uPhi(sNx+2,1,k,bi,bj)
191            ELSE            ELSE
192              uPhi(sNx+2,0,K,bi,bj)= vPhi(sNx,0,K,bi,bj)              uPhi(sNx+2,0,k,bi,bj)= vPhi(sNx,0,k,bi,bj)
193              vPhi(sNx+1,0,K,bi,bj)= uPhi(sNx+2,1,K,bi,bj)              vPhi(sNx+1,0,k,bi,bj)= uPhi(sNx+2,1,k,bi,bj)
194            ENDIF            ENDIF
195           ENDDO           ENDDO
196          ENDIF          ENDIF
# Line 204  C        Zero SE corner points Line 198  C        Zero SE corner points
198          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.          IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
199       &       exch2_isNedge(myTile) .EQ. 1 ) THEN       &       exch2_isNedge(myTile) .EQ. 1 ) THEN
200  C        Zero NE corner points  C        Zero NE corner points
201           DO K=1,myNz           DO k=1,myNz
202  #ifdef W2_FILL_NULL_REGIONS  #ifdef W2_FILL_NULL_REGIONS
203            DO J=sNy+1,sNy+OLy            DO j=sNy+1,sNy+OLy
204             DO I=sNx+2,sNx+OLx             DO i=sNx+2,sNx+OLx
205              uPhi(I,J,K,bi,bj)=e2FillValue_RX              uPhi(i,j,k,bi,bj)=e2FillValue_RX
206             ENDDO             ENDDO
207            ENDDO            ENDDO
208            DO J=sNy+2,sNy+OLy            DO j=sNy+2,sNy+OLy
209             DO I=sNx+1,sNx+OLx             DO i=sNx+1,sNx+OLx
210              vPhi(I,J,K,bi,bj)=e2FillValue_RX              vPhi(i,j,k,bi,bj)=e2FillValue_RX
211             ENDDO             ENDDO
212            ENDDO            ENDDO
213  #endif  #endif
214              uPhi(sNx+2,sNy+1,K,bi,bj)=vPhi(sNx,sNy+2,K,bi,bj)              uPhi(sNx+2,sNy+1,k,bi,bj)=vPhi(sNx,sNy+2,k,bi,bj)
215              vPhi(sNx+1,sNy+2,K,bi,bj)=uPhi(sNx+2,sNy,K,bi,bj)              vPhi(sNx+1,sNy+2,k,bi,bj)=uPhi(sNx+2,sNy,k,bi,bj)
216           ENDDO           ENDDO
217          ENDIF          ENDIF
218    
219         ENDDO         ENDDO
220        ENDDO        ENDDO
221    C---  using or not using CubedSphereExchange: end
       ELSE  
   
 c      CALL EXCH_RX( Uphi,  
 c    I            OLw, OLe, OLs, OLn, myNz,  
 c    I            exchWidthX, exchWidthY,  
 c    I            FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )  
 c      CALL EXCH_RX( Vphi,  
 c    I            OLw, OLe, OLs, OLn, myNz,  
 c    I            exchWidthX, exchWidthY,  
 c    I            FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )  
        CALL EXCH_3D_RX( Uphi, myNz, myThid )  
        CALL EXCH_3D_RX( Vphi, myNz, myThid )  
   
222        ENDIF        ENDIF
223    
224        RETURN        RETURN

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.22