Changeset 503 for trunk/NEMO/OPA_SRC/DYN/dynvor.F90
- Timestamp:
- 2006-09-27T10:52:29+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynvor.F90
r474 r503 5 5 !! planetary vorticity trends 6 6 !!====================================================================== 7 !! History : 1.0 ! 89-12 (P. Andrich) vor_ens: Original code 8 !! 5.0 ! 91-11 (G. Madec) vor_ene, vor_mix: Original code 9 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 10 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 11 !! 8.5 ! 04-02 (G. Madec) vor_een: Original code 12 !! 9.0 ! 03-08 (G. Madec) vor_ctl: Original code 13 !! 9.0 ! 05-11 (G. Madec) dyn_vor: Original code (new step architecture) 14 !!---------------------------------------------------------------------- 7 15 8 16 !!---------------------------------------------------------------------- … … 14 22 !! vor_ctl : control of the different vorticity option 15 23 !!---------------------------------------------------------------------- 16 !! * Modules used 17 USE oce ! ocean dynamics and tracers 18 USE dom_oce ! ocean space and time domain 19 USE in_out_manager ! I/O manager 20 USE trdmod ! ocean dynamics trends 21 USE trdmod_oce ! ocean variables trends 22 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 23 USE prtctl ! Print control 24 USE oce ! ocean dynamics and tracers 25 USE dom_oce ! ocean space and time domain 26 USE trdmod ! ocean dynamics trends 27 USE trdmod_oce ! ocean variables trends 28 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 29 USE prtctl ! Print control 30 USE in_out_manager ! I/O manager 24 31 25 32 IMPLICIT NONE 26 33 PRIVATE 27 34 28 !! * Routine accessibility 29 PUBLIC dyn_vor ! routine called by step.F90 30 31 !! * Shared module variables 35 PUBLIC dyn_vor ! routine called by step.F90 36 37 !!* Namelist nam_dynvor: vorticity term 32 38 LOGICAL, PUBLIC :: ln_dynvor_ene = .FALSE. !: energy conserving scheme 33 39 LOGICAL, PUBLIC :: ln_dynvor_ens = .TRUE. !: enstrophy conserving scheme 34 40 LOGICAL, PUBLIC :: ln_dynvor_mix = .FALSE. !: mixed scheme 35 LOGICAL, PUBLIC :: ln_dynvor_een = .FALSE. !: energy and enstrophy conserving scheme 36 37 !! * module variables 38 INTEGER :: & 39 nvor = 0 ! type of vorticity trend used 41 LOGICAL, PUBLIC :: ln_dynvor_een = .FALSE. !: energy and enstrophy conserving scheme 42 NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 43 44 INTEGER :: nvor = 0 ! type of vorticity trend used 40 45 41 46 !! * Substitutions … … 43 48 # include "vectopt_loop_substitute.h90" 44 49 !!---------------------------------------------------------------------- 45 !! OPA 9.0 , LOCEAN-IPSL (2005) 50 !! OPA 9.0 , LOCEAN-IPSL (2006) 51 !! $Header$ 52 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 46 53 !!---------------------------------------------------------------------- 47 54 … … 54 61 !! 55 62 !! ** Action : - Update (ua,va) with the now vorticity term trend 56 !! - save the trends in ( utrd,vtrd) in 2 parts (relative63 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative 57 64 !! and planetary vorticity trends) ('key_trddyn') 58 !! 59 !! History : 60 !! 9.0 ! 05-11 (G. Madec) Original code 61 !!---------------------------------------------------------------------- 62 USE oce, ONLY : ztrdu => ta, & ! use ta as 3D workspace 63 ztrdv => sa ! use sa as 3D workspace 64 65 !! * Arguments 66 INTEGER, INTENT( in ) :: kt ! ocean time-step index 65 !!---------------------------------------------------------------------- 66 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 67 USE oce, ONLY : ztrdv => sa ! use sa as 3D workspace 68 !! 69 INTEGER, INTENT( in ) :: kt ! ocean time-step index 67 70 !!---------------------------------------------------------------------- 68 71 … … 74 77 CASE ( -1 ) ! esopa: test all possibility with control print 75 78 CALL vor_ene( kt, 'TOT', ua, va ) 76 IF(ln_ctl)CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, &77 & 79 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 80 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 78 81 CALL vor_ens( kt, 'TOT', ua, va ) 79 IF(ln_ctl)CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, &80 & 82 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 83 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 81 84 CALL vor_mix( kt ) 82 IF(ln_ctl)CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, &83 & 85 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 86 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 84 87 CALL vor_een( kt, 'TOT', ua, va ) 85 IF(ln_ctl)CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, &86 & 88 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 89 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 87 90 88 91 CASE ( 0 ) ! energy conserving scheme … … 93 96 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 94 97 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 95 CALL trd_mod( ztrdu, ztrdv, jpd tdrvo, 'DYN', kt )98 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 96 99 ztrdu(:,:,:) = ua(:,:,:) 97 100 ztrdv(:,:,:) = va(:,:,:) … … 99 102 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 100 103 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 101 CALL trd_mod( ztrdu, ztrdu, jpd tdpvo, 'DYN', kt )102 CALL trd_mod( ztrdu, ztrdv, jpd tddat, 'DYN', kt )104 CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 105 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 103 106 ELSE 104 107 CALL vor_ene( kt, 'TOT', ua, va ) ! total vorticity … … 112 115 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 113 116 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 114 CALL trd_mod( ztrdu, ztrdv, jpd tdrvo, 'DYN', kt )117 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 115 118 ztrdu(:,:,:) = ua(:,:,:) 116 119 ztrdv(:,:,:) = va(:,:,:) … … 118 121 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 119 122 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 120 CALL trd_mod( ztrdu, ztrdu, jpd tdpvo, 'DYN', kt )121 CALL trd_mod( ztrdu, ztrdv, jpd tddat, 'DYN', kt )123 CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 124 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 122 125 ELSE 123 126 CALL vor_ens( kt, 'TOT', ua, va ) ! total vorticity … … 131 134 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 132 135 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 133 CALL trd_mod( ztrdu, ztrdv, jpd tdrvo, 'DYN', kt )136 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 134 137 ztrdu(:,:,:) = ua(:,:,:) 135 138 ztrdv(:,:,:) = va(:,:,:) … … 137 140 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 138 141 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 139 CALL trd_mod( ztrdu, ztrdu, jpd tdpvo, 'DYN', kt )140 CALL trd_mod( ztrdu, ztrdv, jpd tddat, 'DYN', kt )142 CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 143 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 141 144 ELSE 142 145 CALL vor_mix( kt ) ! total vorticity (mix=ens-ene) … … 150 153 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 151 154 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 152 CALL trd_mod( ztrdu, ztrdv, jpd tdrvo, 'DYN', kt )155 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 153 156 ztrdu(:,:,:) = ua(:,:,:) 154 157 ztrdv(:,:,:) = va(:,:,:) … … 156 159 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 157 160 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 158 CALL trd_mod( ztrdu, ztrdu, jpd tdpvo, 'DYN', kt )159 CALL trd_mod( ztrdu, ztrdv, jpd tddat, 'DYN', kt )161 CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 162 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 160 163 ELSE 161 164 CALL vor_een( kt, 'TOT', ua, va ) ! total vorticity … … 192 195 !! 193 196 !! ** Action : - Update (ua,va) with the now vorticity term trend 194 !! - save the trends in ( utrd,vtrd) in 2 parts (relative197 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative 195 198 !! and planetary vorticity trends) ('key_trddyn') 196 199 !! 197 !! References : 198 !! Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 199 !! History : 200 !! 5.0 ! 91-11 (G. Madec) Original code 201 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 202 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 203 !! 9.0 ! 04-08 (C. Talandier) New trends organization 204 !!---------------------------------------------------------------------- 205 !! * Arguments 206 INTEGER, INTENT( in ) :: kt ! ocean time-step index 207 CHARACTER(len=3) , INTENT( in ) :: & 208 cd_vor ! define the vorticity considered 209 ! ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 210 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 211 pua, pva ! ???? 212 213 !! * Local declarations 214 INTEGER :: ji, jj, jk ! dummy loop indices 215 REAL(wp) :: & 216 zfact2, & ! temporary scalars 217 zx1, zx2, zy1, zy2 ! " " 218 REAL(wp), DIMENSION(jpi,jpj) :: & 219 zwx, zwy, zwz ! temporary workspace 200 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 201 !!---------------------------------------------------------------------- 202 INTEGER , INTENT(in ) :: kt ! ocean time-step index 203 CHARACTER(len=3) , INTENT(in ) :: cd_vor ! ='COR' (planetary) ; ='VOR' (relative) 204 ! ! ='TOT' (total) 205 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 206 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 207 !! 208 INTEGER :: ji, jj, jk ! dummy loop indices 209 REAL(wp) :: zx1, zy1, zfact2 ! temporary scalars 210 REAL(wp) :: zx2, zy2 ! " " 211 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 220 212 !!---------------------------------------------------------------------- 221 213 … … 234 226 DO jk = 1, jpkm1 ! Horizontal slab 235 227 ! ! =============== 236 237 228 ! Potential vorticity and horizontal fluxes 238 229 ! ----------------------------------------- 239 230 SELECT CASE( cd_vor ) ! vorticity considered 240 CASE ( 'COR' ) ! planetary vorticcity (Coriolis) 241 zwz(:,:) = ff(:,:) 242 CASE ( 'VOR' ) ! relative vorticity 243 zwz(:,:) = rotn(:,:,jk) 244 CASE ( 'TOT' ) ! total vorticity (planetary + relative) 245 zwz(:,:) = rotn(:,:,jk) + ff(:,:) 231 CASE ( 'COR' ) ; zwz(:,:) = ff(:,:) ! planetary vorticity (Coriolis) 232 CASE ( 'VOR' ) ; zwz(:,:) = rotn(:,:,jk) ! relative vorticity 233 CASE ( 'TOT' ) ; zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) ! total vorticity 246 234 END SELECT 247 235 … … 270 258 END DO ! End of slab 271 259 ! ! =============== 272 273 260 END SUBROUTINE vor_ene 274 261 … … 300 287 !! 301 288 !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 302 !! - Save the trends in ( utrd,vtrd) in 2 parts (relative289 !! - Save the trends in (ztrdu,ztrdv) in 2 parts (relative 303 290 !! and planetary vorticity trends) ('key_trddyn') 304 291 !! 305 !! References : 306 !! Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 307 !! History : 308 !! 5.0 ! 91-11 (G. Madec) Original code, enstrophy-energy-combined schemes 309 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 310 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 311 !! 9.0 ! 04-08 (C. Talandier) New trends organization 312 !!---------------------------------------------------------------------- 313 !! * Arguments 314 INTEGER, INTENT( in ) :: kt ! ocean timestep index 315 316 !! * Local declarations 317 INTEGER :: ji, jj, jk ! dummy loop indices 318 REAL(wp) :: & 319 zfact1, zfact2, zua, zva, & ! temporary scalars 320 zcua, zcva, zx1, zx2, zy1, zy2 321 REAL(wp), DIMENSION(jpi,jpj) :: & 322 zwx, zwy, zwz, zww ! temporary workspace 292 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 293 !!---------------------------------------------------------------------- 294 INTEGER, INTENT(in) :: kt ! ocean timestep index 295 !! 296 INTEGER :: ji, jj, jk ! dummy loop indices 297 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! temporary scalars 298 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! " " 299 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz, zww ! temporary 3D workspace 323 300 !!---------------------------------------------------------------------- 324 301 … … 367 344 zcua = zfact2 * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 368 345 zcva =-zfact2 * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 369 346 ! mixed vorticity trend added to the momentum trends 370 347 ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 371 348 va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva … … 375 352 END DO ! End of slab 376 353 ! ! =============== 377 378 354 END SUBROUTINE vor_mix 379 355 … … 400 376 !! 401 377 !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 402 !! - Save the trends in ( utrd,vtrd) in 2 parts (relative378 !! - Save the trends in (ztrdu,ztrdv) in 2 parts (relative 403 379 !! and planetary vorticity trends) ('key_trddyn') 404 380 !! 405 !! References : 406 !! Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 407 !! History : 408 !! 5.0 ! 91-11 (G. Madec) Original code 409 !! 6.0 ! 96-01 (G. Madec) s-coord, suppress work arrays 410 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 411 !! 9.0 ! 04-08 (C. Talandier) New trends organization 412 !!---------------------------------------------------------------------- 413 !! * Arguments 414 INTEGER, INTENT( in ) :: kt ! ocean timestep 415 CHARACTER(len=3) , INTENT( in ) :: & 416 cd_vor ! define the vorticity considered 417 ! ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 418 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 419 pua, pva ! ???? 420 421 !! * Local declarations 422 INTEGER :: ji, jj, jk ! dummy loop indices 423 REAL(wp) :: & 424 zfact1, zuav, zvau ! temporary scalars 425 REAL(wp), DIMENSION(jpi,jpj) :: & 426 zwx, zwy, zwz ! temporary workspace 381 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 382 !!---------------------------------------------------------------------- 383 INTEGER , INTENT(in ) :: kt ! ocean time-step index 384 CHARACTER(len=3) , INTENT(in ) :: cd_vor ! ='COR' (planetary) ; ='VOR' (relative) 385 ! ! ='TOT' (total) 386 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 387 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 388 !! 389 INTEGER :: ji, jj, jk ! dummy loop indices 390 REAL(wp) :: zfact1, zuav, zvau ! temporary scalars 391 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 3D workspace 427 392 !!---------------------------------------------------------------------- 428 393 … … 441 406 DO jk = 1, jpkm1 ! Horizontal slab 442 407 ! ! =============== 443 444 408 ! Potential vorticity and horizontal fluxes 445 409 ! ----------------------------------------- 446 410 SELECT CASE( cd_vor ) ! vorticity considered 447 CASE ( 'COR' ) ! planetary vorticcity (Coriolis) 448 zwz(:,:) = ff(:,:) 449 CASE ( 'VOR' ) ! relative vorticity 450 zwz(:,:) = rotn(:,:,jk) 451 CASE ( 'TOT' ) ! total vorticity (planetary + relative) 452 zwz(:,:) = rotn(:,:,jk) + ff(:,:) 411 CASE ( 'COR' ) ; zwz(:,:) = ff(:,:) ! planetary vorticity (Coriolis) 412 CASE ( 'VOR' ) ; zwz(:,:) = rotn(:,:,jk) ! relative vorticity 413 CASE ( 'TOT' ) ; zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) ! total vorticity 453 414 END SELECT 454 415 … … 470 431 ENDIF 471 432 472 473 433 ! Compute and add the vorticity term trend 474 434 ! ---------------------------------------- … … 476 436 DO ji = fs_2, fs_jpim1 ! vector opt. 477 437 zuav = zfact1 / e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & 478 438 & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) 479 439 zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) & 480 + zwx(ji ,jj ) + zwx(ji ,jj+1) ) 481 440 & + zwx(ji ,jj ) + zwx(ji ,jj+1) ) 482 441 pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) 483 442 pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) … … 487 446 END DO ! End of slab 488 447 ! ! =============== 489 490 448 END SUBROUTINE vor_ens 491 449 … … 509 467 !! 510 468 !! ** Action : - Update (ua,va) with the now vorticity term trend 511 !! - save the trends in ( utrd,vtrd) in 2 parts (relative469 !! - save the trends in (ztrdu,ztrdv) in 2 parts (relative 512 470 !! and planetary vorticity trends) ('key_trddyn') 513 471 !! 514 !! References : 515 !! Arakawa and Lamb 1980, A potential enstrophy and energy conserving 516 !! scheme for the Shallow water equations, 517 !! Monthly Weather Review, vol. 109, p 18-36 518 !! 519 !! History : 520 !! 8.5 ! 04-02 (G. Madec) Original code 521 !! 9.0 ! 04-08 (C. Talandier) New trends organization 522 !!---------------------------------------------------------------------- 523 !! * Arguments 524 INTEGER, INTENT( in ) :: kt ! ocean time-step index 525 CHARACTER(len=3) , INTENT( in ) :: & 526 cd_vor ! define the vorticity considered 527 ! ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 528 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: & 529 pua, pva ! ???? 530 531 !! * Local declarations 532 INTEGER :: ji, jj, jk ! dummy loop indices 533 REAL(wp) :: & 534 zfac12, zua, zva ! temporary scalars 535 REAL(wp), DIMENSION(jpi,jpj) :: & 536 zwx, zwy, zwz, & ! temporary workspace 537 ztnw, ztne, ztsw, ztse ! " " 538 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: & 539 ze3f 472 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 473 !!---------------------------------------------------------------------- 474 INTEGER , INTENT(in ) :: kt ! ocean time-step index 475 CHARACTER(len=3) , INTENT(in ) :: cd_vor ! ='COR' (planetary) ; ='VOR' (relative) 476 ! ! ='TOT' (total) 477 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 478 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 479 !! 480 INTEGER :: ji, jj, jk ! dummy loop indices 481 REAL(wp) :: zfac12, zua, zva ! temporary scalars 482 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 483 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse ! temporary 3D workspace 484 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: ze3f 540 485 !!---------------------------------------------------------------------- 541 486 … … 570 515 ! ----------------------------------------- 571 516 SELECT CASE( cd_vor ) ! vorticity considered 572 CASE ( 'COR' ) ! planetary vorticcity (Coriolis) 573 zwz(:,:) = ff(:,:) * ze3f(:,:,jk) 574 CASE ( 'VOR' ) ! relative vorticity 575 zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 576 CASE ( 'TOT' ) ! total vorticity (planetary + relative) 577 zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 517 CASE ( 'COR' ) ; zwz(:,:) = ff(:,:) * ze3f(:,:,jk) ! planetary vorticity (Coriolis) 518 CASE ( 'VOR' ) ; zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) ! relative vorticity 519 CASE ( 'TOT' ) ; zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) ! total vorticity 578 520 END SELECT 579 521 … … 599 541 END DO 600 542 END DO 601 602 543 DO jj = 2, jpjm1 603 544 DO ji = fs_2, fs_jpim1 ! vector opt. … … 613 554 END DO ! End of slab 614 555 ! ! =============== 615 616 556 END SUBROUTINE vor_een 617 557 … … 623 563 !! ** Purpose : Control the consistency between cpp options for 624 564 !! tracer advection schemes 625 !! 626 !! History : 627 !! 9.0 ! 03-08 (G. Madec) Original code 628 !!---------------------------------------------------------------------- 629 !! * Local declarations 565 !!---------------------------------------------------------------------- 630 566 INTEGER :: ioptio ! temporary integer 631 632 NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 633 !!---------------------------------------------------------------------- 634 635 ! Read Namelist nam_dynvor : Vorticity scheme options 636 ! ------------------------ 637 REWIND ( numnam ) 567 !!---------------------------------------------------------------------- 568 569 REWIND ( numnam ) ! Read Namelist nam_dynvor : Vorticity scheme options 638 570 READ ( numnam, nam_dynvor ) 639 571 640 ! Control of vorticity scheme options 641 ! ----------------------------------- 642 ! Control print 643 IF(lwp) THEN 572 IF(lwp) THEN ! Namelist print 644 573 WRITE(numout,*) 645 574 WRITE(numout,*) 'dyn:vor_ctl : vorticity term : read namelist and control the consistency' 646 575 WRITE(numout,*) '~~~~~~~~~~~' 647 WRITE(numout,*) ' 648 WRITE(numout,*) ' 649 WRITE(numout,*) ' 650 WRITE(numout,*) ' 651 WRITE(numout,*) ' 576 WRITE(numout,*) ' Namelist nam_dynvor : oice of the vorticity term scheme' 577 WRITE(numout,*) ' energy conserving scheme ln_dynvor_ene = ', ln_dynvor_ene 578 WRITE(numout,*) ' enstrophy conserving scheme ln_dynvor_ens = ', ln_dynvor_ens 579 WRITE(numout,*) ' mixed enstrophy/energy conserving scheme ln_dynvor_mix = ', ln_dynvor_mix 580 WRITE(numout,*) ' enstrophy and energy conserving scheme ln_dynvor_een = ', ln_dynvor_een 652 581 ENDIF 653 582 654 ioptio = 0 655 IF( ln_dynvor_ene ) THEN 656 nvor = 0 657 IF(lwp) WRITE(numout,*) 658 IF(lwp) WRITE(numout,*) ' vorticity term : energy conserving scheme' 659 ioptio = ioptio + 1 583 ioptio = 0 ! Control of vorticity scheme options 584 IF( ln_dynvor_ene ) ioptio = ioptio + 1 585 IF( ln_dynvor_ens ) ioptio = ioptio + 1 586 IF( ln_dynvor_mix ) ioptio = ioptio + 1 587 IF( ln_dynvor_een ) ioptio = ioptio + 1 588 IF( lk_esopa ) ioptio = 1 589 590 IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 591 592 ! ! Set nvor 593 IF( ln_dynvor_ene ) nvor = 0 594 IF( ln_dynvor_ens ) nvor = 1 595 IF( ln_dynvor_mix ) nvor = 2 596 IF( ln_dynvor_een ) nvor = 3 597 IF( lk_esopa ) nvor = -1 598 599 IF(lwp) THEN ! Print the choice 600 WRITE(numout,*) 601 IF( nvor == 0 ) WRITE(numout,*) ' vorticity term used : energy conserving scheme' 602 IF( nvor == 1 ) WRITE(numout,*) ' vorticity term used : enstrophy conserving scheme' 603 IF( nvor == 2 ) WRITE(numout,*) ' vorticity term used : mixed enstrophy/energy conserving scheme' 604 IF( nvor == 3 ) WRITE(numout,*) ' vorticity term used : energy and enstrophy conserving scheme' 605 IF( nvor == -1 ) WRITE(numout,*) ' esopa test: use all lateral physics options' 660 606 ENDIF 661 IF( ln_dynvor_ens ) THEN 662 nvor = 1 663 IF(lwp) WRITE(numout,*) 664 IF(lwp) WRITE(numout,*) ' vorticity term : enstrophy conserving scheme' 665 ioptio = ioptio + 1 666 ENDIF 667 IF( ln_dynvor_mix ) THEN 668 nvor = 2 669 IF(lwp) WRITE(numout,*) 670 IF(lwp) WRITE(numout,*) ' vorticity term : mixed enstrophy/energy conserving scheme' 671 ioptio = ioptio + 1 672 ENDIF 673 IF( ln_dynvor_een ) THEN 674 nvor = 3 675 IF(lwp) WRITE(numout,*) 676 IF(lwp) WRITE(numout,*) ' vorticity term : energy and enstrophy conserving scheme' 677 ioptio = ioptio + 1 678 ENDIF 679 IF( ioptio /= 1 .AND. .NOT. lk_esopa ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 680 IF( lk_esopa ) THEN 681 nvor = -1 682 IF(lwp ) WRITE(numout,*) ' esopa test: use all lateral physics options' 683 ENDIF 684 IF(lwp) WRITE(numout,*) ' choice of vor_... nvor = ', nvor 685 607 ! 686 608 END SUBROUTINE vor_ctl 687 609 688 !!==============================================================================610 !!============================================================================== 689 611 END MODULE dynvor
Note: See TracChangeset
for help on using the changeset viewer.