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.
Changeset 13662 for NEMO/branches/2019/dev_r11842_SI3-10_EAP/src/ICE/icedyn_rhg_eap.F90 – NEMO

Ignore:
Timestamp:
2020-10-22T20:49:56+02:00 (4 years ago)
Author:
clem
Message:

update to almost r4.0.4

Location:
NEMO/branches/2019/dev_r11842_SI3-10_EAP
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11842_SI3-10_EAP

    • Property svn:externals
      •  

        old new  
        1 ^/utils/build/arch@HEAD       arch 
        2 ^/utils/build/makenemo@HEAD   makenemo 
        3 ^/utils/build/mk@HEAD         mk 
        4 ^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        6 ^/vendors/FCM@HEAD            ext/FCM 
        7 ^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         1^/utils/build/arch@12130      arch 
         2^/utils/build/makenemo@12191  makenemo 
         3^/utils/build/mk@11662        mk 
         4^/utils/tools_r4.0-HEAD@12672 tools 
         5^/vendors/AGRIF/dev@10586     ext/AGRIF 
         6^/vendors/FCM@10134           ext/FCM 
         7^/vendors/IOIPSL@9655         ext/IOIPSL 
         8 
         9# SETTE mapping (inactive) 
         10#^/utils/CI/sette@12135        sette 
  • NEMO/branches/2019/dev_r11842_SI3-10_EAP/src/ICE/icedyn_rhg_eap.F90

    r13574 r13662  
    4343   USE prtctl         ! Print control 
    4444 
     45   USE netcdf         ! NetCDF library for convergence test 
    4546   IMPLICIT NONE 
    4647   PRIVATE 
     
    4950   PUBLIC   rhg_eap_rst       ! called by icedyn_rhg.F90 
    5051 
    51    REAL(wp), PARAMETER           ::   pphi = 3.141592653589793_wp/12._wp    ! diamond shaped floe smaller angle (default phi = 30 deg) 
     52   REAL(wp), PARAMETER ::   pphi = 3.141592653589793_wp/12._wp    ! diamond shaped floe smaller angle (default phi = 30 deg) 
    5253 
    5354   ! look-up table for calculating structure tensor 
     
    6061   !! * Substitutions 
    6162#  include "vectopt_loop_substitute.h90" 
     63 
     64   !! for convergence tests 
     65   INTEGER ::   ncvgid   ! netcdf file id 
     66   INTEGER ::   nvarid   ! netcdf variable id 
     67   REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zmsk00, zmsk15 
    6268   !!---------------------------------------------------------------------- 
    6369   !! NEMO/ICE 4.0 , NEMO Consortium (2018) 
     
    131137      REAL(wp) ::   zdtevp, z1_dtevp                                    ! time step for subcycling 
    132138      REAL(wp) ::   ecc2, z1_ecc2                                       ! square of yield ellipse eccenticity 
    133       REAL(wp) ::   zalph1, z1_alph1                                    ! alpha coef from Bouillon 2009 or Kimmritz 2017 
     139      REAL(wp) ::   zalph1, z1_alph1, zalph2, z1_alph2                  ! alpha coef from Bouillon 2009 or Kimmritz 2017 
     140      REAl(wp) ::   zbetau, zbetav 
    134141      REAL(wp) ::   zm1, zm2, zm3, zmassU, zmassV, zvU, zvV             ! ice/snow mass and volume 
    135       REAL(wp) ::   zdelta, zp_delf, zds2, zdt, zdt2, zdiv, zdiv2, zdsT ! temporary scalars 
     142      REAL(wp) ::   zds2, zdt, zdt2, zdiv, zdiv2, zdsT                  ! temporary scalars 
    136143      REAL(wp) ::   zTauO, zTauB, zRHS, zvel                            ! temporary scalars 
    137144      REAL(wp) ::   zkt                                                 ! isotropic tensile strength for landfast ice 
    138145      REAL(wp) ::   zvCr                                                ! critical ice volume above which ice is landfast 
    139146      ! 
    140       REAL(wp) ::   zresm                                               ! Maximal error on ice velocity 
    141147      REAL(wp) ::   zintb, zintn                                        ! dummy argument 
    142148      REAL(wp) ::   zfac_x, zfac_y 
    143149      REAL(wp) ::   zshear, zdum1, zdum2 
    144       REAL(wp) ::   zstressptmp, zstressmtmp, zstress12tmpF                ! anisotropic stress tensor components 
    145       REAL(wp) ::   zalphar, zalphas                                      ! for mechanical redistribution 
    146       REAL(wp) ::   zmresult11, zmresult12, z1dtevpkth, zp5kth, z1_dtevp_A        ! for structure tensor evolution 
    147       ! 
    148       REAL(wp), DIMENSION(jpi,jpj) ::   zstress12tmp                     ! anisotropic stress tensor component for regridding 
    149       REAL(wp), DIMENSION(jpi,jpj) ::   zyield11, zyield22, zyield12       ! yield surface tensor for history 
    150       REAL(wp), DIMENSION(jpi,jpj) ::   zp_delt                         ! P/delta at T points 
     150      REAL(wp) ::   zstressptmp, zstressmtmp, zstress12tmpF             ! anisotropic stress tensor components 
     151      REAL(wp) ::   zalphar, zalphas                                    ! for mechanical redistribution 
     152      REAL(wp) ::   zmresult11, zmresult12, z1dtevpkth, zp5kth, z1_dtevp_A  ! for structure tensor evolution 
     153      ! 
     154      REAL(wp), DIMENSION(jpi,jpj) ::   zstress12tmp                    ! anisotropic stress tensor component for regridding 
     155      REAL(wp), DIMENSION(jpi,jpj) ::   zyield11, zyield22, zyield12    ! yield surface tensor for history 
     156      REAL(wp), DIMENSION(jpi,jpj) ::   zdelta, zp_delt                 ! delta and P/delta at T points 
     157      REAL(wp), DIMENSION(jpi,jpj) ::   zten_i                          ! tension 
    151158      REAL(wp), DIMENSION(jpi,jpj) ::   zbeta                           ! beta coef from Kimmritz 2017 
    152159      ! 
     
    159166      REAL(wp), DIMENSION(jpi,jpj) ::   zds                             ! shear 
    160167      REAL(wp), DIMENSION(jpi,jpj) ::   zs1, zs2, zs12                  ! stress tensor components 
    161 !!$      REAL(wp), DIMENSION(jpi,jpj) ::   zu_ice, zv_ice, zresr           ! check convergence 
    162168      REAL(wp), DIMENSION(jpi,jpj) ::   zsshdyn                         ! array used for the calculation of ice surface slope: 
    163169      !                                                                 !    ocean surface (ssh_m) if ice is not embedded 
     
    173179      REAL(wp), DIMENSION(jpi,jpj) ::   zmsk01x, zmsk01y                ! dummy arrays 
    174180      REAL(wp), DIMENSION(jpi,jpj) ::   zmsk00x, zmsk00y                ! mask for ice presence 
    175       REAL(wp), DIMENSION(jpi,jpj) ::   zfmask, zwf                     ! mask at F points for the ice 
     181      REAL(wp), DIMENSION(jpi,jpj) ::   zfmask                          ! mask at F points for the ice 
    176182 
    177183      REAL(wp), PARAMETER          ::   zepsi  = 1.0e-20_wp             ! tolerance parameter 
    178184      REAL(wp), PARAMETER          ::   zmmin  = 1._wp                  ! ice mass (kg/m2)  below which ice velocity becomes very small 
    179185      REAL(wp), PARAMETER          ::   zamin  = 0.001_wp               ! ice concentration below which ice velocity becomes very small 
     186      !! --- check convergence 
     187      REAL(wp), DIMENSION(jpi,jpj) ::   zu_ice, zv_ice 
    180188      !! --- diags 
    181       REAL(wp), DIMENSION(jpi,jpj) ::   zmsk00 
    182       REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zsig1, zsig2, zsig3 
     189      REAL(wp) ::   zsig1, zsig2, zsig12, zfac, z1_strength 
     190      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zsig_I, zsig_II, zsig1_p, zsig2_p          
    183191      !! --- SIMIP diags 
    184192      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdiag_xmtrp_ice ! X-component of ice mass transport (kg/s) 
     
    191199 
    192200      IF( kt == nit000 .AND. lwp )   WRITE(numout,*) '-- ice_dyn_rhg_eap: EAP sea-ice rheology' 
     201      ! 
     202      ! for diagnostics and convergence tests 
     203      ALLOCATE( zmsk00(jpi,jpj), zmsk15(jpi,jpj) ) 
     204      DO jj = 1, jpj 
     205         DO ji = 1, jpi 
     206            zmsk00(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06  ) ) ! 1 if ice    , 0 if no ice 
     207            zmsk15(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - 0.15_wp ) ) ! 1 if 15% ice, 0 if less 
     208         END DO 
     209      END DO 
    193210      ! 
    194211!!gm for Clem:  OPTIMIZATION:  I think zfmask can be computed one for all at the initialization.... 
     
    205222 
    206223      ! Lateral boundary conditions on velocity (modify zfmask) 
    207       zwf(:,:) = zfmask(:,:) 
    208224      DO jj = 2, jpjm1 
    209225         DO ji = fs_2, fs_jpim1   ! vector opt. 
    210226            IF( zfmask(ji,jj) == 0._wp ) THEN 
    211                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) ) ) 
     227               zfmask(ji,jj) = rn_ishlat * MIN( 1._wp , MAX( umask(ji,jj,1), umask(ji,jj+1,1), & 
     228                  &                                          vmask(ji,jj,1), vmask(ji+1,jj,1) ) ) 
    212229            ENDIF 
    213230         END DO 
     
    215232      DO jj = 2, jpjm1 
    216233         IF( zfmask(1,jj) == 0._wp ) THEN 
    217             zfmask(1  ,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 
     234            zfmask(1  ,jj) = rn_ishlat * MIN( 1._wp , MAX( vmask(2,jj,1), umask(1,jj+1,1), umask(1,jj,1) ) ) 
    218235         ENDIF 
    219236         IF( zfmask(jpi,jj) == 0._wp ) THEN 
    220             zfmask(jpi,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
     237            zfmask(jpi,jj) = rn_ishlat * MIN( 1._wp , MAX( umask(jpi,jj+1,1), vmask(jpim1,jj,1), umask(jpi,jj-1,1) ) ) 
    221238         ENDIF 
    222239      END DO 
    223240      DO ji = 2, jpim1 
    224241         IF( zfmask(ji,1) == 0._wp ) THEN 
    225             zfmask(ji,1  ) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 
     242            zfmask(ji, 1 ) = rn_ishlat * MIN( 1._wp , MAX( vmask(ji+1,1,1), umask(ji,2,1), vmask(ji,1,1) ) ) 
    226243         ENDIF 
    227244         IF( zfmask(ji,jpj) == 0._wp ) THEN 
    228             zfmask(ji,jpj) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 
     245            zfmask(ji,jpj) = rn_ishlat * MIN( 1._wp , MAX( vmask(ji+1,jpj,1), vmask(ji-1,jpj,1), umask(ji,jpjm1,1) ) ) 
    229246         ENDIF 
    230247      END DO 
     
    240257      z1_ecc2 = 1._wp / ecc2 
    241258 
    242       ! Time step for subcycling 
    243       zdtevp   = rdt_ice / REAL( nn_nevp ) 
    244       z1_dtevp = 1._wp / zdtevp 
    245  
    246259      ! alpha parameters (Bouillon 2009) 
    247260      IF( .NOT. ln_aEVP ) THEN 
    248          zalph1 = ( 2._wp * rn_relast * rdt_ice ) * z1_dtevp 
     261         zdtevp   = rdt_ice / REAL( nn_nevp ) 
     262         zalph1 =   2._wp * rn_relast * REAL( nn_nevp ) 
     263         zalph2 = zalph1 * z1_ecc2 
     264 
    249265         z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 
    250       ENDIF 
     266         z1_alph2 = 1._wp / ( zalph2 + 1._wp ) 
     267      ELSE 
     268         zdtevp   = rdt_ice 
     269         ! zalpha parameters set later on adaptatively 
     270      ENDIF 
     271      z1_dtevp = 1._wp / zdtevp 
    251272          
    252273      ! Initialise stress tensor  
     
    264285 
    265286      ! landfast param from Lemieux(2016): add isotropic tensile strength (following Konig Beatty and Holland, 2010) 
    266       IF( ln_landfast_L16 ) THEN   ;   zkt = rn_tensile 
     287      IF( ln_landfast_L16 ) THEN   ;   zkt = rn_lf_tensile 
    267288      ELSE                         ;   zkt = 0._wp 
    268289      ENDIF 
     
    335356               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) 
    336357               ! ice-bottom stress at U points 
    337                zvCr = zaU(ji,jj) * rn_depfra * hu_n(ji,jj) 
    338                ztaux_base(ji,jj) = - rn_icebfr * MAX( 0._wp, zvU - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaU(ji,jj) ) ) 
     358               zvCr = zaU(ji,jj) * rn_lf_depfra * hu_n(ji,jj) 
     359               ztaux_base(ji,jj) = - rn_lf_bfr * MAX( 0._wp, zvU - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaU(ji,jj) ) ) 
    339360               ! ice-bottom stress at V points 
    340                zvCr = zaV(ji,jj) * rn_depfra * hv_n(ji,jj) 
    341                ztauy_base(ji,jj) = - rn_icebfr * MAX( 0._wp, zvV - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaV(ji,jj) ) ) 
     361               zvCr = zaV(ji,jj) * rn_lf_depfra * hv_n(ji,jj) 
     362               ztauy_base(ji,jj) = - rn_lf_bfr * MAX( 0._wp, zvV - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaV(ji,jj) ) ) 
    342363               ! ice_bottom stress at T points 
    343                zvCr = at_i(ji,jj) * rn_depfra * ht_n(ji,jj) 
    344                tau_icebfr(ji,jj) = - rn_icebfr * MAX( 0._wp, vt_i(ji,jj) - zvCr ) * EXP( -rn_crhg * ( 1._wp - at_i(ji,jj) ) ) 
     364               zvCr = at_i(ji,jj) * rn_lf_depfra * ht_n(ji,jj) 
     365               tau_icebfr(ji,jj) = - rn_lf_bfr * MAX( 0._wp, vt_i(ji,jj) - zvCr ) * EXP( -rn_crhg * ( 1._wp - at_i(ji,jj) ) ) 
    345366            END DO 
    346367         END DO 
     
    365386         l_full_nf_update = jter == nn_nevp   ! false: disable full North fold update (performances) for iter = 1 to nn_nevp-1 
    366387         ! 
    367 !!$         IF(ln_ctl) THEN   ! Convergence test 
    368 !!$            DO jj = 1, jpjm1 
    369 !!$               zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step 
    370 !!$               zv_ice(:,jj) = v_ice(:,jj) 
    371 !!$            END DO 
    372 !!$         ENDIF 
     388         ! convergence test 
     389         IF( nn_rhg_chkcvg == 1 .OR. nn_rhg_chkcvg == 2  ) THEN 
     390            DO jj = 1, jpj 
     391               DO ji = 1, jpi 
     392                  zu_ice(ji,jj) = u_ice(ji,jj) * umask(ji,jj,1) ! velocity at previous time step 
     393                  zv_ice(ji,jj) = v_ice(ji,jj) * vmask(ji,jj,1) 
     394               END DO 
     395            END DO 
     396         ENDIF 
    373397 
    374398         ! --- divergence, tension & shear (Appendix B of Hunke & Dukowicz, 2002) --- ! 
    375          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 
     399         DO jj = 1, jpjm1 
    376400            DO ji = 1, jpim1 
    377401 
     
    383407            END DO 
    384408         END DO 
    385          CALL lbc_lnk( 'icedyn_rhg_eap', zds, 'F', 1. ) 
    386  
    387          DO jj = 2, jpj    ! loop to jpi,jpj to avoid making a communication for zs1,zs2,zs12 
    388             DO ji = 2, jpi ! no vector loop 
    389  
    390                ! shear at T points  
    391                zdsT = ( zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  & 
    392                   &   + zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  & 
    393 !                  &   ) * 0.25_wp * r1_e1e2t(ji,jj)       .25 was an error 
    394                   &   ) * r1_e1e2t(ji,jj) 
    395                !WRITE(numout,*) 'shear output', ji, jj, zdsT 
    396                 
     409         CALL lbc_lnk( 'icedyn_rhg_eap', zds, 'F', 1._wp ) 
     410 
     411         DO jj = 2, jpjm1 
     412            DO ji = 2, jpim1 ! no vector loop 
    397413 
    398414               ! shear**2 at T points (doc eq. A16) 
     
    412428                  &   ) * r1_e1e2t(ji,jj) 
    413429               zdt2 = zdt * zdt 
     430 
     431               ! delta at T points 
     432               zdelta(ji,jj) = SQRT( zdiv2 + ( zdt2 + zds2 ) * z1_ecc2 )   
     433 
     434            END DO 
     435         END DO 
     436         CALL lbc_lnk( 'icedyn_rhg_eap', zdelta, 'T', 1._wp ) 
    414437                
     438         ! P/delta at T points 
     439         DO jj = 1, jpj 
     440            DO ji = 1, jpi 
     441               zp_delt(ji,jj) = strength(ji,jj) / ( zdelta(ji,jj) + rn_creepl ) 
     442            END DO 
     443         END DO 
     444 
     445         DO jj = 2, jpj    ! loop ends at jpi,jpj so that no lbc_lnk are needed for zs1 and zs2 
     446            DO ji = 2, jpi ! no vector loop 
     447 
     448                ! shear at T points  
     449               zdsT = ( zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  & 
     450                  &   + zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  & 
     451                  &   ) * 0.25_wp * r1_e1e2t(ji,jj) 
     452               !WRITE(numout,*) 'shear output', ji, jj, zdsT 
     453                
     454              ! divergence at T points (duplication to avoid communications) 
     455               zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   & 
     456                  &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   & 
     457                  &    ) * r1_e1e2t(ji,jj) 
     458                
     459               ! tension at T points (duplication to avoid communications) 
     460               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)   & 
     461                  &   - ( v_ice(ji,jj) * r1_e1v(ji,jj) - v_ice(ji,jj-1) * r1_e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj)   & 
     462                  &   ) * r1_e1e2t(ji,jj) 
     463 
    415464               ! --- anisotropic stress calculation --- ! 
    416                CALL update_stress_rdg (jter, nn_nevp, zdiv, zdt, & 
    417                                        zdsT, paniso_11(ji,jj), paniso_12(ji,jj), & 
    418                                        zstressptmp, zstressmtmp, & 
    419                                        zstress12tmp(ji,jj), strength(ji,jj), & 
    420                                        zalphar, zalphas) 
     465               CALL update_stress_rdg (jter, nn_nevp, zdiv, zdt, zdsT, paniso_11(ji,jj), paniso_12(ji,jj), & 
     466                                       zstressptmp, zstressmtmp, zstress12tmp(ji,jj), strength(ji,jj), zalphar, zalphas) 
    421467 
    422468               ! structure tensor update 
    423                IF (mod(jter,10) == 0) THEN 
    424                   CALL calc_ffrac(zstressptmp, zstressmtmp, zstress12tmp(ji,jj), & 
    425                                   paniso_11(ji,jj), paniso_12(ji,jj),           & 
    426                                   zmresult11,  zmresult12) 
    427  
    428                   paniso_11(ji,jj) = (paniso_11(ji,jj)*z1_dtevp_A  + zp5kth - zmresult11) * z1dtevpkth ! implicit 
    429                   paniso_12(ji,jj) = (paniso_12(ji,jj)*z1_dtevp_A  - zmresult12) * z1dtevpkth ! implicit 
    430                ENDIF 
    431  
     469!!$               IF (mod(jter,10) == 0) THEN 
     470                  CALL calc_ffrac(zstressptmp, zstressmtmp, zstress12tmp(ji,jj), paniso_11(ji,jj), paniso_12(ji,jj), zmresult11,  zmresult12) 
     471 
     472!!$                  paniso_11(ji,jj) = (paniso_11(ji,jj)*z1_dtevp_A  + zp5kth + zmresult11) * z1dtevpkth ! implicit 
     473!!$                  paniso_12(ji,jj) = (paniso_12(ji,jj)*z1_dtevp_A  + zmresult12) * z1dtevpkth ! implicit 
     474                  paniso_11(ji,jj) = (paniso_11(ji,jj)  + 0.5*2.e-5*zdtevp + zmresult11*zdtevp) / (1. + 2.e-5*zdtevp) ! implicit 
     475                  paniso_12(ji,jj) = (paniso_12(ji,jj)                     + zmresult12*zdtevp) / (1. + 2.e-5*zdtevp) ! implicit 
     476!!$               ENDIF 
    432477 
    433478               IF (jter == nn_nevp) THEN 
     
    438483               ENDIF 
    439484 
    440                ! delta at T points 
    441                zdelta = SQRT( zdiv2 + ( zdt2 + zds2 ) * z1_ecc2 )   
    442  
    443                ! P/delta at T points 
    444                zp_delt(ji,jj) = strength(ji,jj) / ( zdelta + rn_creepl ) 
    445  
    446                ! alpha & beta for aEVP 
     485               ! alpha for aEVP 
    447486               !   gamma = 0.5*P/(delta+creepl) * (c*pi)**2/Area * dt/m 
    448487               !   alpha = beta = sqrt(4*gamma) 
    449                !IF( ln_aEVP ) THEN 
    450                !   zalph1   = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 
    451                !   z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 
    452                !ENDIF 
    453                 
     488               IF( ln_aEVP ) THEN 
     489                  zalph1   = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 
     490                  z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 
     491                  zalph2   = zalph1 
     492                  z1_alph2 = z1_alph1 
     493                  ! explicit: 
     494                  ! z1_alph1 = 1._wp / zalph1 
     495                  ! z1_alph2 = 1._wp / zalph1 
     496                  ! zalph1 = zalph1 - 1._wp 
     497                  ! zalph2 = zalph1 
     498               ENDIF 
     499 
    454500               ! stress at T points (zkt/=0 if landfast) 
    455                !zs1(ji,jj) = ( zs1(ji,jj) * zalph1 + zp_delt(ji,jj) * ( zdiv * (1._wp + zkt) - zdelta * (1._wp - zkt) ) ) * z1_alph1 
    456                !zs2(ji,jj) = ( zs2(ji,jj) * zalph2 + zp_delt(ji,jj) * ( zdt * z1_ecc2 * (1._wp + zkt) ) ) * z1_alph2 
    457                zs1(ji,jj) = ( zs1(ji,jj) + zstressptmp * zalph1  ) * z1_alph1 
    458                zs2(ji,jj) = ( zs2(ji,jj) + zstressmtmp * zalph1  ) * z1_alph1 
     501               !zs1(ji,jj) = ( zs1(ji,jj)*zalph1 + zp_delt(ji,jj) * ( zdiv*(1._wp + zkt) - zdelta(ji,jj)*(1._wp - zkt) ) ) * z1_alph1 
     502               !zs2(ji,jj) = ( zs2(ji,jj)*zalph2 + zp_delt(ji,jj) * ( zdt * z1_ecc2 * (1._wp + zkt) ) ) * z1_alph2 
     503!!$               zs1(ji,jj) = ( zs1(ji,jj) + zstressptmp * zalph1  ) * z1_alph1 
     504!!$               zs2(ji,jj) = ( zs2(ji,jj) + zstressmtmp * zalph1  ) * z1_alph1 
     505               zs1(ji,jj) = ( zs1(ji,jj) * zalph1 + zstressptmp ) * z1_alph1 
     506               zs2(ji,jj) = ( zs2(ji,jj) * zalph1 + zstressmtmp ) * z1_alph1 
    459507               !zs1(ji,jj) = ( stressptmp * zs1(ji,jj) + zalph1  ) * z1_alph1 
    460508               !zs2(ji,jj) = ( stressmtmp * zs2(ji,jj) + zalph1  ) * z1_alph1 
     
    462510            END DO 
    463511         END DO 
    464          !CALL lbc_lnk( 'icedyn_rhg_eap', zp_delt, 'T', 1. ) 
    465512         CALL lbc_lnk_multi( 'icedyn_rhg_eap', zstress12tmp, 'T', 1. , paniso_11, 'T', 1. , paniso_12, 'T', 1.) 
     513 
     514        ! Save beta at T-points for further computations 
     515         IF( ln_aEVP ) THEN 
     516            DO jj = 1, jpj 
     517               DO ji = 1, jpi 
     518                  zbeta(ji,jj) = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 
     519               END DO 
     520            END DO 
     521         ENDIF 
    466522 
    467523         DO jj = 1, jpjm1 
     
    469525               ! stress12tmp at F points  
    470526               zstress12tmpF = ( zstress12tmp(ji,jj+1) * e1e2t(ji,jj+1) + zstress12tmp(ji+1,jj+1) * e1e2t(ji+1,jj+1)  & 
    471                   &   + zstress12tmp(ji,jj  ) * e1e2t(ji,jj  ) + zstress12tmp(ji+1,jj  ) * e1e2t(ji+1,jj  )  & 
    472                   &   ) * 0.25_wp * r1_e1e2f(ji,jj) 
    473  
    474                ! alpha & beta for aEVP 
     527                  &            + zstress12tmp(ji,jj  ) * e1e2t(ji,jj  ) + zstress12tmp(ji+1,jj  ) * e1e2t(ji+1,jj  )  & 
     528                  &            ) * 0.25_wp * r1_e1e2f(ji,jj) 
     529 
     530               ! alpha for aEVP 
    475531               IF( ln_aEVP ) THEN 
    476                   zalph1   = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 
    477                   z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 
     532                  zalph2   = MAX( zbeta(ji,jj), zbeta(ji+1,jj), zbeta(ji,jj+1), zbeta(ji+1,jj+1) ) 
     533                  z1_alph2 = 1._wp / ( zalph2 + 1._wp ) 
     534                  ! explicit: 
     535                  ! z1_alph2 = 1._wp / zalph2 
     536                  ! zalph2 = zalph2 - 1._wp 
    478537               ENDIF 
    479538                
    480539               ! stress at F points (zkt/=0 if landfast) 
    481540               !zs12(ji,jj)= ( zs12(ji,jj) * zalph2 + zp_delf * ( zds(ji,jj) * z1_ecc2 * (1._wp + zkt) ) * 0.5_wp ) * z1_alph2 
    482                zs12(ji,jj) = ( zs12(ji,jj) + zstress12tmpF * zalph1  ) * z1_alph1 
     541!!$               zs12(ji,jj) = ( zs12(ji,jj) + zstress12tmpF * zalph1  ) * z1_alph1 
     542               zs12(ji,jj) = ( zs12(ji,jj) * zalph1 + zstress12tmpF ) * z1_alph1 
    483543               !zs12(ji,jj) = ( stress12tmpF * zs12(ji,jj) + zalph1  ) * z1_alph1 
    484544 
    485545            END DO 
    486546         END DO 
    487       CALL lbc_lnk_multi( 'icedyn_rhg_eap', zs1, 'T', 1., zs2, 'T', 1., zs12, 'F', 1. ) 
     547         CALL lbc_lnk_multi( 'icedyn_rhg_eap', zs1, 'T', 1., zs2, 'T', 1., zs12, 'F', 1. ) 
    488548 
    489549         ! --- Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) --- ! 
     
    545605                  ! 
    546606                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 
    547                      v_ice(ji,jj) = ( (          rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) )       & ! previous velocity 
    548                         &                                  + zRHS + zTauO * v_ice(ji,jj) )                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    549                         &                                  / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
    550                         &               + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0 
    551                         &             ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                     & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
     607                     zbetav = MAX( zbeta(ji,jj), zbeta(ji,jj+1) ) 
     608                     v_ice(ji,jj) = ( (          rswitch   * ( zmV_t(ji,jj) * ( zbetav * v_ice(ji,jj) + v_ice_b(ji,jj) )         & ! previous velocity 
     609                        &                                    + zRHS + zTauO * v_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     610                        &                                    ) / MAX( zepsi, zmV_t(ji,jj) * ( zbetav + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
     611                        &            + ( 1._wp - rswitch ) * (  v_ice_b(ji,jj)                                                   &  
     612                        &                                     + v_ice  (ji,jj) * MAX( 0._wp, zbetav - zdtevp * rn_lf_relax )     & ! static friction => slow decrease to v=0 
     613                        &                                    ) / ( zbetav + 1._wp )                                              & 
     614                        &             ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                   & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
    552615                        &           )   * zmsk00y(ji,jj) 
    553616                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 
    554                      v_ice(ji,jj) = ( (           rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                                       & ! previous velocity 
    555                         &                                     + zRHS + zTauO * v_ice(ji,jj) )                                      & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    556                         &                                     / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )                         & ! m/dt + tau_io(only ice part) + landfast 
    557                         &                + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )          & ! static friction => slow decrease to v=0 
    558                         &              ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                    & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
     617                     v_ice(ji,jj) = ( (         rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                                       & ! previous velocity 
     618                        &                                    + zRHS + zTauO * v_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     619                        &                                    ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )                      & ! m/dt + tau_io(only ice part) + landfast 
     620                        &            + ( 1._wp - rswitch ) *   v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lf_relax )         & ! static friction => slow decrease to v=0 
     621                        &              ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                  & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
    559622                        &            )   * zmsk00y(ji,jj) 
    560623                  ENDIF 
     
    596659                  ! 
    597660                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 
    598                      u_ice(ji,jj) = ( (          rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) )       & ! previous velocity 
    599                         &                                  + zRHS + zTauO * u_ice(ji,jj) )                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    600                         &                                  / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
    601                         &               + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0 
    602                         &             ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                     & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
     661                     zbetau = MAX( zbeta(ji,jj), zbeta(ji+1,jj) ) 
     662                     u_ice(ji,jj) = ( (          rswitch   * ( zmU_t(ji,jj) * ( zbetau * u_ice(ji,jj) + u_ice_b(ji,jj) )         & ! previous velocity 
     663                        &                                    + zRHS + zTauO * u_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     664                        &                                    ) / MAX( zepsi, zmU_t(ji,jj) * ( zbetau + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
     665                        &            + ( 1._wp - rswitch ) * (  u_ice_b(ji,jj)                                                   & 
     666                        &                                     + u_ice  (ji,jj) * MAX( 0._wp, zbetau - zdtevp * rn_lf_relax )     & ! static friction => slow decrease to v=0 
     667                        &                                    ) / ( zbetau + 1._wp )                                              & 
     668                        &             ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                   & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
    603669                        &           )   * zmsk00x(ji,jj) 
    604670                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 
    605                      u_ice(ji,jj) = ( (           rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                                       & ! previous velocity 
    606                         &                                     + zRHS + zTauO * u_ice(ji,jj) )                                      & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    607                         &                                     / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )                         & ! m/dt + tau_io(only ice part) + landfast 
    608                         &                + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )          & ! static friction => slow decrease to v=0 
    609                         &              ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                    & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
     671                     u_ice(ji,jj) = ( (         rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                                       & ! previous velocity 
     672                        &                                    + zRHS + zTauO * u_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     673                        &                                    ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )                      & ! m/dt + tau_io(only ice part) + landfast 
     674                        &            + ( 1._wp - rswitch ) *   u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lf_relax )         & ! static friction => slow decrease to v=0 
     675                        &              ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                  & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
    610676                        &            )   * zmsk00x(ji,jj) 
    611677                  ENDIF 
     
    649715                  ! 
    650716                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 
    651                      u_ice(ji,jj) = ( (          rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) )       & ! previous velocity 
    652                         &                                  + zRHS + zTauO * u_ice(ji,jj) )                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    653                         &                                  / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
    654                         &               + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0 
    655                         &             ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                     & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
     717                     zbetau = MAX( zbeta(ji,jj), zbeta(ji+1,jj) ) 
     718                     u_ice(ji,jj) = ( (          rswitch   * ( zmU_t(ji,jj) * ( zbetau * u_ice(ji,jj) + u_ice_b(ji,jj) )         & ! previous velocity 
     719                        &                                    + zRHS + zTauO * u_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     720                        &                                    ) / MAX( zepsi, zmU_t(ji,jj) * ( zbetau + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
     721                        &            + ( 1._wp - rswitch ) * (  u_ice_b(ji,jj)                                                   & 
     722                        &                                     + u_ice  (ji,jj) * MAX( 0._wp, zbetau - zdtevp * rn_lf_relax )     & ! static friction => slow decrease to v=0 
     723                        &                                    ) / ( zbetau + 1._wp )                                              & 
     724                        &             ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                   & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin  
    656725                        &           )   * zmsk00x(ji,jj) 
    657726                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 
    658                      u_ice(ji,jj) = ( (           rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                                       & ! previous velocity 
    659                         &                                     + zRHS + zTauO * u_ice(ji,jj) )                                      & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    660                         &                                     / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )                         & ! m/dt + tau_io(only ice part) + landfast 
    661                         &                + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )          & ! static friction => slow decrease to v=0 
    662                         &              ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                    & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
     727                     u_ice(ji,jj) = ( (         rswitch   * ( zmU_t(ji,jj)  * u_ice(ji,jj)                                       & ! previous velocity 
     728                        &                                    + zRHS + zTauO * u_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     729                        &                                    ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB )                      & ! m/dt + tau_io(only ice part) + landfast 
     730                        &            + ( 1._wp - rswitch ) *   u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lf_relax )         & ! static friction => slow decrease to v=0 
     731                        &              ) * zmsk01x(ji,jj) + u_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01x(ji,jj) )                  & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
    663732                        &            )   * zmsk00x(ji,jj) 
    664733                  ENDIF 
     
    700769                  ! 
    701770                  IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 
    702                      v_ice(ji,jj) = ( (          rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) )       & ! previous velocity 
    703                         &                                  + zRHS + zTauO * v_ice(ji,jj) )                                         & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    704                         &                                  / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
    705                         &               + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )           & ! static friction => slow decrease to v=0 
    706                         &             ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                     & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
     771                     zbetav = MAX( zbeta(ji,jj), zbeta(ji,jj+1) ) 
     772                     v_ice(ji,jj) = ( (          rswitch   * ( zmV_t(ji,jj) * ( zbetav * v_ice(ji,jj) + v_ice_b(ji,jj) )         & ! previous velocity 
     773                        &                                    + zRHS + zTauO * v_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     774                        &                                    ) / MAX( zepsi, zmV_t(ji,jj) * ( zbetav + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 
     775                        &            + ( 1._wp - rswitch ) * (  v_ice_b(ji,jj)                                                   & 
     776                        &                                     + v_ice  (ji,jj) * MAX( 0._wp, zbetav - zdtevp * rn_lf_relax )     & ! static friction => slow decrease to v=0 
     777                        &                                    ) / ( zbetav + 1._wp )                                              &  
     778                        &             ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                   & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
    707779                        &           )   * zmsk00y(ji,jj) 
    708780                  ELSE               !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 
    709                      v_ice(ji,jj) = ( (           rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                                       & ! previous velocity 
    710                         &                                     + zRHS + zTauO * v_ice(ji,jj) )                                      & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
    711                         &                                     / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )                         & ! m/dt + tau_io(only ice part) + landfast 
    712                         &                + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax )          & ! static friction => slow decrease to v=0 
    713                         &              ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                    & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
     781                     v_ice(ji,jj) = ( (         rswitch   * ( zmV_t(ji,jj)  * v_ice(ji,jj)                                       & ! previous velocity 
     782                        &                                    + zRHS + zTauO * v_ice(ji,jj)                                       & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 
     783                        &                                    ) / MAX( zepsi, zmV_t(ji,jj) + zTauO - zTauB )                      & ! m/dt + tau_io(only ice part) + landfast 
     784                        &            + ( 1._wp - rswitch ) *   v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lf_relax )         & ! static friction => slow decrease to v=0 
     785                        &              ) * zmsk01y(ji,jj) + v_oce(ji,jj) * 0.01_wp * ( 1._wp - zmsk01y(ji,jj) )                  & ! v_ice = v_oce/100 if mass < zmmin & conc < zamin 
    714786                        &            )   * zmsk00y(ji,jj) 
    715787                  ENDIF 
     
    726798         ENDIF 
    727799 
    728 !!$         IF(ln_ctl) THEN   ! Convergence test 
    729 !!$            DO jj = 2 , jpjm1 
    730 !!$               zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ), ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 
    731 !!$            END DO 
    732 !!$            zresm = MAXVAL( zresr( 1:jpi, 2:jpjm1 ) ) 
    733 !!$            CALL mpp_max( 'icedyn_rhg_eap', zresm )   ! max over the global domain 
    734 !!$         ENDIF 
     800         ! convergence test 
     801         IF( nn_rhg_chkcvg == 2 )   CALL rhg_cvg( kt, jter, nn_nevp, u_ice, v_ice, zu_ice, zv_ice ) 
    735802         ! 
    736  
    737803         !                                                ! ==================== ! 
    738804      END DO                                              !  end loop over jter  ! 
    739805      !                                                   ! ==================== ! 
     806      IF( ln_aEVP )   CALL iom_put( 'beta_evp' , zbeta ) 
    740807      ! 
    741808      CALL lbc_lnk( 'icedyn_rhg_eap', prdg_conv, 'T', 1. )  ! only need this in ridging module after rheology completed 
     
    764831            zdt2 = zdt * zdt 
    765832             
     833            zten_i(ji,jj) = zdt 
     834 
    766835            ! shear**2 at T points (doc eq. A16) 
    767836            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  & 
     
    778847             
    779848            ! delta at T points 
    780             zdelta         = SQRT( pdivu_i(ji,jj) * pdivu_i(ji,jj) + ( zdt2 + zds2 ) * z1_ecc2 )   
    781             rswitch        = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zdelta ) ) ! 0 if delta=0 
    782             pdelta_i(ji,jj) = zdelta + rn_creepl * rswitch 
     849            zfac            = SQRT( pdivu_i(ji,jj) * pdivu_i(ji,jj) + ( zdt2 + zds2 ) * z1_ecc2 ) ! delta   
     850            rswitch         = 1._wp - MAX( 0._wp, SIGN( 1._wp, -zfac ) ) ! 0 if delta=0 
     851            pdelta_i(ji,jj) = zfac + rn_creepl * rswitch ! delta+creepl 
    783852 
    784853         END DO 
    785854      END DO 
    786       CALL lbc_lnk_multi( 'icedyn_rhg_eap', pshear_i, 'T', 1., pdivu_i, 'T', 1., pdelta_i, 'T', 1. ) 
    787       !CALL lbc_lnk_multi( 'icedyn_rhg_eap', pshear_i, 'T', 1., pdivu_i, 'T', 1. ) 
     855      CALL lbc_lnk_multi( 'icedyn_rhg_eap', pshear_i, 'T', 1., pdivu_i, 'T', 1., pdelta_i, 'T', 1., zten_i, 'T', 1., & 
     856         &                                  zs1     , 'T', 1., zs2    , 'T', 1., zs12    , 'F', 1. ) 
    788857       
    789858      ! --- Store the stress tensor for the next time step --- ! 
    790       CALL lbc_lnk_multi( 'icedyn_rhg_eap', zs1, 'T', 1., zs2, 'T', 1., zs12, 'F', 1. ) 
    791859      pstress1_i (:,:) = zs1 (:,:) 
    792860      pstress2_i (:,:) = zs2 (:,:) 
     
    797865      ! 5) diagnostics 
    798866      !------------------------------------------------------------------------------! 
    799       DO jj = 1, jpj 
    800          DO ji = 1, jpi 
    801             zmsk00(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) ! 1 if ice, 0 if no ice 
    802          END DO 
    803       END DO 
    804  
    805867      ! --- ice-ocean, ice-atm. & ice-oceanbottom(landfast) stresses --- ! 
    806868      IF(  iom_use('utau_oi') .OR. iom_use('vtau_oi') .OR. iom_use('utau_ai') .OR. iom_use('vtau_ai') .OR. & 
     
    821883      IF( iom_use('icediv') )   CALL iom_put( 'icediv' , pdivu_i  * zmsk00 )   ! divergence 
    822884      IF( iom_use('iceshe') )   CALL iom_put( 'iceshe' , pshear_i * zmsk00 )   ! shear 
     885      IF( iom_use('icedlt') )   CALL iom_put( 'icedlt' , pdelta_i * zmsk00 )   ! delta 
    823886      IF( iom_use('icestr') )   CALL iom_put( 'icestr' , strength * zmsk00 )   ! strength 
    824887 
    825       ! --- stress tensor --- ! 
    826       IF( iom_use('isig1') .OR. iom_use('isig2') .OR. iom_use('isig3') .OR. iom_use('normstr') .OR. iom_use('sheastr') ) THEN 
     888      ! --- Stress tensor invariants (SIMIP diags) --- ! 
     889      IF( iom_use('normstr') .OR. iom_use('sheastr') ) THEN 
    827890         ! 
    828          ALLOCATE( zsig1(jpi,jpj) , zsig2(jpi,jpj) , zsig3(jpi,jpj) ) 
     891         ALLOCATE( zsig_I(jpi,jpj) , zsig_II(jpi,jpj) ) 
    829892         !          
    830          DO jj = 2, jpjm1 
    831             DO ji = 2, jpim1 
    832                zdum1 = ( zmsk00(ji-1,jj) * pstress12_i(ji-1,jj) + zmsk00(ji  ,jj-1) * pstress12_i(ji  ,jj-1) +  &  ! stress12_i at T-point 
    833                   &      zmsk00(ji  ,jj) * pstress12_i(ji  ,jj) + zmsk00(ji-1,jj-1) * pstress12_i(ji-1,jj-1) )  & 
    834                   &    / MAX( 1._wp, zmsk00(ji-1,jj) + zmsk00(ji,jj-1) + zmsk00(ji,jj) + zmsk00(ji-1,jj-1) ) 
    835  
    836                zshear = SQRT( pstress2_i(ji,jj) * pstress2_i(ji,jj) + 4._wp * zdum1 * zdum1 ) ! shear stress   
    837  
    838                zdum2 = zmsk00(ji,jj) / MAX( 1._wp, strength(ji,jj) ) 
    839  
    840 !!               zsig1(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) + zshear ) ! principal stress (y-direction, see Hunke & Dukowicz 2002) 
    841 !!               zsig2(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) - zshear ) ! principal stress (x-direction, see Hunke & Dukowicz 2002) 
    842 !!               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 
    843 !!                                                                                                               ! (scheme converges if this value is ~1, see Bouillon et al 2009 (eq. 11)) 
    844                zsig1(ji,jj) = 0.5_wp * zdum2 * ( pstress1_i(ji,jj) )          ! compressive stress, see Bouillon et al. 2015 
    845                zsig2(ji,jj) = 0.5_wp * zdum2 * ( zshear )                     ! shear stress  
    846                zsig3(ji,jj) = zdum2**2 * ( ( pstress1_i(ji,jj) + strength(ji,jj) )**2 + ( rn_ecc * zshear )**2 ) 
     893         DO jj = 1, jpj 
     894            DO ji = 1, jpi 
     895             
     896               ! Ice stresses 
     897               ! sigma1, sigma2, sigma12 are some useful recombination of the stresses (Hunke and Dukowicz MWR 2002, Bouillon et al., OM2013) 
     898               ! These are NOT stress tensor components, neither stress invariants, neither stress principal components 
     899               ! I know, this can be confusing... 
     900               zfac             =   strength(ji,jj) / ( pdelta_i(ji,jj) + rn_creepl )  
     901               zsig1            =   zfac * ( pdivu_i(ji,jj) - pdelta_i(ji,jj) ) 
     902               zsig2            =   zfac * z1_ecc2 * zten_i(ji,jj) 
     903               zsig12           =   zfac * z1_ecc2 * pshear_i(ji,jj) 
     904                
     905               ! Stress invariants (sigma_I, sigma_II, Coon 1974, Feltham 2008) 
     906               zsig_I (ji,jj)   =   zsig1 * 0.5_wp                                           ! 1st stress invariant, aka average normal stress, aka negative pressure 
     907               zsig_II(ji,jj)   =   SQRT ( MAX( 0._wp, zsig2 * zsig2 * 0.25_wp + zsig12 ) )  ! 2nd  ''       '', aka maximum shear stress 
     908                
    847909            END DO 
    848          END DO 
    849          CALL lbc_lnk_multi( 'icedyn_rhg_eap', zsig1, 'T', 1., zsig2, 'T', 1., zsig3, 'T', 1. ) 
     910         END DO          
    850911         ! 
    851          CALL iom_put( 'isig1' , zsig1 ) 
    852          CALL iom_put( 'isig2' , zsig2 ) 
    853          CALL iom_put( 'isig3' , zsig3 ) 
     912         ! Stress tensor invariants (normal and shear stress N/m) - SIMIP diags - definitions following Coon (1974) and Feltham (2008) 
     913         IF( iom_use('normstr') )   CALL iom_put( 'normstr', zsig_I (:,:) * zmsk00(:,:) ) ! Normal stress 
     914         IF( iom_use('sheastr') )   CALL iom_put( 'sheastr', zsig_II(:,:) * zmsk00(:,:) ) ! Maximum shear stress 
     915          
     916         DEALLOCATE ( zsig_I, zsig_II ) 
     917          
     918      ENDIF 
     919 
     920      ! --- Normalized stress tensor principal components --- ! 
     921      ! This are used to plot the normalized yield curve, see Lemieux & Dupont, 2020 
     922      ! Recommendation 1 : we use ice strength, not replacement pressure 
     923      ! Recommendation 2 : need to use deformations at PREVIOUS iterate for viscosities 
     924      IF( iom_use('sig1_pnorm') .OR. iom_use('sig2_pnorm') ) THEN 
    854925         ! 
    855          ! Stress tensor invariants (normal and shear stress N/m) 
    856          IF( iom_use('normstr') )   CALL iom_put( 'normstr' ,       ( zs1(:,:) + zs2(:,:) )                       * zmsk00(:,:) ) ! Normal stress 
    857          IF( iom_use('sheastr') )   CALL iom_put( 'sheastr' , SQRT( ( zs1(:,:) - zs2(:,:) )**2 + 4*zs12(:,:)**2 ) * zmsk00(:,:) ) ! Shear stress  
    858  
    859          DEALLOCATE( zsig1 , zsig2 , zsig3 ) 
     926         ALLOCATE( zsig1_p(jpi,jpj) , zsig2_p(jpi,jpj) , zsig_I(jpi,jpj) , zsig_II(jpi,jpj) )          
     927         !          
     928         DO jj = 1, jpj 
     929            DO ji = 1, jpi 
     930             
     931               ! Ice stresses computed with **viscosities** (delta, p/delta) at **previous** iterates  
     932               !                        and **deformations** at current iterates 
     933               !                        following Lemieux & Dupont (2020) 
     934               zfac             =   zp_delt(ji,jj) 
     935               zsig1            =   zfac * ( pdivu_i(ji,jj) - ( zdelta(ji,jj) + rn_creepl ) ) 
     936               zsig2            =   zfac * z1_ecc2 * zten_i(ji,jj) 
     937               zsig12           =   zfac * z1_ecc2 * pshear_i(ji,jj) 
     938                
     939               ! Stress invariants (sigma_I, sigma_II, Coon 1974, Feltham 2008), T-point 
     940               zsig_I(ji,jj)    =   zsig1 * 0.5_wp                                           ! 1st stress invariant, aka average normal stress, aka negative pressure 
     941               zsig_II(ji,jj)   =   SQRT ( MAX( 0._wp, zsig2 * zsig2 * 0.25_wp + zsig12 ) )  ! 2nd  ''       '', aka maximum shear stress 
     942       
     943               ! Normalized  principal stresses (used to display the ellipse) 
     944               z1_strength      =   1._wp / MAX( 1._wp, strength(ji,jj) ) 
     945               zsig1_p(ji,jj)   =   ( zsig_I(ji,jj) + zsig_II(ji,jj) ) * z1_strength 
     946               zsig2_p(ji,jj)   =   ( zsig_I(ji,jj) - zsig_II(ji,jj) ) * z1_strength 
     947            END DO 
     948         END DO                
     949         ! 
     950         CALL iom_put( 'sig1_pnorm' , zsig1_p )  
     951         CALL iom_put( 'sig2_pnorm' , zsig2_p )  
     952       
     953         DEALLOCATE( zsig1_p , zsig2_p , zsig_I, zsig_II ) 
     954          
    860955      ENDIF 
    861956 
     
    9311026      ENDIF 
    9321027      ! 
     1028      ! --- convergence tests --- ! 
     1029      IF( nn_rhg_chkcvg == 1 .OR. nn_rhg_chkcvg == 2 ) THEN 
     1030         IF( iom_use('uice_cvg') ) THEN 
     1031            IF( ln_aEVP ) THEN   ! output: beta * ( u(t=nn_nevp) - u(t=nn_nevp-1) ) 
     1032               CALL iom_put( 'uice_cvg', MAX( ABS( u_ice(:,:) - zu_ice(:,:) ) * zbeta(:,:) * umask(:,:,1) , & 
     1033                  &                           ABS( v_ice(:,:) - zv_ice(:,:) ) * zbeta(:,:) * vmask(:,:,1) ) * zmsk15(:,:) ) 
     1034            ELSE                 ! output: nn_nevp * ( u(t=nn_nevp) - u(t=nn_nevp-1) ) 
     1035               CALL iom_put( 'uice_cvg', REAL( nn_nevp ) * MAX( ABS( u_ice(:,:) - zu_ice(:,:) ) * umask(:,:,1) , & 
     1036                  &                                             ABS( v_ice(:,:) - zv_ice(:,:) ) * vmask(:,:,1) ) * zmsk15(:,:) ) 
     1037            ENDIF 
     1038         ENDIF 
     1039      ENDIF       
     1040      ! 
     1041      DEALLOCATE( zmsk00, zmsk15 ) 
     1042      ! 
    9331043   END SUBROUTINE ice_dyn_rhg_eap 
    9341044 
    935    SUBROUTINE update_stress_rdg (ksub, kndte, pdivu, ptension, & 
    936                                  pshear, pa11, pa12, & 
    937                                  pstressp,  pstressm, & 
    938                                  pstress12, strength, & 
    939                                  palphar, palphas) 
     1045    
     1046   SUBROUTINE rhg_cvg( kt, kiter, kitermax, pu, pv, pub, pvb ) 
     1047      !!---------------------------------------------------------------------- 
     1048      !!                    ***  ROUTINE rhg_cvg  *** 
     1049      !!                      
     1050      !! ** Purpose :   check convergence of oce rheology 
     1051      !! 
     1052      !! ** Method  :   create a file ice_cvg.nc containing the convergence of ice velocity 
     1053      !!                during the sub timestepping of rheology so as: 
     1054      !!                  uice_cvg = MAX( u(t+1) - u(t) , v(t+1) - v(t) ) 
     1055      !!                This routine is called every sub-iteration, so it is cpu expensive 
     1056      !! 
     1057      !! ** Note    :   for the first sub-iteration, uice_cvg is set to 0 (too large otherwise)    
     1058      !!---------------------------------------------------------------------- 
     1059      INTEGER ,                 INTENT(in) ::   kt, kiter, kitermax       ! ocean time-step index 
     1060      REAL(wp), DIMENSION(:,:), INTENT(in) ::   pu, pv, pub, pvb          ! now and before velocities 
     1061      !! 
     1062      INTEGER           ::   it, idtime, istatus 
     1063      INTEGER           ::   ji, jj          ! dummy loop indices 
     1064      REAL(wp)          ::   zresm           ! local real  
     1065      CHARACTER(len=20) ::   clname 
     1066      REAL(wp), DIMENSION(jpi,jpj) ::   zres           ! check convergence 
     1067      !!---------------------------------------------------------------------- 
     1068 
     1069      ! create file 
     1070      IF( kt == nit000 .AND. kiter == 1 ) THEN 
     1071         ! 
     1072         IF( lwp ) THEN 
     1073            WRITE(numout,*) 
     1074            WRITE(numout,*) 'rhg_cvg : ice rheology convergence control' 
     1075            WRITE(numout,*) '~~~~~~~' 
     1076         ENDIF 
     1077         ! 
     1078         IF( lwm ) THEN 
     1079            clname = 'ice_cvg.nc' 
     1080            IF( .NOT. Agrif_Root() )   clname = TRIM(Agrif_CFixed())//"_"//TRIM(clname) 
     1081            istatus = NF90_CREATE( TRIM(clname), NF90_CLOBBER, ncvgid ) 
     1082            istatus = NF90_DEF_DIM( ncvgid, 'time'  , NF90_UNLIMITED, idtime ) 
     1083            istatus = NF90_DEF_VAR( ncvgid, 'uice_cvg', NF90_DOUBLE   , (/ idtime /), nvarid ) 
     1084            istatus = NF90_ENDDEF(ncvgid) 
     1085         ENDIF 
     1086         ! 
     1087      ENDIF 
     1088 
     1089      ! time 
     1090      it = ( kt - 1 ) * kitermax + kiter 
     1091       
     1092      ! convergence 
     1093      IF( kiter == 1 ) THEN ! remove the first iteration for calculations of convergence (always very large) 
     1094         zresm = 0._wp 
     1095      ELSE 
     1096         DO jj = 1, jpj 
     1097            DO ji = 1, jpi 
     1098               zres(ji,jj) = MAX( ABS( pu(ji,jj) - pub(ji,jj) ) * umask(ji,jj,1), & 
     1099                  &               ABS( pv(ji,jj) - pvb(ji,jj) ) * vmask(ji,jj,1) ) * zmsk15(ji,jj) 
     1100            END DO 
     1101         END DO 
     1102         zresm = MAXVAL( zres ) 
     1103         CALL mpp_max( 'icedyn_rhg_evp', zresm )   ! max over the global domain 
     1104      ENDIF 
     1105 
     1106      IF( lwm ) THEN 
     1107         ! write variables 
     1108         istatus = NF90_PUT_VAR( ncvgid, nvarid, (/zresm/), (/it/), (/1/) ) 
     1109         ! close file 
     1110         IF( kt == nitend )   istatus = NF90_CLOSE(ncvgid) 
     1111      ENDIF 
     1112       
     1113   END SUBROUTINE rhg_cvg 
     1114 
     1115 
     1116   SUBROUTINE update_stress_rdg( ksub, kndte, pdivu, ptension, pshear, pa11, pa12, & 
     1117      &                          pstressp,  pstressm, pstress12, pstrength, palphar, palphas ) 
    9401118      !!--------------------------------------------------------------------- 
    9411119      !!                   ***  SUBROUTINE update_stress_rdg  *** 
     
    9451123      !!--------------------------------------------------------------------- 
    9461124      INTEGER,  INTENT(in   ) ::   ksub, kndte 
    947       REAL(wp), INTENT(in   ) ::   strength 
     1125      REAL(wp), INTENT(in   ) ::   pstrength 
    9481126      REAL(wp), INTENT(in   ) ::   pdivu, ptension, pshear 
    9491127      REAL(wp), INTENT(in   ) ::   pa11, pa12 
     
    9921170      IF((ABS(pa11 - za22) > rsmall).OR.(ABS(pa12) > rsmall)) THEN       
    9931171         zAngle_denom_gamma = 1._wp/sqrt( ( pa11 - za22 )*( pa11 - za22) + & 
    994                              4._wp*pa12*pa12 ) 
     1172                              4._wp*pa12*pa12 ) 
    9951173    
    9961174         zQ11Q11 = 0.5_wp + ( pa11 - za22 )*0.5_wp*zAngle_denom_gamma   !Cos^2  
     
    10671245      ! % range in kx 
    10681246      kx  = int((zx-rpi*0.25_wp-rpi)*zinvdx) + 1 
    1069       zkxw = kx - (zx-rpi*0.25_wp-rpi)*zinvdx  
     1247      !!clem kx  = MAX( 1, MIN( nx_yield-1, INT((zx-rpi*0.25_wp-rpi)*zinvdx) + 1  ) ) 
     1248      zkxw = kx - (zx-rpi*0.25_wp-rpi)*zinvdx   
    10701249       
    10711250      ky  = int(zy*zinvdy) + 1 
     1251      !!clem ky  = MAX( 1, MIN( ny_yield-1, INT(zy*zinvdy) + 1 ) ) 
    10721252      kyw = ky - zy*zinvdy  
    10731253       
    10741254      ka  = int((zatempprime-0.5_wp)*zinvda) + 1 
     1255      !!clem ka  = MAX( 1, MIN( na_yield-1, INT((zatempprime-0.5_wp)*zinvda) + 1 ) ) 
    10751256      kaw = ka - (zatempprime-0.5_wp)*zinvda 
    10761257       
    10771258      ! % Determine sigma_r(A1,Zeta,y) and sigma_s (see Section A1 of Tsamados 2013) 
    1078       zstemp11r =  zkxw   * kyw         * kaw         * s11r(kx  ,ky  ,ka  ) & 
    1079         & + (1._wp-zkxw) * kyw         * kaw         * s11r(kx+1,ky  ,ka  ) & 
    1080         & + zkxw         * (1._wp-kyw) * kaw         * s11r(kx  ,ky+1,ka  ) & 
    1081         & + zkxw         * kyw         * (1._wp-kaw) * s11r(kx  ,ky  ,ka+1) & 
    1082         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s11r(kx+1,ky+1,ka  ) & 
    1083         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s11r(kx+1,ky  ,ka+1) & 
    1084         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s11r(kx  ,ky+1,ka+1) & 
    1085         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s11r(kx+1,ky+1,ka+1) 
    1086       zstemp12r =  zkxw   * kyw         * kaw         * s12r(kx  ,ky  ,ka  ) & 
    1087         & + (1._wp-zkxw) * kyw         * kaw         * s12r(kx+1,ky  ,ka  ) & 
    1088         & + zkxw         * (1._wp-kyw) * kaw         * s12r(kx  ,ky+1,ka  ) & 
    1089         & + zkxw         * kyw         * (1._wp-kaw) * s12r(kx  ,ky  ,ka+1) & 
    1090         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s12r(kx+1,ky+1,ka  ) & 
    1091         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s12r(kx+1,ky  ,ka+1) & 
    1092         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s12r(kx  ,ky+1,ka+1) & 
    1093         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s12r(kx+1,ky+1,ka+1) 
    1094       zstemp22r = zkxw    * kyw         * kaw         * s22r(kx  ,ky  ,ka  ) & 
    1095         & + (1._wp-zkxw) * kyw         * kaw         * s22r(kx+1,ky  ,ka  ) & 
    1096         & + zkxw         * (1._wp-kyw) * kaw         * s22r(kx  ,ky+1,ka  ) & 
    1097         & + zkxw         * kyw         * (1._wp-kaw) * s22r(kx  ,ky  ,ka+1) & 
    1098         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s22r(kx+1,ky+1,ka  ) & 
    1099         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s22r(kx+1,ky  ,ka+1) & 
    1100         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s22r(kx  ,ky+1,ka+1) & 
    1101         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s22r(kx+1,ky+1,ka+1) 
     1259!!$      zstemp11r =  zkxw  * kyw         * kaw         * s11r(kx  ,ky  ,ka  ) & 
     1260!!$        & + (1._wp-zkxw) * kyw         * kaw         * s11r(kx+1,ky  ,ka  ) & 
     1261!!$        & + zkxw         * (1._wp-kyw) * kaw         * s11r(kx  ,ky+1,ka  ) & 
     1262!!$        & + zkxw         * kyw         * (1._wp-kaw) * s11r(kx  ,ky  ,ka+1) & 
     1263!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s11r(kx+1,ky+1,ka  ) & 
     1264!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s11r(kx+1,ky  ,ka+1) & 
     1265!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s11r(kx  ,ky+1,ka+1) & 
     1266!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s11r(kx+1,ky+1,ka+1) 
     1267!!$      zstemp12r =  zkxw  * kyw         * kaw         * s12r(kx  ,ky  ,ka  ) & 
     1268!!$        & + (1._wp-zkxw) * kyw         * kaw         * s12r(kx+1,ky  ,ka  ) & 
     1269!!$        & + zkxw         * (1._wp-kyw) * kaw         * s12r(kx  ,ky+1,ka  ) & 
     1270!!$        & + zkxw         * kyw         * (1._wp-kaw) * s12r(kx  ,ky  ,ka+1) & 
     1271!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s12r(kx+1,ky+1,ka  ) & 
     1272!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s12r(kx+1,ky  ,ka+1) & 
     1273!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s12r(kx  ,ky+1,ka+1) & 
     1274!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s12r(kx+1,ky+1,ka+1) 
     1275!!$      zstemp22r =  zkxw  * kyw         * kaw         * s22r(kx  ,ky  ,ka  ) & 
     1276!!$        & + (1._wp-zkxw) * kyw         * kaw         * s22r(kx+1,ky  ,ka  ) & 
     1277!!$        & + zkxw         * (1._wp-kyw) * kaw         * s22r(kx  ,ky+1,ka  ) & 
     1278!!$        & + zkxw         * kyw         * (1._wp-kaw) * s22r(kx  ,ky  ,ka+1) & 
     1279!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s22r(kx+1,ky+1,ka  ) & 
     1280!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s22r(kx+1,ky  ,ka+1) & 
     1281!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s22r(kx  ,ky+1,ka+1) & 
     1282!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s22r(kx+1,ky+1,ka+1) 
     1283!!$       
     1284!!$      zstemp11s =  zkxw  * kyw         * kaw         * s11s(kx  ,ky  ,ka  ) & 
     1285!!$        & + (1._wp-zkxw) * kyw         * kaw         * s11s(kx+1,ky  ,ka  ) & 
     1286!!$        & + zkxw         * (1._wp-kyw) * kaw         * s11s(kx  ,ky+1,ka  ) & 
     1287!!$        & + zkxw         * kyw         * (1._wp-kaw) * s11s(kx  ,ky  ,ka+1) & 
     1288!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s11s(kx+1,ky+1,ka  ) & 
     1289!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s11s(kx+1,ky  ,ka+1) & 
     1290!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s11s(kx  ,ky+1,ka+1) & 
     1291!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s11s(kx+1,ky+1,ka+1) 
     1292!!$      zstemp12s =  zkxw  * kyw         * kaw         * s12s(kx  ,ky  ,ka  ) & 
     1293!!$        & + (1._wp-zkxw) * kyw         * kaw         * s12s(kx+1,ky  ,ka  ) & 
     1294!!$        & + zkxw         * (1._wp-kyw) * kaw         * s12s(kx  ,ky+1,ka  ) & 
     1295!!$        & + zkxw         * kyw         * (1._wp-kaw) * s12s(kx  ,ky  ,ka+1) & 
     1296!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s12s(kx+1,ky+1,ka  ) & 
     1297!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s12s(kx+1,ky  ,ka+1) & 
     1298!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s12s(kx  ,ky+1,ka+1) & 
     1299!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s12s(kx+1,ky+1,ka+1) 
     1300!!$      zstemp22s =  zkxw  * kyw         * kaw         * s22s(kx  ,ky  ,ka  ) & 
     1301!!$        & + (1._wp-zkxw) * kyw         * kaw         * s22s(kx+1,ky  ,ka  ) & 
     1302!!$        & + zkxw         * (1._wp-kyw) * kaw         * s22s(kx  ,ky+1,ka  ) & 
     1303!!$        & + zkxw         * kyw         * (1._wp-kaw) * s22s(kx  ,ky  ,ka+1) & 
     1304!!$        & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s22s(kx+1,ky+1,ka  ) & 
     1305!!$        & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s22s(kx+1,ky  ,ka+1) & 
     1306!!$        & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s22s(kx  ,ky+1,ka+1) & 
     1307!!$        & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s22s(kx+1,ky+1,ka+1) 
     1308 
     1309      zstemp11r = s11r(kx,ky,ka) 
     1310      zstemp12r = s12r(kx,ky,ka) 
     1311      zstemp22r = s22r(kx,ky,ka) 
     1312      zstemp11s = s11s(kx,ky,ka) 
     1313      zstemp12s = s12s(kx,ky,ka) 
     1314      zstemp22s = s22s(kx,ky,ka) 
    11021315       
    1103       zstemp11s =  zkxw   * kyw         * kaw         * s11s(kx  ,ky  ,ka  ) & 
    1104         & + (1._wp-zkxw) * kyw         * kaw         * s11s(kx+1,ky  ,ka  ) & 
    1105         & + zkxw         * (1._wp-kyw) * kaw         * s11s(kx  ,ky+1,ka  ) & 
    1106         & + zkxw         * kyw         * (1._wp-kaw) * s11s(kx  ,ky  ,ka+1) & 
    1107         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s11s(kx+1,ky+1,ka  ) & 
    1108         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s11s(kx+1,ky  ,ka+1) & 
    1109         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s11s(kx  ,ky+1,ka+1) & 
    1110         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s11s(kx+1,ky+1,ka+1) 
    1111       zstemp12s =  zkxw   * kyw         * kaw         * s12s(kx  ,ky  ,ka  ) & 
    1112         & + (1._wp-zkxw) * kyw         * kaw         * s12s(kx+1,ky  ,ka  ) & 
    1113         & + zkxw         * (1._wp-kyw) * kaw         * s12s(kx  ,ky+1,ka  ) & 
    1114         & + zkxw         * kyw         * (1._wp-kaw) * s12s(kx  ,ky  ,ka+1) & 
    1115         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s12s(kx+1,ky+1,ka  ) & 
    1116         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s12s(kx+1,ky  ,ka+1) & 
    1117         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s12s(kx  ,ky+1,ka+1) & 
    1118         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s12s(kx+1,ky+1,ka+1) 
    1119       zstemp22s =  zkxw   * kyw         * kaw         * s22s(kx  ,ky  ,ka  ) & 
    1120         & + (1._wp-zkxw) * kyw         * kaw         * s22s(kx+1,ky  ,ka  ) & 
    1121         & + zkxw         * (1._wp-kyw) * kaw         * s22s(kx  ,ky+1,ka  ) & 
    1122         & + zkxw         * kyw         * (1._wp-kaw) * s22s(kx  ,ky  ,ka+1) & 
    1123         & + (1._wp-zkxw) * (1._wp-kyw) * kaw         * s22s(kx+1,ky+1,ka  ) & 
    1124         & + (1._wp-zkxw) * kyw         * (1._wp-kaw) * s22s(kx+1,ky  ,ka+1) & 
    1125         & + zkxw         * (1._wp-kyw) * (1._wp-kaw) * s22s(kx  ,ky+1,ka+1) & 
    1126         & + (1._wp-zkxw) * (1._wp-kyw) * (1._wp-kaw) * s22s(kx+1,ky+1,ka+1) 
    1127                     
     1316       
    11281317      ! Calculate mean ice stress over a collection of floes (Equation 3 in 
    11291318      ! Tsamados 2013) 
    11301319 
    1131       zsig11  = strength*(zstemp11r + kfriction*zstemp11s) * zinvsin 
    1132       zsig12  = strength*(zstemp12r + kfriction*zstemp12s) * zinvsin 
    1133       zsig22  = strength*(zstemp22r + kfriction*zstemp22s) * zinvsin 
     1320      zsig11  = pstrength*(zstemp11r + kfriction*zstemp11s) * zinvsin 
     1321      zsig12  = pstrength*(zstemp12r + kfriction*zstemp12s) * zinvsin 
     1322      zsig22  = pstrength*(zstemp22r + kfriction*zstemp22s) * zinvsin 
    11341323 
    11351324      !WRITE(numout,*) 'principal axis stress inside loop', sig11, sig12, sig22 
     
    11381327 
    11391328      ! Update stress 
    1140       zsgprm11 = zQ11Q11*zsig11 + zQ12Q12*zsig22 -        2._wp*zQ11Q12 *zsig12 
     1329      zsgprm11 = zQ11Q11*zsig11 + zQ12Q12*zsig22 -      2._wp*zQ11Q12 *zsig12 
    11411330      zsgprm12 = zQ11Q12*zsig11 - zQ11Q12*zsig22 + (zQ11Q11 - zQ12Q12)*zsig12 
    1142       zsgprm22 = zQ12Q12*zsig11 + zQ11Q11*zsig22 +        2._wp*zQ11Q12 *zsig12 
     1331      zsgprm22 = zQ12Q12*zsig11 + zQ11Q11*zsig22 +      2._wp*zQ11Q12 *zsig12 
    11431332 
    11441333      pstressp  = zsgprm11 + zsgprm22 
     
    11501339      IF (ksub == kndte) THEN 
    11511340         zrotstemp11r = zQ11Q11*zstemp11r - 2._wp*zQ11Q12* zstemp12r & 
    1152                      + zQ12Q12*zstemp22r 
    1153          zrotstemp12r = zQ11Q11*zstemp12r +    zQ11Q12*(zstemp11r-zstemp22r) & 
    1154                      - zQ12Q12*zstemp12r 
     1341                      + zQ12Q12*zstemp22r 
     1342         zrotstemp12r = zQ11Q11*zstemp12r +       zQ11Q12*(zstemp11r-zstemp22r) & 
     1343                      - zQ12Q12*zstemp12r 
    11551344         zrotstemp22r = zQ12Q12*zstemp11r + 2._wp*zQ11Q12* zstemp12r &  
    1156                      + zQ11Q11*zstemp22r 
     1345                      + zQ11Q11*zstemp22r 
    11571346 
    11581347         zrotstemp11s = zQ11Q11*zstemp11s - 2._wp*zQ11Q12* zstemp12s & 
    1159                      + zQ12Q12*zstemp22s 
    1160          zrotstemp12s = zQ11Q11*zstemp12s +    zQ11Q12*(zstemp11s-zstemp22s) & 
    1161                      - zQ12Q12*zstemp12s 
     1348                      + zQ12Q12*zstemp22s 
     1349         zrotstemp12s = zQ11Q11*zstemp12s +       zQ11Q12*(zstemp11s-zstemp22s) & 
     1350                      - zQ12Q12*zstemp12s 
    11621351         zrotstemp22s = zQ12Q12*zstemp11s + 2._wp*zQ11Q12* zstemp12s &  
    1163                      + zQ11Q11*zstemp22s 
     1352                      + zQ11Q11*zstemp22s 
    11641353 
    11651354         palphar =  zrotstemp11r*zdtemp11 + 2._wp*zrotstemp12r*zdtemp12 & 
    1166                  + zrotstemp22r*zdtemp22 
     1355                  + zrotstemp22r*zdtemp22 
    11671356         palphas =  zrotstemp11s*zdtemp11 + 2._wp*zrotstemp12s*zdtemp12 & 
    1168                  + zrotstemp22s*zdtemp22 
     1357                  + zrotstemp22s*zdtemp22 
    11691358      ENDIF 
    11701359   END SUBROUTINE update_stress_rdg  
     
    11731362 
    11741363 
    1175    SUBROUTINE calc_ffrac (pstressp, pstressm, pstress12, & 
    1176                           pa11, pa12,                   & 
    1177                           pmresult11, pmresult12) 
     1364   SUBROUTINE calc_ffrac( pstressp, pstressm, pstress12, pa11, pa12, & 
     1365      &                   pmresult11, pmresult12 ) 
    11781366      !!--------------------------------------------------------------------- 
    11791367      !!                   ***  ROUTINE calc_ffrac  *** 
     
    11931381      REAL (wp) ::   zQ11, zQ12, zQ11Q11, zQ11Q12, zQ12Q12 
    11941382 
    1195       REAL (wp), PARAMETER ::   kfrac = 0.0001_wp   ! rate of fracture formation  
     1383!!$      REAL (wp), PARAMETER ::   kfrac = 0.0001_wp   ! rate of fracture formation  
     1384      REAL (wp), PARAMETER ::   kfrac = 1.e-3_wp   ! rate of fracture formation  
    11961385      REAL (wp), PARAMETER ::   threshold = 0.3_wp  ! critical confinement ratio  
    11971386      !!--------------------------------------------------------------- 
     
    12241413      ENDIF 
    12251414 
    1226       zsigma_1 = zQ11Q11*zsigma11 + 2.0_wp*zQ11Q12*zsigma12  & 
    1227               + zQ12Q12*zsigma22 ! S(1,1) 
    1228       zsigma_2 = zQ12Q12*zsigma11 - 2.0_wp*zQ11Q12*zsigma12  & 
    1229               + zQ11Q11*zsigma22 ! S(2,2) 
     1415      zsigma_1 = zQ11Q11*zsigma11 + 2.0_wp*zQ11Q12*zsigma12 + zQ12Q12*zsigma22 ! S(1,1) 
     1416      zsigma_2 = zQ12Q12*zsigma11 - 2.0_wp*zQ11Q12*zsigma12 + zQ11Q11*zsigma22 ! S(2,2) 
    12301417 
    12311418      ! Pure divergence 
     
    12381425      ! which leads to the loss of their shape, so we again model it through diffusion 
    12391426      ELSEIF ((zsigma_1 >= 0.0_wp).AND.(zsigma_2 < 0.0_wp))  THEN 
    1240          pmresult11 = kfrac * (pa11 - zQ12Q12) 
    1241          pmresult12 = kfrac * (pa12 + zQ11Q12) 
     1427         pmresult11 = - kfrac * (pa11 - zQ12Q12) 
     1428         pmresult12 = - kfrac * (pa12 + zQ11Q12) 
    12421429 
    12431430      ! Shear faulting 
     
    12461433         pmresult12 = 0.0_wp 
    12471434      ELSEIF ((zsigma_1 <= 0.0_wp).AND.(zsigma_1/zsigma_2 <= threshold)) THEN 
    1248          pmresult11 = kfrac * (pa11 - zQ12Q12) 
    1249          pmresult12 = kfrac * (pa12 + zQ11Q12) 
     1435         pmresult11 = - kfrac * (pa11 - zQ12Q12) 
     1436         pmresult12 = - kfrac * (pa12 + zQ11Q12) 
    12501437 
    12511438      ! Horizontal spalling 
     
    12781465      REAL(wp) ::   da, dx, dy, dp, dz, a1 
    12791466 
     1467      !!clem 
     1468      REAL(wp) ::   zw1, zw2, zfac, ztemp 
     1469      REAL(wp) ::   idx, idy, idz 
     1470 
    12801471      REAL(wp), PARAMETER           ::   eps6 = 1.0e-6_wp 
    12811472      !!---------------------------------------------------------------------- 
     
    12881479            id2 = iom_varid( numrir, 'stress2_i' , ldstop = .FALSE. ) 
    12891480            id3 = iom_varid( numrir, 'stress12_i', ldstop = .FALSE. ) 
    1290             id4 = iom_varid( numrir, 'aniso_11' , ldstop = .FALSE. ) 
    1291             id5 = iom_varid( numrir, 'aniso_12' , ldstop = .FALSE. ) 
     1481            id4 = iom_varid( numrir, 'aniso_11'  , ldstop = .FALSE. ) 
     1482            id5 = iom_varid( numrir, 'aniso_12'  , ldstop = .FALSE. ) 
    12921483            ! 
    12931484            IF( MIN( id1, id2, id3, id4, id5 ) > 0 ) THEN      ! fields exist 
     
    12951486               CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i  ) 
    12961487               CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i ) 
    1297                CALL iom_get( numrir, jpdom_autoglo, 'aniso_11' , aniso_11 ) 
    1298                CALL iom_get( numrir, jpdom_autoglo, 'aniso_12' , aniso_12 ) 
     1488               CALL iom_get( numrir, jpdom_autoglo, 'aniso_11'  , aniso_11  ) 
     1489               CALL iom_get( numrir, jpdom_autoglo, 'aniso_12'  , aniso_12  ) 
    12991490            ELSE                                     ! start rheology from rest 
    13001491               IF(lwp) WRITE(numout,*) 
     
    13031494               stress2_i (:,:) = 0._wp 
    13041495               stress12_i(:,:) = 0._wp 
    1305                aniso_11 (:,:) = 0.5_wp 
    1306                aniso_12 (:,:) = 0._wp 
     1496               aniso_11  (:,:) = 0.5_wp 
     1497               aniso_12  (:,:) = 0._wp 
    13071498            ENDIF 
    13081499         ELSE                                   !* Start from rest 
     
    13121503            stress2_i (:,:) = 0._wp 
    13131504            stress12_i(:,:) = 0._wp 
    1314             aniso_11 (:,:) = 0.5_wp 
    1315             aniso_12 (:,:) = 0._wp 
     1505            aniso_11  (:,:) = 0.5_wp 
     1506            aniso_12  (:,:) = 0._wp 
    13161507         ENDIF 
    13171508         ! 
    13181509 
    1319       da = 0.5_wp/real(na_yield-1,kind=wp) 
    1320       ainit = 0.5_wp - da 
    1321       dx = rpi/real(nx_yield-1,kind=wp) 
    1322       xinit = rpi + 0.25_wp*rpi - dx 
    1323       dz = rpi/real(nz,kind=wp) 
    1324       zinit = -rpi*0.5_wp 
    1325       dy = rpi/real(ny_yield-1,kind=wp) 
    1326       yinit = -dy 
    1327  
    1328       DO ia=1,na_yield 
    1329        DO ix=1,nx_yield 
    1330         DO iy=1,ny_yield 
    1331          s11r(ix,iy,ia) = 0._wp 
    1332          s12r(ix,iy,ia) = 0._wp 
    1333          s22r(ix,iy,ia) = 0._wp 
    1334          s11s(ix,iy,ia) = 0._wp 
    1335          s12s(ix,iy,ia) = 0._wp 
    1336          s22s(ix,iy,ia) = 0._wp 
    1337          IF (ia <= na_yield-1) THEN 
    1338           DO iz=1,nz 
    1339           s11r(ix,iy,ia) = s11r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1340            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1341            s11kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
    1342           s12r(ix,iy,ia) = s12r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1343            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1344            s12kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
    1345           s22r(ix,iy,ia) = s22r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1346            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1347            s22kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi)  
    1348           s11s(ix,iy,ia) = s11s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1349            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1350            s11ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
    1351           s12s(ix,iy,ia) = s12s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1352            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1353            s12ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
    1354           s22s(ix,iy,ia) = s22s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
    1355            exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
    1356            s22ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
    1357           ENDDO 
    1358           IF (abs(s11r(ix,iy,ia)) < eps6) s11r(ix,iy,ia) = 0._wp 
    1359           IF (abs(s12r(ix,iy,ia)) < eps6) s12r(ix,iy,ia) = 0._wp 
    1360           IF (abs(s22r(ix,iy,ia)) < eps6) s22r(ix,iy,ia) = 0._wp 
    1361           IF (abs(s11s(ix,iy,ia)) < eps6) s11s(ix,iy,ia) = 0._wp 
    1362           IF (abs(s12s(ix,iy,ia)) < eps6) s12s(ix,iy,ia) = 0._wp 
    1363           IF (abs(s22s(ix,iy,ia)) < eps6) s22s(ix,iy,ia) = 0._wp 
    1364          ELSE 
    1365           s11r(ix,iy,ia) = 0.5_wp*s11kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1366           s12r(ix,iy,ia) = 0.5_wp*s12kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1367           s22r(ix,iy,ia) = 0.5_wp*s22kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1368           s11s(ix,iy,ia) = 0.5_wp*s11ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1369           s12s(ix,iy,ia) = 0.5_wp*s12ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1370           s22s(ix,iy,ia) = 0.5_wp*s22ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
    1371           IF (abs(s11r(ix,iy,ia)) < eps6) s11r(ix,iy,ia) = 0._wp 
    1372           IF (abs(s12r(ix,iy,ia)) < eps6) s12r(ix,iy,ia) = 0._wp 
    1373           IF (abs(s22r(ix,iy,ia)) < eps6) s22r(ix,iy,ia) = 0._wp 
    1374           IF (abs(s11s(ix,iy,ia)) < eps6) s11s(ix,iy,ia) = 0._wp 
    1375           IF (abs(s12s(ix,iy,ia)) < eps6) s12s(ix,iy,ia) = 0._wp 
    1376           IF (abs(s22s(ix,iy,ia)) < eps6) s22s(ix,iy,ia) = 0._wp 
    1377          ENDIF 
    1378         ENDDO 
    1379        ENDDO 
    1380       ENDDO 
     1510         da = 0.5_wp/real(na_yield-1,kind=wp) 
     1511         ainit = 0.5_wp - da 
     1512         dx = rpi/real(nx_yield-1,kind=wp) 
     1513         xinit = rpi + 0.25_wp*rpi - dx 
     1514         dz = rpi/real(nz,kind=wp) 
     1515         zinit = -rpi*0.5_wp 
     1516         dy = rpi/real(ny_yield-1,kind=wp) 
     1517         yinit = -dy 
     1518 
     1519         s11r(:,:,:) = 0._wp 
     1520         s12r(:,:,:) = 0._wp 
     1521         s22r(:,:,:) = 0._wp 
     1522         s11s(:,:,:) = 0._wp 
     1523         s12s(:,:,:) = 0._wp 
     1524         s22s(:,:,:) = 0._wp 
     1525 
     1526!!$         DO ia=1,na_yield 
     1527!!$            DO ix=1,nx_yield 
     1528!!$               DO iy=1,ny_yield 
     1529!!$                  s11r(ix,iy,ia) = 0._wp 
     1530!!$                  s12r(ix,iy,ia) = 0._wp 
     1531!!$                  s22r(ix,iy,ia) = 0._wp 
     1532!!$                  s11s(ix,iy,ia) = 0._wp 
     1533!!$                  s12s(ix,iy,ia) = 0._wp 
     1534!!$                  s22s(ix,iy,ia) = 0._wp 
     1535!!$                  IF (ia <= na_yield-1) THEN 
     1536!!$                     DO iz=1,nz 
     1537!!$                        s11r(ix,iy,ia) = s11r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1538!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1539!!$                           s11kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
     1540!!$                        s12r(ix,iy,ia) = s12r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1541!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1542!!$                           s12kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
     1543!!$                        s22r(ix,iy,ia) = s22r(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1544!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1545!!$                           s22kr(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi)  
     1546!!$                        s11s(ix,iy,ia) = s11s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1547!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1548!!$                           s11ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
     1549!!$                        s12s(ix,iy,ia) = s12s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1550!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1551!!$                           s12ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
     1552!!$                        s22s(ix,iy,ia) = s22s(ix,iy,ia) + 1*w1(ainit+ia*da)* & 
     1553!!$                           exp(-w2(ainit+ia*da)*(zinit+iz*dz)*(zinit+iz*dz))* & 
     1554!!$                           s22ks(xinit+ix*dx,yinit+iy*dy,zinit+iz*dz)*dz/sin(2._wp*pphi) 
     1555!!$                     ENDDO 
     1556!!$                     IF (abs(s11r(ix,iy,ia)) < eps6) s11r(ix,iy,ia) = 0._wp 
     1557!!$                     IF (abs(s12r(ix,iy,ia)) < eps6) s12r(ix,iy,ia) = 0._wp 
     1558!!$                     IF (abs(s22r(ix,iy,ia)) < eps6) s22r(ix,iy,ia) = 0._wp 
     1559!!$                     IF (abs(s11s(ix,iy,ia)) < eps6) s11s(ix,iy,ia) = 0._wp 
     1560!!$                     IF (abs(s12s(ix,iy,ia)) < eps6) s12s(ix,iy,ia) = 0._wp 
     1561!!$                     IF (abs(s22s(ix,iy,ia)) < eps6) s22s(ix,iy,ia) = 0._wp 
     1562!!$                  ELSE 
     1563!!$                     s11r(ix,iy,ia) = 0.5_wp*s11kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1564!!$                     s12r(ix,iy,ia) = 0.5_wp*s12kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1565!!$                     s22r(ix,iy,ia) = 0.5_wp*s22kr(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1566!!$                     s11s(ix,iy,ia) = 0.5_wp*s11ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1567!!$                     s12s(ix,iy,ia) = 0.5_wp*s12ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1568!!$                     s22s(ix,iy,ia) = 0.5_wp*s22ks(xinit+ix*dx,yinit+iy*dy,0._wp)/sin(2._wp*pphi) 
     1569!!$                     IF (abs(s11r(ix,iy,ia)) < eps6) s11r(ix,iy,ia) = 0._wp 
     1570!!$                     IF (abs(s12r(ix,iy,ia)) < eps6) s12r(ix,iy,ia) = 0._wp 
     1571!!$                     IF (abs(s22r(ix,iy,ia)) < eps6) s22r(ix,iy,ia) = 0._wp 
     1572!!$                     IF (abs(s11s(ix,iy,ia)) < eps6) s11s(ix,iy,ia) = 0._wp 
     1573!!$                     IF (abs(s12s(ix,iy,ia)) < eps6) s12s(ix,iy,ia) = 0._wp 
     1574!!$                     IF (abs(s22s(ix,iy,ia)) < eps6) s22s(ix,iy,ia) = 0._wp 
     1575!!$                  ENDIF 
     1576!!$               ENDDO 
     1577!!$            ENDDO 
     1578!!$         ENDDO 
     1579 
     1580         !! faster but still very slow => to be improved          
     1581         zfac = dz/sin(2._wp*pphi) 
     1582         DO ia = 1, na_yield-1 
     1583            zw1 = w1(ainit+ia*da) 
     1584            zw2 = w2(ainit+ia*da) 
     1585            DO iz = 1, nz 
     1586               idz = zinit+iz*dz 
     1587               ztemp = zw1 * EXP(-zw2*(zinit+iz*dz)*(zinit+iz*dz)) 
     1588               DO iy = 1, ny_yield 
     1589                  idy = yinit+iy*dy 
     1590                  DO ix = 1, nx_yield 
     1591                     idx = xinit+ix*dx 
     1592                     s11r(ix,iy,ia) = s11r(ix,iy,ia) + ztemp * s11kr(idx,idy,idz)*zfac 
     1593                     s12r(ix,iy,ia) = s12r(ix,iy,ia) + ztemp * s12kr(idx,idy,idz)*zfac 
     1594                     s22r(ix,iy,ia) = s22r(ix,iy,ia) + ztemp * s22kr(idx,idy,idz)*zfac  
     1595                     s11s(ix,iy,ia) = s11s(ix,iy,ia) + ztemp * s11ks(idx,idy,idz)*zfac 
     1596                     s12s(ix,iy,ia) = s12s(ix,iy,ia) + ztemp * s12ks(idx,idy,idz)*zfac 
     1597                     s22s(ix,iy,ia) = s22s(ix,iy,ia) + ztemp * s22ks(idx,idy,idz)*zfac 
     1598                  END DO 
     1599               END DO 
     1600            END DO 
     1601         END DO 
     1602 
     1603         zfac = 1._wp/sin(2._wp*pphi) 
     1604         ia = na_yield 
     1605         DO iy = 1, ny_yield 
     1606            idy = yinit+iy*dy 
     1607            DO ix = 1, nx_yield 
     1608               idx = xinit+ix*dx                   
     1609               s11r(ix,iy,ia) = 0.5_wp*s11kr(idx,idy,0._wp)*zfac 
     1610               s12r(ix,iy,ia) = 0.5_wp*s12kr(idx,idy,0._wp)*zfac 
     1611               s22r(ix,iy,ia) = 0.5_wp*s22kr(idx,idy,0._wp)*zfac 
     1612               s11s(ix,iy,ia) = 0.5_wp*s11ks(idx,idy,0._wp)*zfac 
     1613               s12s(ix,iy,ia) = 0.5_wp*s12ks(idx,idy,0._wp)*zfac 
     1614               s22s(ix,iy,ia) = 0.5_wp*s22ks(idx,idy,0._wp)*zfac 
     1615            ENDDO 
     1616         ENDDO 
     1617         WHERE (ABS(s11r(:,:,:)) < eps6) s11r(:,:,:) = 0._wp 
     1618         WHERE (ABS(s12r(:,:,:)) < eps6) s12r(:,:,:) = 0._wp 
     1619         WHERE (ABS(s22r(:,:,:)) < eps6) s22r(:,:,:) = 0._wp 
     1620         WHERE (ABS(s11s(:,:,:)) < eps6) s11s(:,:,:) = 0._wp 
     1621         WHERE (ABS(s12s(:,:,:)) < eps6) s12s(:,:,:) = 0._wp 
     1622         WHERE (ABS(s22s(:,:,:)) < eps6) s22s(:,:,:) = 0._wp 
     1623 
    13811624 
    13821625      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
     
    13881631         CALL iom_rstput( iter, nitrst, numriw, 'stress2_i' , stress2_i  ) 
    13891632         CALL iom_rstput( iter, nitrst, numriw, 'stress12_i', stress12_i ) 
    1390          CALL iom_rstput( iter, nitrst, numriw, 'aniso_11' , aniso_11 ) 
    1391          CALL iom_rstput( iter, nitrst, numriw, 'aniso_12' , aniso_12 ) 
     1633         CALL iom_rstput( iter, nitrst, numriw, 'aniso_11'  , aniso_11  ) 
     1634         CALL iom_rstput( iter, nitrst, numriw, 'aniso_12'  , aniso_12  ) 
    13921635         ! 
    13931636      ENDIF 
     
    14041647      !!------------------------------------------------------------------- 
    14051648    
    1406       w1 = - 223.87569446_wp & 
    1407        &   + 2361.2198663_wp*pa & 
     1649      w1 = -   223.87569446_wp & 
     1650       &   +  2361.21986630_wp*pa & 
    14081651       &   - 10606.56079975_wp*pa*pa & 
    14091652       &   + 26315.50025642_wp*pa*pa*pa & 
     
    14111654       &   + 34397.72407466_wp*pa*pa*pa*pa*pa & 
    14121655       &   - 16789.98003081_wp*pa*pa*pa*pa*pa*pa & 
    1413        &   + 3495.82839237_wp*pa*pa*pa*pa*pa*pa*pa 
     1656       &   +  3495.82839237_wp*pa*pa*pa*pa*pa*pa*pa 
    14141657    
    14151658   END FUNCTION w1 
     
    14241667      !!------------------------------------------------------------------- 
    14251668    
    1426       w2 = - 6670.68911883_wp & 
    1427        &   + 70222.33061536_wp*pa & 
    1428        &   - 314871.71525448_wp*pa*pa & 
    1429        &   + 779570.02793492_wp*pa*pa*pa & 
     1669      w2 = -    6670.68911883_wp & 
     1670       &   +   70222.33061536_wp*pa & 
     1671       &   -  314871.71525448_wp*pa*pa & 
     1672       &   +  779570.02793492_wp*pa*pa*pa & 
    14301673       &   - 1151098.82436864_wp*pa*pa*pa*pa & 
    14311674       &   + 1013896.59464498_wp*pa*pa*pa*pa*pa & 
    1432        &   - 493379.44906738_wp*pa*pa*pa*pa*pa*pa & 
    1433        &   + 102356.551518_wp*pa*pa*pa*pa*pa*pa*pa 
     1675       &   -  493379.44906738_wp*pa*pa*pa*pa*pa*pa & 
     1676       &   +  102356.55151800_wp*pa*pa*pa*pa*pa*pa*pa 
    14341677    
    14351678   END FUNCTION w2 
     
    17892032   !!   Default option         Empty module           NO SI3 sea-ice model 
    17902033   !!---------------------------------------------------------------------- 
    1791  
    17922034#endif 
     2035 
    17932036   !!============================================================================== 
    17942037END MODULE icedyn_rhg_eap 
Note: See TracChangeset for help on using the changeset viewer.