Changeset 3285
- Timestamp:
- 2012-01-27T14:23:13+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r3280 r3285 66 66 !!---------------------------------------------------------------------- 67 67 68 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwd, zws, zavmu, zavmv 68 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwd, zws 69 REAL(wp), POINTER, DIMENSION(:,:) :: zavmu, zavmv 69 70 !!---------------------------------------------------------------------- 70 71 ! 71 72 IF( nn_timing == 1 ) CALL timing_start('dyn_zdf_imp') 72 73 ! 73 CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws, zavmu, zavmv ) 74 CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws ) 75 CALL wrk_alloc( jpi,jpj, zavmu, zavmv ) 74 76 ! 75 77 IF( kt == nit000 ) THEN … … 89 91 ! column vector of the tri-diagonal matrix equation 90 92 ! 91 DO jk = 1, jpk92 DO jj = 1, jpj93 DO ji =1, jpi94 zavmu(ji,jj,jk) = avmu(ji,jj,jk)95 zavmv(ji,jj,jk) = avmv(ji,jj,jk)96 END DO97 END DO98 END DO99 93 100 94 IF( ln_bfrimp ) THEN … … 108 102 ikbu = mbku(ji,jj) ! ocean bottom level at u- and v-points 109 103 ikbv = mbkv(ji,jj) ! (deepest ocean u- and v-points) 110 zavmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * fse3uw(ji,jj,ikbu+1) 111 zavmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * fse3vw(ji,jj,ikbv+1) 104 zavmu(ji,jj) = avmu(ji,jj,ikbu+1) 105 zavmv(ji,jj) = avmv(ji,jj,ikbv+1) 106 avmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * fse3uw(ji,jj,ikbu+1) 107 avmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * fse3vw(ji,jj,ikbv+1) 112 108 END DO 113 109 END DO … … 124 120 DO ji = fs_2, fs_jpim1 ! vector opt. 125 121 zcoef = - p2dt / fse3u(ji,jj,jk) 126 zzwi = zcoef * zavmu (ji,jj,jk ) / fse3uw(ji,jj,jk )122 zzwi = zcoef * avmu (ji,jj,jk ) / fse3uw(ji,jj,jk ) 127 123 zwi(ji,jj,jk) = zzwi * umask(ji,jj,jk) 128 zzws = zcoef * zavmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1)124 zzws = zcoef * avmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 129 125 zws(ji,jj,jk) = zzws * umask(ji,jj,jk+1) 130 126 zwd(ji,jj,jk) = 1._wp - zwi(ji,jj,jk) - zzws … … 210 206 DO ji = fs_2, fs_jpim1 ! vector opt. 211 207 zcoef = -p2dt / fse3v(ji,jj,jk) 212 zzwi = zcoef * zavmv (ji,jj,jk ) / fse3vw(ji,jj,jk )208 zzwi = zcoef * avmv (ji,jj,jk ) / fse3vw(ji,jj,jk ) 213 209 zwi(ji,jj,jk) = zzwi * vmask(ji,jj,jk) 214 zzws = zcoef * zavmv (ji,jj,jk+1) / fse3vw(ji,jj,jk+1)210 zzws = zcoef * avmv (ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 215 211 zws(ji,jj,jk) = zzws * vmask(ji,jj,jk+1) 216 212 zwd(ji,jj,jk) = 1._wp - zwi(ji,jj,jk) - zzws … … 284 280 END DO 285 281 END DO 286 ! 287 CALL wrk_dealloc( jpi,jpj,jpk, zwi, zwd, zws, zavmu, zavmv ) 282 283 !! restore bottom layer avmu(v) 284 IF( ln_bfrimp ) THEN 285 # if defined key_vectopt_loop 286 DO jj = 1, 1 287 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) 288 # else 289 DO jj = 2, jpjm1 290 DO ji = 2, jpim1 291 # endif 292 ikbu = mbku(ji,jj) ! ocean bottom level at u- and v-points 293 ikbv = mbkv(ji,jj) ! (deepest ocean u- and v-points) 294 avmu(ji,jj,ikbu+1) = zavmu(ji,jj) 295 avmv(ji,jj,ikbv+1) = zavmv(ji,jj) 296 END DO 297 END DO 298 ENDIF 299 ! 300 CALL wrk_dealloc( jpi,jpj,jpk, zwi, zwd, zws) 301 CALL wrk_dealloc( jpi,jpj, zavmu, zavmv) 288 302 ! 289 303 IF( nn_timing == 1 ) CALL timing_stop('dyn_zdf_imp')
Note: See TracChangeset
for help on using the changeset viewer.