Changeset 2005 for branches/DEV_r1837_MLF/NEMO/OPA_SRC/DYN/dynnxt.F90
- Timestamp:
- 2010-07-09T15:07:02+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r1837_MLF/NEMO/OPA_SRC/DYN/dynnxt.F90
r1975 r2005 87 87 !! un,vn now horizontal velocity of next time-step 88 88 !!---------------------------------------------------------------------- 89 #if defined key_vvl 90 USE oce, ONLY : ze3u_f => ta ! use ta as 3D workspace 91 USE oce, ONLY : ze3v_f => sa ! use sa as 3D workspace 92 #endif 89 93 INTEGER, INTENT( in ) :: kt ! ocean time-step index 90 94 !! … … 95 99 REAL(wp) :: zue3a , zue3n , zue3b ! temporary scalar 96 100 REAL(wp) :: zve3a , zve3n , zve3b ! - - 97 REAL(wp) :: ze3u_b, ze3u_n, ze3u_a ! - -98 REAL(wp) :: ze3v_b, ze3v_n, ze3v_a ! - -99 101 REAL(wp) :: zuf , zvf ! - - 102 REAL(wp) :: zec ! - - 103 REAL(wp) :: zv_t_ij , zv_t_ip1j ! - - 104 REAL(wp) :: zv_t_ijp1 ! - - 105 REAL(wp), DIMENSION(jpi,jpj) :: zs_t, zs_u_1, zs_v_1 ! temporary 2D workspace 100 106 !!---------------------------------------------------------------------- 101 107 … … 216 222 DO jj = 1, jpj 217 223 DO ji = 1, jpi 218 zuf = atfp * ( ub(ji,jj,jk) + ua(ji,jj,jk) ) + atfp1 * un(ji,jj,jk)219 zvf = atfp * ( vb(ji,jj,jk) + va(ji,jj,jk) ) + atfp1 * vn(ji,jj,jk)224 zuf = un(ji,jj,jk) + atfp * ( ub(ji,jj,jk) - 2.e0 * un(ji,jj,jk) + ua(ji,jj,jk) ) 225 zvf = vn(ji,jj,jk) + atfp * ( vb(ji,jj,jk) - 2.e0 * vn(ji,jj,jk) + va(ji,jj,jk) ) 220 226 ! 221 227 ub(ji,jj,jk) = zuf ! ub <-- filtered velocity … … 227 233 END DO 228 234 ELSE ! applied on thickness weighted velocity 235 ! Before scale factors at (t/u/v)-points (actually "now filtered" and futur "before") 236 ! ====================================== 237 ! Scale factor at t-points 238 ! ------------------------ 239 fse3t_b(:,:,:) = fse3t_n(:,:,:) + atfp * fse3t_m(:,:,:) 240 ! Add volume filter correction only at the first level of t-point scale factors 241 zec = atfp * rdt / rau0 242 fse3t_b(:,:,1) = fse3t_b(:,:,1) - zec * ( emp_b(:,:) - emp(:,:) ) * tmask(:,:,1) 243 ! Scale factor at (u/v)-points 244 ! ------------------------ 245 ! surface at t-points and inverse surface at (u/v)-points used in surface averaging computations 246 zs_t (:,:) = e1t(:,:) * e2t(:,:) 247 zs_u_1(:,:) = 0.5 / e1u(:,:) * e2u(:,:) 248 zs_v_1(:,:) = 0.5 / e1v(:,:) * e2v(:,:) 249 ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points 250 DO jk = 1, jpkm1 251 DO jj = 1, jpjm1 252 DO ji = 1, jpim1 253 zv_t_ij = zs_t(ji ,jj ) * fse3t_b(ji ,jj ,jk) 254 zv_t_ip1j = zs_t(ji+1,jj ) * fse3t_b(ji+1,jj ,jk) 255 zv_t_ijp1 = zs_t(ji ,jj+1) * fse3t_b(ji ,jj+1,jk) 256 ze3u_f(ji,jj,jk) = umask(ji,jj,jk) * ( zs_u_1(ji,jj) * ( zv_t_ij + zv_t_ip1j ) - fse3u_0(ji,jj,jk) ) 257 ze3v_f(ji,jj,jk) = vmask(ji,jj,jk) * ( zs_v_1(ji,jj) * ( zv_t_ij + zv_t_ijp1 ) - fse3v_0(ji,jj,jk) ) 258 END DO 259 END DO 260 END DO 261 CALL lbc_lnk( ze3u_f, 'U', 1. ) ! lateral boundary conditions 262 CALL lbc_lnk( ze3v_f, 'U', 1. ) 263 ! Add initial scale factor to scale factor anomaly 264 ze3u_f(:,:,:) = ze3u_f(:,:,:) + fse3u_0(:,:,:) 265 ze3v_f(:,:,:) = ze3v_f(:,:,:) + fse3v_0(:,:,:) 266 229 267 DO jk = 1, jpkm1 230 268 DO jj = 1, jpj 231 DO ji = 1, jpi 232 z e3u_a =fse3u_a(ji,jj,jk)233 z e3v_a =fse3v_a(ji,jj,jk)234 z e3u_n =fse3u_n(ji,jj,jk)235 z e3v_n =fse3v_n(ji,jj,jk)236 z e3u_b =fse3u_b(ji,jj,jk)237 z e3v_b =fse3v_b(ji,jj,jk)269 DO ji = 1, jpim 270 zue3a = ua(ji,jj,jk) * fse3u_a(ji,jj,jk) 271 zve3a = va(ji,jj,jk) * fse3v_a(ji,jj,jk) 272 zue3n = un(ji,jj,jk) * fse3u_n(ji,jj,jk) 273 zve3n = vn(ji,jj,jk) * fse3v_n(ji,jj,jk) 274 zue3b = ub(ji,jj,jk) * fse3u_b(ji,jj,jk) 275 zve3b = vb(ji,jj,jk) * fse3v_b(ji,jj,jk) 238 276 ! 239 zue3a = ua(ji,jj,jk) * ze3u_a 240 zve3a = va(ji,jj,jk) * ze3v_a 241 zue3n = un(ji,jj,jk) * ze3u_n 242 zve3n = vn(ji,jj,jk) * ze3v_n 243 zue3b = ub(ji,jj,jk) * ze3u_b 244 zve3b = vb(ji,jj,jk) * ze3v_b 245 ! 246 zuf = ( atfp * ( zue3b + zue3a ) + atfp1 * zue3n ) & 247 & / ( atfp * ( ze3u_b + ze3u_a ) + atfp1 * ze3u_n ) * umask(ji,jj,jk) 248 zvf = ( atfp * ( zve3b + zve3a ) + atfp1 * zve3n ) & 249 & / ( atfp * ( ze3v_b + ze3v_a ) + atfp1 * ze3v_n ) * vmask(ji,jj,jk) 277 zuf = ( zue3n + atfp * ( zue3b - 2.e0 * zue3n + zue3a ) ) / ze3u_f(ji,jj,jk) 278 zvf = ( zve3n + atfp * ( zve3b - 2.e0 * zve3n + zve3a ) ) / ze3v_f(ji,jj,jk) 250 279 ! 251 280 ub(ji,jj,jk) = zuf ! ub <-- filtered velocity 252 281 vb(ji,jj,jk) = zvf 282 fse3u_b(ji,jj,jk) = ze3u_f(ji,jj,jk) ! e3u_b <-- filtered scale factor 283 fse3v_b(ji,jj,jk) = ze3v_f(ji,jj,jk) 253 284 un(ji,jj,jk) = ua(ji,jj,jk) ! un <-- ua 254 285 vn(ji,jj,jk) = va(ji,jj,jk) … … 256 287 END DO 257 288 END DO 289 CALL lbc_lnk( ub, 'U', -1. ) ! local domain boundaries 290 CALL lbc_lnk( vb, 'V', -1. ) 258 291 ENDIF 259 292 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.