*IF DEF,SEAICE,OR,DEF,S40_1A                                               SJC0F305.14     
C ******************************COPYRIGHT******************************    GTS2F400.10999  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.11000  
C                                                                          GTS2F400.11001  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.11002  
C restrictions as set forth in the contract.                               GTS2F400.11003  
C                                                                          GTS2F400.11004  
C                Meteorological Office                                     GTS2F400.11005  
C                London Road                                               GTS2F400.11006  
C                BRACKNELL                                                 GTS2F400.11007  
C                Berkshire UK                                              GTS2F400.11008  
C                RG12 2SZ                                                  GTS2F400.11009  
C                                                                          GTS2F400.11010  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.11011  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.11012  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.11013  
C Modelling at the above address.                                          GTS2F400.11014  
C ******************************COPYRIGHT******************************    GTS2F400.11015  
C                                                                          GTS2F400.11016  
C*LL                                                                       UV_TO_H.3      
CLL   SUBROUTINE UV_TO_H                                                   UV_TO_H.4      
CLL   -------------------                                                  UV_TO_H.5      
CLL                                                                        UV_TO_H.6      
CLL   DYNAMIC SEA ICE MODEL SUBROUTINE TO INTERPOLATE ARAKAWA B GRID       UV_TO_H.7      
CLL   VELOCITY POINTS TO MASS POINTS.                                      UV_TO_H.8      
CLL                                                                        UV_TO_H.9      
CLL   IT CAN BE COMPILED BY CFT77, BUT DOES NOT CONFORM TO ANSI            UV_TO_H.10     
CLL   FORTRAN77 STANDARDS, BECAUSE OF THE INLINE COMMENTS.                 UV_TO_H.11     
CLL                                                                        UV_TO_H.12     
CLL   ALL QUANTITIES IN THIS ROUTINE ARE IN S.I. UNITS UNLESS              UV_TO_H.13     
CLL   OTHERWISE STATED.                                                    UV_TO_H.14     
CLL                                                                        UV_TO_H.15     
CLL   WRITTEN BY J.F.THOMSON (20/05/93)                                    UV_TO_H.16     
CLL                                                                        UV_TO_H.17     
CLL  MODEL            MODIFICATION HISTORY:                                UV_TO_H.18     
CLL VERSION  DATE                                                          UV_TO_H.19     
CLL 3.4      6/94  Generalise for use by SLAB ice dynamics. J.Thomson      SJT1F304.1087   
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.5376   
!     4.3    01.02.97   Correct indices on data_h. R.Hill                  ORH3F403.83     
CLL                                                                        UV_TO_H.20     
CLL   THIS ROUTINE FORMS PART OF SYSTEM COMPONENT P4.                      UV_TO_H.21     
CLL                                                                        UV_TO_H.22     
CLL   ADHERES TO THE STANDARDS OF DOCUMENTATION PAPER 4, VERSION 1.        UV_TO_H.23     
CLL                                                                        UV_TO_H.24     
CLLEND---------------------------------------------------------------      UV_TO_H.25     
C*L                                                                        UV_TO_H.26     

      subroutine uv_to_h(                                                   5,2UV_TO_H.27     
*CALL ARGOINDX                                                             ORH7F402.200    
     & data_uv                                                             UV_TO_H.28     
     &,data_h                                                              UV_TO_H.29     
     &,imt,jmt,jmtm1                                                       UV_TO_H.30     
     & )                                                                   UV_TO_H.31     
C                                                                          UV_TO_H.32     
      implicit none                                                        UV_TO_H.33     
C                                                                          UV_TO_H.34     
*CALL CNTLOCN                                                              ORH1F305.5377   
*CALL TYPOINDX                                                             ORH7F402.201    
!                                                                          ORH1F305.5378   
      integer                                                              UV_TO_H.35     
     & jmt               ! in number of rows on mass grid.                 UV_TO_H.36     
     &,jmtm1             ! in number of rows on velocity grid.             UV_TO_H.37     
     &,imt               ! in number of points in each mass row.           UV_TO_H.38     
      real                                                                 UV_TO_H.39     
     & data_uv(imt,jmtm1)! in  data on B grid velocity points.             UV_TO_H.40     
     &,data_h(imt,jmt)   ! out data on mass grid                           UV_TO_H.41     
C                                                                          UV_TO_H.42     
C variables local to this subroutine are now defined                       UV_TO_H.43     
C                                                                          UV_TO_H.44     
      integer                                                              UV_TO_H.45     
     & i                                                                   UV_TO_H.46     
     &,j                                                                   UV_TO_H.47     
     &,imtm1                                                               UV_TO_H.48     
C*                                                                         UV_TO_H.49     
C start executable code                                                    UV_TO_H.50     
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.42     
C=====================================================================     ORH4F402.192    
C CALL TO SWAPBOUNDS FOR HALO UPDATE IN MPP VERSION                        ORH4F402.193    
C=====================================================================     ORH4F402.194    
                                                                           ORH4F402.195    
      CALL SWAPBOUNDS(DATA_UV,IMT,JMTM1,O_EW_HALO,O_NS_HALO,1)             ORH4F402.196    
                                                                           ORH4F402.197    
*ENDIF                                                                     ORH4F402.198    
                                                                           ORH4F402.199    
C                                                                          UV_TO_H.51     
      imtm1 = imt - 1                                                      UV_TO_H.52     
C                                                                          UV_TO_H.53     
C Interpolate velocitiy field.                                             UV_TO_H.54     
C                                                                          UV_TO_H.55     
      do j=J_2,J_jmtm1                                                     ORH3F402.410    
        do i=2,imt                                                         UV_TO_H.57     
          data_h(i,j) = (data_uv(i-1,j-1)+data_uv(i,j-1)+data_uv(i-1,j)    UV_TO_H.58     
     &                   + data_uv(i,j) ) * 0.25                           UV_TO_H.59     
        end do                                                             UV_TO_H.60     
      end do                                                               UV_TO_H.61     
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.43     
      IF (JST.LE.1.AND.JFIN.GE.1) THEN                                     ORH3F402.412    
*ENDIF                                                                     ORH3F402.413    
      do i=2,imt                                                           UV_TO_H.62     
        data_h(i,1) = ( data_uv(i-1,1) + data_uv(i,1) ) * 0.5              UV_TO_H.63     
      end do                                                               UV_TO_H.64     
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.44     
      ENDIF                                                                ORH3F402.415    
*ENDIF                                                                     ORH3F402.416    
      IF (L_OCYCLIC) THEN                                                  ORH1F305.5379   
C                                                                          UV_TO_H.74     
C Make cyclic if necessary.                                                UV_TO_H.75     
C                                                                          UV_TO_H.76     
      do j=J_1,J_jmtm1                                                     ORH3F402.417    
        data_h(1,j)   = data_h(imtm1,j)                                    UV_TO_H.78     
        data_h(imt,j) = data_h(2,j)                                        UV_TO_H.79     
      end do                                                               UV_TO_H.80     
      ELSE                                                                 ORH1F305.5380   
*IF DEF,SLAB,AND,DEF,GLOBAL                                                SJT1F304.1090   
C For atmosphere model cyclic conditions.                                  SJT1F304.1091   
      do j=2,jmtm1                                                         SJT1F304.1092   
          data_h(1,j) = (data_uv(imt,j-1)+data_uv(1,j-1)+data_uv(imt,j)    SJT1F304.1093   
     &                   + data_uv(1,j) ) * 0.25                           SJT1F304.1094   
      end do                                                               SJT1F304.1095   
      data_h(1,1)   = data_uv(1,1)                                         SJT1F304.1096   
*ELSE                                                                      SJT1F304.1097   
C                                                                          SJT1F304.1098   
C For non-cyclic boundary conditions, deal with boundaries.                SJT1F304.1099   
C                                                                          SJT1F304.1100   
      do j=J_2,J_jmtm1                                                     ORH3F402.418    
        data_h(1,j)   = ( data_uv(1,j-1) + data_uv(1,j) ) * 0.5            SJT1F304.1102   
      end do                                                               SJT1F304.1103   
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.45     
      IF (JST.LE.1.AND.JFIN.GE.1) THEN                                     ORH3F402.420    
*ENDIF                                                                     ORH3F402.421    
        data_h(1,1)   = data_uv(1,1)                                       SJT1F304.1104   
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.46     
      ENDIF                                                                ORH3F402.423    
*ENDIF                                                                     ORH3F402.424    
*ENDIF                                                                     SJT1F304.1105   
      ENDIF                                                                ORH1F305.5381   
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.47     
      ! If rows JMTM1_GLOBAL and JMT_GLOBAL are not on the same            ORH3F402.426    
      ! processor, we must send JMTM1_GLOBAL to the process                ORH3F402.427    
      ! dealing with JMT_GLOBAL. Use SWAPBOUNDS to do this for now.        ORH3F402.428    
      CALL SWAPBOUNDS (data_h,IMT,JMT,O_EW_Halo,O_NS_Halo,1)               ORH3F402.429    
                                                                           ORH3F402.430    
      IF (JST.LE.JMT_GLOBAL.AND.JFIN.GE.JMT_GLOBAL) THEN                   ORH3F402.431    
*ENDIF                                                                     ORH3F402.432    
      do i=1,imt                                                           UV_TO_H.82     
       data_h(i,J_jmt) = data_h(i,J_jmtm1)                                 ORH3F403.84     
      end do                                                               UV_TO_H.84     
*IF DEF,MPP,AND,-DEF,SLAB                                                  SCH0F405.48     
      ENDIF                                                                ORH3F402.434    
*ENDIF                                                                     ORH3F402.435    
C                                                                          UV_TO_H.85     
      return                                                               UV_TO_H.86     
      end                                                                  UV_TO_H.87     
*ENDIF                                                                     UV_TO_H.88