Changeset 2240
- Timestamp:
- 2010-10-13T10:48:48+02:00 (14 years ago)
- Location:
- branches/DEV_r2106_LOCEAN2010/NEMO
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2106_LOCEAN2010/NEMO/NST_SRC/agrif_opa_interp.F90
r1605 r2240 220 220 DO jj=1,jpj 221 221 ua(1:2,jj,jk) = (zua(1:2,jj,jk)/(rhoy*e2u(1:2,jj))) 222 #if ! defined key_zco223 222 ua(1:2,jj,jk) = ua(1:2,jj,jk) / fse3u(1:2,jj,jk) 224 #endif225 223 END DO 226 224 END DO … … 276 274 DO jj=1,jpj 277 275 va(2,jj,jk) = (zva(2,jj,jk)/(zrhox*e1v(2,jj)))*vmask(2,jj,jk) 278 #if ! defined key_zco279 276 va(2,jj,jk) = va(2,jj,jk) / fse3v(2,jj,jk) 280 #endif281 277 END DO 282 278 END DO … … 297 293 ua(nlci-2:nlci-1,jj,jk) = (zua(nlci-2:nlci-1,jj,jk)/(rhoy*e2u(nlci-2:nlci-1,jj))) 298 294 299 #if ! defined key_zco300 295 ua(nlci-2:nlci-1,jj,jk) = ua(nlci-2:nlci-1,jj,jk) / fse3u(nlci-2:nlci-1,jj,jk) 301 #endif302 296 303 297 END DO … … 357 351 DO jj=1,jpj-1 358 352 va(nlci-1,jj,jk) = (zva(nlci-1,jj,jk)/(zrhox*e1v(nlci-1,jj)))*vmask(nlci-1,jj,jk) 359 #if ! defined key_zco360 353 va(nlci-1,jj,jk) = va(nlci-1,jj,jk) / fse3v(nlci-1,jj,jk) 361 #endif362 354 END DO 363 355 END DO … … 376 368 DO ji=1,jpi 377 369 va(ji,1:2,jk) = (zva(ji,1:2,jk)/(zrhox*e1v(ji,1:2))) 378 #if ! defined key_zco379 370 va(ji,1:2,jk) = va(ji,1:2,jk) / fse3v(ji,1:2,jk) 380 #endif381 371 END DO 382 372 END DO … … 432 422 DO ji=1,jpi 433 423 ua(ji,2,jk) = (zua(ji,2,jk)/(rhoy*e2u(ji,2)))*umask(ji,2,jk) 434 #if ! defined key_zco435 424 ua(ji,2,jk) = ua(ji,2,jk) / fse3u(ji,2,jk) 436 #endif437 425 END DO 438 426 END DO … … 451 439 DO ji=1,jpi 452 440 va(ji,nlcj-2:nlcj-1,jk) = (zva(ji,nlcj-2:nlcj-1,jk)/(zrhox*e1v(ji,nlcj-2:nlcj-1))) 453 #if ! defined key_zco454 441 va(ji,nlcj-2:nlcj-1,jk) = va(ji,nlcj-2:nlcj-1,jk) / fse3v(ji,nlcj-2:nlcj-1,jk) 455 #endif456 442 END DO 457 443 END DO … … 508 494 DO ji=1,jpi 509 495 ua(ji,nlcj-1,jk) = (zua(ji,nlcj-1,jk)/(rhoy*e2u(ji,nlcj-1)))*umask(ji,nlcj-1,jk) 510 #if ! defined key_zco511 496 ua(ji,nlcj-1,jk) = ua(ji,nlcj-1,jk) / fse3u(ji,nlcj-1,jk) 512 #endif513 497 END DO 514 498 END DO … … 535 519 DO ji=i1,i2 536 520 tabres(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk) 537 #if ! defined key_zco538 521 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3u(ji,jj,jk) 539 #endif540 522 END DO 541 523 END DO … … 578 560 DO ji=i1,i2 579 561 tabres(ji,jj,jk) = e1v(ji,jj) * vn(ji,jj,jk) 580 #if ! defined key_zco581 562 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3v(ji,jj,jk) 582 #endif583 563 END DO 584 564 END DO -
branches/DEV_r2106_LOCEAN2010/NEMO/NST_SRC/agrif_opa_sponge.F90
r1300 r2240 130 130 DO jj = 1, jpjm1 131 131 DO ji = 1, jpim1 132 #if defined key_zco133 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj)134 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj)135 #else136 132 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 137 133 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 138 #endif139 134 ztu(ji,jj,jk) = zabe1 * ( tbdiff(ji+1,jj ,jk) - tbdiff(ji,jj,jk) ) 140 135 zsu(ji,jj,jk) = zabe1 * ( sbdiff(ji+1,jj ,jk) - sbdiff(ji,jj,jk) ) … … 146 141 DO jj = 2,jpjm1 147 142 DO ji = 2,jpim1 148 #if defined key_zco149 zbtr = spbtr2(ji,jj)150 #else151 143 zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 152 #endif153 144 ! horizontal diffusive trends 154 145 zta = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & … … 282 273 DO jj = 2, jpjm1 283 274 DO ji = 2, jpim1 ! vector opt. 284 #if defined key_zco285 zbtr = spbtr2(ji,jj)286 hdivdiff(ji,jj,jk) = ( e2u(ji,jj) * ubdiff(ji,jj,jk) &287 - e2u(ji-1,jj ) * ubdiff(ji-1,jj ,jk) &288 & + e1v(ji,jj) * vbdiff(ji,jj,jk) - &289 & e1v(ji ,jj-1) * vbdiff(ji ,jj-1,jk) ) * zbtr290 #else291 275 zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 292 276 hdivdiff(ji,jj,jk) = & … … 297 281 vbdiff(ji,jj,jk) - e1v(ji ,jj-1)* & 298 282 fse3v(ji ,jj-1,jk) * vbdiff(ji ,jj-1,jk) ) * zbtr 299 #endif300 283 END DO 301 284 END DO … … 303 286 DO jj = 1, jpjm1 304 287 DO ji = 1, jpim1 ! vector opt. 305 #if defined key_zco306 zbtr = spbtr3(ji,jj)307 rotdiff(ji,jj,jk) = ( e2v(ji+1,jj ) * vbdiff(ji+1,jj ,jk) - e2v(ji,jj) * vbdiff(ji,jj,jk) &308 & - e1u(ji ,jj+1) * ubdiff(ji ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk) ) &309 & * fmask(ji,jj,jk) * zbtr310 #else311 288 zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk) 312 289 rotdiff(ji,jj,jk) = ( e2v(ji+1,jj ) * vbdiff(ji+1,jj ,jk) - e2v(ji,jj) * vbdiff(ji,jj,jk) & 313 290 & - e1u(ji ,jj+1) * ubdiff(ji ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk) ) & 314 291 & * fmask(ji,jj,jk) * zbtr 315 #endif316 292 END DO 317 293 END DO … … 324 300 DO jj = 2, jpjm1 325 301 DO ji = 2, jpim1 ! vector opt. 326 #if defined key_zco327 ! horizontal diffusive trends328 ze2u = rotdiff (ji,jj,jk)329 ze1v = hdivdiff(ji,jj,jk)330 zua = - ( ze2u - &331 rotdiff (ji,jj-1,jk) ) / e2u(ji,jj) &332 + ( hdivdiff(ji+1,jj,jk) - &333 ze1v ) / e1u(ji,jj)334 335 zva = + ( ze2u - &336 rotdiff (ji-1,jj,jk) ) / e1v(ji,jj) &337 + ( hdivdiff(ji,jj+1,jk) - &338 ze1v ) / e2v(ji,jj)339 #else340 302 ze2u = rotdiff (ji,jj,jk) 341 303 ze1v = hdivdiff(ji,jj,jk) … … 348 310 + ( hdivdiff(ji,jj+1,jk) - ze1v & 349 311 ) / e2v(ji,jj) 350 #endif351 312 352 313 ! add it to the general momentum trends -
branches/DEV_r2106_LOCEAN2010/NEMO/NST_SRC/agrif_opa_update.F90
r1587 r2240 198 198 DO ji=i1,i2 199 199 tabres(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk) 200 #if ! defined key_zco201 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3u(ji,jj,jk)202 #endif203 200 END DO 204 201 END DO … … 211 208 un(ji,jj,jk) = tabres(ji,jj,jk) / (e2u(ji,jj)) 212 209 un(ji,jj,jk) = un(ji,jj,jk) * umask(ji,jj,jk) 213 #if ! defined key_zco214 210 un(ji,jj,jk) = un(ji,jj,jk) / fse3u(ji,jj,jk) 215 #endif216 211 END DO 217 212 END DO … … 240 235 DO ji=i1,i2 241 236 tabres(ji,jj,jk) = e1v(ji,jj) * vn(ji,jj,jk) 242 #if ! defined key_zco243 237 tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3v(ji,jj,jk) 244 #endif245 238 END DO 246 239 END DO … … 253 246 vn(ji,jj,jk) = tabres(ji,jj,jk) / (e1v(ji,jj)) 254 247 vn(ji,jj,jk) = vn(ji,jj,jk) * vmask(ji,jj,jk) 255 #if ! defined key_zco256 248 vn(ji,jj,jk) = vn(ji,jj,jk) / fse3v(ji,jj,jk) 257 #endif258 249 END DO 259 250 END DO -
branches/DEV_r2106_LOCEAN2010/NEMO/NST_SRC/agrif_top_sponge.F90
r1271 r2240 123 123 DO jj = 1, jpjm1 124 124 DO ji = 1, jpim1 125 #if defined key_zco126 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj)127 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj)128 #else129 125 zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 130 126 zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 131 #endif132 127 ztru(ji,jj,jk,jl) = zabe1 * ( trbdiff(ji+1,jj ,jk,jl) - trbdiff(ji,jj,jk,jl) ) 133 128 ztrv(ji,jj,jk,jl) = zabe2 * ( trbdiff(ji ,jj+1,jk,jl) - trbdiff(ji,jj,jk,jl) ) … … 137 132 DO jj = 2,jpjm1 138 133 DO ji = 2,jpim1 139 #if defined key_zco140 zbtr = spbtr2(ji,jj)141 #else142 134 zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 143 #endif144 135 ! horizontal diffusive trends 145 136 ztra = zbtr * ( ztru(ji,jj,jk,jl) - ztru(ji-1,jj,jk,jl) & -
branches/DEV_r2106_LOCEAN2010/NEMO/OFF_SRC/domain.F90
r2053 r2240 239 239 !! - vertical coordinate (gdep., e3.) depending on the 240 240 !! coordinate chosen : 241 !! ln_zco=T z-coordinate (forced if lk_zco)241 !! ln_zco=T z-coordinate 242 242 !! ln_zps=T z-coordinate with partial steps 243 243 !! ln_zco=T s-coordinate … … 268 268 IF( ln_sco ) ioptio = ioptio + 1 269 269 IF ( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 270 IF( lk_zco ) THEN271 IF(lwp) WRITE(numout,*) ' z-coordinate with reduced incore memory requirement'272 IF( ln_zps .OR. ln_sco ) CALL ctl_stop( ' reduced memory with zps or sco option is impossible' )273 ENDIF274 270 275 271 IF( nprint == 1 .AND. lwp ) THEN -
branches/DEV_r2106_LOCEAN2010/NEMO/OFF_SRC/domrea.F90
r2053 r2240 88 88 REAL(wp), DIMENSION(jpi,jpj) :: & 89 89 zprt 90 #if ! defined key_zco91 90 INTEGER :: ik 92 #endif93 91 !!---------------------------------------------------------------------- 94 92 … … 185 183 ENDDO 186 184 ENDDO 187 188 #if ! defined key_zco189 185 190 186 IF( ln_sco ) THEN ! s-coordinate … … 255 251 256 252 ENDIF 257 # endif 253 258 254 IF( ln_zco ) THEN 259 255 ! Vertical coordinates and scales factors -
branches/DEV_r2106_LOCEAN2010/NEMO/OFF_SRC/domrea_dimg.h90
r2053 r2240 262 262 mbathy=zprt*tmask(:,:,1)+1 263 263 264 #if ! defined key_zco265 264 IF( ln_sco ) THEN ! s-coordinate 266 265 ! … … 394 393 READ(inum4,REC=irec) e3w_0(:) 395 394 ENDIF 396 #else397 !398 ! gdep399 irec = irecv(inum4) + (narea - 1 )400 READ(inum4,REC=irec) gdept_0(:)401 irecv(inum4) = irecv(inum4) + jpnij402 403 irec = irecv(inum4) + (narea - 1 )404 READ(inum4,REC=irec) gdepw_0(:)405 irecv(inum4) = irecv(inum4) + jpnij406 !407 ! e3408 irec = irecv(inum4) + (narea - 1 )409 READ(inum4,REC=irec) e3t_0(:)410 irecv(inum4) = irecv(inum4) + jpnij411 412 irec = irecv(inum4) + (narea - 1 )413 READ(inum4,REC=irec) e3w_0(:)414 irecv(inum4) = irecv(inum4) + jpnij415 !416 #endif417 395 ! ! ============================ 418 396 ! ! close the files -
branches/DEV_r2106_LOCEAN2010/NEMO/OFF_SRC/dtadyn.F90
r2082 r2240 568 568 DO jj = 2, jpjm1 569 569 DO ji = fs_2, fs_jpim1 ! vector opt. 570 #if defined key_zco571 zu = pu(ji ,jj ,jk) * umask(ji ,jj ,jk) * e2u(ji ,jj )572 zu1 = pu(ji-1,jj ,jk) * umask(ji-1,jj ,jk) * e2u(ji-1,jj )573 zv = pv(ji ,jj ,jk) * vmask(ji ,jj ,jk) * e1v(ji ,jj )574 zv1 = pv(ji ,jj-1,jk) * vmask(ji ,jj-1,jk) * e1v(ji ,jj-1)575 zet = 1. / ( e1t(ji,jj) * e2t(ji,jj) )576 #else577 570 zu = pu(ji ,jj ,jk) * umask(ji ,jj ,jk) * e2u(ji ,jj ) * fse3u(ji ,jj ,jk) 578 571 zu1 = pu(ji-1,jj ,jk) * umask(ji-1,jj ,jk) * e2u(ji-1,jj ) * fse3u(ji-1,jj ,jk) … … 580 573 zv1 = pv(ji ,jj-1,jk) * vmask(ji ,jj-1,jk) * e1v(ji ,jj-1) * fse3v(ji ,jj-1,jk) 581 574 zet = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 582 #endif583 575 phdiv(ji,jj,jk) = ( zu - zu1 + zv - zv1 ) * zet 584 576 END DO -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/dom_oce.F90
r2239 r2240 120 120 LOGICAL, PUBLIC :: ln_zps = .FALSE. !: z-coordinate - partial step 121 121 LOGICAL, PUBLIC :: ln_sco = .FALSE. !: s-coordinate or hybrid z-s coordinate 122 #if defined key_zco123 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .TRUE. !: z-coordinate flag (1D arrays)124 #else125 LOGICAL, PUBLIC, PARAMETER :: lk_zco = .FALSE. !: z-coordinate flag (3D arrays)126 122 127 123 !! All coordinates … … 133 129 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3vw !: analytical vertical scale factors at VW-- 134 130 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: e3w , e3uw !: W--UW points (m) 135 #endif136 131 #if defined key_vvl 137 132 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .TRUE. !: variable grid flag -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domvvl.F90
r2236 r2240 62 62 ENDIF 63 63 64 IF( lk_zco ) CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl')65 64 66 65 fsdept(:,:,:) = gdept (:,:,:) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domwri.F90
r2004 r2240 168 168 CALL iom_rstput( 0, 0, inum4, 'mbathy', zprt, ktype = jp_i2 ) 169 169 170 #if ! defined key_zco171 170 IF( ln_sco ) THEN ! s-coordinate 172 171 CALL iom_rstput( 0, 0, inum4, 'hbatt', hbatt ) ! ! depth … … 235 234 ENDIF 236 235 237 #endif238 236 239 237 IF( ln_zco ) THEN -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr.F90
r2236 r2240 74 74 !! - vertical coordinate (gdep., e3.) depending on the 75 75 !! coordinate chosen : 76 !! ln_zco=T z-coordinate (forced if lk_zco)76 !! ln_zco=T z-coordinate 77 77 !! ln_zps=T z-coordinate with partial steps 78 78 !! ln_zco=T s-coordinate … … 103 103 IF( ln_sco ) ioptio = ioptio + 1 104 104 IF ( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 105 IF( lk_zco ) THEN106 IF(lwp) WRITE(numout,*) ' z-coordinate with reduced incore memory requirement'107 IF( ln_zps .OR. ln_sco ) CALL ctl_stop( ' reduced memory with zps or sco option is impossible' )108 ENDIF109 105 110 106 ! Build the vertical coordinate system … … 679 675 !! ** Purpose : define the z-coordinate system 680 676 !! 681 !! ** Method : set 3D coord. arrays to reference 1D array if lk_zco=T677 !! ** Method : set 3D coord. arrays to reference 1D array 682 678 !!---------------------------------------------------------------------- 683 679 INTEGER :: jk 684 680 !!---------------------------------------------------------------------- 685 681 ! 686 IF( .NOT.lk_zco ) THEN 687 DO jk = 1, jpk 688 fsdept(:,:,jk) = gdept_0(jk) 689 fsdepw(:,:,jk) = gdepw_0(jk) 690 fsde3w(:,:,jk) = gdepw_0(jk) 691 fse3t (:,:,jk) = e3t_0(jk) 692 fse3u (:,:,jk) = e3t_0(jk) 693 fse3v (:,:,jk) = e3t_0(jk) 694 fse3f (:,:,jk) = e3t_0(jk) 695 fse3w (:,:,jk) = e3w_0(jk) 696 fse3uw(:,:,jk) = e3w_0(jk) 697 fse3vw(:,:,jk) = e3w_0(jk) 698 END DO 699 ENDIF 682 DO jk = 1, jpk 683 fsdept(:,:,jk) = gdept_0(jk) 684 fsdepw(:,:,jk) = gdepw_0(jk) 685 fsde3w(:,:,jk) = gdepw_0(jk) 686 fse3t (:,:,jk) = e3t_0(jk) 687 fse3u (:,:,jk) = e3t_0(jk) 688 fse3v (:,:,jk) = e3t_0(jk) 689 fse3f (:,:,jk) = e3t_0(jk) 690 fse3w (:,:,jk) = e3w_0(jk) 691 fse3uw(:,:,jk) = e3w_0(jk) 692 fse3vw(:,:,jk) = e3w_0(jk) 693 END DO 700 694 ! 701 695 END SUBROUTINE zgr_zco 702 696 703 #if defined key_zco704 !!----------------------------------------------------------------------705 !! 'key_zco' : "pure" zco (gdep & e3 are 1D arrays)706 !!----------------------------------------------------------------------707 SUBROUTINE zgr_zps ! Empty routine708 END SUBROUTINE zgr_zps709 SUBROUTINE zgr_sco ! Empty routine710 END SUBROUTINE zgr_sco711 712 #else713 697 !!---------------------------------------------------------------------- 714 698 !! Default option : zco, zps and/or sco available (gedp & e3 are 3D arrays) … … 1558 1542 END SUBROUTINE zgr_sco 1559 1543 1560 #endif1561 1544 1562 1545 !!====================================================================== -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
r2236 r2240 8 8 !! 3.1 ! 2009-02 (G. Madec, M. Leclair) pure z* coordinate 9 9 !!---------------------------------------------------------------------- 10 #if defined key_zco11 ! reference for pure z-coordinate (1D - no i,j and time dependency)12 # define fsdept_0(i,j,k) gdept_0(k)13 # define fsdepw_0(i,j,k) gdepw_0(k)14 # define fsde3w_0(i,j,k) gdepw_0(k)15 # define fse3t_0(i,j,k) e3t_0(k)16 # define fse3u_0(i,j,k) e3t_0(k)17 # define fse3v_0(i,j,k) e3t_0(k)18 # define fse3f_0(i,j,k) e3t_0(k)19 # define fse3w_0(i,j,k) e3w_0(k)20 # define fse3uw_0(i,j,k) e3w_0(k)21 # define fse3vw_0(i,j,k) e3w_0(k)22 #else23 10 ! reference for s- or zps-coordinate (3D no time dependency) 24 11 # define fsdept_0(i,j,k) gdept(i,j,k) … … 32 19 # define fse3uw_0(i,j,k) e3uw(i,j,k) 33 20 # define fse3vw_0(i,j,k) e3vw(i,j,k) 34 #endif35 21 #if defined key_vvl 36 22 ! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._1) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/divcur.F90
r2236 r2240 54 54 !! - compute the now divergence given by : 55 55 !! hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] ) 56 !! Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the57 56 !! above expression 58 57 !! - apply lateral boundary conditions on hdivn … … 112 111 DO jj = 2, jpjm1 113 112 DO ji = fs_2, fs_jpim1 ! vector opt. 114 #if defined key_zco115 hdivn(ji,jj,jk) = ( e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj ) * un(ji-1,jj ,jk) &116 & + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji ,jj-1) * vn(ji ,jj-1,jk) ) &117 & / ( e1t(ji,jj) * e2t(ji,jj) )118 #else119 113 hdivn(ji,jj,jk) = & 120 114 ( e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj )*fse3u(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 121 115 + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji ,jj-1)*fse3v(ji ,jj-1,jk) * vn(ji ,jj-1,jk) ) & 122 116 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 123 #endif124 117 END DO 125 118 END DO … … 266 259 !! - compute the now divergence given by : 267 260 !! hdivn = 1/(e1t*e2t*e3t) ( di[e2u*e3u un] + dj[e1v*e3v vn] ) 268 !! Note: if lk_zco=T, e3u=e3v=e3t, they are simplified in the269 261 !! above expression 270 262 !! - apply lateral boundary conditions on hdivn … … 319 311 DO jj = 2, jpjm1 320 312 DO ji = fs_2, fs_jpim1 ! vector opt. 321 #if defined key_zco322 hdivn(ji,jj,jk) = ( e2u(ji,jj) * un(ji,jj,jk) - e2u(ji-1,jj ) * un(ji-1,jj ,jk) &323 & + e1v(ji,jj) * vn(ji,jj,jk) - e1v(ji ,jj-1) * vn(ji ,jj-1,jk) ) &324 / ( e1t(ji,jj) * e2t(ji,jj) )325 #else326 313 hdivn(ji,jj,jk) = & 327 314 ( e2u(ji,jj)*fse3u(ji,jj,jk) * un(ji,jj,jk) - e2u(ji-1,jj )*fse3u(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 328 315 + e1v(ji,jj)*fse3v(ji,jj,jk) * vn(ji,jj,jk) - e1v(ji ,jj-1)*fse3v(ji ,jj-1,jk) * vn(ji ,jj-1,jk) ) & 329 316 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 330 #endif331 317 END DO 332 318 END DO -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r1152 r2240 162 162 zuf(ji,jj,jk) = fmask(ji,jj,jk) * ( zcv(ji+1,jj ) - zcv(ji,jj) & 163 163 & - zcu(ji ,jj+1) + zcu(ji,jj) ) & 164 #if defined key_zco165 & / ( e1f(ji,jj)*e2f(ji,jj) )166 #else167 164 & * fse3f(ji,jj,jk) / ( e1f(ji,jj)*e2f(ji,jj) ) 168 #endif169 165 END DO 170 166 END DO … … 173 169 DO jj = 1, jpjm1 174 170 DO ji = 1, fs_jpim1 ! vector opt. 175 #if defined key_zco176 zlu(ji,jj,jk) = e2u(ji,jj) * zlu(ji,jj,jk)177 zlv(ji,jj,jk) = e1v(ji,jj) * zlv(ji,jj,jk)178 #else179 171 zlu(ji,jj,jk) = e2u(ji,jj) * fse3u(ji,jj,jk) * zlu(ji,jj,jk) 180 172 zlv(ji,jj,jk) = e1v(ji,jj) * fse3v(ji,jj,jk) * zlv(ji,jj,jk) 181 #endif182 173 END DO 183 174 END DO … … 186 177 DO jj = 2, jpj 187 178 DO ji = fs_2, jpi ! vector opt. 188 #if defined key_zco189 zbt = e1t(ji,jj) * e2t(ji,jj)190 #else191 179 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 192 #endif193 180 zut(ji,jj,jk) = ( zlu(ji,jj,jk) - zlu(ji-1,jj ,jk) & 194 181 & + zlv(ji,jj,jk) - zlv(ji ,jj-1,jk) ) / zbt … … 210 197 DO jj = 2, jpjm1 211 198 DO ji = fs_2, fs_jpim1 ! vector opt. 212 #if defined key_zco213 ze2u = e2u(ji,jj)214 ze2v = e1v(ji,jj)215 #else216 199 ze2u = e2u(ji,jj) * fse3u(ji,jj,jk) 217 200 ze2v = e1v(ji,jj) * fse3v(ji,jj,jk) 218 #endif219 201 ! horizontal biharmonic diffusive trends 220 202 zua = - ( zuf(ji ,jj,jk) - zuf(ji,jj-1,jk) ) / ze2u & -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r1954 r2240 50 50 !! difu = 1/e1u di[ahmt hdivb] - 1/(e2u*e3u) dj-1[e3f ahmf rotb] 51 51 !! difv = 1/e2v dj[ahmt hdivb] + 1/(e1v*e3v) di-1[e3f ahmf rotb] 52 !! If lk_zco=T, e3f=e3u=e3v, the vertical scale factor are simplified53 52 !! in the rotational part of the diffusion. 54 53 !! Add this before trend to the general trend (ua,va): … … 87 86 DO jj = 2, jpjm1 88 87 DO ji = fs_2, fs_jpim1 ! vector opt. 89 #if defined key_zco90 ! horizontal diffusive trends91 ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)92 ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk)93 zua = - ( ze2u - rotb (ji,jj-1,jk)*fsahmf(ji,jj-1,jk) ) / e2u(ji,jj) &94 + ( hdivb(ji+1,jj,jk)*fsahmt(ji+1,jj,jk) - ze1v ) / e1u(ji,jj)95 96 zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk) ) / e1v(ji,jj) &97 + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v ) / e2v(ji,jj)98 #else99 88 ze2u = rotb (ji,jj,jk)*fsahmf(ji,jj,jk)*fse3f(ji,jj,jk) 100 89 ze1v = hdivb(ji,jj,jk)*fsahmt(ji,jj,jk) … … 105 94 zva = + ( ze2u - rotb (ji-1,jj,jk)*fsahmf(ji-1,jj,jk)*fse3f(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) & 106 95 + ( hdivb(ji,jj+1,jk)*fsahmt(ji,jj+1,jk) - ze1v ) / e2v(ji,jj) 107 #endif108 96 109 97 ! add it to the general momentum trends -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r2236 r2240 148 148 END DO 149 149 ELSE ! partial steps or s-ccordinate 150 # if defined key_zco151 zc = gdept_0(jpkm1)152 # else153 150 zc = MAXVAL( fsdept(:,:,jpkm1) ) 154 # endif155 151 IF( lk_mpp ) CALL mpp_max( zc ) ! max over the global domain 156 152 -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r2236 r2240 180 180 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 181 181 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 182 IF( lk_zco ) THEN183 DO jk = 1, jpkm1184 DO jj = 2, jpjm1185 DO ji = fs_2, fs_jpim1 ! vector opt.186 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)187 END DO188 END DO189 END DO190 ENDIF191 182 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 192 183 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
r2236 r2240 202 202 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 203 203 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 204 IF( lk_zco ) THEN205 DO jk = 1, jpkm1206 DO jj = 2, jpjm1207 DO ji = fs_2, fs_jpim1 ! vector opt.208 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)209 END DO210 END DO211 END DO212 ENDIF213 204 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 214 205 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r2236 r2240 184 184 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 185 185 IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 186 IF( lk_zco ) THEN187 DO jk = 1, jpkm1188 DO jj = 2, jpjm1189 DO ji = fs_2, fs_jpim1 ! vector opt.190 zwy(ji,jj,jk) = zwy(ji,jj,jk) * fse3v(ji,jj,jk)191 END DO192 END DO193 END DO194 ENDIF195 186 IF( jn == jp_tem ) pht_adv(:) = ptr_vj( zwy(:,:,:) ) 196 187 IF( jn == jp_sal ) pst_adv(:) = ptr_vj( zwy(:,:,:) ) -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/traldf_lap.F90
r2104 r2240 57 57 !! difft = 1/(e1t*e2t*e3t) { di-1[ aht e2u*e3u/e1u di(tb) ] 58 58 !! + dj-1[ aht e1v*e3v/e2v dj(tb) ] } 59 !! Note: key_zco defined, the e3t=e3u=e3v, the trend becomes:60 !! difft = 1/(e1t*e2t) { di-1[ aht e2u/e1u di(tb) ]61 !! + dj-1[ aht e1v/e2v dj(tb) ] }62 59 !! Add this trend to the general tracer trend pta : 63 60 !! pta = pta + difft -
branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/TRA/tranxt.F90
r2236 r2240 143 143 ! Leap-Frog + Asselin filter time stepping 144 144 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, 'TRA', tsb, tsn, tsa, jpts ) ! variable volume level (vvl) 145 ELSE ; CALL tra_nxt_fix( kt, 145 ELSE ; CALL tra_nxt_fix( kt, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 146 146 ENDIF 147 147 … … 172 172 173 173 174 SUBROUTINE tra_nxt_fix( kt, ptb, ptn, pta, kjpt )174 SUBROUTINE tra_nxt_fix( kt, cdtype, ptb, ptn, pta, kjpt ) 175 175 !!---------------------------------------------------------------------- 176 176 !! *** ROUTINE tra_nxt_fix *** … … 195 195 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 196 196 !!---------------------------------------------------------------------- 197 INTEGER , INTENT(in ) :: kt ! ocean time-step index198 INTEGER , INTENT(in ) :: kjpt ! number of tracers199 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields200 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! nowtracer fields201 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend202 !!197 INTEGER , INTENT(in ) :: kt ! ocean time-step index 198 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 199 INTEGER , INTENT(in ) :: kjpt ! number of tracers 200 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 201 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 202 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 203 203 INTEGER :: ji, jj, jk, jn ! dummy loop indices 204 204 REAL(wp) :: ztd, ztm ! temporary scalars … … 222 222 ELSE ! general case (Leapfrog + Asselin filter 223 223 ! 224 ! ! ----------------------- !225 IF( ln_dynhpg_imp ) THEN! semi-implicite hpg case !226 ! ! ----------------------- !224 ! ! ----------------------- ! 225 IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN ! semi-implicite hpg case ! 226 ! ! ----------------------- ! 227 227 DO jn = 1, kjpt 228 228 DO jk = 1, jpkm1 … … 317 317 ELSE ! general case (Leapfrog + Asselin filter) 318 318 ! 319 ! ! ----------------------- !320 IF( ln_dynhpg_imp ) THEN! semi-implicite hpg case !321 ! ! ----------------------- !319 ! ! ----------------------- ! 320 IF( ln_dynhpg_imp .AND. cdtype == 'TRA' ) THEN ! semi-implicite hpg case ! 321 ! ! ----------------------- ! 322 322 DO jn = 1, kjpt 323 323 DO jk = 1, jpkm1 -
branches/DEV_r2106_LOCEAN2010/NEMO/TOP_SRC/TRP/trcnxt.F90
r2237 r2240 123 123 ! Leap-Frog + Asselin filter time stepping 124 124 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, 'TRC', trb, trn, tra, jptra ) ! variable volume level (vvl) 125 ELSE ; CALL tra_nxt_fix( kt, 125 ELSE ; CALL tra_nxt_fix( kt, 'TRC', trb, trn, tra, jptra ) ! fixed volume level 126 126 ENDIF 127 127
Note: See TracChangeset
for help on using the changeset viewer.