*IF DEF,OCEAN                                                              ORH1F305.441    
                                                                           ORH1F305.442    
C ******************************COPYRIGHT******************************    GTS2F400.3925   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3926   
C                                                                          GTS2F400.3927   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3928   
C restrictions as set forth in the contract.                               GTS2F400.3929   
C                                                                          GTS2F400.3930   
C                Meteorological Office                                     GTS2F400.3931   
C                London Road                                               GTS2F400.3932   
C                BRACKNELL                                                 GTS2F400.3933   
C                Berkshire UK                                              GTS2F400.3934   
C                RG12 2SZ                                                  GTS2F400.3935   
C                                                                          GTS2F400.3936   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3937   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3938   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3939   
C Modelling at the above address.                                          GTS2F400.3940   
C ******************************COPYRIGHT******************************    GTS2F400.3941   
C                                                                          GTS2F400.3942   
C*LL                                                                       HNYCAL.3      
CLL   Subroutine HNYCAL                                                    HNYCAL.4      
CLL   Can run on any FORTRAN 77 compiler with long lower case variables    HNYCAL.5      
CLL                                                                        HNYCAL.6      
CLL   The code must be pre-compiled by the UPDOC system.                   HNYCAL.7      
CLL   Option V selects relaxation to climatological T & S..                HNYCAL.8      
CLL   Option A indicates that the Unified Model version is to be used.     HNYCAL.9      
CLL   The default is the COX standard code.                                HNYCAL.10     
CLL                                                                        HNYCAL.11     
CLL   Author: S J Foreman                                                  HNYCAL.12     
CLL   Date: 9 February 1990                                                HNYCAL.13     
CLL   Reviewer: J O S Alves                                                HNYCAL.14     
CLL   Review date: 24 July 1990                                            HNYCAL.15     
CLL                                                                        HNYCAL.16     
CLL   Version 1.01 date 3 August 1992                                      HNYCAL.17     
CLL   Modified to alter sea-ice flux correction scheme                     HNYCAL.18     
CLL   Version 3.4 4/8/94 Ice depth haney forcing separated from            OJT0F304.76     
CLL                      SST/SSS haney forcing and *DEFs tidied. (JFT)     OJT0F304.77     
CLL                                                                        HNYCAL.19     
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.5630   
CLL   Programming standards use Cox naming convention for Cox variables    HNYCAL.20     
CLL      with the addition that lower case variables are local to the      HNYCAL.21     
CLL      routine.                                                          HNYCAL.22     
CLL      Otherwise follows UM doc paper 4 version 1.                       HNYCAL.23     
CLL                                                                        HNYCAL.24     
CLL   This forms part of UM brick P4.                                      HNYCAL.25     
CLL                                                                        HNYCAL.26     
CLL   This routine increments the non-penetrative heat and fresh water     HNYCAL.27     
CLL   fluxes with a relaxation towards externally specified values.        HNYCAL.28     
CLL                                                                        HNYCAL.29     
CLL   Programming: Brick P4, paper 4, version number 1.                    HNYCAL.30     
CLL                                                                        HNYCAL.31     
CLL   Subroutine dependencies: NONE                                        HNYCAL.32     
CLL                                                                        HNYCAL.33     
CLLEND   ---------------------------------------------------------------   HNYCAL.34     
C*                                                                         HNYCAL.35     
C*L   -------------------------- Arguments ----------------------------    HNYCAL.36     
C                                                                          HNYCAL.37     

      SUBROUTINE HNYCAL (T,                                                 1HNYCAL.38     
     +                     HTN, PME, QFLUX, SFLUX,                         HNYCAL.39     
     +                     T_REF, S_REF,                                   HNYCAL.40     
     +                     IMT,KM,NT,                                      HNYCAL.41     
     +                     HANEY_SI, SPECIFIC_HEAT_SI,                     HNYCAL.42     
     +                     HICE,HICE_REF,QFUSION,RHO,DZ1,                  HNYCAL.45     
     +                     ANOM_HEAT, ANOM_SALT                            HNYCAL.48     
     +                    ,anomiceh                                        HNYCAL.51     
     +      ,salref)                                                       OJL1F405.95     
C                                                                          HNYCAL.55     
      IMPLICIT NONE                                                        HNYCAL.56     
C                                                                          HNYCAL.57     
*CALL CNTLOCN                                                              ORH1F305.5631   
*CALL OARRYSIZ                                                             ORH1F305.5632   
C     Define constants for array sizes                                     HNYCAL.58     
C                                                                          HNYCAL.59     
      INTEGER                                                              HNYCAL.60     
     +   IMT               ! IN  Number of points in horizontal            HNYCAL.61     
     +,  KM                ! IN  Number of points in vertical              HNYCAL.62     
     +,  NT                ! IN  Number of tracers                         HNYCAL.63     
C                                                                          HNYCAL.64     
C     Physical arguments                                                   HNYCAL.65     
C                                                                          HNYCAL.66     
      REAL                                                                 HNYCAL.67     
     +   T (IMT, KM, NT)   ! IN  Tracer values                             HNYCAL.68     
     +,  HTN (IMT)         ! IN  Non-penetrating heat flux (W/m2)          HNYCAL.74     
     +,  PME (IMT)         ! IN  Precip less evap (Kg/m2/s)                HNYCAL.75     
     +,  QFLUX (IMT)       ! OUT Modified non-penetrating heat flux        HNYCAL.76     
     +,  SFLUX (IMT)       ! OUT Modified precip less evap (Kg/m2/s)       HNYCAL.77     
     +,  T_REF (IMT)       ! IN  Reference temperature (Celsius)           HNYCAL.78     
     +,  S_REF (IMT)       ! IN  Reference salinity ((ppt-35)/1000)        HNYCAL.79     
     +,  HANEY_SI          ! IN  Relaxation as W/m2/K.                     HNYCAL.86     
     +,  SPECIFIC_HEAT_SI  ! IN  Specific heat capacity (J/kg/K)           HNYCAL.87     
     +,  ANOM_HEAT (IMT)   ! OUT Heating anomaly (W/m2)                    HNYCAL.88     
     +,  ANOM_SALT (IMT)   ! OUT P-E anomaly (Kg/m2/s)                     HNYCAL.89     
     &,  HICE(IMT_IHY)     ! IN  Ice depth (grid box average)              ORH1F305.5633   
     &,  HICE_REF(IMT_IHY) ! IN  CLIMATOLOGICAL ice depth                  ORH1F305.5634   
     &,  anomiceh(IMT_IHY) ! OUT Ocean to ice Haney flux                   ORH1F305.5635   
     &,  QFUSION           ! IN Latent heat of fusion of ice (j kg-1)      ORH1F305.5636   
     &,  RHO               ! IN Density of sea-water (kg m-3)              ORH1F305.5637   
     &,  DZ1               ! IN Top layer depth (cm)                       ORH1F305.5638   
!                                                                          ORH1F305.5639   
!                                                                          ORH1F305.5640   
C*                                                                         HNYCAL.97     
C                                                                          HNYCAL.98     
C     Locally defined variables                                            HNYCAL.99     
C                                                                          HNYCAL.100    
      INTEGER                                                              HNYCAL.101    
     +   i              !  Horizontal loop index                           HNYCAL.102    
C                                                                          HNYCAL.103    
      REAL                                                                 HNYCAL.104    
     +   haney_salt     !  Equivalent relaxation for salinity              HNYCAL.105    
     +,  t1             !  Thermodynamic temp                              OJT0F304.84     
     +,  hcap1          !  Heat capacity of top layer (J m-2 k-1)          HNYCAL.108    
     +,  const          !  Factor to convert ice depth to thermodynamic    HNYCAL.109    
     +,  rhoice         !  Density of ice (kg m-3)                         HNYCAL.110    
     +,  rhocp          !  Vol. heat capacity of sea-water (j m-3 k-1)     HNYCAL.111    
     +,  dz1z           !  Top layer depth (m)                             HNYCAL.112    
     +,  tref           !  Reference thermodynamic temp                    HNYCAL.113    
     +,  HANEYI_SI      !  Haney forcing coeff for sea-ice                 HNYCAL.119    
        real salref                                                        OJL1F405.96     
C                                                                          OJT0F304.86     
      PARAMETER(rhoice=900.0)                                              HNYCAL.125    
C                                                                          HNYCAL.128    
CL    1.1   Define conversion factors                                      HNYCAL.129    
C                                                                          HNYCAL.130    
C        Temperature relaxation to salinity relaxation (in m/s)            HNYCAL.131    
        haney_salt = -HANEY_SI/SPECIFIC_HEAT_SI                            HNYCAL.132    
C                                                                          HNYCAL.133    
C                                                                          HNYCAL.134    
      IF (L_IHANEY) THEN                                                   ORH1F305.5641   
        dz1z=0.01*DZ1                                                      HNYCAL.137    
        rhocp=RHO*SPECIFIC_HEAT_SI                                         HNYCAL.138    
        hcap1=rhocp*dz1z                                                   HNYCAL.139    
        const=rhoice*QFUSION/hcap1                                         HNYCAL.140    
        HANEYI_SI=HANEY_SI                                                 HNYCAL.141    
      ENDIF                                                                ORH1F305.5642   
C                                                                          HNYCAL.144    
CL    2.1   Calculate and add anomalies                                    HNYCAL.145    
C                                                                          HNYCAL.146    
      DO 2100, i = 1, IMT                                                  HNYCAL.147    
C  Calculate reference and actual ice equivalent heat content, for         HNYCAL.148    
C  thermodynamic relaxation of ice (if present)                            HNYCAL.149    
      IF (L_IHANEY) THEN                                                   ORH1F305.5643   
         tref=-const*HICE_REF(i)                                           HNYCAL.152    
         t1=-const*HICE(i)                                                 HNYCAL.153    
      ENDIF                                                                ORH1F305.5644   
C                                                                          HNYCAL.156    
C  Do Haney forcing on thermodynamic ice and SST                           HNYCAL.157    
         ANOM_HEAT(i) = HANEY_SI*(T_REF(i) - T(i,1,1))                     HNYCAL.158    
      IF (L_IHANEY) THEN                                                   ORH1F305.5645   
         anomiceh(i)  = HANEYI_SI*(tref-t1)                                HNYCAL.161    
      ENDIF                                                                ORH1F305.5646   
         QFLUX(i) = HTN(i) + ANOM_HEAT(i)                                  HNYCAL.164    
         ANOM_SALT(i) = haney_salt*(S_REF(i) - T(i,1,2))                   HNYCAL.165    
C  Divide Haney term by actual (NOT reference) salinity                    HNYCAL.166    
C  (this cancels out in SFCADD)                                            HNYCAL.167    
           if (L_REFSAL) then                                              OJL1F405.97     
              ANOM_SALT(I)=ANOM_SALT(I)/salref                             OJL1F405.98     
           else                                                            OJL1F405.99     
              ANOM_SALT(I)=ANOM_SALT(I)/(0.035+T(I,1,2))                   OJL1F405.100    
           endif                                                           OJL1F405.101    
         SFLUX(i) = PME(i) + ANOM_SALT(i)                                  HNYCAL.169    
 2100 CONTINUE                                                             HNYCAL.170    
      IF (L_OCYCLIC) THEN                                                  ORH1F305.5647   
C                                                                          HNYCAL.173    
CL    3.1   Wrap-around points for diagnostics                             HNYCAL.174    
C                                                                          HNYCAL.175    
      anom_heat(1) = anom_heat(IMT-1)                                      HNYCAL.176    
      anom_heat(IMT) = anom_heat(2)                                        HNYCAL.177    
      anom_salt(1) = anom_salt(IMT-1)                                      HNYCAL.178    
      anom_salt(IMT) = anom_salt(2)                                        HNYCAL.179    
      ENDIF                                                                ORH1F305.5648   
C                                                                          HNYCAL.182    
CL    Return from HNYCAL                                                   HNYCAL.183    
C                                                                          HNYCAL.184    
      RETURN                                                               HNYCAL.185    
      END                                                                  HNYCAL.186    
*ENDIF                                                                     HNYCAL.187