Changeset 592 for trunk/NEMO/OPA_SRC/TRA/trazdf_imp.F90
- Timestamp:
- 2007-02-09T10:15:25+01:00 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r503 r592 31 31 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 32 32 USE prtctl ! Print control 33 USE domvvl ! variable volume 33 34 34 35 IMPLICIT NONE … … 97 98 !! * Local declarations 98 99 INTEGER :: ji, jj, jk ! dummy loop indices 99 REAL(wp) :: zavi, zrhs ! temporary scalars 100 REAL(wp) :: zavi, zrhs, znvvl, & ! temporary scalars 101 ze3tb, ze3tn, ze3ta, zvsfvvl ! variable vertical scale factors 100 102 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 101 103 zwi, zwt, zavsi ! workspace arrays … … 119 121 zavsi(:,:,jpk) = 0.e0 ; zavsi( : ,:,1) = 0.e0 120 122 123 ! I.1 Variable volume : to take into account vertical variable vertical scale factors 124 ! ------------------- 125 IF( lk_vvl ) THEN ; znvvl = 1. 126 ELSE ; znvvl = 0.e0 127 ENDIF 128 121 129 ! II. Vertical trend associated with the vertical physics 122 130 ! ======================================================= … … 145 153 END DO 146 154 155 #else 156 ! No isopycnal diffusion 157 zwt(:,:,:) = avt(:,:,:) 158 # if defined key_zdfddm 159 zavsi(:,:,:) = avs(:,:,:) 160 # endif 161 162 #endif 163 147 164 ! Diagonal, inferior, superior (including the bottom boundary condition via avt masked) 148 165 DO jk = 1, jpkm1 149 166 DO jj = 2, jpjm1 150 167 DO ji = fs_2, fs_jpim1 ! vector opt. 151 zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 152 zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 153 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 154 END DO 155 END DO 156 END DO 157 #else 158 ! Diagonal, inferior, superior (including the bottom boundary condition via avt masked) 159 DO jk = 1, jpkm1 160 DO jj = 2, jpjm1 161 DO ji = fs_2, fs_jpim1 ! vector opt. 162 zwi(ji,jj,jk) = - p2dt(jk) * avt(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 163 zws(ji,jj,jk) = - p2dt(jk) * avt(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 164 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 165 END DO 166 END DO 167 END DO 168 #endif 168 zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 169 ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl ! after scale factor at T-point 170 ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl ! now scale factor at T-point 171 zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk ) / ( ze3tn * fse3w(ji,jj,jk ) ) 172 zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 173 zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 174 END DO 175 END DO 176 END DO 169 177 170 178 ! Surface boudary conditions 171 179 DO jj = 2, jpjm1 172 180 DO ji = fs_2, fs_jpim1 ! vector opt. 181 zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 182 ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl ! after scale factor at T-point 173 183 zwi(ji,jj,1) = 0.e0 174 zwd(ji,jj,1) = 1.- zws(ji,jj,1)184 zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 175 185 END DO 176 186 END DO … … 214 224 DO jj = 2, jpjm1 215 225 DO ji = fs_2, fs_jpim1 216 ta(ji,jj,1) = tb(ji,jj,1) + p2dt(1) * ta(ji,jj,1) 217 END DO 218 END DO 219 DO jk = 2, jpkm1 220 DO jj = 2, jpjm1 221 DO ji = fs_2, fs_jpim1 222 zrhs = tb(ji,jj,jk) + p2dt(jk) * ta(ji,jj,jk) ! zrhs=right hand side 226 zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 227 ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 228 ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,1) 229 ta(ji,jj,1) = ze3tb * tb(ji,jj,1) + p2dt(1) * ze3tn * ta(ji,jj,1) 230 END DO 231 END DO 232 DO jk = 2, jpkm1 233 DO jj = 2, jpjm1 234 DO ji = fs_2, fs_jpim1 235 zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 236 ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 237 ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,jk) 238 zrhs = ze3tb * tb(ji,jj,jk) + p2dt(jk) * ze3tn * ta(ji,jj,jk) ! zrhs=right hand side 223 239 ta(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *ta(ji,jj,jk-1) 224 240 END DO … … 249 265 250 266 ! Diagonal, inferior, superior (including the bottom boundary condition via avs masked) 251 # if defined key_ldfslp252 267 DO jk = 1, jpkm1 253 268 DO jj = 2, jpjm1 254 269 DO ji = fs_2, fs_jpim1 ! vector opt. 255 zwi(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 256 zws(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 257 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 258 END DO 259 END DO 260 END DO 261 # else 262 DO jk = 1, jpkm1 263 DO jj = 2, jpjm1 264 DO ji = fs_2, fs_jpim1 ! vector opt. 265 zwi(ji,jj,jk) = - p2dt(jk) * avs(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 266 zws(ji,jj,jk) = - p2dt(jk) * avs(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 267 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 268 END DO 269 END DO 270 END DO 271 # endif 270 zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 271 ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl ! after scale factor at T-point 272 ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl ! now scale factor at T-point 273 zwi(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk ) / ( ze3tn * fse3w(ji,jj,jk ) ) 274 zws(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 275 zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 276 END DO 277 END DO 278 END DO 272 279 273 280 ! Surface boudary conditions 274 281 DO jj = 2, jpjm1 275 282 DO ji = fs_2, fs_jpim1 ! vector opt. 283 zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 284 ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl ! after scale factor at T-point 276 285 zwi(ji,jj,1) = 0.e0 277 zwd(ji,jj,1) = 1.- zws(ji,jj,1)286 zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 278 287 END DO 279 288 END DO … … 316 325 DO jj = 2, jpjm1 317 326 DO ji = fs_2, fs_jpim1 318 sa(ji,jj,1) = sb(ji,jj,1) + p2dt(1) * sa(ji,jj,1) 319 END DO 320 END DO 321 DO jk = 2, jpkm1 322 DO jj = 2, jpjm1 323 DO ji = fs_2, fs_jpim1 324 zrhs = sb(ji,jj,jk) + p2dt(jk) * sa(ji,jj,jk) ! zrhs=right hand side 327 zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 328 ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl ! before scale factor at T-point 329 ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,1) ! now scale factor at T-point 330 sa(ji,jj,1) = ze3tb * sb(ji,jj,1) + p2dt(1) * ze3tn * sa(ji,jj,1) 331 END DO 332 END DO 333 DO jk = 2, jpkm1 334 DO jj = 2, jpjm1 335 DO ji = fs_2, fs_jpim1 336 zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 337 ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl ! before scale factor at T-point 338 ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,jk) ! now scale factor at T-point 339 zrhs = ze3tb * sb(ji,jj,jk) + p2dt(jk) * ze3tn * sa(ji,jj,jk) ! zrhs=right hand side 325 340 sa(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *sa(ji,jj,jk-1) 326 341 END DO
Note: See TracChangeset
for help on using the changeset viewer.