/[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.12 by dimitri, Thu Mar 8 21:52:27 2012 UTC revision 1.18 by dimitri, Thu Nov 14 17:17:47 2013 UTC
# Line 1  Line 1 
 #define CPL_MONITOR  
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 24  C     == Global variables == Line 23  C     == Global variables ==
23  #include "DYNVARS.h"  #include "DYNVARS.h"
24  #include "GRID.h"  #include "GRID.h"
25  #include "FFIELDS.h"  #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 50  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  # ifdef ALLOW_USE_MPI
52        integer mpistatus(MPI_STATUS_SIZE), mpierr        integer mpistatus(MPI_STATUS_SIZE), mpierr
53  #endif /* ALLOW_USE_MPI */  # 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 61  CEOP Line 59  CEOP
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    
62        COMMON /FFIELDS_tmp/ fu_tmp, fv_tmp, Qnet_tmp, Qsw_tmp, EmPmR_tmp  # ifdef CPL_DEBUG
63        _RS  fu_tmp       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        character*(10) itername
64        _RS  fv_tmp       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        write(itername,'(i10.10)') myIter
65        _RS  Qnet_tmp     (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)  # endif /* CPL_DEBUG */
       _RS  Qsw_tmp      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)  
       _RS  EmPmR_tmp    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)  
66    
67        IF( myTime .EQ. startTime ) THEN        IF( myTime .EQ. startTime ) THEN
68    
# Line 74  C     Send deltatimestep Line 70  C     Send deltatimestep
70         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
71         xfer_scalar = deltat         xfer_scalar = deltat
72         buffsize = 1         buffsize = 1
73  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
74         print*,'MITgcm send TimeInterval', xfer_scalar         print*,'MITgcm send TimeInterval', xfer_scalar
75  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
76    # ifdef CPL_COUPLED
77         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
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)
80         ENDIF         ENDIF
81  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
82         _END_MASTER( myThid )         _END_MASTER( myThid )
83    
84  C     Send grid dimensions (Nx,Ny)  C     Send grid dimensions (Nx,Ny)
# Line 89  C     Send grid dimensions (Nx,Ny) Line 86  C     Send grid dimensions (Nx,Ny)
86         xfer_gridsize(1)=Nx         xfer_gridsize(1)=Nx
87         xfer_gridsize(2)=Ny         xfer_gridsize(2)=Ny
88         buffsize = 2         buffsize = 2
89  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
90         print*,'MITgcm send OceanGridsize', xfer_gridsize         print*,'MITgcm send OceanGridsize', xfer_gridsize
91  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
92    # ifdef CPL_COUPLED
93         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
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)
96         ENDIF         ENDIF
97  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
98           _END_MASTER( myThid )
99    
100    C     Send longitude East of SouthWest corner
101           DO bj=1,nSy
102            DO bi=1,nSx
103             DO j=1,sNy
104              DO i=1,sNx
105               local(i,j,bi,bj) = xG(i,j,bi,bj)
106              ENDDO
107             ENDDO
108            ENDDO
109           ENDDO
110           CALL GATHER_2D( xfer_array, local, myThid )
111    # ifdef CPL_DEBUG
112           CALL PLOT_FIELD_XYRL( xG, 'xG', myIter, myThid )
113    # endif /* CPL_DEBUG */
114    # ifdef CPL_COUPLED
115           _BEGIN_MASTER( myThid )
116           IF ( myworldid .EQ. local_ocean_leader ) THEN
117            buffsize = Nx*Ny
118            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
119         &     local_ice_leader,xGTag,MPI_COMM_WORLD,mpierr)
120           ENDIF
121           _END_MASTER( myThid )
122    # endif /* CPL_COUPLED */
123    
124    C     Send latitude North of SouthWest corner
125           DO bj=1,nSy
126            DO bi=1,nSx
127             DO j=1,sNy
128              DO i=1,sNx
129               local(i,j,bi,bj) = yG(i,j,bi,bj)
130              ENDDO
131             ENDDO
132            ENDDO
133           ENDDO
134           CALL GATHER_2D( xfer_array, local, myThid )
135    # ifdef CPL_DEBUG
136           CALL PLOT_FIELD_XYRL( yG, 'yG', myIter, myThid )
137    # endif /* CPL_DEBUG */
138    # ifdef CPL_COUPLED
139           _BEGIN_MASTER( myThid )
140           IF ( myworldid .EQ. local_ocean_leader ) THEN
141            buffsize = Nx*Ny
142            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
143         &     local_ice_leader,yGTag,MPI_COMM_WORLD,mpierr)
144           ENDIF
145         _END_MASTER( myThid )         _END_MASTER( myThid )
146    # endif /* CPL_COUPLED */
147    
148    C     Send distance in m between SouthWest and SouthEast corner
149           DO bj=1,nSy
150            DO bi=1,nSx
151             DO j=1,sNy
152              DO i=1,sNx
153               local(i,j,bi,bj) = dxG(i,j,bi,bj)
154              ENDDO
155             ENDDO
156            ENDDO
157           ENDDO
158           CALL GATHER_2D( xfer_array, local, myThid )
159    # ifdef CPL_DEBUG
160           CALL PLOT_FIELD_XYRL( dxG, 'dxG', myIter, myThid )
161    # endif /* CPL_DEBUG */
162    # ifdef CPL_COUPLED
163           _BEGIN_MASTER( myThid )
164           IF ( myworldid .EQ. local_ocean_leader ) THEN
165            buffsize = Nx*Ny
166            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
167         &     local_ice_leader,dxGTag,MPI_COMM_WORLD,mpierr)
168           ENDIF
169           _END_MASTER( myThid )
170    # endif /* CPL_COUPLED */
171    
172    C     Send distance in m between SouthWest and NorthEast corner
173           DO bj=1,nSy
174            DO bi=1,nSx
175             DO j=1,sNy
176              DO i=1,sNx
177               local(i,j,bi,bj) = dyG(i,j,bi,bj)
178              ENDDO
179             ENDDO
180            ENDDO
181           ENDDO
182           CALL GATHER_2D( xfer_array, local, myThid )
183    # ifdef CPL_DEBUG
184           CALL PLOT_FIELD_XYRL( dyG, 'dyG', myIter, myThid )
185    # endif /* CPL_DEBUG */
186    # ifdef CPL_COUPLED
187           _BEGIN_MASTER( myThid )
188           IF ( myworldid .EQ. local_ocean_leader ) THEN
189            buffsize = Nx*Ny
190            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
191         &     local_ice_leader,dyGTag,MPI_COMM_WORLD,mpierr)
192           ENDIF
193           _END_MASTER( myThid )
194    # endif /* CPL_COUPLED */
195    
196    C     Send landmask of center of grid cell, 0 is land, >0 is ocean
197           DO bj=1,nSy
198            DO bi=1,nSx
199             DO j=1,sNy
200              DO i=1,sNx
201               local(i,j,bi,bj) = hFacC(i,j,1,bi,bj)
202              ENDDO
203             ENDDO
204            ENDDO
205           ENDDO
206           CALL GATHER_2D( xfer_array, local, myThid )
207    # ifdef CPL_DEBUG
208           CALL PLOT_FIELD_XYRL( hFacC, 'hFacC', myIter, myThid )
209    # endif /* CPL_DEBUG */
210    # ifdef CPL_COUPLED
211           _BEGIN_MASTER( myThid )
212           IF ( myworldid .EQ. local_ocean_leader ) THEN
213            buffsize = Nx*Ny
214            CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
215         &     local_ice_leader,hFacCtag,MPI_COMM_WORLD,mpierr)
216           ENDIF
217           _END_MASTER( myThid )
218    # endif /* CPL_COUPLED */
219    
220  C     Send ice area  C     Send ice area
221         DO bj=1,nSy         DO bj=1,nSy
# Line 110  C     Send ice area Line 228  C     Send ice area
228          ENDDO          ENDDO
229         ENDDO         ENDDO
230         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
231  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
232         CALL PLOT_FIELD_XYRL( AREA, 'AREA', myIter, myThid )         CALL PLOT_FIELD_XYRL( AREA, 'AREA', myIter, myThid )
233  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
234    # ifdef CPL_COUPLED
235         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
236         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
237          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 120  C     Send ice area Line 239  C     Send ice area
239       &     local_ice_leader,AreaTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,AreaTag,MPI_COMM_WORLD,mpierr)
240         ENDIF         ENDIF
241         _END_MASTER( myThid )         _END_MASTER( myThid )
242  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
243    
244  C     Send ice thickness  C     Send ice thickness
245         DO bj=1,nSy         DO bj=1,nSy
# Line 133  C     Send ice thickness Line 252  C     Send ice thickness
252          ENDDO          ENDDO
253         ENDDO         ENDDO
254         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
255  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
256         CALL PLOT_FIELD_XYRL( HEFF, 'HEFF', myIter, myThid )         CALL PLOT_FIELD_XYRL( HEFF, 'HEFF', myIter, myThid )
257  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
258    # ifdef CPL_COUPLED
259         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
260         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
261          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 143  C     Send ice thickness Line 263  C     Send ice thickness
263       &     local_ice_leader,HeffTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HeffTag,MPI_COMM_WORLD,mpierr)
264         ENDIF         ENDIF
265         _END_MASTER( myThid )         _END_MASTER( myThid )
266  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
267    
268  C     Send ice salinity  C     Send ice salinity
269         DO bj=1,nSy         DO bj=1,nSy
# Line 156  C     Send ice salinity Line 276  C     Send ice salinity
276          ENDDO          ENDDO
277         ENDDO         ENDDO
278         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
279  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
280         CALL PLOT_FIELD_XYRL( HSALT, 'HSALT', myIter, myThid )         CALL PLOT_FIELD_XYRL( HSALT, 'HSALT', myIter, myThid )
281  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
282    # ifdef CPL_COUPLED
283         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
284         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
285          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 166  C     Send ice salinity Line 287  C     Send ice salinity
287       &     local_ice_leader,HsaltTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HsaltTag,MPI_COMM_WORLD,mpierr)
288         ENDIF         ENDIF
289         _END_MASTER( myThid )         _END_MASTER( myThid )
290  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
291    
292  C     Send snow thickness  C     Send snow thickness
293         DO bj=1,nSy         DO bj=1,nSy
# Line 179  C     Send snow thickness Line 300  C     Send snow thickness
300          ENDDO          ENDDO
301         ENDDO         ENDDO
302         CALL GATHER_2D( xfer_array, local, myThid )         CALL GATHER_2D( xfer_array, local, myThid )
303  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
304         CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW', myIter, myThid )         CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW', myIter, myThid )
305  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
306    # ifdef CPL_COUPLED
307         _BEGIN_MASTER( myThid )         _BEGIN_MASTER( myThid )
308         IF ( myworldid .EQ. local_ocean_leader ) THEN         IF ( myworldid .EQ. local_ocean_leader ) THEN
309          buffsize = Nx*Ny          buffsize = Nx*Ny
# Line 189  C     Send snow thickness Line 311  C     Send snow thickness
311       &     local_ice_leader,HsnowTag,MPI_COMM_WORLD,mpierr)       &     local_ice_leader,HsnowTag,MPI_COMM_WORLD,mpierr)
312         ENDIF         ENDIF
313         _END_MASTER( myThid )         _END_MASTER( myThid )
314  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
315    
316        ENDIF ! ( myTime .EQ. startTime )        ENDIF ! ( myTime .EQ. startTime )
317    
318    C--   Apply ice open boundary conditions
319    #ifdef ALLOW_OBCS
320          IF ( useOBCS ) THEN
321           CALL OBCS_APPLY_SEAICE( myThid )
322           CALL OBCS_APPLY_UVICE( uice, vice, myThid )
323          ENDIF
324    #endif /* ALLOW_OBCS */
325    
326  C     Send ocean model time  C     Send ocean model time
327        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
328        xfer_scalar = myTime        xfer_scalar = myTime
329        buffsize = 1        buffsize = 1
330  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
331        print*,'MITgcm send OceanTime', xfer_scalar        print*,'MITgcm send OceanTime', xfer_scalar
332  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
333    # ifdef CPL_COUPLED
334        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
335         CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_scalar,buffsize,MPI_DOUBLE_PRECISION,
336       &    local_ice_leader,OceanTimeTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,OceanTimeTag,MPI_COMM_WORLD,mpierr)
337        ENDIF        ENDIF
338  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
339        _END_MASTER( myThid )        _END_MASTER( myThid )
340    
341  C     Send boundary ice area  C     Send boundary ice area
# Line 235  C     Send boundary ice area Line 366  C     Send boundary ice area
366         idx = idx + 1         idx = idx + 1
367         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
368        ENDDO        ENDDO
369  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-4
370    # ifdef CPL_DEBUG
371        CALL PLOT_FIELD_XYRL( AREA, 'AREA obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( AREA, 'AREA obcs', myIter, myThid )
372  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'AREAobcs.', itername,
373         &     xfer_bc_tracer, buffsize, myIter, myThid )
374    # endif /* CPL_DEBUG */
375    # ifdef CPL_COUPLED
376        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
377        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
378  cdb    print*,'MITgcm is about to send AreaBcTag',buffsize  cdb    print*,'MITgcm is about to send AreaBcTag',buffsize
379         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
380       &    local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr)
381  cdb    print*,'MITgcm has sent AreaBcTag',buffsize  cdb    print*,'MITgcm has sent AreaBcTag',buffsize
382        ENDIF        ENDIF
383        _END_MASTER( myThid )        _END_MASTER( myThid )
384  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
385    
386  C     Send boundary ice thickness  C     Send boundary ice thickness
387        DO bj=1,nSy        DO bj=1,nSy
# Line 277  C     Send boundary ice thickness Line 411  C     Send boundary ice thickness
411         idx = idx + 1         idx = idx + 1
412         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
413        ENDDO        ENDDO
414  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-4
415    # ifdef CPL_DEBUG
416        CALL PLOT_FIELD_XYRL( HEFF, 'HEFF obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( HEFF, 'HEFF obcs', myIter, myThid )
417  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'HEFFobcs.', itername,
418         &     xfer_bc_tracer, buffsize, myIter, myThid )
419    # endif /* CPL_DEBUG */
420    # ifdef CPL_COUPLED
421        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
422        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
423         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
424       &    local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr)
425        ENDIF        ENDIF
426        _END_MASTER( myThid )        _END_MASTER( myThid )
427  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
428    
429  C     Send boundary ice salinity  C     Send boundary ice salinity
430        DO bj=1,nSy        DO bj=1,nSy
# Line 317  C     Send boundary ice salinity Line 454  C     Send boundary ice salinity
454         idx = idx + 1         idx = idx + 1
455         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
456        ENDDO        ENDDO
457  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-4
458    # ifdef CPL_DEBUG
459        CALL PLOT_FIELD_XYRL( HSALT, 'HSALT obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( HSALT, 'HSALT obcs', myIter, myThid )
460  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'HSALTobcs.', itername,
461         &     xfer_bc_tracer, buffsize, myIter, myThid )
462    # endif /* CPL_DEBUG */
463    # ifdef CPL_COUPLED
464        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
465        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
466         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
467       &    local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr)
468        ENDIF        ENDIF
469        _END_MASTER( myThid )        _END_MASTER( myThid )
470  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
471    
472  C     Send boundary snow thickness  C     Send boundary snow thickness
473        DO bj=1,nSy        DO bj=1,nSy
# Line 357  C     Send boundary snow thickness Line 497  C     Send boundary snow thickness
497         idx = idx + 1         idx = idx + 1
498         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
499        ENDDO        ENDDO
500  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-4
501    # ifdef CPL_DEBUG
502        CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW obcs', myIter, myThid )
503  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'HSNOWobcs.', itername,
504         &     xfer_bc_tracer, buffsize, myIter, myThid )
505    # endif /* CPL_DEBUG */
506    # ifdef CPL_COUPLED
507        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
508        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-4  
509         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION,
510       &    local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr)
511        ENDIF        ENDIF
512        _END_MASTER( myThid )        _END_MASTER( myThid )
513  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
514    
515  C     Send boundary u ice  C     Send boundary u ice
516        DO bj=1,nSy        DO bj=1,nSy
# Line 397  C     Send boundary u ice Line 540  C     Send boundary u ice
540         idx = idx + 1         idx = idx + 1
541         xfer_bc_veloc(idx) = xfer_array(2,j)         xfer_bc_veloc(idx) = xfer_array(2,j)
542        ENDDO        ENDDO
543  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-6
544    # ifdef CPL_DEBUG
545        CALL PLOT_FIELD_XYRL( UICE, 'UICE obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( UICE, 'UICE obcs', myIter, myThid )
546  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'UICEobcs.', itername,
547         &     xfer_bc_veloc, buffsize, myIter, myThid )
548    # endif /* CPL_DEBUG */
549    # ifdef CPL_COUPLED
550        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
551        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-6  
552         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,
553       &    local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr)
554        ENDIF        ENDIF
555        _END_MASTER( myThid )        _END_MASTER( myThid )
556  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
557    
558  C     Send boundary v ice  C     Send boundary v ice
559        DO bj=1,nSy        DO bj=1,nSy
# Line 437  C     Send boundary v ice Line 583  C     Send boundary v ice
583         idx = idx + 1         idx = idx + 1
584         xfer_bc_veloc(idx) = xfer_array(1,j)         xfer_bc_veloc(idx) = xfer_array(1,j)
585        ENDDO        ENDDO
586  #ifdef CPL_DEBUG        buffsize = 2*(Nx+Ny)-6
587    # ifdef CPL_DEBUG
588        CALL PLOT_FIELD_XYRL( VICE, 'VICE obcs', myIter, myThid )        CALL PLOT_FIELD_XYRL( VICE, 'VICE obcs', myIter, myThid )
589  #else /* CPL_DEBUG */        CALL WRITE_GLVEC_RS ( 'VICEobcs.', itername,
590         &     xfer_bc_veloc, buffsize, myIter, myThid )
591    # endif /* CPL_DEBUG */
592    # ifdef CPL_COUPLED
593        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
594        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
        buffsize = 2*(Nx+Ny)-6  
595         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION,
596       &    local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr)
597        ENDIF        ENDIF
598        _END_MASTER( myThid )        _END_MASTER( myThid )
599  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
600    
601  C     Send u-wind velocity  C     Send u-wind velocity
602        DO bj=1,nSy        DO bj=1,nSy
# Line 460  C     Send u-wind velocity Line 609  C     Send u-wind velocity
609         ENDDO         ENDDO
610        ENDDO        ENDDO
611        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
612  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
613        CALL PLOT_FIELD_XYRL( UWIND, 'UWIND', myIter, myThid )        CALL PLOT_FIELD_XYRL( UWIND, 'UWIND', myIter, myThid )
614  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
615    # ifdef CPL_COUPLED
616        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
617        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
618  # ifdef FIX_FOR_EDGE_WINDS  #  ifdef FIX_FOR_EDGE_WINDS
619         DO j=1,Ny         DO j=1,Ny
620          xfer_array(Nx,j)=xfer_array(Nx-1,j)          xfer_array(Nx,j)=xfer_array(Nx-1,j)
621         ENDDO         ENDDO
622  # endif /* FIX_FOR_EDGE_WINDS */  #  endif /* FIX_FOR_EDGE_WINDS */
623         buffsize = Nx*Ny         buffsize = Nx*Ny
624         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
625       &    local_ice_leader,UwindTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UwindTag,MPI_COMM_WORLD,mpierr)
626        ENDIF        ENDIF
627        _END_MASTER( myThid )        _END_MASTER( myThid )
628  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
629    
630  C     Send v-wind velocity  C     Send v-wind velocity
631        DO bj=1,nSy        DO bj=1,nSy
# Line 488  C     Send v-wind velocity Line 638  C     Send v-wind velocity
638         ENDDO         ENDDO
639        ENDDO        ENDDO
640        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
641  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
642        CALL PLOT_FIELD_XYRL( VWIND, 'VWIND', myIter, myThid )        CALL PLOT_FIELD_XYRL( VWIND, 'VWIND', myIter, myThid )
643  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
644    # ifdef CPL_COUPLED
645        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
646        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
647  # ifdef FIX_FOR_EDGE_WINDS  #  ifdef FIX_FOR_EDGE_WINDS
648         DO i=1,Nx         DO i=1,Nx
649          xfer_array(i,Ny)=xfer_array(i,Ny-1)          xfer_array(i,Ny)=xfer_array(i,Ny-1)
650         ENDDO         ENDDO
651  # endif /* FIX_FOR_EDGE_WINDS */  #  endif /* FIX_FOR_EDGE_WINDS */
652         buffsize = Nx*Ny         buffsize = Nx*Ny
653         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
654       &    local_ice_leader,VwindTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,VwindTag,MPI_COMM_WORLD,mpierr)
655        ENDIF        ENDIF
656        _END_MASTER( myThid )        _END_MASTER( myThid )
657  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
658    
659  C     Send downward longwave radiation  C     Send downward longwave radiation
660        DO bj=1,nSy        DO bj=1,nSy
# Line 516  C     Send downward longwave radiation Line 667  C     Send downward longwave radiation
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  # ifdef CPL_DEBUG
671        CALL PLOT_FIELD_XYRL( LWDOWN, 'LWDOWN', myIter, myThid )        CALL PLOT_FIELD_XYRL( LWDOWN, 'LWDOWN', myIter, myThid )
672  #else /* CPL_DEBUG */  # 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 526  C     Send downward longwave radiation Line 678  C     Send downward longwave radiation
678       &    local_ice_leader,LwDownTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,LwDownTag,MPI_COMM_WORLD,mpierr)
679        ENDIF        ENDIF
680        _END_MASTER( myThid )        _END_MASTER( myThid )
681  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
682    
683  C     Send downward shortwave radiation  C     Send downward shortwave radiation
684        DO bj=1,nSy        DO bj=1,nSy
# Line 539  C     Send downward shortwave radiation Line 691  C     Send downward shortwave radiation
691         ENDDO         ENDDO
692        ENDDO        ENDDO
693        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
694  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
695        CALL PLOT_FIELD_XYRL( SWDOWN, 'SWDOWN', myIter, myThid )        CALL PLOT_FIELD_XYRL( SWDOWN, 'SWDOWN', myIter, myThid )
696  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
697    # ifdef CPL_COUPLED
698        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
699        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
700         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 549  C     Send downward shortwave radiation Line 702  C     Send downward shortwave radiation
702       &    local_ice_leader,SwDownTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,SwDownTag,MPI_COMM_WORLD,mpierr)
703        ENDIF        ENDIF
704        _END_MASTER( myThid )        _END_MASTER( myThid )
705  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
706    
707  C     Send air temperature  C     Send air temperature
708        DO bj=1,nSy        DO bj=1,nSy
# Line 562  C     Send air temperature Line 715  C     Send air temperature
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  # ifdef CPL_DEBUG
719        CALL PLOT_FIELD_XYRL( ATEMP, 'ATEMP', myIter, myThid )        CALL PLOT_FIELD_XYRL( ATEMP, 'ATEMP', myIter, myThid )
720  #else /* CPL_DEBUG */  # 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 572  C     Send air temperature Line 726  C     Send air temperature
726       &    local_ice_leader,AtempTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AtempTag,MPI_COMM_WORLD,mpierr)
727        ENDIF        ENDIF
728        _END_MASTER( myThid )        _END_MASTER( myThid )
729  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
730    
731  C     Send humidity  C     Send humidity
732        DO bj=1,nSy        DO bj=1,nSy
# Line 585  C     Send humidity Line 739  C     Send humidity
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  # ifdef CPL_DEBUG
743        CALL PLOT_FIELD_XYRL( AQH, 'AQH', myIter, myThid )        CALL PLOT_FIELD_XYRL( AQH, 'AQH', myIter, myThid )
744  #else /* CPL_DEBUG */  # 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 595  C     Send humidity Line 750  C     Send humidity
750       &    local_ice_leader,AqhTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,AqhTag,MPI_COMM_WORLD,mpierr)
751        ENDIF        ENDIF
752        _END_MASTER( myThid )        _END_MASTER( myThid )
753  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
754    
755  C     Send precipitation  C     Send precipitation
756        DO bj=1,nSy        DO bj=1,nSy
# Line 608  C     Send precipitation Line 763  C     Send precipitation
763         ENDDO         ENDDO
764        ENDDO        ENDDO
765        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
766  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
767        CALL PLOT_FIELD_XYRL( PRECIP, 'PRECIP', myIter, myThid )        CALL PLOT_FIELD_XYRL( PRECIP, 'PRECIP', myIter, myThid )
768  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
769    # ifdef CPL_COUPLED
770        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
771        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
772         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 618  C     Send precipitation Line 774  C     Send precipitation
774       &    local_ice_leader,PrecipTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,PrecipTag,MPI_COMM_WORLD,mpierr)
775        ENDIF        ENDIF
776        _END_MASTER( myThid )        _END_MASTER( myThid )
777  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
778    
779  C     Send ocean surface temperature  C     Send ocean surface temperature
780        DO bj=1,nSy        DO bj=1,nSy
# Line 631  C     Send ocean surface temperature Line 787  C     Send ocean surface temperature
787         ENDDO         ENDDO
788        ENDDO        ENDDO
789        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
790  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
791        CALL PLOT_FIELD_XYZRL( THETA, 'SST', 1, myIter, myThid )        CALL PLOT_FIELD_XYZRL( THETA, 'SST', 1, myIter, myThid )
792  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
793    # ifdef CPL_COUPLED
794        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
795        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
796         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 641  C     Send ocean surface temperature Line 798  C     Send ocean surface temperature
798       &    local_ice_leader,SstTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,SstTag,MPI_COMM_WORLD,mpierr)
799        ENDIF        ENDIF
800        _END_MASTER( myThid )        _END_MASTER( myThid )
801  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
802    
803  C     Send ocean surface salinity  C     Send ocean surface salinity
804        DO bj=1,nSy        DO bj=1,nSy
# Line 654  C     Send ocean surface salinity Line 811  C     Send ocean surface salinity
811         ENDDO         ENDDO
812        ENDDO        ENDDO
813        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
814  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
815        CALL PLOT_FIELD_XYZRL( SALT, 'SSS', 1, myIter, myThid )        CALL PLOT_FIELD_XYZRL( SALT, 'SSS', 1, myIter, myThid )
816  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
817    # ifdef CPL_COUPLED
818        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
819        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
820         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 664  C     Send ocean surface salinity Line 822  C     Send ocean surface salinity
822       &    local_ice_leader,SssTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,SssTag,MPI_COMM_WORLD,mpierr)
823        ENDIF        ENDIF
824        _END_MASTER( myThid )        _END_MASTER( myThid )
825  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
826    
827  C     Send surface u current  C     Send surface u current
828        DO bj=1,nSy        DO bj=1,nSy
# Line 677  C     Send surface u current Line 835  C     Send surface u current
835         ENDDO         ENDDO
836        ENDDO        ENDDO
837        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
838  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
839        CALL PLOT_FIELD_XYZRL( uVel, 'uVel(k=1)', 1, myIter, myThid )        CALL PLOT_FIELD_XYZRL( uVel, 'uVel(k=1)', 1, myIter, myThid )
840  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
841    # ifdef CPL_COUPLED
842        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
843        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
844         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 687  C     Send surface u current Line 846  C     Send surface u current
846       &    local_ice_leader,UvelTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,UvelTag,MPI_COMM_WORLD,mpierr)
847        ENDIF        ENDIF
848        _END_MASTER( myThid )        _END_MASTER( myThid )
849  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
850    
851  C     Send surface v current  C     Send surface v current
852        DO bj=1,nSy        DO bj=1,nSy
# Line 700  C     Send surface v current Line 859  C     Send surface v current
859         ENDDO         ENDDO
860        ENDDO        ENDDO
861        CALL GATHER_2D( xfer_array, local, myThid )        CALL GATHER_2D( xfer_array, local, myThid )
862  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
863        CALL PLOT_FIELD_XYZRL( vVel, 'vVel(k=1)', 1, myIter, myThid )        CALL PLOT_FIELD_XYZRL( vVel, 'vVel(k=1)', 1, myIter, myThid )
864  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
865    # ifdef CPL_COUPLED
866        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
867        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
868         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 710  C     Send surface v current Line 870  C     Send surface v current
870       &    local_ice_leader,VvelTag,MPI_COMM_WORLD,mpierr)       &    local_ice_leader,VvelTag,MPI_COMM_WORLD,mpierr)
871        ENDIF        ENDIF
872        _END_MASTER( myThid )        _END_MASTER( myThid )
873  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
874    
875  C     Receive ice model time  C     Receive ice model time
876        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
877  #ifdef CPL_DEBUG  # ifdef CPL_DEBUG
878         print*,'MITgcm receive IceTime'         print*,'MITgcm receive IceTime'
879  #else /* CPL_DEBUG */  # endif /* CPL_DEBUG */
880    # ifdef CPL_COUPLED
881        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
882         buffsize = 1         buffsize = 1
883         CALL MPI_RECV(xfer_scalar,1,MPI_DOUBLE_PRECISION,         CALL MPI_RECV(xfer_scalar,1,MPI_DOUBLE_PRECISION,
884       &    local_ice_leader,IceTimeTag,MPI_COMM_WORLD,mpistatus,mpierr)       &    local_ice_leader,IceTimeTag,MPI_COMM_WORLD,mpistatus,mpierr)
885        ENDIF        ENDIF
886  #endif /* CPL_DEBUG */  # endif /* CPL_COUPLED */
887        _END_MASTER( myThid )        _END_MASTER( myThid )
888    
889  C     Receive ice area                     Nx*Ny       Real*8    C     Receive ice area                     Nx*Ny       Real*8  
890  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = AREA(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
891        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
892        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
893         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 745  C     Receive ice area Line 896  C     Receive ice area
896        ENDIF        ENDIF
897        _END_MASTER( myThid )        _END_MASTER( myThid )
898        CALL SCATTER_2D( xfer_array, local, myThid )        CALL SCATTER_2D( xfer_array, local, myThid )
 #endif /* CPL_DEBUG */  
899        DO bj=1,nSy        DO bj=1,nSy
900         DO bi=1,nSx         DO bi=1,nSx
901          DO j=1,sNy          DO j=1,sNy
# Line 755  C     Receive ice area Line 905  C     Receive ice area
905          ENDDO          ENDDO
906         ENDDO         ENDDO
907        ENDDO        ENDDO
908  #ifdef CPL_MONITOR  # endif /* CPL_COUPLED */
909    # ifdef CPL_DEBUG
910        CALL PLOT_FIELD_XYRL( AREA, 'ice area', myIter, myThid )        CALL PLOT_FIELD_XYRL( AREA, 'ice area', myIter, myThid )
911  #endif /* CPL_MONITOR */  # endif /* CPL_DEBUG */
912    
913  C     Receive ice thickness  C     Receive ice thickness
914  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = HEFF(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
915        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
916        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
917         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 779  C     Receive ice thickness Line 920  C     Receive ice thickness
920        ENDIF        ENDIF
921        _END_MASTER( myThid )        _END_MASTER( myThid )
922        CALL SCATTER_2D( xfer_array, local, myThid )        CALL SCATTER_2D( xfer_array, local, myThid )
 #endif /* CPL_DEBUG */  
923        DO bj=1,nSy        DO bj=1,nSy
924         DO bi=1,nSx         DO bi=1,nSx
925          DO j=1,sNy          DO j=1,sNy
# Line 789  C     Receive ice thickness Line 929  C     Receive ice thickness
929          ENDDO          ENDDO
930         ENDDO         ENDDO
931        ENDDO        ENDDO
932  #ifdef CPL_MONITOR  # endif /* CPL_COUPLED */
933    # ifdef CPL_DEBUG
934        CALL PLOT_FIELD_XYRL( HEFF, 'ice thickness', myIter, myThid )        CALL PLOT_FIELD_XYRL( HEFF, 'ice thickness', myIter, myThid )
935  #endif /* CPL_MONITOR */  # endif /* CPL_DEBUG */
936    
937  C     Receive ice salinity  C     Receive ice salinity
938  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = HSALT(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
939        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
940        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
941         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 813  C     Receive ice salinity Line 944  C     Receive ice salinity
944        ENDIF        ENDIF
945        _END_MASTER( myThid )        _END_MASTER( myThid )
946        CALL SCATTER_2D( xfer_array, local, myThid )        CALL SCATTER_2D( xfer_array, local, myThid )
 #endif /* CPL_DEBUG */  
947        DO bj=1,nSy        DO bj=1,nSy
948         DO bi=1,nSx         DO bi=1,nSx
949          DO j=1,sNy          DO j=1,sNy
# Line 823  C     Receive ice salinity Line 953  C     Receive ice salinity
953          ENDDO          ENDDO
954         ENDDO         ENDDO
955        ENDDO        ENDDO
956  #ifdef CPL_MONITOR  # endif /* CPL_COUPLED */
957    # ifdef CPL_DEBUG
958        CALL PLOT_FIELD_XYRL( HSALT, 'ice salinity', myIter, myThid )        CALL PLOT_FIELD_XYRL( HSALT, 'ice salinity', myIter, myThid )
959  #endif /* CPL_MONITOR */  # endif /* CPL_DEBUG */
960    
961  C     Receive snow thickness  C     Receive snow thickness
962  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = HSNOW(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
963        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
964        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
965         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 847  C     Receive snow thickness Line 968  C     Receive snow thickness
968        ENDIF        ENDIF
969        _END_MASTER( myThid )        _END_MASTER( myThid )
970        CALL SCATTER_2D( xfer_array, local, myThid )        CALL SCATTER_2D( xfer_array, local, myThid )
 #endif /* CPL_DEBUG */  
971        DO bj=1,nSy        DO bj=1,nSy
972         DO bi=1,nSx         DO bi=1,nSx
973          DO j=1,sNy          DO j=1,sNy
# Line 857  C     Receive snow thickness Line 977  C     Receive snow thickness
977          ENDDO          ENDDO
978         ENDDO         ENDDO
979        ENDDO        ENDDO
980  #ifdef CPL_MONITOR  # endif /* CPL_COUPLED */
981    # ifdef CPL_DEBUG
982        CALL PLOT_FIELD_XYRL( HSNOW, 'snow thickness', myIter, myThid )        CALL PLOT_FIELD_XYRL( HSNOW, 'snow thickness', myIter, myThid )
983  #endif /* CPL_MONITOR */  # endif /* CPL_DEBUG */
984    
985  C     Receive u surface stress  C     Receive u ice velocity
986  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
987          _BEGIN_MASTER( myThid )
988          IF ( myworldid .EQ. local_ocean_leader ) THEN
989           buffsize = Nx*Ny
990           CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
991         &    local_ice_leader,UiceTag,MPI_COMM_WORLD,mpistatus,mpierr)
992          ENDIF
993          _END_MASTER( myThid )
994          CALL SCATTER_2D( xfer_array, local, myThid )
995        DO bj=1,nSy        DO bj=1,nSy
996         DO bi=1,nSx         DO bi=1,nSx
997          DO j=1,sNy          DO j=1,sNy
998           DO i=1,sNx           DO i=1,sNx
999            local(i,j,bi,bj) = fu(i,j,bi,bj)            UICE(i,j,bi,bj) = local(i,j,bi,bj)
1000           ENDDO           ENDDO
1001          ENDDO          ENDDO
1002         ENDDO         ENDDO
1003        ENDDO        ENDDO
1004  #else /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1005          CALL PLOT_FIELD_XYRL( local, 'uice', myIter, myThid )
1006    #  endif /* CPL_DEBUG */
1007    # endif /* CPL_COUPLED */
1008    # ifdef CPL_DEBUG
1009          CALL PLOT_FIELD_XYRL( UICE, 'uice', myIter, myThid )
1010    # endif /* CPL_DEBUG */
1011    
1012    C     Receive v ice velocity
1013    # ifdef CPL_COUPLED
1014        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1015        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1016         buffsize = Nx*Ny         buffsize = Nx*Ny
1017         CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,         CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
1018       &    local_ice_leader,UstressTag,MPI_COMM_WORLD,mpistatus,mpierr)       &    local_ice_leader,ViceTag,MPI_COMM_WORLD,mpistatus,mpierr)
1019        ENDIF        ENDIF
1020        _END_MASTER( myThid )        _END_MASTER( myThid )
1021        CALL SCATTER_2D( xfer_array, local, myThid )        CALL SCATTER_2D( xfer_array, local, myThid )
# Line 885  C     Receive u surface stress Line 1023  C     Receive u surface stress
1023         DO bi=1,nSx         DO bi=1,nSx
1024          DO j=1,sNy          DO j=1,sNy
1025           DO i=1,sNx           DO i=1,sNx
1026            fu(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) +            VICE(i,j,bi,bj) = local(i,j,bi,bj)
      &                (1.-AREA(i,j,bi,bj)) * fu_tmp(i,j,bi,bj)  
1027           ENDDO           ENDDO
1028          ENDDO          ENDDO
1029         ENDDO         ENDDO
1030        ENDDO        ENDDO
1031  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1032  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'vice', myIter, myThid )
1033        CALL PLOT_FIELD_XYRL( local, 'u stress', myIter, myThid )  #  endif /* CPL_DEBUG */
1034  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1035    # ifdef CPL_DEBUG
1036          CALL PLOT_FIELD_XYRL( VICE, 'vice', myIter, myThid )
1037    # endif /* CPL_DEBUG */
1038    
1039  C     Receive v surface stress  C     Receive u surface stress
1040  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
1041          _BEGIN_MASTER( myThid )
1042          IF ( myworldid .EQ. local_ocean_leader ) THEN
1043           buffsize = Nx*Ny
1044           CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
1045         &    local_ice_leader,UstressTag,MPI_COMM_WORLD,mpistatus,mpierr)
1046          ENDIF
1047          _END_MASTER( myThid )
1048          CALL SCATTER_2D( xfer_array, local, myThid )
1049        DO bj=1,nSy        DO bj=1,nSy
1050         DO bi=1,nSx         DO bi=1,nSx
1051          DO j=1,sNy          DO j=1,sNy
1052           DO i=1,sNx           DO i=1,sNx
1053            local(i,j,bi,bj) = fv(i,j,bi,bj)            fu(i,j,bi,bj) = AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1054         &                (1.-AREA(i,j,bi,bj)) * fu   (i,j,bi,bj)
1055           ENDDO           ENDDO
1056          ENDDO          ENDDO
1057         ENDDO         ENDDO
1058        ENDDO        ENDDO
1059  #else /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1060          CALL PLOT_FIELD_XYRL( local, 'mpm u stress', myIter, myThid )
1061    #  endif /* CPL_DEBUG */
1062    # endif /* CPL_COUPLED */
1063    # ifdef CPL_DEBUG
1064          CALL PLOT_FIELD_XYRL( fu, 'u stress', myIter, myThid )
1065    # endif /* CPL_DEBUG */
1066    
1067    C     Receive v surface stress
1068    # ifdef CPL_COUPLED
1069        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1070        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1071         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 920  C     Receive v surface stress Line 1078  C     Receive v surface stress
1078         DO bi=1,nSx         DO bi=1,nSx
1079          DO j=1,sNy          DO j=1,sNy
1080           DO i=1,sNx           DO i=1,sNx
1081            fv(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) +            fv(i,j,bi,bj) = AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1082       &                (1.-AREA(i,j,bi,bj)) * fv_tmp(i,j,bi,bj)       &                (1.-AREA(i,j,bi,bj)) * fv   (i,j,bi,bj)
1083           ENDDO           ENDDO
1084          ENDDO          ENDDO
1085         ENDDO         ENDDO
1086        ENDDO        ENDDO
1087  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1088  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'mpm v stress', myIter, myThid )
1089        CALL PLOT_FIELD_XYRL( local, 'v stress', myIter, myThid )  #  endif /* CPL_DEBUG */
1090  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1091    # ifdef CPL_DEBUG
1092          CALL PLOT_FIELD_XYRL( fv, 'v stress', myIter, myThid )
1093    # endif /* CPL_DEBUG */
1094    
1095  C     Receive residual shortwave  C     Receive residual shortwave
1096  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = Qsw(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
1097        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1098        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1099         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 955  C     Receive residual shortwave Line 1106  C     Receive residual shortwave
1106         DO bi=1,nSx         DO bi=1,nSx
1107          DO j=1,sNy          DO j=1,sNy
1108           DO i=1,sNx           DO i=1,sNx
1109            Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj) * local(i,j,bi,bj) +            Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1110       &                  (1.-AREA(i,j,bi,bj)) * Qsw_tmp(i,j,bi,bj)       &                  (1.-AREA(i,j,bi,bj)) *   Qsw(i,j,bi,bj)
1111           ENDDO           ENDDO
1112          ENDDO          ENDDO
1113         ENDDO         ENDDO
1114        ENDDO        ENDDO
1115  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1116  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'mpm shortwave', myIter, myThid )
1117        CALL PLOT_FIELD_XYRL( local, 'shortwave', myIter, myThid )  #  endif /* CPL_DEBUG */
1118  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1119    # ifdef CPL_DEBUG
1120          CALL PLOT_FIELD_XYRL( Qsw, 'shortwave', myIter, myThid )
1121    # endif /* CPL_DEBUG */
1122    
1123  C     Receive heat flux  C     Receive heat flux
1124  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = Qnet(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
1125        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1126        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1127         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 991  C     Receive heat flux Line 1135  C     Receive heat flux
1135          DO j=1,sNy          DO j=1,sNy
1136           DO i=1,sNx           DO i=1,sNx
1137            Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) -            Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) -
1138       &                   AREA(i,j,bi,bj) * local(i,j,bi,bj) +       &                   AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1139       &               (1.-AREA(i,j,bi,bj)) * Qnet_tmp(i,j,bi,bj)       &               (1.-AREA(i,j,bi,bj)) *  Qnet(i,j,bi,bj)
1140           ENDDO           ENDDO
1141          ENDDO          ENDDO
1142         ENDDO         ENDDO
1143        ENDDO        ENDDO
1144  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1145  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'mpm heat flux', myIter, myThid )
1146        CALL PLOT_FIELD_XYRL( local, 'heat flux', myIter, myThid )  #  endif /* CPL_DEBUG */
1147  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1148    # ifdef CPL_DEBUG
1149          CALL PLOT_FIELD_XYRL( Qnet, 'heat flux', myIter, myThid )
1150    # endif /* CPL_DEBUG */
1151    
1152  C     Receive freshwater flux  C     Receive freshwater flux
1153  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = EmPmR(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
1154        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1155        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1156         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 1026  C     Receive freshwater flux Line 1163  C     Receive freshwater flux
1163         DO bi=1,nSx         DO bi=1,nSx
1164          DO j=1,sNy          DO j=1,sNy
1165           DO i=1,sNx           DO i=1,sNx
1166            EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj)  * local    (i,j,bi,bj) +            EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj)  * local(i,j,bi,bj) +
1167       &                  ( 1. - AREA(i,j,bi,bj)) * EmPmR_tmp(i,j,bi,bj)       &                  ( 1. - AREA(i,j,bi,bj)) * EmPmR(i,j,bi,bj)
1168           ENDDO           ENDDO
1169          ENDDO          ENDDO
1170         ENDDO         ENDDO
1171        ENDDO        ENDDO
1172  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1173  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'mpm freshwater', myIter, myThid )
1174        CALL PLOT_FIELD_XYRL( local, 'freshwater', myIter, myThid )  #  endif /* CPL_DEBUG */
1175  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1176    # ifdef CPL_DEBUG
1177          CALL PLOT_FIELD_XYRL( EmPmR, 'freshwater', myIter, myThid )
1178    # endif /* CPL_DEBUG */
1179    
1180  C     Receive salt flux  C     Receive salt flux
1181  #ifdef CPL_DEBUG  # ifdef CPL_COUPLED
       DO bj=1,nSy  
        DO bi=1,nSx  
         DO j=1,sNy  
          DO i=1,sNx  
           local(i,j,bi,bj) = fu(i,j,bi,bj)  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
 #else /* CPL_DEBUG */  
1182        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
1183        IF ( myworldid .EQ. local_ocean_leader ) THEN        IF ( myworldid .EQ. local_ocean_leader ) THEN
1184         buffsize = Nx*Ny         buffsize = Nx*Ny
# Line 1066  C     Receive salt flux Line 1196  C     Receive salt flux
1196          ENDDO          ENDDO
1197         ENDDO         ENDDO
1198        ENDDO        ENDDO
1199  #endif /* CPL_DEBUG */  #  ifdef CPL_DEBUG
1200  #ifdef CPL_MONITOR        CALL PLOT_FIELD_XYRL( local, 'mpm salt flux', myIter, myThid )
1201        CALL PLOT_FIELD_XYRL( local, 'salt flux', myIter, myThid )  #  endif /* CPL_DEBUG */
1202  #endif /* CPL_MONITOR */  # endif /* CPL_COUPLED */
1203    # ifdef CPL_DEBUG
1204          CALL PLOT_FIELD_XYRL( saltFlux, 'salt flux', myIter, myThid )
1205    # endif /* CPL_DEBUG */
1206    
1207  #endif /* ALLOW_CPL_MPMICE */  #endif /* ALLOW_CPL_MPMICE */
1208    

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22