Changeset 216 for trunk/NEMO/OPA_SRC/DYN/dynvor.F90
- Timestamp:
- 2005-03-17T15:02:38+01:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynvor.F90
r110 r216 14 14 !!---------------------------------------------------------------------- 15 15 !! * Modules used 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE in_out_manager ! I/O manager 19 USE trddyn_oce ! ocean momentum trends 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE in_out_manager ! I/O manager 19 USE trdmod ! ocean dynamics trends 20 USE trdmod_oce ! ocean variables trends 20 21 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 21 22 … … 75 76 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 76 77 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 77 !!---------------------------------------------------------------------- 78 !! 9.0 ! 04-08 (C. Talandier) New trends organization 79 !!---------------------------------------------------------------------- 80 !! * Modules used 81 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 82 ztdva => sa ! use sa as 3D workspace 83 78 84 !! * Arguments 79 85 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 86 92 REAL(wp), DIMENSION(jpi,jpj) :: & 87 93 zwx, zwy, zwz ! temporary workspace 88 #if defined key_trddyn || defined key_trd_vor 89 REAL(wp) :: & 90 zcu, zcv, zce3 ! " " 91 #endif 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 95 zcu, zcv ! " " 92 96 !!---------------------------------------------------------------------- 93 97 … … 100 104 ! Local constant initialization 101 105 zfact2 = 0.5 * 0.5 106 zcu (:,:,:) = 0.e0 107 zcv (:,:,:) = 0.e0 108 109 ! Save ua and va trends 110 IF( l_trddyn ) THEN 111 ztdua(:,:,:) = ua(:,:,:) 112 ztdva(:,:,:) = va(:,:,:) 113 zcu(:,:,:) = 0.e0 114 zcv(:,:,:) = 0.e0 115 ENDIF 102 116 103 117 ! ! =============== … … 129 143 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 130 144 va(ji,jj,jk) = va(ji,jj,jk) + zva 131 # if defined key_trddyn || defined key_trd_vor132 # if defined key_s_coord133 zce3= ff(ji,jj) / fse3f(ji,jj,jk)134 zcu = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) / fse3f(ji,jj-1,jk) * zy1 + zce3 * zy2 )135 zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) / fse3f(ji-1,jj,jk) * zx1 + zce3 * zx2 )136 # else137 zcu = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) * zy1 + ff(ji,jj) * zy2 )138 zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) * zx1 + ff(ji,jj) * zx2 )139 # endif140 utrd(ji,jj,jk,3) = zua - zcu141 vtrd(ji,jj,jk,3) = zva - zcv142 utrd(ji,jj,jk,4) = zcu143 vtrd(ji,jj,jk,4) = zcv144 # endif145 145 END DO 146 146 END DO … … 148 148 END DO ! End of slab 149 149 ! ! =============== 150 151 ! save the relative & planetary vorticity trends for diagnostic 152 ! momentum trends 153 IF( l_trddyn ) THEN 154 ! Compute the planetary vorticity term trend 155 ! ! =============== 156 DO jk = 1, jpkm1 ! Horizontal slab 157 ! ! =============== 158 DO jj = 2, jpjm1 159 DO ji = fs_2, fs_jpim1 ! vector opt. 160 zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 161 zy2 = zwy(ji,jj ) + zwy(ji+1,jj ) 162 zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 163 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 164 # if defined key_s_coord 165 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) / fse3f(ji,jj-1,jk) * zy1 & 166 & + ff(ji ,jj ) / fse3f(ji,jj ,jk) * zy2 ) 167 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) / fse3f(ji-1,jj,jk) * zx1 & 168 & + ff(ji ,jj ) / fse3f(ji ,jj,jk) * zx2 ) 169 # else 170 zcu(ji,jj,jk) = zfact2 / e1u(ji,jj) * ( ff(ji ,jj-1) * zy1 + ff(ji,jj) * zy2 ) 171 zcv(ji,jj,jk) =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj ) * zx1 + ff(ji,jj) * zx2 ) 172 # endif 173 END DO 174 END DO 175 ! ! =============== 176 END DO ! End of slab 177 ! ! =============== 178 179 ! Compute the relative vorticity term trend 180 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 181 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 182 183 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 184 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 185 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 186 ENDIF 150 187 151 188 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 194 231 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 195 232 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 196 !!---------------------------------------------------------------------- 233 !! 9.0 ! 04-08 (C. Talandier) New trends organization 234 !!---------------------------------------------------------------------- 235 !! * Modules used 236 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 237 ztdva => sa ! use sa as 3D workspace 197 238 !! * Arguments 198 239 INTEGER, INTENT( in ) :: kt ! ocean timestep index … … 205 246 REAL(wp), DIMENSION(jpi,jpj) :: & 206 247 zwx, zwy, zwz, zww ! temporary workspace 248 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 249 zcu, zcv ! " " 207 250 !!---------------------------------------------------------------------- 208 251 … … 216 259 zfact1 = 0.5 * 0.25 217 260 zfact2 = 0.5 * 0.5 261 262 ! Save ua and va trends 263 IF( l_trddyn ) THEN 264 ztdua(:,:,:) = ua(:,:,:) 265 ztdva(:,:,:) = va(:,:,:) 266 zcu(:,:,:) = 0.e0 267 zcv(:,:,:) = 0.e0 268 ENDIF 218 269 219 270 ! ! =============== … … 252 303 ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 253 304 va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva 254 # if defined key_trddyn || defined key_trd_vor255 utrd(ji,jj,jk,3) = zua256 vtrd(ji,jj,jk,3) = zva257 utrd(ji,jj,jk,4) = zcua258 vtrd(ji,jj,jk,4) = zcva259 # endif260 305 END DO 261 306 END DO … … 263 308 END DO ! End of slab 264 309 ! ! =============== 310 311 ! save the relative & planetary vorticity trends for diagnostic 312 ! momentum trends 313 IF( l_trddyn ) THEN 314 ! Compute the planetary vorticity term trend 315 ! ! =============== 316 DO jk = 1, jpkm1 ! Horizontal slab 317 ! ! =============== 318 DO jj = 2, jpjm1 319 DO ji = fs_2, fs_jpim1 ! vector opt. 320 zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj) 321 zy2 = ( zwy(ji,jj ) + zwy(ji+1,jj ) ) / e1u(ji,jj) 322 zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj) 323 zx2 = ( zwx(ji ,jj) + zwx(ji ,jj+1) ) / e2v(ji,jj) 324 ! energy conserving formulation for planetary vorticity term 325 zcu(ji,jj,jk) = zfact2 * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 326 zcv(ji,jj,jk) =-zfact2 * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 327 END DO 328 END DO 329 ! ! =============== 330 END DO ! End of slab 331 ! ! =============== 332 333 ! Compute the relative vorticity term trend 334 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 335 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 336 337 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 338 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 339 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 340 ENDIF 265 341 266 342 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 304 380 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 305 381 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 382 !! 9.0 ! 04-08 (C. Talandier) New trends organization 306 383 !!---------------------------------------------------------------------- 307 384 !! * modules used … … 316 393 zfact1, zua, zva, zuav, zvau ! temporary scalars 317 394 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 318 zwz ! temporary workspace 319 # if defined key_trddyn || defined key_trd_vor 320 REAL(wp) :: & 321 zcu, zcv, zce3 ! temporary scalars 322 # endif 395 zcu, zcv, zwz, & ! temporary workspace 396 ztdua, ztdva ! temporary workspace 323 397 !!---------------------------------------------------------------------- 324 398 … … 331 405 ! Local constant initialization 332 406 zfact1 = 0.5 * 0.25 407 408 ! Save ua and va trends 409 IF( l_trddyn ) THEN 410 ztdua(:,:,:) = ua(:,:,:) 411 ztdva(:,:,:) = va(:,:,:) 412 zcu(:,:,:) = 0.e0 413 zcv(:,:,:) = 0.e0 414 ENDIF 333 415 334 416 ! ! =============== … … 371 453 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 372 454 va(ji,jj,jk) = va(ji,jj,jk) + zva 373 374 # if defined key_trddyn || defined key_trd_vor375 # if defined key_s_coord376 zce3 = ff(ji,jj) / fse3f(ji,jj,jk)377 zcu = zuav * ( ff(ji ,jj-1) / fse3f(ji ,jj-1,jk) + zce3 )378 zcv = zvau * ( ff(ji-1,jj ) / fse3f(ji-1,jj ,jk) + zce3 )379 # else380 zcu = zuav * ( ff(ji ,jj-1) + ff(ji,jj) )381 zcv = zvau * ( ff(ji-1,jj ) + ff(ji,jj) )382 # endif383 384 # if defined key_trddyn_new385 utrd(ji,jj,jk,2) = utrd(ji,jj,jk,2) + zua - zcu386 vtrd(ji,jj,jk,3) = vtrd(ji,jj,jk,3) + zva - zcv387 # else388 utrd(ji,jj,jk,3) = zua - zcu389 vtrd(ji,jj,jk,3) = zva - zcv390 # endif391 utrd(ji,jj,jk,4) = zcu392 vtrd(ji,jj,jk,4) = zcv393 # endif394 455 END DO 395 456 END DO … … 397 458 END DO ! End of slab 398 459 ! ! =============== 460 461 462 ! save the relative & planetary vorticity trends for diagnostic 463 ! momentum trends 464 IF( l_trddyn ) THEN 465 ! Compute the planetary vorticity term trend 466 ! ! =============== 467 DO jk = 1, jpkm1 ! Horizontal slab 468 ! ! =============== 469 DO jj = 2, jpjm1 470 DO ji = fs_2, fs_jpim1 ! vector opt. 471 zuav = zfact1 / e1u(ji,jj) * ( zwy(ji ,jj-1,jk) + zwy(ji+1,jj-1,jk) & 472 & + zwy(ji ,jj ,jk) + zwy(ji+1,jj ,jk) ) 473 zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj ,jk) + zwx(ji-1,jj+1,jk) & 474 & + zwx(ji ,jj ,jk) + zwx(ji ,jj+1,jk) ) 475 # if defined key_s_coord 476 zcu(ji,jj,jk) = zuav * ( ff(ji ,jj-1) / fse3f(ji ,jj-1,jk) & 477 & + ff(ji ,jj ) / fse3f(ji ,jj ,jk) ) 478 zcv(ji,jj,jk) = zvau * ( ff(ji-1,jj ) / fse3f(ji-1,jj ,jk) & 479 & + ff(ji ,jj ) / fse3f(ji ,jj ,jk) ) 480 # else 481 zcu(ji,jj,jk) = zuav * ( ff(ji ,jj-1) + ff(ji,jj) ) 482 zcv(ji,jj,jk) = zvau * ( ff(ji-1,jj ) + ff(ji,jj) ) 483 # endif 484 END DO 485 END DO 486 ! ! =============== 487 END DO ! End of slab 488 ! ! =============== 489 490 ! Compute the relative vorticity term trend 491 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 492 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 493 494 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 495 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 496 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 497 ENDIF 399 498 400 499 IF(l_ctl) THEN ! print sum trends (used for debugging) … … 432 531 !! Arakawa and Lamb 19XX, ??? 433 532 !! History : 434 !! 5.0 ! 04-02 (G. Madec) Original code 435 !!---------------------------------------------------------------------- 533 !! 8.5 ! 04-02 (G. Madec) Original code 534 !! 9.0 ! 04-08 (C. Talandier) New trends organization 535 !!---------------------------------------------------------------------- 536 !! * Modules used 537 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 538 ztdva => sa ! use sa as 3D workspace 539 436 540 !! * Arguments 437 541 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 443 547 REAL(wp), DIMENSION(jpi,jpj) :: & 444 548 zwx, zwy, zwz, & ! temporary workspace 445 ztnw, ztne, ztsw, ztse ! " " 446 #if defined key_trddyn || defined key_trd_vor 447 REAL(wp) :: & 448 zcu, zcv ! " " 449 REAL(wp), DIMENSION(jpi,jpj) :: & 549 ztnw, ztne, ztsw, ztse, & ! " " 450 550 zcor ! potential planetary vorticity (f/e3) 451 #endif 551 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 552 zcu, zcv ! temporary workspace 452 553 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: & 453 554 ze3f … … 474 575 ! Local constant initialization 475 576 zfac12 = 1.e0 / 12.e0 577 578 ! Save ua and va trends 579 IF( l_trddyn ) THEN 580 ztdua(:,:,:) = ua(:,:,:) 581 ztdva(:,:,:) = va(:,:,:) 582 zcu(:,:,:) = 0.e0 583 zcv(:,:,:) = 0.e0 584 ENDIF 476 585 477 586 ! ! =============== … … 485 594 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 486 595 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 487 #if defined key_trddyn || defined key_trd_vor488 596 zcor(:,:) = ff(:,:) * ze3f(:,:,jk) 489 #endif490 597 491 598 ! Compute and add the vorticity term trend … … 516 623 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 517 624 va(ji,jj,jk) = va(ji,jj,jk) + zva 518 # if defined key_trddyn || defined key_trd_vor519 zcu = + zfac12 / e1u(ji,jj) * ( zcor(ji,jj ) * zwy(ji ,jj ) + zcor(ji+1,jj) * zwy(ji+1,jj ) &520 & + zcor(ji,jj ) * zwy(ji ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) )521 zcv = - zfac12 / e2v(ji,jj) * ( zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji ,jj+1) &522 & + zcor(ji,jj ) * zwx(ji-1,jj ) + zcor(ji,jj ) * zwx(ji ,jj ) )523 utrd(ji,jj,jk,3) = zua - zcu524 vtrd(ji,jj,jk,3) = zva - zcv525 utrd(ji,jj,jk,4) = zcu526 vtrd(ji,jj,jk,4) = zcv527 # endif528 625 END DO 529 626 END DO … … 531 628 END DO ! End of slab 532 629 ! ! =============== 630 631 ! save the relative & planetary vorticity trends for diagnostic 632 ! momentum trends 633 IF( l_trddyn ) THEN 634 ! Compute the planetary vorticity term trend 635 ! ! =============== 636 DO jk = 1, jpkm1 ! Horizontal slab 637 ! ! =============== 638 DO jj = 2, jpjm1 639 DO ji = fs_2, fs_jpim1 ! vector opt. 640 zcu(ji,jj,jk) = + zfac12 / e1u(ji,jj) * ( zcor(ji,jj ) * zwy(ji ,jj ) + zcor(ji+1,jj) * zwy(ji+1,jj ) & 641 & + zcor(ji,jj ) * zwy(ji ,jj-1) + zcor(ji+1,jj) * zwy(ji+1,jj-1) ) 642 zcv(ji,jj,jk) = - zfac12 / e2v(ji,jj) * ( zcor(ji,jj+1) * zwx(ji-1,jj+1) + zcor(ji,jj+1) * zwx(ji ,jj+1) & 643 & + zcor(ji,jj ) * zwx(ji-1,jj ) + zcor(ji,jj ) * zwx(ji ,jj ) ) 644 END DO 645 END DO 646 ! ! =============== 647 END DO ! End of slab 648 ! ! =============== 649 650 ! Compute the relative vorticity term trend 651 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) - zcu(:,:,:) 652 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) - zcv(:,:,:) 653 654 CALL trd_mod(zcu , zcv , jpdtdpvo, 'DYN', kt) 655 CALL trd_mod(zcu , zcv , jpdtddat, 'DYN', kt) 656 CALL trd_mod(ztdua, ztdva, jpdtdrvo, 'DYN', kt) 657 ENDIF 533 658 534 659 IF(l_ctl) THEN ! print sum trends (used for debugging)
Note: See TracChangeset
for help on using the changeset viewer.