*IF DEF,CONTROL,AND,DEF,ATMOS,AND,DEF,OCEAN,AND,DEF,MPP                    SWAPA2O2.2      
C ******************************COPYRIGHT******************************    SWAPA2O2.3      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    SWAPA2O2.4      
C                                                                          SWAPA2O2.5      
C Use, duplication or disclosure of this code is subject to the            SWAPA2O2.6      
C restrictions as set forth in the contract.                               SWAPA2O2.7      
C                                                                          SWAPA2O2.8      
C                Meteorological Office                                     SWAPA2O2.9      
C                London Road                                               SWAPA2O2.10     
C                BRACKNELL                                                 SWAPA2O2.11     
C                Berkshire UK                                              SWAPA2O2.12     
C                RG12 2SZ                                                  SWAPA2O2.13     
C                                                                          SWAPA2O2.14     
C If no contract has been raised with this copy of the code, the use,      SWAPA2O2.15     
C duplication or disclosure of it is strictly prohibited.  Permission      SWAPA2O2.16     
C to do so must first be obtained in writing from the Head of Numerical    SWAPA2O2.17     
C Modelling at the above address.                                          SWAPA2O2.18     
C ******************************COPYRIGHT******************************    SWAPA2O2.19     
!+ Replace atmos model data with ocean model data in coupled model.        SWAPA2O2.20     
!                                                                          SWAPA2O2.21     
! Subroutine Interface:                                                    SWAPA2O2.22     

      SUBROUTINE SWAP_A2O (G_P_FIELD,G_IMTJMT,CO2_DIMA,CO2_DIMO,            2,53CCN1F405.125    
*CALL ARGSIZE                                                              SWAPA2O2.24     
*CALL ARGD1                                                                SWAPA2O2.25     
*CALL ARGDUMO                                                              SWAPA2O2.26     
*CALL ARGPTRA                                                              SWAPA2O2.27     
*CALL ARGPTRO                                                              SWAPA2O2.28     
*CALL ARGCONA                                                              SWAPA2O2.29     
*CALL ARGCONO                                                              SWAPA2O2.30     
*CALL ARGAOCPL                                                             SWAPA2O2.31     
     &    ICODE,CMESSAGE)                                                  SWAPA2O2.32     
                                                                           SWAPA2O2.33     
      IMPLICIT NONE                                                        SWAPA2O2.34     
!                                                                          SWAPA2O2.35     
! Description:                                                             SWAPA2O2.36     
! Control the interchange of data when swapping from atmosphere to ocean   SWAPA2O2.37     
! in a coupled model.  Fields required from the completed atmosphere       SWAPA2O2.38     
! group of timesteps replace corresponding fields in the ocean model       SWAPA2O2.39     
! with interpolation onto a different grid if required.                    SWAPA2O2.40     
!                                                                          SWAPA2O2.41     
! Method:                                                                  SWAPA2O2.42     
! 1. Gather coupling fields from distributed processors onto a single      SWAPA2O2.43     
!    processor for input to interpolation routines.                        SWAPA2O2.44     
! 2. Convert sublimation and runoff fields from totals to rates.           SWAPA2O2.45     
! 3. Perform IO (or memory transfer) to swap data in D1 from               SWAPA2O2.46     
!    atmosphere to ocean and then transform to the corresponding           SWAPA2O2.47     
!    MPP data decomposition.                                               SWAPA2O2.48     
! 4. Gather ocean field from O_SPCON array not required: already global.   GRR0F403.163    
! 5. Perform the coupling calculations on a single PE. Transform           SWAPA2O2.52     
!    coupling fields onto the new (ocean) grid, including interpolation    SWAPA2O2.53     
!    if required.                                                          SWAPA2O2.54     
!    Arrays are on the full horizontal domain.                             GRR0F403.164    
! 6. Scatter coupling fields received from atmos model, now residing       SWAPA2O2.56     
!    on a single PE, over all processors according to the ocean MPP        SWAPA2O2.57     
!    data decomposition.                                                   SWAPA2O2.58     
! 7. Error trap.                                                           SWAPA2O2.59     
!                                                                          SWAPA2O2.60     
!    'Global' refers here to the full horizontal domain over all           SWAPA2O2.61     
!    processing elements (PE)s.                                            SWAPA2O2.62     
!                                                                          SWAPA2O2.63     
!  External documentation:                                                 SWAPA2O2.64     
!    Unified Model Doc Paper C2 - Atmosphere-Ocean coupling: overview      CCN1F405.126    
!                                                                          SWAPA2O2.66     
! Current Code Owner: Rick Rawlins                                         SWAPA2O2.67     
!                                                                          SWAPA2O2.68     
! History:                                                                 SWAPA2O2.69     
! Version   Date     Comment                                               SWAPA2O2.70     
! -------   ----     -------                                               SWAPA2O2.71     
!  4.2  04/11/96 : New deck based on SWAPA2O1 deck, with changes for       SWAPA2O2.72     
!                  MPP. R.Rawlins                                          SWAPA2O2.73     
!  4.3  30/01/97 : Remove redundant CHANGE_DECOMPOSITION call and get      GRR0F403.165    
!                  'global' sizes from database. Add SWAPBOUNDS calls      GRR0F403.166    
!                  after SCATTER_FIELD to populate halos.                  GRR0F403.167    
!                  Remove gather of fkmq, which is a globally defined      GRR0F403.168    
!                  array. Runoff outflow points converted from local       GRR0F403.169    
!                  compression on land points to global compression on     GRR0F403.170    
!                  land points.                                            GRR0F403.171    
!                  Initialise IN/OUT fields into TRANSA2O as RMDI.         GRR0F403.172    
!                  R.Rawlins                                               GRR0F403.173    
!  4.5  13/01/98 : Replace IOVARS with ATM_LSM comdeck   P.Burton          GPB2F405.309    
!  4.5   1/07/98   Include code to pass atmospheric surface CO2            CCN1F405.127    
!                                                    C.D.Jones             CCN1F405.128    
!                                                                          SWAPA2O2.74     
! Code Description:                                                        SWAPA2O2.75     
!   Language: FORTRAN 77 + common extensions.                              SWAPA2O2.76     
!   This code is written to UMDP3 v6 programming standards.                SWAPA2O2.77     
!                                                                          SWAPA2O2.78     
! System component covered:                                                SWAPA2O2.79     
! System Task:                                                             SWAPA2O2.80     
!                                                                          SWAPA2O2.81     
! Declarations:                                                            SWAPA2O2.82     
!                                                                          SWAPA2O2.83     
! Global variables (*CALLed COMDECKs etc...):                              SWAPA2O2.84     
*CALL PARVARS                                                              SWAPA2O2.86     
*CALL DECOMPTP                                                             GRR0F403.174    
*CALL DECOMPDB                                                             GRR0F403.175    
*CALL AMAXSIZE                                                             SWAPA2O2.87     
*CALL ATM_LSM                                                              GPB2F405.310    
                                                                           SWAPA2O2.89     
*CALL CMAXSIZE                                                             SWAPA2O2.90     
*CALL TYPSIZE                                                              SWAPA2O2.91     
*CALL TYPD1                                                                SWAPA2O2.92     
*CALL TYPDUMO                                                              SWAPA2O2.93     
*CALL TYPPTRA                                                              SWAPA2O2.94     
*CALL TYPPTRO                                                              SWAPA2O2.95     
*CALL TYPCONA                                                              SWAPA2O2.96     
*CALL TYPCONO                                                              SWAPA2O2.97     
*CALL TYPAOCPL                                                             SWAPA2O2.98     
                                                                           SWAPA2O2.99     
*CALL CAOPTR                                                               SWAPA2O2.100    
*CALL C_LHEAT                                                              SWAPA2O2.101    
*CALL C_0_DG_C                                                             SWAPA2O2.102    
*CALL C_MDI                                                                SWAPA2O2.103    
*CALL CHSUNITS                                                             SWAPA2O2.104    
*CALL CNTLALL                                                              SWAPA2O2.105    
*CALL TYPOCDPT                                                             SWAPA2O2.106    
*CALL CSUBMODL                                                             SWAPA2O2.107    
*CALL CNTLATM                                                              CCN1F405.129    
                                                                           SWAPA2O2.108    
! Subroutine arguments                                                     SWAPA2O2.109    
!   Scalar arguments with intent(in):                                      SWAPA2O2.110    
      INTEGER                                                              SWAPA2O2.111    
     &  G_P_FIELD             ! IN : global horiz domain for atmos         SWAPA2O2.112    
     & ,G_IMTJMT              ! IN : global horiz domain for ocean         SWAPA2O2.113    
     & ,CO2_DIMA              ! IN : dimension of atmos CO2 array          CCN1F405.130    
     & ,CO2_DIMO              ! IN : dimension of ocean CO2 array          CCN1F405.131    
     & ,CO2_ICOLS,CO2_JROWS   ! OUT: CO2 array dimensions                  CCN1F405.132    
     & ,CO2_IMT,  CO2_JMT                                                  CCN1F405.133    
                                                                           SWAPA2O2.114    
!   ErrorStatus                                                            SWAPA2O2.115    
      INTEGER                                                              SWAPA2O2.116    
     &       ICODE            ! OUT - Error return code (=0 is OK)         SWAPA2O2.117    
      CHARACTER*80 CMESSAGE   ! OUT - Error return message                 SWAPA2O2.118    
                                                                           SWAPA2O2.119    
! Local parameters:                                                        SWAPA2O2.120    
      INTEGER                                                              GRR0F403.176    
     &       swap_levels                 ! no. levels for SWAPBOUNDS       GRR0F403.177    
      PARAMETER(                                                           GRR0F403.178    
     &       swap_levels=1)              ! by definition for AO coupling   GRR0F403.179    
                                                                           SWAPA2O2.121    
! Local scalars:                                                           SWAPA2O2.122    
      INTEGER                                                              SWAPA2O2.123    
     &       NFTASWAP,NFTOSWAP           ! FT units for swap files         SWAPA2O2.124    
     &      ,I                           ! Loop index                      SWAPA2O2.125    
     &      ,info                        ! Return code from MPP            SWAPA2O2.126    
     &      ,gather_pe                   ! Processor for gathering         SWAPA2O2.127    
     &      ,G_ROW_LENGTH                ! Global (atmos) row length       SWAPA2O2.128    
     &      ,G_P_ROWS                    ! Global (atmos) p  rows          SWAPA2O2.129    
     &      ,G_U_ROWS                    ! Global (atmos) uv rows          SWAPA2O2.130    
     &      ,G_IMT                       ! Global (ocean) row length       SWAPA2O2.131    
     &      ,G_JMT                       ! Global (ocean) p  rows          SWAPA2O2.132    
     &      ,G_JMTM1                     ! Global (ocean) uv rows          SWAPA2O2.133    
     &      ,number_of_landpts_out       ! Returned landpts (not used)     GRR0F403.180    
                                                                           SWAPA2O2.134    
! Local dynamic arrays:                                                    SWAPA2O2.135    
! Coupling fields on atmosphere grid being sent into ocean model           SWAPA2O2.136    
      REAL                                                                 SWAPA2O2.137    
     &  TAUX(G_P_FIELD)                  ! Surface u windstress            SWAPA2O2.138    
     & ,TAUY(G_P_FIELD)                  ! Surface v windstress            SWAPA2O2.139    
     & ,WINDMIX(G_P_FIELD)               ! Windmixing power                SWAPA2O2.140    
     & ,SOLAR(G_P_FIELD)                 ! Surface net solar               SWAPA2O2.141    
     & ,BLUE(G_P_FIELD)                  ! Surface net blueband solar      SWAPA2O2.142    
     & ,EVAP(G_P_FIELD)                  ! Evaporation over sea            SWAPA2O2.143    
     & ,LONGWAVE(G_P_FIELD)              ! Net downward longwave           SWAPA2O2.144    
     & ,SENSIBLE(G_P_FIELD)              ! Sensible heat flux              SWAPA2O2.145    
     & ,LSSNOW(G_P_FIELD)                ! LS precip snowfall rate         SWAPA2O2.146    
     & ,CVSNOW(G_P_FIELD)                ! Convective snowfall rate        SWAPA2O2.147    
     & ,LSRAIN(G_P_FIELD)                ! LS  precip rainfall rate        SWAPA2O2.148    
     & ,CVRAIN(G_P_FIELD)                ! Convective rainfall rate        SWAPA2O2.149    
*IF DEF,SEAICE                                                             SWAPA2O2.150    
     & ,AICE(G_P_FIELD)                  ! Seaice fraction                 SWAPA2O2.151    
     & ,SUBLIM(G_P_FIELD)                ! Sublimation                     SWAPA2O2.152    
     & ,BOTMELT(G_P_FIELD)               ! Bottom melting heat flux        SWAPA2O2.153    
     & ,TOPMELT(G_P_FIELD)               ! Top melting heat flux           SWAPA2O2.154    
*ENDIF                                                                     SWAPA2O2.155    
*IF DEF,RIVERS                                                             SWAPA2O2.156    
      INTEGER                                                              SWAPA2O2.157    
     &  OCENTPTS(G_P_FIELD)              ! Ocean entry points index        SWAPA2O2.158    
! Intermediate field for work space                                        GRR0F403.181    
     & ,OCENTPTS_local(P_FIELD)          ! local land-compressed           GRR0F403.182    
     & ,OCENTPTS_global(G_P_FIELD)       !                                 GRR0F403.183    
      REAL                                                                 SWAPA2O2.159    
     &  RUNOFFIN(G_P_FIELD)              ! Total runoff from land          SWAPA2O2.160    
! Intermediate fields for coupling:                                        SWAPA2O2.161    
     & ,SLOWRUNOFF(G_P_FIELD)            ! Slow part of runoff             SWAPA2O2.162    
     & ,FASTRUNOFF(G_P_FIELD)            ! Fast part of runoff             SWAPA2O2.163    
! Intermediate pre-calculated trig field for coupling:                     SWAPA2O2.164    
     & ,A_COS_P_LATITUDE(G_P_FIELD)      ! Cos(lat) on atmos p grid        SWAPA2O2.165    
*ENDIF                                                                     SWAPA2O2.166    
     &,     ATMCO2(CO2_DIMA)           ! atmospheric surface CO2           CCN1F405.134    
! Coupling fields on ocean grid being received from atmosphere model       SWAPA2O2.167    
      REAL                                                                 SWAPA2O2.168    
     &  O_TAUX(G_IMTJMT)                 ! Surface u windstress            SWAPA2O2.169    
     & ,O_TAUY(G_IMTJMT)                 ! Surface v windstress            SWAPA2O2.170    
     & ,O_WINDMIX(G_IMTJMT)              ! Windmixing power                SWAPA2O2.171    
     & ,O_BLUE(G_IMTJMT)                 ! Penetrative solar heat          SWAPA2O2.172    
     & ,O_HEATFLUX(G_IMTJMT)             ! Non-penetrative heat flux       SWAPA2O2.173    
     & ,O_PMINUSE(G_IMTJMT)              ! Precipitation - evaporation     SWAPA2O2.174    
*IF DEF,SEAICE                                                             SWAPA2O2.175    
     & ,O_SNOWFALL(G_IMTJMT)             ! Total snowfall                  SWAPA2O2.176    
     & ,O_SUBLIM(G_IMTJMT)               ! Sublimation                     SWAPA2O2.177    
     & ,O_BOTMELT(G_IMTJMT)              ! Bottom melting heat flux        SWAPA2O2.178    
     & ,O_TOPMELT(G_IMTJMT)              ! Top melting heat flux           SWAPA2O2.179    
*ENDIF                                                                     SWAPA2O2.180    
*IF DEF,RIVERS                                                             SWAPA2O2.181    
     & ,O_RIVEROUT(G_IMTJMT)             ! River outflow at coastal pts    SWAPA2O2.182    
*ENDIF                                                                     SWAPA2O2.183    
     &,     O_ATMCO2(CO2_DIMO)          ! atmospheric surface CO2          CCN1F405.135    
! Function & Subroutine calls:                                             SWAPA2O2.186    
      External TRANSOUT,TRANSIN,TRANSA2O                                   SWAPA2O2.187    
      External GATHER_FIELD,SCATTER_FIELD,SWAPBOUNDS                       GRR0F403.184    
     &        ,FROM_LAND_POINTS,TO_LAND_POINTS                             GRR0F403.185    
                                                                           SWAPA2O2.189    
!- End of header                                                           SWAPA2O2.190    
!----------------------------------------------------------------------    SWAPA2O2.191    
!                                                                          SWAPA2O2.192    
! 1. Gather coupling fields from distributed processors onto a single      SWAPA2O2.193    
!    processor for input to interpolation routines.                        SWAPA2O2.194    
                                                                           SWAPA2O2.195    
      gather_pe=0          ! Processor for gathering fields                SWAPA2O2.196    
                                                                           SWAPA2O2.197    
      CALL GATHER_FIELD(D1(JA_TAUX),TAUX,   ! NB: TAUX over dimensioned    SWAPA2O2.198    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.199    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.200    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.201    
         CMESSAGE='SWAPA2O : ERROR in gather of TAUX'                      SWAPA2O2.202    
         ICODE=1                                                           SWAPA2O2.203    
         GO TO 999                                                         SWAPA2O2.204    
      ENDIF                                                                SWAPA2O2.205    
                                                                           SWAPA2O2.206    
      CALL GATHER_FIELD(D1(JA_TAUY),TAUY,   ! NB: TAUY over dimensioned    SWAPA2O2.207    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.208    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.209    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.210    
         CMESSAGE='SWAPA2O : ERROR in gather of TAUY'                      SWAPA2O2.211    
         ICODE=2                                                           SWAPA2O2.212    
         GO TO 999                                                         SWAPA2O2.213    
      ENDIF                                                                SWAPA2O2.214    
                                                                           SWAPA2O2.215    
      CALL GATHER_FIELD(D1(JA_WINDMIX),WINDMIX,                            SWAPA2O2.216    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.217    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.218    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.219    
         CMESSAGE='SWAPA2O : ERROR in gather of WINDMIX'                   SWAPA2O2.220    
         ICODE=3                                                           SWAPA2O2.221    
         GO TO 999                                                         SWAPA2O2.222    
      ENDIF                                                                SWAPA2O2.223    
                                                                           SWAPA2O2.224    
      CALL GATHER_FIELD(D1(JA_SOLAR),SOLAR,                                SWAPA2O2.225    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.226    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.227    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.228    
         CMESSAGE='SWAPA2O : ERROR in gather of SOLAR'                     SWAPA2O2.229    
         ICODE=4                                                           SWAPA2O2.230    
         GO TO 999                                                         SWAPA2O2.231    
      ENDIF                                                                SWAPA2O2.232    
                                                                           SWAPA2O2.233    
      CALL GATHER_FIELD(D1(JA_BLUE),BLUE,                                  SWAPA2O2.234    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.235    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.236    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.237    
         CMESSAGE='SWAPA2O : ERROR in gather of BLUE'                      SWAPA2O2.238    
         ICODE=5                                                           SWAPA2O2.239    
         GO TO 999                                                         SWAPA2O2.240    
      ENDIF                                                                SWAPA2O2.241    
                                                                           SWAPA2O2.242    
      CALL GATHER_FIELD(D1(JA_EVAP),EVAP,                                  SWAPA2O2.243    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.244    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.245    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.246    
         CMESSAGE='SWAPA2O : ERROR in gather of EVAP'                      SWAPA2O2.247    
         ICODE=6                                                           SWAPA2O2.248    
         GO TO 999                                                         SWAPA2O2.249    
      ENDIF                                                                SWAPA2O2.250    
                                                                           SWAPA2O2.251    
      CALL GATHER_FIELD(D1(JA_LONGWAVE),LONGWAVE,                          SWAPA2O2.252    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.253    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.254    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.255    
         CMESSAGE='SWAPA2O : ERROR in gather of LONGWAVE'                  SWAPA2O2.256    
         ICODE=7                                                           SWAPA2O2.257    
         GO TO 999                                                         SWAPA2O2.258    
      ENDIF                                                                SWAPA2O2.259    
                                                                           SWAPA2O2.260    
      CALL GATHER_FIELD(D1(JA_SENSIBLE),SENSIBLE,                          SWAPA2O2.261    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.262    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.263    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.264    
         CMESSAGE='SWAPA2O : ERROR in gather of SENSIBLE'                  SWAPA2O2.265    
         ICODE=8                                                           SWAPA2O2.266    
         GO TO 999                                                         SWAPA2O2.267    
      ENDIF                                                                SWAPA2O2.268    
                                                                           SWAPA2O2.269    
      CALL GATHER_FIELD(D1(JA_LSSNOW),LSSNOW,                              SWAPA2O2.270    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.271    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.272    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.273    
         CMESSAGE='SWAPA2O : ERROR in gather of LSSNOW'                    SWAPA2O2.274    
         ICODE=9                                                           SWAPA2O2.275    
         GO TO 999                                                         SWAPA2O2.276    
      ENDIF                                                                SWAPA2O2.277    
                                                                           SWAPA2O2.278    
      CALL GATHER_FIELD(D1(JA_CVSNOW),CVSNOW,                              SWAPA2O2.279    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.280    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.281    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.282    
         CMESSAGE='SWAPA2O : ERROR in gather of CVSNOW'                    SWAPA2O2.283    
         ICODE=10                                                          SWAPA2O2.284    
         GO TO 999                                                         SWAPA2O2.285    
      ENDIF                                                                SWAPA2O2.286    
                                                                           SWAPA2O2.287    
      CALL GATHER_FIELD(D1(JA_LSRAIN),LSRAIN,                              SWAPA2O2.288    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.289    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.290    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.291    
         CMESSAGE='SWAPA2O : ERROR in gather of LSRAIN'                    SWAPA2O2.292    
         ICODE=11                                                          SWAPA2O2.293    
         GO TO 999                                                         SWAPA2O2.294    
      ENDIF                                                                SWAPA2O2.295    
                                                                           SWAPA2O2.296    
      CALL GATHER_FIELD(D1(JA_CVRAIN),CVRAIN,                              SWAPA2O2.297    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.298    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.299    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.300    
         CMESSAGE='SWAPA2O : ERROR in gather of CVRAIN'                    SWAPA2O2.301    
         ICODE=12                                                          SWAPA2O2.302    
         GO TO 999                                                         SWAPA2O2.303    
      ENDIF                                                                SWAPA2O2.304    
                                                                           SWAPA2O2.305    
*IF DEF,SEAICE                                                             SWAPA2O2.306    
                                                                           SWAPA2O2.307    
      CALL GATHER_FIELD(D1(JA_AICE),AICE,                                  SWAPA2O2.308    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.309    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.310    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.311    
         CMESSAGE='SWAPA2O : ERROR in gather of AICE'                      SWAPA2O2.312    
         ICODE=13                                                          SWAPA2O2.313    
         GO TO 999                                                         SWAPA2O2.314    
      ENDIF                                                                SWAPA2O2.315    
                                                                           SWAPA2O2.316    
      CALL GATHER_FIELD(D1(JA_SUBLIM),SUBLIM,                              SWAPA2O2.317    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.318    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.319    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.320    
         CMESSAGE='SWAPA2O : ERROR in gather of SUBLIM'                    SWAPA2O2.321    
         ICODE=14                                                          SWAPA2O2.322    
         GO TO 999                                                         SWAPA2O2.323    
      ENDIF                                                                SWAPA2O2.324    
                                                                           SWAPA2O2.325    
      CALL GATHER_FIELD(D1(JA_BOTMELT),BOTMELT,                            SWAPA2O2.326    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.327    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.328    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.329    
         CMESSAGE='SWAPA2O : ERROR in gather of BOTMELT'                   SWAPA2O2.330    
         ICODE=15                                                          SWAPA2O2.331    
         GO TO 999                                                         SWAPA2O2.332    
      ENDIF                                                                SWAPA2O2.333    
                                                                           SWAPA2O2.334    
      CALL GATHER_FIELD(D1(JA_TOPMELT),TOPMELT,                            SWAPA2O2.335    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.336    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.337    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.338    
         CMESSAGE='SWAPA2O : ERROR in gather of TOPMELT'                   SWAPA2O2.339    
         ICODE=16                                                          SWAPA2O2.340    
         GO TO 999                                                         SWAPA2O2.341    
      ENDIF                                                                SWAPA2O2.342    
                                                                           SWAPA2O2.343    
*ENDIF                                                                     SWAPA2O2.344    
                                                                           SWAPA2O2.345    
*IF DEF,RIVERS                                                             SWAPA2O2.346    
                                                                           SWAPA2O2.347    
      CALL GATHER_FIELD(D1(JA_SLOWRUNOFF),SLOWRUNOFF,                      SWAPA2O2.348    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.349    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.350    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.351    
         CMESSAGE='SWAPA2O : ERROR in gather of SLOWRUNOFF'                SWAPA2O2.352    
         ICODE=18                                                          SWAPA2O2.353    
         GO TO 999                                                         SWAPA2O2.354    
      ENDIF                                                                SWAPA2O2.355    
                                                                           SWAPA2O2.356    
      CALL GATHER_FIELD(D1(JA_FASTRUNOFF),FASTRUNOFF,                      SWAPA2O2.357    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.358    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.359    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.360    
         CMESSAGE='SWAPA2O : ERROR in gather of FASTRUNOFF'                SWAPA2O2.361    
         ICODE=19                                                          SWAPA2O2.362    
         GO TO 999                                                         SWAPA2O2.363    
      ENDIF                                                                SWAPA2O2.364    
                                                                           GRR0F403.186    
! Expand river index compressed on land points for each PE domain          GRR0F403.187    
      CALL FROM_LAND_POINTS(OCENTPTS_local,ID1(JA_OCENTPTS),               GRR0F403.188    
     &  atmos_landmask_local,lasize(1)*lasize(2),                          GRR0F403.189    
     &  number_of_landpts_out)                                             GRR0F403.190    
                                                                           SWAPA2O2.365    
      CALL GATHER_FIELD(OCENTPTS_local,OCENTPTS_global,                    GRR0F403.191    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.367    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.368    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.369    
         CMESSAGE='SWAPA2O : ERROR in gather of OCENTPTS'                  SWAPA2O2.370    
         ICODE=20                                                          SWAPA2O2.371    
         GO TO 999                                                         SWAPA2O2.372    
      ENDIF                                                                SWAPA2O2.373    
                                                                           SWAPA2O2.374    
!        Pre-calculated trig field cos(lat) on atmos p grid                SWAPA2O2.375    
      CALL GATHER_FIELD(COS_P_LATITUDE,A_COS_P_LATITUDE,                   SWAPA2O2.376    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.377    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.378    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.379    
         CMESSAGE='SWAPA2O : ERROR in gather of A_COS_P_LATITUDE'          SWAPA2O2.380    
         ICODE=21                                                          SWAPA2O2.381    
         GO TO 999                                                         SWAPA2O2.382    
      ENDIF                                                                SWAPA2O2.383    
                                                                           SWAPA2O2.384    
*ENDIF                                                                     SWAPA2O2.385    
      IF (L_CO2_INTERACTIVE) THEN                                          CCN1F405.136    
                                                                           CCN1F405.137    
        CALL GATHER_FIELD(D1(JA_co2),ATMCO2,                               CCN1F405.138    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           CCN1F405.139    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  CCN1F405.140    
        IF(info.NE.0) THEN      ! Check return code                        CCN1F405.141    
           CMESSAGE='SWAPA2O : ERROR in gather of ATMCO2'                  CCN1F405.142    
           ICODE=22                                                        CCN1F405.143    
           GO TO 999                                                       CCN1F405.144    
        ENDIF                                                              CCN1F405.145    
      ENDIF                                                                CCN1F405.146    
!                                                                          SWAPA2O2.386    
!      End of gathering distributed fields onto arrays on a single PE      SWAPA2O2.387    
!----------------------------------------------------------------------    SWAPA2O2.388    
!                                                                          SWAPA2O2.389    
! 2. Convert sublimation and runoff fields                                 SWAPA2O2.390    
!    from totals to rates.                                                 SWAPA2O2.391    
!                                                                          SWAPA2O2.392    
                                                                           SWAPA2O2.393    
*IF DEF,SEAICE                                                             SWAPA2O2.394    
      IF(mype.EQ.gather_pe) THEN    ! Global data on single PE only        SWAPA2O2.395    
         DO I=1,G_P_FIELD                                                  SWAPA2O2.396    
          SUBLIM(I)= SUBLIM(I)/REAL(MODEL_HRS_PER_GROUP*3600)              SWAPA2O2.397    
         ENDDO  ! I                                                        SWAPA2O2.398    
      ENDIF                         ! Single processor                     SWAPA2O2.399    
*ENDIF                                                                     SWAPA2O2.400    
                                                                           SWAPA2O2.401    
*IF DEF,RIVERS                                                             SWAPA2O2.402    
      IF(mype.EQ.gather_pe) THEN    ! Global data on single PE only        SWAPA2O2.403    
! Compress river index on global domain onto land points                   GRR0F403.192    
         CALL TO_LAND_POINTS(OCENTPTS_global,OCENTPTS,                     GRR0F403.193    
     &      atmos_landmask,glsize(1)*glsize(2),                            GRR0F403.194    
     &      number_of_landpts_out)                                         GRR0F403.195    
                                                                           GRR0F403.196    
         DO I=1,G_P_FIELD                                                  SWAPA2O2.404    
          RUNOFFIN(I)= (SLOWRUNOFF(I)+FASTRUNOFF(I))/                      SWAPA2O2.405    
     &                   REAL(MODEL_HRS_PER_GROUP*3600)                    SWAPA2O2.406    
         ENDDO  ! I                                                        SWAPA2O2.407    
      ENDIF                         ! Single processor                     SWAPA2O2.408    
*ENDIF                                                                     SWAPA2O2.409    
                                                                           SWAPA2O2.410    
!                                                                          SWAPA2O2.411    
!----------------------------------------------------------------------    SWAPA2O2.412    
!                                                                          SWAPA2O2.413    
! 3. Perform IO (or memory transfer) to swap data in D1 from               SWAPA2O2.414    
!    atmosphere to ocean and then transform to the corresponding           SWAPA2O2.415    
!    MPP data decomposition.                                               SWAPA2O2.416    
!                                                                          SWAPA2O2.417    
                                                                           SWAPA2O2.418    
      NFTASWAP=18                                                          SWAPA2O2.419    
      NFTOSWAP=19                                                          SWAPA2O2.420    
                                                                           SWAPA2O2.421    
      CALL TRANSOUT(                                                       SWAPA2O2.422    
*CALL ARGD1                                                                SWAPA2O2.423    
     &              A_LEN_DATA+(P_LEVELS+1+2*Q_LEVELS)*P_FIELD,            SWAPA2O2.424    
     &              NFTASWAP,atmos_sm,ICODE,CMESSAGE)                      SWAPA2O2.425    
      IF (ICODE.GT.0) GOTO 999                                             SWAPA2O2.426    
                                                                           SWAPA2O2.427    
! Get 'global' atmos and ocean horizontal domain sizes from database       GRR0F403.197    
! in DECOMPDB to set dynamic allocation in TRANSA2O                        GRR0F403.198    
                                                                           GRR0F403.199    
      G_ROW_LENGTH = decomp_db_glsize(1,decomp_standard_atmos)             GRR0F403.200    
      G_P_ROWS     = decomp_db_glsize(2,decomp_standard_atmos)             GRR0F403.201    
      G_U_ROWS     = G_P_ROWS - 1                                          GRR0F403.202    
                                                                           GRR0F403.203    
      G_IMT        = decomp_db_glsize(1,decomp_standard_ocean)             GRR0F403.204    
      G_JMT        = decomp_db_glsize(2,decomp_standard_ocean)             GRR0F403.205    
      G_JMTM1      = G_JMT - 1                                             GRR0F403.206    
                                                                           SWAPA2O2.440    
      IF (L_CO2_INTERACTIVE) THEN                                          CCN1F405.147    
        CO2_ICOLS = G_ROW_LENGTH                                           CCN1F405.148    
        CO2_JROWS = G_P_ROWS                                               CCN1F405.149    
        CO2_IMT   = G_IMT                                                  CCN1F405.150    
        CO2_JMT   = G_JMT                                                  CCN1F405.151    
      ELSE                                                                 CCN1F405.152    
        ATMCO2(1) = 0.0                                                    CCN1F405.153    
        CO2_ICOLS = 1                                                      CCN1F405.154    
        CO2_JROWS = 1                                                      CCN1F405.155    
        CO2_IMT   = 1                                                      CCN1F405.156    
        CO2_JMT   = 1                                                      CCN1F405.157    
      ENDIF                                                                CCN1F405.158    
                                                                           CCN1F405.159    
      CALL TRANSIN (                                                       SWAPA2O2.441    
*CALL ARGD1                                                                SWAPA2O2.442    
     &              O_LEN_DATA+O_LEN_DUALDATA,                             SWAPA2O2.443    
     &              NFTOSWAP,ocean_sm,ICODE,CMESSAGE)                      SWAPA2O2.444    
      IF (ICODE.GT.0) GOTO 999                                             SWAPA2O2.445    
!----------------------------------------------------------------------    SWAPA2O2.446    
!                                                                          SWAPA2O2.447    
! 4. Gather ocean field from O_SPCON array no longer required: already     GRR0F403.207    
!    a global domain.                                                      GRR0F403.208    
!                                                                          GRR0F403.209    
!----------------------------------------------------------------------    SWAPA2O2.460    
!                                                                          SWAPA2O2.461    
! 5. Perform the coupling calculations on a single PE. Transform           SWAPA2O2.462    
!    coupling fields onto the new (ocean) grid, including interpolation    SWAPA2O2.463    
!    if required.                                                          SWAPA2O2.464    
!                                                                          SWAPA2O2.465    
      IF(mype.EQ.gather_pe) THEN    ! Global data on single PE only        SWAPA2O2.466    
                                                                           GRR0F403.210    
! Initialise output fields to missing data indicators (strictly, these     GRR0F403.211    
! are IN/OUT fields).                                                      GRR0F403.212    
      DO I=1,G_IMTJMT                                                      GRR0F403.213    
      O_TAUX(I)    = RMDI                                                  GJC0F405.55     
      O_TAUY(I)    = RMDI                                                  GJC0F405.56     
      O_WINDMIX(I) = RMDI                                                  GJC0F405.57     
      O_BLUE(I)    = RMDI                                                  GJC0F405.58     
      O_HEATFLUX(I)= RMDI                                                  GJC0F405.59     
      O_PMINUSE(I) = RMDI                                                  GJC0F405.60     
      O_ATMCO2(I) = RMDI                                                   CCN1F405.160    
                                                                           CCN1F405.161    
*IF DEF,SEAICE                                                             GRR0F403.220    
      O_SNOWFALL(I)= RMDI                                                  GJC0F405.61     
      O_SUBLIM(I)  = RMDI                                                  GJC0F405.62     
      O_BOTMELT(I) = RMDI                                                  GJC0F405.63     
      O_TOPMELT(I) = RMDI                                                  GJC0F405.64     
*ENDIF                                                                     GRR0F403.225    
*IF DEF,RIVERS                                                             GRR0F403.226    
        O_RIVEROUT(I)= RMDI                                                GRR0F403.227    
*ENDIF                                                                     GRR0F403.228    
      ENDDO ! I                                                            GRR0F403.229    
                                                                           GRR0F403.230    
                                                                           SWAPA2O2.467    
      CALL TRANSA2O (                                                      SWAPA2O2.468    
     & TAUX,O_TAUX,TAUY,O_TAUY,WINDMIX,O_WINDMIX,                          SWAPA2O2.469    
     & SOLAR,BLUE,O_BLUE,EVAP,LONGWAVE,SENSIBLE,O_HEATFLUX,                SWAPA2O2.470    
     & LSSNOW,CVSNOW,LSRAIN,CVRAIN,O_PMINUSE,                              SWAPA2O2.471    
     & RMDI,LC,                                                            SWAPA2O2.472    
*IF DEF,SEAICE                                                             SWAPA2O2.473    
     & AICE,SUBLIM,BOTMELT,TOPMELT,                                        SWAPA2O2.474    
     & O_SNOWFALL,O_SUBLIM,O_BOTMELT,O_TOPMELT,                            SWAPA2O2.475    
*ENDIF                                                                     SWAPA2O2.476    
*IF DEF,TRANGRID                                                           SWAPA2O2.477    
     & XUO,XTO,YUO,YTO,XTA,XUA,YTA,YUA,                                    SWAPA2O2.478    
*ENDIF                                                                     SWAPA2O2.479    
*IF DEF,TRANGRID,OR,DEF,RIVERS                                             SWAPA2O2.480    
     & atmos_landmask,                                                     SWAPA2O2.481    
*ENDIF                                                                     SWAPA2O2.482    
*IF DEF,RIVERS                                                             SWAPA2O2.483    
     & RUNOFFIN,OCENTPTS,O_RIVEROUT,atmos_number_of_landpts,               SWAPA2O2.484    
     & A_COS_P_LATITUDE,                                                   SWAPA2O2.485    
*ENDIF                                                                     SWAPA2O2.486    
     & ATMCO2, O_ATMCO2, CO2_ICOLS, CO2_JROWS, CO2_IMT, CO2_JMT,           CCN1F405.162    
     & G_IMT,G_JMT,G_JMTM1,G_ROW_LENGTH,G_P_ROWS,G_U_ROWS,                 SWAPA2O2.487    
     & (G_IMT+G_ROW_LENGTH)*(G_JMT+G_P_ROWS),                              SWAPA2O2.488    
     & O_FLDDEPC,O_SPCON(jocp_fkmq_global),                                GRR0F403.231    
     & INVERT_OCEAN,CYCLIC_OCEAN,GLOBAL_OCEAN,                             SWAPA2O2.490    
     & icode,cmessage)                                                     SWAPA2O2.491    
                                                                           SWAPA2O2.492    
      ENDIF                         ! Single processor                     SWAPA2O2.493    
                                                                           SWAPA2O2.494    
!----------------------------------------------------------------------    SWAPA2O2.495    
!                                                                          SWAPA2O2.496    
! 6. Scatter coupling fields received from atmos model, now residing       SWAPA2O2.497    
!    on a single PE, over all processors according to the ocean MPP        SWAPA2O2.498    
!    data decomposition. Make SWAPBOUNDS calls after each scatter          GRR0F403.232    
!    to populate halos.                                                    GRR0F403.233    
                                                                           SWAPA2O2.500    
      CALL SCATTER_FIELD(D1(JO_TAUX),O_TAUX,! NB: TAUX over dimensioned    SWAPA2O2.501    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.502    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.503    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.504    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_TAUX'                   SWAPA2O2.505    
         ICODE=101                                                         SWAPA2O2.506    
         GO TO 999                                                         SWAPA2O2.507    
      ENDIF                                                                SWAPA2O2.508    
      CALL SWAPBOUNDS(D1(JO_TAUX),lasize(1),lasize(2),offx,offy,           GRR0F403.234    
     &                   swap_levels)                                      GRR0F403.235    
                                                                           SWAPA2O2.509    
      CALL SCATTER_FIELD(D1(JO_TAUY),O_TAUY,! NB: TAUY over dimensioned    SWAPA2O2.510    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.511    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.512    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.513    
         CMESSAGE='SWAPA2O : ERROR in scather of O_TAUY'                   SWAPA2O2.514    
         ICODE=102                                                         SWAPA2O2.515    
         GO TO 999                                                         SWAPA2O2.516    
      ENDIF                                                                SWAPA2O2.517    
      CALL SWAPBOUNDS(D1(JO_TAUY),lasize(1),lasize(2),offx,offy,           GRR0F403.236    
     &                   swap_levels)                                      GRR0F403.237    
                                                                           SWAPA2O2.518    
      CALL SCATTER_FIELD(D1(JO_WINDMIX),O_WINDMIX,                         SWAPA2O2.519    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.520    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.521    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.522    
         CMESSAGE='SWAPA2O : ERROR in scather of O_WINDMIX'                SWAPA2O2.523    
         ICODE=103                                                         SWAPA2O2.524    
         GO TO 999                                                         SWAPA2O2.525    
      ENDIF                                                                SWAPA2O2.526    
      CALL SWAPBOUNDS(D1(JO_WINDMIX),lasize(1),lasize(2),offx,offy,        GRR0F403.238    
     &                   swap_levels)                                      GRR0F403.239    
                                                                           SWAPA2O2.527    
      CALL SCATTER_FIELD(D1(JO_BLUE),O_BLUE,                               SWAPA2O2.528    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.529    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.530    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.531    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_BLUE'                   SWAPA2O2.532    
         ICODE=105                                                         SWAPA2O2.533    
         GO TO 999                                                         SWAPA2O2.534    
      ENDIF                                                                SWAPA2O2.535    
      CALL SWAPBOUNDS(D1(JO_BLUE),lasize(1),lasize(2),offx,offy,           GRR0F403.240    
     &                   swap_levels)                                      GRR0F403.241    
                                                                           SWAPA2O2.536    
      CALL SCATTER_FIELD(D1(JO_HEATFLUX),O_HEATFLUX,                       SWAPA2O2.537    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.538    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.539    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.540    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_HEATFLUX'               SWAPA2O2.541    
         ICODE=106                                                         SWAPA2O2.542    
         GO TO 999                                                         SWAPA2O2.543    
      ENDIF                                                                SWAPA2O2.544    
      CALL SWAPBOUNDS(D1(JO_HEATFLUX),lasize(1),lasize(2),offx,offy,       GRR0F403.242    
     &                   swap_levels)                                      GRR0F403.243    
                                                                           SWAPA2O2.545    
      CALL SCATTER_FIELD(D1(JO_PMINUSE),O_PMINUSE,                         SWAPA2O2.546    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.547    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.548    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.549    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_PMINUSE'                SWAPA2O2.550    
         ICODE=107                                                         SWAPA2O2.551    
         GO TO 999                                                         SWAPA2O2.552    
      ENDIF                                                                SWAPA2O2.553    
      CALL SWAPBOUNDS(D1(JO_PMINUSE),lasize(1),lasize(2),offx,offy,        GRR0F403.244    
     &                   swap_levels)                                      GRR0F403.245    
                                                                           SWAPA2O2.554    
      IF (L_CO2_INTERACTIVE) THEN                                          CCN1F405.163    
                                                                           CCN1F405.164    
        CALL SCATTER_FIELD(D1(JO_co2),O_ATMCO2,                            CCN1F405.165    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           CCN1F405.166    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  CCN1F405.167    
        IF(info.NE.0) THEN      ! Check return code                        CCN1F405.168    
           CMESSAGE='SWAPA2O : ERROR in scatter of O_ATMCO2'               CCN1F405.169    
           ICODE=122                                                       CCN1F405.170    
           GO TO 999                                                       CCN1F405.171    
        ENDIF                                                              CCN1F405.172    
        CALL SWAPBOUNDS(D1(JO_co2),lasize(1),lasize(2),offx,offy,          CCN1F405.173    
     &                   swap_levels)                                      CCN1F405.174    
                                                                           CCN1F405.175    
      ENDIF                                                                CCN1F405.176    
*IF DEF,SEAICE                                                             SWAPA2O2.555    
                                                                           SWAPA2O2.556    
      CALL SCATTER_FIELD(D1(JO_SNOWFALL),O_SNOWFALL,                       SWAPA2O2.557    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.558    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.559    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.560    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_SNOWFALL'               SWAPA2O2.561    
         ICODE=113                                                         SWAPA2O2.562    
         GO TO 999                                                         SWAPA2O2.563    
      ENDIF                                                                SWAPA2O2.564    
      CALL SWAPBOUNDS(D1(JO_SNOWFALL),lasize(1),lasize(2),offx,offy,       GRR0F403.246    
     &                   swap_levels)                                      GRR0F403.247    
                                                                           SWAPA2O2.565    
      CALL SCATTER_FIELD(D1(JO_SUBLIM),O_SUBLIM,                           SWAPA2O2.566    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.567    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.568    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.569    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_SUBLIM'                 SWAPA2O2.570    
         ICODE=114                                                         SWAPA2O2.571    
         GO TO 999                                                         SWAPA2O2.572    
      ENDIF                                                                SWAPA2O2.573    
      CALL SWAPBOUNDS(D1(JO_SUBLIM),lasize(1),lasize(2),offx,offy,         GRR0F403.248    
     &                   swap_levels)                                      GRR0F403.249    
                                                                           SWAPA2O2.574    
      CALL SCATTER_FIELD(D1(JO_BOTMELT),O_BOTMELT,                         SWAPA2O2.575    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.576    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.577    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.578    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_BOTMELT'                SWAPA2O2.579    
         ICODE=115                                                         SWAPA2O2.580    
         GO TO 999                                                         SWAPA2O2.581    
      ENDIF                                                                SWAPA2O2.582    
      CALL SWAPBOUNDS(D1(JO_BOTMELT),lasize(1),lasize(2),offx,offy,        GRR0F403.250    
     &                   swap_levels)                                      GRR0F403.251    
                                                                           SWAPA2O2.583    
      CALL SCATTER_FIELD(D1(JO_TOPMELT),O_TOPMELT,                         SWAPA2O2.584    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.585    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.586    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.587    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_TOPMELT'                SWAPA2O2.588    
         ICODE=116                                                         SWAPA2O2.589    
         GO TO 999                                                         SWAPA2O2.590    
      ENDIF                                                                SWAPA2O2.591    
      CALL SWAPBOUNDS(D1(JO_TOPMELT),lasize(1),lasize(2),offx,offy,        GRR0F403.252    
     &                   swap_levels)                                      GRR0F403.253    
                                                                           SWAPA2O2.592    
*ENDIF                                                                     SWAPA2O2.593    
                                                                           SWAPA2O2.594    
*IF DEF,RIVERS                                                             SWAPA2O2.595    
                                                                           SWAPA2O2.596    
      CALL SCATTER_FIELD(D1(JO_RIVEROUT),O_RIVEROUT,                       SWAPA2O2.597    
     &  lasize(1),lasize(2),glsize(1),glsize(2),                           SWAPA2O2.598    
     &  gather_pe,GC_ALL_PROC_GROUP,info)                                  SWAPA2O2.599    
      IF(info.NE.0) THEN      ! Check return code                          SWAPA2O2.600    
         CMESSAGE='SWAPA2O : ERROR in scatter of O_RIVEROUT'               SWAPA2O2.601    
         ICODE=118                                                         SWAPA2O2.602    
         GO TO 999                                                         SWAPA2O2.603    
      ENDIF                                                                SWAPA2O2.604    
      CALL SWAPBOUNDS(D1(JO_RIVEROUT),lasize(1),lasize(2),offx,offy,       GRR0F403.254    
     &                   swap_levels)                                      GRR0F403.255    
                                                                           SWAPA2O2.605    
*ENDIF                                                                     SWAPA2O2.606    
                                                                           SWAPA2O2.607    
!---------------------------------------------------------------------     SWAPA2O2.608    
!                                                                          SWAPA2O2.609    
! 7. Error trap.                                                           SWAPA2O2.610    
                                                                           SWAPA2O2.611    
 999  CONTINUE                                                             SWAPA2O2.612    
      IF(ICODE.NE.0) THEN                                                  SWAPA2O2.613    
         write(6,*) CMESSAGE,ICODE                                         SWAPA2O2.614    
      ENDIF                                                                SWAPA2O2.615    
                                                                           SWAPA2O2.616    
      RETURN                                                               SWAPA2O2.617    
      END                                                                  SWAPA2O2.618    
*ENDIF                                                                     SWAPA2O2.619