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

Contents of /MITgcm/pkg/exch2/exch2_3d_rx.template

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


Revision 1.1 - (show annotations) (download)
Wed Aug 23 15:13:03 2006 UTC (17 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58r_post, checkpoint58q_post, checkpoint58o_post, checkpoint58p_post
exch2 interface S/R:
 - change _XYZ_ interface to _3D_ subroutine (with 3rd dim in argument list)
 - not often used EXCH S/R (exch_z, exch_uv_agrid): keep only the _3D_ version.

1 C $Header: /u/gcmpack/MITgcm/pkg/exch2/exch2_xyz_rx.template,v 1.4 2005/07/27 01:11:19 jmc Exp $
2 C $Name: $
3
4 #include "CPP_EEOPTIONS.h"
5 #include "W2_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: EXCH2_3D_RX
9
10 C !INTERFACE:
11 SUBROUTINE EXCH2_3D_RX(
12 U phi,
13 I myNz, myThid )
14
15 C !DESCRIPTION:
16 C *==========================================================*
17 C | SUBROUTINE EXCH2_3D_RX
18 C | o Handle exchanges for _RX, three-dim scalar arrays.
19 C *==========================================================*
20 C | Invoke appropriate exchange routine depending on type
21 C | of grid (cube or globally indexed) to be operated on.
22 C *==========================================================*
23
24 C !USES:
25 IMPLICIT NONE
26 C === Global data ===
27 #include "SIZE.h"
28 #include "EEPARAMS.h"
29 #include "EESUPPORT.h"
30 #include "W2_EXCH2_TOPOLOGY.h"
31 #include "W2_EXCH2_PARAMS.h"
32
33 C !INPUT/OUTPUT PARAMETERS:
34 C === Routine arguments ===
35 C phi :: Array with overlap regions are to be exchanged
36 C myNz :: 3rd dimension of array to exchange
37 C myThid :: My thread id.
38 INTEGER myNz
39 _RX phi(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNz,nSx,nSy)
40 INTEGER myThid
41
42 C !LOCAL VARIABLES:
43 C == Local variables ==
44 C OL[wens] :: Overlap extents in west, east, north, south.
45 C exchWidth[XY] :: Extent of regions that will be exchanged.
46 INTEGER OLw, OLe, OLn, OLs, exchWidthX, exchWidthY
47 #ifdef W2_FILL_NULL_REGIONS
48 INTEGER bi, bj, myTile, i, j, k
49 #endif
50
51 CEOP
52
53 OLw = OLx
54 OLe = OLx
55 OLn = OLy
56 OLs = OLy
57 exchWidthX = OLx
58 exchWidthY = OLy
59 C ** NOTE ** The exchange routine we use here does not
60 C require the preceeding and following barriers.
61 C However, the slow, simple exchange interface
62 C that is calling it here is meant to ensure
63 C that threads are synchronised before exchanges
64 C begine.
65
66 IF (useCubedSphereExchange) THEN
67
68 CALL EXCH2_RX1_CUBE( phi, 'T ',
69 I OLw, OLe, OLs, OLn, myNz,
70 I exchWidthX, exchWidthY,
71 I FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )
72
73 #ifdef W2_FILL_NULL_REGIONS
74 DO bj=myByLo(myThid),myByHi(myThid)
75 DO bi=myBxLo(myThid),myBxHi(myThid)
76 myTile = W2_myTileList(bi)
77 C South-east corner
78 IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
79 & exch2_isSedge(myTile) .EQ. 1 ) THEN
80 DO j=1-OLy,0
81 DO i=sNx+1,sNx+OLx
82 DO k=1,myNz
83 phi(i,j,k,bi,bj)=e2FillValue_RX
84 ENDDO
85 ENDDO
86 ENDDO
87 ENDIF
88 C North-east corner
89 IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
90 & exch2_isNedge(myTile) .EQ. 1 ) THEN
91 DO j=sNy+1,sNy+OLy
92 DO i=sNx+1,sNx+OLx
93 DO k=1,myNz
94 phi(i,j,k,bi,bj)=e2FillValue_RX
95 ENDDO
96 ENDDO
97 ENDDO
98 ENDIF
99 C South-west corner
100 IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
101 & exch2_isSedge(myTile) .EQ. 1 ) THEN
102 DO j=1-OLy,0
103 DO i=1-OLx,0
104 DO k=1,myNz
105 phi(i,j,k,bi,bj)=e2FillValue_RX
106 ENDDO
107 ENDDO
108 ENDDO
109 ENDIF
110 C North-west corner
111 IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
112 & exch2_isNedge(myTile) .EQ. 1 ) THEN
113 DO j=sNy+1,sNy+OLy
114 DO i=1-OLx,0
115 DO k=1,myNz
116 phi(i,j,k,bi,bj)=e2FillValue_RX
117 ENDDO
118 ENDDO
119 ENDDO
120 ENDIF
121 ENDDO
122 ENDDO
123 #endif /* W2_FILL_NULL_REGIONS */
124
125 CALL EXCH2_RX1_CUBE( phi, 'T ',
126 I OLw, OLe, OLs, OLn, myNz,
127 I exchWidthX, exchWidthY,
128 I FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )
129
130 #ifdef W2_FILL_NULL_REGIONS
131 DO bj=myByLo(myThid),myByHi(myThid)
132 DO bi=myBxLo(myThid),myBxHi(myThid)
133 myTile = W2_myTileList(bi)
134 C South-east corner
135 IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
136 & exch2_isSedge(myTile) .EQ. 1 ) THEN
137 DO j=1-OLy,0
138 DO i=sNx+1,sNx+OLx
139 DO k=1,myNz
140 phi(i,j,k,bi,bj)=e2FillValue_RX
141 ENDDO
142 ENDDO
143 ENDDO
144 ENDIF
145 C North-east corner
146 IF ( exch2_isEedge(myTile) .EQ. 1 .AND.
147 & exch2_isNedge(myTile) .EQ. 1 ) THEN
148 DO j=sNy+1,sNy+OLy
149 DO i=sNx+1,sNx+OLx
150 DO k=1,myNz
151 phi(i,j,k,bi,bj)=e2FillValue_RX
152 ENDDO
153 ENDDO
154 ENDDO
155 ENDIF
156 C South-west corner
157 IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
158 & exch2_isSedge(myTile) .EQ. 1 ) THEN
159 DO j=1-OLy,0
160 DO i=1-OLx,0
161 DO k=1,myNz
162 phi(i,j,k,bi,bj)=e2FillValue_RX
163 ENDDO
164 ENDDO
165 ENDDO
166 ENDIF
167 C North-west corner
168 IF ( exch2_isWedge(myTile) .EQ. 1 .AND.
169 & exch2_isNedge(myTile) .EQ. 1 ) THEN
170 DO j=sNy+1,sNy+OLy
171 DO i=1-OLx,0
172 DO k=1,myNz
173 phi(i,j,k,bi,bj)=e2FillValue_RX
174 ENDDO
175 ENDDO
176 ENDDO
177 ENDIF
178 ENDDO
179 ENDDO
180 #endif /* W2_FILL_NULL_REGIONS */
181
182 ELSE
183
184 CALL EXCH_RX( phi,
185 I OLw, OLe, OLs, OLn, myNz,
186 I exchWidthX, exchWidthY,
187 I FORWARD_SIMULATION, EXCH_UPDATE_CORNERS, myThid )
188
189 ENDIF
190
191 RETURN
192 END
193
194 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
195
196 CEH3 ;;; Local Variables: ***
197 CEH3 ;;; mode:fortran ***
198 CEH3 ;;; End: ***

  ViewVC Help
Powered by ViewVC 1.1.22