New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
limrhg.F90 in branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90 @ 6796

Last change on this file since 6796 was 6796, checked in by clem, 8 years ago

rewriting of ice rheology to conserve energy

  • Property svn:keywords set to Id
File size: 38.7 KB
Line 
1MODULE limrhg
2   !!======================================================================
3   !!                     ***  MODULE  limrhg  ***
4   !!   Ice rheology : sea ice rheology
5   !!======================================================================
6   !! History :   -   !  2007-03  (M.A. Morales Maqueda, S. Bouillon) Original code
7   !!            3.0  !  2008-03  (M. Vancoppenolle) LIM3
8   !!             -   !  2008-11  (M. Vancoppenolle, S. Bouillon, Y. Aksenov) add surface tilt in ice rheolohy
9   !!            3.3  !  2009-05  (G.Garric) addition of the lim2_evp cas
10   !!            3.4  !  2011-01  (A. Porter)  dynamical allocation
11   !!            3.5  !  2012-08  (R. Benshila)  AGRIF
12   !!            3.6  !  2016-06  (C. Rousset) Rewriting + landfast ice + possibility to use mEVP (Bouillon 2013)
13   !!----------------------------------------------------------------------
14#if defined key_lim3
15   !!----------------------------------------------------------------------
16   !!   'key_lim3'                                      LIM-3 sea-ice model
17   !!----------------------------------------------------------------------
18   !!   lim_rhg       : computes ice velocities
19   !!----------------------------------------------------------------------
20   USE phycst         ! Physical constant
21   USE oce     , ONLY :  snwice_mass, snwice_mass_b
22   USE par_oce        ! Ocean parameters
23   USE dom_oce        ! Ocean domain
24   USE sbc_oce        ! Surface boundary condition: ocean fields
25   USE sbc_ice        ! Surface boundary condition: ice fields
26   USE ice            ! ice variables
27   USE limitd_me      ! ice strength
28   USE lbclnk         ! Lateral Boundary Condition / MPP link
29   USE lib_mpp        ! MPP library
30   USE wrk_nemo       ! work arrays
31   USE in_out_manager ! I/O manager
32   USE prtctl         ! Print control
33   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
34#if defined key_agrif
35   USE agrif_lim3_interp
36#endif
37#if defined key_bdy
38   USE bdyice_lim
39#endif
40
41   IMPLICIT NONE
42   PRIVATE
43
44   PUBLIC   lim_rhg        ! routine called by lim_dyn
45
46   !! * Substitutions
47#  include "vectopt_loop_substitute.h90"
48   !!----------------------------------------------------------------------
49   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
50   !! $Id$
51   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
52   !!----------------------------------------------------------------------
53CONTAINS
54
55   SUBROUTINE lim_rhg
56      !!-------------------------------------------------------------------
57      !!                 ***  SUBROUTINE lim_rhg  ***
58      !!                          EVP-C-grid
59      !!
60      !! ** purpose : determines sea ice drift from wind stress, ice-ocean
61      !!  stress and sea-surface slope. Ice-ice interaction is described by
62      !!  a non-linear elasto-viscous-plastic (EVP) law including shear
63      !!  strength and a bulk rheology (Hunke and Dukowicz, 2002).   
64      !!
65      !!  The points in the C-grid look like this, dear reader
66      !!
67      !!                              (ji,jj)
68      !!                                 |
69      !!                                 |
70      !!                      (ji-1,jj)  |  (ji,jj)
71      !!                             ---------   
72      !!                            |         |
73      !!                            | (ji,jj) |------(ji,jj)
74      !!                            |         |
75      !!                             ---------   
76      !!                     (ji-1,jj-1)     (ji,jj-1)
77      !!
78      !! ** Inputs  : - wind forcing (stress), oceanic currents
79      !!                ice total volume (vt_i) per unit area
80      !!                snow total volume (vt_s) per unit area
81      !!
82      !! ** Action  : - compute u_ice, v_ice : the components of the
83      !!                sea-ice velocity vector
84      !!              - compute delta_i, shear_i, divu_i, which are inputs
85      !!                of the ice thickness distribution
86      !!
87      !! ** Steps   : 1) Compute ice snow mass, ice strength
88      !!              2) Compute wind, oceanic stresses, mass terms and
89      !!                 coriolis terms of the momentum equation
90      !!              3) Solve the momentum equation (iterative procedure)
91      !!              4) Prevent high velocities if the ice is thin
92      !!              5) Recompute invariants of the strain rate tensor
93      !!                 which are inputs of the ITD, store stress
94      !!                 for the next time step
95      !!              6) Control prints of residual (convergence)
96      !!                 and charge ellipse.
97      !!                 The user should make sure that the parameters
98      !!                 nn_nevp, elastic time scale and rn_creepl maintain stress state
99      !!                 on the charge ellipse for plastic flow
100      !!                 e.g. in the Canadian Archipelago
101      !!
102      !! ** Notes   : There is the possibility to use mEVP from Bouillon 2013
103      !!              (by uncommenting some lines in part 3 and changing alpha and beta parameters)
104      !!              but this solution appears very unstable (see Kimmritz et al 2016)
105      !!
106      !! References : Hunke and Dukowicz, JPO97
107      !!              Bouillon et al., Ocean Modelling 2009
108      !!              Bouillon et al., Ocean Modelling 2013
109      !!-------------------------------------------------------------------
110      INTEGER ::   ji, jj       ! dummy loop indices
111      INTEGER ::   jter         ! local integers
112      CHARACTER (len=50) ::   charout
113
114      REAL(wp) ::   zdtevp, z1_dtevp                                         ! time step for subcycling
115      REAL(wp) ::   ecc2, z1_ecc2                                            ! square of yield ellipse eccenticity
116      REAL(wp) ::   zbeta, zalph1, z1_alph1, zalph2, z1_alph2                ! alpha and beta from Bouillon 2009 and 2013
117      REAL(wp) ::   zm1, zm2, zm3, zmassU, zmassV                            ! ice/snow mass
118      REAL(wp) ::   zdelta, zp_delf, zds2, zdt, zdt2, zdiv, zdiv2            ! temporary scalars
119      REAL(wp) ::   zTauO, zTauB, zTauE, zCor, zvel                          ! temporary scalars
120
121      REAL(wp) ::   zsig1, zsig2                                             ! internal ice stress
122      REAL(wp) ::   zresm                                                    ! Maximal error on ice velocity
123      REAL(wp) ::   zintb, zintn                                             ! dummy argument
124     
125      REAL(wp), POINTER, DIMENSION(:,:) ::   z1_e1t0, z1_e2t0                ! scale factors
126      REAL(wp), POINTER, DIMENSION(:,:) ::   zp_delt                         ! P/delta at T points
127      !
128      REAL(wp), POINTER, DIMENSION(:,:) ::   zaU   , zaV                     ! ice fraction on U/V points
129      REAL(wp), POINTER, DIMENSION(:,:) ::   zmU_t, zmV_t                    ! ice/snow mass/dt on U/V points
130      REAL(wp), POINTER, DIMENSION(:,:) ::   zmf                             ! coriolis parameter at T points
131      REAL(wp), POINTER, DIMENSION(:,:) ::   zTauU_ia , ztauV_ia             ! ice-atm. stress at U-V points
132      REAL(wp), POINTER, DIMENSION(:,:) ::   zspgU , zspgV                   ! surface pressure gradient at U/V points
133      REAL(wp), POINTER, DIMENSION(:,:) ::   v_oceU, u_oceV, v_iceU, u_iceV  ! ocean/ice u/v component on V/U points                           
134      REAL(wp), POINTER, DIMENSION(:,:) ::   zfU   , zfV                     ! internal stresses
135     
136      REAL(wp), POINTER, DIMENSION(:,:) ::   zds                             ! shear
137      REAL(wp), POINTER, DIMENSION(:,:) ::   zs1, zs2, zs12                  ! stress tensor components
138      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_ice, zv_ice, zresr           ! check convergence
139      REAL(wp), POINTER, DIMENSION(:,:) ::   zpice                           ! array used for the calculation of ice surface slope:
140                                                                             !   ocean surface (ssh_m) if ice is not embedded
141                                                                             !   ice top surface if ice is embedded   
142      REAL(wp), POINTER, DIMENSION(:,:) ::   zswitch1, zswitch2              ! dummy arrays
143      REAL(wp), POINTER, DIMENSION(:,:) ::   zfmask, zwf                     ! mask at F points for the ice
144
145      REAL(wp), PARAMETER               ::   zepsi  = 1.0e-20_wp             ! tolerance parameter
146      REAL(wp), PARAMETER               ::   zvmin  = 1.0e-03_wp             ! ice volume below which ice velocity equals ocean velocity
147      REAL(wp), PARAMETER               ::   zshlat = 2._wp                  ! boundary condition for sea-ice velocity (2=no slip ; 0=free slip)
148      !!-------------------------------------------------------------------
149
150      CALL wrk_alloc( jpi,jpj, z1_e1t0, z1_e2t0, zp_delt )
151      CALL wrk_alloc( jpi,jpj, zaU, zaV, zmU_t, zmV_t, zmf, zTauU_ia, ztauV_ia )
152      CALL wrk_alloc( jpi,jpj, zspgU, zspgV, v_oceU, u_oceV, v_iceU, u_iceV, zfU, zfV )
153      CALL wrk_alloc( jpi,jpj, zds, zs1, zs2, zs12, zu_ice, zv_ice, zresr, zpice )
154      CALL wrk_alloc( jpi,jpj, zswitch1, zswitch2, zfmask, zwf )
155
156#if defined key_agrif 
157      CALL agrif_interp_lim3('U')   ! First interpolation of coarse values
158      CALL agrif_interp_lim3('V')
159#endif
160      !
161      !------------------------------------------------------------------------------!
162      ! 0) mask at F points for the ice
163      !------------------------------------------------------------------------------!
164      ! ocean/land mask
165      DO jj = 1, jpjm1
166         DO ji = 1, jpim1      ! NO vector opt.
167            zfmask(ji,jj) = tmask(ji,jj,1) * tmask(ji+1,jj,1) * tmask(ji,jj+1,1) * tmask(ji+1,jj+1,1)
168         END DO
169      END DO
170      CALL lbc_lnk( zfmask, 'F', 1._wp )
171
172      ! Lateral boundary conditions on velocity (modify zfmask)
173      zwf(:,:) = zfmask(:,:)
174      DO jj = 2, jpjm1
175         DO ji = fs_2, fs_jpim1   ! vector opt.
176            IF( zfmask(ji,jj) == 0._wp ) THEN
177               zfmask(ji,jj) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), zwf(ji-1,jj), zwf(ji,jj-1) ) )
178            ENDIF
179         END DO
180      END DO
181      DO jj = 2, jpjm1
182         IF( zfmask(1,jj) == 0._wp ) THEN
183            zfmask(1  ,jj) = zshlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) )
184         ENDIF
185         IF( zfmask(jpi,jj) == 0._wp ) THEN
186            zfmask(jpi,jj) = zshlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) )
187         ENDIF
188      END DO
189      DO ji = 2, jpim1
190         IF( zfmask(ji,1) == 0._wp ) THEN
191            zfmask(ji,1  ) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) )
192         ENDIF
193         IF( zfmask(ji,jpj) == 0._wp ) THEN
194            zfmask(ji,jpj) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) )
195         ENDIF
196      END DO
197      CALL lbc_lnk( zfmask, 'F', 1._wp )
198
199      !------------------------------------------------------------------------------!
200      ! 1) define some variables and initialize arrays
201      !------------------------------------------------------------------------------!
202      ! ecc2: square of yield ellipse eccenticrity
203      ecc2    = rn_ecc * rn_ecc
204      z1_ecc2 = 1._wp / ecc2
205
206      ! Time step for subcycling
207      zdtevp   = rdt_ice / REAL( nn_nevp )
208      z1_dtevp = 1._wp / zdtevp
209
210      ! alpha parameters (Bouillon 2009)
211      zalph1 = ( 2._wp * rn_relast * rdt_ice ) * z1_dtevp
212      zalph2 = zalph1 * z1_ecc2
213
214      ! alpha and beta parameters (Bouillon 2013)
215      !!zalph1 = 40.
216      !!zalph2 = 40.
217      !!zbeta  = 3000.
218      !!zbeta = REAL( nn_nevp )   ! close to classical EVP of Hunke (2001)
219
220      z1_alph1 = 1._wp / ( zalph1 + 1._wp )
221      z1_alph2 = 1._wp / ( zalph2 + 1._wp )
222
223      ! Initialise stress tensor
224      zs1 (:,:) = stress1_i (:,:) 
225      zs2 (:,:) = stress2_i (:,:)
226      zs12(:,:) = stress12_i(:,:)
227
228      ! Ice strength
229      CALL lim_itd_me_icestrength( nn_icestr )
230
231      ! scale factors
232      DO jj = 2, jpjm1
233         DO ji = fs_2, fs_jpim1
234            z1_e1t0(ji,jj) = 1._wp / ( e1t(ji+1,jj  ) + e1t(ji,jj  ) )
235            z1_e2t0(ji,jj) = 1._wp / ( e2t(ji  ,jj+1) + e2t(ji,jj  ) )
236         END DO
237      END DO
238           
239      !
240      !------------------------------------------------------------------------------!
241      ! 2) Wind / ocean stress, mass terms, coriolis terms
242      !------------------------------------------------------------------------------!
243
244      IF( nn_ice_embd == 2 ) THEN             !== embedded sea ice: compute representative ice top surface ==!
245         !                                           
246         ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1}
247         !                                               = (1/nn_fsbc)^2 * {SUM[n], n=0,nn_fsbc-1}
248         zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp     
249         !
250         ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1}
251         !                                               = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1})
252         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp
253         !
254         zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0
255         !
256      ELSE                                    !== non-embedded sea ice: use ocean surface for slope calculation ==!
257         zpice(:,:) = ssh_m(:,:)
258      ENDIF
259
260      DO jj = 2, jpjm1
261         DO ji = fs_2, fs_jpim1
262
263            ! ice fraction at U-V points
264            zaU(ji,jj) = ( at_i(ji,jj) * e1t(ji+1,jj) + at_i(ji+1,jj) * e1t(ji,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
265            zaV(ji,jj) = ( at_i(ji,jj) * e2t(ji,jj+1) + at_i(ji,jj+1) * e2t(ji,jj) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
266
267            ! Ice/snow mass at U-V points
268            zm1 = ( rhosn * vt_s(ji  ,jj  ) + rhoic * vt_i(ji  ,jj  ) )
269            zm2 = ( rhosn * vt_s(ji+1,jj  ) + rhoic * vt_i(ji+1,jj  ) )
270            zm3 = ( rhosn * vt_s(ji  ,jj+1) + rhoic * vt_i(ji  ,jj+1) )
271            zmassU = ( zm1 * e1t(ji+1,jj) + zm2 * e1t(ji,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
272            zmassV = ( zm1 * e2t(ji,jj+1) + zm3 * e2t(ji,jj) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
273
274            ! Ocean currents at U-V points
275            v_oceU(ji,jj)   = 0.5_wp * ( ( v_oce(ji  ,jj) + v_oce(ji  ,jj-1) ) * e1t(ji+1,jj)    &
276               &                       + ( v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) * e1t(ji  ,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
277           
278            u_oceV(ji,jj)   = 0.5_wp * ( ( u_oce(ji,jj  ) + u_oce(ji-1,jj  ) ) * e2t(ji,jj+1)    &
279               &                       + ( u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) * e2t(ji,jj  ) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
280
281            ! Coriolis at T points (m*f)
282            zmf(ji,jj)      = zm1 * ff_t(ji,jj)
283
284            ! m/dt
285            zmU_t(ji,jj)    = zmassU * z1_dtevp
286            zmV_t(ji,jj)    = zmassV * z1_dtevp
287
288            ! Drag ice-atm.
289            zTauU_ia(ji,jj) = zaU(ji,jj) * utau_ice(ji,jj)
290            zTauV_ia(ji,jj) = zaV(ji,jj) * vtau_ice(ji,jj)
291
292            ! Surface pressure gradient (- m*g*GRAD(ssh)) at U-V points
293            zspgU(ji,jj)    = - zmassU * grav * ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj)
294            zspgV(ji,jj)    = - zmassV * grav * ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj)
295
296            ! switches
297            zswitch1(ji,jj) = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zmassU ) )
298            zswitch2(ji,jj) = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zmassV ) )
299
300         END DO
301      END DO
302      CALL lbc_lnk( zmf, 'T', 1. )
303      !
304      !------------------------------------------------------------------------------!
305      ! 3) Solution of the momentum equation, iterative procedure
306      !------------------------------------------------------------------------------!
307      !
308      !                                               !----------------------!
309      DO jter = 1 , nn_nevp                           !    loop over jter    !
310         !                                            !----------------------!       
311         IF(ln_ctl) THEN   ! Convergence test
312            DO jj = 1, jpjm1
313               zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step
314               zv_ice(:,jj) = v_ice(:,jj)
315            END DO
316         ENDIF
317
318         ! --- divergence, tension & shear (Appendix B of Hunke & Dukowicz, 2002) --- !
319         DO jj = 1, jpjm1         ! loops start at 1 since there is no boundary condition (lbc_lnk) at i=1 and j=1 for F points
320            DO ji = 1, jpim1
321
322               ! shear at F points
323               zds(ji,jj) = ( ( u_ice(ji,jj+1) * r1_e1u(ji,jj+1) - u_ice(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj)   &
324                  &         + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)   &
325                  &         ) * r1_e12f(ji,jj) * zfmask(ji,jj)
326
327            END DO
328         END DO
329         CALL lbc_lnk( zds, 'F', 1. )
330
331         DO jj = 2, jpjm1
332            DO ji = 2, jpim1 ! no vector loop
333
334               ! shear**2 at T points (doc eq. A16)
335               zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e12f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e12f(ji-1,jj  )  &
336                  &   + zds(ji,jj-1) * zds(ji,jj-1) * e12f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e12f(ji-1,jj-1)  &
337                  &   ) * 0.25_wp * r1_e12t(ji,jj)
338             
339               ! divergence at T points
340               zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
341                  &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
342                  &    ) * r1_e12t(ji,jj)
343               zdiv2 = zdiv * zdiv
344               
345               ! tension at T points
346               zdt  = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj)   &
347                  &   - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   &
348                  &   ) * r1_e12t(ji,jj)
349               zdt2 = zdt * zdt
350               
351               ! delta at T points
352               zdelta = SQRT( zdiv2 + ( zdt2 + zds2 ) * usecc2 ) 
353
354               ! P/delta at T points
355               zp_delt(ji,jj) = strength(ji,jj) / ( zdelta + rn_creepl )
356               
357               ! stress at T points
358               zs1(ji,jj) = ( zs1(ji,jj) * zalph1 + zp_delt(ji,jj) * ( zdiv - zdelta ) ) * z1_alph1
359               zs2(ji,jj) = ( zs2(ji,jj) * zalph2 + zp_delt(ji,jj) * ( zdt * z1_ecc2 ) ) * z1_alph2
360             
361            END DO
362         END DO
363         CALL lbc_lnk( zp_delt, 'T', 1. )
364
365         DO jj = 1, jpjm1
366            DO ji = 1, jpim1
367
368               ! P/delta at F points
369               zp_delf = 0.25_wp * ( zp_delt(ji,jj) + zp_delt(ji+1,jj) + zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1) )
370               
371               ! stress at F points
372               zs12(ji,jj)= ( zs12(ji,jj) * zalph2 + zp_delf * ( zds(ji,jj) * z1_ecc2 ) * 0.5_wp ) * z1_alph2
373
374            END DO
375         END DO
376         CALL lbc_lnk_multi( zs1, 'T', 1., zs2, 'T', 1., zs12, 'F', 1. )
377 
378
379         ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- !
380         DO jj = 2, jpjm1
381            DO ji = fs_2, fs_jpim1               
382
383               ! U points
384               zfU(ji,jj) = 0.5_wp * ( ( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             &
385                  &                  + ( zs2(ji+1,jj) * e2t(ji+1,jj) * e2t(ji+1,jj) - zs2(ji,jj) * e2t(ji,jj) * e2t(ji,jj)    &
386                  &                    ) * r1_e2u(ji,jj)                                                                      &
387                  &                  + ( zs12(ji,jj) * e1f(ji,jj) * e1f(ji,jj) - zs12(ji,jj-1) * e1f(ji,jj-1) * e1f(ji,jj-1)  &
388                  &                    ) * 2._wp * r1_e1u(ji,jj)                                                              &
389                  &                  ) * r1_e12u(ji,jj)
390
391               ! V points
392               zfV(ji,jj) = 0.5_wp * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             &
393                  &                  - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj)    &
394                  &                    ) * r1_e1v(ji,jj)                                                                      &
395                  &                  + ( zs12(ji,jj) * e2f(ji,jj) * e2f(ji,jj) - zs12(ji-1,jj) * e2f(ji-1,jj) * e2f(ji-1,jj)  &
396                  &                    ) * 2._wp * r1_e2v(ji,jj)                                                              &
397                  &                  ) * r1_e12v(ji,jj)
398
399               ! u_ice at V point
400               u_iceV(ji,jj) = 0.5_wp * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj+1)     &
401                  &                     + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj  ) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
402               
403               ! v_ice at U point
404               v_iceU(ji,jj) = 0.5_wp * ( ( v_ice(ji  ,jj) + v_ice(ji  ,jj-1) ) * e1t(ji+1,jj)     &
405                  &                     + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji  ,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
406
407            END DO
408         END DO
409         !
410         ! --- Computation of ice velocity --- !
411         !  Bouillon et al. 2013 (eq 47-48) => unstable unless alpha, beta are chosen wisely and large nn_nevp
412         !  Bouillon et al. 2009 (eq 34-35) => stable
413         IF( MOD(jter,2) .EQ. 0 ) THEN ! even iterations
414           
415            DO jj = 2, jpjm1
416               DO ji = fs_2, fs_jpim1
417
418                  ! tau_io/(v_oce - v_ice)
419                  zTauO = zaV(ji,jj) * rhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) )  &
420                     &                             + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) )
421
422                  ! tau_bottom/v_ice
423                  zvel  = MAX( zepsi, SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) ) )
424                  ztauB = - tau_icebfr(ji,jj) / zvel
425
426                  ! Coriolis at V-points (energy conserving formulation)
427                  zCor  = - 0.25_wp * r1_e2v(ji,jj) *  &
428                     &    ( zmf(ji,jj  ) * ( e2u(ji,jj  ) * u_ice(ji,jj  ) + e2u(ji-1,jj  ) * u_ice(ji-1,jj  ) )  &
429                     &    + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) )
430
431                  ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
432                  zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCor + zspgV(ji,jj) + zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) )
433
434                  ! landfast switch => 0 = static friction ; 1 = sliding friction
435                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE + ztauB * v_ice(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
436                 
437                  ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009)
438                  v_ice(ji,jj) = (           rswitch   * ( zmV_t(ji,jj) * v_ice(ji,jj)                   &  ! previous velocity
439                     &                                   + zTauE + zTauO * v_ice(ji,jj)                  &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
440                     &                                   ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )  &  ! m/dt + tau_io(only ice part) + landfast
441                     &           + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
442                     &           ) * zswitch2(ji,jj)
443                  ! Bouillon 2013
444                  !!v_ice(ji,jj) = ( zmV_t(ji,jj) * ( zbeta * v_ice(ji,jj) + v_ice_b(ji,jj) )                  &
445                  !!   &           + zfV(ji,jj) + zCor + zTauV_ia(ji,jj) + zTauO * v_oce(ji,jj) + zspgV(ji,jj)  &
446                  !!   &           ) / MAX( zmV_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitch2(ji,jj)
447
448               END DO
449            END DO
450            CALL lbc_lnk( v_ice, 'V', -1. )
451           
452#if defined key_agrif
453            CALL agrif_interp_lim3( 'V' )
454#endif
455#if defined key_bdy
456            CALL bdy_ice_lim_dyn( 'V' )
457#endif         
458
459            DO jj = 2, jpjm1
460               DO ji = fs_2, fs_jpim1
461                               
462                  ! tau_io/(u_oce - u_ice)
463                  zTauO = zaU(ji,jj) * rhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) )  &
464                     &                             + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) )
465
466                  ! tau_bottom/u_ice
467                  zvel  = MAX( zepsi, SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) ) )
468                  ztauB = - tau_icebfr(ji,jj) / zvel
469
470                  ! Coriolis at U-points (energy conserving formulation)
471                  zCor  =   0.25_wp * r1_e1u(ji,jj) *  &
472                     &    ( zmf(ji  ,jj) * ( e1v(ji  ,jj) * v_ice(ji  ,jj) + e1v(ji  ,jj-1) * v_ice(ji  ,jj-1) )  &
473                     &    + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) )
474                 
475                  ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
476                  zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCor + zspgU(ji,jj) + zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) )
477
478                  ! landfast switch => 0 = static friction ; 1 = sliding friction
479                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE + ztauB * u_ice(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
480
481                  ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009)
482                  u_ice(ji,jj) = (           rswitch   * ( zmU_t(ji,jj) * u_ice(ji,jj)                   &  ! previous velocity
483                     &                                   + zTauE + zTauO * u_ice(ji,jj)                  &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
484                     &                                   ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )  &  ! m/dt + tau_io(only ice part) + landfast
485                     &           + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
486                     &           ) * zswitch1(ji,jj)
487                  ! Bouillon 2013
488                  !!u_ice(ji,jj) = ( zmU_t(ji,jj) * ( zbeta * u_ice(ji,jj) + u_ice_b(ji,jj) )                  &
489                  !!   &           + zfU(ji,jj) + zCor + zTauU_ia(ji,jj) + zTauO * u_oce(ji,jj) + zspgU(ji,jj)  &
490                  !!   &           ) / MAX( zmU_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitch1(ji,jj)
491               END DO
492            END DO
493            CALL lbc_lnk( u_ice, 'U', -1. )
494           
495#if defined key_agrif
496            CALL agrif_interp_lim3( 'U' )
497#endif
498#if defined key_bdy
499            CALL bdy_ice_lim_dyn( 'U' )
500#endif         
501
502         ELSE ! odd iterations
503
504            DO jj = 2, jpjm1
505               DO ji = fs_2, fs_jpim1
506
507                  ! tau_io/(u_oce - u_ice)
508                  zTauO = zaU(ji,jj) * rhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) )  &
509                     &                             + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) )
510
511                  ! tau_bottom/u_ice
512                  zvel  = MAX( zepsi, SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) ) )
513                  ztauB = - tau_icebfr(ji,jj) / zvel
514
515                  ! Coriolis at U-points (energy conserving formulation)
516                  zCor  =   0.25_wp * r1_e1u(ji,jj) *  &
517                     &    ( zmf(ji  ,jj) * ( e1v(ji  ,jj) * v_ice(ji  ,jj) + e1v(ji  ,jj-1) * v_ice(ji  ,jj-1) )  &
518                     &    + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) )
519
520                  ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
521                  zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCor + zspgU(ji,jj) + zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) )
522
523                  ! landfast switch => 0 = static friction ; 1 = sliding friction
524                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE + ztauB * u_ice(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
525
526                  ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009)
527                  u_ice(ji,jj) = (           rswitch   * ( zmU_t(ji,jj) * u_ice(ji,jj)                   &  ! previous velocity
528                     &                                   + zTauE + zTauO * u_ice(ji,jj)                  &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
529                     &                                   ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )            &  ! m/dt + tau_io(only ice part) + landfast
530                     &           + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
531                     &           ) * zswitch1(ji,jj)
532                  ! Bouillon 2013
533                  !!u_ice(ji,jj) = ( zmU_t(ji,jj) * ( zbeta * u_ice(ji,jj) + u_ice_b(ji,jj) )                  &
534                  !!   &           + zfU(ji,jj) + zCor + zTauU_ia(ji,jj) + zTauO * u_oce(ji,jj) + zspgU(ji,jj)  &
535                  !!   &           ) / MAX( zmU_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitch1(ji,jj)
536               END DO
537            END DO
538            CALL lbc_lnk( u_ice, 'U', -1. )
539           
540#if defined key_agrif
541            CALL agrif_interp_lim3( 'U' )
542#endif
543#if defined key_bdy
544            CALL bdy_ice_lim_dyn( 'U' )
545#endif         
546
547            DO jj = 2, jpjm1
548               DO ji = fs_2, fs_jpim1
549         
550                  ! tau_io/(v_oce - v_ice)
551                  zTauO = zaV(ji,jj) * rhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) )  &
552                     &                             + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) )
553
554                  ! tau_bottom/v_ice
555                  zvel  = MAX( zepsi, SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) ) )
556                  ztauB = - tau_icebfr(ji,jj) / zvel
557                 
558                  ! Coriolis at V-points (energy conserving formulation)
559                  zCor  = - 0.25_wp * r1_e2v(ji,jj) *  &
560                     &    ( zmf(ji,jj  ) * ( e2u(ji,jj  ) * u_ice(ji,jj  ) + e2u(ji-1,jj  ) * u_ice(ji-1,jj  ) )  &
561                     &    + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) )
562
563                  ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
564                  zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCor + zspgV(ji,jj) + zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) )
565
566                  ! landfast switch => 0 = static friction ; 1 = sliding friction
567                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE + ztauB * v_ice(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
568                 
569                  ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009)
570                  v_ice(ji,jj) = (           rswitch   * ( zmV_t(ji,jj) * v_ice(ji,jj)                   &  ! previous velocity
571                     &                                   + zTauE + zTauO * v_ice(ji,jj)                  &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
572                     &                                   ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )            &  ! m/dt + tau_io(only ice part) + landfast
573                     &           + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
574                     &           ) * zswitch2(ji,jj)
575                  ! Bouillon 2013
576                  !!v_ice(ji,jj) = ( zmV_t(ji,jj) * ( zbeta * v_ice(ji,jj) + v_ice_b(ji,jj) )                  &
577                  !!   &           + zfV(ji,jj) + zCor + zTauV_ia(ji,jj) + zTauO * v_oce(ji,jj) + zspgV(ji,jj)  &
578                  !!   &           ) / MAX( zmV_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitch2(ji,jj)
579               END DO
580            END DO
581            CALL lbc_lnk( v_ice, 'V', -1. )
582           
583#if defined key_agrif
584            CALL agrif_interp_lim3( 'V' )
585#endif
586#if defined key_bdy
587            CALL bdy_ice_lim_dyn( 'V' )
588#endif         
589
590         ENDIF
591         
592         IF(ln_ctl) THEN   ! Convergence test
593            DO jj = 2 , jpjm1
594               zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) )
595            END DO
596            zresm = MAXVAL( zresr( 1:jpi, 2:jpjm1 ) )
597            IF( lk_mpp )   CALL mpp_max( zresm )   ! max over the global domain
598         ENDIF
599         !
600         !                                                ! ==================== !
601      END DO                                              !  end loop over jter  !
602      !                                                   ! ==================== !
603      !
604      !------------------------------------------------------------------------------!
605      ! 4) Limit ice velocities when ice is thin
606      !------------------------------------------------------------------------------!
607      ! If the ice volume is below zvmin then ice velocity should equal the
608      ! ocean velocity. This prevents high velocity when ice is thin
609       DO jj = 2, jpjm1
610         DO ji = fs_2, fs_jpim1
611            rswitch      = MAX( 0._wp, SIGN( 1._wp, vt_i(ji,jj) - zvmin ) )
612            u_ice(ji,jj) = ( rswitch * u_ice(ji,jj) + (1._wp - rswitch) * u_oce(ji,jj) ) * zswitch1(ji,jj)
613            v_ice(ji,jj) = ( rswitch * v_ice(ji,jj) + (1._wp - rswitch) * v_oce(ji,jj) ) * zswitch2(ji,jj)
614         END DO
615      END DO
616
617      CALL lbc_lnk_multi( u_ice, 'U', -1., v_ice, 'V', -1. )
618
619#if defined key_agrif
620      CALL agrif_interp_lim3( 'U' )
621      CALL agrif_interp_lim3( 'V' )
622#endif
623#if defined key_bdy
624      CALL bdy_ice_lim_dyn( 'U' )
625      CALL bdy_ice_lim_dyn( 'V' )
626#endif         
627
628      !------------------------------------------------------------------------------!
629      ! 5) Recompute delta, shear and div (inputs for mechanical redistribution)
630      !------------------------------------------------------------------------------!
631      DO jj = 1, jpjm1
632         DO ji = 1, jpim1
633
634            ! shear at F points
635            zds(ji,jj) = ( ( u_ice(ji,jj+1) * r1_e1u(ji,jj+1) - u_ice(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj)   &
636               &         + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)   &
637               &         ) * r1_e12f(ji,jj) * zfmask(ji,jj)
638
639         END DO
640      END DO           
641      CALL lbc_lnk( zds, 'F', 1. )
642     
643      DO jj = 2, jpjm1
644         DO ji = 2, jpim1 ! no vector loop
645           
646            ! tension**2 at T points
647            zdt  = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj)   &
648               &   - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   &
649               &   ) * r1_e12t(ji,jj)
650            zdt2 = zdt * zdt
651           
652            ! shear**2 at T points (doc eq. A16)
653            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e12f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e12f(ji-1,jj  )  &
654               &   + zds(ji,jj-1) * zds(ji,jj-1) * e12f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e12f(ji-1,jj-1)  &
655               &   ) * 0.25_wp * r1_e12t(ji,jj)
656           
657            ! shear at T points
658            shear_i(ji,jj) = SQRT( zdt2 + zds2 )
659
660            ! divergence at T points
661            divu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
662               &            + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
663               &            ) * r1_e12t(ji,jj)
664           
665            ! delta at T points
666            zdelta         = SQRT( divu_i(ji,jj) * divu_i(ji,jj) + ( zdt2 + zds2 ) * usecc2 ) 
667            delta_i(ji,jj) = zdelta + rn_creepl
668
669         END DO
670      END DO
671      CALL lbc_lnk_multi( shear_i, 'T', 1., divu_i, 'T', 1., delta_i, 'T', 1. )
672     
673      ! --- Store the stress tensor for the next time step --- !
674      stress1_i (:,:) = zs1 (:,:)
675      stress2_i (:,:) = zs2 (:,:)
676      stress12_i(:,:) = zs12(:,:)
677      !
678
679      !------------------------------------------------------------------------------!
680      ! 6) Control prints of residual and charge ellipse
681      !------------------------------------------------------------------------------!
682      !
683      ! print the residual for convergence
684      IF(ln_ctl) THEN
685         WRITE(charout,FMT="('lim_rhg  : res =',D23.16, ' iter =',I4)") zresm, jter
686         CALL prt_ctl_info(charout)
687         CALL prt_ctl(tab2d_1=u_ice, clinfo1=' lim_rhg  : u_ice :', tab2d_2=v_ice, clinfo2=' v_ice :')
688      ENDIF
689
690      ! print charge ellipse
691      ! This can be desactivated once the user is sure that the stress state
692      ! lie on the charge ellipse. See Bouillon et al. 08 for more details
693      IF(ln_ctl) THEN
694         CALL prt_ctl_info('lim_rhg  : numit  :',ivar1=numit)
695         CALL prt_ctl_info('lim_rhg  : nwrite :',ivar1=nwrite)
696         CALL prt_ctl_info('lim_rhg  : MOD    :',ivar1=MOD(numit,nwrite))
697         IF( MOD(numit,nwrite) .EQ. 0 ) THEN
698            WRITE(charout,FMT="('lim_rhg  :', I4, I6, I1, I1, A10)") 1000, numit, 0, 0, ' ch. ell. '
699            CALL prt_ctl_info(charout)
700            DO jj = 2, jpjm1
701               DO ji = 2, jpim1
702                  IF (strength(ji,jj) > 1.0) THEN
703                     zsig1 = ( zs1(ji,jj) + SQRT(zs2(ji,jj)**2 + 4*zs12(ji,jj)**2 ) ) / ( 2*strength(ji,jj) ) 
704                     zsig2 = ( zs1(ji,jj) - SQRT(zs2(ji,jj)**2 + 4*zs12(ji,jj)**2 ) ) / ( 2*strength(ji,jj) )
705                     WRITE(charout,FMT="('lim_rhg  :', I4, I4, D23.16, D23.16, D23.16, D23.16, A10)")
706                     CALL prt_ctl_info(charout)
707                  ENDIF
708               END DO
709            END DO
710            WRITE(charout,FMT="('lim_rhg  :', I4, I6, I1, I1, A10)") 2000, numit, 0, 0, ' ch. ell. '
711            CALL prt_ctl_info(charout)
712         ENDIF
713      ENDIF
714      !
715      CALL wrk_dealloc( jpi,jpj, z1_e1t0, z1_e2t0, zp_delt )
716      CALL wrk_dealloc( jpi,jpj, zaU, zaV, zmU_t, zmV_t, zmf, zTauU_ia, ztauV_ia )
717      CALL wrk_dealloc( jpi,jpj, zspgU, zspgV, v_oceU, u_oceV, v_iceU, u_iceV, zfU, zfV )
718      CALL wrk_dealloc( jpi,jpj, zds, zs1, zs2, zs12, zu_ice, zv_ice, zresr, zpice )
719      CALL wrk_dealloc( jpi,jpj, zswitch1, zswitch2, zfmask, zwf )
720
721   END SUBROUTINE lim_rhg
722
723#else
724   !!----------------------------------------------------------------------
725   !!   Default option          Dummy module           NO LIM sea-ice model
726   !!----------------------------------------------------------------------
727CONTAINS
728   SUBROUTINE lim_rhg         ! Dummy routine
729      WRITE(*,*) 'lim_rhg: You should not have seen this print! error?'
730   END SUBROUTINE lim_rhg
731#endif
732
733   !!==============================================================================
734END MODULE limrhg
Note: See TracBrowser for help on using the repository browser.