*IF DEF,SEAICE                                                             FREEZEUP.2      
C ******************************COPYRIGHT******************************    GTS2F400.3169   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3170   
C                                                                          GTS2F400.3171   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3172   
C restrictions as set forth in the contract.                               GTS2F400.3173   
C                                                                          GTS2F400.3174   
C                Meteorological Office                                     GTS2F400.3175   
C                London Road                                               GTS2F400.3176   
C                BRACKNELL                                                 GTS2F400.3177   
C                Berkshire UK                                              GTS2F400.3178   
C                RG12 2SZ                                                  GTS2F400.3179   
C                                                                          GTS2F400.3180   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3181   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3182   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3183   
C Modelling at the above address.                                          GTS2F400.3184   
C ******************************COPYRIGHT******************************    GTS2F400.3185   
C                                                                          GTS2F400.3186   
C*LL                                                                       FREEZEUP.3      
CLL   SUBROUTINE FREEZEUP                                                  FREEZEUP.4      
CLL   -------------------                                                  FREEZEUP.5      
CLL   THIS ROUTINE IMPOSES A MINIMUM TEMPERATURE OF FREEZING AT ALL        FREEZEUP.6      
CLL   LEVELS, AND STORES NEGATIVE HEAT FLUXES RELEASED BY THIS IN THE      FREEZEUP.7      
CLL   ARRAY CARYHEAT, FOR THE ICE MODEL. IT ALSO IDENTIFIES ICE-FREE       FREEZEUP.8      
CLL   PLACES WHERE ICE IS ABOUT TO FORM, AND SETS NEWICE TO TRUE AT        FREEZEUP.9      
CLL   SUCH PLACES. IT IS CALLED FROM WITHIN TRACER, AFTER THE TRACER       FREEZEUP.10     
CLL   FIELDS HAVE BEEN UPDATED BUT BEFORE FILTERING.                       FREEZEUP.11     
CLL   IT CAN BE COMPILED BY ANY FORTRAN COMPILER WHICH TOLERATES           FREEZEUP.12     
CLL   IN-LINE COMMENTS.                                                    FREEZEUP.13     
CLL   AUTHOR: D L ROBERTS                                                  FREEZEUP.14     
CLL   DATE: 22/10/90                                                       FREEZEUP.15     
CLL   REVIEWED BY: J F THOMPSON                                            FREEZEUP.16     
CLL   VERSION 1.3                                                          FREEZEUP.17     
CLL   REVISED: 7/2/91 BY J F THOMSON                                       FREEZEUP.18     
CLL            STORES HEAT NOT HEAT FLUX FOR ICE MODEL.                    FREEZEUP.19     
CLL            SATISFIES ENERGY CONSERVATION.                              FREEZEUP.20     
CLL            ALSO MODIFIED TO CALCULATE DENSITY CHANGE AND ADD           FREEZEUP.21     
CLL            IT TO THAT FROM ICEFLUX FOR MIXED LAYER MODEL.              FREEZEUP.22     
CLL   REVISED: 30/6/92 BY J F THOMSON                                      FREEZEUP.23     
CLL            REVERTS TO VERSION 1.1 STORING HEAT FLUX IN CARYHEAT        FREEZEUP.24     
CLL   REVISED:11/8/92 BY N K TAYLOR                                        FREEZEUP.25     
CLL   REVISED: O. Alves 12/12/93 add OSKIPLND option to STATE routines     JA121293.383    
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.321    
CLL Version 4.0 7.7.95 Diagnose any heat supplied to the bottom layer to   OJG0F400.72     
CLL   avoid freezing in HEATSINK. (J. Murphy, mod. coded by J. Gregory)    OJG0F400.73     
!   4.4  15/08/97  Remove SKIPLAND code. R. Hill                           ORH7F404.69     
CLL   RESETS TEMPERATURES AT ALL LEVELS (EXCEPT THE BOTTOM-MOST), BUT      FREEZEUP.26     
CLL  ONLY PASSES THE IMPLIED HEAT TO THE ICE MODEL FOR LEVEL 1. AT LOWER   FREEZEUP.27     
CLL  LEVELS THIS HEAT IS USED TO COOL THE LEVEL IMMEDIATELY BELOW (IN      FREEZEUP.28     
CLL     ORDER TO CONSERVE HEAT).  THIS IS TO PREVENT TEMPERATURES          FREEZEUP.29     
CLL     BELOW FREEZING BEING TRIGGERED BY NUMERICAL PROBLEMS WITH          FREEZEUP.30     
CLL     THE ADVECTION SCHEME, ISOPYCNAL DIFFUSION AND FILTERING.           FREEZEUP.31     
CLL   PROGRAMMING STANDARDS USE COX NAMING CONVENTION FOR COX VARIABLES    FREEZEUP.32     
CLL   OTHERWISE FOLLOWS UM DOC PAPER 4 VERSION 1.                          FREEZEUP.33     
CLL   THIS FORMS PART OF SYSTEM COMPONENT P4.                              FREEZEUP.34     
C*    ---------------------------------------------------------------      FREEZEUP.35     
C*L                                                                        FREEZEUP.36     

      SUBROUTINE FREEZEUP(TA,ICY,NEWICE,CARYHEAT,IMT,KM,NT,FM,              2,2FREEZEUP.37     
     & HEATSINK,                                                           OJG0F400.74     
     & J,JMT,                                                              ORH7F404.70     
     +                DRHOICE,                                             FREEZEUP.40     
     & IMT_MIX_ARG,KM_MIX_ARG,                                             ORH1F305.322    
     +                    DZ,C2DTTS,CSUBP,RHOWATER,TFREEZE)                FREEZEUP.43     
C                                                                          FREEZEUP.44     
      IMPLICIT NONE                                                        FREEZEUP.45     
C                                                                          FREEZEUP.46     
*CALL CNTLOCN                                                              ORH1F305.323    
*CALL OARRYSIZ                                                             ORH1F305.324    
      INTEGER                                                              FREEZEUP.47     
     + IMT,           ! IN  NUMBER OF COLUMNS.                             FREEZEUP.48     
     + KM,            ! IN  NUMBER OF LAYERS.                              FREEZEUP.49     
     + NT             ! IN  NUMBER OF TRACERS.                             FREEZEUP.50     
     &,IMT_MIX_ARG ! IMT_MIX through arg list                              ORH1F305.325    
     &,KM_MIX_ARG  ! KM_MIX through arg list                               ORH1F305.326    
     &,JMT         ! IN No of rows                                         JA121293.389    
     &,J           ! IN ROW NUMBER                                         JA121293.390    
C                                                                          FREEZEUP.51     
      LOGICAL                                                              FREEZEUP.52     
     + ICY(IMT),      ! IN TRUE WHERE SEA-ICE EXISTS AT PRESENT.           FREEZEUP.53     
     + NEWICE(IMT)    ! OUT TRUE WHERE ICE DOES NOT YET EXIST BUT IS       FREEZEUP.54     
     +                !     ABOUT TO FORM.                                 FREEZEUP.55     
C                                                                          FREEZEUP.56     
      REAL                                                                 FREEZEUP.57     
     + TA(IMT,KM,NT), ! INOUT TRACER ARRAY.                                FREEZEUP.58     
     + CARYHEAT(IMT), ! OUT THIS ARRAY IS ZERO EXCEPT AT PLACES WHERE      FREEZEUP.59     
     +                !  ICE IS ABOUT TO FORM, WHERE IT CONTAINS THE       FREEZEUP.60     
     +                !  (NEGATIVE) HEAT FLUX THAT WILL BE CONVERTED       FREEZEUP.61     
     +                !  TO AN INITIAL ICE DEPTH IN ICEFLOE.               FREEZEUP.62     
     + HEATSINK(IMT), ! OUT Heat 'lost' when T set to TFREEZE at bottom    OJG0F400.75     
     +                !  model level                                       OJG0F400.76     
     + DZ(KM),        ! IN LAYER THICKNESSES, IN CM.                       FREEZEUP.63     
     +                !  IF VARIABLE TIMESTEP WITH DEPTH IS BEING USED,    FREEZEUP.66     
     +                !  THE CALL TO FREEZEUP HAS RZ INSTEAD OF DZ.        FREEZEUP.67     
     + FM(IMT,KM),    ! IN MASKING ARRAY FOR TRACER POINTS: EQUALS 1.0     FREEZEUP.70     
     +                !  AT OCEAN POINTS AND 0.0 AT LAND/SEABED POINTS.    FREEZEUP.71     
     + C2DTTS,        ! IN TWICE THE TRACER TIMESTEP AT THE SURFACE        FREEZEUP.72     
     +                !  LEVEL, EXCEPT ON A FORWARD TIMESTEP WHEN IT IS    FREEZEUP.73     
     +                !  EQUAL TO THE TRACER TIMESTEP.                     FREEZEUP.74     
     + CSUBP,         ! IN SPECIFIC HEAT CAPACITY, IN J/(K*KG).            FREEZEUP.75     
     + RHOWATER,      ! IN DENSITY OF SEA WATER, IN KG/M**3.               FREEZEUP.76     
     + TFREEZE        ! IN FREEZING POINT OF SEA-WATER, IN CELSIUS.        FREEZEUP.77     
C                                                                          FREEZEUP.80     
      REAL DRHOICE(IMT_ICE_MIX) ! OUT DENSITY CHANGE AT SURFACE DUE TO     ORH1F305.330    
     +                  !     ICE-OCEAN FLUXES, FOR MIXED LAYER MODEL.     FREEZEUP.82     
C                                                                          FREEZEUP.83     
      EXTERNAL STATED                                                      FREEZEUP.84     
C*                                                                         FREEZEUP.87     
C     LOCAL VARIABLES.                                                     FREEZEUP.88     
C                                                                          FREEZEUP.89     
      INTEGER I       ! LOOP COUNTER FOR COLUMNS.                          FREEZEUP.90     
      INTEGER K       ! LOOP COUNTER FOR LEVELS.                           FREEZEUP.91     
      REAL CONFLUX    ! CONVERSION FACTOR FROM TEMP. TO W/(M**2.cm.K)      FREEZEUP.92     
     +,RHO1(IMT_MIX_ARG,KM_MIX_ARG) ! SURF DNSTY BEFORE TRACERS UPDATED    ORH1F305.331    
     +,RHO2(IMT_MIX_ARG,KM_MIX_ARG) ! SURF DNSTY AFTER TRACERS UPDATED     ORH1F305.332    
     +,WORK1(IMT_MIX_ARG,KM_MIX_ARG) ! WORK ARRAY USED BY SUBRTNE STATE    ORH1F305.333    
     +,WORK2(IMT_MIX_ARG,KM_MIX_ARG) ! WORK ARRAY USED BY SUBRTNE STATE    ORH1F305.334    
C                                                                          FREEZEUP.101    
      CONFLUX = (CSUBP*RHOWATER)/(100.0*C2DTTS)                            FREEZEUP.102    
C                                                                          FREEZEUP.103    
      IF (L_OMIXLAY) THEN                                                  ORH1F305.335    
C     FIND SURFACE DENSITY BEFORE UPDATING TRACERS.                        FREEZEUP.106    
C                                                                          FREEZEUP.107    
                                                                           JA121293.404    
      CALL STATED(TA(1,1,1),TA(1,1,2),RHO1,WORK1,WORK2,IMT,1,J             JA121293.405    
     &,KM                                                                  JA121293.406    
     &,JMT                                                                 ORH7F404.71     
     &)                                                                    JA121293.409    
                                                                           JA121293.410    
                                                                           JA121293.415    
C                                                                          FREEZEUP.109    
      ENDIF                                                                ORH1F305.338    
      DO 100 I = 1,IMT                                                     FREEZEUP.112    
        NEWICE(I) = (TA(I,1,1) .LT. TFREEZE) .AND. (.NOT. ICY(I))          FREEZEUP.113    
      NEWICE(I) =(NEWICE(I) .AND. (FM(I,1) .GT. 0.1))                      FREEZEUP.114    
        CARYHEAT(I) = 0.0                                                  FREEZEUP.115    
100   CONTINUE                                                             FREEZEUP.116    
C                                                                          FREEZEUP.117    
C     THE PREVIOUS AND FOLLOWING LOOPS ARE SEPARATED TO ALLOW              FREEZEUP.118    
C     BETTER VECTORISATION.                                                FREEZEUP.119    
C                                                                          FREEZEUP.120    
C     Reset temperatures in surface layer and store heat in CARYHEAT       FREEZEUP.121    
C                                                                          FREEZEUP.122    
      DO 110 I = 1,IMT                                                     FREEZEUP.123    
        IF (TA(I,1,1) .LT. TFREEZE) THEN                                   FREEZEUP.124    
          CARYHEAT(I) = CARYHEAT(I) +                                      FREEZEUP.125    
     +                 CONFLUX*DZ(1)*FM(I,1)*( TA(I,1,1) - TFREEZE )       FREEZEUP.126    
          TA(I,1,1) = TFREEZE                                              FREEZEUP.127    
        ENDIF                                                              FREEZEUP.128    
          CARYHEAT(I) = CARYHEAT(I) * FM(I,1)                              FREEZEUP.129    
  110 CONTINUE                                                             FREEZEUP.130    
C                                                                          FREEZEUP.131    
C     Below the surface level, reset temperatures and pass heat down       FREEZEUP.132    
C     to the next level below (to conserve heat)                           FREEZEUP.133    
C                                                                          FREEZEUP.134    
      DO 140 K=2,KM-1                                                      FREEZEUP.135    
        DO 130 I = 1,IMT                                                   FREEZEUP.136    
          IF (TA(I,K,1) .LT. TFREEZE) THEN                                 FREEZEUP.137    
          TA(I,K+1,1) = TA(I,K+1,1) +                                      FREEZEUP.138    
     +                 (DZ(K)/DZ(K+1))*FM(I,K+1)*(TA(I,K,1)-TFREEZE)       FREEZEUP.139    
C If layer K+1 is not active, the heat moved down in the previous line     OJG0F400.81     
C will have been lost. Add it to HEATSINK.                                 OJG0F400.82     
          HEATSINK(I)=(1.0-FM(I,K+1))*CONFLUX*DZ(K)*(TA(I,K,1)-TFREEZE)    OJG0F400.83     
            TA(I,K,1) = TFREEZE                                            FREEZEUP.140    
          ENDIF                                                            FREEZEUP.141    
130     CONTINUE                                                           FREEZEUP.142    
140   CONTINUE                                                             FREEZEUP.143    
      IF (L_OMIXLAY) THEN                                                  ORH1F305.339    
C     FIND SURFACE DENSITY AFTER UPDATING TRACERS, THEN FIND THE           FREEZEUP.146    
C     RESULTANT CHANGE IN DENSITY.                                         FREEZEUP.147    
C                                                                          FREEZEUP.148    
      CALL STATED(TA(1,1,1),TA(1,1,2),RHO2,WORK1,WORK2,IMT,1,J             JA121293.425    
     &,KM                                                                  JA121293.426    
     &,JMT                                                                 ORH7F404.72     
     &)                                                                    JA121293.429    
                                                                           JA121293.430    
                                                                           JA121293.435    
      DO 160 I = 1,IMT                                                     FREEZEUP.150    
        DRHOICE(I) = DRHOICE(I) +(RHO2(I,1) - RHO1(I,1))                   FREEZEUP.151    
160   CONTINUE                                                             FREEZEUP.152    
      ENDIF ! L_OMIXLAY = true                                             ORH1F305.342    
      IF (L_OCYCLIC) THEN                                                  ORH1F305.343    
C                                                                          FREEZEUP.155    
C MAKE NEWICE, CARYHEAT AND HEATSINK CYCLICALLY CONTINUOUS,IF NECESSARY    OJG0F400.84     
C                                                                          FREEZEUP.157    
      CARYHEAT(1) = CARYHEAT(IMT-1)                                        FREEZEUP.158    
      CARYHEAT(IMT) = CARYHEAT(2)                                          FREEZEUP.159    
      NEWICE(1) = NEWICE(IMT-1)                                            FREEZEUP.160    
      NEWICE(IMT) = NEWICE(2)                                              FREEZEUP.161    
      HEATSINK(1)=HEATSINK(IMT-1)                                          OJG0F400.85     
      HEATSINK(IMT)=HEATSINK(2)                                            OJG0F400.86     
      ENDIF ! L_OCYCLIC = true                                             ORH1F305.344    
C                                                                          FREEZEUP.164    
      RETURN                                                               FREEZEUP.165    
      END                                                                  FREEZEUP.166    
*ENDIF                                                                     FREEZEUP.167