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)