*IF DEF,OCEAN                                                              @DYALLOC.4258   
C ******************************COPYRIGHT******************************    GTS2F400.8317   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.8318   
C                                                                          GTS2F400.8319   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.8320   
C restrictions as set forth in the contract.                               GTS2F400.8321   
C                                                                          GTS2F400.8322   
C                Meteorological Office                                     GTS2F400.8323   
C                London Road                                               GTS2F400.8324   
C                BRACKNELL                                                 GTS2F400.8325   
C                Berkshire UK                                              GTS2F400.8326   
C                RG12 2SZ                                                  GTS2F400.8327   
C                                                                          GTS2F400.8328   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.8329   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.8330   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.8331   
C Modelling at the above address.                                          GTS2F400.8332   
C ******************************COPYRIGHT******************************    GTS2F400.8333   
C                                                                          GTS2F400.8334   
C                                                                          ORH1F305.1953   
C=======================================================================   ORH1F305.1954   
C                                                                    ===   ORH1F305.1955   
C  ROWCALC IS CALLED ONCE PER TIMESTEP.  IT INITIALIZES VARIOUS      ===   ORH1F305.1956   
C       QUANTITIES, BOOTSTRAPS THE BASIC ROW BY ROW COMPUTATION      ===   ORH1F305.1957   
C       OF PROGNOSTIC VARIABLES, MANAGES THE I/O FOR THE LATTER,     ===   ORH1F305.1958   
C       AND PERFORMS VARIOUS ANALYSIS PROCEDURES ON THE PROGRESSING  ===   ORH1F305.1959   
C       SOLUTION.                                                    ===   ORH1F305.1960   
!  Modification History:                                                   ORH1F305.1961   
!  Version   Date       Comments                                           ORH1F305.1962   
!  -------  ------     ----------------------------------------            ORH1F305.1963   
!    3.4    01/09/94   Move initialisation procedures prior                ORH1F305.1964   
!                      to main J loop calculation to BLOKINT.              ORH1F305.1965   
!                      Add modifications to allow computations             ORH1F305.1966   
!                      over "blocks of rows". R. Hill.                     ORH1F305.1967   
!    3.4    31/08/94   Added Biologicl Model diagnostics (Nick Taylor)     ORH1F305.1968   
!    3.4    06/10/94   Scale Mead diagnostic for TCO2                      ORH1F305.1969   
!    3.4    18/5/94    Remove sea ice flux correction and split            ORH1F305.1970   
!                      haney forcing of ice from ocean. J F Thomson        ORH1F305.1971   
!    3.4    22/08/94   C.G. Sherlock. Correct out of bounds 'j+1'          ORH1F305.1972   
!                      index in ucurrent and vcurrent                      ORH1F305.1973   
!    3.5    02/02/95   Remove *IF directives replace with control          ORH1F305.1974   
!                      by logical variables. R. Hill                       ORH1F305.1975   
!    4.0    7.7.95     Pass HEATSINK array to TRACER. Jonathan Gregory     OJG0F400.19     
CLL               Pass DIAGSW array to TRACER                              OJG1F400.13     
!    4.0               Correct splitting of leads heatflux and snowrate    OJC2F400.117    
!                      for ice dynamics and add diagnostics.               OJC2F400.118    
!                      J.F.Crossley                                        OJC2F400.119    
C                                                                    ===   ORH1F305.1976   
!     4.0  26/06/95 Remove keel stirring term from calculations            ORH0F400.28     
!                   of mixing energy under dynamic sea ice.                ORH0F400.29     
CLL  4.1  23.5.96  J.M.Gregory  Diags for rate of change of salinity       OJG2F401.256    
CLL  4.1  23.5.96  J.M.Gregory  Diagnostic for total ocean velocity        OJG5F401.1      
CLL   4.1  21/5/96 Rearrange Mead calculations to vectorise properly       OMB2F401.1      
CLL                M J Bell                                                OMB2F401.2      
!      4.3           Pass RHOSRN through argument list. R.  Hill           ORH3F403.9      
!      4.3           Rearrange UCURRENT/VCURRENT calcs for mpp             ORH3F403.10     
!                    efficiency and ease of swapbounds use. R.  Hill       ORH3F403.11     
CLL   4.4  25.9.97  Multiply rates of change of temperature and            OJG2F404.80     
CLL        salinity due to Robert filter by 1e9 for backward               OJG2F404.81     
CLL        compatibility with the C90, where this was necessary to         OJG2F404.82     
CLL        avoid loss of accuracy from dump backing. Process the           OJG2F404.83     
CLL        rate of change of salinity due to the GMW scheme.               OJG2F404.84     
!      4.4      Pass stash flag 30285 into CLINIC (R.Forbes)               OFRAF404.61     
!      4.4           Enable actual temperature to be output                OMB1F404.131    
!                    by stash M. Bell 21.5.97                              OMB1F404.132    
CLL  4.4  15/06/97  Changes to accomodate free surface solution.           ORL1F404.849    
CLL                                                     R.Lenton           ORL1F404.850    
CLL  4.5  13/08/97 Changed the name of the logicals used to determine      OSI1F405.22     
CLL                the array size of UAM2 and VAM2 and removed the         OSI1F405.23     
CLL                calls to OBGILLN and OBGILLS     C.G. Jones             OSI1F405.24     
CLL    4.5  3/11/98   Read in row j+2 data if required. Calculate          OOM3F405.677    
CLL                   biharmonic mom diff coeffs BBUB etc   M. Roberts     OOM3F405.678    
CLL   4.5   3.11.98   Add Med/Hud outflow velocities to standard           OOM2F405.160    
CLL                   velocities.                                          OOM2F405.161    
CLL  4.5  10/11/98  Changes to enable new GM scheme diagnostics            OOM1F405.82     
CLL                                              M. Roberts                OOM1F405.83     
CLL   4.5  1/7/98  Adapt code to allow 2D field of atmospheric CO2         OCN1F405.5      
CLL                      to be passed in from atmosphere. C.D.Jones        OCN1F405.6      
!    4.5  10/08/97 New dynamic ice control logicals   C. Sherlock          ODC1F405.387    
CLL 4.5 G.J.Rickard Introduce full Large scheme with calls to              OOM1F405.574    
CLL                 find boundary layer depth mld_large for                OOM1F405.575    
CLL                 use in VERTCOFC and VERTCOFT                           OOM1F405.576    
CLL                                                                        OOM1F405.577    
!    4.5   Pass swrk_bio arrays through this routine and expand during     ORH3F405.39     
!          calls to BIOLOGY and OSWAPDIAGS. R. Hill                        ORH3F405.40     
!    4.5  05/08/97  Changes for new boundary code M.Bell/S.Ineson          OSI1F405.74     
C=======================================================================   ORH1F305.1977   

      SUBROUTINE ROWCALC(                                                   1,28ROWCALC.2      
*CALL ARGSIZE                                                              @DYALLOC.4259   
*CALL ARGD1                                                                @DYALLOC.4260   
*CALL ARGDUMO                                                              @DYALLOC.4261   
*CALL ARGPTRO                                                              @DYALLOC.4262   
*CALL ARGOCALL                                                             @DYALLOC.4263   
*CALL ARGOINDX                                                             ORH7F402.283    
*CALL COCAROWS                                                             ROWCALC.3      
*CALL ARGOC2DG                                                             ORH0F400.24     
*CALL ARGOC3DG                                                             ORH0F400.25     
     &,DTXADV,DTYADV,DTZADV,DTXDIFF,DTYDIFF,DTZDIFF                        ORH3F405.41     
     &,DTSFC,DTPEN,DTICE,DTMIX,DTCNVC,DTZ,DTFF,DTRF,DTMED,SF_DT            ORH3F405.42     
     &,dsxadv,dsyadv,dszadv,dsxdiff,dsydiff,dszdiff                        ORH3F405.43     
     &,dssfc,dsice,dsmix,dscnvc,dsz,dsff,dsrf,dsmed,sf_ds                  ORH3F405.44     
     &,swrk_bio,si_bio,sf_bio                                              ORH3F405.45     
     &,SWNCOL,sw201_30,sw202_30,sw203_30,sw204_30,sw205_30                 JG170893.93     
     &,sw208_30                                                            ROWCALC.5      
     &,sw248_30,sw249_30,sw250_30,sw251_30                                 NT071293.113    
     &,sw292_30,sw293_30                                                   OJP0F404.920    
     &,sf201_30,sf202_30,sf203_30,sf204_30,sf205_30                        ROWCALC.6      
     &,sf208_30                                                            ROWCALC.7      
     &,sf248_30,sf249_30,sf250_30,sf251_30                                 NT071293.114    
     &,sf292_30,sf293_30                                                   OJP0F404.921    
     &,sf285_30                                                            OFRAF404.62     
     &,mead_diag,sirel_mead,sf_mead,Lpl_mead,tracer_xref                   ORH1F305.1978   
     &,SWZUN,SWZVN,SF_ZN                                                   ORH1F305.1979   
     &,utot,vtot,sfutot,sfvtot,Temperature,SFTemp                          OMB1F404.133    
     &,AICE, HICE, HSNOW, HICE_REF, CARYHEAT, ICY, FLXTOICE                ORH5F401.32     
     &,CARYSALT, anomiceh, fluxcorh, fluxcorw                              ORH5F401.33     
     &,ISX, ISY, WSX_LEADS, WSY_LEADS                                      ORH5F401.34     
     &,LL_ASS_BTRP, DU_ASS_BTRP, DV_ASS_BTRP                               ORH5F401.35     
     &,SURFTEMP, SURFSAL, NEWICE, UCURRENT, VCURRENT                       ORH5F401.36     
     &,TTN, TMT,L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD,                        OOM1F405.579    
     & LAMBDA_LARGE,                                                       OOM1F405.580    
*CALL COCAWRKA                                                             ORH1F304.5      
     &,ISTRESS,ISTRESS_UV                                                  ORH1F304.7      
     &,co2_tot,PCO2_ATM                                                    ORH1F304.13     
     &,c14to12_atm, FTARR                                                  ORH1F405.473    
     &,rxp,ry,rrzp,esav,TPX,UPX,VPX,TBPX,UBPX,VBPX                         ORH7F402.318    
     &,TPPX,UPPX,VPPX,TBPPX,UBPPX,VBPPX                                    OOM3F405.679    
     &,VISOPN,drhob1p,drhob2p,RHOSRN,RHOSRNA,RHOSRNB                       OOM1F405.578    
     &,IMT_GLN_ARG,KM_GLN_ARG                                              ORH1F305.1983   
     &,ATTEND,HUDTEND                                                      OOM2F405.162    
     &)                                                                    ROWCALC.36     
C                                                                          ROWCALC.48     
CFPP$ NOCONCUR R                                                           ORH5F400.1      
      IMPLICIT NONE                                                        RH141293.1      
C---------------------------------------------------------------------     ROWCALC.49     
C  DEFINE GLOBAL DATA                                                      ROWCALC.50     
C---------------------------------------------------------------------     ROWCALC.51     
C                                                                          ROWCALC.52     
C                                                                          ROWCALC.53     
*CALL OARRYSIZ                                                             ORH6F401.31     
*CALL TYPSIZE                                                              @DYALLOC.4264   
*CALL TYPD1                                                                @DYALLOC.4265   
*CALL TYPDUMO                                                              @DYALLOC.4266   
*CALL TYPPTRO                                                              @DYALLOC.4267   
*CALL TYPOINDX                                                             PXORDER.46     
*CALL TYPOCALL                                                             @DYALLOC.4268   
*CALL UMSCALAR                                                             ROWCALC.56     
*CALL C_MDI                                                                @DYALLOC.4269   
*CALL CNTLOCN                                                              ORH1F305.1984   
*CALL OTIMER                                                               ORH1F305.1986   
C                                                                          ROWCALC.64     
*CALL COCTROWS                                                             ROWCALC.65     
*CALL COCTWRKA                                                             ROWCALC.66     
*CALL TYPOC2DG                                                             ORH0F400.26     
*CALL TYPOC3DG                                                             ORH0F400.27     
*IF DEF,MPP                                                                OSI1F405.367    
*CALL PARVARS                                                              OSI1F405.368    
*ENDIF                                                                     OSI1F405.369    
      REAL                                                                 ROWCALC.68     
     & AICE(IMT_ICE,JMT_ICE)    ! INOUT Fractional ice concentration.      ORH1F305.1988   
     &,HICE(IMT_ICE,JMT_ICE)    ! INOUT Ice depth averaged over            ORH1F305.1989   
!                               ! grid box.                                ORH1F305.1990   
     &,HSNOW(IMT_ICE,JMT_ICE) ! INOUT Snow depth over ice fraction         ORH1F305.1991   
!                               ! of grid box.                             ORH1F305.1992   
     &,HICE_REF(IMT_IHY,JMT_IHY) ! IN CLIMATOLOGICAL ice depth.            ORH1F305.1993   
     &,anomiceh(IMT_IHY,JMT_IHY) ! OUT anomalous seaice heat flux          ORH1F305.1994   
                                                                           ORH1F305.1995   
      REAL                                                                 ROWCALC.76     
     & CARYHEAT(IMT_ICE,JMT_ICE)                                           ORH1F305.1996   
     &,FLXTOICE(IMT_ICE,JMT_ICE)                                           ORH1F305.1997   
     &,CARYSALT(IMT_ICE,JMT_ICE)                                           ORH1F305.1998   
     &,SURFTEMP(IMT_ICE,JMT_ICE)                                           ORH1F305.1999   
     &,SURFSAL(IMT_ICE,JMT_ICE)                                            ORH1F305.2000   
     &,UCURRENT(IMT_drsa,JMTM1_drsa)                                       ODC1F405.388    
     &,VCURRENT(IMT_drsa,JMTM1_drsa)                                       ODC1F405.389    
     &,ISX(IMT_idr,JMTM1_idr)                                              ODC1F405.390    
     &,ISY(IMT_idr,JMTM1_idr)                                              ODC1F405.391    
     &,WSX_LEADS(IMT_idr,JMTM1_idr)                                        ODC1F405.392    
     &,WSY_LEADS(IMT_idr,JMTM1_idr)                                        ODC1F405.393    
                                                                           ORH1F305.2007   
      REAL                                                                 ROWCALC.84     
     & fluxcorh(IMT_FLX,JMT_flx)                                           ORH1F305.2008   
     &,fluxcorw(IMT_FLX,JMT_flx)                                           ORH1F305.2009   
                                                                           ORH1F305.2010   
      LOGICAL                                                              ROWCALC.90     
     & NEWICE(IMT_ICE,JMT_ICE)                                             ORH1F305.2011   
     &,ICY(IMT_ICE,JMT_ICE)                                                ORH1F305.2012   
                                                                           ORH1F305.2013   
      REAL                                                                 ROWCALC.95     
     & DU_ASS_BTRP(IMT_ASM,JMT_ASM)  ! u_component  data                   ORH1F305.2014   
!                                    !assimilation increment               ORH1F305.2015   
     &,DV_ASS_BTRP(IMT_ASM,JMT_ASM)  ! v_component  data                   ORH1F305.2016   
!                                    !assimilation increment               ORH1F305.2017   
      LOGICAL                                                              ROWCALC.98     
     & LL_ASS_BTRP  ! logical selecting data assimilation                  ROWCALC.99     
C                                                                          ROWCALC.101    
      INTEGER SWNCOL        ! first dimension of stash workspace           JG170893.99     
      REAL                                                                 ROWCALC.102    
     & sw201_30(SWNCOL,JMT,KMM1) ! stash workspace for vertical velocity   JG170893.100    
     &,sw202_30(SWNCOL,JMT)      ! mixed layer depth                       JG170893.101    
     &,sw203_30(SWNCOL,JMT)      ! anomalous heat flux                     JG170893.102    
     &,sw204_30(SWNCOL,JMT)      ! anomalous water flux                    JG170893.103    
     &,sw205_30(SWNCOL,JMT)      ! anomalous sea ice heat flux             JG170893.104    
     &,sw208_30(SWNCOL,JMT)      ! caryheat heat flux (W/m2)               JG170893.105    
     &,mead_diag(*)            ! tracer transport (mead) diagnostics       ROWCALC.140    
     &,sw248_30(ICOL_CYC,JMT)  !   stash workspace for PCO2                ORH1F305.2018   
     &,sw249_30(ICOL_CYC,JMT)  !   stash workspace for CO2 flux            ORH1F305.2019   
     &,sw250_30(ICOL_CYC,JMT)  !   stash workspace for invasion            ORH1F305.2020   
     &,sw251_30(ICOL_CYC,JMT)  !   stash workspace for evasion             ORH1F305.2021   
     &,sw292_30(ICOL_CYC,JMT) ! stash workspace for virtual CO2 flux       OJP0F404.922    
     &,sw293_30(ICOL_CYC,JMT) ! stash workspace for virtual ALK flux       OJP0F404.923    
                                                                           ORH1F305.2022   
      LOGICAL                                                              ROWCALC.142    
     & sf201_30,sf202_30,sf203_30,sf204_30,sf205_30                        ROWCALC.143    
     &,sf208_30                                                            ROWCALC.144    
     &,sf248_30,sf249_30,sf250_30,sf251_30                                 NT071293.127    
     &,sf292_30,sf293_30                                                   OJP0F404.924    
     &,sf285_30                                                            OFRAF404.63     
                                                                           ORH1F305.2023   
      INTEGER                                                              ROWCALC.146    
     & sirel_mead(O_MAX_TRACERS_MEA)                                       ORH1F305.2024   
     &,tracer_xref(O_MAX_TRACERS_MEA)                                      ORH1F305.2025   
      LOGICAL                                                              ROWCALC.149    
     & sf_mead(O_MAX_TRACERS_MEA)                                          ORH1F305.2026   
     &,Lpl_mead(LSEGC_MEA*4,O_MAX_TRACERS_MEA)                             ORH1F305.2027   
                                                                           ORH1F305.2028   
C     Full-field heating-rate diagnostics                                  JG170893.106    
C     Only DTRF, the Robert time-filter, is calculated in ROWCALC.         JG170893.107    
C     The others are passed on to TRACER without being referenced.         JG170893.108    
      REAL DTXADV(*),DTYADV(*),DTZADV(*)                                   JG170893.109    
     &,DTXDIFF(*),DTYDIFF(*),DTZDIFF(*)                                    JG170893.110    
     &,DTSFC(*),DTPEN(*),DTICE(*),DTMIX(*),DTCNVC(*),DTZ(*),DTFF(*)        JG170893.111    
     &,DTRF(SWNCOL,JMT,KM)                                                 JG170893.112    
     &,DTMED(*)                                                            JG170893.113    
      LOGICAL SF_DT(*)                                                     JG170893.114    
C     Rates of change of salinity                                          OJG2F401.259    
C     Only DSRF, the Robert time-filter, is calculated in ROWCALC.         OJG2F401.260    
C     The others are passed on to TRACER without being referenced.         OJG2F401.261    
      REAL DSXADV(*),DSYADV(*),DSZADV(*)                                   OJG2F401.262    
     &,DSXDIFF(*),DSYDIFF(*),DSZDIFF(*)                                    OJG2F401.263    
     &,DSSFC(*),DSICE(*),DSMIX(*),DSCNVC(*),DSZ(*),DSFF(*)                 OJG2F401.264    
     &,DSRF(SWNCOL,JMT,KM)                                                 OJG2F401.265    
     &,DSMED(*)                                                            OJG2F401.266    
      LOGICAL SF_DS(*)                                                     OJG2F401.267    
C     Baroclinic acceleration diagnostics                                  JG170893.116    
      REAL SWZUN(SWNCOL_CLN,JMT_CLN)                                       ORH1F305.2030   
     &,    SWZVN(SWNCOL_CLN,JMT_CLN)                                       ORH1F305.2031   
      LOGICAL SF_ZN(2)                                                     JG170893.118    
      INTEGER SI_BIO(*)                                                    ORH3F405.46     
                                                                           ORH3F405.47     
      REAL swrk_bio(*)                                                     ORH3F405.48     
                                                                           ORH3F405.49     
      LOGICAL SF_BIO(*)                                                    ORH3F405.50     
                                                                           ORH3F405.51     
      real                                                                 OJG5F401.3      
*IF DEF,MPP                                                                ORH0F404.16     
     & utot(imt_stash,jmt,km)  ! Total u-velocity diagnostic               ORH0F404.17     
     &,vtot(imt_stash,jmt,km)  ! Total v-velocity diagnostic               ORH0F404.18     
! Note: utot and vtot are overdimensioned in mpp case to cope              ORH0F404.19     
! with STASH expecting an extra row in these fields. This is not           ORH0F404.20     
! an ideal solution!                                                       ORH0F404.21     
*ELSE                                                                      ORH0F404.22     
     & utot(imt_stash,jmtm1,km)  ! Total u-velocity diagnostic             OJG5F401.4      
     &,vtot(imt_stash,jmtm1,km)  ! Total v-velocity diagnostic             OJG5F401.5      
*ENDIF                                                                     ORH0F404.23     
     &,Temperature(imt_stash,jmt,km)  ! actual temperature diagnostic      OMB1F404.134    
      logical                                                              OJG5F401.6      
     & sfutot,sfvtot    ! Stash flags for 3D velocity diagnostics          OJG5F401.7      
     &,SFTemp      ! Stash flag for temperature diagnostic                 OMB1F404.135    
                                                                           ORH1F305.2073   
C                                                                          JG170893.120    
                                                                           ORH7F402.319    
                                                                           ORH7F402.320    
                                                                           ORH7F402.321    
                                                                           ORH7F402.322    
                                                                           ORH7F402.323    
                                                                           ORH7F402.324    
                                                                           ORH7F402.325    
                                                                           ORH7F402.326    
                                                                           ORH7F402.327    
                                                                           ORH7F402.328    
                                                                           ORH7F402.329    
                                                                           ORH7F402.330    
                                                                           ORH7F402.331    
                                                                           ORH7F402.332    
                                                                           ORH7F402.333    
                                                                           ORH7F402.334    
                                                                           ORH7F402.335    
                                                                           ORH7F402.336    
C                                                                          ORH1F304.28     
!                                                                          OCN1F405.7      
!  full surface CO2 field                                                  OCN1F405.8      
      REAL ATMPCO2_ROW(IMT_CAR)    ! row of CO2 concentration (ppmv)       OCN1F405.9      
      REAL TPX(IMT,KM,NT)    ! TP for row JFIN +1                          ORH1F304.29     
     &,    UPX(IMT,KM)       ! UP  "   "   "    "                          ORH1F304.30     
     &,    VPX(IMT,KM)       ! VP  "   "   "    "                          ORH1F304.31     
     &,    TBPX(IMT,KM,NT)   ! TBP "   "   "    "                          ORH1F304.32     
     &,    UBPX(IMT,KM)      ! UBP "   "   "    "                          ORH1F304.33     
     &,    VBPX(IMT,KM)      ! VBP "   "   "    "                          ORH1F304.34     
     &,    TPPX(IMT,KM,NT)                                                 OOM3F405.680    
     &,    UPPX(IMT,KM)                                                    OOM3F405.681    
     &,    VPPX(IMT,KM)                                                    OOM3F405.682    
     &,    TBPPX(IMT,KM,NT)                                                OOM3F405.683    
     &,    UBPPX(IMT,KM)                                                   OOM3F405.684    
     &,    VBPPX(IMT,KM)                                                   OOM3F405.685    
C---------------------------------------------------------------------     ROWCALC.153    
C  DIMENSION AND EQUIVALENCE LOCAL DATA                                    ROWCALC.154    
C---------------------------------------------------------------------     ROWCALC.155    
C                                                                          ROWCALC.156    
      INTEGER I,             ! Grid point index (Zonal)                    RH141293.2      
     &     J,                ! Grid point index (Meridional)               RH141293.3      
     &     K,                ! Grid point index (Vertical)                 RH141293.4      
     &     L,                ! Ocean segment loop control                  RH141293.5      
     &     M,                ! Tracer indicator                            RH141293.6      
     &     N,                ! Control index                               RH141293.7      
     &     KZ,               ! Number of sea levels at point               RH141293.12     
     &     IKM               ! Used to calculate KZ                        RH141293.15     
     &,     J_FROM_COMP          ! Start index for main J loop             ORH9F402.118    
     &,     J_TO_COMP            ! End index for main J loop               ORH9F402.119    
     &,    J_IDR       ! temporary value dependet on L_ICEFREEDR           ODC1F405.394    
     &,    J_idrM1     !temporary value dependent on L_ICEFREEDR           ODC1F405.395    
     &,    J_ICE        !    "        "      "     "  L_SEAICE             ORH1F305.2075   
     &,    J_ICEP1      !    "        "      "     "  L_SEAICE             OOM1F405.582    
     &,    J_P1         ! Temporary pointer for J+1                        OOM1F405.583    
     &,    J_IHY        !    "        "      "     "  L_IHANEY             ORH1F305.2076   
     &,    J_FLUX       !    "        "      "     "  L_FLUXCORR           ORH1F305.2077   
     &,    IMT_GLN_ARG  ! For dynamic allocation                           ORH1F305.2079   
     &,    KM_GLN_ARG   ! For dynamic allocation                           ORH1F305.2080   
      REAL                                                                 ROWCALC.157    
     & VBR(KM)  ! ZONAL SUMMATION OF MERIDIONAL VELOCITY                   ROWCALC.158    
     &,TMT(JMT,KM)  ! MERIDIONAL MASS TRANSPORT                            ROWCALC.159    
     &,    CCTJ              ! Coeff used in horizontal mixing of T        RH141293.16     
     &,    FX                ! Temporary value                             RH141293.20     
     &,    SCL               ! Scaling factor for printout                 RH141293.21     
     &,    TBRZ              ! Zonal/vertical tracer average               RH141293.22     
     &,    TOTDZ             ! Vertical span of ocean boxes                RH141293.26     
     &,    TOTDX             ! Total zonal span of ocean boxes             RH141293.27     
     &,    VBRZ              ! Zonal/vertical meridional velocity sum      RH141293.28     
                                                                           ORH1F305.2081   
      REAL TBRN(KM,NT)                                                     ORH1F305.2082   
     &    ,TBRS(KM,NT)                                                     ORH1F305.2083   
                                                                           ORH1F305.2084   
      REAL                                                                 ROWCALC.164    
     & TTN(8,JMT,NTMIN2)        ! NORTHWARD TRANSPORT OF TRACERS           ORH0F404.59     
      REAL                                                                 ROWCALC.171    
     +   anom_heat (IMT_OHY) ! OUT Anomalous heat flux (W/m2)              ORH1F305.2091   
     +  ,anom_salt (IMT_OHY) ! OUT Anomalous P-E (mm/day)                  ORH1F305.2092   
                                                                           ORH1F305.2093   
      REAL                                                                 NT071293.129    
     +   PCO2 (IMT_car)      ! OUT Partial pressure CO2 (ppm)              ORH1F305.2094   
     +  ,CO2_FLUX (IMT_car)  ! OUT Net air-sea flux of CO2 (Mole/m2/yr)    ORH1F305.2095   
     +  ,INVADE (IMT_car)    ! OUT  Invasion rate of CO2 (Mole/m2/yr)      ORH1F305.2096   
     +  ,EVADE (IMT_car)     ! OUT  Evasion rate of CO2 (Mole/m2/yr)       ORH1F305.2097   
     +  ,co2_tot             !  Total net air-sea flux of CO2              ORH1F305.2098   
     +  ,PCO2_ATM            !  pp CO2 in atmosphere (ppm)                 ORH1F305.2099   
     &  ,VTCO2_FLUX(IMT_car)  ! OUT Virtual carbon flux                    OJP0F404.925    
     &  ,VALK_FLUX(IMT_car)   ! OUT Virtual alkalinity flux                OJP0F404.926    
                                                                           ORH1F305.2100   
      REAL c14to12_atm       ! Atmosphere C14/C12 ratio (standard =100)    ORH1F305.2101   
                                                                           ORH1F305.2102   
      REAL DIAG_MLD(IMT_NOIPD_MIX) ! OUT Mixed layer depth (m)             ORH1F305.2103   
                                                                           ORH1F305.2104   
      REAL rhosrn(IMT_RIC,KM_RIC) ! Density on TS row J, from STATED       ORH1F305.2105   
       REAL RHOSRNA(IMT_RIC,KM_RIC+1),RHOSRNB(IMT_RIC,KM_RIC+1) !STATEC    OOM1F405.581    
                                                                           ORH1F305.2106   
                                                                           ORH1F305.2107   
      REAL                                                                 NT071293.137    
     + esav(IMT_IPD,KM_IPD,NT_IPD) ! To save e(I,K,2) in IPDFLXCL          ORH1F305.2108   
     +,rxp(IMT_IPD,KM_IPD)         ! delta-rho in x dirn.                  ORH1F305.2109   
     +,ry(IMT_IPD,KM_IPD)          ! delta-rho in y dirn.                  ORH1F305.2110   
     +,rrzp(IMT_IPD,KMP1_IPD)      ! delta-rho in z dirn.                  ORH1F305.2111   
     &,VISOPN(IMT_GM,KM_GM)   ! G&McW v* at north face of T gridbox        OLA0F401.188    
      REAL UISOP(IMT_GM,KM_GM)     ! u* isopycnal velocity                 OLA0F401.189    
     &,    VISOPS(IMT_GM,KM_GM)    ! v* at south face of T gridbox         OLA0F401.190    
     &,    WISOP(IMT_GM,KMP1_GM)   ! w* at top face of T gridbox           OLA0F401.191    
     &,     DTGM(IMT,KM)   ! Total dT/dt from GM                           OOM1F405.84     
     &,     DSGM(IMT,KM)   ! Total dsalinity/dt from GM                    OOM1F405.85     
      REAL                                                                 OLA0F401.193    
     & drhob1p(IMT)  ! extrapolated density gradient at the bottom of      OLA0F401.194    
                     ! column i+1/2, row j+1 (relative to T grid)          OLA0F401.195    
      REAL                                                                 OLA0F401.196    
     & drhob2p(IMT,2) ! normalised density for row j+1,                    OLA0F401.197    
C                  (*,1) at level one less than min(kmtp(i),kmtpp(i))      OLA0F401.198    
C                  (*,2) at level min(kmtp(i),kmtpp(i))                    OLA0F401.199    
      REAL                                                                 OLA2F403.302    
     +     tmin2(IMT_VIS)  ! Time scale ^2 for Visbeck scheme              OLA2F403.303    
                                                                           ORH1F305.2112   
C GM variables for Griffies implementation                                 OOM1F405.86     
      REAL adv_vetiso(imt_gmm,km_gmm),adv_vbtiso(imt_gmm,0:km_gmm)         OOM1F405.87     
      REAL times(imt),srho(imt,km)                                         OOM1F405.88     
                                                                           OOM1F405.89     
                                                                           ORH1F305.2113   
C  Extra arrays for northern boundary calcs.                               ROWCALC.187    
      REAL UAM2(IMT_GLN_ARG,KM_GLN_ARG),VAM2(IMT_GLN_ARG,KM_GLN_ARG)       ORH1F305.2114   
                                                                           ORH1F305.2115   
      REAL ZDUM(IMT) !   dummy variable passed to UMRANCIL                 ROWCALC.190    
     &,    ZDUM_OR_WME(IMT) ! dummy variable or WME depends on L_OMIXLAY   ORH1F305.2116   
     &,    ZDUM_OR_SOL(IMT) ! dummy variable or SOL depends on L_OSOLAR    ORH1F305.2117   
!                           ! and L_OSOLARAL                               ORH1F305.2118   
     &,    ZDUM_OR_SNOWRATE(IMT) ! dummy variable or SNOWRATE depending    ORH1F305.2119   
!                                ! on L_SEAICE                             ORH1F305.2120   
     &,    ZDUM_OR_T_REF(IMT)    ! dummy variable or T_REF depending on    ORH1F305.2121   
!                                ! L_OHANEY, L_OPSEUDIC                    ORH1F305.2122   
     &,    ZDUM_OR_S_REF(IMT)    ! dummy variable or S_REF depending on    ORH1F305.2123   
!                                ! L_OHANEY, L_OPSEUDIC                    ORH1F305.2124   
     &,    ZDUM_OR_RIVER(IMT)    ! dummy var or RIVERS depending on        ORH1F305.2125   
                                 ! L_RIVERS                                ORH1F305.2126   
                                                                           ORH1F305.2127   
      INTEGER ITEM  ! Local index                                          ORH0F404.60     
      REAL                                                                 ROWCALC.194    
     & conv_mead(O_MAX_TRACERS) ! conversion factor for SI units           ORH1F305.2128   
      LOGICAL                                                              ROWCALC.196    
     & meadtest        ! true if mead diags selected for any tracer        ROWCALC.197    
                                                                           ORH1F305.2129   
      REAL AICE_UV(IMT_idr,JMTM1_idr)                                      ODC1F405.396    
!                       ! ICE FRACTION INTERPOLATED TO UV POINTS.          ORH1F305.2131   
     &,ISTRESS_UV(*)    ! MAGNITUDE OF ICE-OCEAN BASAL STRESS.             ORH1F305.2132   
     &,ISTRESS(IMT_idr_MIX,JMT_idr_MIX)                                    ODC1F405.397    
!                       ! ISTRESS_UV ON TRACER POINTS.                     ORH1F305.2134   
     &,WME_ICE(IMT_idr_MIX)                                                ODC1F405.398    
!                       ! WIND MIXING ENERGY UNDER SEA ICE.                ORH1F305.2136   
C                                                                          OLA3F403.215    
       REAL                                                                OLA3F403.216    
     & WSXM(IMT),WSYM(IMT) ! wind stress on row j-1                        OLA3F403.217    
     &,gnuT(imt_gnu,km_gnu-1) ! Vertical viscosity coeff at bottom of      OLA3F403.218    
     &,gnum(imt_gnu,km_gnu-1) ! gridbox for tracers and momentum resp.     OLA3F403.219    
     &,RiT(imt_gnu,km_gnu-1) ! Richardson number at half levels            OLA3F403.220    
     &,Rim(imt_gnu,km_gnu-1) ! for tracers and momentum resp.              OLA3F403.221    
     &,hT(imt_qlarge) ! Maximum depth for quadratic Large scheme           OLA3F403.222    
     &,hm(imt_qlarge) ! for tracers and momentum resp.                     OLA3F403.223    
     & ,DXTK(IMT,KM)      ! Intermediate value (for grid spacing)          OMB2F401.3      
     & ,VBRPT(IMT,KM)     ! Intermediate value for "Mead" diagnostics      OMB2F401.4      
     & , Temp_row(IMT,KM)    ! actual temperatures on a row for stash      OMB1F404.136    
     & , TWork(IMT,KM), SWORK(IMT,KM) ! work space used by STATE_T         OMB1F404.137    
     &, FTARR(IMTIMT_FLT) ! Big filtering work array                       ORH1F405.472    
                                                                           ORH1F305.2137   
       REAL                                                                OOM1F405.584    
     &  HTNP(IMT) ! NON-PENETRATING HEAT FLUX (W/M2) ON ROW J+1            OOM1F405.585    
     &, PMEP(IMT) ! PRECIP MINUS EVAP (KG/M2/S) ON ROW J+1                 OOM1F405.586    
     &, SOLP(IMT) ! SOLAR IRRADIANCE (W/M2) AT SURFACE ON ROW J+1          OOM1F405.587    
     &, WMEP(IMT) ! WIND MIXING POWER ON ROW J+1 (W M^-2)                  OOM1F405.588    
     &, MLD_LARGE(IMT)  ! MIXED LAYER DEPTH ON T GRID, ROW J, (CM)         OOM1F405.589    
     &, MLD_LARGEP(IMT) ! MIXED LAYER DEPTH ON T GRID, ROW J+1, (CM)       OOM1F405.590    
     &, RHO(IMT,KM)    ! DENSITY IN G/CM^3 , ROW J                         OOM1F405.591    
     &, RHOP(IMT,KM)   ! DENSITY IN G/CM^3 , ROW J+1                       OOM1F405.592    
     &, WORKA(IMT,KM),WORKB(IMT,KM)    !      WORKSPACE                    OOM1F405.593    
     &, WATERFLUX_ICE(IMT) ! WATERFLUX FROM ICE (KG/M2/S) ROW J            OOM1F405.594    
     &, WATERFLUX_ICEP(IMT) ! WATERFLUX FROM ICE (KG/M2/S) ROW J+1         OOM1F405.595    
     &, RIMLDCALC(IMT,KMM1) ! RICHARDSON NO FROM MLD CALC, ROW J           OOM1F405.596    
     &, RIMLDCALCP(IMT,KMM1) ! RICHARDSON NO FROM MLD CALC, ROW J+1        OOM1F405.597    
     &, L_T(IMT)  ! MONIN OBUKHOV LENGTH LARGE SCHEME (TRACER)             OOM1F405.598    
     &, L_M(IMT)  ! MONIN OBUKHOV LENGTH LARGE SCHEME (MOMENTUM)           OOM1F405.599    
     &, LAMBDA_LARGE    ! IN VALUE USED IN CALCULATING MINIMUM MLD         OOM1F405.600    
      LOGICAL L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD                           OOM1F405.601    
       REAL                                                                OOM1F403.65     
     &  ATTEND(KM,NT,4)  ! Mixing tendencies caused by Med outflow         OOM1F403.66     
       REAL HUDTEND(KM,NT,4)                                               OOM2F405.163    
                                                                           OOM2F405.164    
C                                                                          ROWCALC.200    
C---------------------------------------------------------------------     ROWCALC.201    
        INTEGER J_LOOP_FROM, J_LOOP_TO                                     ORH1F403.31     
C  BEGIN EXECUTABLE CODE                                                   ROWCALC.202    
C---------------------------------------------------------------------     ROWCALC.203    
C                                                                          ROWCALC.204    
      IF (L_OTIMER) CALL TIMER('ROWCALC ',3)                               ORH1F305.2138   
                                                                           ORH1F305.2139   
C                                                                          ROWCALC.208    
C=======================================================================   ROWCALC.209    
C  BEGIN SECTION FOR THE INITIALIZATION OF  ============================   ROWCALC.210    
C  VARIOUS QUANTITIES ON EACH TIMESTEP      ============================   ROWCALC.211    
C=======================================================================   ROWCALC.212    
C                                                                          ROWCALC.213    
      IF (L_OHMEAD) THEN                                                   ORH1F305.2140   
C-----------------------------------------------------------------------   SI061093.11     
C  Set switch for mead diagnostics and conversion factor for SI units.     SI061093.12     
C  Temperature transport to heat transport in pettawatts,10**15W, and      SI061093.13     
C  salt trnsport to 10**7kg/s                                              SI061093.14     
C-----------------------------------------------------------------------   SI061093.15     
         meadtest=.false.                                                  ORH1F305.2141   
         DO item=1,O_MAX_TRACERS                                           ORH1F305.2142   
            IF (sf_mead(item)) meadtest=.TRUE.                             ORH1F305.2143   
         END DO                                                            ORH1F305.2144   
         conv_mead(1)=SPECIFIC_HEAT_SI*RHO_WATER_SI*1.E-15/1000000.        ORH1F305.2145   
         conv_mead(2)=RHO_WATER_SI*1.E-7/1000000.                          ORH1F305.2146   
                                                                           ORH1F305.2147   
         IF (L_OCARBON) THEN                                               ORH1F305.2148   
                                                                           ORH1F305.2149   
C  Scale the Northward Transport diags for Tracer 3, which                 ONT4F304.3      
C  represents TCO2, so that output is in units of Giga-Tonnes-C/year       ONT4F304.4      
C  The factor 3.73248E-19 is made up as follows:                           ONT4F304.5      
C   12*(3600*24*360)*1.0e-6*1.0e-15*1.0e-6                                 ONT4F304.6      
C   12 is weight in grams of 1 mole of carbon, (3600*24*360) converts      ONT4F304.7      
C   from /s to /year, 10**-6 converts micro-moles to moles,                ONT4F304.8      
C   10**-15 converts from grams to giga-tonnes, 10**-6 converts            ONT4F304.9      
C   cm**-3 to m**-3.                                                       ONT4F304.10     
C   RHO_WATER_SI converts micro-moles/kg to micro-moles/m3                 ONT4F304.11     
C                                                                          ONT4F304.12     
            conv_mead(3)=RHO_WATER_SI*3.73248*1.E-19                       ORH1F305.2150   
         ELSE                                                              ORH1F305.2151   
            conv_mead(3)=1./1000000.                                       ORH1F305.2152   
         ENDIF                                                             ORH1F305.2153   
                                                                           ORH1F305.2154   
         DO item=4,O_MAX_TRACERS                                           ORH1F305.2155   
           conv_mead(item)=1./1000000.                                     ORH1F305.2156   
         END DO                                                            ORH1F305.2157   
                                                                           ORH1F305.2158   
       ELSE                                                                ORH5F403.288    
         DO M=1,NT                                                         ORH5F403.289    
            DO K=1,KM                                                      ORH5F403.290    
               TBRN(K,M)=0.0                                               ORH5F403.291    
            ENDDO                                                          ORH5F403.292    
         ENDDO                                                             ORH5F403.293    
       ENDIF                                                               ORH5F403.294    
C                                                                          ROWCALC.345    
C=======================================================================   ROWCALC.346    
C  END OF SECTION FOR INITIALIZATION  ==================================   ROWCALC.347    
C=======================================================================   ROWCALC.348    
      ! Set up row-wise loop index controls for main part of               ORH9F402.120    
      ! the computation.                                                   ORH9F402.121    
*IF -DEF,MPP                                                               ORH9F402.122    
      J_FROM_COMP = MAX(2,JST)                                             ORH9F402.123    
      J_TO_COMP   = JFIN                                                   ORH9F402.124    
      J_LOOP_FROM = J_2                                                    ORH0F404.45     
      J_LOOP_TO   = J_JMTM1                                                ORH0F404.46     
*ELSE                                                                      ORH9F402.125    
      ! First block must contain at least rows 1 and 2.                    ORH9F402.126    
      ! Computation always starts at global row 2.                         ORH9F402.127    
      ! Computation always ends at global row JMTM1.                       ORH9F402.128    
      ! We must therefore set up our start and end indices                 ORH9F402.129    
      ! to reflect these as local values.                                  ORH9F402.130    
      J_FROM_COMP = J_2                                                    ORH9F402.131    
      J_TO_COMP   = J_JMTM1                                                ORH9F402.132    
      IF (L_OFILTER) THEN                                                  ORH0F404.47     
         ! Start and end indicies contain include rows 1 (globally         ORH0F404.48     
         ! speaking) and JMT and possibly other dummy rows which           ORH0F404.49     
         ! do not contain work in order to allow sychronisation            ORH0F404.50     
         ! and work distribution among all PEs during filtering.           ORH0F404.51     
         J_LOOP_FROM = J_1                                                 ORH0F404.52     
         J_LOOP_TO   = MAX_ROW_INDEX                                       ORH0F404.53     
      ELSE                                                                 ORH0F404.54     
         J_LOOP_FROM = J_2                                                 ORH0F404.55     
         J_LOOP_TO   = J_JMTM1                                             ORH0F404.56     
      ENDIF                                                                ORH0F404.57     
*ENDIF                                                                     ORH9F402.133    
C=======================================================================   ROWCALC.563    
C  BEGIN ROW-BY-ROW COMPUTATION OF PROGNOSTIC VARIABLES  ===============   ROWCALC.564    
C=======================================================================   ROWCALC.565    
C                                                                          ROWCALC.566    
      DO 380 J=J_LOOP_FROM,J_LOOP_TO  ! For each row in this block         ORH0F404.58     
                                                                           ORH1F403.35     
        ! We must ensure CLINIC can take a barrier.                        ORH1F403.36     
        IF (J.GE.J_FROM_COMP.AND.J.LE.J_TO_COMP) THEN                      ORH1F403.37     
                                                                           ORH1F403.38     
C                                                                          ROWCALC.568    
       IF (L_OBIMOM) THEN                                                  OOM3F405.686    
C                                                                          OOM3F405.687    
C-----------------------------------------------------------------------   OOM3F405.688    
C   Calculate diffusion coefficients for biharmonic momentum diffusion     OOM3F405.689    
C-----------------------------------------------------------------------   OOM3F405.690    
C                                                                          OOM3F405.691    
        BBUB = BM * BBUD                                                   OOM3F405.692    
        DDUB = BM * DDUD                                                   OOM3F405.693    
        GGUB = BM * GGUD                                                   OOM3F405.694    
        HHUB = BM * HHUD                                                   OOM3F405.695    
                                                                           OOM3F405.696    
        BBUD = 8.0*(CSR(J+1)*CSR(J+1))                                     OOM3F405.697    
        DDUD = (CST(J+1)*DYTR(J+1))*(DYUR(J+1)*CSR(J+1))                   OOM3F405.698    
        GGUD = (1.0-(TNG(J+1)*TNG(J+1)))/(RADIUS*RADIUS)                   OOM3F405.699    
        HHUD = 2.0*SINE(J+1)/(RADIUS*(CS(J+1)*CS(J+1)))                    OOM3F405.700    
                                                                           OOM3F405.701    
C rearrange order for calc. these as don't want to calc                    OOM3F405.702    
C at j=jmtm1                                                               OOM3F405.703    
        IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN                               OOM3F405.704    
          CCUB = 0.0                                                       OOM3F405.705    
          CCUD = 0.0                                                       OOM3F405.706    
        ELSE IF (J.LT.J_JMT) THEN                                          OOM3F405.707    
          CCUB = BM * CCUD                                                 OOM3F405.708    
          CCUD = (CST(J+2)*DYTR(J+2))*(DYUR(J+1)*CSR(J+1))                 OOM3F405.709    
        ELSE                                                               OOM3F405.710    
          CCUB = BM * CCUD                                                 OOM3F405.711    
          CCUD = (CSTJP*DYTRJP)*(DYUR(J+1)*CSR(J+1))                       OOM3F405.712    
        ENDIF                                                              OOM3F405.713    
                                                                           OOM3F405.714    
       ENDIF ! L_OBIMOM                                                    OOM3F405.715    
                                                                           OOM3F405.716    
C---------------------------------------------------------------------     ROWCALC.569    
C  MOVE ALL SLAB DATA DOWN ONE ROW                                         ROWCALC.570    
C     TOGETHER WITH QUANTITIES SAVED FOR TIME FILTER                       ROWCALC.571    
C---------------------------------------------------------------------     ROWCALC.572    
C                                                                          ROWCALC.573    
      DO M=1,NT                                                            ROWCALC.574    
        DO K=1,KM                                                          ROWCALC.575    
          DO I=1,IMT                                                       ROWCALC.576    
            TBM(I,K,M)=TB(I,K,M)                                           ROWCALC.577    
            TM(I,K,M)=T(I,K,M)                                             ROWCALC.578    
            TB(I,K,M)=TBP(I,K,M)                                           ROWCALC.579    
            T(I,K,M)=TP(I,K,M)                                             ROWCALC.580    
          ENDDO                                                            ROWCALC.581    
        ENDDO                                                              ROWCALC.582    
      ENDDO                                                                ROWCALC.583    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.717    
      DO M=1,NT                                                            OOM3F405.718    
        DO K=1,KM                                                          OOM3F405.719    
          DO I=1,IMT                                                       OOM3F405.720    
            TBP(I,K,M)=TBPP(I,K,M)                                         OOM3F405.721    
            TP(I,K,M)=TPP(I,K,M)                                           OOM3F405.722    
          ENDDO                                                            OOM3F405.723    
        ENDDO                                                              OOM3F405.724    
      ENDDO                                                                OOM3F405.725    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                     OOM3F405.726    
      DO K=1,KM                                                            ROWCALC.584    
        DO I=1,IMT                                                         ROWCALC.585    
          UBM(I,K)=UB(I,K)                                                 ROWCALC.586    
          UM(I,K)=U(I,K)                                                   ROWCALC.587    
          UB(I,K)=UBP(I,K)                                                 ROWCALC.588    
          U(I,K)=UP(I,K)                                                   ROWCALC.589    
          VBM(I,K)=VB(I,K)                                                 ROWCALC.590    
          VM(I,K)=V(I,K)                                                   ROWCALC.591    
          VB(I,K)=VBP(I,K)                                                 ROWCALC.592    
          V(I,K)=VP(I,K)                                                   ROWCALC.593    
        ENDDO                                                              ROWCALC.594    
      ENDDO                                                                ROWCALC.595    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.727    
      DO K=1,KM                                                            OOM3F405.728    
        DO I=1,IMT                                                         OOM3F405.729    
          UBP(I,K)=UBPP(I,K)                                               OOM3F405.730    
          UP(I,K)=UPP(I,K)                                                 OOM3F405.731    
          VBP(I,K)=VBPP(I,K)                                               OOM3F405.732    
          VP(I,K)=VPP(I,K)                                                 OOM3F405.733    
        ENDDO                                                              OOM3F405.734    
      ENDDO                                                                OOM3F405.735    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                     OOM3F405.736    
                                                                           OOM3F405.737    
      IF (L_OBIMOM) THEN                                                   OOM3F405.738    
        DO K=1,KM                                                          OOM3F405.739    
          DO I=1,IMT                                                       OOM3F405.740    
            D2U(I,K,1)=D2U(I,K,2)                                          OOM3F405.741    
            D2U(I,K,2)=D2U(I,K,3)                                          OOM3F405.742    
            D2V(I,K,1)=D2V(I,K,2)                                          OOM3F405.743    
            D2V(I,K,2)=D2V(I,K,3)                                          OOM3F405.744    
          ENDDO                                                            OOM3F405.745    
        ENDDO                                                              OOM3F405.746    
      ENDIF                                                                OOM3F405.747    
                                                                           OOM3F405.748    
      IF (.NOT.(L_ONOCLIN)) THEN                                           ORH1F305.2160   
         DO I=1,IMT                                                        ORH1F305.2161   
            SSFUB(I)=SSFUBP(I)                                             ORH1F305.2162   
            SSFVB(I)=SSFVBP(I)                                             ORH1F305.2163   
         ENDDO                                                             ORH1F305.2164   
C move the external mode for j+2 down a row (saved for time filter)        OOM3F405.749    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.750    
         DO I=1,IMT                                                        OOM3F405.751    
          SSFUBP(I)=SSFUBPP(I)                                             OOM3F405.752    
          SSFVBP(I)=SSFVBPP(I)                                             OOM3F405.753    
         ENDDO                                                             OOM3F405.754    
      ENDIF                                                                OOM3F405.755    
      ENDIF                                                                ORH1F305.2165   
C                                                                          ROWCALC.602    
C---------------------------------------------------------------------     ROWCALC.603    
C  COMPLETE READIN OF J+1 SLAB (EXCEPT LAST ROW)                           ROWCALC.604    
C---------------------------------------------------------------------     ROWCALC.605    
C                                                                          ROWCALC.606    
       IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN                            OOM3F405.756    
      IF( J+J_OFFSET.NE.JMTM1_GLOBAL .AND. J+J_OFFSET.EQ.JFIN ) THEN       OSI1F405.75     
        ! If this is the last row of a block but not the                   ORH1F304.38     
        ! last row of all, then TP etc must be populated                   ORH1F304.39     
        ! with the value saved prior to the start of                       ORH1F304.40     
        ! computation of the current block of rows.                        ORH1F304.41     
           DO M=1,NT                                                       ORH1F304.43     
              DO K=1,KM                                                    ORH1F304.44     
                 DO I=1,IMT                                                ORH1F304.45     
                   TP (I,K,M)=TPX(I,K,M)                                   ORH1F304.46     
                   TBP(I,K,M)=TBPX(I,K,M)                                  ORH1F304.47     
                 ENDDO                                                     ORH1F304.48     
              ENDDO                                                        ORH1F304.49     
           ENDDO                                                           ORH1F304.50     
           DO K=1,KM                                                       ORH1F304.51     
              DO I=1,IMT                                                   ORH1F304.52     
                 UP (I,K)=UPX(I,K)                                         ORH1F304.53     
                 VP (I,K)=VPX(I,K)                                         ORH1F304.54     
                 UBP(I,K)=UBPX(I,K)                                        ORH1F304.55     
                 VBP(I,K)=VBPX(I,K)                                        ORH1F304.56     
              ENDDO                                                        ORH1F304.57     
           ENDDO                                                           ORH1F304.58     
        ELSE IF ( J+J_OFFSET.NE.JMTM1_GLOBAL .OR. L_OPENBC) THEN           OSI1F405.76     
        CALL UMREAD(                                                       @DYALLOC.4294   
*CALL ARGSIZE                                                              @DYALLOC.4295   
*CALL ARGD1                                                                @DYALLOC.4296   
*CALL ARGDUMO                                                              @DYALLOC.4297   
*CALL ARGPTRO                                                              @DYALLOC.4298   
     &              LABS(NDISKB),J+1,TBP                                   @DYALLOC.4299   
     &,   NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                  OSI0F402.128    
        CALL UMREAD(                                                       @DYALLOC.4300   
*CALL ARGSIZE                                                              @DYALLOC.4301   
*CALL ARGD1                                                                @DYALLOC.4302   
*CALL ARGDUMO                                                              @DYALLOC.4303   
*CALL ARGPTRO                                                              @DYALLOC.4304   
     &              LABS(NDISK),J+1,TP                                     @DYALLOC.4305   
     &,   NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                  OSI0F402.129    
      ENDIF                                                                ROWCALC.612    
       ELSE                                                                OOM3F405.757    
        IF(J+J_OFFSET.NE.JMTM1_GLOBAL) THEN                                OOM3F405.758    
         IF (J+J_OFFSET.EQ.JFIN) THEN                                      OOM3F405.759    
           DO M=1,NT                                                       OOM3F405.760    
              DO K=1,KM                                                    OOM3F405.761    
                 DO I=1,IMT                                                OOM3F405.762    
                   TPP (I,K,M)=TPPX(I,K,M)                                 OOM3F405.763    
                   TBPP(I,K,M)=TBPPX(I,K,M)                                OOM3F405.764    
                 ENDDO                                                     OOM3F405.765    
              ENDDO                                                        OOM3F405.766    
           ENDDO                                                           OOM3F405.767    
           DO K=1,KM                                                       OOM3F405.768    
              DO I=1,IMT                                                   OOM3F405.769    
                 UPP (I,K)=UPPX(I,K)                                       OOM3F405.770    
                 VPP (I,K)=VPPX(I,K)                                       OOM3F405.771    
                 UBPP(I,K)=UBPPX(I,K)                                      OOM3F405.772    
                 VBPP(I,K)=VBPPX(I,K)                                      OOM3F405.773    
              ENDDO                                                        OOM3F405.774    
           ENDDO                                                           OOM3F405.775    
                                                                           OOM3F405.776    
        ELSE IF (J+J_OFFSET.EQ.JFIN-1) THEN                                OOM3F405.777    
           DO M=1,NT                                                       OOM3F405.778    
              DO K=1,KM                                                    OOM3F405.779    
                 DO I=1,IMT                                                OOM3F405.780    
                   TPP (I,K,M)=TPX(I,K,M)                                  OOM3F405.781    
                   TBPP(I,K,M)=TBPX(I,K,M)                                 OOM3F405.782    
                 ENDDO                                                     OOM3F405.783    
              ENDDO                                                        OOM3F405.784    
           ENDDO                                                           OOM3F405.785    
           DO K=1,KM                                                       OOM3F405.786    
              DO I=1,IMT                                                   OOM3F405.787    
                 UPP (I,K)=UPX(I,K)                                        OOM3F405.788    
                 VPP (I,K)=VPX(I,K)                                        OOM3F405.789    
                 UBPP(I,K)=UBPX(I,K)                                       OOM3F405.790    
                 VBPP(I,K)=VBPX(I,K)                                       OOM3F405.791    
              ENDDO                                                        OOM3F405.792    
           ENDDO                                                           OOM3F405.793    
        ELSE                                                               OOM3F405.794    
        CALL UMREAD(                                                       OOM3F405.795    
*CALL ARGSIZE                                                              OOM3F405.796    
*CALL ARGD1                                                                OOM3F405.797    
*CALL ARGDUMO                                                              OOM3F405.798    
*CALL ARGPTRO                                                              OOM3F405.799    
     &              LABS(NDISKB),J+2,TBPP      ! J+2,T-1                   OOM3F405.800    
     &,   NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                  OOM3F405.801    
C                                                                          OOM3F405.802    
        CALL UMREAD(                                                       OOM3F405.803    
*CALL ARGSIZE                                                              OOM3F405.804    
*CALL ARGD1                                                                OOM3F405.805    
*CALL ARGDUMO                                                              OOM3F405.806    
*CALL ARGPTRO                                                              OOM3F405.807    
     &              LABS(NDISK),J+2,TPP        ! J+2,T                     OOM3F405.808    
     &,   NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                  OOM3F405.809    
                                                                           OOM3F405.810    
         ENDIF  ! j+j_offset.eq.jfin                                       OOM3F405.811    
        ENDIF  ! J+J_OFFSET.NE.JMTM1_GLOBAL                                OOM3F405.812    
       ENDIF  ! L_OBIMOM or L_OBIHARMGM                                    OOM3F405.813    
C                                                                          OOM3F405.814    
       IF (L_OMEDADV) THEN                                                 OOM2F405.165    
C Set the velocities so that med_vol Sverdrups is                          OOM2F405.166    
C fluxed through the Gibraltar Strait.                                     OOM2F405.167    
       IF (.NOT.(L_OBIMOM.OR.L_OBIHARMGM)) THEN                            OOM2F405.168    
        IF (J+J_OFFSET.eq.jmout(1)-1) then                                 OOM2F405.169    
C set the velocity on the land point in the Atlantic                       OOM2F405.170    
C to the appropriate value                                                 OOM2F405.171    
          do k=1,med_topflow                                               OOM2F405.172    
            UBP(imout(1),k)=UBP(imout(1),k)+med_in                         OOM2F405.173    
            UP(imout(1),k)=UP(imout(1),k)+med_in                           OOM2F405.174    
          enddo                                                            OOM2F405.175    
          do k=lev_med,lev_med                                             OOM2F405.176    
            UBP(imout(1),k)=UBP(imout(1),k)+med_out                        OOM2F405.177    
            UP(imout(1),k)=UP(imout(1),k)+med_out                          OOM2F405.178    
          enddo                                                            OOM2F405.179    
        ENDIF                                                              OOM2F405.180    
       ELSE                                                                OOM2F405.181    
        IF (J+J_OFFSET.eq.jmout(1)-2) then                                 OOM2F405.182    
C set the velocity on the land point in the Atlantic                       OOM2F405.183    
C to the appropriate value                                                 OOM2F405.184    
          do k=1,med_topflow                                               OOM2F405.185    
            UBPP(imout(1),k)=UBPP(imout(1),k)+med_in                       OOM2F405.186    
            UPP(imout(1),k)=UPP(imout(1),k)+med_in                         OOM2F405.187    
          enddo                                                            OOM2F405.188    
          do k=lev_med,lev_med                                             OOM2F405.189    
            UBPP(imout(1),k)=UBPP(imout(1),k)+med_out                      OOM2F405.190    
            UPP(imout(1),k)=UPP(imout(1),k)+med_out                        OOM2F405.191    
          enddo                                                            OOM2F405.192    
        ENDIF                                                              OOM2F405.193    
                                                                           OOM2F405.194    
       ENDIF                                                               OOM2F405.195    
                                                                           OOM2F405.196    
       IF (.NOT.(L_OBIMOM.OR.L_OBIHARMGM)) THEN                            OOM2F405.197    
        IF (J+J_OFFSET.eq.jmout(3)-1) then                                 OOM2F405.198    
C set the velocity on the land point in the Mediterranean                  OOM2F405.199    
C to the appropriate value                                                 OOM2F405.200    
          do k=1,med_topflow                                               OOM2F405.201    
            UBP(imout(3)-1,k)=UBP(imout(3)-1,k)+med_in                     OOM2F405.202    
            UP(imout(3)-1,k)=UP(imout(3)-1,k)+med_in                       OOM2F405.203    
          enddo                                                            OOM2F405.204    
          do k=lev_med,lev_med                                             OOM2F405.205    
            UBP(imout(3)-1,k)=UBP(imout(3)-1,k)+med_out                    OOM2F405.206    
            UP(imout(3)-1,k)=UP(imout(3)-1,k)+med_out                      OOM2F405.207    
          enddo                                                            OOM2F405.208    
        ENDIF                                                              OOM2F405.209    
       ELSE                                                                OOM2F405.210    
        IF (J+J_OFFSET.eq.jmout(3)-2) then                                 OOM2F405.211    
C set the velocity on the land point in the Mediterranean                  OOM2F405.212    
C to the appropriate value                                                 OOM2F405.213    
          do k=1,med_topflow                                               OOM2F405.214    
            UBPP(imout(3)-1,k)=UBPP(imout(3)-1,k)+med_in                   OOM2F405.215    
            UPP(imout(3)-1,k)=UPP(imout(3)-1,k)+med_in                     OOM2F405.216    
          enddo                                                            OOM2F405.217    
          do k=lev_med,lev_med                                             OOM2F405.218    
            UBPP(imout(3)-1,k)=UBPP(imout(3)-1,k)+med_out                  OOM2F405.219    
            UPP(imout(3)-1,k)=UPP(imout(3)-1,k)+med_out                    OOM2F405.220    
          enddo                                                            OOM2F405.221    
        ENDIF                                                              OOM2F405.222    
       ENDIF                                                               OOM2F405.223    
                                                                           OOM2F405.224    
       IF (L_OHUDOUT) THEN                                                 OOM2F405.225    
C Set the velocities so that hud_vol Sv is                                 OOM2F405.226    
C fluxed through from Hudson Bay into the Atlantic.                        OOM2F405.227    
       IF (.NOT.(L_OBIMOM.OR.L_OBIHARMGM)) THEN                            OOM2F405.228    
        IF (J+J_OFFSET.eq.jmout_hud(1)-1) then                             OOM2F405.229    
C set the velocity on the land point in the Atlantic                       OOM2F405.230    
C to the appropriate value                                                 OOM2F405.231    
          do k=1,lev_hud-1                                                 OOM2F405.232    
            UBP(imout_hud(1),k)=UBP(imout_hud(1),k)+hud_in                 OOM2F405.233    
            UP(imout_hud(1),k)=UP(imout_hud(1),k)+hud_in                   OOM2F405.234    
          enddo                                                            OOM2F405.235    
          do k=lev_hud,lev_hud                                             OOM2F405.236    
            UBP(imout_hud(1),k)=UBP(imout_hud(1),k)+hud_out                OOM2F405.237    
            UP(imout_hud(1),k)=UP(imout_hud(1),k)+hud_out                  OOM2F405.238    
          enddo                                                            OOM2F405.239    
        ENDIF                                                              OOM2F405.240    
       ELSE                                                                OOM2F405.241    
        IF (J+J_OFFSET.eq.jmout_hud(1)-2) then                             OOM2F405.242    
C set the velocity on the land point in the Atlantic                       OOM2F405.243    
C to the appropriate value                                                 OOM2F405.244    
          do k=1,lev_hud-1                                                 OOM2F405.245    
            UBPP(imout_hud(1),k)=UBPP(imout_hud(1),k)+hud_in               OOM2F405.246    
            UPP(imout_hud(1),k)=UPP(imout_hud(1),k)+hud_in                 OOM2F405.247    
          enddo                                                            OOM2F405.248    
          do k=lev_hud,lev_hud                                             OOM2F405.249    
            UBPP(imout_hud(1),k)=UBPP(imout_hud(1),k)+hud_out              OOM2F405.250    
            UPP(imout_hud(1),k)=UPP(imout_hud(1),k)+hud_out                OOM2F405.251    
          enddo                                                            OOM2F405.252    
        ENDIF                                                              OOM2F405.253    
       ENDIF                                                               OOM2F405.254    
                                                                           OOM2F405.255    
       IF (.NOT.(L_OBIMOM.OR.L_OBIHARMGM)) THEN                            OOM2F405.256    
        IF (J+J_OFFSET.eq.jmout_hud(3)-1) then                             OOM2F405.257    
C set the velocity on the land point in the Mediterranean                  OOM2F405.258    
C to the appropriate value                                                 OOM2F405.259    
          do k=1,lev_hud-1                                                 OOM2F405.260    
            UBP(imout_hud(3)-1,k)=UBP(imout_hud(3)-1,k)+hud_in             OOM2F405.261    
            UP(imout_hud(3)-1,k)=UP(imout_hud(3)-1,k)+hud_in               OOM2F405.262    
          enddo                                                            OOM2F405.263    
          do k=lev_hud,lev_hud                                             OOM2F405.264    
            UBP(imout_hud(3)-1,k)=UBP(imout_hud(3)-1,k)+hud_out            OOM2F405.265    
            UP(imout_hud(3)-1,k)=UP(imout_hud(3)-1,k)+hud_out              OOM2F405.266    
          enddo                                                            OOM2F405.267    
        ENDIF                                                              OOM2F405.268    
       ELSE                                                                OOM2F405.269    
        IF (J+J_OFFSET.eq.jmout_hud(3)-2) then                             OOM2F405.270    
C set the velocity on the land point in the Mediterranean                  OOM2F405.271    
C to the appropriate value                                                 OOM2F405.272    
          do k=1,lev_hud-1                                                 OOM2F405.273    
            UBPP(imout_hud(3)-1,k)=UBPP(imout_hud(3)-1,k)+hud_in           OOM2F405.274    
            UPP(imout_hud(3)-1,k)=UPP(imout_hud(3)-1,k)+hud_in             OOM2F405.275    
          enddo                                                            OOM2F405.276    
          do k=lev_hud,lev_hud                                             OOM2F405.277    
            UBPP(imout_hud(3)-1,k)=UBPP(imout_hud(3)-1,k)+hud_out          OOM2F405.278    
            UPP(imout_hud(3)-1,k)=UPP(imout_hud(3)-1,k)+hud_out            OOM2F405.279    
          enddo                                                            OOM2F405.280    
        ENDIF                                                              OOM2F405.281    
       ENDIF                                                               OOM2F405.282    
       ENDIF  ! L_OHUDOUT                                                  OOM2F405.283    
       ENDIF  ! L_OMEDADV                                                  OOM2F405.284    
                                                                           OOM2F405.285    
C                                                                          ROWCALC.613    
C---------------------------------------------------------------------     ROWCALC.614    
C  INITIATE WRITEOUT OF NEWLY COMPUTED DATA FROM PREVIOUS ROW              ROWCALC.615    
C---------------------------------------------------------------------     ROWCALC.616    
C                                                                          ROWCALC.617    
      IF (J.GT.J_FROM_COMP) CALL UMWRITE(                                  ORH9F402.135    
*CALL ARGSIZE                                                              @DYALLOC.4307   
*CALL ARGD1                                                                @DYALLOC.4308   
*CALL ARGDUMO                                                              @DYALLOC.4309   
*CALL ARGPTRO                                                              @DYALLOC.4310   
     &                        LABS(NDISKA),J-1,TA                          @DYALLOC.4311   
     &,            NDISKB,NDISK,NDISKA,FKMP,FKMQ )                         OSI0F402.130    
C                                                                          ROWCALC.620    
C-------------------------------------------------------------------       ROWCALC.621    
C  READ IN MAXIMUM LEVEL INDICATORS FOR ROWS J AND J+1 DIRECTLY            ROWCALC.622    
C  AND CONVERT TO INTEGER                                                  ROWCALC.623    
C-------------------------------------------------------------------       ROWCALC.624    
C                                                                          ROWCALC.625    
      DO 333 I=1,IMT                                                       ROWCALC.626    
        KMT (I)=FKMP(I,J)                                                  ROWCALC.627    
        KMU (I)=FKMQ(I,J)                                                  ROWCALC.628    
        KMTP(I)=FKMP(I,J+1)                                                ROWCALC.629    
        KMUP(I)=FKMQ(I,J+1)                                                ROWCALC.630    
C  READ IN MAX LEVEL INDICATORS FOR ROW J+2                                OLA0F401.200    
        IF (J+J_OFFSET.LT.JMTM1_GLOBAL) THEN                               ORH3F402.251    
            KMTPP(I)=FKMP_GLOBAL(I,J+J_OFFSET+2)                           ORH3F402.252    
        ELSE                                                               ORH3F402.253    
            KMTPP(I)=0                                                     ORH3F402.254    
        ENDIF                                                              ORH3F402.255    
  333 CONTINUE                                                             ROWCALC.631    
C  SHIFT MAXIMUM LEVEL INDICATORS DOWN ONE ROW AND SET J+2 VALUES          OOM3F405.815    
c      KMUP(I)=KMUPP(I)                                                    OOM3F405.816    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.817    
        IF (J+J_OFFSET.LT.JMTM1_GLOBAL) THEN                               OOM3F405.818    
          IF (J.LT.J_JMT) THEN                                             OOM3F405.819    
           DO I=1,IMT                                                      OOM3F405.820    
            KMUPP(I)=FKMQ(I,J+2)                                           OOM3F405.821    
           ENDDO                                                           OOM3F405.822    
          ELSE                                                             OOM3F405.823    
           DO I=1,IMT                                                      OOM3F405.824    
            KMUPP(I)=FKMQJP(I)                                             OOM3F405.825    
           ENDDO                                                           OOM3F405.826    
          ENDIF  ! (J.LT.J_JMT)                                            OOM3F405.827    
        ELSE                                                               OOM3F405.828    
          DO I=1,IMT                                                       OOM3F405.829    
            KMUPP(I)=0                                                     OOM3F405.830    
          ENDDO                                                            OOM3F405.831    
        ENDIF                                                              OOM3F405.832    
      ENDIF  ! L_OBIMOM or L_OBIHARMGM                                     OOM3F405.833    
                                                                           OOM3F405.834    
conditions as in vn4.3 code for T conditions                               OOM3F405.835    
                                                                           OOM3F405.836    
C                                                                          ROWCALC.632    
C-------------------------------------------------------------------       ROWCALC.633    
C  AT THIS STAGE READ IN THE OTHER INCIDENTAL QUANTITIES FROM THE          ROWCALC.634    
C  BKOH STORES FOR ROW J                                                   ROWCALC.635    
C-------------------------------------------------------------------       ROWCALC.636    
C                                                                          ROWCALC.637    
      CALL UMRANCIL(                                                       @DYALLOC.4312   
*CALL ARGSIZE                                                              @DYALLOC.4313   
*CALL ARGD1                                                                @DYALLOC.4314   
*CALL ARGPTRO                                                              @DYALLOC.4316   
     & J,WSX,WSY,HTN,PME                                                   @DYALLOC.4317   
     &,ZDUM_OR_WME                                                         ORH1F305.2166   
     &,ZDUM_OR_SOL                                                         ORH1F305.2167   
     &,ZDUM_OR_SNOWRATE                                                    ORH1F305.2168   
     &,ZDUM_OR_T_REF,ZDUM_OR_S_REF                                         ORH1F305.2169   
     &,ZDUM_OR_RIVER                                                       ORH1F305.2170   
     &  )                                                                  ROWCALC.673    
c Set up WSYM,WSXM - surface wind stress on row j-1                        OLA3F403.224    
        DO I=1,IMT                                                         OLA3F403.225    
          WSXM(I)=D1(joc_taux+(J-2)*IMT+I-1)                               OLA3F403.226    
          WSYM(I)=D1(joc_tauy+(J-2)*IMT+I-1)                               OLA3F403.227    
          HTNP(I)=D1(JOC_HEAT+J*IMT+I-1)                                   OOM1F405.602    
          PMEP(I)=D1(JOC_PLE+J*IMT+I-1)                                    OOM1F405.603    
          SOLP(I)=D1(JOC_SOLAR+J*IMT+I-1)                                  OOM1F405.604    
          WMEP(I)=D1(JOC_WME+J*IMT+I-1)                                    OOM1F405.605    
        ENDDO                                                              OLA3F403.228    
        IF (L_SEAICE) THEN                                                 OOM1F405.606    
        DO I=1,IMT                                                         OOM1F405.607    
          WATERFLUX_ICE(I)=-1.*CARYSALT(I,J)*RHO_WATER_SI*DZ(1)            OOM1F405.608    
     &                               /0.035                                OOM1F405.609    
          WATERFLUX_ICEP(I)=-1.*CARYSALT(I,J+1)                            OOM1F405.610    
     &          *RHO_WATER_SI*DZ(1)/0.035                                  OOM1F405.611    
        ENDDO                                                              OOM1F405.612    
        ELSE                                                               OOM1F405.613    
        DO I=1,IMT                                                         OOM1F405.614    
          WATERFLUX_ICE(I)=0.0                                             OOM1F405.615    
          WATERFLUX_ICEP(I)=0.0                                            OOM1F405.616    
        ENDDO                                                              OOM1F405.617    
        ENDIF                                                              OOM1F405.618    
                                                                           ORH1F305.2171   
                                                                           ORH1F305.2172   
                                                                           ORH1F305.2173   
      ! Populate the appropriate arrays with data obtained from            ORH1F305.2174   
      ! UPANCIL                                                            ORH1F305.2175   
      IF (L_OMIXLAY) THEN                                                  ORH1F305.2176   
         DO I = 1, IMT                                                     ORH1F305.2177   
            WME(I) = ZDUM_OR_WME(I)                                        ORH1F305.2178   
         ENDDO                                                             ORH1F305.2179   
      ENDIF                                                                ORH1F305.2180   
                                                                           ORH1F305.2181   
      IF (L_OSOLAR.OR.L_OSOLARAL) THEN                                     ORH1F305.2182   
         DO I = 1, IMT                                                     ORH1F305.2183   
            SOL(I) = ZDUM_OR_SOL(I)                                        ORH1F305.2184   
         ENDDO                                                             ORH1F305.2185   
      ENDIF                                                                ORH1F305.2186   
                                                                           ORH1F305.2187   
      IF (L_SEAICE) THEN                                                   ORH1F305.2188   
         DO I = 1, IMT                                                     ORH1F305.2189   
            SNOWRATE(I) = ZDUM_OR_SNOWRATE(I)                              ORH1F305.2190   
         ENDDO                                                             ORH1F305.2191   
      ENDIF                                                                ORH1F305.2192   
                                                                           ORH1F305.2193   
      IF (L_OMIXLAY) THEN                                                  ORH1F305.2194   
         DO I = 1, IMT                                                     ORH1F305.2195   
            WME(I) = ZDUM_OR_WME(I)                                        ORH1F305.2196   
         ENDDO                                                             ORH1F305.2197   
      ENDIF                                                                ORH1F305.2198   
                                                                           ORH1F305.2199   
      IF (L_OHANEY.OR.L_OPSEUDIC) THEN                                     ORH1F305.2200   
         DO I = 1, IMT                                                     ORH1F305.2201   
            T_REF(I) = ZDUM_OR_T_REF(I)                                    ORH1F305.2202   
            S_REF(I) = ZDUM_OR_S_REF(I)                                    ORH1F305.2203   
         ENDDO                                                             ORH1F305.2204   
      ENDIF                                                                ORH1F305.2205   
                                                                           ORH1F305.2206   
      IF (L_RIVERS) THEN                                                   ORH1F305.2207   
         DO I = 1, IMT                                                     ORH1F305.2208   
            RIVER(I) = ZDUM_OR_RIVER(I)                                    ORH1F305.2209   
         ENDDO                                                             ORH1F305.2210   
      ENDIF                                                                ORH1F305.2211   
                                                                           ORH1F305.2212   
      IF (L_OSYMM) THEN                                                    ORH1F305.2213   
C                                                                          ROWCALC.675    
C---------------------------------------------------------------------     ROWCALC.676    
C  SET SYMMETRY BOUNDARY CONDITIONS ON LAST ROW                            ROWCALC.677    
C---------------------------------------------------------------------     ROWCALC.678    
C                                                                          ROWCALC.679    
        IF(J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN                                ORH3F402.256    
          DO 335 I=1,IMT                                                   ORH1F305.2215   
            KMTP(I)=FKMP(I,J)                                              ORH1F305.2216   
            KMUP(I)=FKMQ(I,J-1)                                            ORH1F305.2217   
 335      CONTINUE                                                         ORH1F305.2218   
        IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                  OOM3F405.837    
          DO I=1,IMT                                                       OOM3F405.838    
            KMUPP(I)=FKMQ (I,J)                                            OOM3F405.839    
          ENDDO                                                            OOM3F405.840    
        ENDIF  ! L_OBIMOM or L_OBIHARMGM                                   OOM3F405.841    
          DO 336 M=1,NT                                                    ORH1F305.2219   
          DO 336 K=1,KM                                                    ORH1F305.2220   
          DO 336 I=1,IMT                                                   ORH1F305.2221   
            TBP(I,K,M)=TB(I,K,M)                                           ORH1F305.2222   
            T P(I,K,M)=T (I,K,M)                                           ORH1F305.2223   
 336      CONTINUE                                                         ORH1F305.2224   
        ENDIF                                                              ORH1F305.2225   
      ENDIF                                                                ROWCALC.691    
C                                                                          ROWCALC.693    
C---------------------------------------------------------------------     ROWCALC.694    
C  MOVE TAU-1 DATA TO TAU LEVEL ON A MIXING TIMESTEP                       ROWCALC.695    
C---------------------------------------------------------------------     ROWCALC.696    
C                                                                          ROWCALC.697    
      IF(MIX.EQ.1) THEN                                                    ROWCALC.698    
        IF (.NOT.(L_OBIMOM.or.L_OBIHARMGM)) THEN                           OOM3F405.842    
        DO 337 M=1,NT                                                      ROWCALC.699    
        DO 337 K=1,KM                                                      ROWCALC.700    
        DO 337 I=1,IMT                                                     ROWCALC.701    
          TBP(I,K,M)=TP(I,K,M)                                             ROWCALC.702    
 337    CONTINUE                                                           ROWCALC.703    
        DO 338 K=1,KM                                                      ROWCALC.704    
        DO 338 I=1,IMT                                                     ROWCALC.705    
          UBP(I,K)=UP(I,K)                                                 ROWCALC.706    
          VBP(I,K)=VP(I,K)                                                 ROWCALC.707    
 338    CONTINUE                                                           ROWCALC.708    
        ELSE                                                               OOM3F405.843    
           DO M=1,NT                                                       OOM3F405.844    
              DO K=1,KM                                                    OOM3F405.845    
                 DO I=1,IMT                                                OOM3F405.846    
                   TBPP(I,K,M)=TPP(I,K,M)                                  OOM3F405.847    
                 ENDDO                                                     OOM3F405.848    
              ENDDO                                                        OOM3F405.849    
           ENDDO                                                           OOM3F405.850    
           DO K=1,KM                                                       OOM3F405.851    
              DO I=1,IMT                                                   OOM3F405.852    
                UBPP(I,K)=UPP(I,K)                                         OOM3F405.853    
                VBPP(I,K)=VPP(I,K)                                         OOM3F405.854    
              ENDDO                                                        OOM3F405.855    
           ENDDO                                                           OOM3F405.856    
        ENDIF  ! not L_OBIMOM.or.L_OBIHARMGM                               OOM3F405.857    
                                                                           OOM3F405.858    
      ENDIF                                                                ROWCALC.709    
C                                                                          ROWCALC.710    
C---------------------------------------------------------------------     ROWCALC.711    
C  SHIFT MASKS DOWN ONE ROW AND COMPUTE NEW MASKS                          ROWCALC.712    
C---------------------------------------------------------------------     ROWCALC.713    
C                                                                          ROWCALC.714    
      DO 345 K=1,KM                                                        ROWCALC.715    
      DO 345 I=1,IMT                                                       ROWCALC.716    
        FMM(I,K)=FM (I,K)                                                  ROWCALC.717    
        FM (I,K)=FMP(I,K)                                                  ROWCALC.718    
 345  CONTINUE                                                             ROWCALC.719    
                                                                           ORH1F305.2231   
      DO 354 K=1,KM                                                        ROWCALC.730    
      DO 354 I=1,IMT                                                       ROWCALC.731    
        IF(KMTP(I).GE.KAR(K)) THEN                                         ROWCALC.732    
           FMP(I,K)=1.0                                                    ROWCALC.733    
        ELSE                                                               ROWCALC.734    
           FMP(I,K)=0.0                                                    ROWCALC.735    
        ENDIF                                                              ROWCALC.736    
        IF(KMU(I).GE.KAR(K)) THEN                                          ROWCALC.737    
           GM(I,K)=1.0                                                     ROWCALC.738    
        ELSE                                                               ROWCALC.739    
           GM(I,K)=0.0                                                     ROWCALC.740    
        ENDIF                                                              ROWCALC.741    
 354  CONTINUE                                                             ROWCALC.742    
        IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                  OOM3F405.859    
          DO K=1,KM                                                        OOM3F405.860    
            DO I=1,IMT                                                     OOM3F405.861    
              IF(KMTPP(I).GE.KAR(K)) THEN                                  OOM3F405.862    
                FMPP(I,K)=1.0                                              OOM3F405.863    
              ELSE                                                         OOM3F405.864    
                FMPP(I,K)=0.0                                              OOM3F405.865    
              ENDIF                                                        OOM3F405.866    
            ENDDO                                                          OOM3F405.867    
          ENDDO                                                            OOM3F405.868    
        ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                   OOM3F405.869    
                                                                           OOM3F405.870    
                                                                           OOM3F405.871    
C                                                                          ROWCALC.743    
      IF  (L_OBDY_NORTH) THEN                                              OSI1F405.25     
C                                                                          ROWCALC.745    
C "Row JMTM2" velocities are set equal to Row JMTM1 velocities             ROWCALC.746    
C   before the calls to CLINIC and TRACER.                                 ROWCALC.747    
C                                                                          ROWCALC.748    
        IF(J+J_OFFSET.EQ.JMTM2_GLOBAL)THEN                                 ORH3F402.258    
          DO 355 K=1,KM                                                    ORH1F305.2234   
          DO 355 I=1,IMT                                                   ORH1F305.2235   
            UP(I,K)=U(I,K)                                                 ORH1F305.2236   
            VP(I,K)=V(I,K)                                                 ORH1F305.2237   
            UBP(I,K)=UB(I,K)                                               ORH1F305.2238   
            VBP(I,K)=VB(I,K)                                               ORH1F305.2239   
  355     CONTINUE                                                         ORH1F305.2240   
        ENDIF                                                              ORH1F305.2241   
      ENDIF  ! L_OBDY_NORTH = true                                         OSI1F405.26     
      IF (L_OBDY_NORTH.AND.(J+J_OFFSET.EQ.JMTM1_GLOBAL)) THEN              OSI1F405.27     
        DO K = 1, KM                                                       OSI1F405.28     
          DO I = 1, IMT                                                    OSI1F405.29     
            FMP(I,K)=FM(I,K)                                               OSI1F405.30     
          ENDDO                                                            OSI1F405.31     
        ENDDO                                                              OSI1F405.32     
      ENDIF                                                                OSI1F405.33     
                                                                           ORH1F305.2246   
      IF (L_SEAICE) THEN                                                   ORH1F305.2247   
         IF (L_ICEFREEDR.AND.L_OMIXLAY) THEN                               ODC1F405.399    
C---------------------------------------------------------------------     JT161193.298    
C  Calculate wind mixing energy under sea ice for dynamic ice model        JT161193.299    
C  - no longer contains keel stirring term                                 ORH0F400.30     
C---------------------------------------------------------------------     JT161193.300    
C                                                                          JT161193.301    
            do i=1,imt                                                     ORH1F305.2249   
                   wme_ice(i) = wme(i)                                     ORH1F305.2254   
            end do                                                         ORH1F305.2256   
                                                                           ORH1F305.2257   
            IF (L_OCYCLIC) THEN                                            ORH1F305.2258   
                wme_ice(1)   = wme_ice(imtm1)                              ORH1F305.2259   
                wme_ice(imt) = wme_ice(2)                                  ORH1F305.2260   
            ENDIF                                                          ORH1F305.2261   
C                                                                          JT161193.314    
         ENDIF                                                             ORH1F305.2262   
      ENDIF                                                                ORH1F305.2263   
C---------------------------------------------------------------------     ROWCALC.768    
C  CALL THE MAIN COMPUTATIONAL ROUTINES TO UPDATE THE ROW                  ROWCALC.769    
C---------------------------------------------------------------------     ROWCALC.770    
C                                                                          ROWCALC.771    
C                                                                          OOM1F405.619    
      IF (L_OFULARGE) THEN                                                 OOM1F405.620    
C CALCULATE MLD_LARGE, MLD_LARGEP ON TRACER GRID                           OOM1F405.621    
C                                                                          OOM1F405.622    
      CALL STATED(TB(1,1,1),TB(1,1,2),RHO,WORKA,WORKB,IMT,KM               OOM1F405.623    
     &  ,J,KM,JMT                                                          OOM1F405.624    
     & )                                                                   OOM1F405.625    
      CALL STATED(TBP(1,1,1),TBP(1,1,2),RHOP,WORKA,WORKB,IMT,KM            OOM1F405.626    
     &  ,J,KM,JMT                                                          OOM1F405.627    
     & )                                                                   OOM1F405.628    
C                                                                          OOM1F405.629    
      IF (L_OBULKRI) THEN                                                  OOM1F405.630    
      CALL CALC_MLD_LARGEB(J,KM,IMT,NT                                     OOM1F405.631    
     &, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI,CRIT_RI_FL                   OOM1F405.632    
     &, ZDZ,DZ,ZDZZ,DZZ,L_OCYCLIC,L_SEAICE                                 OOM1F405.633    
     &, UB,VB,UBM,VBM,TB,RHO,HTN                                           OOM1F405.634    
     &, PME,WATERFLUX_ICE,SOL,WME                                          OOM1F405.635    
     &, OCEANHEATFLUX(1,J),CARYHEAT(1,J),FLXTOICE(1,J)                     OOM1F405.636    
     &, FM,MLD_LARGE,RIMLDCALC                                             OOM1F405.637    
     &  )                                                                  OOM1F405.638    
      CALL CALC_MLD_LARGEB(J,KM,IMT,NT                                     OOM1F405.639    
     &, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI,CRIT_RI_FL                   OOM1F405.640    
     &, ZDZ,DZ,ZDZZ,DZZ,L_OCYCLIC,L_SEAICE                                 OOM1F405.641    
     &, UBP,VBP,UB,VB,TBP,RHOP,HTNP                                        OOM1F405.642    
     &, PMEP,WATERFLUX_ICEP,SOLP,WMEP                                      OOM1F405.643    
     &, OCEANHEATFLUX(1,J+1),CARYHEAT(1,J+1),FLXTOICE(1,J+1)               OOM1F405.644    
     &, FMP,MLD_LARGEP,RIMLDCALCP                                          OOM1F405.645    
     &  )                                                                  OOM1F405.646    
      ELSE                                                                 OOM1F405.647    
      CALL CALC_MLD_LARGEG(J,KM,IMT                                        OOM1F405.648    
     &, RHO_WATER_SI,GRAV_SI,CRIT_RI_FL,NO_LAYERS_IN_LEV                   OOM1F405.649    
     &, ZDZ,DZ,DZZ,L_OCYCLIC                                               OOM1F405.650    
     &, UB,VB,UBM,VBM                                                      OOM1F405.651    
     &, FM,RHO,MLD_LARGE,RIMLDCALC                                         OOM1F405.652    
     &  )                                                                  OOM1F405.653    
      CALL CALC_MLD_LARGEG(J,KM,IMT                                        OOM1F405.654    
     &, RHO_WATER_SI,GRAV_SI,CRIT_RI_FL,NO_LAYERS_IN_LEV                   OOM1F405.655    
     &, ZDZ,DZ,DZZ,L_OCYCLIC                                               OOM1F405.656    
     &, UBP,VBP,UB,VB                                                      OOM1F405.657    
     &, FMP,RHOP,MLD_LARGEP,RIMLDCALCP                                     OOM1F405.658    
     &  )                                                                  OOM1F405.659    
      ENDIF                                                                OOM1F405.660    
      ENDIF      !L_OFULARGE                                               OOM1F405.661    
C                                                                          OOM1F405.662    
      IF (L_ICEFREEDR.OR.L_ICESIMPLE) THEN                                 ODC1F405.407    
                                                                           ORH3F403.44     
!----------------------------------------------------------------------    ORH3F403.45     
! STORE SURFACE CURRENTS FOR USE BY DYNAMIC SEA ICE MODEL                  ORH3F403.46     
!----------------------------------------------------------------------    ORH3F403.47     
! The following was previously coded as                                    ORH3F403.48     
! UCURRENT(I,J+1) = 1.0*UP(I,1)/100 etc immediately after call to          ORH3F403.49     
! CLINIC - changed J dependencies for parallelisation.                     ORH3F403.50     
                                                                           ORH3F403.51     
           IF (J+J_OFFSET.LT.JMT_GLOBAL) THEN                              ORH3F403.52     
             DO I=1,IMT                                                    ORH3F403.53     
               UCURRENT(I,J) = 1.0*U(I,1)/100.                             ORH3F403.54     
               VCURRENT(I,J) = 1.0*V(I,1)/100.                             ORH3F403.55     
             END DO                                                        ORH3F403.56     
           ENDIF                                                           ORH3F403.57     
      ENDIF                                                                ORH3F403.59     
      IF (SFRC) THEN                                                       OJC2F400.120    
        DO K=1,KM                                                          OJC2F400.121    
        DO I=1,IMT_STASH                                                   OJC2F400.122    
          DTRC(I,J,K)=TB(I,K,1)                                            OJC2F400.123    
        ENDDO                                                              OJC2F400.124    
        ENDDO                                                              OJC2F400.125    
      ENDIF                                                                OJC2F400.126    
C                                                                          OJC2F400.127    
      IF (SFUTOT) THEN                                                     OJG5F401.8      
        DO K=1,KM                                                          OJG5F401.9      
        DO I=1,IMT_STASH                                                   OJG5F401.10     
          UTOT(I,J,K)=U(I,K)                                               OJG5F401.11     
        ENDDO                                                              OJG5F401.12     
        ENDDO                                                              OJG5F401.13     
      ENDIF                                                                OJG5F401.14     
      IF (SFVTOT) THEN                                                     OJG5F401.15     
        DO K=1,KM                                                          OJG5F401.16     
        DO I=1,IMT_STASH                                                   OJG5F401.17     
          VTOT(I,J,K)=V(I,K)                                               OJG5F401.18     
        ENDDO                                                              OJG5F401.19     
        ENDDO                                                              OJG5F401.20     
      ENDIF                                                                OJG5F401.21     
      IF (SFTemp) THEN                                                     OMB1F404.138    
        CALL STATE_T(T(1,1,1),T(1,1,2),Temp_row,                           OMB1F404.139    
     &           TWORK,SWORK,IMT,KM                                        OMB1F404.140    
     &,          J,JMT                                                     OMB1F404.141    
     &)                                                                    OMB1F404.142    
                                                                           OMB1F404.143    
        DO K=1,KM                                                          OMB1F404.144    
        DO I=1,IMT_STASH                                                   OMB1F404.145    
          Temperature(I,J,K)=Temp_row(I,K)                                 OMB1F404.146    
        ENDDO                                                              OMB1F404.147    
        ENDDO                                                              OMB1F404.148    
                                                                           OMB1F404.149    
      ENDIF ! SFTemp                                                       OMB1F404.150    
                                                                           OMB1F404.151    
        ENDIF ! If we have something to do for this row                    ORH1F403.39     
      IF (L_SEAICE.AND.L_ICEFREEDR) THEN                                   ODC1F405.400    
          J_idr = J                                                        ODC1F405.401    
          J_idrM1 = J-1                                                    ODC1F405.402    
      ELSE                                                                 ORH1F305.2266   
          J_idr = 1                                                        ODC1F405.403    
          J_idrM1 = 1                                                      ODC1F405.404    
      ENDIF                                                                ORH1F305.2268   
                                                                           ORH1F305.2269   
                                                                           ORH1F403.40     
      ! Using MIN operations in setting pointers for J+1                   OOM1F405.663    
      ! elements ensures we never go out of bounds even                    OOM1F405.664    
      ! when some PEs deal with irregular numbers of rows                  OOM1F405.665    
      ! in MPP decompositions.                                             OOM1F405.666    
      J_P1 = MIN(J+1,JMT)                                                  OOM1F405.667    
                                                                           OOM1F405.668    
      ! Set up pointers for ice model related arrays                       OOM1F405.669    
      IF (L_SEAICE) THEN                                                   OOM1F405.670    
          J_ICE   = MIN(J,JMT)                                             OOM1F405.671    
          J_ICEP1 = MIN(J + 1,JMT)                                         OOM1F405.672    
          IF (L_IHANEY) THEN                                               OOM1F405.673    
              J_IHY = J                                                    OOM1F405.674    
          ELSE                                                             OOM1F405.675    
              J_IHY = 1                                                    OOM1F405.676    
          ENDIF                                                            OOM1F405.677    
      ELSE                                                                 OOM1F405.678    
          J_ICE   = 1                                                      OOM1F405.679    
          J_ICEP1 = 1                                                      OOM1F405.680    
          J_IHY   = 1                                                      OOM1F405.681    
      ENDIF                                                                OOM1F405.682    
                                                                           OOM1F405.683    
                                                                           ORH1F305.2271   
         CALL CLINIC(                                                      ORH1F305.2272   
*CALL ARGSIZE                                                              @DYALLOC.4319   
*CALL ARGOCALL                                                             @DYALLOC.4320   
*CALL ARGOINDX                                                             ORH7F402.285    
     & J,                                                                  @DYALLOC.4321   
*CALL COCAROWS                                                             ROWCALC.774    
     &,                                                                    @DYALLOC.4322   
*CALL COCAWRKA                                                             ROWCALC.775    
     +,RHOSRN,RHOSRNA,RHOSRNB                                              OOM1F405.687    
     +,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP                                 ROWCALC.781    
     &,sf285_30                                                            OFRAF404.64     
     &,ISX(1,J_idr),ISY(1,J_idr)                                           ODC1F405.405    
     &,WSX_LEADS(1,J_idr),WSY_LEADS(1,J_idr)                               ODC1F405.406    
     &,IMT_GNU,KM_GNU,IMU_GNUZ,KM_GNUZ                                     ORH1F305.2275   
     &,IMT_idr                                                             ORH1F405.474    
     &,gnum,Rim,hm,IMT_QLARGE                                              OLA3F403.229    
     &,L_M,MLD_LARGE,MLD_LARGEP,WATERFLUX_ICE,LAMBDA_LARGE                 OOM1F405.684    
     &,HTNP,PMEP,WATERFLUX_ICEP,SOLP,WMEP                                  OOM1F405.685    
     &,L_OWINDMIX,L_OBULKMAXMLD                                            OOM1F405.686    
     &,OCEANHEATFLUX(1,J),OCEANHEATFLUX(1,J_P1)                            OOM1F405.688    
     &,CARYHEAT(1,J_ICE),CARYHEAT(1,J_ICEP1)                               OOM1F405.689    
     &,FLXTOICE(1,J_ICE),FLXTOICE(1,J_ICEP1) )                             OOM1F405.690    
C                                                                          ROWCALC.785    
        IF (J.GE.J_FROM_COMP.AND.J.LE.J_TO_COMP) THEN                      ORH1F403.41     
                                                                           ORH1F403.42     
                                                                           ORH1F305.2278   
                                                                           ORH1F305.2289   
      IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN                     ORL1F404.851    
C                                                                          JG170893.122    
C     Save baroclinic acceleration diagnostics                             JG170893.123    
C                                                                          JG170893.124    
      IF (SF_ZN(1)) THEN                                                   JG170893.125    
        DO I=1,SWNCOL                                                      JG170893.126    
          SWZUN(I,J) = ZU(I,J)/C2DTSF                                      OJG2F400.2      
        ENDDO                                                              JG170893.128    
      ENDIF                                                                JG170893.129    
      IF (SF_ZN(2)) THEN                                                   JG170893.130    
        DO I=1,SWNCOL                                                      JG170893.131    
          SWZVN(I,J) = ZV(I,J)/C2DTSF                                      OJG2F400.3      
        ENDDO                                                              JG170893.133    
      ENDIF                                                                JG170893.134    
      ENDIF                                                                ORH1F305.2299   
        ENDIF ! If we have something to do for this row                    ORH1F403.43     
                                                                           ORH1F403.44     
                                                                           ORH1F305.2300   
                                                                           ORH1F305.2312   
      IF (L_FLUXCORR) THEN                                                 ORH1F305.2313   
          J_FLUX = J                                                       ORH1F305.2314   
      ELSE                                                                 ORH1F305.2315   
          J_FLUX = 1                                                       ORH1F305.2316   
      ENDIF                                                                ORH1F305.2317   
      IF (L_OCARBON) THEN                                                  OCN1F405.10     
!  set up row of CO2 data. Either get values of varying field              OCN1F405.11     
!  from D1, or fill with constant value from PCO2_ATM                      OCN1F405.12     
         IF (L_CO2O_INTERACTIVE) THEN                                      OCN1F405.13     
            DO I=1,IMT                                                     OCN1F405.14     
               ATMPCO2_ROW(I)=D1(joc_atmco2 + (J-1)*IMT + I-1)             OCN1F405.15     
            ENDDO                                                          OCN1F405.16     
         ELSE                                                              OCN1F405.17     
            DO I=1,IMT                                                     OCN1F405.18     
               ATMPCO2_ROW(I)=PCO2_ATM                                     OCN1F405.19     
            ENDDO                                                          OCN1F405.20     
         ENDIF                                                             OCN1F405.21     
      ENDIF  ! If L_OCARBON                                                OCN1F405.22     
                                                                           ORH1F305.2318   
      CALL TRACER(                                                         @DYALLOC.4328   
*CALL ARGSIZE                                                              @DYALLOC.4329   
*CALL ARGOCALL                                                             @DYALLOC.4330   
*CALL ARGOINDX                                                             ORH7F402.286    
     & J,                                                                  @DYALLOC.4331   
     & AICE(1,J_ICE),HICE(1,J_ICE),HSNOW(1,J_ICE),                         ORH1F305.2319   
     & HICE_REF(1,J_IHY),                                                  ORH1F305.2320   
     & CARYHEAT(1,J_ICE),CARYSALT(1,J_ICE),                                ORH1F305.2321   
     & ICY(1,J_ICE),FLXTOICE(1,J_ICE),                                     ORH1F305.2322   
     & SURFTEMP(1,J_ICE),SURFSAL(1,J_ICE),NEWICE(1,J_ICE),                 ORH1F305.2323   
     & OCEANHEATFLUX(1,J_ICE),OCEANSNOWRATE(1,J_ICE),                      OJC2F400.128    
     & WME_ICE,                                                            JT161193.329    
*CALL COCAROWS                                                             ROWCALC.823    
     &,                                                                    @DYALLOC.4332   
*CALL COCAWRKA                                                             ROWCALC.824    
     &,fluxcorh(1,J_FLUX),fluxcorw(1,J_FLUX)                               ORH1F305.2324   
     +,HEATSINK(1,J)                                                       OJG0F401.1      
     &,anom_heat,anom_salt                                                 ORH1F305.2325   
     &,anomiceh(1,j_IHY)                                                   ORH1F305.2326   
     +,DIAGSW                                                              OJG1F400.14     
     &,WSXM,WSYM                                                           OLA3F403.230    
     &,ISX(1,J_idr),ISY(1,J_idr),WSX_LEADS(1,J_idr)                        ODC1F405.409    
     &,WSY_LEADS(1,J_idr),ISX(1,J_idrM1),ISY(1,J_idrM1)                    ODC1F405.410    
     &,WSX_LEADS(1,J_idrM1),WSY_LEADS(1,J_idrM1)                           ODC1F405.411    
     &,gnuT,RiT,hT                                                         OLA3F403.231    
     &,L_T,MLD_LARGE,WATERFLUX_ICE,L_OWINDMIX                              OOM1F405.691    
     &,L_OBULKMAXMLD,LAMBDA_LARGE                                          OOM1F405.692    
     &,SWNCOL,DTXADV,DTYADV,DTZADV,DTXDIFF,DTYDIFF,DTZDIFF                 JG170893.137    
     &,DTSFC,DTPEN,DTICE,DTMIX,DTCNVC,DTZ,DTFF,DTMED,SF_DT                 JG170893.138    
     &,dsxadv,dsyadv,dszadv,dsxdiff,dsydiff,dszdiff                        OJG2F401.268    
     &,dssfc,dsice,dsmix,dscnvc,dsz,dsff,dsmed,sf_ds                       OJG2F401.269    
     &,swrk_bio(si_bio(1)),swrk_bio(si_bio(2)),swrk_bio(si_bio(3))         ORH3F405.52     
     &,swrk_bio(si_bio(4)),swrk_bio(si_bio(5)),swrk_bio(si_bio(6))         ORH3F405.53     
     &,swrk_bio(si_bio(7)),swrk_bio(si_bio(8)),swrk_bio(si_bio(9))         ORH3F405.54     
     &,swrk_bio(si_bio(10)),swrk_bio(si_bio(11)),swrk_bio(si_bio(12))      ORH3F405.55     
     &,swrk_bio(si_bio(13)),swrk_bio(si_bio(14)),swrk_bio(si_bio(15))      ORH3F405.56     
     &,swrk_bio(si_bio(16)),swrk_bio(si_bio(17)),swrk_bio(si_bio(18))      ORH3F405.57     
     &,swrk_bio(si_bio(19)),swrk_bio(si_bio(20)),swrk_bio(si_bio(21))      ORH3F405.58     
     &,swrk_bio(si_bio(22)),swrk_bio(si_bio(23)),swrk_bio(si_bio(24))      ORH3F405.59     
     &,swrk_bio(si_bio(25)),swrk_bio(si_bio(26)),swrk_bio(si_bio(27))      ORH3F405.60     
     &,sf_bio                                                              ORH3F405.61     
     &,DIAG_MLD                                                            ORH1F305.2337   
     &,PCO2,CO2_FLUX,PCO2_ATM     ! Required for carbon cycle model        ORH1F305.2338   
     &,ATMPCO2_ROW                                                         OCN1F405.23     
     &,c14to12_atm                !required for carbon-14                  ORH1F305.2339   
     &,INVADE,EVADE                                                        ORH1F305.2340   
     &,VTCO2_FLUX,VALK_FLUX                                                OJP0F404.927    
     &,RHOSRN,RHOSRNA,RHOSRNB                                              OOM1F405.693    
     &,tmin2                                                               OLA2F403.304    
     &,esav,rxp,ry,rrzp                                                    ORH1F305.2342   
     &,drhob1p,drhob2p                                                     OLA0F401.209    
     &,UISOP,VISOPN,VISOPS,WISOP,DTGM,DSGM                                 OJG2F404.86     
     &,athkdftu,athkdftv,FTARR                                             ORH1F405.508    
     &,IMT_IPD_NOMIX     ! For dynamic allocation                          ORH1F405.509    
                                                                           ORH1F405.510    
     &,ATTEND,HUDTEND                                                      OOM2F405.286    
                                                                           OOM2F405.287    
     &,adv_vetiso,adv_vbtiso,times,srho                                    OOM1F405.90     
                                                                           OOM1F405.91     
     & )                                                                   ROWCALC.843    
C                                                                          ROWCALC.844    
        IF (J.GE.J_FROM_COMP.AND.J.LE.J_TO_COMP) THEN                      ORH1F403.45     
       if ((L_OISOPYCGM.AND.L_OVISBECK).or.(L_OISOGM.AND.L_OVISBECK))      OOM1F405.92     
     &    THEN                                                             OOM1F405.93     
c Save time scale tmin1 so isopycnal thickness diffusion coeff.            OLA2F403.307    
c can be calculated for Visbeck scheme                                     OLA2F403.308    
          if (.NOT.L_OVISHADCM4) then                                      OOM1F405.94     
           do i=1,imt                                                      OLA2F403.309    
             tmin1(i,j)=sqrt(tmin2(i))                                     OLA2F403.310    
           enddo                                                           OLA2F403.311    
          else                                                             OOM1F405.95     
            do i=1,imt                                                     OOM1F405.96     
              tmin1(i,j)=times(i)                                          OOM1F405.97     
            enddo                                                          OOM1F405.98     
          endif                                                            OOM1F405.99     
         endif                                                             OLA2F403.312    
       ! Now resume the code as normal.                                    ORH1F405.475    
       IF (J.GE.J_2.AND.J.LE.J_JMTM1) THEN                                 ORH1F405.476    
                                                                           ORH1F405.477    
          IF (L_OSYMM.OR.(J+J_OFFSET.NE.JMTM1_GLOBAL)) THEN                ORH1F405.478    
                                                                           ORH1F405.479    
                                                                           ORH1F405.480    
             IF (L_OCYCLIC) THEN                                           ORH1F405.481    
C---------------------------------------------------------------------     ORH1F405.482    
C  SET CYCLIC BOUNDARY CONDITIONS ON NEWLY COMPUTED INTERNAL MODE          ORH1F405.483    
C---------------------------------------------------------------------     ORH1F405.484    
                DO K=1,KM                                                  ORH1F405.485    
                   UA(1,K)=UA(IMUM1,K)                                     ORH1F405.486    
                   VA(1,K)=VA(IMUM1,K)                                     ORH1F405.487    
                   UA(IMU,K)=UA(2,K)                                       ORH1F405.488    
                   VA(IMU,K)=VA(2,K)                                       ORH1F405.489    
                ENDDO                                                      ORH1F405.490    
             ENDIF                                                         ORH1F405.491    
                                                                           ORH1F405.492    
             IF (L_OSYMM) THEN                                             ORH1F405.493    
C---------------------------------------------------------------------     ORH1F405.494    
C  SET MERIDIONAL COMPONENT OF INTERNAL MODE TO ZERO ON SYMMETRY ROW       ORH1F405.495    
C---------------------------------------------------------------------     ORH1F405.496    
                IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN                       ORH1F405.497    
                   FX=0.0                                                  ORH1F405.498    
                   DO K=1,KM                                               ORH1F405.499    
                      DO I=1,IMT                                           ORH1F405.500    
                         VA(I,K)=FX                                        ORH1F405.501    
                      ENDDO                                                ORH1F405.502    
                   ENDDO                                                   ORH1F405.503    
                ENDIF                                                      ORH1F405.504    
             ENDIF                                                         ORH1F405.505    
          ENDIF                                                            ORH1F405.506    
       ENDIF                                                               ORH1F405.507    
       IF  (L_OBDY_NORTH) THEN                                             OSI1F405.34     
C                                                                          ROWCALC.846    
C                                                                          ORH1F405.511    
C  Save UA and VA for Row JMTM2                                            ORH1F405.512    
C                                                                          ORH1F405.513    
        IF (J+J_OFFSET.EQ.JMTM2_GLOBAL) THEN                               ORH1F405.514    
           DO K=1,KM                                                       ORH1F405.515    
              DO I=1,IMT                                                   ORH1F405.516    
                 UAM2(I,K)=UA(I,K)                                         ORH1F405.517    
                 VAM2(I,K)=VA(I,K)                                         ORH1F405.518    
              ENDDO                                                        ORH1F405.519    
           ENDDO                                                           ORH1F405.520    
        ENDIF                                                              ORH1F405.521    
C  Enter UA,VA at JMTM2 as UA,VA at JMTM1                                  ROWCALC.847    
C                                                                          ROWCALC.848    
        IF(J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN                                ORH3F402.263    
          DO 357 K=1,KM                                                    ORH1F305.2346   
          DO 357 I=1,IMT                                                   ORH1F305.2347   
            UA(I,K)=UAM2(I,K)                                              ORH1F305.2348   
            VA(I,K)=VAM2(I,K)                                              ORH1F305.2349   
  357     CONTINUE                                                         ORH1F305.2350   
        ENDIF                                                              ORH1F305.2351   
      ENDIF                                                                ROWCALC.855    
C                                                                          ROWCALC.857    
C-----------------------------------------------------------------------   ROWCALC.858    
C Copy velocities at base of model levels to STASH workspace               ROWCALC.859    
C-----------------------------------------------------------------------   ROWCALC.860    
C                                                                          ROWCALC.861    
      IF (sf201_30) THEN                                                   ROWCALC.862    
        DO K=2,KM                                                          ROWCALC.863    
          DO I=IFROM_CYC,ICOL_CYC                                          ORH1F305.2352   
            sw201_30(I,J,K-1)=W(I,K)*FM(I,K)+(1.0-FM(I,K))*RMDI            ROWCALC.870    
          END DO                                                           ROWCALC.871    
          IF (L_OCYCLIC) THEN                                              ORH1F305.2353   
              sw201_30(1,J,K-1)=W(IMTM1,K)*FM(IMTM1,K)+                    ORH1F305.2354   
     *                                    (1.0-FM(IMTM1,K))*RMDI           ROWCALC.874    
          ENDIF                                                            ORH1F305.2355   
        END DO                                                             ROWCALC.876    
      END IF                                                               ROWCALC.877    
C                                                                          ROWCALC.878    
                                                                           OLA3F403.232    
c put the 2d values from gnum,gnuT,Rim,RiT into the output                 OLA3F403.233    
c (3d) variables gnum_OUT,gnuT_OUT,Rim_OUT,RiT_OUT                         OLA3F403.234    
      IF (SF_gnum) THEN                                                    OLA3F403.235    
        do k=1,kmm1                                                        OLA3F403.236    
          do i=1,swncol                                                    OLA3F403.237    
            gnum_OUT(i,j,k)=gnum(i,k)                                      OLA3F403.238    
          enddo                                                            OLA3F403.239    
        enddo                                                              OLA3F403.240    
      END IF                                                               OLA3F403.241    
      IF (SF_gnuT) THEN                                                    OLA3F403.242    
        do k=1,kmm1                                                        OLA3F403.243    
          do i=1,swncol                                                    OLA3F403.244    
            gnuT_OUT(i,j,k)=gnuT(i,k)                                      OLA3F403.245    
          enddo                                                            OLA3F403.246    
        enddo                                                              OLA3F403.247    
      END IF                                                               OLA3F403.248    
      IF (SF_Rim) THEN                                                     OLA3F403.249    
        do k=1,kmm1                                                        OLA3F403.250    
          do i=1,swncol                                                    OLA3F403.251    
            Rim_OUT(i,j,k)=Rim(i,k)                                        OLA3F403.252    
          enddo                                                            OLA3F403.253    
        enddo                                                              OLA3F403.254    
      END IF                                                               OLA3F403.255    
      IF (SF_RiT) THEN                                                     OLA3F403.256    
        do k=1,kmm1                                                        OLA3F403.257    
          do i=1,swncol                                                    OLA3F403.258    
            RiT_OUT(i,j,k)=RiT(i,k)                                        OLA3F403.259    
          enddo                                                            OLA3F403.260    
        enddo                                                              OLA3F403.261    
      END IF                                                               OLA3F403.262    
                                                                           OLA3F403.263    
c For the quadratic Large scheme, put the 2d values from hm,hT into        OLA3F403.264    
c the output (3d) variables hm_OUT,hT_OUT                                  OLA3F403.265    
      IF (SF_hm) THEN                                                      OLA3F403.266    
        do i=1,swncol                                                      OLA3F403.267    
          hm_OUT(i,j)=hm(i)                                                OLA3F403.268    
        enddo                                                              OLA3F403.269    
      END IF                                                               OLA3F403.270    
      IF (SF_hT) THEN                                                      OLA3F403.271    
        do i=1,swncol                                                      OLA3F403.272    
          hT_OUT(i,j)=hT(i)                                                OLA3F403.273    
        enddo                                                              OLA3F403.274    
      END IF                                                               OLA3F403.275    
C PUT THE 2D VALUES FROM L_T,L_M,RIMLDCALC INTO THE OUTPUT                 OOM1F405.694    
C (3D) VARIABLES LM_OUT,LT_OUT,RIMLDCALC_OUT                               OOM1F405.695    
      IF (SF_LM) THEN                                                      OOM1F405.696    
        DO I=1,IMT_STASH                                                   OOM1F405.697    
          LM_OUT(I,J)=L_M(I)*0.01                                          OOM1F405.698    
        ENDDO                                                              OOM1F405.699    
      END IF                                                               OOM1F405.700    
      IF (SF_LT) THEN                                                      OOM1F405.701    
        DO I=1,IMT_STASH                                                   OOM1F405.702    
          LT_OUT(I,J)=L_T(I)*0.01                                          OOM1F405.703    
        ENDDO                                                              OOM1F405.704    
      END IF                                                               OOM1F405.705    
      IF (SF_MLDCALC) THEN                                                 OOM1F405.706    
        DO K=1,KMM1                                                        OOM1F405.707    
          DO I=1,IMT_STASH                                                 OOM1F405.708    
            RIMLDCALC_OUT(I,J,K)=RIMLDCALC(I,K)                            OOM1F405.709    
          ENDDO                                                            OOM1F405.710    
        ENDDO                                                              OOM1F405.711    
      ENDIF                                                                OOM1F405.712    
C Put the 2d values from UISOP,VISOPN,WISOP,DTGM,DSGM into the output      OJG2F404.87     
C (3d) variables UISOP_OUT,VISOPN_OUT,WISOP_OUT,DTGM_OUT,DSGM_OUT          OJG2F404.88     
                                                                           OLA0F401.213    
      IF (SF_UISOP) THEN                                                   OLA0F401.214    
        IF (L_OISOGM) THEN                                                 OOM1F405.100    
          do k=1,km                                                        OOM1F405.101    
            do i=1,swncol                                                  OOM1F405.102    
              UISOP_OUT(i,j,k)=adv_vetiso(i,k)                             OOM1F405.103    
            enddo                                                          OOM1F405.104    
          enddo                                                            OOM1F405.105    
        ELSE                                                               OOM1F405.106    
        do k=1,km                                                          OLA0F401.215    
          do i=1,swncol                                                    OLA0F401.216    
            UISOP_OUT(i,j,k)=UISOP(i,k)                                    OLA0F401.217    
          enddo                                                            OLA0F401.218    
        enddo                                                              OLA0F401.219    
        ENDIF                                                              OOM1F405.107    
      END IF                                                               OLA0F401.220    
                                                                           OLA0F401.221    
      IF (SF_VISOP) THEN                                                   OLA0F401.222    
        IF (L_OISOGM) THEN                                                 OOM1F405.108    
          do k=1,km                                                        OOM1F405.109    
            do i=1,swncol                                                  OOM1F405.110    
              VISOPN_OUT(i,j,k)=adv_vntiso(i,k,1)                          OOM1F405.111    
            enddo                                                          OOM1F405.112    
          enddo                                                            OOM1F405.113    
        ELSE                                                               OOM1F405.114    
        do k=1,km                                                          OLA0F401.223    
          do i=1,swncol                                                    OLA0F401.224    
            VISOPN_OUT(i,j,k)=VISOPN(i,k)                                  OLA0F401.225    
          enddo                                                            OLA0F401.226    
        enddo                                                              OLA0F401.227    
        ENDIF                                                              OOM1F405.115    
      END IF                                                               OLA0F401.228    
                                                                           OLA0F401.229    
      IF (SF_WISOP) THEN                                                   OLA0F401.230    
        IF (L_OISOGM) THEN                                                 OOM1F405.116    
          do k=1,km-1                                                      OOM1F405.117    
            do i=1,swncol                                                  OOM1F405.118    
              WISOP_OUT(i,j,k)=adv_vbtiso(i,k)                             OOM1F405.119    
            enddo                                                          OOM1F405.120    
          enddo                                                            OOM1F405.121    
        ELSE                                                               OOM1F405.122    
        do k=1,km-1                                                        OLA0F401.231    
          do i=1,swncol                                                    OLA0F401.232    
            WISOP_OUT(i,j,k)=WISOP(i,k+1)                                  OLA0F401.233    
          enddo                                                            OLA0F401.234    
        enddo                                                              OLA0F401.235    
        ENDIF                                                              OOM1F405.123    
      END IF                                                               OLA0F401.236    
                                                                           OLA0F401.237    
      IF (SF_DTGM) THEN                                                    OLA0F401.238    
        do k=1,km                                                          OLA0F401.239    
          do i=1,swncol                                                    OLA0F401.240    
            DTGM_OUT(i,j,k)=DTGM(i,k)                                      OLA0F401.241    
          enddo                                                            OLA0F401.242    
        enddo                                                              OLA0F401.243    
      END IF                                                               OLA0F401.244    
                                                                           OJG2F404.89     
      IF (SF_DSGM) THEN                                                    OJG2F404.90     
        do k=1,km                                                          OJG2F404.91     
          do i=1,swncol                                                    OJG2F404.92     
            DSGM_OUT(i,j,k)=DSGM(i,k)                                      OJG2F404.93     
          enddo                                                            OJG2F404.94     
        enddo                                                              OJG2F404.95     
      END IF                                                               OJG2F404.96     
      IF (L_OMIXLAY.AND.(.NOT.(L_OISOPYC))) THEN                           ORH1F305.2356   
C-----------------------------------------------------------------------   ROWCALC.880    
C Copy mixed layer depth to STASH workspace. If isopycnal diffusion        ROWCALC.881    
C scheme (option L) is called then mixed layer depth is a prognostic       ROWCALC.882    
C variable and should be diagnosed from section 00.                        ROWCALC.883    
C-----------------------------------------------------------------------   ROWCALC.884    
C                                                                          ROWCALC.885    
      IF (sf202_30) THEN                                                   ROWCALC.886    
        DO I=1,ICOL_CYC                                                    ORH1F305.2357   
          sw202_30(I,J)=diag_mld(I)*FM(I,1)+(1.0-FM(I,1))*RMDI             ROWCALC.895    
        END DO                                                             ROWCALC.896    
      END IF                                                               ROWCALC.897    
C                                                                          ROWCALC.898    
      ENDIF                                                                ORH1F305.2358   
                                                                           ORH1F305.2359   
      IF (L_OHANEY) THEN                                                   ORH1F305.2360   
C-----------------------------------------------------------------------   ROWCALC.901    
C Copy anomalous fluxes of heat and salinity to STASH workspace            ROWCALC.902    
C-----------------------------------------------------------------------   ROWCALC.903    
C                                                                          ROWCALC.904    
        IF (sf203_30) THEN                                                 ORH1F305.2361   
          DO I=1,ICOL_CYC                                                  ORH1F305.2362   
            sw203_30(I,J)=anom_heat(I)*FM(I,1)+(1.0-FM(I,1))*RMDI          ORH1F305.2363   
          END DO                                                           ORH1F305.2364   
        END IF                                                             ORH1F305.2365   
C                                                                          ROWCALC.917    
        IF (sf204_30) THEN                                                 ORH1F305.2366   
          DO I=1,ICOL_CYC                                                  ORH1F305.2367   
            sw204_30(I,J)=anom_salt(I)*FM(I,1)+(1.0-FM(I,1))*RMDI          ORH1F305.2368   
          END DO                                                           ORH1F305.2369   
        END IF                                                             ORH1F305.2370   
C                                                                          ROWCALC.930    
      ENDIF                                                                ORH1F305.2371   
      IF (L_SEAICE.AND.L_IHANEY) THEN                                      ORH1F305.2372   
C-----------------------------------------------------------------------   ROWCALC.933    
C Copy anomalous flux of sea ice heat to STASH workspace                   ROWCALC.934    
C workspace                                                                ROWCALC.935    
C-----------------------------------------------------------------------   ROWCALC.936    
C                                                                          ROWCALC.937    
        IF (sf205_30) THEN                                                 ORH1F305.2373   
          DO I=1,ICOL_CYC                                                  ORH1F305.2374   
            sw205_30(I,J)=anomiceh(I,J)*FM(I,1)+(1.0-FM(I,1))*RMDI         ORH1F305.2375   
          END DO                                                           ORH1F305.2376   
        END IF                                                             ORH1F305.2377   
      ENDIF                                                                ORH1F305.2378   
                                                                           ORH1F305.2379   
      IF (L_SEAICE) THEN                                                   ORH1F305.2380   
C                                                                          ROWCALC.952    
C---------------------------------------------------------------------     ROWCALC.953    
C Copy caryheat, the heat flux from ice to ocean due to resetting of       ROWCALC.954    
C ocean level 1 temperatures to -1.8 C, to STASH workspace.                ROWCALC.955    
C---------------------------------------------------------------------     ROWCALC.956    
C                                                                          ROWCALC.957    
        IF (sf208_30) THEN                                                 ORH1F305.2381   
          DO I=1,ICOL_CYC                                                  ORH1F305.2382   
            sw208_30(I,J)= caryheat(I,J)*FM(I,1) + (1.0-FM(I,1))*RMDI      ORH1F305.2383   
          END DO                                                           ORH1F305.2384   
        END IF                                                             ORH1F305.2385   
      ENDIF                                                                ORH1F305.2386   
C                                                                          ROWCALC.971    
      IF (L_OCARBON) THEN                                                  ORH1F305.2387   
C Copy PCO2 into STASH workspace                                           NT071293.167    
C-----------------------------------------------------------------------   NT071293.168    
C                                                                          NT071293.169    
        IF (sf248_30) THEN                                                 ORH1F305.2388   
          DO I=1,ICOL_CYC                                                  ORH1F305.2389   
            sw248_30(I,J)=PCO2(I)*FM(I,1)+(1.0-FM(I,1))*RMDI               NT071293.177    
          END DO                                                           ORH1F305.2390   
        END IF                                                             ORH1F305.2391   
C                                                                          NT071293.180    
C-----------------------------------------------------------------------   NT071293.181    
C Copy CO2_FLUX into STASH workspace                                       NT071293.182    
C-----------------------------------------------------------------------   NT071293.183    
C                                                                          NT071293.184    
        IF (sf249_30) THEN                                                 ORH1F305.2392   
          DO I=1,ICOL_CYC                                                  ORH1F305.2393   
            sw249_30(I,J)=CO2_FLUX(I)*FM(I,1)+(1.0-FM(I,1))*RMDI           NT071293.192    
          END DO                                                           ORH1F305.2394   
        END IF                                                             ORH1F305.2395   
C                                                                          NT071293.195    
C-----------------------------------------------------------------------   NT071293.196    
C Copy invasion into STASH workspace                                       NT071293.197    
C-----------------------------------------------------------------------   NT071293.198    
C                                                                          NT071293.199    
        IF (sf250_30) THEN                                                 ORH1F305.2396   
          DO I=1,ICOL_CYC                                                  ORH1F305.2397   
            sw250_30(I,J)=invade(I)*FM(I,1)+(1.0-FM(I,1))*RMDI             NT071293.207    
          END DO                                                           ORH1F305.2398   
        END IF                                                             ORH1F305.2399   
C                                                                          NT071293.210    
C-----------------------------------------------------------------------   NT071293.211    
C Copy evasion into STASH workspace                                        NT071293.212    
C-----------------------------------------------------------------------   NT071293.213    
C                                                                          NT071293.214    
        IF (sf251_30) THEN                                                 ORH1F305.2400   
          DO I=1,ICOL_CYC                                                  ORH1F305.2401   
            sw251_30(I,J)=evade(I)*FM(I,1)+(1.0-FM(I,1))*RMDI              NT071293.222    
          END DO                                                           ORH1F305.2402   
        END IF                                                             ORH1F305.2403   
                                                                           OJP0F404.928    
!-----------------------------------------------------------------------   OJP0F404.929    
! Copy Virtual fluxes into STASH workspace                                 OJP0F404.930    
!-----------------------------------------------------------------------   OJP0F404.931    
                                                                           OJP0F404.932    
        IF (sf292_30) THEN                                                 OJP0F404.933    
          DO I=1,ICOL_CYC                                                  OJP0F404.934    
            sw292_30(I,J)=VTCO2_FLUX(I)*FM(I,1)+(1.0-FM(I,1))*RMDI         OJP0F404.935    
          END DO                                                           OJP0F404.936    
        END IF                                                             OJP0F404.937    
        IF (sf293_30) THEN                                                 OJP0F404.938    
          DO I=1,ICOL_CYC                                                  OJP0F404.939    
            sw293_30(I,J)=VALK_FLUX(I)*FM(I,1)+(1.0-FM(I,1))*RMDI          OJP0F404.940    
          END DO                                                           OJP0F404.941    
        END IF                                                             OJP0F404.942    
C                                                                          NT071293.225    
C-----------------------------------------------------------------------   NT071293.226    
C                                                                          NT071293.227    
C-----------------------------------------------------------------------   NT071293.228    
C ACCUMULATE GLOBAL NET FLUX OF CO2 INTO THE OCEAN                         NT071293.229    
C-----------------------------------------------------------------------   NT071293.230    
C                                                                          NT071293.231    
        FX=CS(J)*DYT(J)*1.E-4 /(360.0*24.0*3600.0)                         NT071293.232    
                                                                           ORH1F305.2404   
        DO I=1,ICOL_CYC                                                    ORH1F305.2405   
          co2_tot = co2_tot + FX*DXT(I)*CO2_FLUX(I)*FM(I,1)                ORH1F305.2406   
        ENDDO                                                              ORH1F305.2407   
      ENDIF                                                                ORH1F305.2408   
C                                                                          NT071293.242    
C-----------------------------------------------------------------------   NT071293.243    
C-----------------------------------------------------------------------   ROWCALC.972    
C     TIME FILTER THE TRACERS AND BAROCLINIC VELOCITIES TO PRODUCE         ROWCALC.973    
C     NEW VALUES AT TIME LEVEL TAU. THE UNFILTERED TIME LEVEL TAU          ROWCALC.974    
C     VALUES ON 'DISK' ARE THEN OVERWRITTEN WITH THE NEW SLAB (TF)         ROWCALC.975    
C     Calculate the effective rate of change from filtering temperature    JG170893.139    
C     and store it in stash workspace DTRF if this diagnostic requested    JG170893.140    
C     Similarly for DSRF.                                                  OJG2F401.270    
C-----------------------------------------------------------------------   ROWCALC.976    
C                                                                          ROWCALC.977    
      DO 346 M=1,NT                                                        ROWCALC.978    
      DO 346 K=1,KM                                                        ROWCALC.979    
      DO 346 I=1,IMT                                                       ROWCALC.980    
      TF(I,K,M)=PNU2M*T(I,K,M)+PNU*(TA(I,K,M)+TB(I,K,M))                   ROWCALC.981    
 346  CONTINUE                                                             ROWCALC.982    
      IF (SF_DT(14)) THEN                                                  JG170893.141    
        DO K=1,KM                                                          JG170893.142    
        DO I=1,SWNCOL                                                      JG170893.143    
          DTRF(I,J,K)=(TF(I,K,1)-T(I,K,1))/C2DTTS*1e9                      OJG2F404.97     
        ENDDO                                                              JG170893.145    
        ENDDO                                                              JG170893.146    
      ENDIF                                                                JG170893.147    
                                                                           ORH1F305.2409   
      IF (L_ONOCLIN) THEN                                                  ORH1F305.2410   
        DO K=1,KM                                                          ORH1F305.2411   
          DO I=1,IMT                                                       ORH1F305.2412   
             UF(I,K)=0.0                                                   ORH1F305.2413   
             VF(I,K)=0.0                                                   ORH1F305.2414   
          ENDDO ! over I                                                   ORH1F305.2415   
        ENDDO   ! over K                                                   ORH1F305.2416   
      ELSE                                                                 ORH1F305.2417   
        DO K=1,KM                                                          ORH1F305.2418   
          DO I=1,IMT                                                       ORH1F305.2419   
             UF(I,K)=GM(I,K)*SSFUB(I)                                      ORH1F305.2420   
             VF(I,K)=GM(I,K)*SSFVB(I)                                      ORH1F305.2421   
          ENDDO ! over I                                                   ORH1F305.2422   
        ENDDO   ! over K                                                   ORH1F305.2423   
      ENDIF                                                                ORH1F305.2424   
                                                                           ORH1F305.2425   
      IF (SF_DS(13)) THEN                                                  OJG2F401.271    
        DO K=1,KM                                                          OJG2F401.272    
        DO I=1,SWNCOL                                                      OJG2F401.273    
          DSRF(I,J,K)=(TF(I,K,2)-T(I,K,2))/C2DTTS*1e9                      OJG2F404.98     
        ENDDO                                                              OJG2F401.275    
        ENDDO                                                              OJG2F401.276    
      ENDIF                                                                OJG2F401.277    
C                                                                          OJG2F401.278    
      DO 350 K=1,KM                                                        ROWCALC.998    
      DO 350 I=1,IMT                                                       ROWCALC.999    
      UF(I,K)=PNU*(UB(I,K)-UF(I,K)+UA(I,K))                                ROWCALC.1000   
      VF(I,K)=PNU*(VB(I,K)-VF(I,K)+VA(I,K))                                ROWCALC.1001   
 350  CONTINUE                                                             ROWCALC.1002   
      DO 347 K=1,KM                                                        ROWCALC.1003   
      DO 347 I=1,IMT                                                       ROWCALC.1004   
      UF(I,K)=PNU2M*USAV(I,K)+UF(I,K)                                      ROWCALC.1005   
      VF(I,K)=PNU2M*VSAV(I,K)+VF(I,K)                                      ROWCALC.1006   
 347  CONTINUE                                                             ROWCALC.1007   
      CALL UMWRITE(                                                        @DYALLOC.4334   
*CALL ARGSIZE                                                              @DYALLOC.4335   
*CALL ARGD1                                                                @DYALLOC.4336   
*CALL ARGDUMO                                                              @DYALLOC.4337   
*CALL ARGPTRO                                                              @DYALLOC.4338   
     &             LABS(NDISK),J,TF                                        @DYALLOC.4339   
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OSI0F402.131    
                                                                           ORH1F305.2426   
                                                                           ORH1F305.2427   
      IF (L_SEAICE.AND.L_IHANEY) THEN                                      ORH1F305.2428   
C---------------------------------------------------------------------     ROWCALC.1014   
C Following call to HNYCAL1 relaxes sea ice volume back to climatology     ROWCALC.1015   
C and stores resultant heat flux for the northernmost row only.            ROWCALC.1016   
C---------------------------------------------------------------------     ROWCALC.1017   
        IF (J+J_OFFSET.EQ.JMTM1_GLOBAL) THEN                               ORH3F402.264    
            CALL HNYCAL1(IMT                                               ORH1F305.2430   
     &,              HANEY_SI                                              ROWCALC.1020   
     &,              anomiceh(1,J_JMT)                                     ORH3F403.361    
     &,              HICE(1,J_JMT),HICE_REF(1,J_JMT)                       ORH3F403.362    
     &,              QFUSION                                               ROWCALC.1023   
     &,              RHO_WATER_SI,SPECIFIC_HEAT_SI                         ROWCALC.1024   
     &,              DZ(1)                                                 ROWCALC.1025   
     &              )                                                      ROWCALC.1027   
C                                                                          ROWCALC.1030   
C-----------------------------------------------------------------------   ROWCALC.1033   
C Copy anomalous flux of sea ice heat to STASH workspace (N-most island)   ROWCALC.1034   
C-----------------------------------------------------------------------   ROWCALC.1035   
C                                                                          ROWCALC.1036   
          IF (sf205_30) THEN                                               ORH1F305.2431   
            DO I=1,ICOL_CYC                                                ORH1F305.2432   
              sw205_30(I,J_JMT)=anomiceh(I,J_JMT)                          ORH3F403.363    
            END DO                                                         ORH1F305.2434   
          END IF                                                           ORH1F305.2435   
        ENDIF                                                              ORH1F305.2436   
      ENDIF                                                                ROWCALC.1049   
C---------------------------------------------------------------------     ROWCALC.1051   
C  PRINT THE PROGRESSING SOLUTION AT SPECIFIED ROWS ON ENERGY TSTEP        ROWCALC.1052   
C---------------------------------------------------------------------     ROWCALC.1053   
C                                                                          ROWCALC.1054   
      IF(NERGY.EQ.0) GO TO 339                                             ROWCALC.1057   
      IF (.NOT.ROWPRT) GOTO 8090                                           ROWCALC.1058   
      IF (ALLROW) GO TO 425                                                ROWCALC.1059   
      DO 420 N=1,20                                                        ROWCALC.1060   
        IF (J+J_OFFSET.EQ.JRPRT(N)) GOTO 425                               ORH3F402.265    
 420  CONTINUE                                                             ROWCALC.1062   
      GOTO 8090                                                            ROWCALC.1063   
 425  CONTINUE                                                             ROWCALC.1064   
C                                                                          ROWCALC.1065   
C  DETERMINE INDEX OF FIRST T OCEAN POINT                                  ROWCALC.1066   
C                                                                          ROWCALC.1067   
      DO 8015 M=1,NT                                                       ROWCALC.1068   
        IF(M.EQ.1) WRITE(6,8001) J+J_OFFSET,ITT                            ORH4F404.14     
        IF(M.EQ.2) WRITE(6,8002) J+J_OFFSET,ITT                            ORH4F404.15     
        IF(M.EQ.3) WRITE(6,8003) J+J_OFFSET,ITT                            ORH4F404.16     
        IF(M.EQ.4) WRITE(6,8004) J+J_OFFSET,ITT                            ORH4F404.17     
        IF(M.EQ.5) WRITE(6,8005) J+J_OFFSET,ITT                            ORH4F404.18     
        IF(M.EQ.6) WRITE(6,8006) J+J_OFFSET,ITT                            ORH4F404.19     
        IF(M.EQ.7) WRITE(6,8007) J+J_OFFSET,ITT                            ORH4F404.20     
        IF(M.EQ.8) WRITE(6,8008) J+J_OFFSET,ITT                            ORH4F404.21     
 8001   FORMAT(20H TEMPERATURE FOR J =,I4,12H AT TIMESTEP,I7)              ROWCALC.1073   
 8002   FORMAT(20H SALINITY    FOR J =,I4,12H AT TIMESTEP,I7)              ROWCALC.1074   
 8003   FORMAT('TRACER 1 (conv. TCO2) FOR J =',I4,                         NT080993.121    
     +' AT TIMESTEP',I7)                                                   NT080993.122    
 8004   FORMAT('TRACER 2 (conv. ALKALINITY) FOR J =',I4,                   NT080993.123    
     +' AT TIMESTEP',I7)                                                   NT080993.124    
 8005   FORMAT('TRACER 3 (conv. NUTRIENT) FOR J =',I4,                     NT080993.125    
     +' AT TIMESTEP',I7)                                                   NT080993.126    
 8006   FORMAT('TRACER 4 (conv. PHYTOPLKTN) FOR J =',I4,                   NT080993.127    
     +' AT TIMESTEP',I7)                                                   NT080993.128    
 8007   FORMAT('TRACER 5 (conv. ZOOPLANKTN) FOR J =',I4,                   NT080993.129    
     +' AT TIMESTEP',I7)                                                   NT080993.130    
 8008   FORMAT('TRACER 6 (conv. DETRITUS) FOR J =',I4,                     NT080993.131    
     +' AT TIMESTEP',I7)                                                   NT080993.132    
        SCL=1.0                                                            ROWCALC.1077   
        IF(M.EQ.2) SCL=1.E-3                                               ROWCALC.1078   
        IF (L_OCARBON) THEN                                                ORH1F305.2437   
            IF((M.EQ.3).OR.(M.EQ.4)) SCL=1.E2                              ORH1F305.2438   
        ENDIF                                                              ORH1F305.2439   
        CALL MATRIX(T(1,1,M),IMT,ISTRT,ISTOP,0,KM,SCL,0,0)                 ORH4F404.82     
 8015 CONTINUE                                                             ROWCALC.1080   
                                                                           ORH1F305.2440   
      IF (L_OCARBON) THEN                                                  ORH1F305.2441   
         ! Print out PCO2 and air to sea flux (invasion) of CO2            ORH1F305.2442   
         WRITE(6,8018) J+J_OFFSET,ITT                                      ORH4F404.22     
 8018    FORMAT(' PCO2 (in ppm /10) FOR J =',I4,' AT TIMESTEP',I7)         ORH1F305.2444   
         SCL=10.0                                                          ORH1F305.2445   
         CALL MATRIX(PCO2(1),IMT,ISTRT,ISTOP,0,1,SCL,0,0)                  ORH4F404.83     
C                                                                          NT071293.253    
         WRITE(6,8019) J+J_OFFSET,ITT                                      ORH4F404.23     
 8019    FORMAT(' Air-Sea CO2 flux (Mole/m2/yr),                           ORH1F305.2448   
     &                       J =',I4,' AT TIMESTEP',I7)                    ORH1F305.2449   
         CALL MATRIX(CO2_FLUX(1),IMT,ISTRT,ISTOP,0,1,SCL,0,0)              ORH4F404.84     
C                                                                          NT071293.257    
      ENDIF   ! L_OCARBON = true                                           ORH1F305.2451   
                                                                           ORH1F305.2452   
      WRITE(6,8011) J+J_OFFSET,ITT                                         ORH4F404.24     
 8011 FORMAT(20H W VELOCITY  FOR J =,I4,12H AT TIMESTEP,I7)                ROWCALC.1082   
                                                                           ORH1F305.2453   
      IF (L_OCYCLIC) THEN                                                  ORH1F305.2454   
C                                                                          ROWCALC.1084   
C  SET CYCLIC BOUNDARY CONDITION ON W BEFORE PRINTING                      ROWCALC.1085   
C                                                                          ROWCALC.1086   
        DO 433 K=1,KMP1                                                    ORH1F305.2455   
          W(1  ,K)=W(IMTM1,K)                                              ORH1F305.2456   
          W(IMT,K)=W(2    ,K)                                              ORH1F305.2457   
 433    CONTINUE                                                           ORH1F305.2458   
      ENDIF                                                                ORH1F305.2459   
                                                                           ORH1F305.2460   
      SCL=1.E-3                                                            ROWCALC.1092   
      CALL MATRIX(W,IMT,ISTRT,ISTOP,0,KMP1,SCL,0,0)                        ORH4F404.85     
      WRITE(6,8021) J+J_OFFSET,ITT                                         ORH4F404.25     
 8021 FORMAT(20H U VELOCITY  FOR J =,I4,12H AT TIMESTEP,I7)                ROWCALC.1095   
      SCL=1.0                                                              ROWCALC.1096   
      CALL MATRIX(U,IMT,ISTRT,ISTOP,0,KM,SCL,0,0)                          ORH4F404.86     
      WRITE(6,8022) J+J_OFFSET,ITT                                         ORH4F404.26     
                                                                           ORH9F402.370    
                                                                           ORH9F402.371    
 8022 FORMAT(20H V VELOCITY  FOR J =,I4,12H AT TIMESTEP,I7)                ROWCALC.1099   
      CALL MATRIX(V,IMT,ISTRT,ISTOP,0,KM,SCL,0,0)                          ORH4F404.87     
C                                                                          ROWCALC.1101   
C---------------------------------------------------------------------     ROWCALC.1102   
C  COMPUTE THE NORTHWARD TRANSPORT OF EACH TRACER QUANTITY                 ROWCALC.1103   
C  AS WELL AS THE ZONALLY INTEGRATED MERIDIONAL MASS TRANSPORT             ROWCALC.1104   
C---------------------------------------------------------------------     ROWCALC.1105   
C                                                                          ROWCALC.1106   
 8090 IF(J+J_OFFSET.EQ.JMTM1_GLOBAL) GO TO 8190                            ORH3F402.266    
                                                                           ORH1F305.2461   
      IF (L_OHMEAD) THEN                                                   ORH1F305.2462   
         DO K=1,KM                                                         ORH1F305.2463   
            VBR(K)=0.0                                                     ORH1F305.2464   
         ENDDO                                                             ORH1F305.2465   
      ELSE                                                                 ORH1F305.2466   
         DO K=1,KM                                                         ORH1F305.2467   
            VBR(K)=0.0                                                     ORH1F305.2468   
          ENDDO ! over K                                                   OMB2F401.6      
          DO M=1,NT                                                        OMB2F401.7      
             DO K=1,KM                                                     OMB2F401.8      
               TBRS(K,M)=TBRN(K,M)                                         ORH1F305.2470   
               TBRN(K,M)=0.0                                               ORH1F305.2471   
            ENDDO                                                          ORH1F305.2472   
         ENDDO                                                             ORH1F305.2473   
                                                                           ORH1F305.2474   
         IF(J+J_OFFSET.GT.2) GO TO 8110                                    ORH3F402.267    
            DO 8094 M=1,NT                                                 ORH1F305.2476   
               DO 8094 K=1,KM                                              ORH1F305.2477   
                  TBRS(K,M)=0.0                                            ORH1F305.2478   
 8094       CONTINUE                                                       ORH1F305.2479   
            DO 8102 K=1,KM                                                 ORH1F305.2480   
               TOTDX=0.0                                                   ORH1F305.2481   
               DO 8100 I=2,IMTM1                                           ORH1F305.2482   
                  TOTDX=TOTDX+DXT(I)*(FM(I,K))                             ORH1F305.2483   
 8100          CONTINUE                                                    ORH1F305.2486   
               DO M=1,NT                                                   OMB2F401.9      
                 DO I=2,IMTM1                                              OMB2F401.10     
                   TBRS(K,M)=TBRS(K,M)+T(I,K,M)*FM(I,K)*DXT(I)             OMB2F401.11     
                 END DO                                                    OMB2F401.12     
               END DO                                                      OMB2F401.13     
                                                                           ORH1F305.2487   
               IF(TOTDX.NE.0.0) THEN                                       ORH1F305.2488   
                  DO 8101 M=1,NT                                           ORH1F305.2489   
                     TBRS(K,M)=TBRS(K,M)/TOTDX                             ORH1F305.2490   
 8101             CONTINUE                                                 ORH1F305.2491   
               ENDIF                                                       ORH1F305.2492   
 8102       CONTINUE                                                       ORH1F305.2493   
 8110    CONTINUE                                                          ORH1F305.2494   
      ENDIF                                                                ORH1F305.2495   
      IF (.NOT.(L_OHMEAD.OR.L_OISOPYC)) THEN                               ORH1F305.2496   
          CCTJ=AH*DYUR(J)                                                  ORH1F305.2497   
      ENDIF                                                                ORH1F305.2498   
      DO K=1,KM                                                            ORH1F305.2499   
        IF (.NOT.(L_OHMEAD)) THEN                                          ORH1F305.2500   
           TOTDX=0.0                                                       ORH1F305.2501   
        ENDIF                                                              ROWCALC.1133   
                                                                           ORH1F305.2502   
        IF (L_OHMEAD) THEN                                                 ORH1F305.2503   
            DO I=2,IMTM1                                                   ORH1F305.2504   
               VBR(K)=VBR(K)+V(I,K)*DXU(I)*CS(J)                           ORH1F305.2505   
            ENDDO                                                          ORH1F305.2506   
        ELSE                                                               ORH1F305.2507   
            DO I=2,IMTM1                                                   ORH1F305.2508   
               TOTDX=TOTDX+DXT(I)*(FMP(I,K))                               ORH1F305.2509   
               VBR(K)=VBR(K)+V(I,K)*DXU(I)*CS(J)                           ORH1F305.2510   
            END DO                                                         OMB2F401.14     
            DO M=1,NT                                                      OMB2F401.15     
              DO I=2,IMTM1                                                 OMB2F401.16     
                TBRN(K,M)=TBRN(K,M)+TP(I,K,M)*FMP(I,K)*DXT(I)              OMB2F401.17     
              END DO                                                       OMB2F401.18     
            END DO                                                         OMB2F401.19     
                                                                           ORH1F305.2515   
            IF(TOTDX.NE.0.0) THEN                                          ORH1F305.2516   
               DO M=1,NT                                                   ORH1F305.2517   
                  TBRN(K,M)=TBRN(K,M)/TOTDX                                ORH1F305.2518   
               ENDDO                                                       ORH1F305.2519   
            ENDIF                                                          ORH1F305.2520   
        ENDIF   ! Not L_OHMEAD                                             ORH1F305.2521   
                                                                           ORH1F305.2522   
        IF(K.EQ.1) TMT(J,1)=VBR(1)*DZ(1)                                   ROWCALC.1161   
        IF(K.GT.1) TMT(J,K)=TMT(J,K-1)+VBR(K)*DZ(K)                        ROWCALC.1162   
                                                                           ORH1F305.2523   
        IF (.NOT.(L_OHMEAD))THEN                                           ORH1F305.2524   
                                                                           ORH1F305.2525   
           DO M=1,NT                                                       ORH1F305.2526   
              TTN(1,J,M)=TTN(1,J,M)+VBR(K)*                                ORH1F305.2527   
     &                   (TBRN(K,M)+TBRS(K,M))*0.5*DZ(K)                   ORH1F305.2528   
              IF (.NOT.(L_OISOPYC)) THEN                                   ORH1F305.2529   
                 DO I=2,IMTM1                                              ORH1F305.2530   
                    TTN(6,J,M)=TTN(6,J,M)+(V(I,K)*                         ORH1F305.2531   
     &                     DXU(I)+V(I-1,K)*DXU(I-1))*                      ORH1F305.2532   
     &                    (T(I,K,M)+TP(I,K,M))*CS(J)*0.25*DZ(K)            ORH1F305.2533   
                    TTN(7,J,M)=TTN(7,J,M)-CCTJ*FM(I,K)*FMP(I,K)*           ORH1F305.2534   
     &             (TP(I,K,M)-T(I,K,M))*DXT(I)*CS(J)*DZ(K)                 ORH1F305.2535   
                 ENDDO  ! over I                                           ORH1F305.2536   
              ELSE                                                         ORH1F305.2537   
         IF (L_OISOMOM) THEN                                               OOM1F405.124    
                 DO I=2,IMTM1                                              OOM1F405.125    
                    TTN(6,J,M)=TTN(6,J,M)+(V(I,K)*                         OOM1F405.126    
     &                      DXU(I)+V(I-1,K)*DXU(I-1))*                     OOM1F405.127    
     &                     (T(I,K,M)+TP(I,K,M))*CS(J)*0.25*DZ(K)           OOM1F405.128    
                    TTN(7,J,M)=TTN(7,J,M)-diff_fn(I,K,M,0)*FM(I,K)*        OOM1F405.129    
     &              DXT(I)*(CS(J)*DZ(K))                                   OOM1F405.130    
                 ENDDO   ! over I                                          OOM1F405.131    
         ELSE                                                              OOM1F405.132    
                 DO I=2,IMTM1                                              ORH1F305.2538   
                    TTN(6,J,M)=TTN(6,J,M)+(V(I,K)*                         ORH1F305.2539   
     &                      DXU(I)+V(I-1,K)*DXU(I-1))*                     ORH1F305.2540   
     &                     (T(I,K,M)+TP(I,K,M))*CS(J)*0.25*DZ(K)           ORH1F305.2541   
                    TTN(7,J,M)=TTN(7,J,M)-esav(I,K,M)*FM(I,K)*             ORH1F305.2542   
     &              DXT(I)*(CS(J)*DZ(K))                                   ORH1F305.2543   
                 ENDDO   ! over I                                          ORH1F305.2544   
         ENDIF  ! L_OISOMOM                                                OOM1F405.133    
                                                                           OOM1F405.134    
              ENDIF                                                        ORH1F305.2545   
           ENDDO  ! over M                                                 ORH1F305.2546   
         ENDIF                                                             ORH1F305.2547   
      ENDDO    ! over K                                                    ORH1F305.2548   
                                                                           ORH1F305.2549   
      IF (.NOT.L_OHMEAD) THEN                                              ORH1F305.2550   
           DO M=1,NT                                                       ORH1F305.2551   
              DO I=2,IMTM1                                                 ORH1F305.2552   
                 TOTDZ=0.0                                                 ORH1F305.2553   
                 VBRZ=0.0                                                  ORH1F305.2554   
                 TBRZ=0.0                                                  ORH1F305.2555   
                 IKM=I                                                     ORH1F305.2556   
                 IF(KMU(I-1).GT.KMU(I)) IKM=I-1                            ORH1F305.2557   
                 KZ=KMU(IKM)                                               ORH1F305.2558   
                 IF(.NOT.(KZ.EQ.0)) THEN                                   ORH1F305.2559   
                    DO K=1,KZ                                              ORH1F305.2560   
                       VBRZ=VBRZ+(V(I,K)*DXU(I)+V(I-1,K)*                  ORH1F305.2561   
     &                                          DXU(I-1))*DZ(K)            ORH1F305.2562   
                       TBRZ=TBRZ+(T(I,K,M)+TP(I,K,M))*DZ(K)                ORH1F305.2563   
                       TOTDZ=TOTDZ+DZ(K)                                   ORH1F305.2564   
                    ENDDO                                                  ORH1F305.2565   
                    TBRZ=TBRZ/TOTDZ                                        ORH1F305.2566   
                    TTN(3,J,M)=TTN(3,J,M)+VBRZ*TBRZ*CS(J)*0.25             ORH1F305.2567   
                    IF (L_OROTATE) THEN                                    ORH1F305.2568   
                       TTN(5,J,M)=TTN(5,J,M)-(WSX(I)*DXU(I)+               ORH1F305.2569   
     &                                     WSX(I-1)*DXU(I-1))*             ORH1F305.2570   
     &             (T(I,1,M)+TP(I,1,M)-TBRZ)*CS(J)/(4.0*CORIOLIS(I,J))     ORH1F305.2571   
                    ELSE                                                   ORH1F305.2572   
                       TTN(5,J,M)=TTN(5,J,M)-(WSX(I)*DXU(I)+               ORH1F305.2573   
     &                                     WSX(I-1)*DXU(I-1))*             ORH1F305.2574   
     &             (T(I,1,M)+TP(I,1,M)-TBRZ)*CS(J)/(8.0*OMEGA*SINE(J))     ORH1F305.2575   
                    ENDIF                                                  ORH1F305.2576   
                                                                           ORH1F305.2577   
                 ENDIF ! KZ > 0                                            ORH1F305.2578   
              ENDDO    ! over I                                            ORH1F305.2579   
           ENDDO       ! over M                                            ORH1F305.2580   
        ENDIF   ! Not L_OHMEAD                                             ORH1F305.2581   
                                                                           ORH1F305.2582   
      IF (.NOT.(L_OHMEAD)) THEN                                            ORH1F305.2583   
         DO M=1,NT                                                         ORH1F305.2584   
            TTN(2,J,M)=TTN(6,J,M)-TTN(1,J,M)                               ORH1F305.2585   
            TTN(4,J,M)=TTN(6,J,M)-TTN(3,J,M)-TTN(5,J,M)                    ORH1F305.2586   
            TTN(8,J,M)=TTN(6,J,M)+TTN(7,J,M)                               ORH1F305.2587   
         ENDDO                                                             ORH1F305.2588   
      ENDIF                                                                ORH1F305.2589   
8190  CONTINUE                                                             ORH1F305.2590   
339   CONTINUE                                                             ORH1F305.2591   
C                                                                          ROWCALC.1214   
                                                                           ORH0F404.61     
      IF (L_OHMEAD) THEN                                                   ORH0F404.62     
         CALL MEADCALC(L_OHMEAD,L_OISOPYC,MEADTEST,SF_MEAD                 ORH0F404.63     
     &        ,L_OISOMOM,diff_fn                                           OOM1F405.135    
                                                                           OOM1F405.136    
     &       ,LPL_MEAD,J,JMMD                                              ORH0F404.64     
     &       ,IMT,IMT_IPD,KM_IPD,NT_IPD                                    ORH0F404.65     
     &       ,ITEM,JMT,KM                                                  ORH0F404.66     
     &       ,KMU,LSEGC,LDIV,NT,O_MAX_TRACERS                              ORH0F404.67     
     &       ,SIREL_MEAD,TRACER_XREF,                                      ORH0F404.68     
*CALL ARGOCMEA                                                             ORH0F404.69     
     &        DYUR,CONV_MEAD                                               ORH0F404.70     
     &       ,ESAV,FM                                                      ORH0F404.71     
     &       ,DXT,DZ,CS,DXU,DXTK                                           ORH0F404.72     
     &       ,TP,T,V                                                       ORH0F404.73     
     &       ,MEAD_DIAG                                                    ORH0F404.74     
     &)                                                                    ORH0F404.75     
      ENDIF                                                                ORH0F404.76     
                                                                           ORH0F404.77     
      IF (SFRC) THEN                                                       OJC2F400.129    
        DO K=1,KM                                                          OJC2F400.130    
        DO I=1,IMT_STASH                                                   OJC2F400.131    
C     Multiply by 1E9 for backward compatibility with the C90, where       OJG2F403.17     
C     this was necessary to avoid loss of accuracy from dump packing.      OJG2F403.18     
          DTRC(I,J,K)=1E9*(TA(I,K,1)-DTRC(I,J,K))/C2DTTS                   OJG2F403.19     
        ENDDO                                                              OJC2F400.133    
        ENDDO                                                              OJC2F400.134    
      ENDIF                                                                OJC2F400.135    
        ENDIF ! If we have something to do for this row                    ORH1F403.46     
                                                                           ORH1F403.47     
 380  CONTINUE                                                             ROWCALC.1334   
*IF DEF,MPP                                                                ORH0F404.78     
      ! In MPP mode we must cater for diagnostics whose halo               ORH0F404.79     
      ! regions need to be swapped.                                        ORH0F404.80     
      CALL OSWAPDIAGS (                                                    ORH0F404.81     
     & L_ICEFREEDR,L_ICESIMPLE,L_OHANEY,L_SEAICE,L_IHANEY,L_OBIOLOGY       ODC1F405.408    
     &,L_OQLARGE,L_OFULARGE,IMT,SWNCOL,JMT,JMTM1,KM,KMM1                   OOM1F405.713    
     &,O_EW_HALO,O_NS_HALO                                                 ORH0F404.84     
*CALL ARGOC3DG                                                             ORH0F404.85     
     &,UCURRENT,VCURRENT,CARYSALT,OCEANHEATFLUX                            OOM1F405.714    
     &,SFUTOT,SFVTOT                                                       ORH0F404.87     
     &,UTOT,VTOT                                                           ORH0F404.88     
     &,SF_ZN,SWZUN,SWZVN                                                   ORH0F404.89     
     &,sf201_30,sf202_30,sf203_30,sf204_30,sf205_30,sf208_30,sf248_30      ORH0F404.90     
     &,sf249_30,sf250_30,sf251_30                                          ORH0F404.91     
     &,SW201_30,SW202_30,SW203_30,SW204_30,SW205_30,SW208_30,SW248_30      ORH0F404.92     
     &,SW249_30,SW250_30,SW251_30                                          ORH0F404.93     
     &,sf_dt                                                               ORH0F404.94     
     &,DTXADV,DTYADV,DTZADV,DTXDIFF,DTYDIFF,DTZDIFF,DTSFC,DTPEN            ORH0F404.95     
     &,DTICE,DTMIX,DTCNVC,DTZ,DTFF,DTMED                                   ORH0F404.96     
     &,sf_DS                                                               ORH0F404.97     
     &,DSXADV,DSYADV,DSZADV,DSXDIFF,DSYDIFF,DSZDIFF,DSSFC,DSICE            ORH0F404.98     
     &,DSMIX,DSCNVC,DSZ,DSFF,DSMED                                         ORH0F404.99     
     &,sf_bio                                                              ORH3F405.62     
     &,swrk_bio(si_bio(1)),swrk_bio(si_bio(2)),swrk_bio(si_bio(3))         ORH3F405.63     
     &,swrk_bio(si_bio(4)),swrk_bio(si_bio(5)),swrk_bio(si_bio(6))         ORH3F405.64     
     &,swrk_bio(si_bio(7)),swrk_bio(si_bio(8)),swrk_bio(si_bio(9))         ORH3F405.65     
     &,swrk_bio(si_bio(10)),swrk_bio(si_bio(11)),swrk_bio(si_bio(12))      ORH3F405.66     
     &,swrk_bio(si_bio(13)),swrk_bio(si_bio(14)),swrk_bio(si_bio(15))      ORH3F405.67     
     &,swrk_bio(si_bio(16)),swrk_bio(si_bio(17)),swrk_bio(si_bio(18))      ORH3F405.68     
     &,swrk_bio(si_bio(19)),swrk_bio(si_bio(20)),swrk_bio(si_bio(21))      ORH3F405.69     
     &,swrk_bio(si_bio(22)),swrk_bio(si_bio(23)),swrk_bio(si_bio(24))      ORH3F405.70     
     &,swrk_bio(si_bio(25)),swrk_bio(si_bio(26)),swrk_bio(si_bio(27))      ORH3F405.71     
     &)                                                                    ORH0F404.106    
*ENDIF                                                                     ORH0F404.107    
!=======================================================================   ORH0F404.108    
!   HAVING COMPLETED THE ROW-BY-ROW COMPUTATION, WE MUST WRITE THE         ORH0F404.109    
!   FINAL ROW TO D1 STORAGE VIA A FURTHER CALL TO UMWRITE.ORH4F402.53      ORH0F404.110    
!=======================================================================   ORH0F404.111    
*IF DEF,MPP                                                                ORH0F404.112    
      ! Make sure we only attempt to write something when                  ORH9F402.137    
      ! J_TO_COMP > 0. (ie: if the decomposition were to                   ORH9F402.138    
      ! result in a PE only being assigned row JMT_GLOBAL                  ORH9F402.139    
      ! then we dont have anything to do here.                             ORH9F402.140    
      IF (J_TO_COMP.GT.0) THEN                                             ORH9F402.141    
*ENDIF                                                                     ORH9F402.142    
      CALL UMWRITE(                                                        @DYALLOC.4340   
*CALL ARGSIZE                                                              @DYALLOC.4341   
*CALL ARGD1                                                                @DYALLOC.4342   
*CALL ARGDUMO                                                              @DYALLOC.4343   
*CALL ARGPTRO                                                              @DYALLOC.4344   
     &    LABS(NDISKA),J_TO_COMP,TA                                        ORH9F402.143    
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OSI0F402.132    
C                                                                          ROWCALC.1460   
*IF DEF,MPP                                                                ORH9F402.144    
      ENDIF                                                                ORH9F402.145    
*ENDIF                                                                     ORH9F402.146    
                                                                           OSI1F405.370    
      IF (L_OGILL_LBCS) THEN                                               OSI1F405.371    
*IF DEF,MPP                                                                OSI1F405.372    
        IF (attop .AND. L_OBDY_SOUTH) THEN                                 OSI1F405.373    
*ELSE                                                                      OSI1F405.374    
        IF (L_OBDY_SOUTH) THEN                                             OSI1F405.375    
*ENDIF                                                                     OSI1F405.376    
          DO M = 1, NT                                                     OSI1F405.377    
            DO K = 1, KM                                                   OSI1F405.378    
              DO I = 1, IMT                                                OSI1F405.379    
                 D1(joc_tracer(M,2)-1+i+                                   OSI1F405.380    
     &                      O_NS_HALO*imt+(k-1)*imt*jmt) = RMDI            OSI1F405.381    
              ENDDO                                                        OSI1F405.382    
            ENDDO                                                          OSI1F405.383    
          ENDDO                                                            OSI1F405.384    
        ENDIF                                                              OSI1F405.385    
*IF DEF,MPP                                                                OSI1F405.386    
        IF (atbase .AND. L_OBDY_NORTH) THEN                                OSI1F405.387    
*ELSE                                                                      OSI1F405.388    
        IF (L_OBDY_NORTH) THEN                                             OSI1F405.389    
*ENDIF                                                                     OSI1F405.390    
          DO M = 1, NT                                                     OSI1F405.391    
            DO K = 1, KM                                                   OSI1F405.392    
              DO I = 1, IMT                                                OSI1F405.393    
                D1(joc_tracer(M,2)-1+i+                                    OSI1F405.394    
     &                (jmt-1-O_NS_HALO)*imt+(k-1)*imt*jmt) = RMDI          OSI1F405.395    
              ENDDO                                                        OSI1F405.396    
            ENDDO                                                          OSI1F405.397    
          ENDDO                                                            OSI1F405.398    
        ENDIF                                                              OSI1F405.399    
      ENDIF   !   L_OGILL_LBCS                                             OSI1F405.400    
                                                                           OSI1F405.401    
      IF (L_OTIMER) CALL TIMER ('ROWCALC ',4)                              ORH1F305.2628   
      RETURN                                                               ROWCALC.1464   
      END                                                                  ROWCALC.1465   
*ENDIF                                                                     @DYALLOC.4346