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 15548 for NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/OCE/LBC/lbc_lnk_neicoll_generic.h90 – NEMO

Ignore:
Timestamp:
2021-11-28T18:59:49+01:00 (3 years ago)
Author:
gsamson
Message:

update branch to the head of the trunk (r15547); ticket #2632

Location:
NEMO/branches/2021/ticket2632_r14588_theta_sbcblk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/ticket2632_r14588_theta_sbcblk

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette@14244        sette 
         11^/utils/CI/sette@HEAD        sette 
         12 
  • NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/OCE/LBC/lbc_lnk_neicoll_generic.h90

    r14433 r15548  
    99      REAL(PRECISION),      OPTIONAL, INTENT(in   ) ::   pfillval    ! background value (used at closed boundaries) 
    1010      INTEGER ,             OPTIONAL, INTENT(in   ) ::   khls        ! halo size, default = nn_hls 
    11       LOGICAL, DIMENSION(4),OPTIONAL, INTENT(in   ) ::   lsend, lrecv  ! communication with other 4 proc 
     11      LOGICAL, DIMENSION(8),OPTIONAL, INTENT(in   ) ::   lsend, lrecv  ! communication with other 4 proc 
    1212      LOGICAL,              OPTIONAL, INTENT(in   ) ::   ld4only     ! if .T., do only 4-neighbour comm (ignore corners) 
    1313      ! 
     
    2626      INTEGER, DIMENSION(8)  ::   isizej, ishtSj, ishtRj, ishtPj 
    2727      INTEGER, DIMENSION(8)  ::   ifill, iszall 
     28      INTEGER, DIMENSION(8)  ::   jnf 
    2829      INTEGER, DIMENSION(:), ALLOCATABLE  ::   iScnt, iRcnt    ! number of elements to be sent/received 
    2930      INTEGER, DIMENSION(:), ALLOCATABLE  ::   iSdpl, iRdpl    ! displacement in halos arrays 
     
    3132      REAL(PRECISION) ::   zland 
    3233      LOGICAL  ::   ll4only                                    ! default: 8 neighbourgs 
    33       LOGICAL  ::   ll_IdoNFold 
    3434      !!---------------------------------------------------------------------- 
    3535      ! 
     
    7474      ! define llsend and llrecv: logicals which say if mpi-neibourgs for send or receive exist or not. 
    7575      IF     ( PRESENT(lsend) .AND. PRESENT(lrecv) ) THEN   ! localy defined neighbourgs  
    76          CALL ctl_stop( 'STOP', 'mpp_nc_generic+BDY not yet implemented') 
    77 !!$         ---> llsend(:) = lsend(:)   ;   llrecv(:) = lrecv(:) ??? 
     76         CALL ctl_stop( 'STOP', 'mpp_nc_generic+lsend and lrecv not yet implemented') 
    7877      ELSE IF( PRESENT(lsend) .OR.  PRESENT(lrecv) ) THEN 
    7978         WRITE(ctmp1,*) TRIM(cdname), '  is calling lbc_lnk with only one of the two arguments lsend or lrecv' 
     
    101100      END DO 
    102101      ! north fold treatment 
    103       ll_IdoNFold = l_IdoNFold .AND. ifill(jpno) /= jpfillnothing 
    104       IF( ll_IdoNFold ) THEN 
     102      IF( l_IdoNFold ) THEN 
    105103         ifill_nfd = ifill(jpno)             ! if we are here, this means llrecv(jpno) = .false. and l_SelfPerio(jpno) = .false. 
    106104         ifill( (/jpno/) ) = jpfillnothing   ! we do north fold -> do nothing for northern halo 
     
    145143      iScnt(:) = PACK( iszall, mask = llsend )                                       ! ok if mask = .false. 
    146144      iRcnt(:) = PACK( iszall, mask = llrecv ) 
    147       iSdpl(1) = 0 
     145      IF( iszS > 0 )   iSdpl(1) = 0 
    148146      DO jn = 2,iszS 
    149147         iSdpl(jn) = iSdpl(jn-1) + iScnt(jn-1)   ! with _alltoallv: in units of sendtype 
    150148      END DO 
    151       iRdpl(1) = 0 
     149      IF( iszR > 0 )   iRdpl(1) = 0 
    152150      DO jn = 2,iszR 
    153151         iRdpl(jn) = iRdpl(jn-1) + iRcnt(jn-1)   ! with _alltoallv: in units of sendtype 
     
    192190      ! 
    193191      idx = 1 
     192      ! MPI3 bug fix when domain decomposition has 2 columns/rows 
     193      IF (jpni .eq. 2) THEN 
     194         IF (jpnj .eq. 2) THEN 
     195            jnf(1:8) = (/ 2, 1, 4, 3, 8, 7, 6, 5 /) 
     196         ELSE 
     197            jnf(1:8) = (/ 2, 1, 3, 4, 6, 5, 8, 7 /) 
     198         ENDIF 
     199      ELSE 
     200         IF (jpnj .eq. 2) THEN 
     201            jnf(1:8) = (/ 1, 2, 4, 3, 7, 8, 5, 6 /) 
     202         ELSE 
     203            jnf(1:8) = (/ 1, 2, 3, 4, 5, 6, 7, 8 /) 
     204         ENDIF 
     205      ENDIF 
     206 
    194207      DO jn = 1, 8 
    195          ishti = ishtRi(jn) 
    196          ishtj = ishtRj(jn) 
    197          SELECT CASE ( ifill(jn) ) 
     208         ishti = ishtRi(jnf(jn)) 
     209         ishtj = ishtRj(jnf(jn)) 
     210         SELECT CASE ( ifill(jnf(jn)) ) 
    198211         CASE ( jpfillnothing )               ! no filling  
    199212         CASE ( jpfillmpi   )                 ! fill with data received by MPI 
    200             DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jn)  ;  DO ji = 1,isizei(jn) 
     213            DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jnf(jn))  ;  DO ji = 1,isizei(jnf(jn)) 
    201214               ptab(jf)%pt4d(ishti+ji,ishtj+jj,jk,jl) = BUFFRCV(idx) 
    202215               idx = idx + 1 
    203216            END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    204217         CASE ( jpfillperio )                 ! use periodicity 
    205             ishti2 = ishtPi(jn) 
    206             ishtj2 = ishtPj(jn) 
    207             DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jn)  ;  DO ji = 1,isizei(jn) 
     218            ishti2 = ishtPi(jnf(jn)) 
     219            ishtj2 = ishtPj(jnf(jn)) 
     220            DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jnf(jn))  ;  DO ji = 1,isizei(jnf(jn)) 
    208221               ptab(jf)%pt4d(ishti+ji,ishtj+jj,jk,jl) = ptab(jf)%pt4d(ishti2+ji,ishtj2+jj,jk,jl) 
    209222            END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    210223         CASE ( jpfillcopy  )                 ! filling with inner domain values 
    211             ishti2 = ishtSi(jn) 
    212             ishtj2 = ishtSj(jn) 
    213             DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jn)  ;  DO ji = 1,isizei(jn) 
     224            ishti2 = ishtSi(jnf(jn)) 
     225            ishtj2 = ishtSj(jnf(jn)) 
     226            DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jnf(jn))  ;  DO ji = 1,isizei(jnf(jn)) 
    214227               ptab(jf)%pt4d(ishti+ji,ishtj+jj,jk,jl) = ptab(jf)%pt4d(ishti2+ji,ishtj2+jj,jk,jl) 
    215228            END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    216229         CASE ( jpfillcst   )                 ! filling with constant value 
    217             DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jn)  ;  DO ji = 1,isizei(jn) 
     230            DO jf = 1, ipf  ;  DO jl = 1, ipl  ;  DO jk = 1, ipk  ;  DO jj = 1,isizej(jnf(jn))  ;  DO ji = 1,isizei(jnf(jn)) 
    218231               ptab(jf)%pt4d(ishti+ji,ishtj+jj,jk,jl) = zland 
    219232            END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
     
    251264      ! ------------------------------- ! 
    252265      ! 
    253       IF( ll_IdoNFold ) THEN 
     266      IF( l_IdoNFold ) THEN 
    254267         IF( jpni == 1 )  THEN   ;   CALL lbc_nfd( ptab, cd_nat, psgn                  , ihls, ipf )   ! self NFold 
    255268         ELSE                    ;   CALL mpp_nfd( ptab, cd_nat, psgn, ifill_nfd, zland, ihls, ipf )   ! mpi  NFold 
Note: See TracChangeset for help on using the changeset viewer.