Changeset 12377 for NEMO/trunk/src/OCE/ZDF/zdfddm.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/ZDF/zdfddm.F90
r10068 r12377 30 30 31 31 !! * Substitutions 32 # include " vectopt_loop_substitute.h90"32 # include "do_loop_substitute.h90" 33 33 !!---------------------------------------------------------------------- 34 34 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 38 38 CONTAINS 39 39 40 SUBROUTINE zdf_ddm( kt, p_avm, p_avt, p_avs )40 SUBROUTINE zdf_ddm( kt, Kmm, p_avm, p_avt, p_avs ) 41 41 !!---------------------------------------------------------------------- 42 42 !! *** ROUTINE zdf_ddm *** … … 68 68 !! References : Merryfield et al., JPO, 29, 1124-1142, 1999. 69 69 !!---------------------------------------------------------------------- 70 INTEGER, INTENT(in ) :: kt ! ocean time-step indexocean time step 70 INTEGER, INTENT(in ) :: kt ! ocean time-step index 71 INTEGER, INTENT(in ) :: Kmm ! ocean time level index 71 72 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: p_avm ! Kz on momentum (w-points) 72 73 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: p_avt ! Kz on temperature (w-points) … … 91 92 !!gm and many acces in memory 92 93 93 DO jj = 1, jpj !== R=zrau = (alpha / beta) (dk[t] / dk[s]) ==! 94 DO ji = 1, jpi 95 zrw = ( gdepw_n(ji,jj,jk ) - gdept_n(ji,jj,jk) ) & 96 !!gm please, use e3w_n below 97 & / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) ) 98 ! 99 zaw = ( rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem) * zrw ) & 100 & * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 101 zbw = ( rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal) * zrw ) & 102 & * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 103 ! 104 zdt = zaw * ( tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) ) 105 zds = zbw * ( tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) 106 IF( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 107 zrau(ji,jj) = MAX( 1.e-20, zdt / zds ) ! only retains positive value of zrau 108 END DO 109 END DO 94 DO_2D_11_11 95 zrw = ( gdepw(ji,jj,jk ,Kmm) - gdept(ji,jj,jk,Kmm) ) & 96 !!gm please, use e3w(:,:,:,Kmm) below 97 & / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) ) 98 ! 99 zaw = ( rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem) * zrw ) & 100 & * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 101 zbw = ( rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal) * zrw ) & 102 & * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 103 ! 104 zdt = zaw * ( ts(ji,jj,jk-1,jp_tem,Kmm) - ts(ji,jj,jk,jp_tem,Kmm) ) 105 zds = zbw * ( ts(ji,jj,jk-1,jp_sal,Kmm) - ts(ji,jj,jk,jp_sal,Kmm) ) 106 IF( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 107 zrau(ji,jj) = MAX( 1.e-20, zdt / zds ) ! only retains positive value of zrau 108 END_2D 110 109 111 DO jj = 1, jpj !== indicators ==! 112 DO ji = 1, jpi 113 ! stability indicator: msks=1 if rn2>0; 0 elsewhere 114 IF( rn2(ji,jj,jk) + 1.e-12 <= 0. ) THEN ; zmsks(ji,jj) = 0._wp 115 ELSE ; zmsks(ji,jj) = 1._wp 116 ENDIF 117 ! salt fingering indicator: msksf=1 if R>1; 0 elsewhere 118 IF( zrau(ji,jj) <= 1. ) THEN ; zmskf(ji,jj) = 0._wp 119 ELSE ; zmskf(ji,jj) = 1._wp 120 ENDIF 121 ! diffusive layering indicators: 122 ! ! mskdl1=1 if 0< R <1; 0 elsewhere 123 IF( zrau(ji,jj) >= 1. ) THEN ; zmskd1(ji,jj) = 0._wp 124 ELSE ; zmskd1(ji,jj) = 1._wp 125 ENDIF 126 ! ! mskdl2=1 if 0< R <0.5; 0 elsewhere 127 IF( zrau(ji,jj) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0._wp 128 ELSE ; zmskd2(ji,jj) = 1._wp 129 ENDIF 130 ! mskdl3=1 if 0.5< R <1; 0 elsewhere 131 IF( zrau(ji,jj) <= 0.5 .OR. zrau(ji,jj) >= 1. ) THEN ; zmskd3(ji,jj) = 0._wp 132 ELSE ; zmskd3(ji,jj) = 1._wp 133 ENDIF 134 END DO 135 END DO 110 DO_2D_11_11 111 ! stability indicator: msks=1 if rn2>0; 0 elsewhere 112 IF( rn2(ji,jj,jk) + 1.e-12 <= 0. ) THEN ; zmsks(ji,jj) = 0._wp 113 ELSE ; zmsks(ji,jj) = 1._wp 114 ENDIF 115 ! salt fingering indicator: msksf=1 if R>1; 0 elsewhere 116 IF( zrau(ji,jj) <= 1. ) THEN ; zmskf(ji,jj) = 0._wp 117 ELSE ; zmskf(ji,jj) = 1._wp 118 ENDIF 119 ! diffusive layering indicators: 120 ! ! mskdl1=1 if 0< R <1; 0 elsewhere 121 IF( zrau(ji,jj) >= 1. ) THEN ; zmskd1(ji,jj) = 0._wp 122 ELSE ; zmskd1(ji,jj) = 1._wp 123 ENDIF 124 ! ! mskdl2=1 if 0< R <0.5; 0 elsewhere 125 IF( zrau(ji,jj) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0._wp 126 ELSE ; zmskd2(ji,jj) = 1._wp 127 ENDIF 128 ! mskdl3=1 if 0.5< R <1; 0 elsewhere 129 IF( zrau(ji,jj) <= 0.5 .OR. zrau(ji,jj) >= 1. ) THEN ; zmskd3(ji,jj) = 0._wp 130 ELSE ; zmskd3(ji,jj) = 1._wp 131 ENDIF 132 END_2D 136 133 ! mask zmsk in order to have avt and avs masked 137 134 zmsks(:,:) = zmsks(:,:) * wmask(:,:,jk) … … 141 138 ! ------------------ 142 139 ! Constant eddy coefficient: reset to the background value 143 DO jj = 1, jpj 144 DO ji = 1, jpi 145 zinr = 1._wp / zrau(ji,jj) 146 ! salt fingering 147 zrr = zrau(ji,jj) / rn_hsbfr 148 zrr = zrr * zrr 149 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) 150 zavft = 0.7 * zavfs * zinr 151 ! diffusive layering 152 zavdt = 1.3635e-6 * EXP( 4.6 * EXP( -0.54*(zinr-1.) ) ) * zmsks(ji,jj) * zmskd1(ji,jj) 153 zavds = zavdt * zmsks(ji,jj) * ( ( 1.85 * zrau(ji,jj) - 0.85 ) * zmskd3(ji,jj) & 154 & + 0.15 * zrau(ji,jj) * zmskd2(ji,jj) ) 155 ! add to the eddy viscosity coef. previously computed 156 p_avs(ji,jj,jk) = p_avt(ji,jj,jk) + zavfs + zavds 157 p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zavft + zavdt 158 p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 159 END DO 160 END DO 140 DO_2D_11_11 141 zinr = 1._wp / zrau(ji,jj) 142 ! salt fingering 143 zrr = zrau(ji,jj) / rn_hsbfr 144 zrr = zrr * zrr 145 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) 146 zavft = 0.7 * zavfs * zinr 147 ! diffusive layering 148 zavdt = 1.3635e-6 * EXP( 4.6 * EXP( -0.54*(zinr-1.) ) ) * zmsks(ji,jj) * zmskd1(ji,jj) 149 zavds = zavdt * zmsks(ji,jj) * ( ( 1.85 * zrau(ji,jj) - 0.85 ) * zmskd3(ji,jj) & 150 & + 0.15 * zrau(ji,jj) * zmskd2(ji,jj) ) 151 ! add to the eddy viscosity coef. previously computed 152 p_avs(ji,jj,jk) = p_avt(ji,jj,jk) + zavfs + zavds 153 p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zavft + zavdt 154 p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 155 END_2D 161 156 ! ! =============== 162 157 END DO ! End of slab 163 158 ! ! =============== 164 159 ! 165 IF( ln_ctl) THEN160 IF(sn_cfctl%l_prtctl) THEN 166 161 CALL prt_ctl(tab3d_1=avt , clinfo1=' ddm - t: ', tab3d_2=avs , clinfo2=' s: ', kdim=jpk) 167 162 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.