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.
icedyn_rhg_evp.F90 in NEMO/branches/2018/dev_r9947_SI3_advection/src/ICE – NEMO

source: NEMO/branches/2018/dev_r9947_SI3_advection/src/ICE/icedyn_rhg_evp.F90 @ 10312

Last change on this file since 10312 was 10312, checked in by clem, 5 years ago

add the parameterization of landfast ice from Lemieux2015 and 2016 with the addition of isotropic tensile strength

File size: 58.0 KB
Line 
1MODULE icedyn_rhg_evp
2   !!======================================================================
3   !!                     ***  MODULE  icedyn_rhg_evp  ***
4   !!   Sea-Ice dynamics : rheology Elasto-Viscous-Plastic
5   !!======================================================================
6   !! History :   -   !  2007-03  (M.A. Morales Maqueda, S. Bouillon) Original code
7   !!            3.0  !  2008-03  (M. Vancoppenolle) adaptation to new model
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 evp case
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 + mEVP (Bouillon 2013)
13   !!            3.7  !  2017     (C. Rousset)  add aEVP (Kimmritz 2016-2017)
14   !!            4.0  !  2018     (many people) SI3 [aka Sea Ice cube]
15   !!----------------------------------------------------------------------
16#if defined key_si3
17   !!----------------------------------------------------------------------
18   !!   'key_si3'                                       SI3 sea-ice model
19   !!----------------------------------------------------------------------
20   !!   ice_dyn_rhg_evp : computes ice velocities from EVP rheology
21   !!   rhg_evp_rst     : read/write EVP fields in ice restart
22   !!----------------------------------------------------------------------
23   USE phycst         ! Physical constant
24   USE dom_oce        ! Ocean domain
25   USE sbc_oce , ONLY : ln_ice_embd, nn_fsbc, ssh_m
26   USE sbc_ice , ONLY : utau_ice, vtau_ice, snwice_mass, snwice_mass_b
27   USE ice            ! sea-ice: ice variables
28   USE icedyn_rdgrft  ! sea-ice: ice strength
29   USE bdy_oce , ONLY : ln_bdy 
30   USE bdyice 
31#if defined key_agrif
32   USE agrif_ice_interp
33#endif
34   !
35   USE in_out_manager ! I/O manager
36   USE iom            ! I/O manager library
37   USE lib_mpp        ! MPP library
38   USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
39   USE lbclnk         ! lateral boundary conditions (or mpp links)
40   USE prtctl         ! Print control
41
42   IMPLICIT NONE
43   PRIVATE
44
45   PUBLIC   ice_dyn_rhg_evp   ! called by icedyn_rhg.F90
46   PUBLIC   rhg_evp_rst       ! called by icedyn_rhg.F90
47
48   !! * Substitutions
49#  include "vectopt_loop_substitute.h90"
50   !!----------------------------------------------------------------------
51   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
52   !! $Id: icedyn_rhg_evp.F90 8378 2017-07-26 13:55:59Z clem $
53   !! Software governed by the CeCILL licence     (./LICENSE)
54   !!----------------------------------------------------------------------
55CONTAINS
56
57   SUBROUTINE ice_dyn_rhg_evp( kt, pstress1_i, pstress2_i, pstress12_i, pshear_i, pdivu_i, pdelta_i )
58      !!-------------------------------------------------------------------
59      !!                 ***  SUBROUTINE ice_dyn_rhg_evp  ***
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   : 0) compute mask at F point
90      !!              1) Compute ice snow mass, ice strength
91      !!              2) Compute wind, oceanic stresses, mass terms and
92      !!                 coriolis terms of the momentum equation
93      !!              3) Solve the momentum equation (iterative procedure)
94      !!              4) Recompute delta, shear and divergence
95      !!                 (which are inputs of the ITD) & store stress
96      !!                 for the next time step
97      !!              5) Diagnostics including charge ellipse
98      !!
99      !! ** Notes   : There is the possibility to use aEVP from the nice work of Kimmritz et al. (2016 & 2017)
100      !!              by setting up ln_aEVP=T (i.e. changing alpha and beta parameters).
101      !!              This is an upgraded version of mEVP from Bouillon et al. 2013
102      !!              (i.e. more stable and better convergence)
103      !!
104      !! References : Hunke and Dukowicz, JPO97
105      !!              Bouillon et al., Ocean Modelling 2009
106      !!              Bouillon et al., Ocean Modelling 2013
107      !!              Kimmritz et al., Ocean Modelling 2016 & 2017
108      !!-------------------------------------------------------------------
109      INTEGER                 , INTENT(in   ) ::   kt                                    ! time step
110      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   pstress1_i, pstress2_i, pstress12_i   !
111      REAL(wp), DIMENSION(:,:), INTENT(  out) ::   pshear_i  , pdivu_i   , pdelta_i      !
112      !!
113      INTEGER ::   ji, jj       ! dummy loop indices
114      INTEGER ::   jter         ! local integers
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) ::   zalph1, z1_alph1, zalph2, z1_alph2                  ! alpha coef from Bouillon 2009 or Kimmritz 2017
120      REAL(wp) ::   zm1, zm2, zm3, zmassU, zmassV, zvU, zvV             ! ice/snow mass and volume
121      REAL(wp) ::   zdelta, zp_delf, zds2, zdt, zdt2, zdiv, zdiv2       ! temporary scalars
122      REAL(wp) ::   zTauO, zTauB, zTauE, zvel                           ! temporary scalars
123      REAL(wp) ::   zkt                                                 ! isotropic tensile strength for landfast ice
124      REAL(wp) ::   zvCr                                                ! critical ice volume above which ice is landfast
125      !
126      REAL(wp) ::   zresm                                               ! Maximal error on ice velocity
127      REAL(wp) ::   zintb, zintn                                        ! dummy argument
128      REAL(wp) ::   zfac_x, zfac_y
129      REAL(wp) ::   zshear, zdum1, zdum2
130      !
131      REAL(wp), DIMENSION(jpi,jpj) ::   z1_e1t0, z1_e2t0                ! scale factors
132      REAL(wp), DIMENSION(jpi,jpj) ::   zp_delt                         ! P/delta at T points
133      REAL(wp), DIMENSION(jpi,jpj) ::   zbeta                           ! beta coef from Kimmritz 2017
134      !
135      REAL(wp), DIMENSION(jpi,jpj) ::   zdt_m                           ! (dt / ice-snow_mass) on T points
136      REAL(wp), DIMENSION(jpi,jpj) ::   zaU   , zaV                     ! ice fraction on U/V points
137      REAL(wp), DIMENSION(jpi,jpj) ::   zmU_t, zmV_t                    ! (ice-snow_mass / dt) on U/V points
138      REAL(wp), DIMENSION(jpi,jpj) ::   zmf                             ! coriolis parameter at T points
139      REAL(wp), DIMENSION(jpi,jpj) ::   zTauU_ia , ztauV_ia             ! ice-atm. stress at U-V points
140      REAL(wp), DIMENSION(jpi,jpj) ::   zTauU_ib , ztauV_ib             ! ice-bottom stress at U-V points (landfast param)
141      REAL(wp), DIMENSION(jpi,jpj) ::   zspgU , zspgV                   ! surface pressure gradient at U/V points
142      REAL(wp), DIMENSION(jpi,jpj) ::   v_oceU, u_oceV, v_iceU, u_iceV  ! ocean/ice u/v component on V/U points                           
143      REAL(wp), DIMENSION(jpi,jpj) ::   zfU   , zfV                     ! internal stresses
144      !
145      REAL(wp), DIMENSION(jpi,jpj) ::   zds                             ! shear
146      REAL(wp), DIMENSION(jpi,jpj) ::   zs1, zs2, zs12                  ! stress tensor components
147      REAL(wp), DIMENSION(jpi,jpj) ::   zu_ice, zv_ice, zresr           ! check convergence
148      REAL(wp), DIMENSION(jpi,jpj) ::   zpice                           ! array used for the calculation of ice surface slope:
149      !                                                                 !    ocean surface (ssh_m) if ice is not embedded
150      !                                                                 !    ice top surface if ice is embedded   
151      REAL(wp), DIMENSION(jpi,jpj) ::   zCorx, zCory                    ! Coriolis stress array
152      REAL(wp), DIMENSION(jpi,jpj) ::   ztaux_oi, ztauy_oi              ! Ocean-to-ice stress array
153      !
154      REAL(wp), DIMENSION(jpi,jpj) ::   zswitchU, zswitchV              ! dummy arrays
155      REAL(wp), DIMENSION(jpi,jpj) ::   zmaskU, zmaskV                  ! mask for ice presence
156      REAL(wp), DIMENSION(jpi,jpj) ::   zfmask, zwf                     ! mask at F points for the ice
157
158      REAL(wp), PARAMETER          ::   zepsi  = 1.0e-20_wp             ! tolerance parameter
159      REAL(wp), PARAMETER          ::   zmmin  = 1._wp                  ! ice mass (kg/m2) below which ice velocity equals ocean velocity
160      !! --- diags
161      REAL(wp), DIMENSION(jpi,jpj) ::   zswi
162      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zsig1, zsig2, zsig3
163      !! --- SIMIP diags
164      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_sig1      ! Average normal stress in sea ice   
165      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_sig2      ! Maximum shear stress in sea ice
166      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_dssh_dx   ! X-direction sea-surface tilt term (N/m2)
167      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_dssh_dy   ! X-direction sea-surface tilt term (N/m2)
168      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_corstrx   ! X-direction coriolis stress (N/m2)
169      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_corstry   ! Y-direction coriolis stress (N/m2)
170      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_intstrx   ! X-direction internal stress (N/m2)
171      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_intstry   ! Y-direction internal stress (N/m2)
172      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_utau_oi   ! X-direction ocean-ice stress
173      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_vtau_oi   ! Y-direction ocean-ice stress 
174      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_xmtrp_ice ! X-component of ice mass transport (kg/s)
175      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_ymtrp_ice ! Y-component of ice mass transport (kg/s)
176      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_xmtrp_snw ! X-component of snow mass transport (kg/s)
177      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_ymtrp_snw ! Y-component of snow mass transport (kg/s)
178      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_xatrp     ! X-component of area transport (m2/s)
179      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_yatrp     ! Y-component of area transport (m2/s)     
180      !!-------------------------------------------------------------------
181
182      IF( kt == nit000 .AND. lwp )   WRITE(numout,*) '-- ice_dyn_rhg_evp: EVP sea-ice rheology'
183      !
184!!gm for Clem:  OPTIMIZATION:  I think zfmask can be computed one for all at the initialization....
185      !------------------------------------------------------------------------------!
186      ! 0) mask at F points for the ice
187      !------------------------------------------------------------------------------!
188      ! ocean/land mask
189      DO jj = 1, jpjm1
190         DO ji = 1, jpim1      ! NO vector opt.
191            zfmask(ji,jj) = tmask(ji,jj,1) * tmask(ji+1,jj,1) * tmask(ji,jj+1,1) * tmask(ji+1,jj+1,1)
192         END DO
193      END DO
194      CALL lbc_lnk( zfmask, 'F', 1._wp )
195
196      ! Lateral boundary conditions on velocity (modify zfmask)
197      zwf(:,:) = zfmask(:,:)
198      DO jj = 2, jpjm1
199         DO ji = fs_2, fs_jpim1   ! vector opt.
200            IF( zfmask(ji,jj) == 0._wp ) THEN
201               zfmask(ji,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), zwf(ji-1,jj), zwf(ji,jj-1) ) )
202            ENDIF
203         END DO
204      END DO
205      DO jj = 2, jpjm1
206         IF( zfmask(1,jj) == 0._wp ) THEN
207            zfmask(1  ,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) )
208         ENDIF
209         IF( zfmask(jpi,jj) == 0._wp ) THEN
210            zfmask(jpi,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) )
211         ENDIF
212      END DO
213      DO ji = 2, jpim1
214         IF( zfmask(ji,1) == 0._wp ) THEN
215            zfmask(ji,1  ) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) )
216         ENDIF
217         IF( zfmask(ji,jpj) == 0._wp ) THEN
218            zfmask(ji,jpj) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) )
219         ENDIF
220      END DO
221      CALL lbc_lnk( zfmask, 'F', 1._wp )
222
223      !------------------------------------------------------------------------------!
224      ! 1) define some variables and initialize arrays
225      !------------------------------------------------------------------------------!
226      zrhoco = rau0 * rn_cio 
227
228      ! ecc2: square of yield ellipse eccenticrity
229      ecc2    = rn_ecc * rn_ecc
230      z1_ecc2 = 1._wp / ecc2
231
232      ! Time step for subcycling
233      zdtevp   = rdt_ice / REAL( nn_nevp )
234      z1_dtevp = 1._wp / zdtevp
235
236      ! alpha parameters (Bouillon 2009)
237      IF( .NOT. ln_aEVP ) THEN
238         zalph1 = ( 2._wp * rn_relast * rdt_ice ) * z1_dtevp
239         zalph2 = zalph1 * z1_ecc2
240
241         z1_alph1 = 1._wp / ( zalph1 + 1._wp )
242         z1_alph2 = 1._wp / ( zalph2 + 1._wp )
243      ENDIF
244         
245      ! Initialise stress tensor
246      zs1 (:,:) = pstress1_i (:,:) 
247      zs2 (:,:) = pstress2_i (:,:)
248      zs12(:,:) = pstress12_i(:,:)
249
250      ! Ice strength
251      CALL ice_strength
252
253      ! scale factors
254      DO jj = 2, jpjm1
255         DO ji = fs_2, fs_jpim1
256            z1_e1t0(ji,jj) = 1._wp / ( e1t(ji+1,jj  ) + e1t(ji,jj  ) )
257            z1_e2t0(ji,jj) = 1._wp / ( e2t(ji  ,jj+1) + e2t(ji,jj  ) )
258         END DO
259      END DO
260
261      ! landfast param from Lemieux(2016): add isotropic tensile strength (following Konig Beatty and Holland, 2010)
262      IF( ln_landfast_L16 .OR. ln_landfast_home ) THEN   ;   zkt = rn_tensile
263      ELSE                                               ;   zkt = 0._wp
264      ENDIF
265      !
266      !------------------------------------------------------------------------------!
267      ! 2) Wind / ocean stress, mass terms, coriolis terms
268      !------------------------------------------------------------------------------!
269
270      IF( ln_ice_embd ) THEN             !== embedded sea ice: compute representative ice top surface ==!
271         !                                           
272         ! average interpolation coeff as used in dynspg = (1/nn_fsbc)   * {SUM[n/nn_fsbc], n=0,nn_fsbc-1}
273         !                                               = (1/nn_fsbc)^2 * {SUM[n]        , n=0,nn_fsbc-1}
274         zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp     
275         !
276         ! average interpolation coeff as used in dynspg = (1/nn_fsbc)   *    {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1}
277         !                                               = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1})
278         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp
279         !
280         zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0
281         !
282      ELSE                               !== non-embedded sea ice: use ocean surface for slope calculation ==!
283         zpice(:,:) = ssh_m(:,:)
284      ENDIF
285
286      DO jj = 2, jpjm1
287         DO ji = fs_2, fs_jpim1
288
289            ! ice fraction at U-V points
290            zaU(ji,jj) = 0.5_wp * ( at_i(ji,jj) * e1e2t(ji,jj) + at_i(ji+1,jj) * e1e2t(ji+1,jj) ) * r1_e1e2u(ji,jj) * umask(ji,jj,1)
291            zaV(ji,jj) = 0.5_wp * ( at_i(ji,jj) * e1e2t(ji,jj) + at_i(ji,jj+1) * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1)
292
293            ! Ice/snow mass at U-V points
294            zm1 = ( rhos * vt_s(ji  ,jj  ) + rhoi * vt_i(ji  ,jj  ) )
295            zm2 = ( rhos * vt_s(ji+1,jj  ) + rhoi * vt_i(ji+1,jj  ) )
296            zm3 = ( rhos * vt_s(ji  ,jj+1) + rhoi * vt_i(ji  ,jj+1) )
297            zmassU = 0.5_wp * ( zm1 * e1e2t(ji,jj) + zm2 * e1e2t(ji+1,jj) ) * r1_e1e2u(ji,jj) * umask(ji,jj,1)
298            zmassV = 0.5_wp * ( zm1 * e1e2t(ji,jj) + zm3 * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1)
299
300            ! Ocean currents at U-V points
301            v_oceU(ji,jj)   = 0.5_wp * ( ( v_oce(ji  ,jj) + v_oce(ji  ,jj-1) ) * e1t(ji+1,jj)    &
302               &                       + ( v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) * e1t(ji  ,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
303           
304            u_oceV(ji,jj)   = 0.5_wp * ( ( u_oce(ji,jj  ) + u_oce(ji-1,jj  ) ) * e2t(ji,jj+1)    &
305               &                       + ( u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) * e2t(ji,jj  ) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
306
307            ! Coriolis at T points (m*f)
308            zmf(ji,jj)      = zm1 * ff_t(ji,jj)
309
310            ! dt/m at T points (for alpha and beta coefficients)
311            zdt_m(ji,jj)    = zdtevp / MAX( zm1, zmmin )
312           
313            ! m/dt
314            zmU_t(ji,jj)    = zmassU * z1_dtevp
315            zmV_t(ji,jj)    = zmassV * z1_dtevp
316           
317            ! Drag ice-atm.
318            zTauU_ia(ji,jj) = zaU(ji,jj) * utau_ice(ji,jj)
319            zTauV_ia(ji,jj) = zaV(ji,jj) * vtau_ice(ji,jj)
320
321            ! Surface pressure gradient (- m*g*GRAD(ssh)) at U-V points
322            zspgU(ji,jj)    = - zmassU * grav * ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj)
323            zspgV(ji,jj)    = - zmassV * grav * ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj)
324
325            ! masks
326            zmaskU(ji,jj) = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zmassU ) )  ! 0 if no ice
327            zmaskV(ji,jj) = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zmassV ) )  ! 0 if no ice
328
329            ! switches
330            zswitchU(ji,jj) = MAX( 0._wp, SIGN( 1._wp, zmassU - zmmin ) ) ! 0 if ice mass < zmmin
331            zswitchV(ji,jj) = MAX( 0._wp, SIGN( 1._wp, zmassV - zmmin ) ) ! 0 if ice mass < zmmin
332
333         END DO
334      END DO
335      CALL lbc_lnk_multi( zmf, 'T', 1., zdt_m, 'T', 1. )
336      !
337      !                                  !== Landfast ice parameterization ==!
338      !
339      IF( ln_landfast_L16 ) THEN         !-- Lemieux 2016
340         DO jj = 2, jpjm1
341            DO ji = fs_2, fs_jpim1
342               ! ice thickness at U-V points
343               zvU = 0.5_wp * ( vt_i(ji,jj) * e1e2t(ji,jj) + vt_i(ji+1,jj) * e1e2t(ji+1,jj) ) * r1_e1e2u(ji,jj) * umask(ji,jj,1)
344               zvV = 0.5_wp * ( vt_i(ji,jj) * e1e2t(ji,jj) + vt_i(ji,jj+1) * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1)
345               ! ice-bottom stress at U points
346               zvCr = zaU(ji,jj) * rn_depfra * hu_n(ji,jj)
347               zTauU_ib(ji,jj)   = rn_icebfr * MAX( 0._wp, zvU - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaU(ji,jj) ) )
348               ! ice-bottom stress at V points
349               zvCr = zaV(ji,jj) * rn_depfra * hv_n(ji,jj)
350               zTauV_ib(ji,jj)   = rn_icebfr * MAX( 0._wp, zvV - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaV(ji,jj) ) )
351               ! ice_bottom stress at T points
352               zvCr = at_i(ji,jj) * rn_depfra * ht_n(ji,jj)
353               tau_icebfr(ji,jj) = rn_icebfr * MAX( 0._wp, vt_i(ji,jj) - zvCr ) * EXP( -rn_crhg * ( 1._wp - at_i(ji,jj) ) )
354            END DO
355         END DO
356         CALL lbc_lnk( tau_icebfr(:,:), 'T', 1. )
357         !
358      ELSEIF( ln_landfast_home ) THEN          !-- Home made
359         DO jj = 2, jpjm1
360            DO ji = fs_2, fs_jpim1
361               zTauU_ib(ji,jj) = tau_icebfr(ji,jj)
362               zTauV_ib(ji,jj) = tau_icebfr(ji,jj)
363            END DO
364         END DO
365         !
366      ELSE                                     !-- no landfast
367         DO jj = 2, jpjm1
368            DO ji = fs_2, fs_jpim1
369               zTauU_ib(ji,jj) = 0._wp
370               zTauV_ib(ji,jj) = 0._wp
371            END DO
372         END DO
373      ENDIF
374      IF( iom_use('tau_icebfr') )   CALL iom_put( 'tau_icebfr', tau_icebfr(:,:) )
375
376      !------------------------------------------------------------------------------!
377      ! 3) Solution of the momentum equation, iterative procedure
378      !------------------------------------------------------------------------------!
379      !
380      !                                               !----------------------!
381      DO jter = 1 , nn_nevp                           !    loop over jter    !
382         !                                            !----------------------!       
383         IF(ln_ctl) THEN   ! Convergence test
384            DO jj = 1, jpjm1
385               zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step
386               zv_ice(:,jj) = v_ice(:,jj)
387            END DO
388         ENDIF
389
390         ! --- divergence, tension & shear (Appendix B of Hunke & Dukowicz, 2002) --- !
391         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
392            DO ji = 1, jpim1
393
394               ! shear at F points
395               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)   &
396                  &         + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)   &
397                  &         ) * r1_e1e2f(ji,jj) * zfmask(ji,jj)
398
399            END DO
400         END DO
401         CALL lbc_lnk( zds, 'F', 1. )
402
403         DO jj = 2, jpj    ! loop to jpi,jpj to avoid making a communication for zs1,zs2,zs12
404            DO ji = 2, jpi ! no vector loop
405
406               ! shear**2 at T points (doc eq. A16)
407               zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
408                  &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
409                  &   ) * 0.25_wp * r1_e1e2t(ji,jj)
410             
411               ! divergence at T points
412               zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
413                  &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
414                  &    ) * r1_e1e2t(ji,jj)
415               zdiv2 = zdiv * zdiv
416               
417               ! tension at T points
418               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)   &
419                  &   - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   &
420                  &   ) * r1_e1e2t(ji,jj)
421               zdt2 = zdt * zdt
422               
423               ! delta at T points
424               zdelta = SQRT( zdiv2 + ( zdt2 + zds2 ) * z1_ecc2 ) 
425
426               ! P/delta at T points
427               zp_delt(ji,jj) = strength(ji,jj) / ( zdelta + rn_creepl )
428
429               ! alpha & beta for aEVP
430               !   gamma = 0.5*P/(delta+creepl) * (c*pi)**2/Area * dt/m
431               !   alpha = beta = sqrt(4*gamma)
432               IF( ln_aEVP ) THEN
433                  zalph1   = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) )
434                  z1_alph1 = 1._wp / ( zalph1 + 1._wp )
435                  zalph2   = zalph1
436                  z1_alph2 = z1_alph1
437               ENDIF
438               
439               ! stress at T points (zkt/=0 if landfast)
440               zs1(ji,jj) = ( zs1(ji,jj) * zalph1 + zp_delt(ji,jj) * ( zdiv * (1._wp + zkt) - zdelta * (1._wp - zkt) ) ) * z1_alph1
441               zs2(ji,jj) = ( zs2(ji,jj) * zalph2 + zp_delt(ji,jj) * ( zdt * z1_ecc2 * (1._wp + zkt) ) ) * z1_alph2
442             
443            END DO
444         END DO
445         CALL lbc_lnk( zp_delt, 'T', 1. )
446
447         DO jj = 1, jpjm1
448            DO ji = 1, jpim1
449
450               ! alpha & beta for aEVP
451               IF( ln_aEVP ) THEN
452                  zalph2   = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) )
453                  z1_alph2 = 1._wp / ( zalph2 + 1._wp )
454                  zbeta(ji,jj) = zalph2
455               ENDIF
456               
457               ! P/delta at F points
458               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) )
459               
460               ! stress at F points (zkt/=0 if landfast)
461               zs12(ji,jj)= ( zs12(ji,jj) * zalph2 + zp_delf * ( zds(ji,jj) * z1_ecc2 * (1._wp + zkt) ) * 0.5_wp ) * z1_alph2
462
463            END DO
464         END DO
465
466         ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- !
467         DO jj = 2, jpjm1
468            DO ji = fs_2, fs_jpim1               
469               !                   !--- U points
470               zfU(ji,jj) = 0.5_wp * ( ( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             &
471                  &                  + ( zs2(ji+1,jj) * e2t(ji+1,jj) * e2t(ji+1,jj) - zs2(ji,jj) * e2t(ji,jj) * e2t(ji,jj)    &
472                  &                    ) * r1_e2u(ji,jj)                                                                      &
473                  &                  + ( zs12(ji,jj) * e1f(ji,jj) * e1f(ji,jj) - zs12(ji,jj-1) * e1f(ji,jj-1) * e1f(ji,jj-1)  &
474                  &                    ) * 2._wp * r1_e1u(ji,jj)                                                              &
475                  &                  ) * r1_e1e2u(ji,jj)
476               !
477               !                !--- V points
478               zfV(ji,jj) = 0.5_wp * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             &
479                  &                  - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj)    &
480                  &                    ) * r1_e1v(ji,jj)                                                                      &
481                  &                  + ( zs12(ji,jj) * e2f(ji,jj) * e2f(ji,jj) - zs12(ji-1,jj) * e2f(ji-1,jj) * e2f(ji-1,jj)  &
482                  &                    ) * 2._wp * r1_e2v(ji,jj)                                                              &
483                  &                  ) * r1_e1e2v(ji,jj)
484               !
485               !                !--- u_ice at V point
486               u_iceV(ji,jj) = 0.5_wp * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj+1)     &
487                  &                     + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj  ) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1)
488               !
489               !                !--- v_ice at U point
490               v_iceU(ji,jj) = 0.5_wp * ( ( v_ice(ji  ,jj) + v_ice(ji  ,jj-1) ) * e1t(ji+1,jj)     &
491                  &                     + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji  ,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1)
492            END DO
493         END DO
494         !
495         ! --- Computation of ice velocity --- !
496         !  Bouillon et al. 2013 (eq 47-48) => unstable unless alpha, beta vary as in Kimmritz 2016 & 2017
497         !  Bouillon et al. 2009 (eq 34-35) => stable
498         IF( MOD(jter,2) == 0 ) THEN ! even iterations
499            !
500            DO jj = 2, jpjm1
501               DO ji = fs_2, fs_jpim1
502                  !                 !--- tau_io/(v_oce - v_ice)
503                  zTauO = zaV(ji,jj) * zrhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) )  &
504                     &                              + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) )
505                  !                 !--- Ocean-to-Ice stress
506                  ztauy_oi(ji,jj) = zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) )
507                  !
508                  !                 !--- tau_bottom/v_ice
509                  zvel  = 5.e-05_wp + SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) )
510                  zTauB = - zTauV_ib(ji,jj) / zvel
511                  !
512                  !                 !--- Coriolis at V-points (energy conserving formulation)
513                  zCory(ji,jj)  = - 0.25_wp * r1_e2v(ji,jj) *  &
514                     &    ( zmf(ji,jj  ) * ( e2u(ji,jj  ) * u_ice(ji,jj  ) + e2u(ji-1,jj  ) * u_ice(ji-1,jj  ) )  &
515                     &    + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) )
516                  !
517                  !                 !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
518                  zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCory(ji,jj) + zspgV(ji,jj) + ztauy_oi(ji,jj)
519                  !
520                  !                 !--- landfast switch => 0 = static friction ; 1 = sliding friction
521                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - zTauV_ib(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
522                  !
523                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017)
524                  v_ice(ji,jj) = ( (          rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) )         & ! previous velocity
525                     &                                  + zTauE + zTauO * v_ice(ji,jj)                                            & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
526                     &                                  ) / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast
527                     &                 + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0
528                     &             ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) )                               & ! v_ice = v_oce if mass < zmmin
529                     &           ) * zmaskV(ji,jj)
530                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009)
531                  v_ice(ji,jj) = ( (           rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                             &  ! previous velocity
532                     &                                     + zTauE + zTauO * v_ice(ji,jj)                             &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
533                     &                                     ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )             &  ! m/dt + tau_io(only ice part) + landfast
534                     &              + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
535                     &              ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) )                  &  ! v_ice = v_oce if mass < zmmin
536                     &            ) * zmaskV(ji,jj)
537                  ENDIF
538               END DO
539            END DO
540            CALL lbc_lnk( v_ice, 'V', -1. )
541            !
542#if defined key_agrif
543!!            CALL agrif_interp_ice( 'V', jter, nn_nevp )
544            CALL agrif_interp_ice( 'V' )
545#endif
546            IF( ln_bdy ) CALL bdy_ice_dyn( 'V' )
547            !
548            DO jj = 2, jpjm1
549               DO ji = fs_2, fs_jpim1         
550                  !                 !--- tau_io/(u_oce - u_ice)
551                  zTauO = zaU(ji,jj) * zrhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) )  &
552                     &                              + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) )
553                  !                 !--- Ocean-to-Ice stress
554                  ztaux_oi(ji,jj) = zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) )
555                  !
556                  !                 !--- tau_bottom/u_ice
557                  zvel  = 5.e-05_wp + SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) )
558                  zTauB = - zTauU_ib(ji,jj) / zvel
559                  !
560                  !                 !--- Coriolis at U-points (energy conserving formulation)
561                  zCorx(ji,jj)  =   0.25_wp * r1_e1u(ji,jj) *  &
562                     &    ( zmf(ji  ,jj) * ( e1v(ji  ,jj) * v_ice(ji  ,jj) + e1v(ji  ,jj-1) * v_ice(ji  ,jj-1) )  &
563                     &    + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) )
564                  !
565                  !                 !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
566                  zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCorx(ji,jj) + zspgU(ji,jj) + ztaux_oi(ji,jj)
567                  !
568                  !                 !--- landfast switch => 0 = static friction ; 1 = sliding friction
569                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - zTauU_ib(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
570                  !
571                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017)
572                  u_ice(ji,jj) = ( (          rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) )         & ! previous velocity
573                     &                                     + zTauE + zTauO * u_ice(ji,jj)                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
574                     &                                  ) / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast
575                     &              + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )              & ! static friction => slow decrease to v=0
576                     &              ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) )                              & ! v_ice = v_oce if mass < zmmin
577                     &            ) * zmaskU(ji,jj)
578                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009)
579                  u_ice(ji,jj) = ( (           rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                             &  ! previous velocity
580                     &                                     + zTauE + zTauO * u_ice(ji,jj)                             &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
581                     &                                     ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )             &  ! m/dt + tau_io(only ice part) + landfast
582                     &              + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
583                     &              ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) )                  &  ! v_ice = v_oce if mass < zmmin
584                     &            ) * zmaskU(ji,jj)
585                  ENDIF
586               END DO
587            END DO
588            CALL lbc_lnk( u_ice, 'U', -1. )
589            !
590#if defined key_agrif
591!!            CALL agrif_interp_ice( 'U', jter, nn_nevp )
592            CALL agrif_interp_ice( 'U' )
593#endif
594            IF( ln_bdy ) CALL bdy_ice_dyn( 'U' )
595            !
596         ELSE ! odd iterations
597            !
598            DO jj = 2, jpjm1
599               DO ji = fs_2, fs_jpim1
600                  !                 !--- tau_io/(u_oce - u_ice)
601                  zTauO = zaU(ji,jj) * zrhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) )  &
602                     &                              + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) )
603                  !                 !--- Ocean-to-Ice stress
604                  ztaux_oi(ji,jj) = zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) )
605                  !
606                  !                 !--- tau_bottom/u_ice
607                  zvel  = 5.e-05_wp + SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) )
608                  zTauB = - zTauU_ib(ji,jj) / zvel
609                  !
610                  !                 !--- Coriolis at U-points (energy conserving formulation)
611                  zCorx(ji,jj)  =   0.25_wp * r1_e1u(ji,jj) *  &
612                     &    ( zmf(ji  ,jj) * ( e1v(ji  ,jj) * v_ice(ji  ,jj) + e1v(ji  ,jj-1) * v_ice(ji  ,jj-1) )  &
613                     &    + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) )
614                  !
615                  !                 !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
616                  zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCorx(ji,jj) + zspgU(ji,jj) + ztaux_oi(ji,jj)
617                  !
618                  !                 !--- landfast switch => 0 = static friction ; 1 = sliding friction
619                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - zTauU_ib(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
620                  !
621                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017)
622                  u_ice(ji,jj) = ( (          rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) )         & ! previous velocity
623                     &                                     + zTauE + zTauO * u_ice(ji,jj)                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
624                     &                                  ) / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast
625                     &              + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )              & ! static friction => slow decrease to v=0
626                     &              ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) )                              & ! v_ice = v_oce if mass < zmmin
627                     &            ) * zmaskU(ji,jj)
628                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009)
629                  u_ice(ji,jj) = ( (           rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                             &  ! previous velocity
630                     &                                     + zTauE + zTauO * u_ice(ji,jj)                             &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
631                     &                                     ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )             &  ! m/dt + tau_io(only ice part) + landfast
632                     &              + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
633                     &              ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) )                  &  ! v_ice = v_oce if mass < zmmin
634                     &            ) * zmaskU(ji,jj)
635                  ENDIF
636               END DO
637            END DO
638            CALL lbc_lnk( u_ice, 'U', -1. )
639            !
640#if defined key_agrif
641!!            CALL agrif_interp_ice( 'U', jter, nn_nevp )
642            CALL agrif_interp_ice( 'U' )
643#endif
644            IF( ln_bdy ) CALL bdy_ice_dyn( 'U' )
645            !
646            DO jj = 2, jpjm1
647               DO ji = fs_2, fs_jpim1
648                  !                 !--- tau_io/(v_oce - v_ice)
649                  zTauO = zaV(ji,jj) * zrhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) )  &
650                     &                              + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) )
651                  !                 !--- Ocean-to-Ice stress
652                  ztauy_oi(ji,jj) = zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) )
653                  !
654                  !                 !--- tau_bottom/v_ice
655                  zvel  = 5.e-05_wp + SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) )
656                  zTauB = - zTauV_ib(ji,jj) / zvel
657                  !
658                  !                 !--- Coriolis at v-points (energy conserving formulation)
659                  zCory(ji,jj)  = - 0.25_wp * r1_e2v(ji,jj) *  &
660                     &    ( zmf(ji,jj  ) * ( e2u(ji,jj  ) * u_ice(ji,jj  ) + e2u(ji-1,jj  ) * u_ice(ji-1,jj  ) )  &
661                     &    + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) )
662                  !
663                  !                 !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io
664                  zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCory(ji,jj) + zspgV(ji,jj) + ztauy_oi(ji,jj)
665                  !
666                  !                 !--- landfast switch => 0 = static friction ; 1 = sliding friction
667                  rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, zTauE - zTauV_ib(ji,jj) ) - SIGN( 1._wp, zTauE ) ) )
668                  !
669                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017)
670                  v_ice(ji,jj) = ( (          rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) )         & ! previous velocity
671                     &                                  + zTauE + zTauO * v_ice(ji,jj)                                            & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
672                     &                                  ) / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast
673                     &                 + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0
674                     &             ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) )                               & ! v_ice = v_oce if mass < zmmin
675                     &           ) * zmaskV(ji,jj)
676                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009)
677                  v_ice(ji,jj) = ( (           rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                             &  ! previous velocity
678                     &                                     + zTauE + zTauO * v_ice(ji,jj)                             &  ! F + tau_ia + Coriolis + spg + tau_io(only ocean part)
679                     &                                     ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )             &  ! m/dt + tau_io(only ice part) + landfast
680                     &              + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )  &  ! static friction => slow decrease to v=0
681                     &              ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) )                  &  ! v_ice = v_oce if mass < zmmin
682                     &            ) * zmaskV(ji,jj)
683                  ENDIF
684               END DO
685            END DO
686            CALL lbc_lnk( v_ice, 'V', -1. )
687            !
688#if defined key_agrif
689!!            CALL agrif_interp_ice( 'V', jter, nn_nevp )
690            CALL agrif_interp_ice( 'V' )
691#endif
692            IF( ln_bdy ) CALL bdy_ice_dyn( 'V' )
693            !
694         ENDIF
695         
696         IF(ln_ctl) THEN   ! Convergence test
697            DO jj = 2 , jpjm1
698               zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) )
699            END DO
700            zresm = MAXVAL( zresr( 1:jpi, 2:jpjm1 ) )
701            IF( lk_mpp )   CALL mpp_max( zresm )   ! max over the global domain
702         ENDIF
703         !
704         !                                                ! ==================== !
705      END DO                                              !  end loop over jter  !
706      !                                                   ! ==================== !
707      !
708      !------------------------------------------------------------------------------!
709      ! 4) Recompute delta, shear and div (inputs for mechanical redistribution)
710      !------------------------------------------------------------------------------!
711      DO jj = 1, jpjm1
712         DO ji = 1, jpim1
713
714            ! shear at F points
715            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)   &
716               &         + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)   &
717               &         ) * r1_e1e2f(ji,jj) * zfmask(ji,jj)
718
719         END DO
720      END DO           
721     
722      DO jj = 2, jpjm1
723         DO ji = 2, jpim1 ! no vector loop
724           
725            ! tension**2 at T points
726            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)   &
727               &   - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   &
728               &   ) * r1_e1e2t(ji,jj)
729            zdt2 = zdt * zdt
730           
731            ! shear**2 at T points (doc eq. A16)
732            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
733               &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
734               &   ) * 0.25_wp * r1_e1e2t(ji,jj)
735           
736            ! shear at T points
737            pshear_i(ji,jj) = SQRT( zdt2 + zds2 )
738
739            ! divergence at T points
740            pdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
741               &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
742               &             ) * r1_e1e2t(ji,jj)
743           
744            ! delta at T points
745            zdelta         = SQRT( pdivu_i(ji,jj) * pdivu_i(ji,jj) + ( zdt2 + zds2 ) * z1_ecc2 ) 
746            rswitch        = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zdelta ) ) ! 0 if delta=0
747            pdelta_i(ji,jj) = zdelta + rn_creepl * rswitch
748
749         END DO
750      END DO
751      CALL lbc_lnk_multi( pshear_i, 'T', 1., pdivu_i, 'T', 1., pdelta_i, 'T', 1. )
752     
753      ! --- Store the stress tensor for the next time step --- !
754      CALL lbc_lnk_multi( zs1, 'T', 1., zs2, 'T', 1., zs12, 'F', 1. )
755      pstress1_i (:,:) = zs1 (:,:)
756      pstress2_i (:,:) = zs2 (:,:)
757      pstress12_i(:,:) = zs12(:,:)
758      !
759
760      !------------------------------------------------------------------------------!
761      ! 5) diagnostics
762      !------------------------------------------------------------------------------!
763      DO jj = 1, jpj
764         DO ji = 1, jpi
765            zswi(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) ! 1 if ice, 0 if no ice
766         END DO
767      END DO
768
769      ! --- divergence, shear and strength --- !
770      IF( iom_use('icediv') )   CALL iom_put( "icediv" , pdivu_i (:,:) * zswi(:,:) )   ! divergence
771      IF( iom_use('iceshe') )   CALL iom_put( "iceshe" , pshear_i(:,:) * zswi(:,:) )   ! shear
772      IF( iom_use('icestr') )   CALL iom_put( "icestr" , strength(:,:) * zswi(:,:) )   ! Ice strength
773
774      ! --- charge ellipse --- !
775      IF( iom_use('isig1') .OR. iom_use('isig2') .OR. iom_use('isig3') ) THEN
776         !
777         ALLOCATE( zsig1(jpi,jpj) , zsig2(jpi,jpj) , zsig3(jpi,jpj) )
778         !         
779         DO jj = 2, jpjm1
780            DO ji = 2, jpim1
781               zdum1 = ( zswi(ji-1,jj) * pstress12_i(ji-1,jj) + zswi(ji  ,jj-1) * pstress12_i(ji  ,jj-1) +  &  ! stress12_i at T-point
782                  &      zswi(ji  ,jj) * pstress12_i(ji  ,jj) + zswi(ji-1,jj-1) * pstress12_i(ji-1,jj-1) )  &
783                  &    / MAX( 1._wp, zswi(ji-1,jj) + zswi(ji,jj-1) + zswi(ji,jj) + zswi(ji-1,jj-1) )
784
785               zshear = SQRT( pstress2_i(ji,jj) * pstress2_i(ji,jj) + 4._wp * zdum1 * zdum1 ) ! shear stress 
786
787               zdum2 = zswi(ji,jj) / MAX( 1._wp, strength(ji,jj) )
788
789!!               zsig1(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) + zshear ) ! principal stress (y-direction, see Hunke & Dukowicz 2002)
790!!               zsig2(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) - zshear ) ! principal stress (x-direction, see Hunke & Dukowicz 2002)
791!!               zsig3(ji,jj) = zdum2**2 * ( ( pstress1_i(ji,jj) + strength(ji,jj) )**2 + ( rn_ecc * zshear )**2 ) ! quadratic relation linking compressive stress to shear stress
792!!                                                                                                               ! (scheme converges if this value is ~1, see Bouillon et al 2009 (eq. 11))
793               zsig1(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) )          ! compressive stress, see Bouillon et al. 2015
794               zsig2(ji,jj) = 0.5_wp * zdum2 * ( zshear )                     ! shear stress
795               zsig3(ji,jj) = zdum2**2 * ( ( pstress1_i(ji,jj) + strength(ji,jj) )**2 + ( rn_ecc * zshear )**2 )
796            END DO
797         END DO
798         CALL lbc_lnk_multi( zsig1, 'T', 1., zsig2, 'T', 1., zsig3, 'T', 1. )
799         !
800         IF( iom_use('isig1') )   CALL iom_put( "isig1" , zsig1 )
801         IF( iom_use('isig2') )   CALL iom_put( "isig2" , zsig2 )
802         IF( iom_use('isig3') )   CALL iom_put( "isig3" , zsig3 )
803         !
804         DEALLOCATE( zsig1 , zsig2 , zsig3 )
805      ENDIF
806     
807      ! --- SIMIP --- !
808      IF ( iom_use( 'normstr'  ) .OR. iom_use( 'sheastr'  ) .OR. iom_use( 'dssh_dx'  ) .OR. iom_use( 'dssh_dy'  ) .OR. &
809         & iom_use( 'corstrx'  ) .OR. iom_use( 'corstry'  ) .OR. iom_use( 'intstrx'  ) .OR. iom_use( 'intstry'  ) .OR. &
810         & iom_use( 'utau_oi'  ) .OR. iom_use( 'vtau_oi'  ) .OR. iom_use( 'xmtrpice' ) .OR. iom_use( 'ymtrpice' ) .OR. &
811         & iom_use( 'xmtrpsnw' ) .OR. iom_use( 'ymtrpsnw' ) .OR. iom_use( 'xatrp'    ) .OR. iom_use( 'yatrp'    ) ) THEN
812
813         ALLOCATE( zdiag_sig1     (jpi,jpj) , zdiag_sig2     (jpi,jpj) , zdiag_dssh_dx  (jpi,jpj) , zdiag_dssh_dy  (jpi,jpj) ,  &
814            &      zdiag_corstrx  (jpi,jpj) , zdiag_corstry  (jpi,jpj) , zdiag_intstrx  (jpi,jpj) , zdiag_intstry  (jpi,jpj) ,  &
815            &      zdiag_utau_oi  (jpi,jpj) , zdiag_vtau_oi  (jpi,jpj) , zdiag_xmtrp_ice(jpi,jpj) , zdiag_ymtrp_ice(jpi,jpj) ,  &
816            &      zdiag_xmtrp_snw(jpi,jpj) , zdiag_ymtrp_snw(jpi,jpj) , zdiag_xatrp    (jpi,jpj) , zdiag_yatrp    (jpi,jpj) )
817         
818         DO jj = 2, jpjm1
819            DO ji = 2, jpim1
820               rswitch  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) ! 1 if ice, 0 if no ice
821               
822               ! Stress tensor invariants (normal and shear stress N/m)
823               zdiag_sig1(ji,jj) = ( zs1(ji,jj) + zs2(ji,jj) ) * rswitch                                 ! normal stress
824               zdiag_sig2(ji,jj) = SQRT( ( zs1(ji,jj) - zs2(ji,jj) )**2 + 4*zs12(ji,jj)**2 ) * rswitch   ! shear stress
825               
826               ! Stress terms of the momentum equation (N/m2)
827               zdiag_dssh_dx(ji,jj) = zspgU(ji,jj) * rswitch     ! sea surface slope stress term
828               zdiag_dssh_dy(ji,jj) = zspgV(ji,jj) * rswitch
829               
830               zdiag_corstrx(ji,jj) = zCorx(ji,jj) * rswitch     ! Coriolis stress term
831               zdiag_corstry(ji,jj) = zCory(ji,jj) * rswitch
832               
833               zdiag_intstrx(ji,jj) = zfU(ji,jj)   * rswitch     ! internal stress term
834               zdiag_intstry(ji,jj) = zfV(ji,jj)   * rswitch
835               
836               zdiag_utau_oi(ji,jj) = ztaux_oi(ji,jj) * rswitch  ! oceanic stress
837               zdiag_vtau_oi(ji,jj) = ztauy_oi(ji,jj) * rswitch
838               
839               ! 2D ice mass, snow mass, area transport arrays (X, Y)
840               zfac_x = 0.5 * u_ice(ji,jj) * e2u(ji,jj) * rswitch
841               zfac_y = 0.5 * v_ice(ji,jj) * e1v(ji,jj) * rswitch
842               
843               zdiag_xmtrp_ice(ji,jj) = rhoi * zfac_x * ( vt_i(ji+1,jj) + vt_i(ji,jj) ) ! ice mass transport, X-component
844               zdiag_ymtrp_ice(ji,jj) = rhoi * zfac_y * ( vt_i(ji,jj+1) + vt_i(ji,jj) ) !        ''           Y-   ''
845               
846               zdiag_xmtrp_snw(ji,jj) = rhos * zfac_x * ( vt_s(ji+1,jj) + vt_s(ji,jj) ) ! snow mass transport, X-component
847               zdiag_ymtrp_snw(ji,jj) = rhos * zfac_y * ( vt_s(ji,jj+1) + vt_s(ji,jj) ) !          ''          Y-   ''
848               
849               zdiag_xatrp(ji,jj)     = zfac_x * ( at_i(ji+1,jj) + at_i(ji,jj) )        ! area transport,      X-component
850               zdiag_yatrp(ji,jj)     = zfac_y * ( at_i(ji,jj+1) + at_i(ji,jj) )        !        ''            Y-   ''
851               
852            END DO
853         END DO
854         
855         CALL lbc_lnk_multi( zdiag_sig1   , 'T',  1., zdiag_sig2   , 'T',  1.,   &
856            &                zdiag_dssh_dx, 'U', -1., zdiag_dssh_dy, 'V', -1.,   &
857            &                zdiag_corstrx, 'U', -1., zdiag_corstry, 'V', -1.,   & 
858            &                zdiag_intstrx, 'U', -1., zdiag_intstry, 'V', -1.    )
859                 
860         CALL lbc_lnk_multi( zdiag_utau_oi  , 'U', -1., zdiag_vtau_oi  , 'V', -1.,   &
861            &                zdiag_xmtrp_ice, 'U', -1., zdiag_xmtrp_snw, 'U', -1.,   &
862            &                zdiag_xatrp    , 'U', -1., zdiag_ymtrp_ice, 'V', -1.,   &
863            &                zdiag_ymtrp_snw, 'V', -1., zdiag_yatrp    , 'V', -1.    )
864         
865         IF( iom_use('normstr' ) )   CALL iom_put( 'normstr'  ,  zdiag_sig1(:,:)      )   ! Normal stress
866         IF( iom_use('sheastr' ) )   CALL iom_put( 'sheastr'  ,  zdiag_sig2(:,:)      )   ! Shear stress
867         IF( iom_use('dssh_dx' ) )   CALL iom_put( 'dssh_dx'  ,  zdiag_dssh_dx(:,:)   )   ! Sea-surface tilt term in force balance (x)
868         IF( iom_use('dssh_dy' ) )   CALL iom_put( 'dssh_dy'  ,  zdiag_dssh_dy(:,:)   )   ! Sea-surface tilt term in force balance (y)
869         IF( iom_use('corstrx' ) )   CALL iom_put( 'corstrx'  ,  zdiag_corstrx(:,:)   )   ! Coriolis force term in force balance (x)
870         IF( iom_use('corstry' ) )   CALL iom_put( 'corstry'  ,  zdiag_corstry(:,:)   )   ! Coriolis force term in force balance (y)
871         IF( iom_use('intstrx' ) )   CALL iom_put( 'intstrx'  ,  zdiag_intstrx(:,:)   )   ! Internal force term in force balance (x)
872         IF( iom_use('intstry' ) )   CALL iom_put( 'intstry'  ,  zdiag_intstry(:,:)   )   ! Internal force term in force balance (y)
873         IF( iom_use('utau_oi' ) )   CALL iom_put( 'utau_oi'  ,  zdiag_utau_oi(:,:)   )   ! Ocean stress term in force balance (x)
874         IF( iom_use('vtau_oi' ) )   CALL iom_put( 'vtau_oi'  ,  zdiag_vtau_oi(:,:)   )   ! Ocean stress term in force balance (y)
875         IF( iom_use('xmtrpice') )   CALL iom_put( 'xmtrpice' ,  zdiag_xmtrp_ice(:,:) )   ! X-component of sea-ice mass transport (kg/s)
876         IF( iom_use('ymtrpice') )   CALL iom_put( 'ymtrpice' ,  zdiag_ymtrp_ice(:,:) )   ! Y-component of sea-ice mass transport
877         IF( iom_use('xmtrpsnw') )   CALL iom_put( 'xmtrpsnw' ,  zdiag_xmtrp_snw(:,:) )   ! X-component of snow mass transport (kg/s)
878         IF( iom_use('ymtrpsnw') )   CALL iom_put( 'ymtrpsnw' ,  zdiag_ymtrp_snw(:,:) )   ! Y-component of snow mass transport
879         IF( iom_use('xatrp'   ) )   CALL iom_put( 'xatrp'    ,  zdiag_xatrp(:,:)     )   ! X-component of ice area transport
880         IF( iom_use('yatrp'   ) )   CALL iom_put( 'yatrp'    ,  zdiag_yatrp(:,:)     )   ! Y-component of ice area transport
881
882         DEALLOCATE( zdiag_sig1      , zdiag_sig2      , zdiag_dssh_dx   , zdiag_dssh_dy   ,  &
883            &        zdiag_corstrx   , zdiag_corstry   , zdiag_intstrx   , zdiag_intstry   ,  &
884            &        zdiag_utau_oi   , zdiag_vtau_oi   , zdiag_xmtrp_ice , zdiag_ymtrp_ice ,  &
885            &        zdiag_xmtrp_snw , zdiag_ymtrp_snw , zdiag_xatrp     , zdiag_yatrp     )
886
887      ENDIF
888      !
889   END SUBROUTINE ice_dyn_rhg_evp
890
891
892   SUBROUTINE rhg_evp_rst( cdrw, kt )
893      !!---------------------------------------------------------------------
894      !!                   ***  ROUTINE rhg_evp_rst  ***
895      !!                     
896      !! ** Purpose :   Read or write RHG file in restart file
897      !!
898      !! ** Method  :   use of IOM library
899      !!----------------------------------------------------------------------
900      CHARACTER(len=*) , INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag
901      INTEGER, OPTIONAL, INTENT(in) ::   kt     ! ice time-step
902      !
903      INTEGER  ::   iter            ! local integer
904      INTEGER  ::   id1, id2, id3   ! local integers
905      !!----------------------------------------------------------------------
906      !
907      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialize
908         !                                   ! ---------------
909         IF( ln_rstart ) THEN                   !* Read the restart file
910            !
911            id1 = iom_varid( numrir, 'stress1_i' , ldstop = .FALSE. )
912            id2 = iom_varid( numrir, 'stress2_i' , ldstop = .FALSE. )
913            id3 = iom_varid( numrir, 'stress12_i', ldstop = .FALSE. )
914            !
915            IF( MIN( id1, id2, id3 ) > 0 ) THEN      ! fields exist
916               CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i  )
917               CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i  )
918               CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i )
919            ELSE                                     ! start rheology from rest
920               IF(lwp) WRITE(numout,*)
921               IF(lwp) WRITE(numout,*) '   ==>>>   previous run without rheology, set stresses to 0'
922               stress1_i (:,:) = 0._wp
923               stress2_i (:,:) = 0._wp
924               stress12_i(:,:) = 0._wp
925            ENDIF
926         ELSE                                   !* Start from rest
927            IF(lwp) WRITE(numout,*)
928            IF(lwp) WRITE(numout,*) '   ==>>>   start from rest: set stresses to 0'
929            stress1_i (:,:) = 0._wp
930            stress2_i (:,:) = 0._wp
931            stress12_i(:,:) = 0._wp
932         ENDIF
933         !
934      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file
935         !                                   ! -------------------
936         IF(lwp) WRITE(numout,*) '---- rhg-rst ----'
937         iter = kt + nn_fsbc - 1             ! ice restarts are written at kt == nitrst - nn_fsbc + 1
938         !
939         CALL iom_rstput( iter, nitrst, numriw, 'stress1_i' , stress1_i  )
940         CALL iom_rstput( iter, nitrst, numriw, 'stress2_i' , stress2_i  )
941         CALL iom_rstput( iter, nitrst, numriw, 'stress12_i', stress12_i )
942         !
943      ENDIF
944      !
945   END SUBROUTINE rhg_evp_rst
946
947#else
948   !!----------------------------------------------------------------------
949   !!   Default option         Empty module           NO SI3 sea-ice model
950   !!----------------------------------------------------------------------
951#endif
952
953   !!==============================================================================
954END MODULE icedyn_rhg_evp
Note: See TracBrowser for help on using the repository browser.