Changeset 14986 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/LDF/ldftra.F90
- Timestamp:
- 2021-06-14T13:34:08+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/LDF/ldftra.F90
r14644 r14986 633 633 INTEGER , INTENT(in ) :: kt ! ocean time-step index 634 634 INTEGER , INTENT(in ) :: Kmm ! ocean time level indices 635 REAL(wp) , INTENT(in out) :: paei0 ! max value [m2/s]635 REAL(wp) , INTENT(in ) :: paei0 ! max value [m2/s] 636 636 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: paeiu, paeiv ! eiv coefficient [m2/s] 637 637 ! 638 638 INTEGER :: ji, jj, jk ! dummy loop indices 639 REAL(wp) :: zfw, ze3w, zn2, z1_f20, z aht, zaht_min, zzaei ! local scalars639 REAL(wp) :: zfw, ze3w, zn2, z1_f20, zzaei ! local scalars 640 640 REAL(wp), DIMENSION(jpi,jpj) :: zn, zah, zhw, zRo, zaeiw ! 2D workspace 641 641 !!---------------------------------------------------------------------- … … 647 647 ! ! Compute lateral diffusive coefficient at T-point 648 648 IF( ln_traldf_triad ) THEN 649 DO_3D( 0, 0, 0, 0, 1, jpk )649 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 650 650 ! Take the max of N^2 and zero then take the vertical sum 651 651 ! of the square root of the resulting N^2 ( required to compute … … 661 661 END_3D 662 662 ELSE 663 DO_3D( 0, 0, 0, 0, 1, jpk )663 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 664 664 ! Take the max of N^2 and zero then take the vertical sum 665 665 ! of the square root of the resulting N^2 ( required to compute … … 677 677 ENDIF 678 678 679 DO_2D( 0, 0, 0, 0)679 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 680 680 zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) 681 681 ! Rossby radius at w-point taken betwenn 2 km and 40km … … 687 687 ! !== Bound on eiv coeff. ==! 688 688 z1_f20 = 1._wp / ( 2._wp * omega * sin( rad * 20._wp ) ) 689 DO_2D( 0, 0, 0, 0)689 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 690 690 zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj) ! tropical decrease 691 691 zaeiw(ji,jj) = MIN( zzaei , paei0 ) ! Max value = paei0 … … 693 693 CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1.0_wp ) ! lateral boundary condition 694 694 ! 695 DO_2D( 0, 0, 0, 0 ) !== aei at u- and v-points ==!695 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 696 696 paeiu(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji+1,jj ) ) * umask(ji,jj,1) 697 697 paeiv(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji ,jj+1) ) * vmask(ji,jj,1) … … 729 729 INTEGER , INTENT(in ) :: Kmm, Krhs ! ocean time level indices 730 730 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 731 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(inout) :: pu ! in : 3 ocean transport components [m3/s] 732 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(inout) :: pv ! out: 3 ocean transport components [m3/s] 733 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(inout) :: pw ! increased by the eiv [m3/s] 731 ! TEMP: [tiling] Can be A2D(nn_hls) after all lbc_lnks removed in the nn_hls = 2 case in tra_adv_fct 732 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu ! in : 3 ocean transport components [m3/s] 733 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pv ! out: 3 ocean transport components [m3/s] 734 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pw ! increased by the eiv [m3/s] 734 735 !! 735 736 INTEGER :: ji, jj, jk ! dummy loop indices … … 739 740 !!---------------------------------------------------------------------- 740 741 ! 741 IF( ntile == 0.OR. ntile == 1 ) THEN ! Do only on the first tile742 IF( .NOT. l_istiled .OR. ntile == 1 ) THEN ! Do only on the first tile 742 743 IF( kt == kit000 ) THEN 743 744 IF(lwp) WRITE(numout,*) … … 751 752 zpsi_uw(:,:,jpk) = 0._wp ; zpsi_vw(:,:,jpk) = 0._wp 752 753 ! 753 DO_3D( 1, 0, 1, 0, 2, jpkm1 )754 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 2, jpkm1 ) 754 755 zpsi_uw(ji,jj,jk) = - r1_4 * e2u(ji,jj) * ( wslpi(ji,jj,jk ) + wslpi(ji+1,jj,jk) ) & 755 756 & * ( aeiu (ji,jj,jk-1) + aeiu (ji ,jj,jk) ) * wumask(ji,jj,jk) … … 758 759 END_3D 759 760 ! 760 DO_3D ( 1, 0, 1, 0, 1, jpkm1 )761 DO_3D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) 761 762 pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 762 763 pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 763 764 END_3D 764 DO_3D ( 0, 0, 0, 0, 1, jpkm1 )765 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 765 766 pw(ji,jj,jk) = pw(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj ,jk) & 766 & 767 & + zpsi_vw(ji,jj,jk) - zpsi_vw(ji ,jj-1,jk) ) 767 768 END_3D 768 769 ! … … 783 784 !! 784 785 !!---------------------------------------------------------------------- 785 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(in out) :: psi_uw, psi_vw ! streamfunction [m3/s]786 INTEGER , INTENT(in ) :: Kmm! ocean time level indices786 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(in) :: psi_uw, psi_vw ! streamfunction [m3/s] 787 INTEGER , INTENT(in) :: Kmm ! ocean time level indices 787 788 ! 788 789 INTEGER :: ji, jj, jk ! dummy loop indices
Note: See TracChangeset
for help on using the changeset viewer.