*IF DEF,OCEAN                                                              UDG7F400.271    
CLL Subroutine ICE_CTL ------------------------------------------------    ICE_CTL.3      
C ******************************COPYRIGHT******************************    GTS2F400.4375   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4376   
C                                                                          GTS2F400.4377   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4378   
C restrictions as set forth in the contract.                               GTS2F400.4379   
C                                                                          GTS2F400.4380   
C                Meteorological Office                                     GTS2F400.4381   
C                London Road                                               GTS2F400.4382   
C                BRACKNELL                                                 GTS2F400.4383   
C                Berkshire UK                                              GTS2F400.4384   
C                RG12 2SZ                                                  GTS2F400.4385   
C                                                                          GTS2F400.4386   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4387   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4388   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4389   
C Modelling at the above address.                                          GTS2F400.4390   
C ******************************COPYRIGHT******************************    GTS2F400.4391   
C                                                                          GTS2F400.4392   
CLL                                                                        ICE_CTL.4      
CLL Level 2 control routine                                                ICE_CTL.5      
CLL                                                                        ICE_CTL.6      
CLL version for CRAY YMP                                                   ICE_CTL.7      
CLL written by S. Ineson                                                   ICE_CTL.8      
CLL                                                                        ICE_CTL.9      
CLL code reviewed by :                                                     ICE_CTL.10     
CLL                                                                        ICE_CTL.11     
CLL version number 1.1 dated 27/01/93                                      ICE_CTL.12     
CLL revised by: C.Cooper                                                   ICE_CTL.13     
CLL             Uses the arrays set up in SET_CONSTANTS_OCEAN for ice-     ICE_CTL.14     
CLL             ocean heat flux and maximum ice concentrations.            ICE_CTL.15     
CLL   3.4   04/08/94 Remove ice flux correction and split sea ice          OJT0F304.16     
CLL                  haney forcing from SST/SSS haney forcing. (JFT)       OJT0F304.17     
CLL   3.4    22/08/94  C.G.Sherlock                                        OCS1F304.113    
CLL           Zero ice conc. over land (but                                OCS1F304.114    
CLL           not the polar island) on first time step. Delete             OCS1F304.115    
CLL           unnecessary wraparound code.                                 OCS1F304.116    
CLL           Pass coriolis array to ICE_DYN if on rotated grid.           OCS1F304.117    
CLL  4.0  7.7.95  J.M.Gregory  Add diagnostic for HTN where icy            OJG4F400.1      
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.5649   
CLL  3.5  05/06/95  Chgs to SI array.  RTHBarnes                           GRB4F305.203    
CLL   4.0   27/03/95  C.Cooper                                             OCC0F400.54     
CCL           Pass variables defined in UMSCALAR through subroutine call   OCC0F400.55     
CCL           rather than setting in routines.                             OCC0F400.56     
CLL   4.0   Remove redundant variables and tidy code. J.Crossley           OJC3F400.3      
CLL   4.0   Change CARYSALT from increment to rate. J.F.Crossley           OJC0F400.14     
CLL   4.0   Move initial enforcement of max ice fraction and               OJC2F400.16     
CLL         zeroing of ice fraction at land points to new deck             OJC2F400.17     
CLL         INITOI1A. Add arrays ICEHEATFLUX and ICESNOWRATE which         OJC2F400.18     
CLL         ensure consistent coupling with the ocean for models           OJC2F400.19     
CLL         with ice dynamics. J.F.Crossley                                OJC2F400.20     
!     4.0   23/08/95  Place routine within *IF OCEAN dependency so         UDG7F400.272    
!                     that it won't be included when recnfiguration        UDG7F400.273    
!                     is built.                                            UDG7F400.274    
CLL   4.5  J M Gregory  Rate diagnostics corresponding to increments       OJG1F405.1      
!                     Author D.M. Goddard                                  UDG7F400.275    
!     4.5   10/08/97  Changes to include free drift ice code               ODC1F405.248    
!                     New names for dynamic ice control logicals           ODC1F405.249    
!                     C. Sherlock                                          ODC1F405.250    
CLL programming standard :                                                 ICE_CTL.16     
CLL system components covered :                                            ICE_CTL.17     
CLL system task :                                                          ICE_CTL.18     
CLL                                                                        ICE_CTL.19     
CLL                                                                        ICE_CTL.20     
CLL                                                                        ICE_CTL.21     
CLL                                                                        ICE_CTL.22     
CLL Documentation :                                                        ICE_CTL.23     
CLL                                                                        ICE_CTL.24     
CLL                                                                        ICE_CTL.25     
CLLEND -----------------------------------------------------------------   ICE_CTL.26     
C*L Arguments                                                              ICE_CTL.27     
                                                                           ICE_CTL.28     

      SUBROUTINE ICE_CTL(                                                   1,24@DYALLOC.4693   
*CALL ARGSIZE                                                              @DYALLOC.4694   
*CALL ARGD1                                                                @DYALLOC.4695   
*CALL ARGDUMA                                                              JT161193.108    
*CALL ARGDUMO                                                              @DYALLOC.4696   
*CALL ARGDUMW                                                              GKR1F401.209    
*CALL ARGSTS                                                               @DYALLOC.4697   
*CALL ARGOCALL                                                             @DYALLOC.4700   
*CALL ARGPPX                                                               GKR0F305.935    
*CALL ARGOINDX                                                             ORH7F402.107    
     * ICODE,CMESSAGE ! ###############################################    @DYALLOC.4701   
                                                                           ICE_CTL.30     
C INOUT: primary variables                                                 ICE_CTL.31     
                                                                           ICE_CTL.32     
     & ,HSNOW,AICE,HICE                                                    ICE_CTL.33     
     & ,UICE,VICE                                                          OJC3F400.4      
                                                                           ICE_CTL.34     
C OUT: arrays for interfacing between ocean (section 30) and               ICE_CTL.35     
C      ice thermodynamics (section 32)                                     ICE_CTL.36     
                                                                           ICE_CTL.37     
     &,CARYSALT,CARYHEAT,FLXTOICE                                          ICE_CTL.38     
     & ,ISX,ISY                                                            OJC3F400.5      
                                                                           ICE_CTL.39     
C IN:  ancillary fields                                                    ICE_CTL.40     
                                                                           ICE_CTL.41     
     &,HEATFLUX_c,SOLARFLX_c                                               ORH1F305.5652   
     &,SNOWRATE,SUBLIM                                                     ICE_CTL.47     
     &,TOPMELT_c,BOTMELT_c                                                 ORH1F305.5653   
     &,SOLICE,TAIRDATA                                                     ICE_CTL.53     
     &,anomiceh                                                            ICE_CTL.56     
     &,WSX_ICE,WSY_ICE                                                     JT161193.118    
                                                                           ICE_CTL.62     
C IN:  arrays for interfacing between ocean (section 30)                   ICE_CTL.63     
C      and ice thermodynamics (section 32)                                 ICE_CTL.64     
                                                                           ICE_CTL.65     
     &,SURFTEMP, SURFSAL,NEWICE,ICY                                        ICE_CTL.66     
     &,ICEHEATFLUX,ICESNOWRATE                                             OJC2F400.21     
     &,UCURRENT,VCURRENT                                                   JT161193.121    
                                                                           ICE_CTL.68     
C IN:  pointers and stashflags to diagnostics                              ICE_CTL.69     
                                                                           ICE_CTL.70     
     &,SI201_32                                                            @DYALLOC.4702   
     &,SF201_32                                                            @DYALLOC.4703   
                                                                           ICE_CTL.73     
C IN: STASH_MAXLEN for dimensioning stash workspace                        JT161193.123    
                                                                           ICE_CTL.76     
     &,sw_len32                                                            ICE_CTL.77     
                                                                           ICE_CTL.78     
     & )                                                                   ICE_CTL.79     
                                                                           ICE_CTL.80     
                                                                           ICE_CTL.81     
      IMPLICIT NONE                                                        ODC1F405.251    
*CALL CNTLOCN                                                              ORH1F305.5654   
*CALL OARRYSIZ                                                             ORH1F305.5655   
*CALL OTIMER                                                               ORH1F305.5656   
                                                                           ICE_CTL.83     
      INTEGER                                                              ICE_CTL.84     
     & SI201_32                                                            ICE_CTL.85     
     &,ICODE                                                               ICE_CTL.86     
     &,sw_len32                                                            ICE_CTL.87     
                                                                           ICE_CTL.88     
      CHARACTER*(80)                                                       ORH6F401.83     
     & CMESSAGE                                                            ICE_CTL.90     
                                                                           ICE_CTL.91     
      REAL                                                                 ICE_CTL.92     
     & STASHWORK(sw_len32)                                                 ICE_CTL.93     
                                                                           ICE_CTL.94     
      LOGICAL                                                              ICE_CTL.95     
     & SF201_32                                                            ICE_CTL.96     
                                                                           ICE_CTL.97     
*CALL CSUBMODL                                                             GRB4F305.204    
*CALL CMAXSIZE                                                             JT161193.124    
*CALL TYPSIZE                                                              @DYALLOC.4704   
*CALL TYPD1                                                                @DYALLOC.4705   
*CALL TYPDUMA                                                              JT161193.125    
*CALL TYPDUMO                                                              @DYALLOC.4706   
*CALL TYPDUMW                                                              GKR1F401.210    
*CALL TYPSTS                                                               @DYALLOC.4707   
*CALL UMSCALAR                                                             ICE_CTL.99     
*CALL C_MDI                                                                JT301193.1      
*CALL TYPOINDX                                                             PXORDER.22     
*CALL TYPOCALL                                                             @DYALLOC.4710   
*CALL PPXLOOK                                                              GKR0F305.936    
                                                                           ICE_CTL.102    
C Variables for icefloe declared                                           ICE_CTL.103    
                                                                           ICE_CTL.104    
      REAL                                                                 ICE_CTL.105    
     & SNOWRATE(IMT_ICE,JMT_ICE) ! IN RATE OF SNOWFALL, KG M-2 S-1         ORH1F305.5657   
     &,HEATFLUX_C(IMT_ICE,JMT_ICE) ! IN NET NON-PENETRATIVE                OJC3F400.6      
     &                                   ! HEAT FLUX OVER LEADS.           ORH1F305.5659   
     &,SOLARFLX_C(IMT_ICE,JMT_ICE) ! IN NET NON-PENETRATIVE                OJC3F400.7      
     &                                   ! SOL FLUX OVER LEADS.            ORH1F305.5661   
     &,SUBLIM(IMT_ICE,JMT_ICE) ! IN RATE OF SUBLIMATION, KG M-2 S-1        ORH1F305.5662   
     &,TOPMELT_C(IMT_ICE_ICP,JMT_ICE_ICP) ! IN SNOW MELTING RATE W M-2.    ORH1F305.5663   
     &                           ! (THIS CAN BE TRANSFERRED TO ICE.)       ORH1F305.5664   
     &,BOTMELT_C(IMT_ICE_ICP,JMT_ICE_ICP) ! IN DIFFUSIVE HEAT FLUX         ORH1F305.5665   
     &          ! THROUGH ICE. IF THIS IS +VE, ICE MELTS AT THE BASE.      ORH1F305.5666   
     &          ! IF IT IS -VE, ICE ACCRETES THERE.                        ORH1F305.5667   
     &,SURFTEMP(IMT_ICE,JMT_ICE) ! IN TEMPRTURE OF TOP LAYER OF            ORH1F305.5668   
     &                             ! OCEAN AT THE START OF THE STEP.       ORH1F305.5669   
     &,SURFSAL(IMT_ICE,JMT_ICE) ! IN TRUE SALINITY OF TOP LAYER OF         ORH1F305.5670   
     &                            ! OCEAN AT THE START OF THE STEP.        ORH1F305.5671   
     &                            ! (NB DOES NOT HAVE 0.035 SUBTRACTED.)   ORH1F305.5672   
     &,UCURRENT(imt_drsa,jmt_drsa) ! IN ZONAL COMP OF SFC VELOCITY         ODC1F405.252    
     &,VCURRENT(imt_drsa,jmt_drsa) ! IN MERIDIONAL COMP OF SFC VELOCITY    ODC1F405.253    
     &,WSX_ICE(imt_idr,jmt_idr)  ! IN ZONAL COMPONENT OF WIND STRESS.      ODC1F405.254    
     &,WSY_ICE(imt_idr,jmt_idr)  ! IN MERIDIONAL COMPONENT OF " "          ODC1F405.255    
     &,SOLICE(*)          ! IN SOLAR RADIATION OVER SEA ICE                ORH1F305.5677   
     &                    !    USED TO CALCULATE TOPMELT AND BOTMELT       ORH1F305.5678   
     &                    !    IN PSEUDAIR FOR ICEFLOE                     ORH1F305.5679   
     &,TAIRDATA(*)        ! IN CLIMATOLOGICAL SURFACE AIR TEMPERATURE      ORH1F305.5680   
     &                    !    REQUIRED BY PSEUDAIR.                       ORH1F305.5681   
     &,ANOMICEH(*)        ! IN ANOMALOUS ICE HEAT FLUX    W M-2.           ORH1F305.5682   
                                                                           ICE_CTL.147    
      REAL DT,     ! IN TRACER TIMESTEP.                                   ICE_CTL.148    
     &  RHOCP    ! IN Volumetric heat capacity of sea-water                RH141293.140    
                 !     in J/(K*M**3)                                       RH141293.141    
      REAL                                                                 OJC2F400.22     
     & ICEHEATFLUX(IMT_ICE,JMT_ICE) ! IN HTN into ice budget               OJC2F400.23     
     &,ICESNOWRATE(IMT_ICE,JMT_ICE) ! IN snowrate over ice                 OJC2F400.24     
      LOGICAL NEWICE(IMT,JMT) ! IN TRUE IF BOX WAS PREVIOUSLY FREE         ICE_CTL.162    
     &                        !   OF ICE, BUT ICE FORMS DURING STEP.       ICE_CTL.163    
                                                                           ICE_CTL.164    
      LOGICAL ICY(IMT,JMT)  ! INOUT TRUE IF BOX CONTAINS ICE.              ICE_CTL.165    
      REAL AICE(IMT,JMT), ! INOUT ICE CONCENTRATION.                       ICE_CTL.166    
     & HICE(IMT,JMT),     ! INOUT MEAN ICE DEPTH OVER WHOLE GRID BOX.      ICE_CTL.167    
     & HSNOW(IMT,JMT),    ! INOUT SNOW DEPTH, NOT AVERAGED OVER GRID       ICE_CTL.168    
     &                    !      BOX, JUST OVER THE ICE PORTION.           ICE_CTL.169    
     & CARYHEAT(IMT,JMT), ! INOUT  LATENT HEAT FLUX REQUIRED BY OCEAN      ICE_CTL.170    
     &                    !  TO MAINTAIN LEVEL 1 TEMPS AT -1.8C (W/M2)     ICE_CTL.171    
     & FLXTOICE(IMT,JMT)  ! INOUT OCEAN TO ICE HEAT FLUX. (W/M2)           ICE_CTL.172    
     &,UICE(IMT_idr,JMTM1_idr)! INOUT ZONAL COMP OF ICE VELOCITY.          ODC1F405.256    
     &,VICE(IMT_idr,JMTM1_idr)! INOUT MERIDIONAL COMP OF ICE VELOCITY.     ODC1F405.257    
                                                                           ICE_CTL.173    
C Note flxtoice is called oceanflx in icefloe.                             ICE_CTL.174    
      REAL                                                                 ICE_CTL.175    
     & CARYSALT(*)            ! OUT RATE OF SALINITY INCREASE DUE TO       OJC0F400.15     
     &                        !    ICE/SNOW PROCESSES.                     ICE_CTL.177    
     &,ISX(IMT_idr,JMTM1_idr) ! INOUT ZONAL COMP OF ICE-ocean stress       ODC1F405.258    
     &,ISY(IMT_idr,JMTM1_idr) ! INOUT MERIDIONAL COMP OF ICE-ocn stress    ODC1F405.259    
      INTEGER I,J  ! Loop counting.                                        ICE_CTL.180    
      INTEGER K             ! Number of levels                             OJC2F400.26     
      INTEGER isubmodel       ! SUBMODEL IDENTIFIER FOR CALL TO STASH      JT161193.148    
      INTEGER IM_IDENT        ! internal model identifier                  GRB4F305.205    
      INTEGER IM_INDEX        ! internal model index for STASH arrays      GRB4F305.206    
C                                                                          JT161193.151    
C Local variables used by ice dynamics                                     OJC3F400.12     
C                                                                          JT161193.153    
      REAL                                                                 JT161193.154    
     & DPHI(JMT_drsa)            ! ZONAL GRID SPACING IN RADIANS           ODC1F405.260    
     &,DLAMBDA(IMT_drsa)         ! MERIDIONAL GRID SPACING IN RADIANS      ODC1F405.261    
     &,RADIUS_SI                   ! RADIUS OF EARTH IN METRES.            OJC3F400.15     
     &,twaterx(imt_idr,jmtm1_idr) ! ocean to ice stress for STASH          ODC1F405.262    
     &,twatery(imt_idr,jmtm1_idr) ! ocean to ice stress for STASH          ODC1F405.263    
     &,mfx(imt_idr,jmtm1_idr)     ! coriolis stress for STASH              ODC1F405.264    
     &,mfy(imt_idr,jmtm1_idr)     ! coriolis stress for STASH              ODC1F405.265    
     &,inisx(imt_idr,jmtm1_idr)   ! x-cpt internal ice stress              ODC1F405.266    
     &,inisy(imt_idr,jmtm1_idr)   ! y-cpt internal ice stress              ODC1F405.267    
                                                                           ORH1F305.5699   
      LOGICAL                                                              ORH1F305.5700   
     & OCEAN(IMT_ICE,JMT_ICE) ! TRUE IF FKMP > 0.1                         OJC2F400.25     
     &,OCEAN_UV(IMT_IDR,JMTM1_IDR) ! TRUE IF FKMQ > 0.1                    ODC1F405.268    
c Local variables calculated by PSEUDAIR in uncoupled runs.                ICE_CTL.186    
                                                                           ICE_CTL.187    
      REAL                                                                 ICE_CTL.188    
     & TOPMELT(IMT,JMT)   ! RATE OF MELTING OF SNOW IN W M-2.              ICE_CTL.189    
     &                    !    (THIS CAN BE TRANSFERRED TO ICE.)           ICE_CTL.190    
     &,BOTMELT(IMT,JMT)   ! DIFFUSIVE HEAT FLUX THROUGH ICE. IF            ICE_CTL.191    
     &                    !    THIS IS +VE, ICE MELTS AT THE BASE.         ICE_CTL.192    
     &                    !    IF IT IS -VE, ICE ACCRETES THERE.           ICE_CTL.193    
     &,HEATFLUX(IMT,JMT)  ! IN NET NON-PENETRATIVE HEAT FLUX               ICE_CTL.194    
     &                    !       OVER LEADS.                              ICE_CTL.195    
     &,SOLARFLX(IMT,JMT)  ! IN NET PENETRATIVE HEAT FLUX OVER LEADS.       ICE_CTL.196    
                                                                           ICE_CTL.197    
! Local variables for ice dynamics                                         ODC1F405.269    
                                                                           ICE_CTL.200    
      REAL                                                                 ODC1F405.270    
     & uice_local(imt_ice,jmtm1_ice)                                       ODC1F405.271    
     &,vice_local(imt_ice,jmtm1_ice)                                       ODC1F405.272    
C                                                                          OJG3F403.13     
C     Local array for calculation of GBM snowdepth diagnostic              OJG3F403.14     
C                                                                          OJG3F403.15     
      real gbmhsnow(imt_ice,jmt_ice)                                       OJG3F403.16     
*IF DEF,SEAICE                                                             ORH1F305.451    
C External subroutines called                                              ICE_CTL.201    
                                                                           ICE_CTL.202    
      EXTERNAL                                                             ICE_CTL.203    
     &       ICEFLOE                                                       ICE_CTL.204    
     &      ,PSEUDAIR                                                      ICE_CTL.207    
     &      ,ICEFREEDR                                                     ODC1F405.273    
     &      ,STASH                                                         ICE_CTL.210    
     &      ,TIMER                                                         ICE_CTL.213    
     &      ,ICEDRIFT                                                      ODC1F405.274    
                                                                           ICE_CTL.216    
                                                                           ICE_CTL.217    
      ICODE=0                                                              ICE_CTL.218    
      CMESSAGE='  '                                                        ICE_CTL.219    
                                                                           ORH4F402.134    
C  Set up internal model identifier and STASH index                        GRB4F305.207    
      isubmodel = ocean_im                                                 GRB4F305.208    
      im_ident = ocean_im                                                  GRB4F305.209    
      im_index = internal_model_index(im_ident)                            GRB4F305.210    
                                                                           ICE_CTL.220    
      IF (L_OICECOUP) THEN                                                 ORH1F305.5735   
         DO J = J_1, J_JMT                                                 ORH3F402.76     
             DO I = 1, IMT                                                 ORH1F305.5737   
                HEATFLUX(I,J) = HEATFLUX_C(I,J)                            ORH1F305.5738   
                SOLARFLX(I,J) = SOLARFLX_C(I,J)                            ORH1F305.5739   
                TOPMELT(I,J) = TOPMELT_C(I,J)                              ORH1F305.5740   
                BOTMELT(I,J) = BOTMELT_C(I,J)                              ORH1F305.5741   
             ENDDO                                                         ORH1F305.5742   
          ENDDO                                                            ORH1F305.5743   
      ENDIF !                                                              ORH1F305.5744   
                                                                           ORH1F305.5745   
CL Section 32: Thermodynamic ice model.                                    ICE_CTL.221    
                                                                           ICE_CTL.222    
C CALCULATE VOLUMETRIC HEAT CAPACITY OF SEAWATER FOR ICEFLOE               ICE_CTL.223    
C AND PSEUDAIR FROM CONSTANTS IN UMSCALAR.                                 ICE_CTL.224    
                                                                           ICE_CTL.225    
      RHOCP = RHO_WATER_SI * SPECIFIC_HEAT_SI                              ICE_CTL.226    
C                                                                          ICE_CTL.242    
C FILL STASH WORKSPACE WITH MISSING DATA INDICATORS                        JT301193.19     
C                                                                          JT301193.20     
      DO I=1,sw_len32                                                      JT301193.21     
        STASHWORK(I) = RMDI                                                JT301193.22     
      END DO                                                               JT301193.23     
C                                                                          OJC2F400.27     
C Initialise logical mask for use in copying diagnostics to stash space    OJC2F400.28     
       ! The following loop must run from 1 to JMT not J_1 to J_JMT        ORH5F403.305    
       ! because STASH needs all halo values.                              ORH5F403.306    
       ! Since we cover the entire array, including halos, no              ORH5F404.4      
       ! subsequent swapbounds call is required for the array OCEAN.       ORH5F404.5      
       DO J = 1, JMT                                                       ORH5F403.307    
        do i=1,imt                                                         OJC2F400.30     
          ocean(i,j) = (fkmp(i,j).gt.0.1)                                  OJC2F400.31     
        end do                                                             OJC2F400.32     
      end do                                                               OJC2F400.33     
      IF (L_ICEFREEDR) THEN                                                ODC1F405.275    
         ! The following loop runs from 1 to JMTM1 not J_1 to              ODC1F405.276    
         ! J_JMTM1 because STASH needs all halo values and doing           ODC1F405.277    
         ! things this way means we dont need a subsequent                 ODC1F405.278    
         ! SWAPBOUNDS call for OCEAN_UV.                                   ODC1F405.279    
         DO J=1,JMTM1                                                      ODC1F405.280    
            DO I=1,IMT                                                     ODC1F405.281    
               ocean_uv(i,j) = (fkmq(i,j).gt.0.1)                          ODC1F405.282    
            ENDDO                                                          ODC1F405.283    
         ENDDO                                                             ODC1F405.284    
      ENDIF                                                                ODC1F405.285    
                                                                           ORH5F404.6      
      IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN                                 ODC1F405.286    
C                                                                          JT161193.167    
C CALCULATE GRID SPACINGS IN RADIANS FOR USE BY ICE DYNAMICS               JT161193.168    
C                                                                          JT161193.169    
      DO J = J_2, J_JMTM1                                                  ORH3F402.78     
        DPHI(J) = DYT(J)/RADIUS                                            JT161193.171    
      END DO                                                               JT161193.172    
*IF DEF,MPP                                                                ORH3F402.79     
                                                                           ORH3F402.80     
      CALL SWAPBOUNDS(DPHI,1,JMT,O_EW_HALO,O_NS_HALO,1)                    ORH3F402.81     
                                                                           ORH3F402.82     
      ! Only done by process handling the 1st row                          ORH3F402.83     
      IF (JST.EQ.1) THEN                                                   ORH3F402.84     
         DPHI(J_1)=DPHI(J_1+1)                                             ORH3F402.85     
      ENDIF                                                                ORH3F402.86     
                                                                           ORH3F402.87     
      ! Only done by process handling last row                             ORH3F402.88     
      IF (JFIN.EQ.JMT_GLOBAL) THEN                                         ORH3F402.89     
         DPHI(J_JMT)=DPHI(J_JMT - 1)                                       ORH3F402.90     
      ENDIF                                                                ORH3F402.91     
                                                                           ORH3F402.92     
      CALL SWAPBOUNDS(DPHI,1,JMT,O_EW_HALO,O_NS_HALO,1)                    ORH3F402.93     
                                                                           ORH3F402.94     
*ELSE                                                                      ORH3F402.95     
      DPHI(1)=DPHI(2)                                                      JT161193.173    
      DPHI(JMT)=DPHI(JMTM1)                                                JT161193.174    
*ENDIF                                                                     ORH3F402.96     
C                                                                          JT161193.175    
      DO I=2,IMTM1                                                         JT161193.176    
        DLAMBDA(I) = DXT(I)/RADIUS                                         JT161193.177    
      END DO                                                               JT161193.178    
      DLAMBDA(1)=DLAMBDA(IMTM1)                                            JT161193.179    
      DLAMBDA(IMT)=DLAMBDA(2)                                              JT161193.180    
C                                                                          JT161193.181    
C CONVERT RADIUS OF EARTH FROM CM TO M.                                    JT161193.182    
C                                                                          JT161193.183    
      RADIUS_SI = RADIUS / 100.                                            JT161193.184    
C                                                                          JT161193.185    
      ENDIF                                                                ORH1F305.5705   
C                                                                          OJG4F400.2      
C     HTN when applied to ice                                              OJG4F400.3      
C                                                                          OJG4F400.4      
*IF DEF,MPP                                                                ORH5F404.1      
      CALL SWAPBOUNDS(ICY,IMT,JMT,O_EW_HALO,O_NS_HALO,1)                   ORH5F404.2      
*ENDIF                                                                     ORH5F404.3      
      IF (SF(217,32)) THEN                                                 ORH5F403.322    
         CALL COPYODIAGL(IMT,JMT,1,.FALSE.,0.                              ORH5F403.326    
     &,HEATFLUX,ICY,STASHWORK(SI(217,32,im_index)))                        OJG4F400.6      
      ENDIF                                                                ORH5F403.327    
                                                                           ORH5F403.328    
                                                                           ORH1F305.5706   
      IF (.NOT.(L_OICECOUP)) THEN                                          ORH1F305.5707   
                                                                           ORH1F305.5708   
         IF (L_OTIMER) CALL TIMER('PSEUDAIR ',3)                           ORH1F305.5709   
C --------------------------------------------------------------------     OJC3F400.16     
C Call pseudo atmosphere routine to calculate surface fluxes in some       OJC3F400.17     
C ocean only experiments.                                                  OJC3F400.18     
                                                                           OJC3F400.19     
      CALL PSEUDAIR(                                                       ORH7F402.109    
*CALL ARGOINDX                                                             ORH7F402.110    
     & ICY,AICE,HICE,HSNOW,SOLICE,TAIRDATA,                                ORH7F402.111    
     + TOPMELT,BOTMELT,ICEHEATFLUX,SOLARFLX,TFREEZE,RHOCP,IMT,JMT)         OJC3F400.21     
                                                                           OJC3F400.22     
         IF (L_OTIMER) CALL TIMER('PSEUDAIR ',4)                           ORH1F305.5710   
                                                                           ORH1F305.5711   
      ENDIF                                                                ORH1F305.5712   
                                                                           ORH1F305.5713   
      IF (L_ICEFREEDR) THEN                                                ODC1F405.287    
                                                                           ORH1F305.5715   
         IF (L_OTIMER) CALL TIMER('ICEFREEDR',3)                           ODC1F405.288    
                                                                           ORH1F305.5717   
C                                                                          JT161193.193    
         CALL ICEFREEDR(                                                   ODC1F405.289    
*CALL ARGOINDX                                                             ODC1F405.290    
     &        imt,imtm1,imtm2,jmt,jmtm1,jmtm2,                             ODC1F405.291    
     &        rhoice,rho_water_si,rhosnow,                                 ODC1F405.292    
     &        quad_ice_drag,hicestop,hiceslow,                             ODC1F405.293    
     &        coriolis,                                                    ODC1F405.294    
     &        icy,ocean,aice,hice,hsnow,                                   ODC1F405.295    
     &        ucurrent,vcurrent,                                           ODC1F405.296    
     &        wsx_ice,wsy_ice,                                             ODC1F405.297    
     &        uice_local,vice_local,                                       ODC1F405.298    
     &        isx,isy,                                                     ODC1F405.299    
     &        twaterx,twatery,                                             ODC1F405.300    
     &        mfx,mfy,                                                     ODC1F405.301    
     &        inisx,inisy,                                                 ODC1F405.302    
     &        radius,dphi,dlambda,phit                                     ODC1F405.303    
     &        )                                                            ODC1F405.304    
C                                                                          JT161193.208    
         IF (L_OTIMER) CALL TIMER('ICEFREEDR',4)                           ODC1F405.305    
!        Copy and mask diagnostics                                         ODC1F405.306    
         IF (SF(219,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.307    
     &           ,twaterx,ocean_uv,STASHWORK(SI(219,32,im_index)))         ODC1F405.308    
                                                                           ODC1F405.309    
         IF (SF(220,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.310    
     &           ,twatery,ocean_uv,STASHWORK(SI(220,32,im_index)))         ODC1F405.311    
                                                                           ODC1F405.312    
         IF (SF(221,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.313    
     &           ,mfx,ocean_uv,STASHWORK(SI(221,32,im_index)))             ODC1F405.314    
                                                                           ODC1F405.315    
         IF (SF(222,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.316    
     &           ,mfy,ocean_uv,STASHWORK(SI(222,32,im_index)))             ODC1F405.317    
                                                                           ODC1F405.318    
         IF (SF(230,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.319    
     &           ,inisx,ocean_uv,STASHWORK(SI(230,32,im_index)))           ODC1F405.320    
                                                                           ODC1F405.321    
         IF (SF(231,32)) CALL COPYODIAGL(IMT,JMTM1,1,.TRUE.,0.             ODC1F405.322    
     &           ,inisy,ocean_uv,STASHWORK(SI(231,32,im_index)))           ODC1F405.323    
                                                                           ORH1F305.5720   
      ENDIF ! L_ICEFREEDR = true                                           ODC1F405.324    
                                                                           ORH1F305.5722   
      IF (L_ICESIMPLE) THEN                                                ODC1F405.325    
                                                                           ORH1F305.5724   
         DO J=J_1,J_JMTM1                                                  ODC1F405.326    
            DO i=1,imt                                                     ODC1F405.327    
               uice_local(i,j) = ucurrent(i,j)                             ODC1F405.328    
               vice_local(i,j) = vcurrent(i,j)                             ODC1F405.329    
            ENDDO                                                          ODC1F405.330    
         ENDDO                                                             ODC1F405.331    
      ENDIF ! L_ICESIMPLE                                                  ODC1F405.332    
      IF (L_ICESIMPLE.OR.L_ICEFREEDR) THEN                                 ODC1F405.333    
         IF (L_OTIMER) CALL TIMER('ICEDRIFT',3)                            ODC1F405.334    
C                                                                          JT301193.28     
         CALL ICEDRIFT(                                                    ODC1F405.335    
*CALL ARGOINDX                                                             ODC1F405.336    
     & AICE,HICE,HSNOW,UICE_local,VICE_local,ICY,NEWICE                    ODC1F405.337    
     &,OCEAN,IMT,IMTM1,IMTM2,JMT,JMTM1,KM,FKMP                             ORH3F405.91     
     &,PHI,PHIT,AICEMIN,AMX,HICEMIN,ah_ice,DPHI,DLAMBDA                    ORH3F405.93     
     +,DTTS                                                                JT301193.35     
     +,CS,CSTR,DYUR,DYTR,DXU2R,DXT4R                                       JT301193.36     
     &,RADIUS_SI                                                           ODC1F405.338    
     +,STASHWORK(SI(202,32,im_index)),STASHWORK(SI(203,32,im_index))       GRB4F305.215    
     +,STASHWORK(SI(209,32,im_index)),STASHWORK(SI(210,32,im_index))       GRB4F305.216    
     +,STASHWORK(SI(201,32,im_index)),STASHWORK(SI(204,32,im_index))       GRB4F305.217    
     +,SF(202,32),SF(203,32),SF(209,32),SF(210,32)                         JT301193.41     
     +,SF(201,32),SF(204,32)                                               JT301193.42     
     &,stashwork(si(223,32,im_index)),stashwork(si(224,32,im_index))       OJG1F405.2      
     &,stashwork(si(225,32,im_index)),stashwork(si(226,32,im_index))       OJG1F405.3      
     &,sf(223,32),sf(224,32),sf(225,32),sf(226,32)                         OJG1F405.4      
     + )                                                                   JT301193.43     
C                                                                          JT301193.44     
         IF (L_OTIMER) CALL TIMER('ICEDRIFT',4)                            ODC1F405.339    
                                                                           ORH1F305.5727   
      ENDIF ! L_ICESIMPLE or L_ICEFREEDR                                   ODC1F405.340    
                                                                           ORH1F305.5729   
      IF (L_OTIMER) CALL TIMER('ICEFLOE ',3)                               ORH1F305.5730   
                                                                           ORH1F305.5731   
      CALL ICEFLOE(                                                        ORH7F402.114    
*CALL ARGOINDX                                                             ORH7F402.115    
     & ICY,NEWICE,                                                         ORH7F402.116    
     + ICEHEATFLUX,SOLARFLX,                                               OJC2F400.35     
     + HICE,HSNOW,                                                         ICE_CTL.264    
     + ICESNOWRATE,SUBLIM,AICE,FLXTOICE,CARYHEAT,CARYSALT,TOPMELT,         OJC2F400.36     
     + BOTMELT,SURFSAL,SURFTEMP,                                           ICE_CTL.266    
     + anomiceh,                                                           ICE_CTL.269    
     + FKMP,                                                               ICE_CTL.275    
     + STASHWORK(SI(211,32,im_index)),STASHWORK(SI(212,32,im_index)),      GRB4F305.218    
     + STASHWORK(SI(213,32,im_index)),                                     GRB4F305.219    
     & stashwork(si(227,32,im_index)),stashwork(si(228,32,im_index))       OJG1F405.5      
     &,stashwork(si(229,32,im_index)),                                     OJG1F405.6      
     + SF(211,32),SF(212,32),SF(213,32),                                   JT161193.215    
     & sf(227,32),sf(228,32),sf(229,32),                                   OJG1F405.7      
     + H0,AMX,AICEMIN,HICEMIN,RHOICE,RHOSNOW,RHOWATER,                     OCC0F400.65     
     & IMT,IMTM1,JMT,DTTS,DZ(1)                                            ORH3F405.92     
     +,RHOCP,TFREEZE,EDDYDIFF,SALICE,QFUSION                               JT161193.220    
     +,AICEMIZFRY                                                          ODC1F405.341    
     + ,salref)                                                            OJL1F405.73     
                                                                           ORH1F305.5732   
      IF (L_OTIMER) CALL TIMER('ICEFLOE ',4)                               ORH1F305.5733   
                                                                           ORH1F305.5734   
      K=1                                                                  OJC2F400.37     
      IF (SF(214,32))                                                      OJC2F400.38     
     &CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0.                                  OJC2F400.39     
     &              ,ICEHEATFLUX,OCEAN,STASHWORK(SI(214,32,im_index)))     OJC2F400.40     
      IF (SF(215,32))                                                      OJC2F400.41     
     &CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0.                                  OJC2F400.42     
     &              ,ICESNOWRATE,OCEAN,STASHWORK(SI(215,32,im_index)))     OJC2F400.43     
      IF (SF(216,32))                                                      OJC2F400.44     
     &CALL COPYODIAGL(IMT,JMT,K,.TRUE.,0.                                  OJC2F400.45     
     &                ,SURFTEMP,OCEAN,STASHWORK(SI(216,32,im_index)))      OJC2F400.46     
C                                                                          OJG3F403.17     
C     Calculate GBM snowdepth, if requested                                OJG3F403.18     
C                                                                          OJG3F403.19     
      if (sf(218,32)) then                                                 OJG3F403.20     
        do j=j_1,j_jmt                                                     OJG3F403.21     
        do i=1,imt_ice                                                     OJG3F403.22     
          if (ocean(i,j)) gbmhsnow(i,j)=aice(i,j)*hsnow(i,j)               OJG3F403.23     
        enddo                                                              OJG3F403.24     
        enddo                                                              OJG3F403.25     
        call copyodiagl(imt_ice,jmt_ice,1,.true.,0.                        OJG3F403.26     
     &  ,gbmhsnow,ocean,stashwork(si(218,32,im_index)))                    OJG3F403.27     
      endif                                                                OJG3F403.28     
                                                                           ICE_CTL.283    
      CALL STASH(isubmodel,im_ident,32,STASHWORK,                          GKR0F305.937    
*CALL ARGSIZE                                                              JT161193.223    
*CALL ARGD1                                                                JT161193.224    
*CALL ARGDUMA                                                              JT161193.225    
*CALL ARGDUMO                                                              JT161193.226    
*CALL ARGDUMW                                                              GKR1F401.211    
*CALL ARGSTS                                                               JT161193.227    
*CALL ARGPPX                                                               GKR0F305.938    
     & ICODE,CMESSAGE)                                                     JT161193.231    
                                                                           ICE_CTL.284    
      IF (L_OICECOUP) THEN                                                 ORH1F305.5760   
          DO J = J_1, J_JMT                                                ORH3F402.97     
             DO I = 1, IMT                                                 ORH1F305.5762   
                HEATFLUX_C(I,J) = HEATFLUX(I,J)                            ORH1F305.5763   
                SOLARFLX_C(I,J) = SOLARFLX(I,J)                            ORH1F305.5764   
                TOPMELT_C(I,J) = TOPMELT(I,J)                              ORH1F305.5765   
                BOTMELT_C(I,J) = BOTMELT(I,J)                              ORH1F305.5766   
             ENDDO                                                         ORH1F305.5767   
          ENDDO                                                            ORH1F305.5768   
      ENDIF !                                                              ORH1F305.5769   
                                                                           ORH1F305.5770   
                                                                           ICE_CTL.285    
*ENDIF                                                                     ORH1F305.452    
      RETURN                                                               ICE_CTL.286    
      END                                                                  ICE_CTL.287    
*ENDIF                                                                     UDG7F400.276