- Timestamp:
- 2019-11-22T15:29:17+01:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11943_MERGE_2019/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src
- Property svn:mergeinfo deleted
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/LDF/ldftra.F90
r11536 r11949 382 382 383 383 384 SUBROUTINE ldf_tra( kt )384 SUBROUTINE ldf_tra( kt, Kbb, Kmm ) 385 385 !!---------------------------------------------------------------------- 386 386 !! *** ROUTINE ldf_tra *** … … 403 403 !!---------------------------------------------------------------------- 404 404 INTEGER, INTENT(in) :: kt ! time step 405 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices 405 406 ! 406 407 INTEGER :: ji, jj, jk ! dummy loop indices … … 411 412 ! ! =F(growth rate of baroclinic instability) 412 413 ! ! max value aeiv_0 ; decreased to 0 within 20N-20S 413 CALL ldf_eiv( kt, aei0, aeiu, aeiv )414 CALL ldf_eiv( kt, aei0, aeiu, aeiv, Kmm ) 414 415 ENDIF 415 416 ! … … 424 425 ahtv(:,:,1) = aeiv(:,:,1) 425 426 ELSE ! compute aht. 426 CALL ldf_eiv( kt, aht0, ahtu, ahtv )427 CALL ldf_eiv( kt, aht0, ahtu, ahtv, Kmm ) 427 428 ENDIF 428 429 ! … … 448 449 IF( ln_traldf_lap ) THEN ! laplacian operator |u| e /12 449 450 DO jk = 1, jpkm1 450 ahtu(:,:,jk) = ABS( u b(:,:,jk) ) * e1u(:,:) * r1_12 ! n.b. ub,vbare masked451 ahtv(:,:,jk) = ABS( v b(:,:,jk) ) * e2v(:,:) * r1_12451 ahtu(:,:,jk) = ABS( uu(:,:,jk,Kbb) ) * e1u(:,:) * r1_12 ! n.b. uu,vv are masked 452 ahtv(:,:,jk) = ABS( vv(:,:,jk,Kbb) ) * e2v(:,:) * r1_12 452 453 END DO 453 454 ELSEIF( ln_traldf_blp ) THEN ! bilaplacian operator sqrt( |u| e^3 /12 ) = sqrt( |u| e /12 ) * e 454 455 DO jk = 1, jpkm1 455 ahtu(:,:,jk) = SQRT( ABS( u b(:,:,jk) ) * e1u(:,:) * r1_12 ) * e1u(:,:)456 ahtv(:,:,jk) = SQRT( ABS( v b(:,:,jk) ) * e2v(:,:) * r1_12 ) * e2v(:,:)456 ahtu(:,:,jk) = SQRT( ABS( uu(:,:,jk,Kbb) ) * e1u(:,:) * r1_12 ) * e1u(:,:) 457 ahtv(:,:,jk) = SQRT( ABS( vv(:,:,jk,Kbb) ) * e2v(:,:) * r1_12 ) * e2v(:,:) 457 458 END DO 458 459 ENDIF … … 625 626 626 627 627 SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv )628 SUBROUTINE ldf_eiv( kt, paei0, paeiu, paeiv, Kmm ) 628 629 !!---------------------------------------------------------------------- 629 630 !! *** ROUTINE ldf_eiv *** … … 637 638 !!---------------------------------------------------------------------- 638 639 INTEGER , INTENT(in ) :: kt ! ocean time-step index 640 INTEGER , INTENT(in ) :: Kmm ! ocean time level indices 639 641 REAL(wp) , INTENT(inout) :: paei0 ! max value [m2/s] 640 642 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: paeiu, paeiv ! eiv coefficient [m2/s] … … 658 660 ! internal Rossby radius Ro = .5 * sum_jpk(N) / f 659 661 zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 660 zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w _n(ji,jj,jk)662 zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w(ji,jj,jk,Kmm) 661 663 ! Compute elements required for the inverse time scale of baroclinic 662 664 ! eddies using the isopycnal slopes calculated in ldfslp.F : 663 665 ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 664 ze3w = e3w _n(ji,jj,jk) * tmask(ji,jj,jk)666 ze3w = e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 665 667 zah(ji,jj) = zah(ji,jj) + zn2 * wslp2(ji,jj,jk) * ze3w 666 668 zhw(ji,jj) = zhw(ji,jj) + ze3w … … 676 678 ! internal Rossby radius Ro = .5 * sum_jpk(N) / f 677 679 zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 678 zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w _n(ji,jj,jk)680 zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * e3w(ji,jj,jk,Kmm) 679 681 ! Compute elements required for the inverse time scale of baroclinic 680 682 ! eddies using the isopycnal slopes calculated in ldfslp.F : 681 683 ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 682 ze3w = e3w _n(ji,jj,jk) * tmask(ji,jj,jk)684 ze3w = e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 683 685 zah(ji,jj) = zah(ji,jj) + zn2 * ( wslpi(ji,jj,jk) * wslpi(ji,jj,jk) & 684 686 & + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) ) * ze3w … … 725 727 726 728 727 SUBROUTINE ldf_eiv_trp( kt, kit000, pu n, pvn, pwn, cdtype)729 SUBROUTINE ldf_eiv_trp( kt, kit000, pu, pv, pw, cdtype, Kmm, Krhs ) 728 730 !!---------------------------------------------------------------------- 729 731 !! *** ROUTINE ldf_eiv_trp *** … … 741 743 !! velocity and heat transport (call ldf_eiv_dia) 742 744 !! 743 !! ** Action : pun, pvn increased by the eiv transport 744 !!---------------------------------------------------------------------- 745 INTEGER , INTENT(in ) :: kt ! ocean time-step index 746 INTEGER , INTENT(in ) :: kit000 ! first time step index 747 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 748 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pun ! in : 3 ocean transport components [m3/s] 749 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvn ! out: 3 ocean transport components [m3/s] 750 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pwn ! increased by the eiv [m3/s] 745 !! ** Action : pu, pv increased by the eiv transport 746 !!---------------------------------------------------------------------- 747 INTEGER , INTENT(in ) :: kt ! ocean time-step index 748 INTEGER , INTENT(in ) :: kit000 ! first time step index 749 INTEGER , INTENT(in ) :: Kmm, Krhs ! ocean time level indices 750 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 751 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu ! in : 3 ocean transport components [m3/s] 752 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pv ! out: 3 ocean transport components [m3/s] 753 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pw ! increased by the eiv [m3/s] 751 754 !! 752 755 INTEGER :: ji, jj, jk ! dummy loop indices … … 780 783 DO jj = 1, jpjm1 781 784 DO ji = 1, fs_jpim1 ! vector opt. 782 pu n(ji,jj,jk) = pun(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) )783 pv n(ji,jj,jk) = pvn(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) )785 pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 786 pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 784 787 END DO 785 788 END DO … … 788 791 DO jj = 2, jpjm1 789 792 DO ji = fs_2, fs_jpim1 ! vector opt. 790 pw n(ji,jj,jk) = pwn(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj ,jk) &793 pw(ji,jj,jk) = pw(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj ,jk) & 791 794 & + zpsi_vw(ji,jj,jk) - zpsi_vw(ji ,jj-1,jk) ) 792 795 END DO … … 795 798 ! 796 799 ! ! diagnose the eddy induced velocity and associated heat transport 797 IF( ln_ldfeiv_dia .AND. cdtype == 'TRA' ) CALL ldf_eiv_dia( zpsi_uw, zpsi_vw )800 IF( ln_ldfeiv_dia .AND. cdtype == 'TRA' ) CALL ldf_eiv_dia( zpsi_uw, zpsi_vw, Kmm ) 798 801 ! 799 802 END SUBROUTINE ldf_eiv_trp 800 803 801 804 802 SUBROUTINE ldf_eiv_dia( psi_uw, psi_vw )805 SUBROUTINE ldf_eiv_dia( psi_uw, psi_vw, Kmm ) 803 806 !!---------------------------------------------------------------------- 804 807 !! *** ROUTINE ldf_eiv_dia *** … … 811 814 !!---------------------------------------------------------------------- 812 815 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: psi_uw, psi_vw ! streamfunction [m3/s] 816 INTEGER , INTENT(in ) :: Kmm ! ocean time level indices 813 817 ! 814 818 INTEGER :: ji, jj, jk ! dummy loop indices … … 831 835 ! 832 836 DO jk = 1, jpkm1 ! e2u e3u u_eiv = -dk[psi_uw] 833 zw3d(:,:,jk) = ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) / ( e2u(:,:) * e3u _n(:,:,jk) )837 zw3d(:,:,jk) = ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) / ( e2u(:,:) * e3u(:,:,jk,Kmm) ) 834 838 END DO 835 839 CALL iom_put( "uoce_eiv", zw3d ) 836 840 ! 837 841 DO jk = 1, jpkm1 ! e1v e3v v_eiv = -dk[psi_vw] 838 zw3d(:,:,jk) = ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) / ( e1v(:,:) * e3v _n(:,:,jk) )842 zw3d(:,:,jk) = ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) / ( e1v(:,:) * e3v(:,:,jk,Kmm) ) 839 843 END DO 840 844 CALL iom_put( "voce_eiv", zw3d ) … … 859 863 DO jj = 2, jpjm1 860 864 DO ji = fs_2, fs_jpim1 ! vector opt. 861 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1) - psi_uw(ji,jj,jk)) &862 & * ( ts n (ji,jj,jk,jp_tem) + tsn (ji+1,jj,jk,jp_tem) )865 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1) - psi_uw(ji ,jj,jk) ) & 866 & * ( ts (ji,jj,jk,jp_tem,Kmm) + ts (ji+1,jj,jk,jp_tem,Kmm) ) 863 867 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 864 868 END DO … … 875 879 DO jj = 2, jpjm1 876 880 DO ji = fs_2, fs_jpim1 ! vector opt. 877 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj,jk)) &878 & * ( ts n (ji,jj,jk,jp_tem) + tsn (ji,jj+1,jk,jp_tem) )881 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj ,jk) ) & 882 & * ( ts (ji,jj,jk,jp_tem,Kmm) + ts (ji,jj+1,jk,jp_tem,Kmm) ) 879 883 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 880 884 END DO … … 894 898 DO jj = 2, jpjm1 895 899 DO ji = fs_2, fs_jpim1 ! vector opt. 896 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1) - psi_uw(ji,jj,jk)) &897 & * ( ts n (ji,jj,jk,jp_sal) + tsn (ji+1,jj,jk,jp_sal) )900 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1) - psi_uw(ji ,jj,jk) ) & 901 & * ( ts (ji,jj,jk,jp_sal,Kmm) + ts (ji+1,jj,jk,jp_sal,Kmm) ) 898 902 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 899 903 END DO … … 903 907 CALL lbc_lnk( 'ldftra', zw3d, 'U', -1. ) 904 908 CALL iom_put( "ueiv_salttr", zztmp * zw2d ) ! salt transport in i-direction 905 CALL iom_put( "ueiv_salttr3d", zztmp * zw3d ) 909 CALL iom_put( "ueiv_salttr3d", zztmp * zw3d ) ! salt transport in i-direction 906 910 ENDIF 907 911 zw2d(:,:) = 0._wp … … 910 914 DO jj = 2, jpjm1 911 915 DO ji = fs_2, fs_jpim1 ! vector opt. 912 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj,jk)) &913 & * ( ts n (ji,jj,jk,jp_sal) + tsn (ji,jj+1,jk,jp_sal) )916 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1) - psi_vw(ji,jj ,jk) ) & 917 & * ( ts (ji,jj,jk,jp_sal,Kmm) + ts (ji,jj+1,jk,jp_sal,Kmm) ) 914 918 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 915 919 END DO
Note: See TracChangeset
for help on using the changeset viewer.