Changeset 216 for trunk/NEMO/OPA_SRC/TRA/traadv_tvd.F90
- Timestamp:
- 2005-03-17T15:02:38+01:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r132 r216 14 14 USE oce ! ocean dynamics and active tracers 15 15 USE dom_oce ! ocean space and time domain 16 USE trdtra_oce ! ocean active tracer trends 16 USE trdmod ! ocean active tracers trends 17 USE trdmod_oce ! ocean variables trends 17 18 USE in_out_manager ! I/O manager 18 19 USE dynspg_fsc ! surface pressure gradient … … 61 62 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 62 63 !! 9.0 ! 04-01 (A. de Miranda, G. Madec, J.M. Molines ): advective bbl 64 !! 9.0 ! 08-04 (S. Cravatte) add the i-, j- & k- trends computation 63 65 !!---------------------------------------------------------------------- 64 66 !! * Modules used … … 72 74 zwn => wn ! zwn == wn 73 75 #endif 76 USE trdmod_oce , ztay => tladj, & ! use tladj latter 77 & zsay => sladj, & ! use sladj latter 78 & ztaz => tladi, & ! use ua as workspace 79 & zsaz => sladi ! use ua as workspace 80 74 81 !! * Arguments 75 82 INTEGER, INTENT( in ) :: kt ! ocean time-step … … 77 84 !! * Local declarations 78 85 INTEGER :: ji, jj, jk ! dummy loop indices 79 REAL(wp) :: zta, zsa ! temporary scalar 86 REAL(wp) :: zta, zsa, & ! temporary scalar 87 ztai, ztaj, ztak, & ! " " 88 zsai, zsaj, zsak ! " " 80 89 REAL(wp), DIMENSION (jpi,jpj,jpk) :: & 81 90 zti, ztu, ztv, ztw, & ! temporary workspace 82 zsi, zsu, zsv, zsw ! " " 91 zsi, zsu, zsv, zsw, & ! " " 92 ztdta, ztdsa ! " " 83 93 REAL(wp) :: & 84 94 z2dtt, zbtr, zeu, zev, zew, z2, & ! temporary scalar … … 99 109 ENDIF 100 110 111 ! Save ta and sa trends 112 IF( l_trdtra ) THEN 113 ztdta(:,:,:) = ta(:,:,:) 114 ztdsa(:,:,:) = sa(:,:,:) 115 l_adv = 'tvd' 116 ENDIF 117 101 118 #if defined key_trabbl_adv 102 103 119 ! Advective Bottom boundary layer: add the velocity 104 120 ! ------------------------------------------------- … … 147 163 END DO 148 164 END DO 149 ELSE ! rigid lid : flux set to zero165 ELSE ! rigid lid : flux set to zero 150 166 ztw(:,:,1) = 0.e0 151 167 zsw(:,:,1) = 0.e0 … … 170 186 DO ji = fs_2, fs_jpim1 ! vector opt. 171 187 zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 172 zti(ji,jj,jk) = - ( ztu(ji,jj,jk) - ztu(ji-1,jj ,jk ) & 173 & + ztv(ji,jj,jk) - ztv(ji ,jj-1,jk ) & 174 & + ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1) ) * zbtr 175 zsi(ji,jj,jk) = - ( zsu(ji,jj,jk) - zsu(ji-1,jj ,jk ) & 176 & + zsv(ji,jj,jk) - zsv(ji ,jj-1,jk ) & 177 & + zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1) ) * zbtr 178 END DO 179 END DO 180 END DO 181 188 189 ! i- j- horizontal & k- vertical advective trends 190 ztai = - ( ztu(ji,jj,jk) - ztu(ji-1,jj ,jk ) ) * zbtr 191 ztaj = - ( ztv(ji,jj,jk) - ztv(ji ,jj-1,jk ) ) * zbtr 192 ztak = - ( ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1) ) * zbtr 193 zsai = - ( zsu(ji,jj,jk) - zsu(ji-1,jj ,jk ) ) * zbtr 194 zsaj = - ( zsv(ji,jj,jk) - zsv(ji ,jj-1,jk ) ) * zbtr 195 zsak = - ( zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1) ) * zbtr 196 197 ! total intermediate advective trends 198 zti(ji,jj,jk) = ztai + ztaj + ztak 199 zsi(ji,jj,jk) = zsai + zsaj + zsak 200 END DO 201 END DO 202 END DO 203 204 ! Save the intermediate vertical & j- horizontal advection trends 205 IF( l_trdtra ) THEN 206 DO jk = 1, jpkm1 207 DO jj = 2, jpjm1 208 DO ji = fs_2, fs_jpim1 ! vector opt. 209 zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 210 ztay(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji ,jj-1,jk ) ) * zbtr 211 zsay(ji,jj,jk) = - ( zsv(ji,jj,jk) - zsv(ji ,jj-1,jk ) ) * zbtr 212 ztaz(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1) ) * zbtr 213 zsaz(ji,jj,jk) = - ( zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1) ) * zbtr 214 END DO 215 END DO 216 END DO 217 ENDIF 182 218 183 219 ! update and guess with monotonic sheme … … 246 282 DO jk = 1, jpkm1 247 283 DO jj = 2, jpjm1 248 DO ji = fs_2, fs_jpim1 ! vector opt. 284 DO ji = fs_2, fs_jpim1 ! vector opt. 249 285 zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 250 ta(ji,jj,jk) = ta(ji,jj,jk) & 251 & - ( ztu(ji,jj,jk) - ztu(ji-1,jj ,jk ) & 252 & + ztv(ji,jj,jk) - ztv(ji ,jj-1,jk ) & 253 & + ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1) ) * zbtr 254 sa(ji,jj,jk) = sa(ji,jj,jk) & 255 & - ( zsu(ji,jj,jk) - zsu(ji-1,jj ,jk ) & 256 & + zsv(ji,jj,jk) - zsv(ji ,jj-1,jk ) & 257 & + zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1) ) * zbtr 258 END DO 259 END DO 260 END DO 286 ! i- j- horizontal & k- vertical advective trends 287 ztai = - ( ztu(ji,jj,jk) - ztu(ji-1,jj ,jk )) * zbtr 288 ztaj = - ( ztv(ji,jj,jk) - ztv(ji ,jj-1,jk )) * zbtr 289 ztak = - ( ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1)) * zbtr 290 zsai = - ( zsu(ji,jj,jk) - zsu(ji-1,jj ,jk )) * zbtr 291 zsaj = - ( zsv(ji,jj,jk) - zsv(ji ,jj-1,jk )) * zbtr 292 zsak = - ( zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1)) * zbtr 293 294 ! add them to the general tracer trends 295 ta(ji,jj,jk) = ta(ji,jj,jk) + ztai + ztaj + ztak 296 sa(ji,jj,jk) = sa(ji,jj,jk) + zsai + zsaj + zsak 297 END DO 298 END DO 299 END DO 300 301 ! save the advective trends for diagnostic 302 ! tracers trends 303 IF( l_trdtra ) THEN 304 ! Compute the final vertical & j- horizontal advection trends 305 DO jk = 1, jpkm1 306 DO jj = 2, jpjm1 307 DO ji = fs_2, fs_jpim1 ! vector opt. 308 zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 309 ztay(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji ,jj-1,jk ) ) * zbtr & 310 & + ztay(ji,jj,jk) 311 zsay(ji,jj,jk) = - ( zsv(ji,jj,jk) - zsv(ji ,jj-1,jk ) ) * zbtr & 312 & + zsay(ji,jj,jk) 313 ztaz(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji ,jj ,jk+1) ) * zbtr & 314 & + ztaz(ji,jj,jk) 315 zsaz(ji,jj,jk) = - ( zsw(ji,jj,jk) - zsw(ji ,jj ,jk+1) ) * zbtr & 316 & + zsaz(ji,jj,jk) 317 END DO 318 END DO 319 END DO 320 321 ! horizontal advection: 322 ! make the difference between the new trends ta()/sa() and the 323 ! previous one ztdta()/ztdsa() to have the total advection trends 324 ! to which we substract the vertical trends ztaz()/zsaz() 325 ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) - ztaz(:,:,:) 326 ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) - zsaz(:,:,:) 327 328 ! Add the term tn()/sn()*hdivn() to recover the Uh gradh(T/S) trends 329 ztdta(:,:,:) = ztdta(:,:,:) + tn(:,:,:) * hdivn(:,:,:) 330 ztdsa(:,:,:) = ztdsa(:,:,:) + sn(:,:,:) * hdivn(:,:,:) 331 332 CALL trd_mod(ztdta, ztdsa, jpttdlad, 'TRA', kt) 333 334 ! vertical advection: 335 ! Substract the term tn()/sn()*hdivn() to recover the W gradz(T/S) trends 336 ztaz(:,:,:) = ztaz(:,:,:) - tn(:,:,:) * hdivn(:,:,:) 337 zsaz(:,:,:) = zsaz(:,:,:) - sn(:,:,:) * hdivn(:,:,:) 338 339 CALL trd_mod(ztaz, zsaz, jpttdzad, 'TRA', kt) 340 341 ENDIF 261 342 262 343 IF(l_ctl) THEN
Note: See TracChangeset
for help on using the changeset viewer.