diff --git a/arch/CMCC/arch-X64_JUNO.fcm b/arch/CMCC/arch-X64_JUNO.fcm
new file mode 100644
index 0000000000000000000000000000000000000000..35f0c89a56fd68df7bb1622bf08f05f7f49f1794
--- /dev/null
+++ b/arch/CMCC/arch-X64_JUNO.fcm
@@ -0,0 +1,54 @@
+# mpi ifort compiler options for ZEUS cluster + XIOS
+#
+#
+# NCDF_INC    netcdf4 include file
+# NCDF_LIB    netcdf4 library
+# XIOS_INC    xios include file    (taken into accound only if key_xios is activated)
+# XIOS_LIB    xios library         (taken into accound only if key_xios is activated)
+#
+# CPP         Pre-processor
+# FC          Fortran compiler command
+# FCFLAGS     Fortran compiler flags
+# FFLAGS      Fortran 77 compiler flags
+# LD          linker
+# FPPFLAGS    pre-processing flags
+# LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries
+# AR          assembler
+# ARFLAGS     assembler flags
+# MK          make (usually GNU make)
+# USER_INC    complete list of include files
+# USER_LIB    complete list of libraries to pass to the linker
+# CC          C compiler used to compile conv for AGRIF
+# CFLAGS      compiler flags used with CC
+#
+# Note that:
+#  - unix variables "$..." are accpeted and will be evaluated before calling fcm.
+#  - fcm variables are starting with a % (and not a $)
+#
+
+# NETCDF, PNETCDF, HDF5  should be set automatically when loading modules on ZEUS cluster
+# User should set the path of xios compiled code (after r2134)
+#export XIOS=<path-to-xios>/xios
+# and load the same gcc version used to compile xios (e.g., module load gcc_9.1.0/9.1.0)
+
+%NCDF_INC            -I${NETCDF_C}/include -I${PARALLEL_NETCDF}/include
+%NCDF_LIB            -L${NETCDF_FORTRAN}/lib -lnetcdff -L${NETCDF_C}/lib -lnetcdf -L${PARALLEL_NETCDF}/lib -lpnetcdf
+%HDF5_INC            -I${HDF5}/include
+%HDF5_LIB            -L${HDF5}/lib -lhdf5_hl -lhdf5
+%XIOS_INC            -I${XIOS}/inc
+%XIOS_LIB            -L${XIOS}/lib -lxios
+
+%CPP                 cpp
+%FC                  mpiifort
+%FCFLAGS             -r8 -O3 -fp-model source -traceback -mkl=cluster -xSKYLAKE-AVX512 -qopt-zmm-usage=low -no-fma
+%FFLAGS              %FCFLAGS
+%LD                  mpiifort
+%FPPFLAGS            -P -traditional
+%LDFLAGS             -lstdc++ -lz -lgpfs
+%AR                  ar 
+%ARFLAGS             -r
+%MK                  gmake
+%USER_INC            %XIOS_INC %NCDF_INC %HDF5_INC
+%USER_LIB            %XIOS_LIB %NCDF_LIB %HDF5_LIB
+%CC                  icc
+%CFLAGS              -O0
diff --git a/arch/CMCC/arch-X64_JUNO_DEBUG.fcm b/arch/CMCC/arch-X64_JUNO_DEBUG.fcm
new file mode 100644
index 0000000000000000000000000000000000000000..34b4f2a80edf79f76715675901b09292a010b31a
--- /dev/null
+++ b/arch/CMCC/arch-X64_JUNO_DEBUG.fcm
@@ -0,0 +1,54 @@
+# mpi ifort compiler options for ZEUS cluster + XIOS
+#
+#
+# NCDF_INC    netcdf4 include file
+# NCDF_LIB    netcdf4 library
+# XIOS_INC    xios include file    (taken into accound only if key_xios is activated)
+# XIOS_LIB    xios library         (taken into accound only if key_xios is activated)
+#
+# CPP         Pre-processor
+# FC          Fortran compiler command
+# FCFLAGS     Fortran compiler flags
+# FFLAGS      Fortran 77 compiler flags
+# LD          linker
+# FPPFLAGS    pre-processing flags
+# LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries
+# AR          assembler
+# ARFLAGS     assembler flags
+# MK          make (usually GNU make)
+# USER_INC    complete list of include files
+# USER_LIB    complete list of libraries to pass to the linker
+# CC          C compiler used to compile conv for AGRIF
+# CFLAGS      compiler flags used with CC
+#
+# Note that:
+#  - unix variables "$..." are accpeted and will be evaluated before calling fcm.
+#  - fcm variables are starting with a % (and not a $)
+#
+
+# NETCDF, PNETCDF, HDF5  should be set automatically when loading modules on ZEUS cluster
+# User should set the path of xios compiled code (after r2134)
+#export XIOS=<path-to-xios>/xios
+# and load the same gcc version used to compile xios (e.g., module load gcc_9.1.0/9.1.0)
+
+%NCDF_INC            -I${NETCDF_C}/include -I${PARALLEL_NETCDF}/include
+%NCDF_LIB            -L${NETCDF_FORTRAN}/lib -lnetcdff -L${NETCDF_C}/lib -lnetcdf -L${PARALLEL_NETCDF}/lib -lpnetcdf
+%HDF5_INC            -I${HDF5}/include
+%HDF5_LIB            -L${HDF5}/lib -lhdf5_hl -lhdf5
+%XIOS_INC            -I${XIOS}/inc
+%XIOS_LIB            -L${XIOS}/lib -lxios
+
+%CPP                 cpp
+%FC                  mpiifort
+%FCFLAGS             -r8 -O0 -fp-model source -traceback -mkl=cluster -xSKYLAKE-AVX512 -qopt-zmm-usage=low -no-fma -g -debug all -traceback -check all
+%FFLAGS              %FCFLAGS
+%LD                  mpiifort
+%FPPFLAGS            -P -traditional
+%LDFLAGS             -lstdc++ -lz -lgpfs
+%AR                  ar 
+%ARFLAGS             -r
+%MK                  gmake
+%USER_INC            %XIOS_INC %NCDF_INC %HDF5_INC
+%USER_LIB            %XIOS_LIB %NCDF_LIB %HDF5_LIB
+%CC                  icc
+%CFLAGS              -O0
diff --git a/src/OCE/ZDF/zdfphy.F90 b/src/OCE/ZDF/zdfphy.F90
index 9988073a3d1c9edf2531201526aa21653495ac6c..890e839f8ab5094cdc9dac7cedb4517120601fac 100644
--- a/src/OCE/ZDF/zdfphy.F90
+++ b/src/OCE/ZDF/zdfphy.F90
@@ -304,7 +304,7 @@ CONTAINS
       ENDIF
       !
       SELECT CASE ( nzdf_phy )                  !* Vertical eddy viscosity and diffusivity coefficients at w-points
-      CASE( np_RIC )   ;   CALL zdf_ric( kt,      Kmm, zsh2, avm_k, avt_k )    ! Richardson number dependent Kz
+      CASE( np_RIC )   ;   CALL zdf_ric( kt, Kbb, Kmm, avm_k, avt_k )          ! Richardson number dependent Kz
       CASE( np_TKE )   ;   CALL zdf_tke( kt, Kbb, Kmm, zsh2, avm_k, avt_k )    ! TKE closure scheme for Kz
       CASE( np_GLS )   ;   CALL zdf_gls( kt, Kbb, Kmm, zsh2, avm_k, avt_k )    ! GLS closure scheme for Kz
       CASE( np_OSM )   ;   CALL zdf_osm( kt, Kbb, Kmm, Krhs, avm_k, avt_k )    ! OSMOSIS closure scheme for Kz
diff --git a/src/OCE/ZDF/zdfric.F90 b/src/OCE/ZDF/zdfric.F90
index 655cf49cd9aa011a59cae2dba1d7a0e922caac5e..8d86bd14d1a37adb66b041ee3e64424d1e8ee3bd 100644
--- a/src/OCE/ZDF/zdfric.F90
+++ b/src/OCE/ZDF/zdfric.F90
@@ -106,7 +106,7 @@ CONTAINS
    END SUBROUTINE zdf_ric_init
 
 
-   SUBROUTINE zdf_ric( kt, Kmm, p_sh2, p_avm, p_avt )
+   SUBROUTINE zdf_ric( kt, Kbb, Kmm, p_avm, p_avt )
       !!----------------------------------------------------------------------
       !!                 ***  ROUTINE zdfric  ***
       !!
@@ -146,18 +146,22 @@ CONTAINS
       !!              PFJ Lermusiaux 2001.
       !!----------------------------------------------------------------------
       INTEGER                             , INTENT(in   ) ::   kt             ! ocean time-step
-      INTEGER                             , INTENT(in   ) ::   Kmm            ! ocean time level index
-      REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(in   ) ::   p_sh2          ! shear production term
+      INTEGER                             , INTENT(in   ) ::   Kmm , Kbb      ! ocean time level index
       REAL(wp), DIMENSION(:,:,:)          , INTENT(inout) ::   p_avm, p_avt   ! momentum and tracer Kz (w-points)
       !!
       INTEGER  ::   ji, jj, jk                  ! dummy loop indices
-      REAL(wp) ::   zcfRi, zav, zustar, zhek    ! local scalars
+      REAL(wp) ::   zcfRi, zav, zustar, zhek, zdku, zdkv, zwx    ! local scalars
       REAL(wp), DIMENSION(A2D(nn_hls)) ::   zh_ekm  ! 2D workspace
       !!----------------------------------------------------------------------
       !
       !                       !==  avm and avt = F(Richardson number)  ==!
       DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! coefficient = F(richardson number) (avm-weighted Ri)
-         zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) )  )
+         zdku = 0.5 / e3uw(ji,jj,jk,Kbb) * ( uu(ji-1,jj,jk-1,Kbb) + uu(ji,jj,jk-1,Kbb)   &
+              &                            - uu(ji-1,jj,jk,Kbb) - uu(ji,jj,jk,Kbb) ) * wumask(ji,jj,jk)
+         zdkv = 0.5 / e3vw(ji,jj,jk,Kbb) * ( vv(ji,jj-1,jk-1,Kbb) + vv(ji,jj,jk-1,Kbb)   &
+              &                            - vv(ji,jj-1,jk,Kbb) - vv(ji,jj,jk,Kbb) ) * wvmask(ji,jj,jk)
+         zwx =  zdku*zdku + zdkv*zdkv
+         zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , rn2(ji,jj,jk) / ( zwx + 1.e-20 ) )  )
          zav   = rn_avmri * zcfRi**nn_ric
          !                          ! avm and avt coefficients
          p_avm(ji,jj,jk) = MAX(  zav         , avmb(jk)  ) * wmask(ji,jj,jk)