*IF DEF,OCEAN                                                              BLOKCALC.2      
C ******************************COPYRIGHT******************************    GTS2F400.523    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.524    
C                                                                          GTS2F400.525    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.526    
C restrictions as set forth in the contract.                               GTS2F400.527    
C                                                                          GTS2F400.528    
C                Meteorological Office                                     GTS2F400.529    
C                London Road                                               GTS2F400.530    
C                BRACKNELL                                                 GTS2F400.531    
C                Berkshire UK                                              GTS2F400.532    
C                RG12 2SZ                                                  GTS2F400.533    
C                                                                          GTS2F400.534    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.535    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.536    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.537    
C Modelling at the above address.                                          GTS2F400.538    
C ******************************COPYRIGHT******************************    GTS2F400.539    
C                                                                          GTS2F400.540    
CLL  Subroutine BLOKCALC --------------------------------------------      BLOKCALC.3      
CLL                                                                        BLOKCALC.4      
CLL  Author   : R. Hill                                                    BLOKCALC.5      
CLL                                                                        BLOKCALC.6      
CLL  Reviewer :                                                            BLOKCALC.7      
CLL                                                                        BLOKCALC.8      
CLL  Description : This subroutine controls the calls to                   BLOKCALC.9      
CLL                lower level routines which carry out computations       BLOKCALC.10     
CLL                over blocks of ocean rows on parallel processors.       BLOKCALC.11     
CLL                                                                        BLOKCALC.12     
CLL  History  :                                                            BLOKCALC.13     
CLL  Version   Date     Comment & Name                                     ORH6F404.506    
CLL  ------- --------  --------------------------------------------        ORH6F404.507    
CLL   3.4    01.09.94  Original code.  R. Hill                             ORH6F404.508    
!     3.5    16.01.95  Remove *IF dependency. R.Hill                       ORH6F404.509    
CLL   4.1    23.5.96   J.M.Gregory  Diags for rate of change of salinity   ORH6F404.510    
CLL   4.1    23.5.96   J.M.Gregory  Diagnostic for total ocean velocity    ORH6F404.511    
!     4.1   Vertical mean vorticity diagnostics introduced. M. J. Bell     OMB3F401.135    
!     4.4    13.08.97  Tidy up indentation and layout for maintenance      ORH6F404.512    
!                      logical flow and readability purposes.              ORH6F404.513    
!LL   4.4   Swapbounds on zconu and zconv done before calculating          OMB2F404.6      
!LL         vorticity within BLOKCALC.                                     OMB2F404.7      
!     4.4   Correct time in 1-line diagnostic for 360 day calendar         OFR8F404.13     
!       4.4          Enable actual temperature to be output                OMB1F404.158    
!                    by stash M. Bell  21.5.97                             OMB1F404.159    
CLL  4.4  15/06/97  Changes to accomodate free surface solution.           ORL1F404.767    
CLL                                                    R.Lenton            ORL1F404.768    
CLL                                                                        BLOKCALC.17     
!     4.4   Pass stash flag 30285 into BLOKCNTL (R.Forbes)                 OFRAF404.53     
CLL  4.5  05/08/97  Removed calls to old ocean boundary routine UMLATRD    OSI1F405.14     
CLL                 and setting up of old boundary logicals. C.G. Jones    OSI1F405.15     
CLL   4.5     03.11.98  Initialise row j+2 data (TPP etc) if necessary     OOM3F405.273    
CLL                     and pass to BLOKCNTL    M. Roberts                 OOM3F405.274    
CLL   4.5   3.11.98   Call MED_CALC if using new Med/Hud outflow           OOM2F405.323    
CLL                   param.                       M. Roberts              OOM2F405.324    
!    4.5  10.8.97  C.G.Sherlock Control logicals changed for ice           ODC1F405.1      
!                               dynamics                                   ODC1F405.2      
!     4.5   Replace references to individual stash work items              ORH3F405.18     
!           with calls to ARGOSTFL to pass stash work variables            ORH3F405.19     
!           less awkwardly. R. Hill                                        ORH3F405.20     
CLL  Called by   : ROW_CTL                                                 BLOKCALC.18     
CLL                                                                        BLOKCALC.19     
CLL  Calls to      : MATRIX                                                OSI1F405.16     
CLL                BLOKCNTL                                                BLOKCALC.22     
CLLEND -------------------------------------------------------------       BLOKCALC.23     

      SUBROUTINE BLOKCALC(                                                  1,16BLOKCALC.24     
*CALL ARGSIZE                                                              BLOKCALC.25     
*CALL ARGD1                                                                BLOKCALC.26     
*CALL ARGDUMO                                                              BLOKCALC.27     
*CALL ARGPTRO                                                              BLOKCALC.28     
*CALL ARGOCALL                                                             BLOKCALC.29     
*CALL ARGOINDX                                                             ORH7F402.266    
*CALL COCAROWS                                                             BLOKCALC.30     
*CALL ARGOC2DG                                                             ORH0F400.12     
*CALL ARGOC3DG                                                             ORH0F400.13     
     &,SWNCOL,sw201_30,sw202_30,sw203_30,sw204_30,sw205_30                 BLOKCALC.31     
     &,sw208_30                                                            BLOKCALC.32     
     &,sw248_30,sw249_30,sw250_30,sw251_30                                 BLOKCALC.33     
     &,sw292_30,sw293_30                                                   OJP0F404.904    
     &,sf201_30,sf202_30,sf203_30,sf204_30,sf205_30,sf208_30               ORH3F403.240    
     &,sf248_30,sf249_30,sf250_30,sf251_30                                 BLOKCALC.36     
     &,sf285_30                                                            OFRAF404.54     
     &,mead_diag,sirel_mead,sf_mead,Lpl_mead,tracer_xref                   BLOKCALC.38     
     &,sf292_30,sf293_30                                                   OJP0F404.905    
*CALL ARGOSTFL                                                             ORH3F405.22     
     &,SWZUN,SWZVN,SF_ZN                                                   BLOKCALC.43     
     &,utot,vtot,sfutot,sfvtot,Temperature,SFTemp                          OMB1F404.160    
     &,AICE,HICE,HSNOW,HICE_REF,CARYHEAT                                   ORH3F403.243    
     &,ICY,FLXTOICE,CARYSALT,anomiceh,fluxcorh,fluxcorw                    ORH3F403.244    
     &,ISX,ISY,WSX_LEADS,WSY_LEADS                                         BLOKCALC.73     
     &,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP,LCAL360                         OFR8F404.14     
     &,SURFTEMP,SURFSAL,NEWICE,UCURRENT,VCURRENT                           ORH3F403.245    
*CALL ARGOCTOT                                                             BLOKCALC.84     
     &, IMT_IPD_MIX_ARG, JMT_IPD_MIX_ARG,IMT_idr_ARG,JMTM1_idr_ARG         ODC1F405.3      
     &, IMT_idr_MIX_ARG,JMT_idr_MIX_ARG,JMTM1_idr_MIX_ARG                  ODC1F405.4      
     &, IMTIMT_FLT_ARG , NTMIN2_ARG, NBLOCK_ARG, NSLAB_ARG                 ORH6F401.37     
     &)                                                                    BLOKCALC.85     
C                                                                          BLOKCALC.86     
C                                                                          BLOKCALC.87     
C=======================================================================   BLOKCALC.88     
C                                                                    ===   BLOKCALC.89     
C  BLOKCALC IS CALLED ONCE PER TIMESTEP. IT INITIALIZES VARIOUS      ===   BLOKCALC.90     
C       QUANTITIES, BOOTSTRAPS THE BASIC ROW BY ROW COMPUTATION      ===   BLOKCALC.91     
C       OF PROGNOSTIC VARIABLES, MANAGES THE I/O FOR THE LATTER,     ===   BLOKCALC.92     
C       AND PERFORMS VARIOUS ANALYSIS PROCEDURES ON THE PROGRESSING  ===   BLOKCALC.93     
C       SOLUTION.                                                    ===   BLOKCALC.94     
C                                                                    ===   BLOKCALC.95     
C=======================================================================   BLOKCALC.96     
      IMPLICIT NONE                                                        BLOKCALC.97     
C---------------------------------------------------------------------     BLOKCALC.98     
C  DEFINE GLOBAL DATA                                                      BLOKCALC.99     
C---------------------------------------------------------------------     BLOKCALC.100    
C                                                                          BLOKCALC.101    
C                                                                          BLOKCALC.102    
*CALL TYPSIZE                                                              BLOKCALC.103    
*CALL OARRYSIZ                                                             ORH6F401.36     
*CALL TYPD1                                                                BLOKCALC.104    
*CALL TYPDUMO                                                              BLOKCALC.105    
*CALL TYPPTRO                                                              BLOKCALC.106    
*CALL TYPOINDX                                                             PXORDER.1      
*CALL TYPOCALL                                                             BLOKCALC.107    
*CALL UMSCALAR                                                             BLOKCALC.108    
*CALL C_MDI                                                                BLOKCALC.109    
C                                                                          BLOKCALC.110    
*CALL COCTROWS                                                             BLOKCALC.111    
*CALL TYPOC2DG                                                             ORH0F400.14     
*CALL TYPOC3DG                                                             ORH0F400.15     
*CALL TYPOSTFL                                                             ORH3F405.21     
*CALL TYPOCTOT                                                             BLOKCALC.112    
*CALL CNTLOCN                                                              ORH1F305.3548   
*CALL OTIMER                                                               ORH1F305.3550   
                                                                           ORH1F305.3551   
      INTEGER               ! Sizes for dynamic allocation of              ORH6F401.38     
     & IMT_idr_ARG          ! arrays local to this routine                 ODC1F405.5      
     &,JMTM1_idr_ARG        ! - passed via arg list to avoid               ODC1F405.6      
     &,IMT_IPD_MIX_ARG      !   portability problems.                      ORH6F401.41     
     &,JMT_IPD_MIX_ARG                                                     ORH6F401.42     
     &,IMT_idr_MIX_ARG                                                     ODC1F405.7      
     &,JMTM1_idr_MIX_ARG                                                   ODC1F405.8      
     &,JMT_idr_MIX_ARG                                                     ODC1F405.9      
     &,IMTIMT_FLT_ARG , NTMIN2_ARG, NBLOCK_ARG, NSLAB_ARG                  ORH6F401.46     
      REAL                                                                 ORH1F305.3552   
     & AICE(*)           ! INOUT Fractional ice conc.                      ORH1F305.3553   
     &,HICE(*)           ! INOUT Ice depth avgd over grid box              ORH1F305.3554   
     &,HSNOW(*)          ! INOUT Snow depth over                           ORH1F305.3555   
!                        ! ice fraction of grid box.                       ORH1F305.3556   
     &,HICE_REF(*)       ! IN CLIMATOLOGICAL ice depth.                    ORH1F305.3557   
     &,anomiceh(*)       ! OUT anomalous seaice heat flux                  ORH1F305.3558   
                                                                           ORH1F305.3559   
      REAL                                                                 ORH1F305.3560   
     & CARYHEAT(*)                                                         ORH1F305.3561   
     &,FLXTOICE(*)                                                         ORH1F305.3562   
     &,CARYSALT(*)                                                         ORH1F305.3563   
     &,SURFTEMP(*)                                                         ORH1F305.3564   
     &,SURFSAL(*)                                                          ORH1F305.3565   
     &,UCURRENT(IMT_drsa,JMTM1_drsa)                                       ODC1F405.10     
     &,VCURRENT(IMT_drsa,JMTM1_drsa)                                       ODC1F405.11     
     &,ISX(IMT_idr,JMTM1_idr)                                              ODC1F405.12     
     &,ISY(IMT_idr,JMTM1_idr)                                              ODC1F405.13     
     &,WSX_LEADS(*)                                                        ORH1F305.3570   
     &,WSY_LEADS(*)                                                        ORH1F305.3571   
     &,AICE_UV(IMT_idr_ARG,JMTM1_idr_ARG) ! Ice fract interpolated         ODC1F405.14     
!                                         ! to UV points.                  ORH1F305.3573   
                                                                           ORH1F305.3574   
      REAL                                                                 ORH1F305.3575   
     & fluxcorh(*)                                                         ORH1F305.3576   
     &,fluxcorw(*)                                                         ORH1F305.3577   
                                                                           ORH1F305.3578   
      LOGICAL                                                              ORH1F305.3579   
     & NEWICE(*)                                                           ORH1F305.3580   
     &,ICY(*)                                                              ORH1F305.3581   
                                                                           ORH1F305.3582   
      REAL                                                                 ORH1F305.3583   
     & DU_ASS_BTRP(*)        ! u_component  data assimilation increment    ORH1F305.3584   
     &,DV_ASS_BTRP(*)        ! v_component  data assimilation increment    ORH1F305.3585   
      LOGICAL                                                              ORH1F305.3586   
     & LL_ASS_BTRP  ! logical selecting data assimilation                  ORH1F305.3587   
     &,LCAL360                                                             OFR8F404.15     
C                                                                          BLOKCALC.158    
      INTEGER SWNCOL        ! first dimension of stash workspace           BLOKCALC.159    
      REAL                                                                 BLOKCALC.160    
     & sw201_30(SWNCOL,JMT,KMM1) ! stash workspace for vertical velocity   BLOKCALC.161    
     &,sw202_30(SWNCOL,JMT)      ! mixed layer depth                       BLOKCALC.162    
     &,sw203_30(SWNCOL,JMT)      ! anomalous heat flux                     BLOKCALC.163    
     &,sw204_30(SWNCOL,JMT)      ! anomalous water flux                    BLOKCALC.164    
     &,sw205_30(SWNCOL,JMT)      ! anomalous sea ice heat flux             BLOKCALC.165    
     &,sw208_30(SWNCOL,JMT)      ! caryheat heat flux (W/m2)               BLOKCALC.166    
     &,mead_diag(*)            ! tracer transport (mead) diagnostics       BLOKCALC.168    
     &,sw248_30(*)          !   stash workspace for PCO2                   ORH1F305.3588   
     &,sw249_30(*)          !   stash workspace for CO2 flux               ORH1F305.3589   
     &,sw250_30(*)          !   stash workspace for invasion               ORH1F305.3590   
     &,sw251_30(*)          !   stash workspace for evasion                ORH1F305.3591   
     &,sw292_30(*)      ! stash workspace for virtual CO2 flux             OJP0F404.906    
     &,sw293_30(*)      ! stash workspace for virtual ALK flux             OJP0F404.907    
      LOGICAL                                                              BLOKCALC.182    
     & sf201_30,sf202_30,sf203_30,sf204_30,sf205_30                        BLOKCALC.183    
     &,sf208_30                                                            BLOKCALC.184    
     &,sf248_30,sf249_30,sf250_30,sf251_30                                 BLOKCALC.185    
     &,sf292_30,sf293_30                                                   OJP0F404.908    
     &,sf285_30                                                            OFRAF404.55     
      INTEGER                                                              ORH1F305.3592   
     & sirel_mead(*)                                                       ORH1F305.3593   
     &,tracer_xref(*)                                                      ORH1F305.3594   
                                                                           ORH1F305.3595   
                                                                           ORH1F305.3605   
      LOGICAL                                                              ORH1F305.3606   
     & sf_mead(*)                                                          ORH1F305.3607   
     &,Lpl_mead(*)                                                         ORH1F305.3608   
                                                                           ORH1F305.3609   
C     Barotropic acceleration diagnostics                                  ORH1F305.3610   
      REAL SWZUN(*), SWZVN(*)                                              ORH1F305.3611   
      LOGICAL SF_ZN(*)                                                     ORH1F305.3612   
C                                                                          BLOKCALC.209    
      real                                                                 OJG5F401.31     
     & utot(*),vtot(*)  ! Total 3D velocity diagnostics                    OJG5F401.32     
     &,Temperature(*) ! actual temperature diagnostic                      OMB1F404.161    
      logical                                                              OJG5F401.33     
     & sfutot,sfvtot    ! Stash flags for 3D velocity diagnostics          OJG5F401.34     
     &, SFTemp    ! Stash flag for temperature diagnostic                  OMB1F404.162    
                                                                           ORH1F305.3659   
      REAL                                                                 ORH1F305.3660   
     & mldsav(IMT_IPD_MIX_ARG,JMT_IPD_MIX_ARG)  ! saved mld values         ORH1F305.3661   
       REAL ATTEND(KM,NT,4)  ! Mixing tendencies caused by Med outflow     OOM1F403.35     
       REAL HUDTEND(KM,NT,4)                                               OOM2F405.131    
C                                                                          ORH1F305.3662   
C                                                                          BLOKCALC.260    
C---------------------------------------------------------------------     BLOKCALC.261    
C  DIMENSION AND EQUIVALENCE LOCAL DATA                                    BLOKCALC.262    
C---------------------------------------------------------------------     BLOKCALC.263    
C                                                                          BLOKCALC.264    
      INTEGER I,             ! Grid point index (Zonal)                    BLOKCALC.265    
     &     J,                ! Grid point index (Meridional)               BLOKCALC.266    
     &     K,                ! Grid point index (Vertical)                 BLOKCALC.267    
     &     L,                ! Ocean segment loop control                  BLOKCALC.268    
     &     M,                ! Tracer indicator                            BLOKCALC.269    
     &     N,                ! Control index                               BLOKCALC.270    
     &     JJ,               ! Meridional grid pt index                    BLOKCALC.271    
     &     LL,               ! Loop control for energy components          BLOKCALC.272    
     &     IE,               ! Adjustable end index used in ZTD calc       BLOKCALC.279    
     &     IS                ! Adjustable start "    "   "  "    "         BLOKCALC.280    
     &    ,IM                ! length of string to be filtered             BLOKCALC.281    
     &    ,II                ! Loop counter                                BLOKCALC.282    
     &    ,ID                ! loop index for vorticity diagnostics        OMB3F401.136    
     &    ,INFO              ! For use in MPP message passing code         ORH6F404.514    
                                                                           ORH6F404.515    
      REAL                                                                 BLOKCALC.283    
     &     VBR(KM)           ! ZONAL SUMMATION OF MERIDIONAL VELOCITY      ORH6F404.516    
     &,    TMT(JMT,KM)       ! MERIDIONAL MASS TRANSPORT                   ORH6F404.517    
     &,    DAYSYR            ! No of days per year                         BLOKCALC.287    
     &,    FX                ! Temporary value                             BLOKCALC.290    
     &,    SCL               ! Scaling factor for printout                 BLOKCALC.291    
     &,    TTDAY             ! Current day of year                         BLOKCALC.294    
     &,    TTYEAR            ! No. of years of completed integration       BLOKCALC.295    
     &,    ENGTMP            ! Temporary cumulative energy variable        ORH1F305.3663   
                                                                           ORH1F305.3664   
      REAL                                                                 ORH1F305.3665   
     & TTN(8,JMT,NTMIN2_ARG) !NORTWARD TRANSPORT OF TRACERS                ORH6F401.70     
      REAL                                                                 BLOKCALC.310    
     &   co2_tot             !  Total net air-sea flux of CO2              ORH6F404.518    
     &  ,PCO2_ATM            !  pp CO2 in atmosphere (ppm)                 ORH6F404.519    
     &  ,c14to12_atm         ! Atmosphere C14/C12 ratio (standard =100)    ORH6F404.520    
                                                                           ORH6F404.521    
      REAL                                                                 ORH1F305.3667   
     & ISTRESS_UV(IMT_idr_MIX_ARG,JMTM1_idr_MIX_ARG) ! MAGNITUDE OF        ODC1F405.15     
!                               ! ICE-OCEAN BASAL STRESS.                  ORH1F305.3669   
     &,ISTRESS(IMT_idr_MIX_ARG,JMT_idr_MIX_ARG) ! ISTRESS_UV ON            ODC1F405.16     
!                               ! TRACER POINTS                            ORH1F305.3671   
     &,PSI         ! CONSTANT TURNING ANGLE UNDER ICE.                     ORH1F305.3672   
     &,CDRAG_ICE   ! CONSTANT ICE-OCEAN DRAG COEFFICIENT.                  ORH1F305.3673   
                                                                           ORH6F404.522    
      REAL                                                                 BLOKCALC.329    
     & ENGINT(8)    ! Internal energy components                           BLOKCALC.330    
     &,ENGEXT(8)    ! External energy components                           BLOKCALC.331    
     &,DTABS(NT)    ! Absolute change in tracers                           BLOKCALC.332    
     &,TVAR(NT)     ! Variance of tracer change                            BLOKCALC.333    
     &,TTDTOT(6,NT) ! Integral diagnostics of tracers                      BLOKCALC.334    
C                                                                          BLOKCALC.335    
C                                                                          BLOKCALC.336    
C--------------------------------------------------------------------      BLOKCALC.337    
CL  Variables required for parallel processing                             BLOKCALC.338    
C--------------------------------------------------------------------      BLOKCALC.339    
C                                                                          BLOKCALC.340    
      INTEGER                                                              BLOKCALC.341    
     &        IBLOCK   ! Index over number of blocks of rows               BLOKCALC.342    
     &,       JROWS    ! Number of rows per block                          BLOKCALC.345    
     &,       JIND     ! Index over J. Dependent on symmetry conditions    BLOKCALC.346    
C                                                                          BLOKCALC.347    
CL Define arrays holding block by block sub-totals                         BLOKCALC.348    
C                                                                          BLOKCALC.349    
      REAL BLOCK_ENGINT (8,NBLOCK_ARG)     ! ENGINT(1:8) sub total         ORH6F401.47     
     &,    BLOCK_DTABS  (NT,NBLOCK_ARG)    ! TVAR(1:NT) sub total          ORH6F401.48     
     &,    BLOCK_TVAR   (NT,NBLOCK_ARG)    ! TVAR(1:NT) sub total          ORH6F401.49     
     &,    BLOCK_TTDTOT (6,NT,NBLOCK_ARG)  ! TTDTOT(8,NT) sub total        ORH6F401.50     
     &,    BLOCK_BUOY   (NBLOCK_ARG)       ! BUOY sub total                ORH6F401.51     
     &,    BLOCK_EKTOT  (NBLOCK_ARG)       ! EKTOT sub total               ORH6F401.52     
     &,    BLOCK_CO2_TOT(NBLOCK_ARG)       ! CO2_TOT sub total             ORH6F401.53     
C                                                                          BLOKCALC.359    
C--------------------------------------------------------------------      BLOKCALC.360    
C  Define variables used to allocate contiguous work space for             BLOKCALC.361    
C  heavily used areas.                                                     BLOKCALC.362    
C--------------------------------------------------------------------      BLOKCALC.363    
C                                                                          BLOKCALC.364    
      REAL                                                                 BLOKCALC.365    
     & TA(NSLAB_ARG)         ! slabs of ocean primary variables            ORH6F401.54     
     &,TBP(NSLAB_ARG)        ! suffixes:                                   ORH6F401.55     
     &,TP(NSLAB_ARG)         !    A:  timestep after present               ORH6F401.56     
     &,TB(NSLAB_ARG)         !    B:  timestep before present              ORH6F401.57     
     &,T(NSLAB_ARG)          !    M:  row J-1                              ORH6F401.58     
     &,TBM(NSLAB_ARG)        !    P:  row J+1                              ORH6F401.59     
     &,TM(NSLAB_ARG)         !    F:  time filtering                       ORH6F401.60     
     &,TF(NSLAB_ARG)         !                                             ORH6F401.61     
     &,TPP(NSLAB_ARG)              !    PP:  row j+2                       OOM3F405.275    
     &,TBPP(NSLAB_ARG)             !                                       OOM3F405.276    
     &,TPPZ(NSLAB_ARG)          ! Initial values for TPP at JFIN+2         OOM3F405.277    
     &,TBPPZ(NSLAB_ARG)         ! Initial values for TBPP at JFIN+2        OOM3F405.278    
     &,UDIF(IMT+KM*IMT+IMT)                                                BLOKCALC.374    
     &,VDIF(IMT+KM*IMT+IMT)                                                BLOKCALC.375    
     &,TPZ (NSLAB_ARG)       ! Initial values for TP  at JFIN+1            ORH6F401.68     
     &,TBPZ(NSLAB_ARG)       ! Initial values for TBP at JFIN+1            ORH6F401.69     
C                                                                          BLOKCALC.384    
      INTEGER                                                              BLOKCALC.385    
     & index_u      ! pointer to UA,UBP,UP,UB,U,UBM,UM,UF                  BLOKCALC.386    
     &,index_v      ! pointer to VA,VBP,VP,VB,V,VBM,VM,VF                  BLOKCALC.387    
     &,index_over   ! pointer to UOVER,VOVER                               BLOKCALC.388    
     &,index_udif   ! pointer to UDIF,VDIF                                 BLOKCALC.389    
     &,index_under  ! pointer to UUNDER,VUNDER                             BLOKCALC.390    
C                                                                          BLOKCALC.391    
      REAL FTARR(IMTIMT_FLT_ARG)  ! COEF USED IN FILTERING ROUTINE         ORH1F305.3674   
C local variables for the inflow/outflow into the Mediterranean and        OOM2F405.325    
C Hudson Bay                                                               OOM2F405.326    
       INTEGER imsend(4),jmsend(4),J_PE_IND_OUT(4)                         OOM2F405.327    
       INTEGER lev_top,lev_bot,medorhud                                    OOM2F405.328    
       LOGICAL inflow_top  ! true if inflow to marginal sea is at          OOM2F405.329    
C                          ! surface, otherwise false                      OOM2F405.330    
       REAL TENDIN(km,nt,4)                                                OOM2F405.331    
                                                                           OOM2F405.332    
C                                                                          BLOKCALC.395    
C                                                                          BLOKCALC.396    
C*--------------------------------------------------------------------     BLOKCALC.397    
C  BEGIN EXECUTABLE CODE                                                   BLOKCALC.398    
C---------------------------------------------------------------------     BLOKCALC.399    
C                                                                          BLOKCALC.400    
      EXTERNAL BLOKCNTL                                                    BLOKCALC.401    
     &,        MATRIX                                                      BLOKCALC.403    
C                                                                          BLOKCALC.404    
      IF (L_OTIMER) CALL TIMER('BLOKCALC ',3)                              ORH1F305.3675   
C                                                                          BLOKCALC.408    
      NERGY = 0                                                            BLOKCALC.409    
      IF (MOD(ITT,NNERGY).EQ.0) NERGY=1                                    BLOKCALC.410    
C                                                                          BLOKCALC.411    
      ! Initialise sub totals                                              ORH6F404.523    
      IF (NERGY.EQ.1) THEN                                                 BLOKCALC.412    
         DO M=1,NT                                                         ORH2F305.15     
            DO LL = 1,6                                                    ORH2F305.16     
               TTDTOT(LL,M)=0.0                                            ORH2F305.17     
            ENDDO  ! Over LL                                               ORH2F305.18     
         ENDDO     ! Over M                                                ORH2F305.19     
         DO LL=1,8                                                         BLOKCALC.413    
            ENGINT(LL) = 0.0                                               ORH2F305.20     
            ENGEXT(LL) = 0.0                                               BLOKCALC.414    
         END DO                                                            BLOKCALC.415    
      ENDIF                                                                ORH2F305.43     
                                                                           ORH6F404.524    
      DO N=1,NBLOCK                                                        ORH6F404.525    
         BLOCK_BUOY(N)=0.0                                                 ORH6F404.526    
         DO M=1,NT                                                         ORH6F404.527    
            DO LL=1,6                                                      ORH6F404.528    
               BLOCK_TTDTOT(LL,M,N)=0.0                                    ORH6F404.529    
            END DO                                                         BLOKCALC.422    
         END DO                                                            BLOKCALC.423    
      END DO                                                               ORH6F404.530    
C                                                                          BLOKCALC.424    
C                                                                          BLOKCALC.426    
      ! Ensure variables initialised for all model configurations          ORH0F401.42     
      PCO2_ATM = 0.0                                                       ORH0F401.43     
      c14to12_atm = 0.0                                                    ORH0F401.44     
                                                                           ORH6F404.531    
      IF (L_OCARBON) THEN                                                  ORH1F305.3676   
C Initialise atmospheric CO2 variables                                     BLOKCALC.428    
! If full carbon-cycle running, surface CO2 is fed in from the             OCN1F405.1      
! dump. Otherwise, initial values are read in from NAMELIST,               OCN1F405.2      
! and assumed to be temporally and spatially constant.                     OCN1F405.3      
                                                                           OCN1F405.4      
C                                                                          BLOKCALC.435    
         PCO2_ATM = pco2_atm_0                                             BLOKCALC.436    
         IF (L_OCARB14) c14to12_atm = c14to12_atm_0                        ORH0F401.46     
      ENDIF                                                                ORH1F305.3682   
                                                                           ORH6F404.532    
      do ii=1,4                                                            ORH6F404.533    
         do m=1,nt                                                         ORH6F404.534    
            do k=1,km                                                      ORH6F404.535    
               attend(k,m,ii)=0.                                           ORH6F404.536    
               hudtend(k,m,ii)=0.                                          OOM2F405.333    
               tendin(k,m,ii)=0.                                           OOM2F405.334    
                                                                           OOM2F405.335    
            enddo                                                          ORH6F404.537    
         enddo                                                             OOM1F403.40     
      enddo                                                                ORH6F404.538    
                                                                           ORH6F404.539    
      IF (L_OMEDOUT) THEN                                                  ORH6F404.540    
C                                                                          OOM1F403.44     
C No need to call MED_OUTFLOW if rows on this processor not involved       OOM1F403.45     
C Always need to call if not on MPP machine                                OOM1F403.46     
C                                                                          OOM1F403.47     
C Do Mediterranean outflow calculations                                    OOM2F405.336    
          do i=1,4                                                         OOM2F405.337    
            imsend(i)=imout(i)                                             OOM2F405.338    
            jmsend(i)=jmout(i)                                             OOM2F405.339    
            J_PE_IND_OUT(i)=J_PE_IND_MED(i)                                OOM2F405.340    
          enddo                                                            OOM2F405.341    
          lev_top=med_topflow                                              OOM2F405.342    
          lev_bot=lev_med                                                  OOM2F405.343    
          inflow_top=.true.                                                OOM2F405.344    
C variable to define if dealing with Mediterranean or Hudson Bay           OOM2F405.345    
          medorhud=1                                                       OOM2F405.346    
                                                                           OOM2F405.347    
C need to include all the variables which are being changed in the         OOM2F405.348    
C argument list, else they will not be communicated as desired.            OOM2F405.349    
                                                                           OOM2F405.350    
         CALL MED_CALC(                                                    OOM2F405.351    
*CALL ARGSIZE                                                              OOM2F405.352    
*CALL ARGD1                                                                OOM2F405.353    
*CALL ARGDUMO                                                              OOM2F405.354    
*CALL ARGPTRO                                                              OOM2F405.355    
*CALL ARGOCALL                                                             OOM2F405.356    
*CALL ARGOINDX                                                             OOM2F405.357    
     &  NSLAB_ARG                                                          OOM2F405.358    
     & ,TENDIN,ATTEND,HUDTEND                                              OOM2F405.359    
     & ,tendfrc,imsend,jmsend,lev_top,lev_bot,inflow_top                   OOM2F405.360    
     &,L_OMEDADV,J_PE_IND_OUT,medorhud                                     OOM2F405.361    
     &  )                                                                  OOM2F405.362    
C                                                                          OOM2F405.363    
C                                                                          OOM1F403.58     
      ENDIF   ! Med outflow true                                           ORH6F404.542    
       IF (L_OHUDOUT) THEN                                                 OOM2F405.364    
C Do Hudson Bay outflow calculations                                       OOM2F405.365    
          do i=1,4                                                         OOM2F405.366    
            imsend(i)=imout_hud(i)                                         OOM2F405.367    
            jmsend(i)=jmout_hud(i)                                         OOM2F405.368    
            J_PE_IND_OUT(i)=J_PE_IND_HUD(i)                                OOM2F405.369    
          enddo                                                            OOM2F405.370    
          lev_top=lev_hud-1                                                OOM2F405.371    
          lev_bot=lev_hud                                                  OOM2F405.372    
          inflow_top=.false.                                               OOM2F405.373    
          medorhud=2                                                       OOM2F405.374    
                                                                           OOM2F405.375    
         CALL MED_CALC(                                                    OOM2F405.376    
*CALL ARGSIZE                                                              OOM2F405.377    
*CALL ARGD1                                                                OOM2F405.378    
*CALL ARGDUMO                                                              OOM2F405.379    
*CALL ARGPTRO                                                              OOM2F405.380    
*CALL ARGOCALL                                                             OOM2F405.381    
*CALL ARGOINDX                                                             OOM2F405.382    
     &  NSLAB_ARG                                                          OOM2F405.383    
     & ,TENDIN,ATTEND,HUDTEND                                              OOM2F405.384    
     & ,tendfrc,imsend,jmsend,lev_top,lev_bot,inflow_top                   OOM2F405.385    
     &,L_OMEDADV,J_PE_IND_OUT,medorhud                                     OOM2F405.386    
     &  )                                                                  OOM2F405.387    
       ENDIF  ! L_OHUDOUT                                                  OOM2F405.388    
                                                                           OOM2F405.389    
C                                                                          BLOKCALC.441    
C=======================================================================   BLOKCALC.442    
C  BEGIN SECTION FOR THE INITIALIZATION OF  ============================   BLOKCALC.443    
C  VARIOUS QUANTITIES ON EACH TIMESTEP      ============================   BLOKCALC.444    
C=======================================================================   BLOKCALC.445    
C                                                                          BLOKCALC.446    
      IF (L_ICEFREEDR) THEN                                                ODC1F405.17     
C---------------------------------------------------------------------     BLOKCALC.448    
C Interpolate sea ice fraction to UV points for dynamic sea ice model      BLOKCALC.449    
C---------------------------------------------------------------------     BLOKCALC.450    
C                                                                          BLOKCALC.451    
         PSI     = 0.4363                                                  ORH6F404.543    
         CDRAG_ICE = 0.0055                                                ORH6F404.544    
         CALL H_TO_UV(                                                     ORH6F404.545    
*CALL ARGOINDX                                                             ORH7F402.269    
     &        AICE,AICE_UV,IMT,JMT,JMTM1)                                  ORH6F404.546    
                                                                           ORH6F404.547    
         IF (L_OMIXLAY) THEN                                               ORH6F404.548    
            DO J = J_1, J_JMTM1                                            ORH6F404.549    
               DO I=1,IMT                                                  ORH6F404.550    
                  ISTRESS_UV(I,J) = SQRT (ISX(I,J)**2 + ISY(I,J)**2)       ORH6F404.551    
               END DO                                                      ORH6F404.552    
            END DO                                                         ORH6F404.553    
            CALL UV_TO_H(                                                  ORH6F404.554    
*CALL ARGOINDX                                                             ORH7F402.272    
     &           ISTRESS_UV,ISTRESS,IMT,JMT,JMTM1)                         ORH6F404.555    
         ENDIF                                                             ORH6F404.556    
                                                                           ORH6F404.557    
      ENDIF                                                                ORH1F305.3686   
C                                                                          BLOKCALC.465    
      IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN                                 ODC1F405.18     
         DO I=1,IMT                                                        ORH6F404.558    
*IF DEF,MPP                                                                ORH3F402.2      
            IF (JST.LE.1.AND.JFIN.GE.1) THEN                               ORH3F402.3      
               UCURRENT(I,J_1)     = 0.0                                   ORH3F402.4      
               VCURRENT(I,J_1)     = 0.0                                   ORH3F402.5      
            ENDIF                                                          ORH3F402.6      
            IF (JST.LE.2.AND.JFIN.GE.2) THEN                               ORH3F402.7      
               UCURRENT(I,J_2)     = 0.0                                   ORH3F402.8      
               VCURRENT(I,J_2)     = 0.0                                   ORH3F402.9      
            ENDIF                                                          ORH3F402.10     
            IF (JST.LE.JMTM1_GLOBAL.AND.JFIN.GE.JMTM1_GLOBAL) THEN         ORH3F402.11     
               UCURRENT(I,J_JMTM1)     = 0.0                               ORH3F402.12     
               VCURRENT(I,J_JMTM1)     = 0.0                               ORH3F402.13     
            ENDIF                                                          ORH3F402.14     
*ELSE                                                                      ORH3F402.15     
            UCURRENT(I,1)     = 0.0                                        ORH6F404.559    
            VCURRENT(I,1)     = 0.0                                        ORH6F404.560    
            UCURRENT(I,2)     = 0.0                                        ORH6F404.561    
            VCURRENT(I,2)     = 0.0                                        ORH6F404.562    
            UCURRENT(I,JMTM1) = 0.0                                        ORH6F404.563    
            VCURRENT(I,JMTM1) = 0.0                                        ORH6F404.564    
*ENDIF                                                                     ORH3F402.16     
         ENDDO                                                             ORH6F404.565    
      ENDIF                                                                ORH1F305.3688   
C                                                                          BLOKCALC.479    
C                                                                          BLOKCALC.517    
C---------------------------------------------------------                 BLOKCALC.518    
C Initialise variables used in allocation  of workspace                    BLOKCALC.519    
C---------------------------------------------------------                 BLOKCALC.520    
      index_u=IMT*KM*NT+1                                                  BLOKCALC.521    
      index_v=IMT*KM*(NT+1)+1                                              BLOKCALC.522    
      index_over=1                                                         BLOKCALC.523    
      index_udif=IMT+1                                                     BLOKCALC.524    
      index_under=IMT+IMT*KM+1                                             BLOKCALC.525    
C                                                                          BLOKCALC.526    
C                                                                          BLOKCALC.527    
C                                                                          BLOKCALC.538    
C                                                                          BLOKCALC.539    
                                                                           BLOKCALC.540    
      IF (L_OISOPYC.AND.L_OMIXLAY) THEN                                    ORH1F305.3718   
         DO I=1,IMT                                                        ORH6F404.567    
            DO J = J_1, J_JMT                                              ORH6F404.568    
               mldsav(I,J) = mld(I,J)                                      ORH6F404.569    
            ENDDO  ! Over J                                                ORH6F404.570    
         ENDDO     ! Over I                                                ORH6F404.571    
*IF DEF,MPP                                                                ORH6F404.572    
         ! Ensure MLDSAV halos are populated ready for                     ORH6F404.573    
         ! use in CALCESAV.                                                ORH6F404.574    
         CALL SWAPBOUNDS(MLDSAV,IMT,JMT,O_EW_HALO,O_NS_HALO,1)             ORH6F404.575    
*ENDIF                                                                     ORH6F404.576    
      ENDIF                                                                ORH1F305.3719   
                                                                           BLOKCALC.548    
C                                                                          BLOKCALC.549    
C=======================================================================   BLOKCALC.550    
C  END OF SECTION FOR INITIALIZATION  ==================================   BLOKCALC.551    
C=======================================================================   BLOKCALC.552    
C                                                                          BLOKCALC.553    
CL  Work out the number of rows per parallel block.                        BLOKCALC.554    
CL  (this will be made dynamically adjustable at some stage)               BLOKCALC.555    
C                                                                          BLOKCALC.556    
C                                                                          BLOKCALC.557    
      IF (MOD(JMTM1,NBLOCK).EQ.0) THEN                                     BLOKCALC.558    
         JROWS=3+((INT(JMTM1-(NBLOCK*3))/NBLOCK))                          ORH2F305.21     
      ELSE                                                                 BLOKCALC.560    
         JROWS=4+((INT(JMTM1-(NBLOCK*3))/NBLOCK))                          ORH2F305.22     
      END IF                                                               BLOKCALC.562    
C----------------------------------------------------------------------    BLOKCALC.563    
C     We must obtain certain information from southern/northern            BLOKCALC.564    
C     boundaries before starting the main computation since                BLOKCALC.565    
C     once computation has started this information may be                 BLOKCALC.566    
C     altered by another processor working on the adjacent                 BLOKCALC.567    
C     rows.                                                                BLOKCALC.568    
C----------------------------------------------------------------------    BLOKCALC.569    
      CALL INITTRAC (                                                      ORH9F402.40     
*CALL ARGSIZE                                                              ORH9F402.41     
*CALL ARGD1                                                                ORH9F402.42     
*CALL ARGDUMO                                                              ORH9F402.43     
*CALL ARGPTRO                                                              ORH9F402.44     
*CALL ARGOINDX                                                             ORH9F402.45     
     &      LABS,NDISKB,NDISK,NDISKA,FKMP,FKMQ                             ORH9F402.46     
     &    , T,TB,TM,TBM,TPZ,TBPZ                                           ORH4F405.1      
     &,  TPPZ, TBPPZ, L_OBIMOM, L_OBIHARMGM                                OOM3F405.279    
     &    , NBLOCK,JROWS                                                   ORH9F402.48     
     &     )                                                               ORH9F402.49     
*IF -DEF,MPP                                                               ORH9F402.50     
C*******************************************************************       BLOKCALC.648    
CL   P A R A L L E L   P R O C E S S I N G   B E G I N S                   BLOKCALC.649    
C*******************************************************************       BLOKCALC.650    
C                                                                          BLOKCALC.651    
CL  Split computation into blocks of size JROWS, except the 1st block      BLOKCALC.652    
CL  which must have at least 3 rows and therefore contains JROWS+1         BLOKCALC.653    
CL  rows.                                                                  BLOKCALC.654    
CFPP$ SELECT (CONCUR)                                                      ORH2F305.28     
CFPP$ CNCALL L                                                             ORH2F305.29     
CFPP$ PRIVATEARRAY L                                                       ORH2F305.30     
      DO IBLOCK=1,NBLOCK+1                                                 ORH2F305.31     
!                                                                          ORH2F305.32     
!        The number of loops executed in parrallel = loop count -1         ORH2F305.33     
!        WE NEED NBLOCK. TO ACHEIVE THIS, THE LOOP CONTROL                 ORH2F305.34     
!        VARIABLE IS SET TO NBLOCK + 1, but no action is taken             ORH2F305.35     
!        on the last iteration.                                            ORH2F305.36     
!                                                                          ORH2F305.37     
         IF (IBLOCK.LT.NBLOCK+1) THEN                                      ORH2F305.38     
!                                                                          ORH2F305.39     
         JIND=3+((IBLOCK-1)*JROWS)                                         ORH2F305.40     
C                                                                          BLOKCALC.657    
C Set the starting value for control of the J loop                         BLOKCALC.658    
C                                                                          BLOKCALC.659    
         IF(JIND.EQ.3) THEN                                                BLOKCALC.660    
            JST=1                                                          BLOKCALC.661    
         ELSE                                                              BLOKCALC.662    
            JST=JIND                                                       BLOKCALC.663    
         ENDIF                                                             BLOKCALC.664    
C                                                                          BLOKCALC.665    
         JFIN=MIN(JIND+JROWS-1,JMTM1)                                      BLOKCALC.666    
C                                                                          BLOKCALC.667    
*ELSE                                                                      ORH9F402.51     
! For MPP configuration, JST and JFIN are computed during                  ORH9F402.52     
! original domain decomposition.                                           ORH9F402.53     
      IBLOCK=1                                                             ORH9F402.54     
*ENDIF                                                                     ORH9F402.55     
C                                                                          BLOKCALC.669    
         N=IMT*2+IMT*KM                                                    BLOKCALC.670    
                                                                           BLOKCALC.671    
         DO I=1,N                                                          BLOKCALC.672    
            UDIF(I)=0.0                                                    BLOKCALC.673    
            VDIF(I)=0.0                                                    BLOKCALC.674    
         ENDDO  ! Over I                                                   BLOKCALC.675    
                                                                           BLOKCALC.676    
         DO N = 1, NSLAB                                                   BLOKCALC.677    
            TA(N)=0.0                                                      BLOKCALC.678    
            TBP(N)=0.0                                                     BLOKCALC.679    
            TP(N)=0.0                                                      BLOKCALC.680    
            TF(N)=0.0                                                      BLOKCALC.681    
         ENDDO  ! Over N                                                   BLOKCALC.688    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.280    
         DO N = 1, NSLAB                                                   OOM3F405.281    
           TPP(N)= 0.0                                                     OOM3F405.282    
           TBPP(N)= 0.0                                                    OOM3F405.283    
         ENDDO                                                             OOM3F405.284    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMG                                      OOM3F405.285    
C                                                                          BLOKCALC.689    
C---------------------------------------------------------------------     BLOKCALC.690    
C Call the main row by row calculations in BLOCKS OF ROWS                  BLOKCALC.691    
C---------------------------------------------------------------------     BLOKCALC.692    
C                                                                          BLOKCALC.693    
         CALL BLOKCNTL (                                                   ORH6F404.577    
*CALL ARGSIZE                                                              BLOKCALC.695    
*CALL ARGD1                                                                BLOKCALC.696    
*CALL ARGDUMO                                                              BLOKCALC.697    
*CALL ARGPTRO                                                              BLOKCALC.698    
*CALL ARGOCALL                                                             BLOKCALC.699    
*CALL ARGOINDX                                                             ORH7F402.274    
*CALL COCAROWS                                                             BLOKCALC.700    
*CALL ARGOC2DG                                                             ORH0F400.16     
*CALL ARGOC3DG                                                             ORH0F400.17     
*CALL ARGOSTFL                                                             ORH3F405.23     
     &,SWNCOL,sw201_30,sw202_30,sw203_30,sw204_30,sw205_30                 BLOKCALC.701    
     &,sw208_30                                                            BLOKCALC.702    
     &,sw248_30,sw249_30,sw250_30,sw251_30                                 BLOKCALC.703    
     &,sw292_30,sw293_30                                                   OJP0F404.909    
     &,sf201_30,sf202_30,sf203_30,sf204_30,sf205_30                        BLOKCALC.704    
     &,sf208_30                                                            BLOKCALC.705    
     &,sf248_30,sf249_30,sf250_30,sf251_30                                 BLOKCALC.706    
     &,sf292_30,sf293_30                                                   OJP0F404.910    
                                                                           OJP0F404.911    
     &,sf285_30                                                            OFRAF404.56     
     &,mead_diag,sirel_mead,sf_mead,Lpl_mead,tracer_xref                   BLOKCALC.708    
     &,SWZUN,SWZVN,SF_ZN                                                   BLOKCALC.713    
     &,utot,vtot,sfutot,sfvtot,Temperature,SFTemp                          OMB1F404.163    
     &,AICE, HICE, HSNOW, HICE_REF, CARYHEAT, ICY, FLXTOICE                ORH5F401.6      
     &,CARYSALT, anomiceh, fluxcorh, fluxcorw                              ORH5F401.7      
     &,ISX, ISY, WSX_LEADS, WSY_LEADS                                      ORH5F401.8      
     &,LL_ASS_BTRP, DU_ASS_BTRP, DV_ASS_BTRP                               ORH5F401.9      
     &,SURFTEMP, SURFSAL, NEWICE, UCURRENT, VCURRENT                       ORH5F401.10     
     &,TTN, ISTRESS, ISTRESS_UV, TMT                                       ORH0F405.1      
C                                                                          BLOKCALC.764    
C The following arguments are specific to the current block.               BLOKCALC.765    
C                                                                          BLOKCALC.766    
     &,BLOCK_BUOY(IBLOCK), BLOCK_EKTOT(IBLOCK), BLOCK_ENGINT(1,IBLOCK)     BLOKCALC.767    
     &,BLOCK_DTABS(1,IBLOCK),BLOCK_TVAR(1,IBLOCK)                          BLOKCALC.768    
     &,BLOCK_TTDTOT(1,1,IBLOCK), BLOCK_CO2_TOT(IBLOCK)                     ORH5F401.12     
     &,PCO2_ATM, c14to12_atm                                               ORH5F401.13     
     &,TA(1),TA(index_u),TA(index_v),TBP(1),TBP(index_u),TBP(index_v)      BLOKCALC.777    
     &,TP(1),TP(index_u),TP(index_v)                                       BLOKCALC.778    
     &,TB (1),TB (index_u),TB (index_v)                                    BLOKCALC.779    
     &,T (1),T (index_u),T (index_v)                                       BLOKCALC.780    
     &,TBM(1),TBM(index_u),TBM(index_v)                                    BLOKCALC.781    
     &,TM(1),TM(index_u),TM(index_v)                                       BLOKCALC.782    
     &,TF(1),TF(index_u),TF(index_v)                                       BLOKCALC.783    
     &,UDIF(index_over),UDIF(index_udif),UDIF(index_under)                 BLOKCALC.784    
     &,VDIF(index_over),VDIF(index_udif),VDIF(index_under)                 BLOKCALC.785    
     &,TPZ(1),TPZ(index_u),TPZ(index_v)                                    BLOKCALC.786    
     &,TBPZ(1),TBPZ(index_u),TBPZ(index_v)                                 BLOKCALC.787    
     &,TPP(1),TPP(index_u),TPP(index_v)                                    OOM3F405.286    
     &,TBPP(1),TBPP(index_u),TBPP(index_v)                                 OOM3F405.287    
     &,TPPZ(1),TPPZ(index_u),TPPZ(index_v)                                 OOM3F405.288    
     &,TBPPZ(1),TBPPZ(index_u),TBPPZ(index_v)                              OOM3F405.289    
     &,mldsav,FTARR                                                        ORH1F405.463    
     &,IMT_IPD,KM_IPD,KMP1_IPD,NT_IPD                                      ORH1F305.3721   
     &,IMT_GM,KM_GM                                                        OLA0F401.92     
     &,ATTEND,HUDTEND                                                      OOM2F405.132    
                                                                           OOM2F405.133    
     & )                                                                   ORH7F402.309    
C                                                                          BLOKCALC.792    
*IF -DEF,MPP                                                               ORH9F402.56     
         ENDIF  ! For IBLOCK > 0                                           ORH2F305.41     
      END DO  ! Over IBLOCK                                                ORH2F305.42     
*ENDIF                                                                     ORH9F402.57     
C                                                                          BLOKCALC.794    
C*******************************************************************       BLOKCALC.795    
CL   P A R A L L E L   P R O C E S S I N G   E N D S                       BLOKCALC.796    
C*******************************************************************       BLOKCALC.797    
C                                                                          BLOKCALC.798    
C NOW PERFORM ZTD CALCULATIONS FORMERLY DONE AT A LOWER LEVEL              BLOKCALC.799    
C                                                                          BLOKCALC.800    
                                                                           BLOKCALC.801    
      IF (.NOT.(L_OSYMM)) THEN                                             ORH1F305.3722   
         JIND=J_JMTM2                                                      ORH3F402.18     
      ELSE                                                                 ORH1F305.3723   
         JIND=J_JMTM1                                                      ORH3F402.19     
      ENDIF                                                                ORH1F305.3724   
                                                                           ORH4F402.40     
*IF DEF,MPP                                                                ORH4F402.41     
C                                                                          ORH4F402.42     
C=====================================================================     ORH4F402.43     
C CALL TO SWAPBOUNDS FOR HALO UPDATE IN MPP VERSION                        ORH4F402.44     
C=====================================================================     ORH4F402.45     
                                                                           ORH4F402.46     
      CALL SWAPBOUNDS(ZU,IMT,JMT,O_EW_HALO,O_NS_HALO,1)                    ORH4F402.47     
                                                                           ORH4F402.48     
      CALL SWAPBOUNDS(ZV,IMT,JMT,O_EW_HALO,O_NS_HALO,1)                    ORH4F402.49     
                                                                           ORH4F402.50     
      IF ( L_OZVRT ) THEN                                                  OMB2F404.8      
        CALL SWAPBOUNDS(ZCONU,IMT,JMT,O_EW_HALO,O_NS_HALO,N_ZVRT)          OMB2F404.9      
        CALL SWAPBOUNDS(ZCONV,IMT,JMT,O_EW_HALO,O_NS_HALO,N_ZVRT)          OMB2F404.10     
      END IF ! L_OZVRT                                                     OMB2F404.11     
*ENDIF                                                                     ORH4F402.51     
                                                                           ORH4F402.52     
      IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN                     ORL1F404.769    
C---------------------------------------------------------------------     BLOKCALC.815    
C  FORM CURL OF TIME CHANGE IN VERTICALLY AVERAGED EQUATIONS               BLOKCALC.816    
C---------------------------------------------------------------------     BLOKCALC.817    
C Initialise SWZVRT (it is awkward to do this in BLOKINIT                  OMB3F401.138    
C where ZTD is initialised).                                               OMB3F401.139    
                                                                           OMB3F401.140    
         IF ( L_OZVRT ) THEN                                               ORH6F404.578    
            DO ID = 1, N_ZVRT                                              ORH6F404.579    
               DO J=J_1,J_JMT                                              ORH6F404.580    
                  DO I=1,IMT                                               ORH6F404.581    
                     SWZVRT(I,J,ID)=0.0                                    ORH6F404.582    
                  ENDDO ! I                                                ORH6F404.583    
               ENDDO ! J                                                   ORH6F404.584    
            ENDDO ! ID                                                     ORH6F404.585    
         ENDIF ! L_OZVRT                                                   ORH6F404.586    
                                                                           OMB3F401.153    
         DO 621 J = J_2, JIND                                              ORH6F404.587    
C                                                                          OMB3F401.155    
            IF (.NOT.L_OISLANDS) THEN                                      ORH6F404.588    
C  NON-ACTIVE VORTICITY PTS. ARE KEPT AT ZERO FOR CONVENIENCE IN RELAX.    BLOKCALC.821    
C  TO ACCOMPLISH THIS, ZTD IS COMPUTED ONLY BETWEEN GIVEN STARTING AND     BLOKCALC.822    
C  ENDING INDICES.                                                         BLOKCALC.823    
C                                                                          BLOKCALC.824    
               DO 620 L=1,LSEG                                             ORH6F404.589    
                  IS=ISZ(J,L)                                              ORH6F404.590    
                  IF(IS.EQ.0) GO TO 621                                    ORH6F404.591    
                  IE=IEZ(J,L)                                              ORH6F404.592    
                  DO 620 I=IS,IE                                           ORH6F404.593    
               ZTD(I,J)=((ZU(I,J)*DXU(I)+ZU(I-1,J)*DXU(I-1))*CS(J )        ORH6F404.594    
     &           -(ZU(I,J-1)*DXU(I)+ZU(I-1,J-1)*DXU(I-1))*CS(J-1))         BLOKCALC.841    
               ZTD(I,J)=(((ZV(I,J)-ZV(I-1,J))*DYU(J  )                     ORH6F404.595    
     &            +(ZV(I,J-1)-ZV(I-1,J-1))*DYU(J-1)                        BLOKCALC.843    
     &            -ZTD(I,J))*DXT2R(I)*DYTR(J))*CSTR(J)                     BLOKCALC.844    
 620           CONTINUE                                                    ORH6F404.596    
                                                                           ORH6F404.597    
C calculate vorticity contributions for diagnostics                        OMB3F401.156    
                                                                           ORH6F404.598    
               IF ( L_OZVRT ) THEN                                         ORH6F404.599    
                  DO ID = 1, N_ZVRT                                        ORH6F404.600    
                     DO I=IS,IE                                            ORH6F404.601    
                        SWZVRT(I,J,ID)=                                    ORH6F404.602    
     &     ((ZCONU(I,J,ID)*DXU(I)+ZCONU(I-1,J,ID)*DXU(I-1))*CS(J )         OMB3F401.161    
     &    -(ZCONU(I,J-1,ID)*DXU(I)+ZCONU(I-1,J-1,ID)*DXU(I-1))*CS(J-1))    OMB3F401.162    
                                                                           OMB3F401.163    
           SWZVRT(I,J,ID)=(((ZCONV(I,J,ID)-ZCONV(I-1,J,ID))*DYU(J  )       OMB3F401.164    
     &            +(ZCONV(I,J-1,ID)-ZCONV(I-1,J-1,ID))*DYU(J-1)            OMB3F401.165    
     &            -SWZVRT(I,J,ID))*DXT2R(I)*DYTR(J))*CSTR(J)               OMB3F401.166    
                     ENDDO ! IS                                            ORH6F404.603    
                  ENDDO ! ID                                               ORH6F404.604    
               ENDIF ! L_OZVRT                                             ORH6F404.605    
            ELSE                                                           ORH6F404.606    
C  ALL VORTICITY PTS. ARE COMPUTED SO THAT THOSE NEEDED FOR THE LINE       ORH1F305.3728   
C  INTEGRAL OF HOLE RELAXATION (IMMEDIATELY ADJACENT TO ISLANDS) WILL      ORH1F305.3729   
C  BE DEFINED.                                                             ORH1F305.3730   
               IS=2                                                        ORH6F404.607    
               IE=IMTM1                                                    ORH6F404.608    
               DO 622 I=IS,IE                                              ORH6F404.609    
            ZTD(I,J)=((ZU(I,J)*DXU(I)+ZU(I-1,J)*DXU(I-1))*CS(J )           ORH6F404.610    
     &          -(ZU(I,J-1)*DXU(I)+ZU(I-1,J-1)*DXU(I-1))*CS(J-1))          ORH1F305.3735   
            ZTD(I,J)=(((ZV(I,J)-ZV(I-1,J))*DYU(J  )                        ORH6F404.611    
     &            +(ZV(I,J-1)-ZV(I-1,J-1))*DYU(J-1)                        ORH1F305.3737   
     &            -ZTD(I,J))*DXT2R(I)*DYTR(J))*CSTR(J)                     ORH1F305.3738   
 622           CONTINUE                                                    ORH6F404.612    
C calculate vorticity contributions for diagnostics                        OMB3F401.170    
               IF ( L_OZVRT ) THEN                                         ORH6F404.613    
                  DO ID = 1, N_ZVRT                                        ORH6F404.614    
                     DO I=IS,IE                                            ORH6F404.615    
                        SWZVRT(I,J,ID)=                                    ORH6F404.616    
     &     ((ZCONU(I,J,ID)*DXU(I)+ZCONU(I-1,J,ID)*DXU(I-1))*CS(J )         OMB3F401.175    
     &    -(ZCONU(I,J-1,ID)*DXU(I)+ZCONU(I-1,J-1,ID)*DXU(I-1))*CS(J-1))    OMB3F401.176    
                                                                           OMB3F401.177    
           SWZVRT(I,J,ID)=(((ZCONV(I,J,ID)-ZCONV(I-1,J,ID))*DYU(J  )       OMB3F401.178    
     &            +(ZCONV(I,J-1,ID)-ZCONV(I-1,J-1,ID))*DYU(J-1)            OMB3F401.179    
     &            -SWZVRT(I,J,ID))*DXT2R(I)*DYTR(J))*CSTR(J)               OMB3F401.180    
                     ENDDO ! IS                                            ORH6F404.617    
                  ENDDO ! ID                                               ORH6F404.618    
               ENDIF ! L_OZVRT                                             ORH6F404.619    
            ENDIF  ! L_OISLANDS = true                                     ORH6F404.620    
                                                                           ORH6F404.621    
 621     CONTINUE                                                          ORH6F404.622    
                                                                           ORH6F404.623    
C                                                                          OMB3F401.186    
C set vorticity diagnostics for cyclic and symmetric boundary conditions   OMB3F401.187    
C                                                                          OMB3F401.188    
         IF ( L_OZVRT ) THEN                                               ORH6F404.624    
C Set  cyclic boundary values for SWZVRT                                   OMB3F401.190    
            IF ( L_OCYCLIC ) THEN                                          ORH6F404.625    
               DO ID = 1,N_ZVRT                                            ORH6F404.626    
                  DO J=J_1,J_JMT                                           ORH6F404.627    
                     SWZVRT(1,J,ID) = SWZVRT(IMTM1,J,ID)                   ORH6F404.628    
                     SWZVRT(IMT,J,ID) = SWZVRT(2,J,ID)                     ORH6F404.629    
                  END DO ! J                                               ORH6F404.630    
               END DO ! ID                                                 ORH6F404.631    
            END IF ! L_OCYCLIC                                             ORH6F404.632    
                                                                           OMB3F401.199    
C  Set symmetric boundary conditions for SWZVRT                            OMB3F401.200    
            IF ( L_OSYMM ) THEN                                            ORH6F404.633    
               DO ID = 1, N_ZVRT                                           ORH6F404.634    
                  DO  I=1,IMT                                              ORH6F404.635    
                      SWZVRT(I,JMT,ID)= - SWZVRT(I,JMTM1,ID)               ORH6F404.636    
                  END DO                                                   ORH6F404.637    
               END DO                                                      ORH6F404.638    
            END IF  !  L_OSYMM                                             ORH6F404.639    
*IF DEF,MPP                                                                OMB2F404.12     
        CALL SWAPBOUNDS(SWZVRT,IMT,JMT,O_EW_HALO,O_NS_HALO,N_ZVRT)         OMB2F404.13     
*ENDIF                                                                     OMB2F404.14     
                                                                           OMB2F404.15     
C                                                                          BLOKCALC.847    
         END IF  !  L_OZVRT                                                ORH6F404.640    
C---------------------------------------------------------------------     BLOKCALC.848    
C  DO ANALYSIS OF EXTERNAL MODE FORCING ON ENERGY TIMESTEP                 BLOKCALC.849    
C---------------------------------------------------------------------     BLOKCALC.850    
C                                                                          BLOKCALC.851    
         DO J = J_2, JIND                                                  ORH6F404.641    
           IF(NERGY.EQ.1) THEN                                             ORH6F404.642    
              DO 630 LL=2,8                                                ORH6F404.643    
                 IF (L_OSYMM) THEN                                         ORH6F404.644    
                    IF(J + J_OFFSET.EQ.JMTM1_GLOBAL) THEN                  ORH6F404.645    
                       DO I=1,IMT                                          ORH6F404.646    
                          ZVENG(I,LL,J)=0.0                                ORH6F404.647    
                       ENDDO                                               ORH6F404.648    
                    ENDIF                                                  ORH6F404.649    
                 ENDIF                                                     ORH6F404.650    
                                                                           ORH6F404.651    
                 DO 630 I=2,IMTM1                                          ORH6F404.652    
                    ENGEXT(LL)=ENGEXT(LL)                                  ORH6F404.653    
     &     -P(I,J)*(((ZVENG(I,LL,J)  -ZVENG(I-1,LL,J  ))*DYU(J)            BLOKCALC.866    
     &              +(ZVENG(I,LL,J-1)-ZVENG(I-1,LL,J-1))*DYU(J-1))         BLOKCALC.867    
     &            *DXT2R(I)*DYTR(J)                                        BLOKCALC.868    
     &   -((ZUENG(I,LL,J)  *DXU(I)+ZUENG(I-1,LL,J)  *DXU(I-1))*CS(J)       BLOKCALC.869    
     &    -(ZUENG(I,LL,J-1)*DXU(I)+ZUENG(I-1,LL,J-1)*DXU(I-1))*CS(J-1))    BLOKCALC.870    
     &            *DYT2R(J)*DXTR(I))*DXT(I)*DYT(J)                         BLOKCALC.871    
 630          CONTINUE                                                     ORH6F404.654    
                                                                           ORH6F404.655    
              FX=CST(J)*DYT(J)/C2DTSF                                      ORH6F404.656    
              ENGTMP=0.                                                    ORH6F404.657    
                                                                           ORH6F404.658    
              DO I=2,IMTM1                                                 ORH6F404.659    
                    ENGTMP   =ENGTMP   -P(I,J)*ZTD(I,J)*FX*DXT(I)          ORH6F404.660    
              ENDDO                                                        ORH6F404.661    
              ENGEXT(1)=ENGEXT(1)+ENGTMP                                   ORH6F404.662    
           ENDIF                                                           ORH6F404.663    
C                                                                          BLOKCALC.880    
C=======================================================================   BLOKCALC.881    
C  END COMPUTATION OF VORTICITY  =======================================   BLOKCALC.882    
C=======================================================================   BLOKCALC.883    
C                                                                          BLOKCALC.884    
           IF (L_OFILTER) THEN                                             ORH6F404.664    
C---------------------------------------------------------------------     BLOKCALC.888    
C   FOURIER FILTER ZTD AT HIGH LATITUDES                                   BLOKCALC.889    
C---------------------------------------------------------------------     BLOKCALC.890    
C                                                                          BLOKCALC.891    
              IF(J+J_OFFSET.EQ.JFU2) GO TO 840                             ORH6F404.665    
                                                                           ORH1F305.3749   
              IF ((J+J_OFFSET.GT.JFU1.AND.J+J_OFFSET.LT.JFU2)              ORH6F404.666    
     &           .OR.J+J_OFFSET.LT.JFRST) GO TO 840                        ORH6F404.667    
              JJ=J+J_OFFSET-JFRST+1                                        ORH6F404.668    
              IF (J+J_OFFSET.GE.JFU2) JJ=JJ-JSKPU+1                        ORH6F404.669    
                                                                           BLOKCALC.898    
              DO 830 L=1,LSEGF                                             ORH6F404.670    
                 IS=ISZF(JJ,L)                                             ORH6F404.671    
                 IF(IS.EQ.0) GO TO 840                                     ORH6F404.672    
                 IE=IEZF(JJ,L)                                             ORH6F404.673    
                 DO II=IS,IE                                               ORH6F404.674    
                    I=MOD(II-2,IMTM2)+2                                    ORH6F404.675    
                    UDIF(II+1-IS)=ZTD(I,J)                                 ORH6F404.676    
                 ENDDO                                                     ORH6F404.677    
                 IM=IE-IS+1                                                ORH6F404.678    
                 IF (.NOT.(L_OCYCLIC)) THEN                                ORH6F404.679    
                    M=1                                                    ORH6F404.680    
                    N=NINT(IM*CST(J)*CSR_JFU0)                             ORH6F404.681    
                 ELSE                                                      ORH6F404.682    
                    IF(IM.NE.IMTM2) THEN                                   ORH6F404.683    
                       M=1                                                 ORH6F404.684    
                       N=NINT(IM*CST(J)*CSR_JFU0)                          ORH6F404.685    
                    ELSE                                                   ORH6F404.686    
                       M=3                                                 ORH6F404.687    
                       N=NINT(IM*CST(J)*CSR_JFU0*.5)                       ORH6F404.688    
                    ENDIF                                                  ORH6F404.689    
                 ENDIF                                                     ORH6F404.690    
                                                                           ORH1F305.3751   
                 CALL FILTR (                                              ORH6F404.691    
*CALL ARGSIZE                                                              BLOKCALC.929    
*CALL ARGOCFIL                                                             BLOKCALC.930    
     & FTARR,                                                              BLOKCALC.931    
     &             UDIF(1),IM,M,N,0)                                       BLOKCALC.932    
                                                                           BLOKCALC.933    
                 DO II=IS,IE                                               ORH6F404.692    
                    I=MOD(II-2,IMTM2)+2                                    ORH6F404.693    
                    ZTD(I,J)=UDIF(II+1-IS)                                 ORH6F404.694    
                 ENDDO                                                     ORH6F404.695    
  830         CONTINUE                                                     ORH6F404.696    
           ENDIF   ! L_OFILTER  = true                                     ORH6F404.697    
                                                                           ORH6F404.698    
  840      CONTINUE                                                        ORH6F404.699    
C                                                                          BLOKCALC.942    
         ENDDO                                                             ORH6F404.700    
                                                                           ORH6F404.701    
      ENDIF ! L_ONOCLIN and L_OFREESFC= false                              ORH6F404.702    
C                                                                          BLOKCALC.946    
C---------------------------------------------------------------------     BLOKCALC.947    
CL  Now accumulate energy totals etc by adding block sub totals            BLOKCALC.948    
C---------------------------------------------------------------------     BLOKCALC.949    
C                                                                          BLOKCALC.950    
CL First, set all cumulative values to zero                                BLOKCALC.952    
C                                                                          BLOKCALC.953    
      EKTOT= 0.0                                                           BLOKCALC.954    
      BUOY = 0.0                                                           ORH0F405.26     
      PLICIN = 0.0                                                         ORH0F405.27     
      PLICEX = 0.0                                                         ORH0F405.28     
      co2_tot = 0.0                                                        BLOKCALC.957    
C                                                                          BLOKCALC.965    
      DO M=1,NT                                                            BLOKCALC.966    
         DTABS(M) = 0.0                                                    BLOKCALC.967    
         TVAR(M) =  0.0                                                    BLOKCALC.968    
      ENDDO     ! Over M                                                   BLOKCALC.972    
C                                                                          BLOKCALC.973    
CL Now add up all values over each block of rows                           BLOKCALC.974    
C                                                                          BLOKCALC.975    
      DO IBLOCK=1,NBLOCK                                                   BLOKCALC.976    
         EKTOT=EKTOT + BLOCK_EKTOT(IBLOCK)                                 BLOKCALC.977    
*IF DEF,MPP                                                                ORH9F402.307    
         ! Global sums of EKTOT, BUOY, CO2_TOT, ENGINT, DTABS, TVAR        ORH9F402.308    
         ! and TTDTOT are not computed in a manner which is bit            ORH9F402.309    
         ! reproducible between runs with differing numbers of PEs.        ORH9F402.310    
         ! This is because these fields are single diagnostic values       ORH9F402.311    
         ! which do not affect model evolution. Mods to allow these        ORH9F402.312    
         ! fields to be reproducible would result in considerable          ORH9F402.313    
         ! extra memory use for very little gain.                          ORH9F402.314    
         CALL GC_RSUMR(1,O_NPROC,INFO,EKTOT)                               ORH9F402.315    
*ENDIF                                                                     ORH9F402.316    
         IF(NERGY.EQ.1) THEN                                               ORH6F404.703    
            BUOY = BUOY + BLOCK_BUOY(IBLOCK)                               ORH6F404.704    
            DO LL = 1,8                                                    ORH6F404.705    
               ENGINT(LL) = ENGINT(LL) + BLOCK_ENGINT(LL,IBLOCK)           ORH6F404.706    
            ENDDO  ! Over LL                                               ORH6F404.707    
*IF DEF,MPP                                                                ORH9F402.317    
            CALL GC_RSUMR(1,O_NPROC,INFO,BUOY)                             ORH6F404.708    
            CALL GC_RSUMR(8,O_NPROC,INFO,ENGINT)                           ORH6F404.709    
*ENDIF                                                                     ORH9F402.319    
         ENDIF                                                             ORH6F404.710    
                                                                           ORH6F404.711    
         IF (L_OCARBON) THEN                                               ORH6F404.712    
            co2_tot = co2_tot + BLOCK_co2_tot(IBLOCK)                      ORH6F404.713    
*IF DEF,MPP                                                                ORH9F402.320    
            CALL GC_RSUMR(1,O_NPROC,INFO,co2_tot)                          ORH6F404.714    
*ENDIF                                                                     ORH9F402.322    
         ENDIF                                                             ORH6F404.715    
C                                                                          BLOKCALC.982    
         DO M=1,NT                                                         BLOKCALC.990    
            DTABS(M) = DTABS(M) + BLOCK_DTABS(M,IBLOCK)                    BLOKCALC.991    
            TVAR(M) = TVAR(M) + BLOCK_TVAR(M,IBLOCK)                       BLOKCALC.992    
            IF(NERGY.EQ.1) THEN                                            ORH6F404.716    
               DO LL = 1,6                                                 ORH6F404.717    
                  TTDTOT(LL,M)=TTDTOT(LL,M) + BLOCK_TTDTOT(LL,M,IBLOCK)    ORH6F404.718    
               ENDDO   ! Over LL                                           ORH6F404.719    
            ENDIF                                                          ORH6F404.720    
         ENDDO      ! Over M                                               BLOKCALC.996    
*IF DEF,MPP                                                                ORH9F402.326    
         CALL GC_RSUMR(NT,O_NPROC,INFO,DTABS)                              ORH9F402.327    
         CALL GC_RSUMR(NT,O_NPROC,INFO,TVAR)                               ORH9F402.328    
         IF (NERGY.EQ.1) THEN                                              ORH9F402.329    
            CALL GC_RSUMR(6*NT,O_NPROC,INFO,TTDTOT)                        ORH9F402.330    
         ENDIF                                                             ORH9F402.331    
*ENDIF                                                                     ORH9F402.332    
      ENDDO         ! Over IBLOCK                                          BLOKCALC.997    
C                                                                          BLOKCALC.998    
C                                                                          BLOKCALC.999    
C---------------------------------------------------------------------     BLOKCALC.1000   
C  PRINT ONE LINE OF TIMESTEP INFORMATION ON SPECIFIED TIMESTEPS           BLOKCALC.1001   
C---------------------------------------------------------------------     BLOKCALC.1002   
C                                                                          BLOKCALC.1003   
      IF(MOD(ITT,NTSI).EQ.0) THEN                                          BLOKCALC.1004   
        EKTOT=EKTOT/VOLUME                                                 BLOKCALC.1005   
        DO M=1,NT                                                          BLOKCALC.1006   
          DTABS(M)=DTABS(M)/VOLUME                                         BLOKCALC.1007   
        ENDDO                                                              BLOKCALC.1008   
        IF (LCAL360) THEN                                                  OFR8F404.16     
          DAYSYR=360                                                       OFR8F404.17     
        ELSE                                                               OFR8F404.18     
          DAYSYR=365.25                                                    OFR8F404.19     
        ENDIF                                                              OFR8F404.20     
        TTYEAR=TTSEC/(3600.*24.*DAYSYR)                                    BLOKCALC.1010   
        TTDAY=TTSEC/(3600.*24.)                                            BLOKCALC.1011   
        TTDAY=MOD(TTDAY,DAYSYR)                                            BLOKCALC.1012   
        IF (O_MYPE.EQ.0) WRITE(6,910) ITT,TTYEAR,TTDAY,EKTOT,              ORH4F404.1      
     &                             DTABS(1),DTABS(2),MSCAN                 ORH9F402.334    
 910    FORMAT(' TS=',I6,'  YEAR=',F7.2,'  DAY=',F5.1,'  ENERGY=',         BLOKCALC.1014   
     *   1PE13.6,'  DTEMP=',1PE13.6,'  DSALT=',1PE13.6,'  SCANS=',I3)      BLOKCALC.1015   
        IF (L_OCARBON) THEN                                                ORH9F402.335    
           fx=12.0e-15*3600.*24.*360.*co2_tot                              ORH9F402.336    
           IF (O_MYPE.EQ.0) THEN                                           ORH9F402.337    
              WRITE(6,*)' Global Net CO2 Flux into ocean (GtC/yr) ',fx     GIE0F403.90     
           ENDIF                                                           ORH9F402.340    
        ENDIF                                                              ORH9F402.341    
      ENDIF                                                                BLOKCALC.1021   
C                                                                          BLOKCALC.1022   
C---------------------------------------------------------------------     BLOKCALC.1023   
C  COMPLETE AND PRINT THE ON-LINE INTEGRALS ON ENERGY TIMESTEPS            BLOKCALC.1024   
C---------------------------------------------------------------------     BLOKCALC.1025   
C                                                                          BLOKCALC.1026   
      IF(NERGY.EQ.0) GO TO 390                                             BLOKCALC.1027   
C                                                                          BLOKCALC.1028   
C  1ST, NORMALIZE PREVIOUSLY COMPUTED INTEGRALS BY VOLUME                  BLOKCALC.1029   
C                                                                          BLOKCALC.1030   
         DO LL=1,8                                                         ORH6F404.721    
            ENGINT(LL)=ENGINT(LL)/VOLUME                                   ORH6F404.722    
            ENGEXT(LL)=ENGEXT(LL)/VOLUME                                   ORH6F404.723    
         ENDDO  ! Over LL                                                  ORH6F404.724    
         DO M=1,NT                                                         ORH6F404.725    
            TVAR(M)=TVAR(M)/VOLUME                                         ORH6F404.726    
            DO LL=1,6                                                      ORH6F404.727    
               TTDTOT(LL,M)=TTDTOT(LL,M)/VOLUME                            ORH6F404.728    
            ENDDO  ! Over LL                                               ORH6F404.729    
         ENDDO    ! Over M                                                 ORH6F404.730    
         BUOY=BUOY/VOLUME                                                  ORH6F404.731    
C                                                                          BLOKCALC.1042   
C  2ND, COMPUTE RESIDUAL TERMS                                             BLOKCALC.1043   
C                                                                          BLOKCALC.1044   
         PLICIN=ENGINT(1)-ENGINT(2)-ENGINT(3)-ENGINT(4)                    ORH6F404.732    
     &         -ENGINT(5)-ENGINT(6)-ENGINT(7)-ENGINT(8)                    ORH6F404.733    
         PLICEX=ENGEXT(1)-ENGEXT(2)-ENGEXT(3)-ENGEXT(4)                    ORH6F404.734    
     &         -ENGEXT(5)-ENGEXT(6)-ENGEXT(7)-ENGEXT(8)                    ORH6F404.735    
         DO M=1,NT                                                         ORH6F404.736    
            TTDTOT(6,M)=TTDTOT(1,M)-TTDTOT(2,M)-TTDTOT(3,M)                ORH6F404.737    
     &                 -TTDTOT(4,M)-TTDTOT(5,M)                            ORH6F404.738    
      ENDDO    ! Over M                                                    BLOKCALC.1052   
C                                                                          BLOKCALC.1053   
C  3RD, PRINT THE INTEGRALS                                                BLOKCALC.1054   
C                                                                          BLOKCALC.1055   
      IF (O_MYPE.EQ.0) THEN                                                ORH9F402.342    
         WRITE(6,9100)                                                     ORH4F404.2      
         WRITE(6,9101) ENGINT(1),ENGEXT(1),TTDTOT(1,1),TTDTOT(1,2)         ORH4F404.3      
         WRITE(6,9102) ENGINT(2),ENGEXT(2),TTDTOT(2,1),TTDTOT(2,2)         ORH4F404.4      
         WRITE(6,9103) ENGINT(3),ENGEXT(3),TTDTOT(3,1),TTDTOT(3,2)         ORH4F404.5      
         WRITE(6,9104) ENGINT(4),ENGEXT(4),TTDTOT(4,1),TTDTOT(4,2)         ORH4F404.6      
         WRITE(6,9105) ENGINT(5),ENGEXT(5),TTDTOT(5,1),TTDTOT(5,2)         ORH4F404.7      
         WRITE(6,9106) ENGINT(6),ENGEXT(6),TTDTOT(6,1),TTDTOT(6,2)         ORH4F404.8      
         WRITE(6,9109) PLICIN,PLICEX,TVAR(1),TVAR(2)                       ORH4F404.9      
         WRITE(6,9107) ENGINT(7),ENGEXT(7)                                 ORH4F404.10     
         WRITE(6,9108) ENGINT(8),ENGEXT(8)                                 ORH4F404.11     
      ENDIF                                                                ORH9F402.353    
 9100 FORMAT( 1X,'WORK BY:              INTERNAL MODE  EXTERNAL MODE',     BLOKCALC.1066   
     &       10X,'                       TEMPERATURE     SALINITY   ')     BLOKCALC.1067   
 9101 FORMAT( 1X,'TIME RATE OF CHANGE ',2(1PE15.6),                        BLOKCALC.1068   
     &       10X,'TIME RATE OF CHANGE ',2(1PE15.6))                        BLOKCALC.1069   
 9102 FORMAT( 1X,'HORIZONTAL ADVECTION',2(1PE15.6),                        BLOKCALC.1070   
     &       10X,'HORIZONTAL ADVECTION',2(1PE15.6))                        BLOKCALC.1071   
 9103 FORMAT( 1X,'VERTICAL ADVECTION  ',2(1PE15.6),                        BLOKCALC.1072   
     &       10X,'VERTICAL ADVECTION  ',2(1PE15.6))                        BLOKCALC.1073   
 9104 FORMAT( 1X,'HORIZONTAL FRICTION ',2(1PE15.6),                        BLOKCALC.1074   
     &       10X,'HORIZONTAL DIFFUSION',2(1PE15.6))                        BLOKCALC.1075   
 9105 FORMAT( 1X,'VERTICAL FRICTION   ',2(1PE15.6),                        BLOKCALC.1076   
     &       10X,'SURFACE FLUX        ',2(1PE15.6))                        BLOKCALC.1077   
 9106 FORMAT( 1X,'PRESSURE FORCES     ',2(1PE15.6),                        BLOKCALC.1078   
     &       10X,'TRUNCATION ERROR    ',2(1PE15.6))                        BLOKCALC.1079   
 9107 FORMAT( 1X,'WORK BY WIND        ',2(1PE15.6))                        BLOKCALC.1080   
 9108 FORMAT( 1X,'BOTTOM DRAG         ',2(1PE15.6))                        BLOKCALC.1081   
 9109 FORMAT( 1X,'IMPLICIT EFFECTS    ',2(1PE15.6),                        BLOKCALC.1082   
     &       10X,'CHANGE OF VARIANCE  ',2(1PE15.6))                        BLOKCALC.1083   
      TVAR(1)=BUOY-ENGINT(6)-ENGEXT(6)                                     BLOKCALC.1084   
      DTABS(1)=ENGINT(2)+ENGINT(3)+ENGEXT(2)+ENGEXT(3)                     BLOKCALC.1085   
      IF (O_MYPE.EQ.0) WRITE(6,9110) BUOY,TVAR(1),DTABS(1)                 ORH4F404.12     
 9110 FORMAT( 1X,'WORK BY BUOYANCY FORCES  ',1PE15.6,                      BLOKCALC.1087   
     &        5X,'ENERGY CONVERSION ERROR  ',1PE15.6,                      BLOKCALC.1088   
     &        5X,'NONLINEAR EXCHANGE ERROR ',1PE15.6)                      BLOKCALC.1089   
C                                                                          BLOKCALC.1090   
C---------------------------------------------------------------------     BLOKCALC.1091   
C  PRINT THE NORTHWARD TRANSPORT OF HEAT AND SALT                          BLOKCALC.1092   
C---------------------------------------------------------------------     BLOKCALC.1093   
C                                                                          BLOKCALC.1094   
      IF (.NOT.(L_OHMEAD)) THEN                                            ORH1F305.3761   
         IF (O_MYPE.EQ.0) WRITE(6,8195)                                    ORH6F404.739    
 8195 FORMAT(/,' NORTHWARD TRANSPORT OF HEAT (X10**15 WATTS)',24X,'NORTH   BLOKCALC.1097   
     &WARD TRANSPORT OF SALT (X10**10 CM**3/SEC)',/,6X,'X MEAN  X EDDY     BLOKCALC.1098   
     &Z MEAN  Z EDDY   EKMAN TOT ADV  DIFFUS   TOTAL   X MEAN  X EDDY  Z   BLOKCALC.1099   
     & MEAN  Z EDDY   EKMAN TOT ADV  DIFFUS   TOTAL')                      BLOKCALC.1100   
C                                                                          BLOKCALC.1101   
C  CONVERT HEAT TRANSPORT TO PETAWATTS, SALT TRNSPT TO 10**10 CM**3/SEC    BLOKCALC.1102   
C                                                                          BLOKCALC.1103   
         DO J = J_1, J_JMT                                                 ORH6F404.740    
            DO LL=1,8                                                      ORH6F404.741    
               TTN(LL,J,1)=TTN(LL,J,1)*4.186E-15                           ORH6F404.742    
               TTN(LL,J,2)=TTN(LL,J,2)*1.E-10                              ORH6F404.743    
            ENDDO   ! Over LL                                              ORH6F404.744    
         ENDDO      ! Over J                                               ORH6F404.745    
         DO JJ = J_2, J_JMTM2                                              ORH6F404.746    
           J=JMT-JJ                                                        ORH6F404.747    
           WRITE(6,8196)J+J_OFFSET,(TTN(I,J,1),I=1,8),(TTN(I,J,2),I=1,8)   ORH6F404.748    
 8196      FORMAT(I4,8F8.3,1X,8F8.3)                                       ORH6F404.749    
         ENDDO      ! Over JJ                                              ORH6F404.750    
      ENDIF                                                                ORH1F305.3762   
      WRITE(6,8194)                                                        ORH4F404.13     
 8194 FORMAT(/,' MERIDIONAL MASS TRANSPORT')                               BLOKCALC.1117   
      SCL=1.E12                                                            BLOKCALC.1118   
      CALL MATRIX(TMT,JMT,J_1,J_JMT,0,KM,SCL,J_OFFSET,0)                   ORH4F404.81     
 390  CONTINUE                                                             BLOKCALC.1120   
C                                                                          BLOKCALC.1121   
      IF (L_OTIMER) CALL TIMER('BLOKCALC ',4)                              ORH1F305.3763   
      RETURN                                                               BLOKCALC.1125   
      END                                                                  BLOKCALC.1126   
*ENDIF                                                                     BLOKCALC.1127