Changeset 10893
- Timestamp:
- 2019-04-25T12:05:42+02:00 (6 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynadv.F90
r10877 r10893 75 75 SELECT CASE( n_dynadv ) !== compute advection trend and add it to general trend ==! 76 76 CASE( np_VEC_c2 ) 77 CALL dyn_keg ( kt, nn_dynkeg, Kmm, puu, pvv, Krhs ) ! vector form : horizontal gradient of kinetic energy78 CALL dyn_zad ( kt, Kmm, puu, pvv, Krhs ) ! vector form : vertical advection77 CALL dyn_keg ( kt, nn_dynkeg, Kmm, puu, pvv, Krhs ) ! vector form : horizontal gradient of kinetic energy 78 CALL dyn_zad ( kt, Kmm, puu, pvv, Krhs ) ! vector form : vertical advection 79 79 CASE( np_FLX_c2 ) 80 CALL dyn_adv_cen2( kt, Kmm, puu, pvv, Krhs )! 2nd order centered scheme80 CALL dyn_adv_cen2( kt, Kmm, puu, pvv, Krhs ) ! 2nd order centered scheme 81 81 CASE( np_FLX_ubs ) 82 CALL dyn_adv_ubs ( kt, Kbb, Kmm, puu, pvv, Krhs )! 3rd order UBS scheme (UP3)82 CALL dyn_adv_ubs ( kt, Kbb, Kmm, puu, pvv, Krhs ) ! 3rd order UBS scheme (UP3) 83 83 END SELECT 84 84 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynkeg.F90
r10877 r10893 57 57 !! * kscheme = nkeg_HW : Hollingsworth correction following 58 58 !! Arakawa (2001). The now horizontal kinetic energy is given by: 59 !! zhke = 1/6 [ mi-1( 2 * un^2 + (( puu(j+1,Kmm)+puu(j-1,Kmm))/2)^2 )60 !! + mj-1( 2 * vn^2 + (( pvv(i+1,Kmm)+pvv(i-1,Kmm))/2)^2 ) ]59 !! zhke = 1/6 [ mi-1( 2 * un^2 + ((u(j+1)+u(j-1))/2)^2 ) 60 !! + mj-1( 2 * vn^2 + ((v(i+1)+v(i-1))/2)^2 ) ] 61 61 !! 62 62 !! Take its horizontal gradient and add it to the general momentum 63 !! trend (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)).64 !! puu(:,:,:,Krhs) = puu(:,:,:,Krhs) - 1/e1u di[ zhke ]65 !! pvv(:,:,:,Krhs) = pvv(:,:,:,Krhs) - 1/e2v dj[ zhke ]63 !! trend. 64 !! u(rhs) = u(rhs) - 1/e1u di[ zhke ] 65 !! v(rhs) = v(rhs) - 1/e2v dj[ zhke ] 66 66 !! 67 67 !! ** Action : - Update the (puu(:,:,:,Krhs), pvv(:,:,:,Krhs)) with the hor. ke gradient trend -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynvor.F90
r10877 r10893 205 205 !! where rvor is the relative vorticity at f-point 206 206 !! 207 !! ** Action : - Update (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now vorticity term trend207 !! ** Action : - Update (pu_rhs,pv_rhs) with the now vorticity term trend 208 208 !!---------------------------------------------------------------------- 209 209 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 325 325 326 326 327 SUBROUTINE vor_ene( kt, Kmm, kvor, pu _mm, pv_mm, pu_rhs, pv_rhs )327 SUBROUTINE vor_ene( kt, Kmm, kvor, pu, pv, pu_rhs, pv_rhs ) 328 328 !!---------------------------------------------------------------------- 329 329 !! *** ROUTINE vor_ene *** … … 341 341 !! where rvor is the relative vorticity 342 342 !! 343 !! ** Action : - Update (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now vorticity term trend343 !! ** Action : - Update (pu_rhs,pv_rhs) with the now vorticity term trend 344 344 !! 345 345 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. … … 348 348 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 349 349 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 350 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu _mm, pv_mm! now velocities350 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 351 351 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 352 352 ! … … 372 372 DO jj = 1, jpjm1 373 373 DO ji = 1, fs_jpim1 ! vector opt. 374 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv _mm(ji+1,jj ,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &375 & - e1u(ji ,jj+1) * pu _mm(ji ,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) * r1_e1e2f(ji,jj)374 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 375 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 376 376 END DO 377 377 END DO … … 379 379 DO jj = 1, jpjm1 380 380 DO ji = 1, fs_jpim1 ! vector opt. 381 zwz(ji,jj) = ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &382 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)381 zwz(ji,jj) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 382 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 383 383 END DO 384 384 END DO … … 386 386 DO jj = 1, jpjm1 387 387 DO ji = 1, fs_jpim1 ! vector opt. 388 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj) * pv _mm(ji+1,jj,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &389 & - e1u(ji,jj+1) * pu _mm(ji,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) * r1_e1e2f(ji,jj)388 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 389 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 390 390 END DO 391 391 END DO … … 393 393 DO jj = 1, jpjm1 394 394 DO ji = 1, fs_jpim1 ! vector opt. 395 zwz(ji,jj) = ff_f(ji,jj) + ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &396 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)395 zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 396 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 397 397 END DO 398 398 END DO … … 411 411 IF( ln_sco ) THEN 412 412 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 413 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu _mm(:,:,jk)414 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv _mm(:,:,jk)413 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 414 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 415 415 ELSE 416 zwx(:,:) = e2u(:,:) * pu _mm(:,:,jk)417 zwy(:,:) = e1v(:,:) * pv _mm(:,:,jk)416 zwx(:,:) = e2u(:,:) * pu(:,:,jk) 417 zwy(:,:) = e1v(:,:) * pv(:,:,jk) 418 418 ENDIF 419 419 ! !== compute and add the vorticity term trend =! … … 434 434 435 435 436 SUBROUTINE vor_ens( kt, Kmm, kvor, pu _mm, pv_mm, pu_rhs, pv_rhs )436 SUBROUTINE vor_ens( kt, Kmm, kvor, pu, pv, pu_rhs, pv_rhs ) 437 437 !!---------------------------------------------------------------------- 438 438 !! *** ROUTINE vor_ens *** … … 447 447 !! voru = 1/e1u mj-1[ (rvor+f)/e3f ] mj-1[ mi(e1v*e3v pvv(:,:,:,Kmm)) ] 448 448 !! vorv = 1/e2v mi-1[ (rvor+f)/e3f ] mi-1[ mj(e2u*e3u puu(:,:,:,Kmm)) ] 449 !! Add this trend to the general momentum trend (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)):450 !! ( puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) = (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) + ( voru , vorv )451 !! 452 !! ** Action : - Update (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)) arrays with the now vorticity term trend449 !! Add this trend to the general momentum trend: 450 !! (u(rhs),v(Krhs)) = (u(rhs),v(Krhs)) + ( voru , vorv ) 451 !! 452 !! ** Action : - Update (pu_rhs,pv_rhs)) arrays with the now vorticity term trend 453 453 !! 454 454 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. … … 457 457 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 458 458 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 459 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu _mm, pv_mm! now velocities459 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 460 460 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 461 461 ! … … 480 480 DO jj = 1, jpjm1 481 481 DO ji = 1, fs_jpim1 ! vector opt. 482 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv _mm(ji+1,jj ,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &483 & - e1u(ji ,jj+1) * pu _mm(ji ,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) * r1_e1e2f(ji,jj)482 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 483 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 484 484 END DO 485 485 END DO … … 487 487 DO jj = 1, jpjm1 488 488 DO ji = 1, fs_jpim1 ! vector opt. 489 zwz(ji,jj) = ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &490 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)489 zwz(ji,jj) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 490 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 491 491 END DO 492 492 END DO … … 494 494 DO jj = 1, jpjm1 495 495 DO ji = 1, fs_jpim1 ! vector opt. 496 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv _mm(ji+1,jj ,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &497 & - e1u(ji ,jj+1) * pu _mm(ji ,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) * r1_e1e2f(ji,jj)496 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 497 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 498 498 END DO 499 499 END DO … … 501 501 DO jj = 1, jpjm1 502 502 DO ji = 1, fs_jpim1 ! vector opt. 503 zwz(ji,jj) = ff_f(ji,jj) + ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &504 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)503 zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 504 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 505 505 END DO 506 506 END DO … … 519 519 IF( ln_sco ) THEN !== horizontal fluxes ==! 520 520 zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 521 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu _mm(:,:,jk)522 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv _mm(:,:,jk)521 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 522 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 523 523 ELSE 524 zwx(:,:) = e2u(:,:) * pu _mm(:,:,jk)525 zwy(:,:) = e1v(:,:) * pv _mm(:,:,jk)524 zwx(:,:) = e2u(:,:) * pu(:,:,jk) 525 zwy(:,:) = e1v(:,:) * pv(:,:,jk) 526 526 ENDIF 527 527 ! !== compute and add the vorticity term trend =! … … 542 542 543 543 544 SUBROUTINE vor_een( kt, Kmm, kvor, pu _mm, pv_mm, pu_rhs, pv_rhs )544 SUBROUTINE vor_een( kt, Kmm, kvor, pu, pv, pu_rhs, pv_rhs ) 545 545 !!---------------------------------------------------------------------- 546 546 !! *** ROUTINE vor_een *** … … 553 553 !! both the horizontal kinetic energy and the potential enstrophy 554 554 !! when horizontal divergence is zero (see the NEMO documentation) 555 !! Add this trend to the general momentum trend (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)).556 !! 557 !! ** Action : - Update (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now vorticity term trend555 !! Add this trend to the general momentum trend (pu_rhs,pv_rhs). 556 !! 557 !! ** Action : - Update (pu_rhs,pv_rhs) with the now vorticity term trend 558 558 !! 559 559 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 … … 562 562 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 563 563 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 564 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu _mm, pv_mm! now velocities564 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 565 565 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 566 566 ! … … 619 619 DO jj = 1, jpjm1 620 620 DO ji = 1, fs_jpim1 ! vector opt. 621 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv _mm(ji+1,jj,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &622 & - e1u(ji ,jj+1) * pu _mm(ji,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj)621 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 622 & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 623 623 END DO 624 624 END DO … … 626 626 DO jj = 1, jpjm1 627 627 DO ji = 1, fs_jpim1 ! vector opt. 628 zwz(ji,jj,jk) = ( ( pv _mm(ji+1,jj,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &629 & - ( pu _mm(ji,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj)628 zwz(ji,jj,jk) = ( ( pv(ji+1,jj,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 629 & - ( pu(ji,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) 630 630 END DO 631 631 END DO … … 633 633 DO jj = 1, jpjm1 634 634 DO ji = 1, fs_jpim1 ! vector opt. 635 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv _mm(ji+1,jj,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &636 & - e1u(ji ,jj+1) * pu _mm(ji,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) &635 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 636 & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & 637 637 & * r1_e1e2f(ji,jj) ) * z1_e3f(ji,jj) 638 638 END DO … … 641 641 DO jj = 1, jpjm1 642 642 DO ji = 1, fs_jpim1 ! vector opt. 643 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &644 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj)643 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 644 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) 645 645 END DO 646 646 END DO … … 663 663 ! 664 664 ! !== horizontal fluxes ==! 665 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu _mm(:,:,jk)666 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv _mm(:,:,jk)665 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 666 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 667 667 668 668 ! !== compute and add the vorticity term trend =! … … 700 700 701 701 702 SUBROUTINE vor_eeT( kt, Kmm, kvor, pu _mm, pv_mm, pu_rhs, pv_rhs )702 SUBROUTINE vor_eeT( kt, Kmm, kvor, pu, pv, pu_rhs, pv_rhs ) 703 703 !!---------------------------------------------------------------------- 704 704 !! *** ROUTINE vor_eeT *** … … 711 711 !! a modified version of Arakawa and Lamb (1980) scheme (see vor_een). 712 712 !! The change consists in 713 !! Add this trend to the general momentum trend (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)).714 !! 715 !! ** Action : - Update (pu u(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the now vorticity term trend713 !! Add this trend to the general momentum trend (pu_rhs,pv_rhs). 714 !! 715 !! ** Action : - Update (pu_rhs,pv_rhs) with the now vorticity term trend 716 716 !! 717 717 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 … … 720 720 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 721 721 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 722 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu _mm, pv_mm! now velocities722 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 723 723 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 724 724 ! … … 753 753 DO jj = 1, jpjm1 754 754 DO ji = 1, fs_jpim1 ! vector opt. 755 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv _mm(ji+1,jj ,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &756 & - e1u(ji ,jj+1) * pu _mm(ji ,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) &755 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 756 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & 757 757 & * r1_e1e2f(ji,jj) 758 758 END DO … … 761 761 DO jj = 1, jpjm1 762 762 DO ji = 1, fs_jpim1 ! vector opt. 763 zwz(ji,jj,jk) = ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &764 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)763 zwz(ji,jj,jk) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 764 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 765 765 END DO 766 766 END DO … … 768 768 DO jj = 1, jpjm1 769 769 DO ji = 1, fs_jpim1 ! vector opt. 770 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv _mm(ji+1,jj ,jk) - e2v(ji,jj) * pv_mm(ji,jj,jk) &771 & - e1u(ji ,jj+1) * pu _mm(ji ,jj+1,jk) + e1u(ji,jj) * pu_mm(ji,jj,jk) ) &770 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 771 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & 772 772 & * r1_e1e2f(ji,jj) ) 773 773 END DO … … 776 776 DO jj = 1, jpjm1 777 777 DO ji = 1, fs_jpim1 ! vector opt. 778 zwz(ji,jj,jk) = ff_f(ji,jj) + ( pv _mm(ji+1,jj ,jk) + pv_mm(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) &779 & - ( pu _mm(ji ,jj+1,jk) + pu_mm(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)778 zwz(ji,jj,jk) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 779 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 780 780 END DO 781 781 END DO … … 798 798 799 799 ! !== horizontal fluxes ==! 800 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu _mm(:,:,jk)801 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv _mm(:,:,jk)800 zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 801 zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 802 802 803 803 ! !== compute and add the vorticity term trend =! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynzad.F90
r10877 r10893 44 44 !! 45 45 !! ** Method : The now vertical advection of momentum is given by: 46 !! w dz(u) = puu(:,:,:,Krhs) + 1/(e1e2u*e3u) mk+1[ mi(e1e2t*ww) dk(puu(:,:,:,Kmm)) ]47 !! w dz(v) = pvv(:,:,:,Krhs) + 1/(e1e2v*e3v) mk+1[ mj(e1e2t*ww) dk(pvv(:,:,:,Kmm)) ]46 !! w dz(u) = u(rhs) + 1/(e1e2u*e3u) mk+1[ mi(e1e2t*ww) dk(u) ] 47 !! w dz(v) = v(rhs) + 1/(e1e2v*e3v) mk+1[ mj(e1e2t*ww) dk(v) ] 48 48 !! Add this trend to the general trend (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)): 49 !! ( puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) = (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) + w dz(u,v)49 !! (u(rhs),v(rhs)) = (u(rhs),v(rhs)) + w dz(u,v) 50 50 !! 51 51 !! ** Action : - Update (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) with the vert. momentum adv. trends -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynzdf.F90
r10884 r10893 54 54 !! 55 55 !! ** Method : - Leap-Frog time stepping on all trends but the vertical mixing 56 !! puu(:,:,:,Kaa) = puu(:,:,:,Kbb) + 2*dt * puu(:,:,:,Krhs)vector form or linear free surf.57 !! puu(:,:,:,Kaa) = ( e3u_b*puu(:,:,:,Kbb) + 2*dt * e3u_n*puu(:,:,:,Krhs) ) / e3u(:,:,:,Kaa) otherwise56 !! u(after) = u(before) + 2*dt * u(rhs) vector form or linear free surf. 57 !! u(after) = ( e3u_b*u(before) + 2*dt * e3u_n*u(rhs) ) / e3u(after) otherwise 58 58 !! - update the after velocity with the implicit vertical mixing. 59 59 !! This requires to solver the following system: 60 !! puu(:,:,:,Kaa) = puu(:,:,:,Kaa) + 1/e3u(:,:,:,Kaa) dk+1[ mi(avm) / e3uw(:,:,:,Kaa) dk[ua] ]60 !! u(after) = u(after) + 1/e3u(after) dk+1[ mi(avm) / e3uw(after) dk[ua] ] 61 61 !! with the following surface/top/bottom boundary condition: 62 62 !! surface: wind stress input (averaged over kt-1/2 & kt+1/2) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_cen.F90
r10880 r10893 44 44 CONTAINS 45 45 46 SUBROUTINE tra_adv_cen( kt, kit000, cdtype, p u_mm, pv_mm, pww, &46 SUBROUTINE tra_adv_cen( kt, kit000, cdtype, pU, pV, pW, & 47 47 & Kmm, pt, kjpt, Krhs, kn_cen_h, kn_cen_v ) 48 48 !!---------------------------------------------------------------------- … … 70 70 INTEGER , INTENT(in ) :: kn_cen_h ! =2/4 (2nd or 4th order scheme) 71 71 INTEGER , INTENT(in ) :: kn_cen_v ! =2/4 (2nd or 4th order scheme) 72 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 ocean velocitycomponents73 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! activetracers and RHS of tracer equation72 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 73 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 74 74 ! 75 75 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 106 106 DO jj = 1, jpjm1 107 107 DO ji = 1, fs_jpim1 ! vector opt. 108 zwx(ji,jj,jk) = 0.5_wp * p u_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) )109 zwy(ji,jj,jk) = 0.5_wp * p v_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) )108 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) ) 109 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) ) 110 110 END DO 111 111 END DO … … 134 134 zC4t_v = zC2t_v + r1_6 * ( ztv(ji,jj-1,jk) - ztv(ji,jj+1,jk) ) 135 135 ! ! C4 fluxes 136 zwx(ji,jj,jk) = 0.5_wp * p u_mm(ji,jj,jk) * zC4t_u137 zwy(ji,jj,jk) = 0.5_wp * p v_mm(ji,jj,jk) * zC4t_v136 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * zC4t_u 137 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * zC4t_v 138 138 END DO 139 139 END DO … … 150 150 DO jj = 2, jpjm1 151 151 DO ji = fs_2, fs_jpim1 ! vector opt. 152 zwz(ji,jj,jk) = 0.5 * p ww(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) * wmask(ji,jj,jk)152 zwz(ji,jj,jk) = 0.5 * pW(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) * wmask(ji,jj,jk) 153 153 END DO 154 154 END DO … … 160 160 DO jj = 2, jpjm1 161 161 DO ji = fs_2, fs_jpim1 162 zwz(ji,jj,jk) = p ww(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk)162 zwz(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 163 163 END DO 164 164 END DO … … 171 171 DO jj = 1, jpj 172 172 DO ji = 1, jpi 173 zwz(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm)173 zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm) 174 174 END DO 175 175 END DO 176 176 ELSE ! no ice-shelf cavities (only ocean surface) 177 zwz(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kmm)177 zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kmm) 178 178 ENDIF 179 179 ENDIF … … 191 191 ! ! trend diagnostics 192 192 IF( l_trd ) THEN 193 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, p u_mm, pt(:,:,:,jn,Kmm) )194 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, p v_mm, pt(:,:,:,jn,Kmm) )195 CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, p ww, pt(:,:,:,jn,Kmm) )193 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 194 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) ) 195 CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) ) 196 196 END IF 197 197 ! ! "Poleward" heat and salt transports -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_fct.F90
r10880 r10893 52 52 CONTAINS 53 53 54 SUBROUTINE tra_adv_fct( kt, kit000, cdtype, p2dt, p u_mm, pv_mm, pww, &54 SUBROUTINE tra_adv_fct( kt, kit000, cdtype, p2dt, pU, pV, pW, & 55 55 & Kbb, Kmm, pt, kjpt, Krhs, kn_fct_h, kn_fct_v ) 56 56 !!---------------------------------------------------------------------- … … 77 77 INTEGER , INTENT(in ) :: kn_fct_v ! order of the FCT scheme (=2 or 4) 78 78 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 79 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 ocean velocitycomponents80 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! activetracers and RHS of tracer equation79 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 80 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 81 81 ! 82 82 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 125 125 DO ji = 1, fs_jpim1 ! vector opt. 126 126 ! upstream scheme 127 zfp_ui = p u_mm(ji,jj,jk) + ABS( pu_mm(ji,jj,jk) )128 zfm_ui = p u_mm(ji,jj,jk) - ABS( pu_mm(ji,jj,jk) )129 zfp_vj = p v_mm(ji,jj,jk) + ABS( pv_mm(ji,jj,jk) )130 zfm_vj = p v_mm(ji,jj,jk) - ABS( pv_mm(ji,jj,jk) )127 zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) ) 128 zfm_ui = pU(ji,jj,jk) - ABS( pU(ji,jj,jk) ) 129 zfp_vj = pV(ji,jj,jk) + ABS( pV(ji,jj,jk) ) 130 zfm_vj = pV(ji,jj,jk) - ABS( pV(ji,jj,jk) ) 131 131 zwx(ji,jj,jk) = 0.5 * ( zfp_ui * pt(ji,jj,jk,jn,Kbb) + zfm_ui * pt(ji+1,jj ,jk,jn,Kbb) ) 132 132 zwy(ji,jj,jk) = 0.5 * ( zfp_vj * pt(ji,jj,jk,jn,Kbb) + zfm_vj * pt(ji ,jj+1,jk,jn,Kbb) ) … … 138 138 DO jj = 1, jpj 139 139 DO ji = 1, jpi 140 zfp_wk = p ww(ji,jj,jk) + ABS( pww(ji,jj,jk) )141 zfm_wk = p ww(ji,jj,jk) - ABS( pww(ji,jj,jk) )140 zfp_wk = pW(ji,jj,jk) + ABS( pW(ji,jj,jk) ) 141 zfm_wk = pW(ji,jj,jk) - ABS( pW(ji,jj,jk) ) 142 142 zwz(ji,jj,jk) = 0.5 * ( zfp_wk * pt(ji,jj,jk,jn,Kbb) + zfm_wk * pt(ji,jj,jk-1,jn,Kbb) ) * wmask(ji,jj,jk) 143 143 END DO … … 148 148 DO jj = 1, jpj 149 149 DO ji = 1, jpi 150 zwz(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) ! linear free surface150 zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) ! linear free surface 151 151 END DO 152 152 END DO 153 153 ELSE ! no cavities: only at the ocean surface 154 zwz(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kbb)154 zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 155 155 ENDIF 156 156 ENDIF … … 184 184 DO jj = 1, jpjm1 185 185 DO ji = 1, fs_jpim1 ! vector opt. 186 zwx(ji,jj,jk) = 0.5_wp * p u_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj,jk,jn,Kmm) ) - zwx(ji,jj,jk)187 zwy(ji,jj,jk) = 0.5_wp * p v_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj+1,jk,jn,Kmm) ) - zwy(ji,jj,jk)186 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj,jk,jn,Kmm) ) - zwx(ji,jj,jk) 187 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj+1,jk,jn,Kmm) ) - zwy(ji,jj,jk) 188 188 END DO 189 189 END DO … … 215 215 zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) 216 216 ! ! C4 minus upstream advective fluxes 217 zwx(ji,jj,jk) = 0.5_wp * p u_mm(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk)218 zwy(ji,jj,jk) = 0.5_wp * p v_mm(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk)217 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 218 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 219 219 END DO 220 220 END DO … … 243 243 zC4t_v = zC2t_v + r1_6 * ( ztv(ji ,jj-1,jk) - ztv(ji ,jj+1,jk) ) 244 244 ! ! C4 minus upstream advective fluxes 245 zwx(ji,jj,jk) = 0.5_wp * p u_mm(ji,jj,jk) * zC4t_u - zwx(ji,jj,jk)246 zwy(ji,jj,jk) = 0.5_wp * p v_mm(ji,jj,jk) * zC4t_v - zwy(ji,jj,jk)245 zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * zC4t_u - zwx(ji,jj,jk) 246 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * zC4t_v - zwy(ji,jj,jk) 247 247 END DO 248 248 END DO … … 257 257 DO jj = 2, jpjm1 258 258 DO ji = fs_2, fs_jpim1 259 zwz(ji,jj,jk) = ( p ww(ji,jj,jk) * 0.5_wp * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) &259 zwz(ji,jj,jk) = ( pW(ji,jj,jk) * 0.5_wp * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) & 260 260 & - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 261 261 END DO … … 268 268 DO jj = 2, jpjm1 269 269 DO ji = fs_2, fs_jpim1 270 zwz(ji,jj,jk) = ( p ww(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk)270 zwz(ji,jj,jk) = ( pW(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 271 271 END DO 272 272 END DO … … 303 303 ! 304 304 IF( l_trd ) THEN ! trend diagnostics 305 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, p u_mm, pt(:,:,:,jn,Kmm) )306 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, p v_mm, pt(:,:,:,jn,Kmm) )307 CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, p ww, pt(:,:,:,jn,Kmm) )305 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pU, pt(:,:,:,jn,Kmm) ) 306 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pV, pt(:,:,:,jn,Kmm) ) 307 CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pW, pt(:,:,:,jn,Kmm) ) 308 308 ENDIF 309 309 ! ! heat/salt transport -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_mus.F90
r10880 r10893 54 54 CONTAINS 55 55 56 SUBROUTINE tra_adv_mus( kt, kit000, cdtype, p2dt, p u_mm, pv_mm, pww, &56 SUBROUTINE tra_adv_mus( kt, kit000, cdtype, p2dt, pU, pV, pW, & 57 57 & Kbb, Kmm, pt, kjpt, Krhs, ld_msc_ups ) 58 58 !!---------------------------------------------------------------------- … … 80 80 LOGICAL , INTENT(in ) :: ld_msc_ups ! use upstream scheme within muscl 81 81 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 82 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 ocean velocitycomponents83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! activetracers and RHS of tracer equation82 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 84 84 ! 85 85 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 172 172 DO ji = fs_2, fs_jpim1 ! vector opt. 173 173 ! MUSCL fluxes 174 z0u = SIGN( 0.5, p u_mm(ji,jj,jk) )174 z0u = SIGN( 0.5, pU(ji,jj,jk) ) 175 175 zalpha = 0.5 - z0u 176 zu = z0u - 0.5 * p u_mm(ji,jj,jk) * p2dt * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)176 zu = z0u - 0.5 * pU(ji,jj,jk) * p2dt * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) 177 177 zzwx = pt(ji+1,jj,jk,jn,Kbb) + xind(ji,jj,jk) * zu * zslpx(ji+1,jj,jk) 178 178 zzwy = pt(ji ,jj,jk,jn,Kbb) + xind(ji,jj,jk) * zu * zslpx(ji ,jj,jk) 179 zwx(ji,jj,jk) = p u_mm(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy )179 zwx(ji,jj,jk) = pU(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 180 180 ! 181 z0v = SIGN( 0.5, p v_mm(ji,jj,jk) )181 z0v = SIGN( 0.5, pV(ji,jj,jk) ) 182 182 zalpha = 0.5 - z0v 183 zv = z0v - 0.5 * p v_mm(ji,jj,jk) * p2dt * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm)183 zv = z0v - 0.5 * pV(ji,jj,jk) * p2dt * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 184 184 zzwx = pt(ji,jj+1,jk,jn,Kbb) + xind(ji,jj,jk) * zv * zslpy(ji,jj+1,jk) 185 185 zzwy = pt(ji,jj ,jk,jn,Kbb) + xind(ji,jj,jk) * zv * zslpy(ji,jj ,jk) 186 zwy(ji,jj,jk) = p v_mm(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy )186 zwy(ji,jj,jk) = pV(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 187 187 END DO 188 188 END DO … … 201 201 ! ! trend diagnostics 202 202 IF( l_trd ) THEN 203 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, p u_mm, pt(:,:,:,jn,Kbb) )204 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, p v_mm, pt(:,:,:,jn,Kbb) )203 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kbb) ) 204 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kbb) ) 205 205 END IF 206 206 ! ! "Poleward" heat and salt transports … … 239 239 DO jj = 2, jpjm1 240 240 DO ji = fs_2, fs_jpim1 ! vector opt. 241 z0w = SIGN( 0.5, p ww(ji,jj,jk+1) )241 z0w = SIGN( 0.5, pW(ji,jj,jk+1) ) 242 242 zalpha = 0.5 + z0w 243 zw = z0w - 0.5 * p ww(ji,jj,jk+1) * p2dt * r1_e1e2t(ji,jj) / e3w(ji,jj,jk+1,Kmm)243 zw = z0w - 0.5 * pW(ji,jj,jk+1) * p2dt * r1_e1e2t(ji,jj) / e3w(ji,jj,jk+1,Kmm) 244 244 zzwx = pt(ji,jj,jk+1,jn,Kbb) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk+1) 245 245 zzwy = pt(ji,jj,jk ,jn,Kbb) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk ) 246 zwx(ji,jj,jk+1) = p ww(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) * wmask(ji,jj,jk)246 zwx(ji,jj,jk+1) = pW(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) * wmask(ji,jj,jk) 247 247 END DO 248 248 END DO … … 252 252 DO jj = 1, jpj 253 253 DO ji = 1, jpi 254 zwx(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb)254 zwx(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) 255 255 END DO 256 256 END DO 257 257 ELSE ! no cavities: only at the ocean surface 258 zwx(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kbb)258 zwx(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 259 259 ENDIF 260 260 ENDIF … … 268 268 END DO 269 269 ! ! send trends for diagnostic 270 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, p ww, pt(:,:,:,jn,Kbb) )270 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pW, pt(:,:,:,jn,Kbb) ) 271 271 ! 272 272 END DO ! end of tracer loop -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_qck.F90
r10880 r10893 47 47 CONTAINS 48 48 49 SUBROUTINE tra_adv_qck ( kt, kit000, cdtype, p2dt, p u_mm, pv_mm, pww, Kbb, Kmm, pt, kjpt, Krhs )49 SUBROUTINE tra_adv_qck ( kt, kit000, cdtype, p2dt, pU, pV, pW, Kbb, Kmm, pt, kjpt, Krhs ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_adv_qck *** … … 89 89 INTEGER , INTENT(in ) :: kjpt ! number of tracers 90 90 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 ocean velocitycomponents92 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! activetracers and RHS of tracer equation91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume transport components 92 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 93 93 !!---------------------------------------------------------------------- 94 94 ! … … 107 107 ! 108 108 ! ! horizontal fluxes are computed with the QUICKEST + ULTIMATE scheme 109 CALL tra_adv_qck_i( kt, cdtype, p2dt, p u_mm, Kbb, Kmm, pt, kjpt, Krhs )110 CALL tra_adv_qck_j( kt, cdtype, p2dt, p v_mm, Kbb, Kmm, pt, kjpt, Krhs )109 CALL tra_adv_qck_i( kt, cdtype, p2dt, pU, Kbb, Kmm, pt, kjpt, Krhs ) 110 CALL tra_adv_qck_j( kt, cdtype, p2dt, pV, Kbb, Kmm, pt, kjpt, Krhs ) 111 111 112 112 ! ! vertical fluxes are computed with the 2nd order centered scheme 113 CALL tra_adv_cen2_k( kt, cdtype, p ww, Kmm, pt, kjpt, Krhs )113 CALL tra_adv_cen2_k( kt, cdtype, pW, Kmm, pt, kjpt, Krhs ) 114 114 ! 115 115 END SUBROUTINE tra_adv_qck 116 116 117 117 118 SUBROUTINE tra_adv_qck_i( kt, cdtype, p2dt, p u_mm, Kbb, Kmm, pt, kjpt, Krhs )118 SUBROUTINE tra_adv_qck_i( kt, cdtype, p2dt, pU, Kbb, Kmm, pt, kjpt, Krhs ) 119 119 !!---------------------------------------------------------------------- 120 120 !! … … 125 125 INTEGER , INTENT(in ) :: kjpt ! number of tracers 126 126 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 127 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm! i-velocity components127 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU ! i-velocity components 128 128 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 129 129 !! … … 156 156 DO jj = 2, jpjm1 157 157 DO ji = fs_2, fs_jpim1 ! vector opt. 158 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0158 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 159 159 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji+1,jj,jk) ! FU in the x-direction for T 160 160 END DO … … 165 165 DO jj = 2, jpjm1 166 166 DO ji = fs_2, fs_jpim1 ! vector opt. 167 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0167 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 168 168 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 169 zwx(ji,jj,jk) = ABS( p u_mm(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)169 zwx(ji,jj,jk) = ABS( pU(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 170 170 zfc(ji,jj,jk) = zdir * pt(ji ,jj,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji+1,jj,jk,jn,Kbb) ! FC in the x-direction for T 171 171 zfd(ji,jj,jk) = zdir * pt(ji+1,jj,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji ,jj,jk,jn,Kbb) ! FD in the x-direction for T … … 195 195 DO jj = 2, jpjm1 196 196 DO ji = fs_2, fs_jpim1 ! vector opt. 197 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0197 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 198 198 !--- If the second ustream point is a land point 199 199 !--- the flux is computed by the 1st order UPWIND scheme 200 200 zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji+1,jj,jk) 201 201 zwx(ji,jj,jk) = zmsk * zwx(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 202 zwx(ji,jj,jk) = zwx(ji,jj,jk) * p u_mm(ji,jj,jk)202 zwx(ji,jj,jk) = zwx(ji,jj,jk) * pU(ji,jj,jk) 203 203 END DO 204 204 END DO … … 220 220 END DO 221 221 ! ! trend diagnostics 222 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, p u_mm, pt(:,:,:,jn,Kmm) )222 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 223 223 ! 224 224 END DO … … 227 227 228 228 229 SUBROUTINE tra_adv_qck_j( kt, cdtype, p2dt, p v_mm, Kbb, Kmm, pt, kjpt, Krhs )229 SUBROUTINE tra_adv_qck_j( kt, cdtype, p2dt, pV, Kbb, Kmm, pt, kjpt, Krhs ) 230 230 !!---------------------------------------------------------------------- 231 231 !! … … 236 236 INTEGER , INTENT(in ) :: kjpt ! number of tracers 237 237 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 238 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p v_mm! j-velocity components238 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pV ! j-velocity components 239 239 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 240 240 !! … … 272 272 DO jj = 2, jpjm1 273 273 DO ji = fs_2, fs_jpim1 ! vector opt. 274 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0274 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 275 275 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji,jj+1,jk) ! FU in the x-direction for T 276 276 END DO … … 281 281 DO jj = 2, jpjm1 282 282 DO ji = fs_2, fs_jpim1 ! vector opt. 283 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0283 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 284 284 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) 285 zwy(ji,jj,jk) = ABS( p v_mm(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)285 zwy(ji,jj,jk) = ABS( pV(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 286 286 zfc(ji,jj,jk) = zdir * pt(ji,jj ,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji,jj+1,jk,jn,Kbb) ! FC in the x-direction for T 287 287 zfd(ji,jj,jk) = zdir * pt(ji,jj+1,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji,jj ,jk,jn,Kbb) ! FD in the x-direction for T … … 311 311 DO jj = 2, jpjm1 312 312 DO ji = fs_2, fs_jpim1 ! vector opt. 313 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0313 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 314 314 !--- If the second ustream point is a land point 315 315 !--- the flux is computed by the 1st order UPWIND scheme 316 316 zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji,jj+1,jk) 317 317 zwy(ji,jj,jk) = zmsk * zwy(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 318 zwy(ji,jj,jk) = zwy(ji,jj,jk) * p v_mm(ji,jj,jk)318 zwy(ji,jj,jk) = zwy(ji,jj,jk) * pV(ji,jj,jk) 319 319 END DO 320 320 END DO … … 336 336 END DO 337 337 ! ! trend diagnostics 338 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, p v_mm, pt(:,:,:,jn,Kmm) )338 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) ) 339 339 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 340 340 IF( l_ptr ) CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) … … 345 345 346 346 347 SUBROUTINE tra_adv_cen2_k( kt, cdtype, p ww, Kmm, pt, kjpt, Krhs )347 SUBROUTINE tra_adv_cen2_k( kt, cdtype, pW, Kmm, pt, kjpt, Krhs ) 348 348 !!---------------------------------------------------------------------- 349 349 !! … … 353 353 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 354 354 INTEGER , INTENT(in ) :: kjpt ! number of tracers 355 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p ww! vertical velocity355 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pW ! vertical velocity 356 356 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 357 357 ! … … 370 370 DO jj = 2, jpjm1 371 371 DO ji = fs_2, fs_jpim1 ! vector opt. 372 zwz(ji,jj,jk) = 0.5 * p ww(ji,jj,jk) * ( pt(ji,jj,jk-1,jn,Kmm) + pt(ji,jj,jk,jn,Kmm) ) * wmask(ji,jj,jk)372 zwz(ji,jj,jk) = 0.5 * pW(ji,jj,jk) * ( pt(ji,jj,jk-1,jn,Kmm) + pt(ji,jj,jk,jn,Kmm) ) * wmask(ji,jj,jk) 373 373 END DO 374 374 END DO … … 378 378 DO jj = 1, jpj 379 379 DO ji = 1, jpi 380 zwz(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm) ! linear free surface380 zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm) ! linear free surface 381 381 END DO 382 382 END DO 383 383 ELSE ! no ocean cavities (only ocean surface) 384 zwz(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kmm)384 zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kmm) 385 385 ENDIF 386 386 ENDIF … … 395 395 END DO 396 396 ! ! Send trends for diagnostic 397 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, p ww, pt(:,:,:,jn,Kmm) )397 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) ) 398 398 ! 399 399 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_ubs.F90
r10884 r10893 46 46 CONTAINS 47 47 48 SUBROUTINE tra_adv_ubs( kt, kit000, cdtype, p2dt, p u_mm, pv_mm, pww, &48 SUBROUTINE tra_adv_ubs( kt, kit000, cdtype, p2dt, pU, pV, pW, & 49 49 & Kbb, Kmm, pt, kjpt, Krhs, kn_ubs_v ) 50 50 !!---------------------------------------------------------------------- … … 58 58 !! It is only used in the horizontal direction. 59 59 !! For example the i-component of the advective fluxes are given by : 60 !! ! e2u e3u u u ( mi(Tn) - zltu(i ) ,Kmm) if uu(i,Kmm) >= 060 !! ! e2u e3u un ( mi(Tn) - zltu(i ) ) if un(i) >= 0 61 61 !! ztu = ! or 62 !! ! e2u e3u u u ( mi(Tn) - zltu(i+1) ,Kmm) if uu(i,Kmm) < 062 !! ! e2u e3u un ( mi(Tn) - zltu(i+1) ) if un(i) < 0 63 63 !! where zltu is the second derivative of the before temperature field: 64 64 !! zltu = 1/e3t di[ e2u e3u / e1u di[Tb] ] … … 91 91 INTEGER , INTENT(in ) :: kn_ubs_v ! number of tracers 92 92 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 93 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 oceantransport components93 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume transport components 94 94 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 95 95 ! … … 146 146 DO jj = 1, jpjm1 147 147 DO ji = 1, fs_jpim1 ! vector opt. 148 zfp_ui = p u_mm(ji,jj,jk) + ABS( pu_mm(ji,jj,jk) ) ! upstream transport (x2)149 zfm_ui = p u_mm(ji,jj,jk) - ABS( pu_mm(ji,jj,jk) )150 zfp_vj = p v_mm(ji,jj,jk) + ABS( pv_mm(ji,jj,jk) )151 zfm_vj = p v_mm(ji,jj,jk) - ABS( pv_mm(ji,jj,jk) )148 zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) ) ! upstream transport (x2) 149 zfm_ui = pU(ji,jj,jk) - ABS( pU(ji,jj,jk) ) 150 zfp_vj = pV(ji,jj,jk) + ABS( pV(ji,jj,jk) ) 151 zfm_vj = pV(ji,jj,jk) - ABS( pV(ji,jj,jk) ) 152 152 ! ! 2nd order centered advective fluxes (x2) 153 zcenut = p u_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) )154 zcenvt = p v_mm(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) )153 zcenut = pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) ) 154 zcenvt = pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji ,jj+1,jk,jn,Kmm) ) 155 155 ! ! UBS advective fluxes 156 156 ztu(ji,jj,jk) = 0.5 * ( zcenut - zfp_ui * zltu(ji,jj,jk) - zfm_ui * zltu(ji+1,jj,jk) ) … … 177 177 ! 178 178 IF( l_trd ) THEN ! trend diagnostics 179 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, p u_mm, pt(:,:,:,jn,Kmm) )180 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, p v_mm, pt(:,:,:,jn,Kmm) )179 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, pU, pt(:,:,:,jn,Kmm) ) 180 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pV, pt(:,:,:,jn,Kmm) ) 181 181 END IF 182 182 ! … … 199 199 DO jj = 1, jpj 200 200 DO ji = 1, jpi 201 zfp_wk = p ww(ji,jj,jk) + ABS( pww(ji,jj,jk) )202 zfm_wk = p ww(ji,jj,jk) - ABS( pww(ji,jj,jk) )201 zfp_wk = pW(ji,jj,jk) + ABS( pW(ji,jj,jk) ) 202 zfm_wk = pW(ji,jj,jk) - ABS( pW(ji,jj,jk) ) 203 203 ztw(ji,jj,jk) = 0.5_wp * ( zfp_wk * pt(ji,jj,jk,jn,Kbb) + zfm_wk * pt(ji,jj,jk-1,jn,Kbb) ) * wmask(ji,jj,jk) 204 204 END DO … … 209 209 DO jj = 1, jpj 210 210 DO ji = 1, jpi 211 ztw(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) ! linear free surface211 ztw(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) ! linear free surface 212 212 END DO 213 213 END DO 214 214 ELSE ! no cavities: only at the ocean surface 215 ztw(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kbb)215 ztw(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 216 216 ENDIF 217 217 ENDIF … … 232 232 DO jj = 1, jpj 233 233 DO ji = 1, jpi 234 ztw(ji,jj,jk) = ( 0.5_wp * p ww(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) &234 ztw(ji,jj,jk) = ( 0.5_wp * pW(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) & 235 235 & - ztw(ji,jj,jk) ) * wmask(ji,jj,jk) 236 236 END DO … … 247 247 DO jj = 2, jpjm1 248 248 DO ji = fs_2, fs_jpim1 249 ztw(ji,jj,jk) = p ww(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk)250 END DO 251 END DO 252 END DO 253 IF( ln_linssh ) ztw(:,:, 1 ) = p ww(:,:,1) * pt(:,:,1,jn,Kmm) !!gm ISF & 4th COMPACT doesn't work249 ztw(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 250 END DO 251 END DO 252 END DO 253 IF( ln_linssh ) ztw(:,:, 1 ) = pW(:,:,1) * pt(:,:,1,jn,Kmm) !!gm ISF & 4th COMPACT doesn't work 254 254 ! 255 255 END SELECT … … 268 268 DO ji = fs_2, fs_jpim1 ! vector opt. 269 269 zltv(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs) - zltv(ji,jj,jk) & 270 & + pt(ji,jj,jk,jn,Kmm) * ( p ww(ji,jj,jk) - pww(ji,jj,jk+1) ) &270 & + pt(ji,jj,jk,jn,Kmm) * ( pW(ji,jj,jk) - pW(ji,jj,jk+1) ) & 271 271 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 272 272 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trazdf.F90
r10884 r10893 77 77 ! 78 78 ! !* compute lateral mixing trend and add it to the general trend 79 CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, Kbb, Kmm, pts, Kaa, jpts )79 CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, Kbb, Kmm, Krhs, pts, Kaa, jpts ) 80 80 81 81 !!gm WHY here ! and I don't like that ! … … 109 109 110 110 111 SUBROUTINE tra_zdf_imp( kt, kit000, cdtype, p2dt, Kbb, Kmm, pt, Kaa, kjpt )111 SUBROUTINE tra_zdf_imp( kt, kit000, cdtype, p2dt, Kbb, Kmm, Krhs, pt, Kaa, kjpt ) 112 112 !!---------------------------------------------------------------------- 113 113 !! *** ROUTINE tra_zdf_imp *** … … 130 130 !!--------------------------------------------------------------------- 131 131 INTEGER , INTENT(in ) :: kt ! ocean time-step index 132 INTEGER , INTENT(in ) :: Kbb, Kmm, K aa ! ocean time level indices132 INTEGER , INTENT(in ) :: Kbb, Kmm, Krhs, Kaa ! ocean time level indices 133 133 INTEGER , INTENT(in ) :: kit000 ! first time step index 134 134 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 240 240 DO jj = 2, jpjm1 !* 2nd recurrence: Zk = Yk - Ik / Tk-1 Zk-1 241 241 DO ji = fs_2, fs_jpim1 242 pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,K aa)242 pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 243 243 END DO 244 244 END DO … … 246 246 DO jj = 2, jpjm1 247 247 DO ji = fs_2, fs_jpim1 248 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,K aa) ! zrhs=right hand side248 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs) ! zrhs=right hand side 249 249 pt(ji,jj,jk,jn,Kaa) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt(ji,jj,jk-1,jn,Kaa) 250 250 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trczdf.F90
r10884 r10893 56 56 IF( l_trdtrc ) ztrtrd(:,:,:,:) = ptr(:,:,:,:,Krhs) 57 57 ! 58 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dttrc, Kbb, Kmm, ptr, Kaa, jptra ) ! implicit scheme58 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dttrc, Kbb, Kmm, Krhs, ptr, Kaa, jptra ) ! implicit scheme 59 59 ! 60 60 IF( l_trdtrc ) THEN ! save the vertical diffusive trends for further diagnostics
Note: See TracChangeset
for help on using the changeset viewer.