/[MITgcm]/MITgcm_contrib/MPMice/beaufort/code/cpl_mpmice.F
ViewVC logotype

Diff of /MITgcm_contrib/MPMice/beaufort/code/cpl_mpmice.F

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

revision 1.1 by dimitri, Sun May 31 03:41:36 2009 UTC revision 1.17 by dimitri, Thu Mar 22 02:16:33 2012 UTC
# Line 1  Line 1 
 #define CPL_DEBUG  
1  #define FIX_FOR_EDGE_WINDS  #define FIX_FOR_EDGE_WINDS
2  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
3  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
# Line 23  C     == Global variables == Line 22  C     == Global variables ==
22  #include "PARAMS.h"  #include "PARAMS.h"
23  #include "DYNVARS.h"  #include "DYNVARS.h"
24  #include "GRID.h"  #include "GRID.h"
25    #include "FFIELDS.h"
26    #include "SEAICE_OPTIONS.h"
27    #include "SEAICE_SIZE.h"
28    #include "SEAICE.h"
29  #ifdef ALLOW_EXF  #ifdef ALLOW_EXF
30  # include "EXF_OPTIONS.h"  # include "EXF_OPTIONS.h"
31  # include "EXF_FIELDS.h"  # include "EXF_FIELDS.h"
32  #endif  #endif
 #ifdef ALLOW_SEAICE  
 # include "SEAICE_OPTIONS.h"  
 # include "SEAICE.h"  
 #endif  
33    
34        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
35        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
# Line 49  CEOP Line 48  CEOP
48        COMMON /CPL_MPI_ID/        COMMON /CPL_MPI_ID/
49       &        myworldid, local_ocean_leader, local_ice_leader       &        myworldid, local_ocean_leader, local_ice_leader
50        integer myworldid, local_ocean_leader, local_ice_leader        integer myworldid, local_ocean_leader, local_ice_leader
51    # ifdef ALLOW_USE_MPI
52        integer mpistatus(MPI_STATUS_SIZE), mpierr        integer mpistatus(MPI_STATUS_SIZE), mpierr
53    # endif /* ALLOW_USE_MPI */
54        integer xfer_gridsize(2)        integer xfer_gridsize(2)
55        integer i, j, bi, bj, buffsize, idx        integer i, j, bi, bj, buffsize, idx
56        Real*8  xfer_scalar        Real*8  xfer_scalar
# Line 57  CEOP Line 58  CEOP
58        Real*8  xfer_bc_tracer(2*(Nx+Ny)-4)        Real*8  xfer_bc_tracer(2*(Nx+Ny)-4)
59        Real*8  xfer_bc_veloc(2*(Nx+Ny)-6)        Real*8  xfer_bc_veloc(2*(Nx+Ny)-6)
60        _RL     local(1:sNx,1:sNy,nSx,nSy)        _RL     local(1:sNx,1:sNy,nSx,nSy)
61        _RL ScatArray(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)  
62    # ifdef CPL_DEBUG
63          character*(10) itername
64          write(itername,'(i10.10)') myIter
65    # endif /* CPL_DEBUG */
66    
67        IF( myTime .EQ. startTime ) THEN        IF( myTime .EQ. startTime ) THEN
68    
69  C     Send deltatimestep  C     Send deltatimestep
70         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
71           xfer_scalar = deltat
72           buffsize = 1
73    # ifdef CPL_DEBUG
74           print*,'MITgcm send TimeInterval', xfer_scalar
75    # endif /* CPL_DEBUG */
76    # ifdef CPL_COUPLED
77         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
         xfer_scalar = deltat  
         buffsize = 1  
78          CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,          CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,
79       &     local_ice_leader,TimeIntervalTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,TimeIntervalTag,MPI_COMM_WORLD,mpierr)
 #ifdef CPL_DEBUG  
         print*,'MITgcm send TimeInterval', xfer_scalar  
 #endif  
80         ENDIF         ENDIF
81    # endif /* CPL_COUPLED */
82         _END_MASTER( myThid )         _END_MASTER( myThid )
83    
84  C     Send grid dimensions (Nx,Ny)  C     Send grid dimensions (Nx,Ny)
85         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
86           xfer_gridsize(1)=Nx
87           xfer_gridsize(2)=Ny
88           buffsize = 2
89    # ifdef CPL_DEBUG
90           print*,'MITgcm send OceanGridsize', xfer_gridsize
91    # endif /* CPL_DEBUG */
92    # ifdef CPL_COUPLED
93         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
         xfer_gridsize(1)=Nx  
         xfer_gridsize(2)=Ny  
         buffsize = 2  
94          CALL MPI_SEND(xfer_gridsize,buffsize,MPI_INTEGER,          CALL MPI_SEND(xfer_gridsize,buffsize,MPI_INTEGER,
95       &     local_ice_leader,OceanGridsizeTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,OceanGridsizeTag,MPI_COMM_WORLD,mpierr)
 #ifdef CPL_DEBUG  
         print*,'MITgcm send OceanGridsize', xfer_gridsize  
 #endif  
96         ENDIF         ENDIF
97    # endif /* CPL_COUPLED */
98         _END_MASTER( myThid )         _END_MASTER( myThid )
99    
100  C     Send ice area  C     Send ice area
# Line 93  C     Send ice area Line 102  C     Send ice area
102          DO bi=1,nSx          DO bi=1,nSx
103           DO j=1,sNy           DO j=1,sNy
104            DO i=1,sNx            DO i=1,sNx
105             local(i,j,bi,bj) = AREA(i,j,1,bi,bj)             local(i,j,bi,bj) = AREA(i,j,bi,bj)
106            ENDDO            ENDDO
107           ENDDO           ENDDO
108          ENDDO          ENDDO
109         ENDDO         ENDDO
110         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
111    # ifdef CPL_DEBUG
112           CALL PLOT_FIELD_XYRL( AREA, 'AREA', myIter, myThid )
113    # endif /* CPL_DEBUG */
114    # ifdef CPL_COUPLED
115         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
116         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
117          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 106  C     Send ice area Line 119  C     Send ice area
119       &     local_ice_leader,AreaTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,AreaTag,MPI_COMM_WORLD,mpierr)
120         ENDIF         ENDIF
121         _END_MASTER( myThid )         _END_MASTER( myThid )
122  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
        CALL PLOT_FIELD_XYRL( AREA, 'AREA', myIter, myThid )  
 #endif  
123    
124  C     Send ice thickness  C     Send ice thickness
125         DO bj=1,nSy         DO bj=1,nSy
126          DO bi=1,nSx          DO bi=1,nSx
127           DO j=1,sNy           DO j=1,sNy
128            DO i=1,sNx            DO i=1,sNx
129             local(i,j,bi,bj) = HEFF(i,j,1,bi,bj)             local(i,j,bi,bj) = HEFF(i,j,bi,bj)
130            ENDDO            ENDDO
131           ENDDO           ENDDO
132          ENDDO          ENDDO
133         ENDDO         ENDDO
134         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
135    # ifdef CPL_DEBUG
136           CALL PLOT_FIELD_XYRL( HEFF, 'HEFF', myIter, myThid )
137    # endif /* CPL_DEBUG */
138    # ifdef CPL_COUPLED
139         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
140         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
141          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 128  C     Send ice thickness Line 143  C     Send ice thickness
143       &     local_ice_leader,HeffTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HeffTag,MPI_COMM_WORLD,mpierr)
144         ENDIF         ENDIF
145         _END_MASTER( myThid )         _END_MASTER( myThid )
146  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
        CALL PLOT_FIELD_XYRL( HEFF, 'HEFF', myIter, myThid )  
 #endif  
147    
148  C     Send ice salinity  C     Send ice salinity
149         DO bj=1,nSy         DO bj=1,nSy
# Line 143  C     Send ice salinity Line 156  C     Send ice salinity
156          ENDDO          ENDDO
157         ENDDO         ENDDO
158         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
159    # ifdef CPL_DEBUG
160           CALL PLOT_FIELD_XYRL( HSALT, 'HSALT', myIter, myThid )
161    # endif /* CPL_DEBUG */
162    # ifdef CPL_COUPLED
163         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
164         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
165          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 150  C     Send ice salinity Line 167  C     Send ice salinity
167       &     local_ice_leader,HsaltTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HsaltTag,MPI_COMM_WORLD,mpierr)
168         ENDIF         ENDIF
169         _END_MASTER( myThid )         _END_MASTER( myThid )
170  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
         CALL PLOT_FIELD_XYRL( HSALT, 'HSALT', myIter, myThid )  
 #endif  
171    
172  C     Send snow thickness  C     Send snow thickness
173         DO bj=1,nSy         DO bj=1,nSy
# Line 165  C     Send snow thickness Line 180  C     Send snow thickness
180          ENDDO          ENDDO
181         ENDDO         ENDDO
182         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
183    # ifdef CPL_DEBUG
184           CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW', myIter, myThid )
185    # endif /* CPL_DEBUG */
186    # ifdef CPL_COUPLED
187         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
188         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
189          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 172  C     Send snow thickness Line 191  C     Send snow thickness
191       &     local_ice_leader,HsnowTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HsnowTag,MPI_COMM_WORLD,mpierr)
192         ENDIF         ENDIF
193         _END_MASTER( myThid )         _END_MASTER( myThid )
194  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
         CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW', myIter, myThid )  
 #endif  
195    
196        ENDIF ! ( myTime .EQ. startTime )        ENDIF ! ( myTime .EQ. startTime )
197    
198    C--   Apply ice open boundary conditions
199    #ifdef ALLOW_OBCS
200          IF ( useOBCS ) THEN
201           CALL OBCS_APPLY_SEAICE( myThid )
202           CALL OBCS_APPLY_UVICE( uice, vice, myThid )
203          ENDIF
204    #endif /* ALLOW_OBCS */
205    
206  C     Send ocean model time  C     Send ocean model time
207        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
208          xfer_scalar = myTime
209          buffsize = 1
210    # ifdef CPL_DEBUG
211          print*,'MITgcm send OceanTime', xfer_scalar
212    # endif /* CPL_DEBUG */
213    # ifdef CPL_COUPLED
214        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        xfer_scalar = myTime  
        buffsize = 1  
215         CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,
216       &    local_ice_leader,OceanTimeTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,OceanTimeTag,MPI_COMM_WORLD,mpierr)
 #ifdef CPL_DEBUG  
        print*,'MITgcm send OceanTime', xfer_scalar  
 #endif  
217        ENDIF        ENDIF
218    # endif /* CPL_COUPLED */
219        _END_MASTER( myThid )        _END_MASTER( myThid )
220    
221  C     Send boundary ice area  C     Send boundary ice area
# Line 196  C     Send boundary ice area Line 223  C     Send boundary ice area
223         DO bi=1,nSx         DO bi=1,nSx
224          DO j=1,sNy          DO j=1,sNy
225           DO i=1,sNx           DO i=1,sNx
226            local(i,j,bi,bj) = AREA(i,j,1,bi,bj)            local(i,j,bi,bj) = AREA(i,j,bi,bj)
227           ENDDO           ENDDO
228          ENDDO          ENDDO
229         ENDDO         ENDDO
# Line 211  C     Send boundary ice area Line 238  C     Send boundary ice area
238         idx = idx + 1         idx = idx + 1
239         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
240        ENDDO        ENDDO
241        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
242         idx = idx + 1         idx = idx + 1
243         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
244        ENDDO        ENDDO
245        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
246         idx = idx + 1         idx = idx + 1
247         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
248        ENDDO        ENDDO
249          buffsize = 2*(Nx+Ny)-4
250    # ifdef CPL_DEBUG
251          CALL PLOT_FIELD_XYRL( AREA, 'AREA obcs', myIter, myThid )
252          CALL WRITE_GLVEC_RS ( 'AREAobcs.', itername,
253         &     xfer_bc_tracer, buffsize, myIter, myThid )
254    # endif /* CPL_DEBUG */
255    # ifdef CPL_COUPLED
256        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
257        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
258         buffsize = 2*(Nx+Ny)-4  cdb    print*,'MITgcm is about to send AreaBcTag',buffsize
        print*,'MITgcm is about to send AreaBcTag',buffsize  
259         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
260       &    local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr)
261         print*,'MITgcm has sent AreaBcTag',buffsize  cdb    print*,'MITgcm has sent AreaBcTag',buffsize
262        ENDIF        ENDIF
263        _END_MASTER( myThid )        _END_MASTER( myThid )
264    # endif /* CPL_COUPLED */
265    
266  C     Send boundary ice thickness  C     Send boundary ice thickness
267        DO bj=1,nSy        DO bj=1,nSy
268         DO bi=1,nSx         DO bi=1,nSx
269          DO j=1,sNy          DO j=1,sNy
270           DO i=1,sNx           DO i=1,sNx
271            local(i,j,bi,bj) = HEFF(i,j,1,bi,bj)            local(i,j,bi,bj) = HEFF(i,j,bi,bj)
272           ENDDO           ENDDO
273          ENDDO          ENDDO
274         ENDDO         ENDDO
# Line 249  C     Send boundary ice thickness Line 283  C     Send boundary ice thickness
283         idx = idx + 1         idx = idx + 1
284         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
285        ENDDO        ENDDO
286        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
287         idx = idx + 1         idx = idx + 1
288         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
289        ENDDO        ENDDO
290        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
291         idx = idx + 1         idx = idx + 1
292         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
293        ENDDO        ENDDO
294          buffsize = 2*(Nx+Ny)-4
295    # ifdef CPL_DEBUG
296          CALL PLOT_FIELD_XYRL( HEFF, 'HEFF obcs', myIter, myThid )
297          CALL WRITE_GLVEC_RS ( 'HEFFobcs.', itername,
298         &     xfer_bc_tracer, buffsize, myIter, myThid )
299    # endif /* CPL_DEBUG */
300    # ifdef CPL_COUPLED
301        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
302        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
303         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
304       &    local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr)
305        ENDIF        ENDIF
306        _END_MASTER( myThid )        _END_MASTER( myThid )
307    # endif /* CPL_COUPLED */
308    
309  C     Send boundary ice salinity  C     Send boundary ice salinity
310        DO bj=1,nSy        DO bj=1,nSy
# Line 285  C     Send boundary ice salinity Line 326  C     Send boundary ice salinity
326         idx = idx + 1         idx = idx + 1
327         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
328        ENDDO        ENDDO
329        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
330         idx = idx + 1         idx = idx + 1
331         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
332        ENDDO        ENDDO
333        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
334         idx = idx + 1         idx = idx + 1
335         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
336        ENDDO        ENDDO
337          buffsize = 2*(Nx+Ny)-4
338    # ifdef CPL_DEBUG
339          CALL PLOT_FIELD_XYRL( HSALT, 'HSALT obcs', myIter, myThid )
340          CALL WRITE_GLVEC_RS ( 'HSALTobcs.', itername,
341         &     xfer_bc_tracer, buffsize, myIter, myThid )
342    # endif /* CPL_DEBUG */
343    # ifdef CPL_COUPLED
344        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
345        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
346         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
347       &    local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr)
348        ENDIF        ENDIF
349        _END_MASTER( myThid )        _END_MASTER( myThid )
350    # endif /* CPL_COUPLED */
351    
352  C     Send boundary snow thickness  C     Send boundary snow thickness
353        DO bj=1,nSy        DO bj=1,nSy
# Line 321  C     Send boundary snow thickness Line 369  C     Send boundary snow thickness
369         idx = idx + 1         idx = idx + 1
370         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
371        ENDDO        ENDDO
372        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
373         idx = idx + 1         idx = idx + 1
374         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
375        ENDDO        ENDDO
376        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
377         idx = idx + 1         idx = idx + 1
378         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
379        ENDDO        ENDDO
380          buffsize = 2*(Nx+Ny)-4
381    # ifdef CPL_DEBUG
382          CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW obcs', myIter, myThid )
383          CALL WRITE_GLVEC_RS ( 'HSNOWobcs.', itername,
384         &     xfer_bc_tracer, buffsize, myIter, myThid )
385    # endif /* CPL_DEBUG */
386    # ifdef CPL_COUPLED
387        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
388        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
389         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
390       &    local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr)
391        ENDIF        ENDIF
392        _END_MASTER( myThid )        _END_MASTER( myThid )
393    # endif /* CPL_COUPLED */
394    
395  C     Send boundary u ice  C     Send boundary u ice
396        DO bj=1,nSy        DO bj=1,nSy
397         DO bi=1,nSx         DO bi=1,nSx
398          DO j=1,sNy          DO j=1,sNy
399           DO i=1,sNx           DO i=1,sNx
400            local(i,j,bi,bj) = UICE(i,j,1,bi,bj)            local(i,j,bi,bj) = UICE(i,j,bi,bj)
401           ENDDO           ENDDO
402          ENDDO          ENDDO
403         ENDDO         ENDDO
# Line 357  C     Send boundary u ice Line 412  C     Send boundary u ice
412         idx = idx + 1         idx = idx + 1
413         xfer_bc_veloc(idx) = xfer_array(Nx,j)         xfer_bc_veloc(idx) = xfer_array(Nx,j)
414        ENDDO        ENDDO
415        DO i = (Nx-1), -1, 2        DO i = (Nx-1), 2, -1
416         idx = idx + 1         idx = idx + 1
417         xfer_bc_veloc(idx) = xfer_array(i,Ny)         xfer_bc_veloc(idx) = xfer_array(i,Ny)
418        ENDDO        ENDDO
419        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
420         idx = idx + 1         idx = idx + 1
421         xfer_bc_veloc(idx) = xfer_array(2,j)         xfer_bc_veloc(idx) = xfer_array(2,j)
422        ENDDO        ENDDO
423          buffsize = 2*(Nx+Ny)-6
424    # ifdef CPL_DEBUG
425          CALL PLOT_FIELD_XYRL( UICE, 'UICE obcs', myIter, myThid )
426          CALL WRITE_GLVEC_RS ( 'UICEobcs.', itername,
427         &     xfer_bc_veloc, buffsize, myIter, myThid )
428    # endif /* CPL_DEBUG */
429    # ifdef CPL_COUPLED
430        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
431        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-6  
432         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,
433       &    local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr)
434        ENDIF        ENDIF
435        _END_MASTER( myThid )        _END_MASTER( myThid )
436    # endif /* CPL_COUPLED */
437    
438  C     Send boundary v ice  C     Send boundary v ice
439        DO bj=1,nSy        DO bj=1,nSy
440         DO bi=1,nSx         DO bi=1,nSx
441          DO j=1,sNy          DO j=1,sNy
442           DO i=1,sNx           DO i=1,sNx
443            local(i,j,bi,bj) = VICE(i,j,1,bi,bj)            local(i,j,bi,bj) = VICE(i,j,bi,bj)
444           ENDDO           ENDDO
445          ENDDO          ENDDO
446         ENDDO         ENDDO
# Line 393  C     Send boundary v ice Line 455  C     Send boundary v ice
455         idx = idx + 1         idx = idx + 1
456         xfer_bc_veloc(idx) = xfer_array(Nx,j)         xfer_bc_veloc(idx) = xfer_array(Nx,j)
457        ENDDO        ENDDO
458        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
459         idx = idx + 1         idx = idx + 1
460         xfer_bc_veloc(idx) = xfer_array(i,Ny)         xfer_bc_veloc(idx) = xfer_array(i,Ny)
461        ENDDO        ENDDO
462        DO j = (Ny-1), -1, 3        DO j = (Ny-1), 3, -1
463         idx = idx + 1         idx = idx + 1
464         xfer_bc_veloc(idx) = xfer_array(1,j)         xfer_bc_veloc(idx) = xfer_array(1,j)
465        ENDDO        ENDDO
466          buffsize = 2*(Nx+Ny)-6
467    # ifdef CPL_DEBUG
468          CALL PLOT_FIELD_XYRL( VICE, 'VICE obcs', myIter, myThid )
469          CALL WRITE_GLVEC_RS ( 'VICEobcs.', itername,
470         &     xfer_bc_veloc, buffsize, myIter, myThid )
471    # endif /* CPL_DEBUG */
472    # ifdef CPL_COUPLED
473        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
474        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-6  
475         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,
476       &    local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr)
477        ENDIF        ENDIF
478        _END_MASTER( myThid )        _END_MASTER( myThid )
479    # endif /* CPL_COUPLED */
480    
481  C     Send u-wind velocity  C     Send u-wind velocity
482        DO bj=1,nSy        DO bj=1,nSy
# Line 420  C     Send u-wind velocity Line 489  C     Send u-wind velocity
489         ENDDO         ENDDO
490        ENDDO        ENDDO
491        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
492    # ifdef CPL_DEBUG
493          CALL PLOT_FIELD_XYRL( UWIND, 'UWIND', myIter, myThid )
494    # endif /* CPL_DEBUG */
495    # ifdef CPL_COUPLED
496        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
497        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
498  #ifdef FIX_FOR_EDGE_WINDS  #  ifdef FIX_FOR_EDGE_WINDS
499         DO j=1,Ny         DO j=1,Ny
500          xfer_array(Nx,j)=xfer_array(Nx-1,j)          xfer_array(Nx,j)=xfer_array(Nx-1,j)
501         ENDDO         ENDDO
502  #endif  #  endif /* FIX_FOR_EDGE_WINDS */
503         buffsize = Nx*Ny         buffsize = Nx*Ny
504         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
505       &    local_ice_leader,UwindTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UwindTag,MPI_COMM_WORLD,mpierr)
506        ENDIF        ENDIF
507        _END_MASTER( myThid )        _END_MASTER( myThid )
508    # endif /* CPL_COUPLED */
509    
510  C     Send v-wind velocity  C     Send v-wind velocity
511        DO bj=1,nSy        DO bj=1,nSy
# Line 444  C     Send v-wind velocity Line 518  C     Send v-wind velocity
518         ENDDO         ENDDO
519        ENDDO        ENDDO
520        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
521    # ifdef CPL_DEBUG
522          CALL PLOT_FIELD_XYRL( VWIND, 'VWIND', myIter, myThid )
523    # endif /* CPL_DEBUG */
524    # ifdef CPL_COUPLED
525        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
526        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
527  #ifdef FIX_FOR_EDGE_WINDS  #  ifdef FIX_FOR_EDGE_WINDS
528         DO i=1,Nx         DO i=1,Nx
529          xfer_array(i,Ny)=xfer_array(i,Ny-1)          xfer_array(i,Ny)=xfer_array(i,Ny-1)
530         ENDDO         ENDDO
531  #endif  #  endif /* FIX_FOR_EDGE_WINDS */
532         buffsize = Nx*Ny         buffsize = Nx*Ny
533         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
534       &    local_ice_leader,VwindTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,VwindTag,MPI_COMM_WORLD,mpierr)
535        ENDIF        ENDIF
536        _END_MASTER( myThid )        _END_MASTER( myThid )
537    # endif /* CPL_COUPLED */
538    
539  C     Send downward longwave radiation  C     Send downward longwave radiation
540        DO bj=1,nSy        DO bj=1,nSy
# Line 468  C     Send downward longwave radiation Line 547  C     Send downward longwave radiation
547         ENDDO         ENDDO
548        ENDDO        ENDDO
549        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
550    # ifdef CPL_DEBUG
551          CALL PLOT_FIELD_XYRL( LWDOWN, 'LWDOWN', myIter, myThid )
552    # endif /* CPL_DEBUG */
553    # ifdef CPL_COUPLED
554        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
555        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
556         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 475  C     Send downward longwave radiation Line 558  C     Send downward longwave radiation
558       &    local_ice_leader,LwDownTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,LwDownTag,MPI_COMM_WORLD,mpierr)
559        ENDIF        ENDIF
560        _END_MASTER( myThid )        _END_MASTER( myThid )
561    # endif /* CPL_COUPLED */
562    
563  C     Send downward shortwave radiation  C     Send downward shortwave radiation
564        DO bj=1,nSy        DO bj=1,nSy
# Line 487  C     Send downward shortwave radiation Line 571  C     Send downward shortwave radiation
571         ENDDO         ENDDO
572        ENDDO        ENDDO
573        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
574    # ifdef CPL_DEBUG
575          CALL PLOT_FIELD_XYRL( SWDOWN, 'SWDOWN', myIter, myThid )
576    # endif /* CPL_DEBUG */
577    # ifdef CPL_COUPLED
578        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
579        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
580         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 494  C     Send downward shortwave radiation Line 582  C     Send downward shortwave radiation
582       &    local_ice_leader,SwDownTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,SwDownTag,MPI_COMM_WORLD,mpierr)
583        ENDIF        ENDIF
584        _END_MASTER( myThid )        _END_MASTER( myThid )
585    # endif /* CPL_COUPLED */
586    
587  C     Send air temperature  C     Send air temperature
588        DO bj=1,nSy        DO bj=1,nSy
# Line 506  C     Send air temperature Line 595  C     Send air temperature
595         ENDDO         ENDDO
596        ENDDO        ENDDO
597        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
598    # ifdef CPL_DEBUG
599          CALL PLOT_FIELD_XYRL( ATEMP, 'ATEMP', myIter, myThid )
600    # endif /* CPL_DEBUG */
601    # ifdef CPL_COUPLED
602        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
603        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
604         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 513  C     Send air temperature Line 606  C     Send air temperature
606       &    local_ice_leader,AtempTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AtempTag,MPI_COMM_WORLD,mpierr)
607        ENDIF        ENDIF
608        _END_MASTER( myThid )        _END_MASTER( myThid )
609    # endif /* CPL_COUPLED */
610    
611  C     Send humidity  C     Send humidity
612        DO bj=1,nSy        DO bj=1,nSy
# Line 525  C     Send humidity Line 619  C     Send humidity
619         ENDDO         ENDDO
620        ENDDO        ENDDO
621        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
622    # ifdef CPL_DEBUG
623          CALL PLOT_FIELD_XYRL( AQH, 'AQH', myIter, myThid )
624    # endif /* CPL_DEBUG */
625    # ifdef CPL_COUPLED
626        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
627        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
628         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 532  C     Send humidity Line 630  C     Send humidity
630       &    local_ice_leader,AqhTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AqhTag,MPI_COMM_WORLD,mpierr)
631        ENDIF        ENDIF
632        _END_MASTER( myThid )        _END_MASTER( myThid )
633    # endif /* CPL_COUPLED */
634    
635  C     Send precipitation  C     Send precipitation
636        DO bj=1,nSy        DO bj=1,nSy
# Line 544  C     Send precipitation Line 643  C     Send precipitation
643         ENDDO         ENDDO
644        ENDDO        ENDDO
645        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
646    # ifdef CPL_DEBUG
647          CALL PLOT_FIELD_XYRL( PRECIP, 'PRECIP', myIter, myThid )
648    # endif /* CPL_DEBUG */
649    # ifdef CPL_COUPLED
650        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
651        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
652         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 551  C     Send precipitation Line 654  C     Send precipitation
654       &    local_ice_leader,PrecipTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,PrecipTag,MPI_COMM_WORLD,mpierr)
655        ENDIF        ENDIF
656        _END_MASTER( myThid )        _END_MASTER( myThid )
657    # endif /* CPL_COUPLED */
658    
659  C     Send ocean surface temperature  C     Send ocean surface temperature
660        DO bj=1,nSy        DO bj=1,nSy
# Line 563  C     Send ocean surface temperature Line 667  C     Send ocean surface temperature
667         ENDDO         ENDDO
668        ENDDO        ENDDO
669        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
670    # ifdef CPL_DEBUG
671          CALL PLOT_FIELD_XYZRL( THETA, 'SST', 1, myIter, myThid )
672    # endif /* CPL_DEBUG */
673    # ifdef CPL_COUPLED
674        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
675        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
676         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 570  C     Send ocean surface temperature Line 678  C     Send ocean surface temperature
678       &    local_ice_leader,SstTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,SstTag,MPI_COMM_WORLD,mpierr)
679        ENDIF        ENDIF
680        _END_MASTER( myThid )        _END_MASTER( myThid )
681    # endif /* CPL_COUPLED */
682    
683    C     Send ocean surface salinity
684          DO bj=1,nSy
685           DO bi=1,nSx
686            DO j=1,sNy
687             DO i=1,sNx
688              local(i,j,bi,bj) = salt(i,j,1,bi,bj)
689             ENDDO
690            ENDDO
691           ENDDO
692          ENDDO
693          CALL GATHER_2D( xfer_array, local, myThid )
694    # ifdef CPL_DEBUG
695          CALL PLOT_FIELD_XYZRL( SALT, 'SSS', 1, myIter, myThid )
696    # endif /* CPL_DEBUG */
697    # ifdef CPL_COUPLED
698          _BEGIN_MASTER( myThid )
699          IF ( myworldid .EQ. local_ocean_leader ) THEN
700           buffsize = Nx*Ny
701           CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
702         &    local_ice_leader,SssTag,MPI_COMM_WORLD,mpierr)
703          ENDIF
704          _END_MASTER( myThid )
705    # endif /* CPL_COUPLED */
706    
707  C     Send surface u current  C     Send surface u current
708        DO bj=1,nSy        DO bj=1,nSy
# Line 582  C     Send surface u current Line 715  C     Send surface u current
715         ENDDO         ENDDO
716        ENDDO        ENDDO
717        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
718    # ifdef CPL_DEBUG
719          CALL PLOT_FIELD_XYZRL( uVel, 'uVel(k=1)', 1, myIter, myThid )
720    # endif /* CPL_DEBUG */
721    # ifdef CPL_COUPLED
722        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
723        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
724         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 589  C     Send surface u current Line 726  C     Send surface u current
726       &    local_ice_leader,UvelTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UvelTag,MPI_COMM_WORLD,mpierr)
727        ENDIF        ENDIF
728        _END_MASTER( myThid )        _END_MASTER( myThid )
729    # endif /* CPL_COUPLED */
730    
731  C     Send surface v current  C     Send surface v current
732        DO bj=1,nSy        DO bj=1,nSy
# Line 601  C     Send surface v current Line 739  C     Send surface v current
739         ENDDO         ENDDO
740        ENDDO        ENDDO
741        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
742    # ifdef CPL_DEBUG
743          CALL PLOT_FIELD_XYZRL( vVel, 'vVel(k=1)', 1, myIter, myThid )
744    # endif /* CPL_DEBUG */
745    # ifdef CPL_COUPLED
746        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
747        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
748         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 608  C     Send surface v current Line 750  C     Send surface v current
750       &    local_ice_leader,VvelTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,VvelTag,MPI_COMM_WORLD,mpierr)
751        ENDIF        ENDIF
752        _END_MASTER( myThid )        _END_MASTER( myThid )
753  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
         CALL PLOT_FIELD_XYZRL( vVel, 'vVel(k=1)', 1, myIter, myThid )  
 #endif  
754    
755  C     Receive ice model time  C     Receive ice model time
756        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
757    # ifdef CPL_DEBUG
758           print*,'MITgcm receive IceTime'
759    # endif /* CPL_DEBUG */
760    # ifdef CPL_COUPLED
761        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
762         buffsize = 1         buffsize = 1
763         CALL MPI_RECV(xfer_scalar,1,MPI_DOUBLE_PRECISION,         CALL MPI_RECV(xfer_scalar,1,MPI_DOUBLE_PRECISION,
764       &    local_ice_leader,IceTimeTag,MPI_COMM_WORLD,mpistatus,mpierr)       &    local_ice_leader,IceTimeTag,MPI_COMM_WORLD,mpistatus,mpierr)
 #ifdef CPL_DEBUG  
        print*,'MITgcm receive IceTime', xfer_scalar  
 #endif  
765        ENDIF        ENDIF
766    # endif /* CPL_COUPLED */
767        _END_MASTER( myThid )        _END_MASTER( myThid )
768    
769  C     Receive ice area                     Nx*Ny       Real*8    C     Receive ice area                     Nx*Ny       Real*8  
770    # ifdef CPL_COUPLED
771        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
772        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
773         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 637  C     Receive ice area Line 780  C     Receive ice area
780         DO bi=1,nSx         DO bi=1,nSx
781          DO j=1,sNy          DO j=1,sNy
782           DO i=1,sNx           DO i=1,sNx
783            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            AREA(i,j,bi,bj) = local(i,j,bi,bj)
784           ENDDO           ENDDO
785          ENDDO          ENDDO
786         ENDDO         ENDDO
787        ENDDO        ENDDO
788  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
789        CALL PLOT_FIELD_XYRL( ScatArray, 'ice area', myIter, myThid )  # ifdef CPL_DEBUG
790  #endif        CALL PLOT_FIELD_XYRL( AREA, 'ice area', myIter, myThid )
791    # endif /* CPL_DEBUG */
792    
793  C     Receive ice thickness  C     Receive ice thickness
794    # ifdef CPL_COUPLED
795        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
796        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
797         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 659  C     Receive ice thickness Line 804  C     Receive ice thickness
804         DO bi=1,nSx         DO bi=1,nSx
805          DO j=1,sNy          DO j=1,sNy
806           DO i=1,sNx           DO i=1,sNx
807            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HEFF(i,j,bi,bj) = local(i,j,bi,bj)
808           ENDDO           ENDDO
809          ENDDO          ENDDO
810         ENDDO         ENDDO
811        ENDDO        ENDDO
812  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
813        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )  # ifdef CPL_DEBUG
814  #endif        CALL PLOT_FIELD_XYRL( HEFF, 'ice thickness', myIter, myThid )
815    # endif /* CPL_DEBUG */
816    
817  C     Receive ice salinity  C     Receive ice salinity
818    # ifdef CPL_COUPLED
819        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
820        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
821         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 681  C     Receive ice salinity Line 828  C     Receive ice salinity
828         DO bi=1,nSx         DO bi=1,nSx
829          DO j=1,sNy          DO j=1,sNy
830           DO i=1,sNx           DO i=1,sNx
831            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HSALT(i,j,bi,bj) = local(i,j,bi,bj)
832           ENDDO           ENDDO
833          ENDDO          ENDDO
834         ENDDO         ENDDO
835        ENDDO        ENDDO
836  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
837        CALL PLOT_FIELD_XYRL( ScatArray, 'ice salinity', myIter, myThid )  # ifdef CPL_DEBUG
838  #endif        CALL PLOT_FIELD_XYRL( HSALT, 'ice salinity', myIter, myThid )
839    # endif /* CPL_DEBUG */
840    
841  C     Receive snow thickness  C     Receive snow thickness
842    # ifdef CPL_COUPLED
843        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
844        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
845         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 703  C     Receive snow thickness Line 852  C     Receive snow thickness
852         DO bi=1,nSx         DO bi=1,nSx
853          DO j=1,sNy          DO j=1,sNy
854           DO i=1,sNx           DO i=1,sNx
855            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HSNOW(i,j,bi,bj) = local(i,j,bi,bj)
856           ENDDO           ENDDO
857          ENDDO          ENDDO
858         ENDDO         ENDDO
859        ENDDO        ENDDO
860  #ifdef CPL_DEBUG  # endif /* CPL_COUPLED */
861        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )  # ifdef CPL_DEBUG
862  #endif        CALL PLOT_FIELD_XYRL( HSNOW, 'snow thickness', myIter, myThid )
863    # endif /* CPL_DEBUG */
864    
865    C     Receive u ice velocity
866    # ifdef CPL_COUPLED
867          _BEGIN_MASTER( myThid )
868          IF ( myworldid .EQ. local_ocean_leader ) THEN
869           buffsize = Nx*Ny
870           CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
871         &    local_ice_leader,UiceTag,MPI_COMM_WORLD,mpistatus,mpierr)
872          ENDIF
873          _END_MASTER( myThid )
874          CALL SCATTER_2D( xfer_array, local, myThid )
875          DO bj=1,nSy
876           DO bi=1,nSx
877            DO j=1,sNy
878             DO i=1,sNx
879              UICE(i,j,bi,bj) = local(i,j,bi,bj)
880             ENDDO
881            ENDDO
882           ENDDO
883          ENDDO
884    #  ifdef CPL_DEBUG
885          CALL PLOT_FIELD_XYRL( local, 'uice', myIter, myThid )
886    #  endif /* CPL_DEBUG */
887    # endif /* CPL_COUPLED */
888    # ifdef CPL_DEBUG
889          CALL PLOT_FIELD_XYRL( UICE, 'uice', myIter, myThid )
890    # endif /* CPL_DEBUG */
891    
892    C     Receive v ice velocity
893    # ifdef CPL_COUPLED
894          _BEGIN_MASTER( myThid )
895          IF ( myworldid .EQ. local_ocean_leader ) THEN
896           buffsize = Nx*Ny
897           CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
898         &    local_ice_leader,ViceTag,MPI_COMM_WORLD,mpistatus,mpierr)
899          ENDIF
900          _END_MASTER( myThid )
901          CALL SCATTER_2D( xfer_array, local, myThid )
902          DO bj=1,nSy
903           DO bi=1,nSx
904            DO j=1,sNy
905             DO i=1,sNx
906              VICE(i,j,bi,bj) = local(i,j,bi,bj)
907             ENDDO
908            ENDDO
909           ENDDO
910          ENDDO
911    #  ifdef CPL_DEBUG
912          CALL PLOT_FIELD_XYRL( local, 'vice', myIter, myThid )
913    #  endif /* CPL_DEBUG */
914    # endif /* CPL_COUPLED */
915    # ifdef CPL_DEBUG
916          CALL PLOT_FIELD_XYRL( VICE, 'vice', myIter, myThid )
917    # endif /* CPL_DEBUG */
918    
919  C     Receive u surface stress  C     Receive u surface stress
920    # ifdef CPL_COUPLED
921        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
922        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
923         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 725  C     Receive u surface stress Line 930  C     Receive u surface stress
930         DO bi=1,nSx         DO bi=1,nSx
931          DO j=1,sNy          DO j=1,sNy
932           DO i=1,sNx           DO i=1,sNx
933            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            fu(i,j,bi,bj) = AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
934         &                (1.-AREA(i,j,bi,bj)) * fu   (i,j,bi,bj)
935           ENDDO           ENDDO
936          ENDDO          ENDDO
937         ENDDO         ENDDO
938        ENDDO        ENDDO
939  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
940        CALL PLOT_FIELD_XYRL( ScatArray, 'u stress', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm u stress', myIter, myThid )
941  #endif  #  endif /* CPL_DEBUG */
942    # endif /* CPL_COUPLED */
943    # ifdef CPL_DEBUG
944          CALL PLOT_FIELD_XYRL( fu, 'u stress', myIter, myThid )
945    # endif /* CPL_DEBUG */
946    
947  C     Receive v surface stress  C     Receive v surface stress
948    # ifdef CPL_COUPLED
949        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
950        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
951         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 747  C     Receive v surface stress Line 958  C     Receive v surface stress
958         DO bi=1,nSx         DO bi=1,nSx
959          DO j=1,sNy          DO j=1,sNy
960           DO i=1,sNx           DO i=1,sNx
961            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            fv(i,j,bi,bj) = AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
962         &                (1.-AREA(i,j,bi,bj)) * fv   (i,j,bi,bj)
963           ENDDO           ENDDO
964          ENDDO          ENDDO
965         ENDDO         ENDDO
966        ENDDO        ENDDO
967  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
968        CALL PLOT_FIELD_XYRL( ScatArray, 'v stress', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm v stress', myIter, myThid )
969  #endif  #  endif /* CPL_DEBUG */
970    # endif /* CPL_COUPLED */
971    # ifdef CPL_DEBUG
972          CALL PLOT_FIELD_XYRL( fv, 'v stress', myIter, myThid )
973    # endif /* CPL_DEBUG */
974    
975  C     Receive residual shortwave  C     Receive residual shortwave
976    # ifdef CPL_COUPLED
977        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
978        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
979         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 769  C     Receive residual shortwave Line 986  C     Receive residual shortwave
986         DO bi=1,nSx         DO bi=1,nSx
987          DO j=1,sNy          DO j=1,sNy
988           DO i=1,sNx           DO i=1,sNx
989            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
990         &                  (1.-AREA(i,j,bi,bj)) *   Qsw(i,j,bi,bj)
991           ENDDO           ENDDO
992          ENDDO          ENDDO
993         ENDDO         ENDDO
994        ENDDO        ENDDO
995  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
996        CALL PLOT_FIELD_XYRL( ScatArray, 'shortwave', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm shortwave', myIter, myThid )
997  #endif  #  endif /* CPL_DEBUG */
998    # endif /* CPL_COUPLED */
999    # ifdef CPL_DEBUG
1000          CALL PLOT_FIELD_XYRL( Qsw, 'shortwave', myIter, myThid )
1001    # endif /* CPL_DEBUG */
1002    
1003  C     Receive heat flux  C     Receive heat flux
1004    # ifdef CPL_COUPLED
1005        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1006        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1007         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 791  C     Receive heat flux Line 1014  C     Receive heat flux
1014         DO bi=1,nSx         DO bi=1,nSx
1015          DO j=1,sNy          DO j=1,sNy
1016           DO i=1,sNx           DO i=1,sNx
1017            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) -
1018         &                   AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1019         &               (1.-AREA(i,j,bi,bj)) *  Qnet(i,j,bi,bj)
1020           ENDDO           ENDDO
1021          ENDDO          ENDDO
1022         ENDDO         ENDDO
1023        ENDDO        ENDDO
1024  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
1025        CALL PLOT_FIELD_XYRL( ScatArray, 'heat flux', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm heat flux', myIter, myThid )
1026  #endif  #  endif /* CPL_DEBUG */
1027    # endif /* CPL_COUPLED */
1028    # ifdef CPL_DEBUG
1029          CALL PLOT_FIELD_XYRL( Qnet, 'heat flux', myIter, myThid )
1030    # endif /* CPL_DEBUG */
1031    
1032  C     Receive freshwater flux  C     Receive freshwater flux
1033    # ifdef CPL_COUPLED
1034        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1035        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1036         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 813  C     Receive freshwater flux Line 1043  C     Receive freshwater flux
1043         DO bi=1,nSx         DO bi=1,nSx
1044          DO j=1,sNy          DO j=1,sNy
1045           DO i=1,sNx           DO i=1,sNx
1046            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1047         &                  ( 1. - AREA(i,j,bi,bj)) * EmPmR(i,j,bi,bj)
1048           ENDDO           ENDDO
1049          ENDDO          ENDDO
1050         ENDDO         ENDDO
1051        ENDDO        ENDDO
1052  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
1053        CALL PLOT_FIELD_XYRL( ScatArray, 'freshwater', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm freshwater', myIter, myThid )
1054  #endif  #  endif /* CPL_DEBUG */
1055    # endif /* CPL_COUPLED */
1056    # ifdef CPL_DEBUG
1057          CALL PLOT_FIELD_XYRL( EmPmR, 'freshwater', myIter, myThid )
1058    # endif /* CPL_DEBUG */
1059    
1060  C     Receive salt flux  C     Receive salt flux
1061    # ifdef CPL_COUPLED
1062        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1063        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1064         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 835  C     Receive salt flux Line 1071  C     Receive salt flux
1071         DO bi=1,nSx         DO bi=1,nSx
1072          DO j=1,sNy          DO j=1,sNy
1073           DO i=1,sNx           DO i=1,sNx
1074            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            saltFlux(i,j,bi,bj) = - AREA(i,j,bi,bj) * local(i,j,bi,bj)
1075           ENDDO           ENDDO
1076          ENDDO          ENDDO
1077         ENDDO         ENDDO
1078        ENDDO        ENDDO
1079  #ifdef CPL_DEBUG  #  ifdef CPL_DEBUG
1080        CALL PLOT_FIELD_XYRL( ScatArray, 'salt flux', myIter, myThid )        CALL PLOT_FIELD_XYRL( local, 'mpm salt flux', myIter, myThid )
1081  #endif  #  endif /* CPL_DEBUG */
1082    # endif /* CPL_COUPLED */
1083    # ifdef CPL_DEBUG
1084          CALL PLOT_FIELD_XYRL( saltFlux, 'salt flux', myIter, myThid )
1085    # endif /* CPL_DEBUG */
1086    
1087  #endif /* ALLOW_CPL_MPMICE */  #endif /* ALLOW_CPL_MPMICE */
1088    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.22