*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.37SUBROUTINE 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