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 @ 6989

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

use a namelist parameter to choose between the different advection schemes

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