diff --git a/arch/arch-osx_gfortran.fcm b/arch/arch-osx_gfortran.fcm index 3ce12293a13ecbb091d1f5a058dbd52369ea4576..ece845b947a53e4e57d1057e8c11ef30488d1809 100644 --- a/arch/arch-osx_gfortran.fcm +++ b/arch/arch-osx_gfortran.fcm @@ -35,8 +35,8 @@ %CPP cpp -Dkey_nosignedzero %FC mpif90 -%PROD_FCFLAGS -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -ffree-line-length-none -fallow-argument-mismatch -%DEBUG_FCFLAGS -fdefault-real-8 -O0 -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan +%PROD_FCFLAGS -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -ffree-line-length-none -fallow-argument-mismatch +%DEBUG_FCFLAGS -fdefault-real-8 -O0 -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan -fallow-argument-mismatch %FFLAGS %FCFLAGS %LD %FC %LDFLAGS diff --git a/src/OCE/DYN/dynspg_ts.F90 b/src/OCE/DYN/dynspg_ts.F90 index a1e78f536b0a2dc60ce56083135087ee249c02f2..bd40bf5409e9d9b034118816df9ad6f59fc5cf35 100644 --- a/src/OCE/DYN/dynspg_ts.F90 +++ b/src/OCE/DYN/dynspg_ts.F90 @@ -1247,16 +1247,16 @@ CONTAINS SELECT CASE( nn_e3f_typ ) !* ff_f/e3 at F-point CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_2D( 0, 0, 0, 0 ) - zwz(ji,jj) = ( ht(ji,jj+1) + ht(ji+1,jj+1) & - & + ht(ji,jj ) + ht(ji+1,jj ) ) * 0.25_wp + zwz(ji,jj) = ( ( ht(ji,jj+1) + ht(ji+1,jj+1) ) & ! need additional () for reproducibility around NP + & + ( ht(ji,jj ) + ht(ji+1,jj ) ) ) * 0.25_wp IF( zwz(ji,jj) /= 0._wp ) zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) END_2D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_2D( 0, 0, 0, 0 ) - zwz(ji,jj) = ( ht(ji,jj+1) + ht(ji+1,jj+1) & - & + ht(ji,jj ) + ht(ji+1,jj ) ) & - & / ( MAX(ssmask(ji,jj+1) + ssmask(ji+1,jj+1) & - & + ssmask(ji,jj ) + ssmask(ji+1,jj ) , 1._wp ) ) + zwz(ji,jj) = ( ( ht(ji,jj+1) + ht(ji+1,jj+1) ) & ! need additional () for + & + ( ht(ji,jj ) + ht(ji+1,jj ) ) ) & ! reproducibility around NP + & / ( MAX( ssmask(ji,jj+1) + ssmask(ji+1,jj+1) & + & + ssmask(ji,jj ) + ssmask(ji+1,jj ), 1._wp ) ) IF( zwz(ji,jj) /= 0._wp ) zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) END_2D END SELECT @@ -1327,24 +1327,24 @@ CONTAINS ! CASE( np_ENS ) ! enstrophy conserving scheme (f-point) DO_2D( 0, 0, 0, 0 ) - zy1 = r1_8 * ( zhV(ji ,jj-1) + zhV(ji+1,jj-1) & - & + zhV(ji ,jj ) + zhV(ji+1,jj ) ) * r1_e1u(ji,jj) - zx1 = - r1_8 * ( zhU(ji-1,jj ) + zhU(ji-1,jj+1) & - & + zhU(ji ,jj ) + zhU(ji ,jj+1) ) * r1_e2v(ji,jj) + zy1 = r1_8 * ( ( zhV(ji ,jj-1) + zhV(ji+1,jj-1) ) & ! need additional () for + & + ( zhV(ji ,jj ) + zhV(ji+1,jj ) ) ) * r1_e1u(ji,jj) ! reproducibility around NP + zx1 = - r1_8 * ( ( zhU(ji-1,jj ) + zhU(ji-1,jj+1) ) & ! need additional () for + & + ( zhU(ji ,jj ) + zhU(ji ,jj+1) ) ) * r1_e2v(ji,jj) ! reproducibility around NP zu_trd(ji,jj) = zy1 * ( zwz(ji ,jj-1) + zwz(ji,jj) ) zv_trd(ji,jj) = zx1 * ( zwz(ji-1,jj ) + zwz(ji,jj) ) END_2D ! CASE( np_EET , np_EEN ) ! energy & enstrophy scheme (using e3t or e3f) DO_2D( 0, 0, 0, 0 ) - zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * ( ftne(ji,jj ) * zhV(ji ,jj ) & - & + ftnw(ji+1,jj) * zhV(ji+1,jj ) & - & + ftse(ji,jj ) * zhV(ji ,jj-1) & - & + ftsw(ji+1,jj) * zhV(ji+1,jj-1) ) - zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * ( ftsw(ji,jj+1) * zhU(ji-1,jj+1) & - & + ftse(ji,jj+1) * zhU(ji ,jj+1) & - & + ftnw(ji,jj ) * zhU(ji-1,jj ) & - & + ftne(ji,jj ) * zhU(ji ,jj ) ) + zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * ( ( ftne(ji,jj ) * zhV(ji ,jj ) & ! need additional () for + & + ftnw(ji+1,jj) * zhV(ji+1,jj ) ) & ! reproducibility around NP + & + ( ftse(ji,jj ) * zhV(ji ,jj-1) & + & + ftsw(ji+1,jj) * zhV(ji+1,jj-1) ) ) + zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * ( ( ftsw(ji,jj+1) * zhU(ji-1,jj+1) & + & + ftse(ji,jj+1) * zhU(ji ,jj+1) ) & + & + ( ftnw(ji,jj ) * zhU(ji-1,jj ) & + & + ftne(ji,jj ) * zhU(ji ,jj ) ) ) END_2D ! END SELECT diff --git a/src/OCE/DYN/dynvor.F90 b/src/OCE/DYN/dynvor.F90 index b7a84124a27df69f6ea82b1622683c7a2be8470b..4089c0b9f01d4ac21c9fac33b9f549f5d683109e 100644 --- a/src/OCE/DYN/dynvor.F90 +++ b/src/OCE/DYN/dynvor.F90 @@ -361,8 +361,8 @@ CONTAINS CASE ( np_RVO , np_CRV ) !* relative vorticity at f-point is used ALLOCATE( zwz(A2D(1)) ) DO_2D( 1, 1, 1, 1 ) - zwz(ji,jj) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj) = ( ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) ! NP repro END_2D IF( ln_dynvor_msk ) THEN ! mask relative vorticity DO_2D( 1, 1, 1, 1 ) @@ -380,8 +380,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 0, 1, 0, 1 ) - zwt(ji,jj) = r1_4 * ( zwz(ji-1,jj ) + zwz(ji,jj ) & - & + zwz(ji-1,jj-1) + zwz(ji,jj-1) ) & + zwt(ji,jj) = r1_4 * ( ( zwz(ji-1,jj ) + zwz(ji,jj ) ) & ! need additional () for + & + ( zwz(ji-1,jj-1) + zwz(ji,jj-1) ) ) & ! reproducibility around NP & * e1e2t(ji,jj)*e3t(ji,jj,jk,Kmm) END_2D CASE ( np_MET ) !* metric term @@ -392,8 +392,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 0, 1, 0, 1 ) - zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj ) + zwz(ji,jj ) & - & + zwz(ji-1,jj-1) + zwz(ji,jj-1) ) ) & + zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( ( zwz(ji-1,jj ) + zwz(ji,jj ) ) & ! need additional () for + & + ( zwz(ji-1,jj-1) + zwz(ji,jj-1) ) ) ) & ! reproducibility around NP & * e1e2t(ji,jj)*e3t(ji,jj,jk,Kmm) END_2D CASE ( np_CME ) !* Coriolis + metric @@ -473,8 +473,8 @@ CONTAINS ALLOCATE( zwz(A2D(1),jpk) ) DO jk = 1, jpkm1 ! Horizontal slab DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - zwz(ji,jj,jk) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj,jk) = ( ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! need additional () for NP repro + & - ( e1u(ji,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) @@ -498,8 +498,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 0, 1, 0, 1 ) - zwt(ji,jj) = r1_4 * ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) & - & + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) & + zwt(ji,jj) = r1_4 * ( ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) ) & ! need additional () for + & + ( zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) ) & ! reproducibility around NP & * e1e2t(ji,jj)*e3t(ji,jj,jk,Kmm) END_2D CASE ( np_MET ) !* metric term @@ -510,8 +510,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 0, 1, 0, 1 ) - zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) & - & + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) ) & + zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) ) & ! need additional () for + & + ( zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) ) ) & ! reproducibility around NP & * e1e2t(ji,jj)*e3t(ji,jj,jk,Kmm) END_2D CASE ( np_CME ) !* Coriolis + metric @@ -596,8 +596,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 1, 0, 1, 0 ) - zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) ! NP repro END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity DO_2D( 1, 0, 1, 0 ) @@ -611,8 +611,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 1, 0, 1, 0 ) - zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj) = ff_f(ji,jj) + ( ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for NP repro + & - ( e1u(ji,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) DO_2D( 1, 0, 1, 0 ) @@ -636,22 +636,22 @@ CONTAINS SELECT CASE( nn_e3f_typ ) !== potential vorticity ==! CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_2D( 1, 0, 1, 0 ) - ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & - & + e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) IF( ze3f /= 0._wp ) THEN ; zwz(ji,jj) = zwz(ji,jj) * 4._wp / ze3f ELSE ; zwz(ji,jj) = 0._wp ENDIF END_2D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_2D( 1, 0, 1, 0 ) - ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & - & + e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) - zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & - & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) + zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & + & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) IF( ze3f /= 0._wp ) THEN ; zwz(ji,jj) = zwz(ji,jj) * zmsk / ze3f ELSE ; zwz(ji,jj) = 0._wp ENDIF @@ -728,8 +728,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 1, 0, 1, 0 ) - zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for NP repro + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity DO_2D( 1, 0, 1, 0 ) @@ -743,8 +743,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 1, 0, 1, 0 ) - zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) + zwz(ji,jj) = ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) &! add () for NP repro + & -( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) DO_2D( 1, 0, 1, 0 ) @@ -769,22 +769,22 @@ CONTAINS SELECT CASE( nn_e3f_typ ) !== potential vorticity ==! CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_2D( 1, 0, 1, 0 ) - ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & - & + e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) IF( ze3f /= 0._wp ) THEN ; zwz(ji,jj) = zwz(ji,jj) * 4._wp / ze3f ELSE ; zwz(ji,jj) = 0._wp ENDIF END_2D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_2D( 1, 0, 1, 0 ) - ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & - & + e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) - zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & - & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) + zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & + & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) IF( ze3f /= 0._wp ) THEN ; zwz(ji,jj) = zwz(ji,jj) * zmsk / ze3f ELSE ; zwz(ji,jj) = 0._wp ENDIF @@ -799,10 +799,10 @@ CONTAINS ! ! !== compute and add the vorticity term trend =! DO_2D( 0, 0, 0, 0 ) - zuav = r1_8 * r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & - & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) - zvau =-r1_8 * r1_e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) & - & + zwx(ji ,jj ) + zwx(ji ,jj+1) ) + zuav = r1_8 * r1_e1u(ji,jj) * ( ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) ) & ! need additional () for + & + ( zwy(ji ,jj ) + zwy(ji+1,jj ) ) ) ! reproducibility around NP + zvau =-r1_8 * r1_e2v(ji,jj) * ( ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) ) & + & + ( zwx(ji ,jj ) + zwx(ji ,jj+1) ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) END_2D @@ -871,26 +871,22 @@ CONTAINS SELECT CASE( nn_e3f_typ ) ! == reciprocal of e3 at F-point CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_2D( 1, 1, 1, 1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - ze3f = ( (e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)) & - & + (e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk)) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = 4._wp / ze3f ELSE ; z1_e3f(ji,jj) = 0._wp ENDIF END_2D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_2D( 1, 1, 1, 1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - ze3f = ( (e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)) & - & + (e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk)) ) - zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & - & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) + zmsk = (tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & + & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = zmsk / ze3f ELSE ; z1_e3f(ji,jj) = 0._wp ENDIF @@ -906,8 +902,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 1, 1, 1, 1 ) - zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) + zwz(ji,jj) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for NP repro + & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity DO_2D( 1, 1, 1, 1 ) @@ -921,12 +917,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 1, 1, 1, 1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & ) & ! bracket for halo 1 - halo 2 compatibility - & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) & - & ) & ! bracket for halo 1 - halo 2 compatibility + zwz(ji,jj) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) & ! NP repro & ) * r1_e1e2f(ji,jj) ) * z1_e3f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity @@ -957,11 +949,11 @@ CONTAINS ztsw(ji,jj) = zwz(ji ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj ) END_2D ! - DO_2D( 0, 0, 0, 0 ) - zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & - & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) - zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & - & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) + DO_2D( 0, 0, 0, 0 ) ! add () for NP repro + zua = + r1_12 * r1_e1u(ji,jj) * ( ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) ) & ! add () for + & + ( ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) ) ! NP repro + zva = - r1_12 * r1_e2v(ji,jj) * ( ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) ) & + & + ( ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zua pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zva END_2D @@ -1031,26 +1023,22 @@ CONTAINS SELECT CASE( nn_e3f_typ ) ! == reciprocal of e3 at F-point CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - ze3f = ( (e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)) & - & + (e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk)) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = 4._wp / ze3f ELSE ; z1_e3f(ji,jj) = 0._wp ENDIF END_2D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - ze3f = ( (e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & - & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)) & - & + (e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & - & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk)) ) - zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & - & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) + ze3f = ( ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t(ji ,jj ,jk,Kmm)*tmask(ji ,jj ,jk) & + & + e3t(ji+1,jj ,jk,Kmm)*tmask(ji+1,jj ,jk) ) ) + zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & + & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = zmsk / ze3f ELSE ; z1_e3f(ji,jj) = 0._wp ENDIF @@ -1066,8 +1054,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) + zwz(ji,jj,jk) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for NP repro + & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) @@ -1081,12 +1069,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & - & ) & ! bracket for halo 1 - halo 2 compatibility - & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) & - & ) & ! bracket for halo 1 - halo 2 compatibility + zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji ,jj+1) * pu(ji,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) & ! NP repro & ) * r1_e1e2f(ji,jj) ) * z1_e3f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity @@ -1131,10 +1115,10 @@ CONTAINS ztsw_jp1 = zwz(ji ,jj ,jk) + zwz(ji-1,jj ,jk) + zwz(ji-1,jj+1,jk) ztsw_ip1 = zwz(ji+1,jj-1,jk) + zwz(ji ,jj-1,jk) + zwz(ji ,jj ,jk) ! - zua = + r1_12 * r1_e1u(ji,jj) * ( ztne * zwy + ztnw_ip1 * zwy_ip1 & - & + ztse * zwy_jm1 + ztsw_ip1 * zwy_ip1_jm1 ) - zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw_jp1 * zwx_im1_jp1 + ztse_jp1 * zwx_jp1 & - & + ztnw * zwx_im1 + ztne * zwx ) + zua = + r1_12 * r1_e1u(ji,jj) * ( ( ztne * zwy + ztnw_ip1 * zwy_ip1 ) & ! need additional () for + & + ( ztse * zwy_jm1 + ztsw_ip1 * zwy_ip1_jm1 ) ) ! reproducibility around NP + zva = - r1_12 * r1_e2v(ji,jj) * ( ( ztsw_jp1 * zwx_im1_jp1 + ztse_jp1 * zwx_jp1 ) & + & + ( ztnw * zwx_im1 + ztne * zwx ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zua pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zva END_3D @@ -1156,10 +1140,10 @@ CONTAINS END_2D ! DO_2D( 0, 0, 0, 0 ) - zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & - & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) - zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & - & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) + zua = + r1_12 * r1_e1u(ji,jj) * ( ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) ) & ! add () for + & + ( ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) ) ! NP repro + zva = - r1_12 * r1_e2v(ji,jj) * ( ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) ) & + & + ( ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zua pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zva END_2D @@ -1223,10 +1207,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( 1, 1, 1, 1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj) = ( (e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk)) & - & - (e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk)) ) & + zwz(ji,jj) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) & ! NP reproducibility & * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity @@ -1241,10 +1223,8 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( 1, 1, 1, 1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj) = ( ff_f(ji,jj) + ( (e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk)) & - & - (e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk)) ) & + zwz(ji,jj) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! add () for + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) & ! NP repro & * r1_e1e2f(ji,jj) ) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity @@ -1278,10 +1258,10 @@ CONTAINS END_2D ! DO_2D( 0, 0, 0, 0 ) - zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & - & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) - zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & - & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) + zua = + r1_12 * r1_e1u(ji,jj) * ( ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) ) & ! add () for + & + ( ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) ) ! NP repro + zva = - r1_12 * r1_e2v(ji,jj) * ( ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) ) & + & + ( ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zua pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zva END_2D @@ -1343,10 +1323,8 @@ CONTAINS END_2D CASE ( np_RVO ) !* relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj,jk) = ( (e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk)) & - & - (e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk)) ) & + zwz(ji,jj,jk) = ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) & ! need additional () + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) & ! for NP reproducibility & * r1_e1e2f(ji,jj) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity @@ -1361,11 +1339,9 @@ CONTAINS END_2D CASE ( np_CRV ) !* Coriolis + relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) - ! round brackets added to fix the order of floating point operations - ! needed to ensure halo 1 - halo 2 compatibility - zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( (e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk)) & - & - (e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk)) ) & - & * r1_e1e2f(ji,jj) ) + zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) ) &! add () for + & - ( e1u(ji ,jj+1) * pu(ji ,jj+1,jk) - e1u(ji,jj) * pu(ji,jj,jk) ) ) &! NP repro + & * r1_e1e2f(ji,jj) ) END_2D IF( ln_dynvor_msk ) THEN ! mask the relative vorticity DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) @@ -1407,10 +1383,10 @@ CONTAINS END_2D ! DO_2D( 0, 0, 0, 0 ) - zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & - & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) - zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & - & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) + zua = + r1_12 * r1_e1u(ji,jj) * ( ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) ) & ! add () for + & + ( ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) ) ! NP repro + zva = - r1_12 * r1_e2v(ji,jj) * ( ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) ) & + & + ( ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) ) pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + zua pv_rhs(ji,jj,jk) = pv_rhs(ji,jj,jk) + zva END_2D @@ -1529,10 +1505,10 @@ CONTAINS SELECT CASE( nn_e3f_typ ) CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) DO_3D( 0, 0, 0, 0, 1, jpk ) - e3f_0vor(ji,jj,jk) = ( e3t_0(ji ,jj+1,jk)*tmask(ji ,jj+1,jk) & - & + e3t_0(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & - & + e3t_0(ji ,jj ,jk)*tmask(ji ,jj ,jk) & - & + e3t_0(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) * 0.25_wp + e3f_0vor(ji,jj,jk) = ( ( e3t_0(ji ,jj+1,jk)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t_0(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t_0(ji ,jj ,jk)*tmask(ji ,jj ,jk) & + & + e3t_0(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) ) * 0.25_wp END_3D CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) DO_3D( 0, 0, 0, 0, 1, jpk ) @@ -1540,10 +1516,10 @@ CONTAINS & + tmask(ji,jj ,jk) +tmask(ji+1,jj ,jk) ) ! IF( zmsk /= 0._wp ) THEN - e3f_0vor(ji,jj,jk) = ( e3t_0(ji ,jj+1,jk)*tmask(ji ,jj+1,jk) & - & + e3t_0(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & - & + e3t_0(ji ,jj ,jk)*tmask(ji ,jj ,jk) & - & + e3t_0(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) / zmsk + e3f_0vor(ji,jj,jk) = ( ( e3t_0(ji ,jj+1,jk)*tmask(ji ,jj+1,jk) & ! need additional () for + & + e3t_0(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) ) & ! reproducibility around NP + & + ( e3t_0(ji ,jj ,jk)*tmask(ji ,jj ,jk) & + & + e3t_0(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) ) / zmsk ELSE ; e3f_0vor(ji,jj,jk) = 0._wp ENDIF END_3D diff --git a/src/OCE/LDF/ldfslp.F90 b/src/OCE/LDF/ldfslp.F90 index 6231b844df0588dcbdd81cfbe50ae79db0207e47..4dd61e07eb8f8cfb9ad6fb49139a8f0a55066227 100644 --- a/src/OCE/LDF/ldfslp.F90 +++ b/src/OCE/LDF/ldfslp.F90 @@ -266,10 +266,10 @@ CONTAINS & + umask(ji-1,jj,jk-1) + umask(ji,jj,jk-1) , zeps ) * e1t(ji,jj) zcj = MAX( vmask(ji,jj-1,jk ) + vmask(ji,jj,jk-1) & & + vmask(ji,jj-1,jk-1) + vmask(ji,jj,jk ) , zeps ) * e2t(ji,jj) - zai = ( zgru (ji-1,jj,jk ) + zgru (ji,jj,jk-1) & - & + zgru (ji-1,jj,jk-1) + zgru (ji,jj,jk ) ) / zci * wmask (ji,jj,jk) - zaj = ( zgrv (ji,jj-1,jk ) + zgrv (ji,jj,jk-1) & - & + zgrv (ji,jj-1,jk-1) + zgrv (ji,jj,jk ) ) / zcj * wmask (ji,jj,jk) + zai = ( ( zgru (ji-1,jj,jk ) + zgru (ji,jj,jk-1) ) & ! need additional () for reproducibility around NP + & + ( zgru (ji-1,jj,jk-1) + zgru (ji,jj,jk ) ) ) / zci * wmask (ji,jj,jk) + zaj = ( ( zgrv (ji,jj-1,jk ) + zgrv (ji,jj,jk-1) ) & ! need additional () for reproducibility around NP + & + ( zgrv (ji,jj-1,jk-1) + zgrv (ji,jj,jk ) ) ) / zcj * wmask (ji,jj,jk) ! ! bound the slopes: abs(zw.)<= 1/100 and zb..<0. ! ! + kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) zbi = MIN( zbw ,- 100._wp* ABS( zai ) , -7.e+3_wp/e3w(ji,jj,jk,Kmm)* ABS( zai ) ) @@ -645,10 +645,10 @@ CONTAINS & + umask(ji-1,jj,ikm1) + umask(ji,jj,ikm1) , zeps ) * e1t(ji,jj) zcj = MAX( vmask(ji,jj-1,ik ) + vmask(ji,jj,ik ) & & + vmask(ji,jj-1,ikm1) + vmask(ji,jj,ikm1) , zeps ) * e2t(ji,jj) - zai = ( p_gru(ji-1,jj,ik ) + p_gru(ji,jj,ik) & - & + p_gru(ji-1,jj,ikm1) + p_gru(ji,jj,ikm1 ) ) / zci * tmask(ji,jj,ik) - zaj = ( p_grv(ji,jj-1,ik ) + p_grv(ji,jj,ik ) & - & + p_grv(ji,jj-1,ikm1) + p_grv(ji,jj,ikm1) ) / zcj * tmask(ji,jj,ik) + zai = ( ( p_gru(ji-1,jj,ik ) + p_gru(ji,jj,ik ) ) & ! need additional () for reproducibility around NP + & + ( p_gru(ji-1,jj,ikm1) + p_gru(ji,jj,ikm1) ) ) / zci * tmask(ji,jj,ik) + zaj = ( ( p_grv(ji,jj-1,ik ) + p_grv(ji,jj,ik ) ) & ! need additional () for reproducibility around NP + & + ( p_grv(ji,jj-1,ikm1) + p_grv(ji,jj,ikm1) ) ) / zcj * tmask(ji,jj,ik) ! !- bound the slopes: abs(zw.)<= 1/100 and zb..<0. ! kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) zbi = MIN( zbw , -100._wp* ABS( zai ) , -7.e+3_wp/e3w(ji,jj,ik,Kmm)* ABS( zai ) )