/[MITgcm]/MITgcm/eesupp/src/exch_z_rx_cube.template
ViewVC logotype

Contents of /MITgcm/eesupp/src/exch_z_rx_cube.template

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


Revision 1.2 - (show annotations) (download)
Tue May 29 14:01:36 2001 UTC (22 years, 11 months ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint40pre3, checkpoint40pre1, checkpoint40pre7, checkpoint40pre6, checkpoint40pre9, checkpoint40pre8, checkpoint40pre2, checkpoint40pre4, checkpoint40pre5, checkpoint40
Changes since 1.1: +170 -0 lines
Merge from branch pre38:
 o essential mods for cubed sphere
 o debugged atmosphere, dynamcis + physics (aim)
 o new packages (mom_vecinv, mom_fluxform, ...)

1 C $Header: /u/gcmpack/models/MITgcmUV/eesupp/src/Attic/exch_z_rx_cube.template,v 1.1.2.4 2001/04/12 10:52:48 cnh Exp $
2 C $Name: pre38-close $
3
4 #include "CPP_EEOPTIONS.h"
5
6 SUBROUTINE EXCH_Z_RX_CUBE(
7 U array,
8 I myOLw, myOLe, myOLn, myOLs, myNz,
9 I exchWidthX, exchWidthY,
10 I simulationMode, cornerMode, myThid )
11 C /==========================================================\
12 C | SUBROUTINE EXCH_Z_RX_CUBE |
13 C | o Control edge exchanges for RX array. |
14 C |==========================================================|
15 C | |
16 C | Controlling routine for exchange of XY edges of an array |
17 C | distributed in X and Y. The routine interfaces to |
18 C | communication routines that can use messages passing |
19 C | exchanges, put type exchanges or get type exchanges. |
20 C | This allows anything from MPI to raw memory channel to |
21 C | memmap segments to be used as a inter-process and/or |
22 C | inter-thread communiation and synchronisation |
23 C | mechanism. |
24 C | Notes -- |
25 C | 1. Some low-level mechanisms such as raw memory-channel |
26 C | or SGI/CRAY shmem put do not have direct Fortran bindings|
27 C | and are invoked through C stub routines. |
28 C | 2. Although this routine is fairly general but it does |
29 C | require nSx and nSy are the same for all innvocations. |
30 C | There are many common data structures ( myByLo, |
31 C | westCommunicationMode, mpiIdW etc... ) tied in with |
32 C | (nSx,nSy). To support arbitray nSx and nSy would require |
33 C | general forms of these. |
34 C | |
35 C \==========================================================/
36 IMPLICIT NONE
37
38 C == Global data ==
39 #include "SIZE.h"
40 #include "EEPARAMS.h"
41 #include "EESUPPORT.h"
42 #include "EXCH.h"
43
44 C == Routine arguments ==
45 C array - Array with edges to exchange.
46 C myOLw - West, East, North and South overlap region sizes.
47 C myOLe
48 C myOLn
49 C myOLs
50 C exchWidthX - Width of data region exchanged in X.
51 C exchWidthY - Width of data region exchanged in Y.
52 C Note --
53 C 1. In theory one could have a send width and
54 C a receive width for each face of each tile. The only
55 C restriction woul be that the send width of one
56 C face should equal the receive width of the sent to
57 C tile face. Dont know if this would be useful. I
58 C have left it out for now as it requires additional
59 C bookeeping.
60 C simulationMode - Forward or reverse mode exchange ( provides
61 C support for adjoint integration of code. )
62 C cornerMode - Flag indicating whether corner updates are
63 C needed.
64 C myThid - Thread number of this instance of S/R EXCH...
65 INTEGER myOLw
66 INTEGER myOLe
67 INTEGER myOLs
68 INTEGER myOLn
69 INTEGER myNz
70 INTEGER exchWidthX
71 INTEGER exchWidthY
72 INTEGER simulationMode
73 INTEGER cornerMode
74 INTEGER myThid
75 _RX array(1-myOLw:sNx+myOLe,
76 & 1-myOLs:sNy+myOLn,
77 & myNZ, nSx, nSy)
78
79 C == Local variables ==
80 C theSimulationMode - Holds working copy of simulation mode
81 C theCornerMode - Holds working copy of corner mode
82 INTEGER theSimulationMode
83 INTEGER theCornerMode
84 INTEGER I,J,K,repeat
85 INTEGER bl,bt,bn,bs,be,bw
86
87 C == Statement function ==
88 INTEGER tilemod
89 tilemod(I)=1+mod(I-1+6,6)
90
91 theSimulationMode = simulationMode
92 theCornerMode = cornerMode
93
94 C For now tile<->tile exchanges are sequentialised through
95 C thread 1. This is a temporary feature for preliminary testing until
96 C general tile decomposistion is in place (CNH April 11, 2001)
97 CALL BAR2( myThid )
98 IF ( myThid .EQ. 1 ) THEN
99
100 DO repeat=1,2
101
102 DO bl = 1, 5, 2
103
104 bt = bl
105 bn=tilemod(bt+2)
106 bs=tilemod(bt-1)
107 be=tilemod(bt+1)
108 bw=tilemod(bt-2)
109
110 DO K = 1, myNz
111 DO J = 1, sNy+1
112 DO I = 0, exchWidthX-1
113
114 C Tile Odd:Odd+2 [get] [North<-West]
115 array(J,sNy+I+1,K,bt,1) = array(I+1,sNy+2-J,K,bn,1)
116 C Tile Odd:Odd+1 [get] [East<-West]
117 array(sNx+I+1,J,K,bt,1) = array(I+1,J,K,be,1)
118
119 cs- these above loop should really have the same range the lower one
120 ENDDO
121 DO I = 1, exchWidthX-0
122 cs- but this replaces the missing I/O routines for now
123
124 C Tile Odd:Odd-1 [get] [South<-North]
125 array(J,1-I,K,bt,1) = array(J,sNy+1-I,K,bs,1)
126 C Tile Odd:Odd-2 [get] [West<-North]
127 array(1-I,J,K,bt,1) = array(sNx+2-J,sNy+1-I,K,bw,1)
128
129 ENDDO
130 ENDDO
131 ENDDO
132
133 bt = bl+1
134 bn=tilemod(bt+1)
135 bs=tilemod(bt-2)
136 be=tilemod(bt+2)
137 bw=tilemod(bt-1)
138
139 DO K = 1, myNz
140 DO J = 1, sNy+1
141 DO I = 0, exchWidthX-1
142
143 C Tile Even:Even+1 [get] [North<-South]
144 array(J,sNy+I+1,K,bt,1) = array(J,I+1,K,bn,1)
145 C Tile Even:Even+2 [get] [East<-South]
146 array(sNx+I+1,J,K,bt,1) = array(sNx+2-J,I+1,K,be,1)
147
148 cs- these above loop should really have the same range the lower one
149 ENDDO
150 DO I = 1, exchWidthX-0
151 cs- but this replaces the missing I/O routines for now
152
153 C Tile Even:Even-2 [get] [South<-East]
154 array(J,1-I,K,bt,1) = array(sNx+1-I,sNy+2-J,K,bs,1)
155 C Tile Even:Even-1 [get] [West<-East]
156 array(1-I,J,K,bt,1) = array(sNx+1-I,J,K,bw,1)
157
158 ENDDO
159 ENDDO
160 ENDDO
161
162 ENDDO
163
164 ENDDO
165
166 ENDIF
167 CALL BAR2(myThid)
168
169 RETURN
170 END

  ViewVC Help
Powered by ViewVC 1.1.22