New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14644 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran.F90 – NEMO

Ignore:
Timestamp:
2021-03-26T15:33:49+01:00 (3 years ago)
Author:
sparonuz
Message:

Merge trunk -r14642:HEAD

Location:
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette_wave@13990         sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran.F90

    r14286 r14644  
    169169      ! 
    170170      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    171          IF( MOD(mig(ji), 3) == MOD(nn_hls, 3) .AND.   & 
     171         IF( MOD(mig(ji), 3) == MOD(nn_hls, 3) .AND.   &              ! 1st bottom left corner always at (Nis0-1, Njs0-1) 
    172172           & MOD(mjg(jj), 3) == MOD(nn_hls, 3)         ) THEN         ! bottom left corner of a 3x3 box 
    173173            ji2 = MIN(mig(ji)+2, jpiglo) - nimpp + 1                  ! right position of the box 
     
    179179      END_2D 
    180180      CALL lbc_lnk( 'lib_fortran', p2d, 'T', 1.0_wp ) 
    181       ! no need for 2nd exchange when nn_hls = 2 
    182       IF( nn_hls /= 2 ) THEN 
    183          IF( nbondi /= -1 ) THEN 
    184             IF( MOD(mig(    1), 3) == 1 )   p2d(    1,:) = p2d(    2,:) 
    185             IF( MOD(mig(    1), 3) == 2 )   p2d(    2,:) = p2d(    1,:) 
    186          ENDIF 
    187          IF( nbondi /=  1 ) THEN 
     181      ! no need for 2nd exchange when nn_hls > 1 
     182      IF( nn_hls == 1 ) THEN 
     183         IF( mpiRnei(nn_hls,jpwe) > -1 ) THEN   ! 1st column was changed during the previous call to lbc_lnk 
     184            IF( MOD(mig(    1), 3) == 1 )   &   ! 1st box start at i=1 -> column 1 to 3 correctly computed locally 
     185               p2d(    1,:) = p2d(    2,:)      ! previous lbc_lnk corrupted column 1 -> put it back using column 2  
     186            IF( MOD(mig(    1), 3) == 2 )   &   ! 1st box start at i=3 -> column 1 and 2 correctly computed on west neighbourh 
     187               p2d(    2,:) = p2d(    1,:)      !  previous lbc_lnk fix column 1 -> copy it to column 2  
     188         ENDIF 
     189         IF( mpiRnei(nn_hls,jpea) > -1 ) THEN 
    188190            IF( MOD(mig(jpi-2), 3) == 1 )   p2d(  jpi,:) = p2d(jpi-1,:) 
    189191            IF( MOD(mig(jpi-2), 3) == 0 )   p2d(jpi-1,:) = p2d(  jpi,:) 
    190192         ENDIF 
    191          IF( nbondj /= -1 ) THEN 
     193         IF( mpiRnei(nn_hls,jpso) > -1 ) THEN 
    192194            IF( MOD(mjg(    1), 3) == 1 )   p2d(:,    1) = p2d(:,    2) 
    193195            IF( MOD(mjg(    1), 3) == 2 )   p2d(:,    2) = p2d(:,    1) 
    194196         ENDIF 
    195          IF( nbondj /=  1 ) THEN 
     197         IF( mpiRnei(nn_hls,jpno) > -1 ) THEN 
    196198            IF( MOD(mjg(jpj-2), 3) == 1 )   p2d(:,  jpj) = p2d(:,jpj-1) 
    197199            IF( MOD(mjg(jpj-2), 3) == 0 )   p2d(:,jpj-1) = p2d(:,  jpj) 
     
    223225         ! 
    224226         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    225             IF( MOD(mig(ji), 3) == MOD(nn_hls, 3) .AND.   & 
     227            IF( MOD(mig(ji), 3) == MOD(nn_hls, 3) .AND.   &              ! 1st bottom left corner always at (Nis0-1, Njs0-1) 
    226228              & MOD(mjg(jj), 3) == MOD(nn_hls, 3)         ) THEN         ! bottom left corner of a 3x3 box 
    227229               ji2 = MIN(mig(ji)+2, jpiglo) - nimpp + 1                  ! right position of the box 
     
    234236      END DO 
    235237      CALL lbc_lnk( 'lib_fortran', p3d, 'T', 1.0_wp ) 
    236       ! no need for 2nd exchange when nn_hls = 2 
    237       IF( nn_hls /= 2 ) THEN 
    238          IF( nbondi /= -1 ) THEN 
    239             IF( MOD(mig(    1), 3) == 1 )   p3d(    1,:,:) = p3d(    2,:,:) 
    240             IF( MOD(mig(    1), 3) == 2 )   p3d(    2,:,:) = p3d(    1,:,:) 
    241          ENDIF 
    242          IF( nbondi /=  1 ) THEN 
     238      ! no need for 2nd exchange when nn_hls > 1 
     239      IF( nn_hls == 1 ) THEN 
     240         IF( mpiRnei(nn_hls,jpwe) > -1 ) THEN    ! 1st column was changed during the previous call to lbc_lnk 
     241            IF( MOD(mig(    1), 3) == 1 )   &    ! 1st box start at i=1 -> column 1 to 3 correctly computed locally 
     242               p3d(    1,:,:) = p3d(    2,:,:)   ! previous lbc_lnk corrupted column 1 -> put it back using column 2  
     243            IF( MOD(mig(    1), 3) == 2 )   &    ! 1st box start at i=3 -> column 1 and 2 correctly computed on west neighbourh 
     244               p3d(    2,:,:) = p3d(    1,:,:)   !  previous lbc_lnk fix column 1 -> copy it to column 2  
     245         ENDIF 
     246         IF( mpiRnei(nn_hls,jpea) > -1 ) THEN 
    243247            IF( MOD(mig(jpi-2), 3) == 1 )   p3d(  jpi,:,:) = p3d(jpi-1,:,:) 
    244248            IF( MOD(mig(jpi-2), 3) == 0 )   p3d(jpi-1,:,:) = p3d(  jpi,:,:) 
    245249         ENDIF 
    246          IF( nbondj /= -1 ) THEN 
     250         IF( mpiRnei(nn_hls,jpso) > -1 ) THEN 
    247251            IF( MOD(mjg(    1), 3) == 1 )   p3d(:,    1,:) = p3d(:,    2,:) 
    248252            IF( MOD(mjg(    1), 3) == 2 )   p3d(:,    2,:) = p3d(:,    1,:) 
    249253         ENDIF 
    250          IF( nbondj /=  1 ) THEN 
     254         IF( mpiRnei(nn_hls,jpno) > -1 ) THEN 
    251255            IF( MOD(mjg(jpj-2), 3) == 1 )   p3d(:,  jpj,:) = p3d(:,jpj-1,:) 
    252256            IF( MOD(mjg(jpj-2), 3) == 0 )   p3d(:,jpj-1,:) = p3d(:,  jpj,:) 
Note: See TracChangeset for help on using the changeset viewer.