Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r2528 r2715 5 5 !! planetary vorticity trends 6 6 !!====================================================================== 7 !! History : OPA ! 8 !! 5.0 ! 9 !! 6.0 ! 10 !! 8.5 !2002-08 (G. Madec) F90: Free form and module11 !! NEMO 1.0 !2004-02 (G. Madec) vor_een: Original code12 !! - ! 13 !! - ! 14 !! 2.0 ! 15 !! 3.2 ! 16 !! 3.3 ! 7 !! History : OPA ! 1989-12 (P. Andrich) vor_ens: Original code 8 !! 5.0 ! 1991-11 (G. Madec) vor_ene, vor_mix: Original code 9 !! 6.0 ! 1996-01 (G. Madec) s-coord, suppress work arrays 10 !! NEMO 0.5 ! 2002-08 (G. Madec) F90: Free form and module 11 !! 1.0 ! 2004-02 (G. Madec) vor_een: Original code 12 !! - ! 2003-08 (G. Madec) add vor_ctl 13 !! - ! 2005-11 (G. Madec) add dyn_vor (new step architecture) 14 !! 2.0 ! 2006-11 (G. Madec) flux form advection: add metric term 15 !! 3.2 ! 2009-04 (R. Benshila) vvl: correction of een scheme 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 17 !!---------------------------------------------------------------------- 18 18 … … 33 33 USE prtctl ! Print control 34 34 USE in_out_manager ! I/O manager 35 USE lib_mpp 35 36 36 37 IMPLICIT NONE … … 57 58 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 58 59 !! $Id$ 59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)60 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 60 61 !!---------------------------------------------------------------------- 61 62 62 CONTAINS 63 63 … … 71 71 !! and planetary vorticity trends) ('key_trddyn') 72 72 !!---------------------------------------------------------------------- 73 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 74 USE oce, ONLY : ztrdv => sa ! use sa as 3D workspace 75 !! 73 USE oce, ONLY: ztrdu => ta , ztrdv => sa ! (ta,sa) used as 3D workspace 74 ! 76 75 INTEGER, INTENT( in ) :: kt ! ocean time-step index 77 76 !!---------------------------------------------------------------------- 78 77 ! 79 78 ! ! vorticity term 80 79 SELECT CASE ( nvor ) ! compute the vorticity trend and add it to the general trend … … 171 170 ! 172 171 END SELECT 173 172 ! 174 173 ! ! print sum trends (used for debugging) 175 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor - Ua: ', mask1=umask, &174 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor - Ua: ', mask1=umask, & 176 175 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 177 176 ! … … 205 204 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 206 205 !!---------------------------------------------------------------------- 206 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 207 USE wrk_nemo, ONLY: zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3 ! 2D workspace 208 ! 207 209 INTEGER , INTENT(in ) :: kt ! ocean time-step index 208 210 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 210 212 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 211 213 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 212 !! 213 INTEGER :: ji, jj, jk ! dummy loop indices 214 REAL(wp) :: zx1, zy1, zfact2 ! temporary scalars 215 REAL(wp) :: zx2, zy2 ! " " 216 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 217 !!---------------------------------------------------------------------- 214 ! 215 INTEGER :: ji, jj, jk ! dummy loop indices 216 REAL(wp) :: zx1, zy1, zfact2, zx2, zy2 ! local scalars 217 !!---------------------------------------------------------------------- 218 219 IF( wrk_in_use(2, 1,2,3) ) THEN 220 CALL ctl_stop('dyn:vor_ene: requested workspace arrays unavailable') ; RETURN 221 ENDIF 218 222 219 223 IF( kt == nit000 ) THEN … … 280 284 END DO ! End of slab 281 285 ! ! =============== 286 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays') 287 ! 282 288 END SUBROUTINE vor_ene 283 289 … … 314 320 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 315 321 !!---------------------------------------------------------------------- 322 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 323 USE wrk_nemo, ONLY: zwx => wrk_2d_4 , zwy => wrk_2d_5 , zwz => wrk_2d_6 , zww => wrk_2d_7 ! 2D workspace 324 ! 316 325 INTEGER, INTENT(in) :: kt ! ocean timestep index 317 ! !326 ! 318 327 INTEGER :: ji, jj, jk ! dummy loop indices 319 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! temporary scalars 320 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! " " 321 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz, zww ! temporary 3D workspace 322 !!---------------------------------------------------------------------- 328 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! local scalars 329 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! - - 330 !!---------------------------------------------------------------------- 331 332 IF( wrk_in_use(2, 4,5,6,7) ) THEN 333 CALL ctl_stop('dyn:vor_mix: requested workspace arrays unavailable') ; RETURN 334 ENDIF 323 335 324 336 IF( kt == nit000 ) THEN … … 392 404 END DO ! End of slab 393 405 ! ! =============== 406 IF( wrk_not_released(2, 4,5,6,7) ) CALL ctl_stop('dyn:vor_mix: failed to release workspace arrays') 407 ! 394 408 END SUBROUTINE vor_mix 395 409 … … 421 435 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 422 436 !!---------------------------------------------------------------------- 437 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 438 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6 ! 2D workspace 439 ! 423 440 INTEGER , INTENT(in ) :: kt ! ocean time-step index 424 441 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 426 443 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 427 444 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 428 ! !445 ! 429 446 INTEGER :: ji, jj, jk ! dummy loop indices 430 447 REAL(wp) :: zfact1, zuav, zvau ! temporary scalars 431 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 3D workspace432 448 !!---------------------------------------------------------------------- 433 449 450 IF( wrk_in_use(2, 4,5,6) ) THEN 451 CALL ctl_stop('dyn:vor_ens: requested workspace arrays unavailable') ; RETURN 452 END IF 453 434 454 IF( kt == nit000 ) THEN 435 455 IF(lwp) WRITE(numout,*) … … 503 523 END DO ! End of slab 504 524 ! ! =============== 525 IF( wrk_not_released(2, 4,5,6) ) CALL ctl_stop('dyn:vor_ens: failed to release workspace arrays') 526 ! 505 527 END SUBROUTINE vor_ens 506 528 … … 525 547 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 526 548 !!---------------------------------------------------------------------- 549 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 550 USE wrk_nemo, ONLY: zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3 ! 2D workspace 551 USE wrk_nemo, ONLY: ztnw => wrk_2d_4 , ztne => wrk_2d_5 552 USE wrk_nemo, ONLY: ztsw => wrk_2d_6 , ztse => wrk_2d_7 553 #if defined key_vvl 554 USE wrk_nemo, ONLY: ze3f => wrk_3d_1 ! 3D workspace (lk_vvl=T) 555 #endif 556 ! 527 557 INTEGER , INTENT(in ) :: kt ! ocean time-step index 528 558 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 532 562 !! 533 563 INTEGER :: ji, jj, jk ! dummy loop indices 534 REAL(wp) :: zfac12, zua, zva ! temporary scalars 535 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 536 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse ! temporary 3D workspace 537 #if defined key_vvl 538 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3f 539 #else 540 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: ze3f 564 INTEGER :: ierr ! local integer 565 REAL(wp) :: zfac12, zua, zva ! local scalars 566 #if ! defined key_vvl 567 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: ze3f ! lk_vvl=F, ze3f=1/e3f saved one for all 541 568 #endif 542 569 !!---------------------------------------------------------------------- 570 571 IF( wrk_in_use(2, 1,2,3,4,5,6,7) .OR. wrk_in_use(3, 1) ) THEN 572 CALL ctl_stop('dyn:vor_een: requested workspace arrays unavailable') ; RETURN 573 ENDIF 543 574 544 575 IF( kt == nit000 ) THEN … … 546 577 IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 547 578 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 579 IF( .NOT.lk_vvl ) THEN 580 ALLOCATE( ze3f(jpi,jpj,jpk) , STAT=ierr ) 581 IF( lk_mpp ) CALL mpp_sum ( ierr ) 582 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'dyn:vor_een : unable to allocate arrays' ) 583 ENDIF 548 584 ENDIF 549 585 … … 554 590 ze3f(ji,jj,jk) = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 555 591 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) * 0.25 556 IF( ze3f(ji,jj,jk) /= 0. e0 ) ze3f(ji,jj,jk) = 1.e0/ ze3f(ji,jj,jk)592 IF( ze3f(ji,jj,jk) /= 0._wp ) ze3f(ji,jj,jk) = 1._wp / ze3f(ji,jj,jk) 557 593 END DO 558 594 END DO … … 561 597 ENDIF 562 598 563 zfac12 = 1. e0 / 12.e0! Local constant initialization599 zfac12 = 1._wp / 12._wp ! Local constant initialization 564 600 565 601 … … 634 670 END DO ! End of slab 635 671 ! ! =============== 672 IF( wrk_not_released(2, 1,2,3,4,5,6,7) .OR. & 673 wrk_not_released(3, 1) ) CALL ctl_stop('dyn:vor_een: failed to release workspace arrays') 674 ! 636 675 END SUBROUTINE vor_een 637 676 … … 644 683 !! tracer advection schemes 645 684 !!---------------------------------------------------------------------- 646 INTEGER :: ioptio ! temporary integer 685 INTEGER :: ioptio ! local integer 686 !! 647 687 NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 648 688 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.