Changeset 1495
- Timestamp:
- 2009-07-20T16:17:45+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90
r1418 r1495 41 41 42 42 REAL(wp), DIMENSION(jpi,jpj,jpk) :: az_tmx ! coefficient used to evaluate the tidal induced Kz 43 REAL(wp), DIMENSION(jpi,jpj,jpk) :: az_tmx_itf ! coefficient used to evaluate the tidal induced Kz44 REAL(wp), DIMENSION(jpi,jpj,jpk) :: az_tsm ! avt(tidal) = avt0 + az_tmx / n245 ! ! vertical structure function taking into account46 ! ! of the subscale topographic effect47 REAL(wp), DIMENSION(jpk) :: zempba ! zempba profil vertical d'energie48 REAL(wp), DIMENSION(jpi,jpj) :: zhdep ! Ocean depth49 REAL(wp), DIMENSION(jpi,jpj) :: zsum1, zsum2, zsum50 REAL(wp), DIMENSION(jpi,jpj) :: z1sum1, z1sum2, z1sum51 52 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d_1, zempba_3d_253 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d, drn2dz !54 43 55 44 !! * Substitutions … … 58 47 !!---------------------------------------------------------------------- 59 48 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 60 !! $Id :$49 !! $Id$ 61 50 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 62 51 !!---------------------------------------------------------------------- … … 122 111 END DO 123 112 END DO 124 ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc113 ztpc= rau0 / ( rn_tfe * rn_me ) * ztpc 125 114 IF(lwp) WRITE(numout,*) 126 IF(lwp) WRITE(numout,*) ' N Total power consumption by av_tide 115 IF(lwp) WRITE(numout,*) ' N Total power consumption by av_tide : ztpc = ', ztpc * 1.e-12 ,'TW' 127 116 ENDIF 128 129 DO jk = 2, jpkm1 ! update momentum & tracer diffusivity with tidal mixing 130 av_tide(:,:,jk) = av_tide(:,:,jk) * ( 1. - mask_itf(:,:) ) 131 avt (:,:,jk) = avt (:,:,jk) + av_tide(:,:,jk) 117 118 ! ! ----------------------- ! 119 CALL tmx_itf( kt ) ! ITF tidal mixing ! (update av_tide) 120 ! ! ----------------------- ! 121 122 ! ! ----------------------- ! 123 ! ! Update mixing coefs ! 124 ! ! ----------------------- ! 125 DO jk = 2, jpkm1 !* update momentum & tracer diffusivity with tidal mixing 126 avt(:,:,jk) = avt(:,:,jk) + av_tide(:,:,jk) 132 127 DO jj = 2, jpjm1 133 128 DO ji = fs_2, fs_jpim1 ! vector opt. … … 173 168 INTEGER, INTENT(in) :: kt ! ocean time-step 174 169 !! 175 INTEGER :: ji, jj, jk ! dummy loop indices176 REAL(wp) :: z tpc ! total power consumption170 INTEGER :: ji, jj, jk ! dummy loop indices 171 REAL(wp) :: zcoef, ztpc ! temporary scalar 177 172 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! temporary 2D workspace 173 REAL(wp), DIMENSION(jpi,jpj) :: zsum1 , zsum2 , zsum 174 REAL(wp), DIMENSION(jpi,jpj) :: z1sum1, z1sum2, z1sum 175 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d_1, zempba_3d_2 ! 3D workspace 176 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d , zdn2dz ! - - 177 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zavt_itf ! - - 178 178 !!---------------------------------------------------------------------- 179 179 180 180 ! ! compute the form function using N2 at each time step 181 !!gm better/faster coding (not tmask as rn2 is already masked) 182 ! zempba_3d_1(:,:,jpk) = 0.e0 183 ! zempba_3d_2(:,:,jpk) = 0.e0 184 ! DO jk = 1, jpkm1 185 ! zdn2dz (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1) ! Vertical profile of dN2/dz 186 !CDIR NOVERRCHK 187 ! zempba_3d_1(:,:,jk) = SQRT( MAX( O.e0, rn2(:,:,jk) ) ) ! - - of N 188 ! zempba_3d_2(:,:,jk) = MAX( O.e0, rn2(:,:,jk) ) ! - - of N^2 189 ! END DO 190 !!gm replacing: 181 191 zempba_3d_1(:,:,:) = 0.e0 182 192 zempba_3d_2(:,:,:) = 0.e0 … … 185 195 DO jj = 1, jpj 186 196 DO ji = 1, jpi 187 drn2dz(ji,jj,jk) =(rn2(ji,jj,jk) - rn2(ji,jj,jk+1) )197 zdn2dz(ji,jj,jk) =(rn2(ji,jj,jk) - rn2(ji,jj,jk+1) ) 188 198 IF( rn2(ji,jj,jk) > 0 ) THEN 189 199 zempba_3d_1(ji,jj,jk)=SQRT(rn2(ji,jj,jk))*tmask(ji,jj,jk) … … 193 203 END DO 194 204 END DO 205 !!gm end 206 207 !!gm better/faster coding (suppression of z1sum, z1sum1 and z1sum2) 208 ! zsum (:,:) = 0.e0 209 ! zsum1(:,:) = 0.e0 210 ! zsum2(:,:) = 0.e0 211 ! DO jk= 2, jpk 212 ! zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) 213 ! zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk) 214 ! END DO 215 ! DO jj = 1, jpj 216 ! DO ji = 1, jpi 217 ! IF( zsum1(ji,jj) /= 0.e0 ) zsum1(ji,jj) = 1.e0 / zsum1(ji,jj) 218 ! IF( zsum2(ji,jj) /= 0.e0 ) zsum2(ji,jj) = 1.e0 / zsum2(ji,jj) 219 ! END DO 220 ! END DO 221 ! 222 ! DO jk= 1, jpk 223 ! DO jj = 1, jpj 224 ! DO ji = 1, jpi 225 ! zcoef = 0.5 - SIGN( 0.5, zdn2dz(ji,jj,jk) ) ! =0 if dN2/dz > 0, =1 otherwise 226 ! ztpc = zempba_3d_1(ji,jj,jk) * z1sum1(ji,jj) * zcoef & 227 ! & + zempba_3d_2(ji,jj,jk) * z1sum2(ji,jj) * ( 1. - zcoef ) 228 ! ! 229 ! zempba_3d(ji,jj,jk) = ztpc 230 ! zsum (ji,jj) = zsum(ji,jj) + ztpc * fse3w(ji,jj,jk) 231 ! END DO 232 ! END DO 233 ! END DO 234 ! DO jj = 1, jpj 235 ! DO ji = 1, jpi 236 ! IF( zsum(ji,jj) > 0.e0 ) zsum(ji,jj) = en_tmx(:,:) / zsum(ji,jj) 237 ! END DO 238 ! END DO 239 ! 240 ! ! ! first estimation bounded by 10 cm2/s (with n2 bounded by rn_n2min) 241 ! zcoef = rn_tfe_itf / ( rn_tfe * rau0 ) 242 ! DO jk = 1, jpk 243 ! zavt_itf(:,:,jk) = MIN( 10.e-4, zcoef * zsum(:,:) * zempba_3d(:,:,jk) & 244 ! & / MAX( rn_n2min, rn2(:,:,jk) ) * tmask(:,:,jk) ) 245 ! END DO 246 !!gm replacing: 195 247 196 248 zsum1(:,:)=0.e0 … … 219 271 DO jj = 1, jpj 220 272 DO ji = 1, jpi 221 zempba_3d(ji,jj,jk)=zempba_3d_1(ji,jj,jk)*z1sum1(ji,jj)*0.5*(1-SIGN(1.0, drn2dz(ji,jj,jk))) &222 & +zempba_3d_2(ji,jj,jk)*z1sum2(ji,jj)*0.5*(1+SIGN(1.0, drn2dz(ji,jj,jk)))273 zempba_3d(ji,jj,jk)=zempba_3d_1(ji,jj,jk)*z1sum1(ji,jj)*0.5*(1-SIGN(1.0,zdn2dz(ji,jj,jk))) & 274 & +zempba_3d_2(ji,jj,jk)*z1sum2(ji,jj)*0.5*(1+SIGN(1.0,zdn2dz(ji,jj,jk))) 223 275 zsum(ji,jj)=zsum(ji,jj)+zempba_3d(ji,jj,jk)*fse3w(ji,jj,jk) 224 276 END DO … … 232 284 END DO 233 285 234 DO jk= 1, jpk 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 az_tmx_itf(ji,jj,jk) = en_tmx(ji,jj) * rn_tfe_itf / rn_tfe / rau0 & 238 & * zempba_3d(ji,jj,jk) * z1sum(ji,jj) * tmask(ji,jj,jk) 239 END DO 240 END DO 241 END DO 242 243 ! ! first estimation (with n2 bound by rn_n2min) bounded by 10 cm2/s 244 av_tide_itf(:,:,:) = MIN( 10.e-4, az_tmx_itf(:,:,:) / MAX( rn_n2min, rn2(:,:,:) ) ) 286 ! ! first estimation bounded by 10 cm2/s (with n2 bounded by rn_n2min) 287 zcoef = rn_tfe_itf / ( rn_tfe * rau0 ) 288 DO jk= 1, jpk 289 zavt_itf(:,:,jk) = MIN( 10.e-4, zcoef * en_tmx(:,:) * z1sum(:,:) * zempba_3d(:,:,jk) & 290 & / MAX( rn_n2min, rn2(:,:,jk) ) * tmask(:,:,jk) ) 291 END DO 292 !!gm end 245 293 246 294 zkz(:,:) = 0.e0 ! Associated potential energy consummed over the whole water column 247 295 DO jk = 2, jpkm1 248 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * av_tide_itf(:,:,jk)* tmask(:,:,jk)296 zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * tmask(:,:,jk) 249 297 END DO 250 298 … … 255 303 END DO 256 304 257 DO jk = 2, jpkm1 ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> av_tide_itf bound by 300 cm2/s258 av_tide_itf(:,:,jk) = av_tide_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) ! kz max = 120 cm2/s259 END DO 260 261 IF( kt == nit000 ) THEN ! diagnose the nergy consumed by av_tide_itf305 DO jk = 2, jpkm1 ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 306 zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) ! kz max = 120 cm2/s 307 END DO 308 309 IF( kt == nit000 ) THEN ! diagnose the nergy consumed by zavt_itf 262 310 ztpc = 0.e0 263 311 DO jk= 1, jpk 264 312 DO jj= 1, jpj 265 313 DO ji= 1, jpi 266 ztpc = ztpc + fse3w(ji,jj,jk)*e1t(ji,jj)*e2t(ji,jj) * 1/(rn_tfe_itf)&267 & *MAX(0.e0,rn2(ji,jj,jk))*av_tide_itf(ji,jj,jk)*tmask(ji,jj,jk)*tmask_i(ji,jj)314 ztpc = ztpc + e1t(ji,jj) * e2t(ji,jj) * fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) & 315 & * zavt_itf(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 268 316 END DO 269 317 END DO 270 318 END DO 271 ztpc= rau0 * 1/( rn_me) * ztpc272 IF(lwp) WRITE(numout,*) ' N Total power consumption by av_tide_itf: ztpc = ', ztpc * 1.e-12 ,'TW'319 ztpc= rau0 * ztpc / ( rn_me * rn_tfe_itf ) 320 IF(lwp) WRITE(numout,*) ' N Total power consumption by zavt_itf: ztpc = ', ztpc * 1.e-12 ,'TW' 273 321 ENDIF 274 322 323 ! ! Update av_tide with the ITF mixing coefficient 275 324 DO jk = 2, jpkm1 276 av_tide_itf(:,:,jk) = av_tide_itf(:,:,jk) * mask_itf(:,:) 277 avt(:,:,jk) = avt(:,:,jk) + av_tide_itf(:,:,jk) 278 ! 279 DO jj = 2, jpjm1 280 DO ji = fs_2, fs_jpim1 ! vector opt. 281 avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( av_tide_itf(ji,jj,jk) + av_tide_itf(ji+1,jj ,jk) ) * umask(ji,jj,jk) 282 avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( av_tide_itf(ji,jj,jk) + av_tide_itf(ji ,jj+1,jk) ) * vmask(ji,jj,jk) 283 END DO 284 END DO 285 END DO 286 CALL lbc_lnk( avmu, 'U', 1. ) 287 CALL lbc_lnk( avmv, 'V', 1. ) 288 325 av_tide(:,:,jk) = av_tide (:,:,jk) * ( 1.e0 - mask_itf(:,:) ) & 326 & + zavt_itf(:,:,jk) * mask_itf(:,:) 327 END DO 289 328 ! 290 329 END SUBROUTINE tmx_itf … … 320 359 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! total M2, K1 and S2 tidal energy 321 360 REAL(wp), DIMENSION(jpi,jpj) :: zfact ! used for vertical structure function 361 REAL(wp), DIMENSION(jpi,jpj) :: zhdep ! Ocean depth 322 362 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpc ! power consumption 323 363
Note: See TracChangeset
for help on using the changeset viewer.