Index: /issm/trunk-jpl/test/MITgcm/code/cpl_issm.F
===================================================================
--- /issm/trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22707)
+++ /issm/trunk-jpl/test/MITgcm/code/cpl_issm.F	(revision 22708)
@@ -51,17 +51,19 @@
       _R8 local(1:sNx,1:sNy,nSx,nSy)
 
+C Initialization steps I1, I2, and I3:
       IF( myTime .EQ. startTime ) THEN
 
-C     Send/receive scalar values
+C   I1. ISSM sends CouplingTime, the interval at which we couple
          IF( myProcId .EQ. 0 ) THEN
-            _BEGIN_MASTER( myThid )         
+            _BEGIN_MASTER( myThid )
             call MPI_Recv(CouplingTime,1,MPI_DOUBLE,0,10001000,
      &           toissmcomm,mpistatus,mpiRC)
             print*, 'Ocean received CouplingTime: ', CouplingTime
-            call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,
-     &           toissmcomm,mpistatus,mpiRC)
-            print*, 'Ocean received IceModelTime: ', IceModelTime
-            call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,
-     &           toissmcomm,mpistatus)
+            _END_MASTER( myThid )
+         ENDIF
+
+C   I2. MITgcm sends grid size (NX and NY)
+         IF( myProcId .EQ. 0 ) THEN
+            _BEGIN_MASTER( myThid )
             call MPI_Send(Nx,1,MPI_INT,0,10001003,
      &           toissmcomm,mpistatus)
@@ -69,8 +71,9 @@
      &           toissmcomm,mpistatus)
             _END_MASTER( myThid )
-         endif
+         ENDIF
 
+C   I3. MITgcm sends grid coordinates of center of cells
+C       (longitude -180 <= XC < 180 and latitude YC)
 C     Send longitude East of center of cell
-         print*,'this is xC',xC
          DO bj=1,nSy
             DO bi=1,nSx
@@ -82,9 +85,7 @@
             ENDDO
          ENDDO
-         print*,'this is local xC',local
          CALL BAR2( myThid ) 
          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
      &        .FALSE., .FALSE., myThid )
-         print*,'this is global XC',xfer_array
          IF( myProcId .EQ. 0 ) THEN
             _BEGIN_MASTER( myThid )
@@ -95,7 +96,5 @@
          ENDIF
          CALL BAR2( myThid )
-
 C     Send latitude North of center of cell
-         print*,'this is yC',yC
          DO bj=1,nSy
             DO bi=1,nSx
@@ -107,9 +106,7 @@
             ENDDO
          ENDDO
-         print*,'this is local yC',local
          CALL BAR2( myThid ) 
          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
-     &                      .FALSE., .FALSE., myThid )
-         print*,'this is global YC',xfer_array
+     &        .FALSE., .FALSE., myThid )
          IF( myProcId .EQ. 0 ) THEN
             _BEGIN_MASTER( myThid )
@@ -120,17 +117,38 @@
          ENDIF
          CALL BAR2( myThid )
-         print*,'Done Sending XC/YC arrays.'
 
-C     Receive icebase
+      ENDIF
+C End initialization steps I1, I2, and I3.
+
+C Recurring steps C1 and C2:
+      IF( MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN
+
+
+C   C1. ISSM sends ice model time IceTimeTag
          IF( myProcId .EQ. 0 ) THEN
-            _BEGIN_MASTER( myThid )         
-            call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
-     &           0,10001008,toissmcomm,mpistatus,mpiRC)
-            print*, 'Ocean received icebase',xfer_array
+            _BEGIN_MASTER( myThid )
+            call MPI_Recv(IceModelTime,1,MPI_DOUBLE,0,10001001,
+     &           toissmcomm,mpistatus,mpiRC)
+            print*, 'Ocean received IceModelTime: ', IceModelTime
             _END_MASTER( myThid )
          ENDIF
 
-C     Send melt rate
-         print*,'this is yC',yC
+C   C2. MITgcm sends ocean model time OceanTimeTag
+         IF( myProcId .EQ. 0 ) THEN
+            _BEGIN_MASTER( myThid )
+            call MPI_Send(myTime,1,MPI_DOUBLE,0,10001002,
+     &           toissmcomm,mpistatus)
+            _END_MASTER( myThid )
+         ENDIF
+
+      ENDIF
+C End recurring steps C1 and C2.
+
+C Recurring step C3 except during Initialization:
+C  C3. MITgcm sends
+C      (N-1)*CouplingTime <= OceanModelTime < N*CouplingTime
+C      time-mean melt rate to ISSM
+      IF( myTime .NE. startTime .AND.
+     &     MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN
          DO bj=1,nSy
             DO bi=1,nSx
@@ -142,9 +160,7 @@
             ENDDO
          ENDDO
-         print*,'this is local shelficeHeatFlux',local
          CALL BAR2( myThid ) 
          CALL GATHER_2D_R8( xfer_array, local, Nx, Ny,
-     &                      .FALSE., .FALSE., myThid )
-         print*,'this is global shelficeHeatFlux',xfer_array
+     &        .FALSE., .FALSE., myThid )
          IF( myProcId .EQ. 0 ) THEN
             _BEGIN_MASTER( myThid )
@@ -156,8 +172,23 @@
          CALL BAR2( myThid )
          print*,'Done Sending shelficeHeatFlux array.'
+         
+      ENDIF
+C End recurring step C3.
 
+C Recurring step C4 except during Termination:
+C  C4. ISSM sends IceModelTime=(N-1)*CouplingTime base to MITgcm
+      IF( myTime .NE. endtime .AND.
+     &     MOD(myTime,CouplingTime) .LT. deltaT/2. ) THEN         
+         IF( myProcId .EQ. 0 ) THEN
+            _BEGIN_MASTER( myThid )         
+            call MPI_Recv(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
+     &           0,10001008,toissmcomm,mpistatus,mpiRC)
+            print*, 'Ocean received icebase',xfer_array
+            _END_MASTER( myThid )
+         ENDIF
       ENDIF
+C End recurring step C4.
 
-#endif /* ALLOW_CPL_MPMICE */
+#endif /* ALLOW_CPL_ISSM */
 
       RETURN
