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_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90 @ 7512

Last change on this file since 7512 was 7508, checked in by mocavero, 8 years ago

changes on code duplication and workshare construct

  • Property svn:keywords set to Id
File size: 38.3 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   !!----------------------------------------------------------------------
13#if defined key_lim3 || (  defined key_lim2 && ! defined key_lim2_vp )
14   !!----------------------------------------------------------------------
15   !!   'key_lim3'               OR                     LIM-3 sea-ice model
16   !!   'key_lim2' AND NOT 'key_lim2_vp'            EVP LIM-2 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#if defined key_lim3
27   USE ice            ! LIM-3: ice variables
28   USE dom_ice        ! LIM-3: ice domain
29   USE limitd_me      ! LIM-3:
30#else
31   USE ice_2          ! LIM-2: ice variables
32   USE dom_ice_2      ! LIM-2: ice domain
33#endif
34   USE lbclnk         ! Lateral Boundary Condition / MPP link
35   USE lib_mpp        ! MPP library
36   USE wrk_nemo       ! work arrays
37   USE in_out_manager ! I/O manager
38   USE prtctl         ! Print control
39   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
40#if defined key_agrif && defined key_lim2
41   USE agrif_lim2_interp
42#endif
43#if defined key_bdy
44   USE bdyice_lim
45#endif
46
47   IMPLICIT NONE
48   PRIVATE
49
50   PUBLIC   lim_rhg        ! routine called by lim_dyn (or lim_dyn_2)
51
52   !! * Substitutions
53#  include "vectopt_loop_substitute.h90"
54   !!----------------------------------------------------------------------
55   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
56   !! $Id$
57   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
58   !!----------------------------------------------------------------------
59CONTAINS
60
61   SUBROUTINE lim_rhg( k_j1, k_jpj )
62      !!-------------------------------------------------------------------
63      !!                 ***  SUBROUTINE lim_rhg  ***
64      !!                          EVP-C-grid
65      !!
66      !! ** purpose : determines sea ice drift from wind stress, ice-ocean
67      !!  stress and sea-surface slope. Ice-ice interaction is described by
68      !!  a non-linear elasto-viscous-plastic (EVP) law including shear
69      !!  strength and a bulk rheology (Hunke and Dukowicz, 2002).   
70      !!
71      !!  The points in the C-grid look like this, dear reader
72      !!
73      !!                              (ji,jj)
74      !!                                 |
75      !!                                 |
76      !!                      (ji-1,jj)  |  (ji,jj)
77      !!                             ---------   
78      !!                            |         |
79      !!                            | (ji,jj) |------(ji,jj)
80      !!                            |         |
81      !!                             ---------   
82      !!                     (ji-1,jj-1)     (ji,jj-1)
83      !!
84      !! ** Inputs  : - wind forcing (stress), oceanic currents
85      !!                ice total volume (vt_i) per unit area
86      !!                snow total volume (vt_s) per unit area
87      !!
88      !! ** Action  : - compute u_ice, v_ice : the components of the
89      !!                sea-ice velocity vector
90      !!              - compute delta_i, shear_i, divu_i, which are inputs
91      !!                of the ice thickness distribution
92      !!
93      !! ** Steps   : 1) Compute ice snow mass, ice strength
94      !!              2) Compute wind, oceanic stresses, mass terms and
95      !!                 coriolis terms of the momentum equation
96      !!              3) Solve the momentum equation (iterative procedure)
97      !!              4) Prevent high velocities if the ice is thin
98      !!              5) Recompute invariants of the strain rate tensor
99      !!                 which are inputs of the ITD, store stress
100      !!                 for the next time step
101      !!              6) Control prints of residual (convergence)
102      !!                 and charge ellipse.
103      !!                 The user should make sure that the parameters
104      !!                 nn_nevp, elastic time scale and rn_creepl maintain stress state
105      !!                 on the charge ellipse for plastic flow
106      !!                 e.g. in the Canadian Archipelago
107      !!
108      !! References : Hunke and Dukowicz, JPO97
109      !!              Bouillon et al., Ocean Modelling 2009
110      !!-------------------------------------------------------------------
111      INTEGER, INTENT(in) ::   k_j1    ! southern j-index for ice computation
112      INTEGER, INTENT(in) ::   k_jpj   ! northern j-index for ice computation
113      !!
114      INTEGER ::   ji, jj   ! dummy loop indices
115      INTEGER ::   jter     ! local integers
116      CHARACTER (len=50) ::   charout
117      REAL(wp) ::   zt11, zt12, zt21, zt22, ztagnx, ztagny, delta                         !
118      REAL(wp) ::   za, zstms          ! local scalars
119      REAL(wp) ::   zc1, zc2, zc3      ! ice mass
120
121      REAL(wp) ::   dtevp , z1_dtevp              ! time step for subcycling
122      REAL(wp) ::   dtotel, z1_dtotel, ecc2, ecci ! square of yield ellipse eccenticity
123      REAL(wp) ::   z0, zr, zcca, zccb            ! temporary scalars
124      REAL(wp) ::   zu_ice2, zv_ice1              !
125      REAL(wp) ::   zddc, zdtc                    ! delta on corners and on centre
126      REAL(wp) ::   zdst                          ! shear at the center of the grid point
127      REAL(wp) ::   zdsshx, zdsshy                ! term for the gradient of ocean surface
128      REAL(wp) ::   sigma1, sigma2                ! internal ice stress
129
130      REAL(wp) ::   zresm         ! Maximal error on ice velocity
131      REAL(wp) ::   zintb, zintn  ! dummy argument
132
133      REAL(wp), POINTER, DIMENSION(:,:) ::   zpresh           ! temporary array for ice strength
134      REAL(wp), POINTER, DIMENSION(:,:) ::   zpreshc          ! Ice strength on grid cell corners (zpreshc)
135      REAL(wp), POINTER, DIMENSION(:,:) ::   zfrld1, zfrld2   ! lead fraction on U/V points
136      REAL(wp), POINTER, DIMENSION(:,:) ::   zmass1, zmass2   ! ice/snow mass on U/V points
137      REAL(wp), POINTER, DIMENSION(:,:) ::   zcorl1, zcorl2   ! coriolis parameter on U/V points
138      REAL(wp), POINTER, DIMENSION(:,:) ::   za1ct , za2ct    ! temporary arrays
139      REAL(wp), POINTER, DIMENSION(:,:) ::   v_oce1           ! ocean u/v component on U points                           
140      REAL(wp), POINTER, DIMENSION(:,:) ::   u_oce2           ! ocean u/v component on V points
141      REAL(wp), POINTER, DIMENSION(:,:) ::   u_ice2, v_ice1   ! ice u/v component on V/U point
142      REAL(wp), POINTER, DIMENSION(:,:) ::   zf1   , zf2      ! arrays for internal stresses
143      REAL(wp), POINTER, DIMENSION(:,:) ::   zmask            ! mask ocean grid points
144     
145      REAL(wp), POINTER, DIMENSION(:,:) ::   zdt              ! tension at centre of grid cells
146      REAL(wp), POINTER, DIMENSION(:,:) ::   zds              ! Shear on northeast corner of grid cells
147      REAL(wp), POINTER, DIMENSION(:,:) ::   zs1   , zs2      ! Diagonal stress tensor components zs1 and zs2
148      REAL(wp), POINTER, DIMENSION(:,:) ::   zs12             ! Non-diagonal stress tensor component zs12
149      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_ice, zv_ice, zresr   ! Local error on velocity
150      REAL(wp), POINTER, DIMENSION(:,:) ::   zpice            ! array used for the calculation of ice surface slope:
151                                                              !   ocean surface (ssh_m) if ice is not embedded
152                                                              !   ice top surface if ice is embedded   
153
154      REAL(wp), PARAMETER               ::   zepsi = 1.0e-20_wp ! tolerance parameter
155      REAL(wp), PARAMETER               ::   zvmin = 1.0e-03_wp ! ice volume below which ice velocity equals ocean velocity
156      !!-------------------------------------------------------------------
157
158      CALL wrk_alloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct )
159      CALL wrk_alloc( jpi,jpj, u_oce2, u_ice2, v_oce1 , v_ice1 , zmask               )
160      CALL wrk_alloc( jpi,jpj, zf1   , zu_ice, zf2   , zv_ice , zdt    , zds  )
161      CALL wrk_alloc( jpi,jpj, zs1   , zs2   , zs12   , zresr , zpice                 )
162
163#if  defined key_lim2 && ! defined key_lim2_vp
164# if defined key_agrif
165      USE ice_2, vt_s => hsnm
166      USE ice_2, vt_i => hicm
167# else
168      vt_s => hsnm
169      vt_i => hicm
170# endif
171      at_i(:,:) = 1. - frld(:,:)
172#endif
173#if defined key_agrif && defined key_lim2 
174      CALL agrif_rhg_lim2_load      ! First interpolation of coarse values
175#endif
176      !
177      !------------------------------------------------------------------------------!
178      ! 1) Ice strength (zpresh)                                !
179      !------------------------------------------------------------------------------!
180      !
181      ! Put every vector to 0
182
183#if defined key_lim3
184      CALL lim_itd_me_icestrength( nn_icestr )      ! LIM-3: Ice strength on T-points
185#endif
186
187!$OMP PARALLEL
188!$OMP DO schedule(static) private(jj, ji)
189      DO jj = 1, jpj
190         DO ji = 1, jpi
191            delta_i(ji,jj) = 0._wp   ;
192            zpresh (ji,jj) = 0._wp   ; 
193            zpreshc(ji,jj) = 0._wp
194            u_ice2 (ji,jj) = 0._wp   ;   v_ice1(ji,jj) = 0._wp
195            divu_i (ji,jj) = 0._wp   ;   zdt   (ji,jj) = 0._wp   ;   zds(ji,jj) = 0._wp
196            shear_i(ji,jj) = 0._wp
197         END DO
198      END DO
199
200!$OMP DO schedule(static) private(jj,ji)
201      DO jj = k_j1 , k_jpj       ! Ice mass and temp variables
202         DO ji = 1 , jpi
203#if defined key_lim3
204            zpresh(ji,jj) = tmask(ji,jj,1) *  strength(ji,jj)
205#endif
206#if defined key_lim2
207            zpresh(ji,jj) = tmask(ji,jj,1) *  pstar * vt_i(ji,jj) * EXP( -c_rhg * (1. - at_i(ji,jj) ) )
208#endif
209            ! zmask = 1 where there is ice or on land
210            zmask(ji,jj)    = 1._wp - ( 1._wp - MAX( 0._wp , SIGN ( 1._wp , vt_i(ji,jj) - zepsi ) ) ) * tmask(ji,jj,1)
211         END DO
212      END DO
213
214      ! Ice strength on grid cell corners (zpreshc)
215      ! needed for calculation of shear stress
216!$OMP DO schedule(static) private(jj,ji,zstms)
217      DO jj = k_j1+1, k_jpj-1
218         DO ji = 2, jpim1 !RB caution no fs_ (ji+1,jj+1)
219            zstms          =  tmask(ji+1,jj+1,1) * wght(ji+1,jj+1,2,2) + tmask(ji,jj+1,1) * wght(ji+1,jj+1,1,2) +   &
220               &              tmask(ji+1,jj,1)   * wght(ji+1,jj+1,2,1) + tmask(ji,jj,1)   * wght(ji+1,jj+1,1,1)
221            zpreshc(ji,jj) = ( zpresh(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + zpresh(ji,jj+1) * wght(ji+1,jj+1,1,2) +   &
222               &               zpresh(ji+1,jj)   * wght(ji+1,jj+1,2,1) + zpresh(ji,jj)   * wght(ji+1,jj+1,1,1)     &
223               &             ) / MAX( zstms, zepsi )
224         END DO
225      END DO
226!$OMP END DO NOWAIT
227!$OMP END PARALLEL
228      CALL lbc_lnk( zpreshc(:,:), 'F', 1. )
229      !
230      !------------------------------------------------------------------------------!
231      ! 2) Wind / ocean stress, mass terms, coriolis terms
232      !------------------------------------------------------------------------------!
233      !
234      !  Wind stress, coriolis and mass terms on the sides of the squares       
235      !  zfrld1: lead fraction on U-points                                     
236      !  zfrld2: lead fraction on V-points                                     
237      !  zmass1: ice/snow mass on U-points                                   
238      !  zmass2: ice/snow mass on V-points                                   
239      !  zcorl1: Coriolis parameter on U-points                             
240      !  zcorl2: Coriolis parameter on V-points                           
241      !  (ztagnx,ztagny): wind stress on U/V points                       
242      !  v_oce1: ocean v component on u points                         
243      !  u_oce2: ocean u component on v points                         
244
245      IF( nn_ice_embd == 2 ) THEN             !== embedded sea ice: compute representative ice top surface ==!
246         !                                           
247         ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1}
248         !                                               = (1/nn_fsbc)^2 * {SUM[n], n=0,nn_fsbc-1}
249         zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp     
250         !
251         ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1}
252         !                                               = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1})
253         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp
254         !
255!$OMP PARALLEL DO schedule(static) private(jj, ji)
256      DO jj = 1, jpj
257         DO ji = 1, jpi
258            zpice(ji,jj) = ssh_m(ji,jj) + (  zintn * snwice_mass(ji,jj) +  zintb * snwice_mass_b(ji,jj)  ) * r1_rau0
259         END DO
260      END DO
261         !
262      ELSE                                    !== non-embedded sea ice: use ocean surface for slope calculation ==!
263!$OMP PARALLEL DO schedule(static) private(jj, ji)
264         DO jj = 1, jpj
265            DO ji = 1, jpi
266               zpice(ji,jj) = ssh_m(ji,jj)
267            END DO
268         END DO
269      ENDIF
270
271!$OMP PARALLEL DO schedule(static) private(jj,ji,zc1,zc2,zc3,zt11,zt12,zt21,zt22,ztagnx,ztagny,zdsshx,zdsshy)
272      DO jj = k_j1+1, k_jpj-1
273         DO ji = fs_2, fs_jpim1
274
275            zc1 = tmask(ji  ,jj  ,1) * ( rhosn * vt_s(ji  ,jj  ) + rhoic * vt_i(ji  ,jj  ) )
276            zc2 = tmask(ji+1,jj  ,1) * ( rhosn * vt_s(ji+1,jj  ) + rhoic * vt_i(ji+1,jj  ) )
277            zc3 = tmask(ji  ,jj+1,1) * ( rhosn * vt_s(ji  ,jj+1) + rhoic * vt_i(ji  ,jj+1) )
278
279            zt11 = tmask(ji  ,jj,1) * e1t(ji  ,jj)
280            zt12 = tmask(ji+1,jj,1) * e1t(ji+1,jj)
281            zt21 = tmask(ji,jj  ,1) * e2t(ji,jj  )
282            zt22 = tmask(ji,jj+1,1) * e2t(ji,jj+1)
283
284            ! Leads area.
285            zfrld1(ji,jj) = ( zt12 * ( 1.0 - at_i(ji,jj) ) + zt11 * ( 1.0 - at_i(ji+1,jj) ) ) / ( zt11 + zt12 + zepsi )
286            zfrld2(ji,jj) = ( zt22 * ( 1.0 - at_i(ji,jj) ) + zt21 * ( 1.0 - at_i(ji,jj+1) ) ) / ( zt21 + zt22 + zepsi )
287
288            ! Mass, coriolis coeff. and currents
289            zmass1(ji,jj) = ( zt12 * zc1 + zt11 * zc2 ) / ( zt11 + zt12 + zepsi )
290            zmass2(ji,jj) = ( zt22 * zc1 + zt21 * zc3 ) / ( zt21 + zt22 + zepsi )
291            zcorl1(ji,jj) = zmass1(ji,jj) * ( e1t(ji+1,jj) * fcor(ji,jj) + e1t(ji,jj) * fcor(ji+1,jj) )   &
292               &                          / ( e1t(ji,jj) + e1t(ji+1,jj) + zepsi )
293            zcorl2(ji,jj) = zmass2(ji,jj) * ( e2t(ji,jj+1) * fcor(ji,jj) + e2t(ji,jj) * fcor(ji,jj+1) )   &
294               &                          / ( e2t(ji,jj+1) + e2t(ji,jj) + zepsi )
295            !
296            ! Ocean has no slip boundary condition
297            v_oce1(ji,jj)  = 0.5 * ( ( v_oce(ji  ,jj) + v_oce(ji  ,jj-1) ) * e1t(ji,jj)      &
298               &                   + ( v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) * e1t(ji+1,jj) )  &
299               &                   / ( e1t(ji+1,jj) + e1t(ji,jj) ) * umask(ji,jj,1) 
300
301            u_oce2(ji,jj)  = 0.5 * ( ( u_oce(ji,jj  ) + u_oce(ji-1,jj  ) ) * e2t(ji,jj)      &
302               &                   + ( u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) * e2t(ji,jj+1) )  &
303               &                   / ( e2t(ji,jj+1) + e2t(ji,jj) ) * vmask(ji,jj,1)
304
305            ! Wind stress at U,V-point
306            ztagnx = ( 1. - zfrld1(ji,jj) ) * utau_ice(ji,jj)
307            ztagny = ( 1. - zfrld2(ji,jj) ) * vtau_ice(ji,jj)
308
309            ! Computation of the velocity field taking into account the ice internal interaction.
310            ! Terms that are independent of the velocity field.
311
312            ! SB On utilise maintenant le gradient de la pente de l'ocean
313            ! include it later
314
315            zdsshx =  ( zpice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj)
316            zdsshy =  ( zpice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj)
317
318            za1ct(ji,jj) = ztagnx - zmass1(ji,jj) * grav * zdsshx
319            za2ct(ji,jj) = ztagny - zmass2(ji,jj) * grav * zdsshy
320
321         END DO
322      END DO
323
324      !
325      !------------------------------------------------------------------------------!
326      ! 3) Solution of the momentum equation, iterative procedure
327      !------------------------------------------------------------------------------!
328      !
329      ! Time step for subcycling
330      dtevp  = rdt_ice / nn_nevp
331#if defined key_lim3
332      dtotel = dtevp / ( 2._wp * rn_relast * rdt_ice )
333#else
334      dtotel = dtevp / ( 2._wp * telast )
335#endif
336      z1_dtotel = 1._wp / ( 1._wp + dtotel )
337      z1_dtevp  = 1._wp / dtevp
338      !-ecc2: square of yield ellipse eccenticrity (reminder: must become a namelist parameter)
339      ecc2 = rn_ecc * rn_ecc
340      ecci = 1. / ecc2
341
342      !-Initialise stress tensor
343!$OMP PARALLEL DO schedule(static) private(jj, ji)
344      DO jj = 1, jpj
345         DO ji = 1, jpi
346            zs1 (ji,jj) = stress1_i (ji,jj) 
347            zs2 (ji,jj) = stress2_i (ji,jj)
348            zs12(ji,jj) = stress12_i(ji,jj)
349         END DO
350      END DO
351
352      !                                               !----------------------!
353      DO jter = 1 , nn_nevp                           !    loop over jter    !
354         !                                            !----------------------!       
355!$OMP PARALLEL
356!$OMP DO schedule(static) private(jj,ji)
357         DO jj = k_j1, k_jpj-1
358            DO ji = 1, jpi
359               zu_ice(ji,jj) = u_ice(ji,jj)    ! velocity at previous time step
360               zv_ice(ji,jj) = v_ice(ji,jj)
361            END DO
362         END DO
363!$OMP END DO NOWAIT
364
365!$OMP DO schedule(static) private(jj,ji)
366         DO jj = k_j1+1, k_jpj-1
367            DO ji = fs_2, fs_jpim1   !RB bug no vect opt due to zmask
368
369               
370               !- Divergence, tension and shear (Section a. Appendix B of Hunke & Dukowicz, 2002)
371               !- divu_i(:,:), zdt(:,:): divergence and tension at centre of grid cells
372               !- zds(:,:): shear on northeast corner of grid cells
373               !
374               !- IMPORTANT REMINDER: Dear Gurvan, note that, the way these terms are coded,
375               !                      there are many repeated calculations.
376               !                      Speed could be improved by regrouping terms. For
377               !                      the moment, however, the stress is on clarity of coding to avoid
378               !                      bugs (Martin, for Miguel).
379               !
380               !- ALSO: arrays zdt, zds and delta could
381               !  be removed in the future to minimise memory demand.
382               !
383               !- MORE NOTES: Note that we are calculating deformation rates and stresses on the corners of
384               !              grid cells, exactly as in the B grid case. For simplicity, the indexation on
385               !              the corners is the same as in the B grid.
386               !
387               !
388               divu_i(ji,jj) = (  e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
389                  &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
390                  &            ) * r1_e1e2t(ji,jj)
391
392               zdt(ji,jj) = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj)   &
393                  &         - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   &
394                  &         ) * r1_e1e2t(ji,jj)
395
396               !
397               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)   &
398                  &         + ( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)   &
399                  &         ) * r1_e1e2f(ji,jj) * ( 2._wp - fmask(ji,jj,1) )   &
400                  &         * zmask(ji,jj) * zmask(ji,jj+1) * zmask(ji+1,jj) * zmask(ji+1,jj+1)
401
402
403               v_ice1(ji,jj)  = 0.5_wp * ( ( v_ice(ji  ,jj) + v_ice(ji  ,jj-1) ) * e1t(ji+1,jj)     &
404                  &                      + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji  ,jj) )   &
405                  &                      / ( e1t(ji+1,jj) + e1t(ji,jj) ) * umask(ji,jj,1) 
406
407               u_ice2(ji,jj)  = 0.5_wp * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj+1)     &
408                  &                      + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj  ) )   &
409                  &                      / ( e2t(ji,jj+1) + e2t(ji,jj) ) * vmask(ji,jj,1)
410            END DO
411         END DO
412!$OMP END DO NOWAIT
413!$OMP END PARALLEL
414
415         CALL lbc_lnk_multi( v_ice1, 'U', -1., u_ice2, 'V', -1. )      ! lateral boundary cond.
416         
417!$OMP PARALLEL DO schedule(static) private(jj,ji,zdst,delta,zddc,zdtc)
418         DO jj = k_j1+1, k_jpj-1
419            DO ji = fs_2, fs_jpim1
420
421               !- Calculate Delta at centre of grid cells
422               zdst          = ( e2u(ji,jj) * v_ice1(ji,jj) - e2u(ji-1,jj  ) * v_ice1(ji-1,jj  )   &
423                  &            + e1v(ji,jj) * u_ice2(ji,jj) - e1v(ji  ,jj-1) * u_ice2(ji  ,jj-1)   &
424                  &            ) * r1_e1e2t(ji,jj)
425
426               delta          = SQRT( divu_i(ji,jj)**2 + ( zdt(ji,jj)**2 + zdst**2 ) * usecc2 ) 
427               delta_i(ji,jj) = delta + rn_creepl
428
429               !- Calculate Delta on corners
430               zddc  = (  ( v_ice1(ji,jj+1) * r1_e1u(ji,jj+1) - v_ice1(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj)  &
431                  &     + ( u_ice2(ji+1,jj) * r1_e2v(ji+1,jj) - u_ice2(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)  &
432                  &    ) * r1_e1e2f(ji,jj)
433
434               zdtc  = (- ( v_ice1(ji,jj+1) * r1_e1u(ji,jj+1) - v_ice1(ji,jj) * r1_e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj)  &
435                  &     + ( u_ice2(ji+1,jj) * r1_e2v(ji+1,jj) - u_ice2(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)  &
436                  &    ) * r1_e1e2f(ji,jj)
437
438               zddc = SQRT( zddc**2 + ( zdtc**2 + zds(ji,jj)**2 ) * usecc2 ) + rn_creepl
439
440               !-Calculate stress tensor components zs1 and zs2 at centre of grid cells (see section 3.5 of CICE user's guide).
441               zs1(ji,jj)  = ( zs1 (ji,jj) + dtotel * ( divu_i(ji,jj) - delta ) / delta_i(ji,jj)   * zpresh(ji,jj)   &
442                  &          ) * z1_dtotel
443               zs2(ji,jj)  = ( zs2 (ji,jj) + dtotel *         ecci * zdt(ji,jj) / delta_i(ji,jj)   * zpresh(ji,jj)   &
444                  &          ) * z1_dtotel
445               !-Calculate stress tensor component zs12 at corners
446               zs12(ji,jj) = ( zs12(ji,jj) + dtotel *         ecci * zds(ji,jj) / ( 2._wp * zddc ) * zpreshc(ji,jj)  &
447                  &          ) * z1_dtotel 
448
449            END DO
450         END DO
451
452         CALL lbc_lnk_multi( zs1 , 'T', 1., zs2, 'T', 1., zs12, 'F', 1. )
453 
454         ! Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002)
455!$OMP PARALLEL DO schedule(static) private(jj,ji)
456         DO jj = k_j1+1, k_jpj-1
457            DO ji = fs_2, fs_jpim1
458               !- contribution of zs1, zs2 and zs12 to zf1
459               zf1(ji,jj) = 0.5 * ( ( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)  &
460                  &             + ( zs2(ji+1,jj) * e2t(ji+1,jj)**2 - zs2(ji,jj) * e2t(ji,jj)**2 ) * r1_e2u(ji,jj)          &
461                  &             + 2.0 * ( zs12(ji,jj) * e1f(ji,jj)**2 - zs12(ji,jj-1) * e1f(ji,jj-1)**2 ) * r1_e1u(ji,jj)  &
462                  &                ) * r1_e1e2u(ji,jj)
463               ! contribution of zs1, zs2 and zs12 to zf2
464               zf2(ji,jj) = 0.5 * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)  &
465                  &             - ( zs2(ji,jj+1) * e1t(ji,jj+1)**2 - zs2(ji,jj) * e1t(ji,jj)**2 ) * r1_e1v(ji,jj)          &
466                  &             + 2.0 * ( zs12(ji,jj) * e2f(ji,jj)**2 - zs12(ji-1,jj) * e2f(ji-1,jj)**2 ) * r1_e2v(ji,jj)  &
467                  &               )  * r1_e1e2v(ji,jj)
468            END DO
469         END DO
470         !
471         ! Computation of ice velocity
472         !
473         ! Both the Coriolis term and the ice-ocean drag are solved semi-implicitly.
474         !
475         IF (MOD(jter,2).eq.0) THEN 
476
477!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zv_ice1,za,zr,zcca,zccb)
478            DO jj = k_j1+1, k_jpj-1
479               DO ji = fs_2, fs_jpim1
480                  rswitch      = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zmass1(ji,jj) ) ) ) * umask(ji,jj,1)
481                  z0           = zmass1(ji,jj) * z1_dtevp
482
483                  ! SB modif because ocean has no slip boundary condition
484                  zv_ice1      = 0.5 * ( ( v_ice(ji  ,jj) + v_ice(ji  ,jj-1) ) * e1t(ji  ,jj)     &
485                     &                 + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji+1,jj) )   &
486                     &                 / ( e1t(ji+1,jj) + e1t(ji,jj) ) * umask(ji,jj,1)
487                  za           = rhoco * SQRT( ( u_ice(ji,jj) - u_oce(ji,jj) )**2 +  &
488                     &                         ( zv_ice1 - v_oce1(ji,jj) )**2 ) * ( 1.0 - zfrld1(ji,jj) )
489                  zr           = z0 * u_ice(ji,jj) + zf1(ji,jj) + za1ct(ji,jj) + za * u_oce(ji,jj)
490                  zcca         = z0 + za
491                  zccb         = zcorl1(ji,jj)
492                  u_ice(ji,jj) = ( zr + zccb * zv_ice1 ) / ( zcca + zepsi ) * rswitch 
493               END DO
494            END DO
495
496            CALL lbc_lnk( u_ice(:,:), 'U', -1. )
497#if defined key_agrif && defined key_lim2
498            CALL agrif_rhg_lim2( jter, nn_nevp, 'U' )
499#endif
500#if defined key_bdy
501         CALL bdy_ice_lim_dyn( 'U' )
502#endif         
503
504!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zu_ice2,za,zr,zcca,zccb)
505            DO jj = k_j1+1, k_jpj-1
506               DO ji = fs_2, fs_jpim1
507
508                  rswitch      = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zmass2(ji,jj) ) ) ) * vmask(ji,jj,1)
509                  z0           = zmass2(ji,jj) * z1_dtevp
510                  ! SB modif because ocean has no slip boundary condition
511                  zu_ice2      = 0.5 * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj)       &
512                     &                 + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj+1) )   &
513                     &                 / ( e2t(ji,jj+1) + e2t(ji,jj) ) * vmask(ji,jj,1)
514                  za           = rhoco * SQRT( ( zu_ice2 - u_oce2(ji,jj) )**2 +  & 
515                     &                         ( v_ice(ji,jj) - v_oce(ji,jj))**2 ) * ( 1.0 - zfrld2(ji,jj) )
516                  zr           = z0 * v_ice(ji,jj) + zf2(ji,jj) + za2ct(ji,jj) + za * v_oce(ji,jj)
517                  zcca         = z0 + za
518                  zccb         = zcorl2(ji,jj)
519                  v_ice(ji,jj) = ( zr - zccb * zu_ice2 ) / ( zcca + zepsi ) * rswitch
520               END DO
521            END DO
522
523            CALL lbc_lnk( v_ice(:,:), 'V', -1. )
524#if defined key_agrif && defined key_lim2
525            CALL agrif_rhg_lim2( jter, nn_nevp, 'V' )
526#endif
527#if defined key_bdy
528         CALL bdy_ice_lim_dyn( 'V' )
529#endif         
530
531         ELSE 
532!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zu_ice2,za,zr,zcca,zccb)
533            DO jj = k_j1+1, k_jpj-1
534               DO ji = fs_2, fs_jpim1
535                  rswitch      = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zmass2(ji,jj) ) ) ) * vmask(ji,jj,1)
536                  z0           = zmass2(ji,jj) * z1_dtevp
537                  ! SB modif because ocean has no slip boundary condition
538                  zu_ice2      = 0.5 * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj)       &
539                     &                  +( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj+1) )   &
540                     &                 / ( e2t(ji,jj+1) + e2t(ji,jj) ) * vmask(ji,jj,1)   
541
542                  za           = rhoco * SQRT( ( zu_ice2 - u_oce2(ji,jj) )**2 +  &
543                     &                         ( v_ice(ji,jj) - v_oce(ji,jj) )**2 ) * ( 1.0 - zfrld2(ji,jj) )
544                  zr           = z0 * v_ice(ji,jj) + zf2(ji,jj) + za2ct(ji,jj) + za * v_oce(ji,jj)
545                  zcca         = z0 + za
546                  zccb         = zcorl2(ji,jj)
547                  v_ice(ji,jj) = ( zr - zccb * zu_ice2 ) / ( zcca + zepsi ) * rswitch
548               END DO
549            END DO
550
551            CALL lbc_lnk( v_ice(:,:), 'V', -1. )
552#if defined key_agrif && defined key_lim2
553            CALL agrif_rhg_lim2( jter, nn_nevp, 'V' )
554#endif
555#if defined key_bdy
556         CALL bdy_ice_lim_dyn( 'V' )
557#endif         
558
559!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zv_ice1,za,zr,zcca,zccb)
560            DO jj = k_j1+1, k_jpj-1
561               DO ji = fs_2, fs_jpim1
562                  rswitch      = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zmass1(ji,jj) ) ) ) * umask(ji,jj,1)
563                  z0           = zmass1(ji,jj) * z1_dtevp
564                  zv_ice1      = 0.5 * ( ( v_ice(ji  ,jj) + v_ice(ji  ,jj-1) ) * e1t(ji,jj)       &
565                     &                 + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji+1,jj) )   &
566                     &                 / ( e1t(ji+1,jj) + e1t(ji,jj) ) * umask(ji,jj,1)
567
568                  za           = rhoco * SQRT( ( u_ice(ji,jj) - u_oce(ji,jj) )**2 +  &
569                     &                         ( zv_ice1 - v_oce1(ji,jj) )**2 ) * ( 1.0 - zfrld1(ji,jj) )
570                  zr           = z0 * u_ice(ji,jj) + zf1(ji,jj) + za1ct(ji,jj) + za * u_oce(ji,jj)
571                  zcca         = z0 + za
572                  zccb         = zcorl1(ji,jj)
573                  u_ice(ji,jj) = ( zr + zccb * zv_ice1 ) / ( zcca + zepsi ) * rswitch 
574               END DO
575            END DO
576
577            CALL lbc_lnk( u_ice(:,:), 'U', -1. )
578#if defined key_agrif && defined key_lim2
579            CALL agrif_rhg_lim2( jter, nn_nevp, 'U' )
580#endif
581#if defined key_bdy
582         CALL bdy_ice_lim_dyn( 'U' )
583#endif         
584
585         ENDIF
586         
587         IF(ln_ctl) THEN
588            !---  Convergence test.
589            DO jj = k_j1+1 , k_jpj-1
590               zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) )
591            END DO
592            zresm = MAXVAL( zresr( 1:jpi, k_j1+1:k_jpj-1 ) )
593            IF( lk_mpp )   CALL mpp_max( zresm )   ! max over the global domain
594         ENDIF
595
596         !                                                ! ==================== !
597      END DO                                              !  end loop over jter  !
598      !                                                   ! ==================== !
599      !
600      !------------------------------------------------------------------------------!
601      ! 4) Prevent ice velocities when the ice is thin
602      !------------------------------------------------------------------------------!
603      ! If the ice volume is below zvmin then ice velocity should equal the
604      ! ocean velocity. This prevents high velocity when ice is thin
605!$OMP PARALLEL DO schedule(static) private(jj,ji)
606      DO jj = k_j1+1, k_jpj-1
607         DO ji = fs_2, fs_jpim1
608            IF ( vt_i(ji,jj) <= zvmin ) THEN
609               u_ice(ji,jj) = u_oce(ji,jj)
610               v_ice(ji,jj) = v_oce(ji,jj)
611            ENDIF
612         END DO
613      END DO
614
615      CALL lbc_lnk_multi( u_ice(:,:), 'U', -1., v_ice(:,:), 'V', -1. )
616
617#if defined key_agrif && defined key_lim2
618      CALL agrif_rhg_lim2( nn_nevp , nn_nevp, 'U' )
619      CALL agrif_rhg_lim2( nn_nevp , nn_nevp, 'V' )
620#endif
621#if defined key_bdy
622      CALL bdy_ice_lim_dyn( 'U' )
623      CALL bdy_ice_lim_dyn( 'V' )
624#endif         
625
626!$OMP PARALLEL DO schedule(static) private(jj,ji)
627      DO jj = k_j1+1, k_jpj-1 
628         DO ji = fs_2, fs_jpim1
629            IF ( vt_i(ji,jj) <= zvmin ) THEN
630               v_ice1(ji,jj)  = 0.5_wp * ( ( v_ice(ji  ,jj) + v_ice(ji,  jj-1) ) * e1t(ji+1,jj)     &
631                  &                      + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji  ,jj) )   &
632                  &                      / ( e1t(ji+1,jj) + e1t(ji,jj) ) * umask(ji,jj,1)
633
634               u_ice2(ji,jj)  = 0.5_wp * ( ( u_ice(ji,jj  ) + u_ice(ji-1,jj  ) ) * e2t(ji,jj+1)     &
635                  &                      + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj  ) )   &
636                  &                      / ( e2t(ji,jj+1) + e2t(ji,jj) ) * vmask(ji,jj,1)
637            ENDIF
638         END DO
639      END DO
640
641      CALL lbc_lnk_multi( u_ice2(:,:), 'V', -1., v_ice1(:,:), 'U', -1. )
642
643      ! Recompute delta, shear and div, inputs for mechanical redistribution
644!$OMP PARALLEL
645!$OMP DO schedule(static) private(jj,ji,zdst,delta)
646      DO jj = k_j1+1, k_jpj-1
647         DO ji = fs_2, jpim1   !RB bug no vect opt due to zmask
648            !- divu_i(:,:), zdt(:,:): divergence and tension at centre
649            !- zds(:,:): shear on northeast corner of grid cells
650            IF ( vt_i(ji,jj) <= zvmin ) THEN
651
652               divu_i(ji,jj) = (  e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj  ) * u_ice(ji-1,jj  )   &
653                  &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji  ,jj-1) * v_ice(ji  ,jj-1)   &
654                  &            ) * r1_e1e2t(ji,jj)
655
656               zdt(ji,jj) = ( ( u_ice(ji,jj) * r1_e2u(ji,jj) - u_ice(ji-1,jj) * r1_e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj)  &
657                  &          -( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)  &
658                  &         ) * r1_e1e2t(ji,jj)
659               !
660               ! SB modif because ocean has no slip boundary condition
661               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)  &
662                  &          +( v_ice(ji+1,jj) * r1_e2v(ji+1,jj) - v_ice(ji,jj) * r1_e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj)  &
663                  &         ) * r1_e1e2f(ji,jj) * ( 2.0 - fmask(ji,jj,1) )                                     &
664                  &         * zmask(ji,jj) * zmask(ji,jj+1) * zmask(ji+1,jj) * zmask(ji+1,jj+1)
665
666               zdst = ( e2u(ji,jj) * v_ice1(ji,jj) - e2u(ji-1,jj  ) * v_ice1(ji-1,jj  )    &
667                  &   + e1v(ji,jj) * u_ice2(ji,jj) - e1v(ji  ,jj-1) * u_ice2(ji  ,jj-1) ) * r1_e1e2t(ji,jj)
668
669               delta = SQRT( divu_i(ji,jj)**2 + ( zdt(ji,jj)**2 + zdst**2 ) * usecc2 ) 
670               delta_i(ji,jj) = delta + rn_creepl
671           
672            ENDIF
673         END DO
674      END DO
675      !
676      !------------------------------------------------------------------------------!
677      ! 5) Store stress tensor and its invariants
678      !------------------------------------------------------------------------------!
679      ! * Invariants of the stress tensor are required for limitd_me
680      !   (accelerates convergence and improves stability)
681!$OMP DO schedule(static) private(jj,ji,zdst)
682      DO jj = k_j1+1, k_jpj-1
683         DO ji = fs_2, fs_jpim1
684            zdst           = (  e2u(ji,jj) * v_ice1(ji,jj) - e2u( ji-1, jj   ) * v_ice1(ji-1,jj)  &   
685               &              + e1v(ji,jj) * u_ice2(ji,jj) - e1v( ji  , jj-1 ) * u_ice2(ji,jj-1) ) * r1_e1e2t(ji,jj) 
686            shear_i(ji,jj) = SQRT( zdt(ji,jj) * zdt(ji,jj) + zdst * zdst )
687         END DO
688      END DO
689!$OMP END DO NOWAIT
690      ! * Store the stress tensor for the next time step
691!$OMP DO schedule(static) private(jj, ji)
692      DO jj = 1, jpj
693         DO ji = 1, jpi
694            stress1_i (ji,jj) = zs1 (ji,jj)
695            stress2_i (ji,jj) = zs2 (ji,jj)
696            stress12_i(ji,jj) = zs12(ji,jj)
697         END DO
698      END DO
699!$OMP END DO NOWAIT
700!$OMP END PARALLEL
701      ! Lateral boundary condition
702      CALL lbc_lnk_multi( divu_i (:,:), 'T', 1., delta_i(:,:), 'T', 1.,  shear_i(:,:), 'T', 1. )
703
704      !
705      !------------------------------------------------------------------------------!
706      ! 6) Control prints of residual and charge ellipse
707      !------------------------------------------------------------------------------!
708      !
709      ! print the residual for convergence
710      IF(ln_ctl) THEN
711         WRITE(charout,FMT="('lim_rhg  : res =',D23.16, ' iter =',I4)") zresm, jter
712         CALL prt_ctl_info(charout)
713         CALL prt_ctl(tab2d_1=u_ice, clinfo1=' lim_rhg  : u_ice :', tab2d_2=v_ice, clinfo2=' v_ice :')
714      ENDIF
715
716      ! print charge ellipse
717      ! This can be desactivated once the user is sure that the stress state
718      ! lie on the charge ellipse. See Bouillon et al. 08 for more details
719      IF(ln_ctl) THEN
720         CALL prt_ctl_info('lim_rhg  : numit  :',ivar1=numit)
721         CALL prt_ctl_info('lim_rhg  : nwrite :',ivar1=nwrite)
722         CALL prt_ctl_info('lim_rhg  : MOD    :',ivar1=MOD(numit,nwrite))
723         IF( MOD(numit,nwrite) .EQ. 0 ) THEN
724            WRITE(charout,FMT="('lim_rhg  :', I4, I6, I1, I1, A10)") 1000, numit, 0, 0, ' ch. ell. '
725            CALL prt_ctl_info(charout)
726            DO jj = k_j1+1, k_jpj-1
727               DO ji = 2, jpim1
728                  IF (zpresh(ji,jj) > 1.0) THEN
729                     sigma1 = ( zs1(ji,jj) + (zs2(ji,jj)**2 + 4*zs12(ji,jj)**2 )**0.5 ) / ( 2*zpresh(ji,jj) ) 
730                     sigma2 = ( zs1(ji,jj) - (zs2(ji,jj)**2 + 4*zs12(ji,jj)**2 )**0.5 ) / ( 2*zpresh(ji,jj) )
731                     WRITE(charout,FMT="('lim_rhg  :', I4, I4, D23.16, D23.16, D23.16, D23.16, A10)")
732                     CALL prt_ctl_info(charout)
733                  ENDIF
734               END DO
735            END DO
736            WRITE(charout,FMT="('lim_rhg  :', I4, I6, I1, I1, A10)") 2000, numit, 0, 0, ' ch. ell. '
737            CALL prt_ctl_info(charout)
738         ENDIF
739      ENDIF
740      !
741      CALL wrk_dealloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct )
742      CALL wrk_dealloc( jpi,jpj, u_oce2, u_ice2, v_oce1 , v_ice1 , zmask               )
743      CALL wrk_dealloc( jpi,jpj, zf1   , zu_ice, zf2   , zv_ice , zdt    , zds  )
744      CALL wrk_dealloc( jpi,jpj, zs1   , zs2   , zs12   , zresr , zpice                 )
745
746   END SUBROUTINE lim_rhg
747
748#else
749   !!----------------------------------------------------------------------
750   !!   Default option          Dummy module           NO LIM sea-ice model
751   !!----------------------------------------------------------------------
752CONTAINS
753   SUBROUTINE lim_rhg( k1 , k2 )         ! Dummy routine
754      WRITE(*,*) 'lim_rhg: You should not have seen this print! error?', k1, k2
755   END SUBROUTINE lim_rhg
756#endif
757
758   !!==============================================================================
759END MODULE limrhg
Note: See TracBrowser for help on using the repository browser.