Changeset 11059


Ignore:
Timestamp:
2019-05-27T13:05:25+02:00 (17 months ago)
Author:
girrmann
Message:

dev_r10984_HPC-13 : simplify bdyini.F90 following extension of bdy detection, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdyini.F90

    r11056 r11059  
    141141      INTEGER, ALLOCATABLE, DIMENSION(:,:,:)  ::   nbrdta           ! Discrete distance from rim points 
    142142      CHARACTER(LEN=1),DIMENSION(jpbgrd)      ::   cgrid 
    143       INTEGER :: com_east, com_west, com_south, com_north, jpk_max  ! Flags for boundaries sending 
    144       INTEGER :: com_east_b, com_west_b, com_south_b, com_north_b  ! Flags for boundaries receiving 
    145       INTEGER :: iw_b(4), ie_b(4), is_b(4), in_b(4)                ! Arrays for neighbours coordinates 
     143      INTEGER :: jpk_max 
     144      LOGICAL :: llsend_ea, llsend_we, llsend_so, llsend_no  ! Flags for boundaries sending 
     145      LOGICAL :: llrecv_ea, llrecv_we, llrecv_so, llrecv_no  ! Flags for boundaries receiving 
    146146      REAL(wp), TARGET, DIMENSION(jpi,jpj) ::   zfmask  ! temporary fmask array excluding coastal boundary condition (shlat) 
    147147      REAL(wp)        , DIMENSION(jpi,jpj) ::   ztmp 
     
    792792      END DO 
    793793 
    794       ! Work out dimensions of boundary data on each processor 
    795       ! ------------------------------------------------------ 
    796  
    797       ! Rather assume that boundary data indices are given on global domain 
    798       ! TO BE DISCUSSED ? 
    799 !      iw = mig(1) + 1            ! if monotasking and no zoom, iw=2 
    800 !      ie = mig(1) + nlci-1 - 1   ! if monotasking and no zoom, ie=jpim1 
    801 !      is = mjg(1) + 1            ! if monotasking and no zoom, is=2 
    802 !      in = mjg(1) + nlcj-1 - 1   ! if monotasking and no zoom, in=jpjm1       
    803       iwe = mig(1) - 1 + 2 - nde       ! if monotasking and no zoom, iw=2 
    804       ies = mig(1) + nlci-1 - 1 + nde  ! if monotasking and no zoom, ie=jpim1 
    805       iso = mjg(1) - 1 + 2 - nde       ! if monotasking and no zoom, is=2 
    806       ino = mjg(1) + nlcj-1 - 1 + nde  ! if monotasking and no zoom, in=jpjm1 
    807  
    808       ALLOCATE( nbondi_bdy(nb_bdy)) 
    809       ALLOCATE( nbondj_bdy(nb_bdy)) 
    810       nbondi_bdy(:)=2 
    811       nbondj_bdy(:)=2 
    812       ALLOCATE( nbondi_bdy_b(nb_bdy)) 
    813       ALLOCATE( nbondj_bdy_b(nb_bdy)) 
    814       nbondi_bdy_b(:)=2 
    815       nbondj_bdy_b(:)=2 
    816  
    817       ! Work out dimensions of boundary data on each neighbour process 
    818       IF(nbondi == 0) THEN 
    819          iw_b(1) = 1 + nimppt(nowe+1) 
    820          ie_b(1) = 1 + nimppt(nowe+1)+nlcit(nowe+1)-3 
    821          is_b(1) = 1 + njmppt(nowe+1) 
    822          in_b(1) = 1 + njmppt(nowe+1)+nlcjt(nowe+1)-3 
    823  
    824          iw_b(2) = 1 + nimppt(noea+1) 
    825          ie_b(2) = 1 + nimppt(noea+1)+nlcit(noea+1)-3 
    826          is_b(2) = 1 + njmppt(noea+1) 
    827          in_b(2) = 1 + njmppt(noea+1)+nlcjt(noea+1)-3 
    828       ELSEIF(nbondi == 1) THEN 
    829          iw_b(1) = 1 + nimppt(nowe+1) 
    830          ie_b(1) = 1 + nimppt(nowe+1)+nlcit(nowe+1)-3 
    831          is_b(1) = 1 + njmppt(nowe+1) 
    832          in_b(1) = 1 + njmppt(nowe+1)+nlcjt(nowe+1)-3 
    833       ELSEIF(nbondi == -1) THEN 
    834          iw_b(2) = 1 + nimppt(noea+1) 
    835          ie_b(2) = 1 + nimppt(noea+1)+nlcit(noea+1)-3 
    836          is_b(2) = 1 + njmppt(noea+1) 
    837          in_b(2) = 1 + njmppt(noea+1)+nlcjt(noea+1)-3 
    838       ENDIF 
    839  
    840       IF(nbondj == 0) THEN 
    841          iw_b(3) = 1 + nimppt(noso+1) 
    842          ie_b(3) = 1 + nimppt(noso+1)+nlcit(noso+1)-3 
    843          is_b(3) = 1 + njmppt(noso+1) 
    844          in_b(3) = 1 + njmppt(noso+1)+nlcjt(noso+1)-3 
    845  
    846          iw_b(4) = 1 + nimppt(nono+1) 
    847          ie_b(4) = 1 + nimppt(nono+1)+nlcit(nono+1)-3 
    848          is_b(4) = 1 + njmppt(nono+1) 
    849          in_b(4) = 1 + njmppt(nono+1)+nlcjt(nono+1)-3 
    850       ELSEIF(nbondj == 1) THEN 
    851          iw_b(3) = 1 + nimppt(noso+1) 
    852          ie_b(3) = 1 + nimppt(noso+1)+nlcit(noso+1)-3 
    853          is_b(3) = 1 + njmppt(noso+1) 
    854          in_b(3) = 1 + njmppt(noso+1)+nlcjt(noso+1)-3 
    855       ELSEIF(nbondj == -1) THEN 
    856          iw_b(4) = 1 + nimppt(nono+1) 
    857          ie_b(4) = 1 + nimppt(nono+1)+nlcit(nono+1)-3 
    858          is_b(4) = 1 + njmppt(nono+1) 
    859          in_b(4) = 1 + njmppt(nono+1)+nlcjt(nono+1)-3 
    860       ENDIF 
    861  
     794      ! Find lenght of boundaries and rim on local mpi domain 
     795      !------------------------------------------------------ 
     796      ! 
     797      iwe = mig(1) 
     798      ies = mig(nlci) 
     799      iso = mjg(1)  
     800      ino = mjg(nlcj)  
     801      ! 
    862802      DO ib_bdy = 1, nb_bdy 
    863803         DO igrd = 1, jpbgrd 
    864             icount  = 0 
    865             icountr = 0 
     804            icount  = 0   ! initialization of local bdy length 
     805            icountr = 0   ! initialization of local rim bdy length 
    866806            idx_bdy(ib_bdy)%nblen(igrd)    = 0 
    867807            idx_bdy(ib_bdy)%nblenrim(igrd) = 0 
     
    880820                  & nbjdta(ib,igrd,ib_bdy) >= iso .AND. nbjdta(ib,igrd,ib_bdy) <= ino      ) THEN 
    881821                  ! 
    882                   icount = icount  + 1 
    883                   ! 
    884                   IF( nbrdta(ib,igrd,ib_bdy) == 1 )   icountr = icountr+1 
     822                  icount = icount + 1 
     823                  IF( nbrdta(ib,igrd,ib_bdy) == 1 )   icountr = icountr + 1 
    885824               ENDIF 
    886825            END DO 
    887826            idx_bdy(ib_bdy)%nblenrim(igrd) = icountr !: length of rim boundary data on each proc 
    888827            idx_bdy(ib_bdy)%nblen   (igrd) = icount  !: length of boundary data on each proc         
    889          END DO  ! igrd 
     828         END DO   ! igrd 
    890829 
    891830         ! Allocate index arrays for this boundary set 
     
    905844         ! Dispatch mapping indices and discrete distances on each processor 
    906845         ! ----------------------------------------------------------------- 
    907  
    908          com_east  = 0 
    909          com_west  = 0 
    910          com_south = 0 
    911          com_north = 0 
    912  
    913          com_east_b  = 0 
    914          com_west_b  = 0 
    915          com_south_b = 0 
    916          com_north_b = 0 
    917  
    918846         DO igrd = 1, jpbgrd 
    919847            icount  = 0 
    920             ! Loop on rimwidth to ensure outermost points come first in the local arrays. 
     848            ! Outer loop on rimwidth to ensure outermost points come first in the local arrays. 
    921849            DO ir=1, nn_rimwidth(ib_bdy) 
    922850               DO ib = 1, nblendta(igrd,ib_bdy) 
     
    927855                     ! 
    928856                     icount = icount  + 1 
    929  
    930                      ! Rather assume that boundary data indices are given on global domain 
    931                      ! TO BE DISCUSSED ? 
    932 !                     idx_bdy(ib_bdy)%nbi(icount,igrd)   = nbidta(ib,igrd,ib_bdy)- mig(1)+1 
    933 !                     idx_bdy(ib_bdy)%nbj(icount,igrd)   = nbjdta(ib,igrd,ib_bdy)- mjg(1)+1 
    934                      idx_bdy(ib_bdy)%nbi(icount,igrd)   = nbidta(ib,igrd,ib_bdy)- mig(1)+1 
    935                      idx_bdy(ib_bdy)%nbj(icount,igrd)   = nbjdta(ib,igrd,ib_bdy)- mjg(1)+1 
    936                      ! check if point has to be sent 
    937                      ii = idx_bdy(ib_bdy)%nbi(icount,igrd) 
    938                      ij = idx_bdy(ib_bdy)%nbj(icount,igrd) 
    939                      if((ii == (nlci-1)) .and. (ij /= 1) .and. (ij /= nlcj) .and. (nbondi .le. 0)) then 
    940                         com_east = 1 
    941                      elseif((ii == 2) .and. (ij /= 1) .and. (ij /= nlcj) .and. (nbondi .ge. 0) .and. (nbondi .ne. 2)) then 
    942                         com_west = 1 
    943                      endif  
    944                      if((ij == 2) .and. (ii /= 1) .and. (ii /= nlci) .and. (nbondj .ge. 0) .and. (nbondj .ne. 2)) then 
    945                         com_south = 1 
    946                      elseif((ij == (nlcj-1)) .and. (ii /= 1) .and. (ii /= nlci) .and. (nbondj .le. 0)) then 
    947                         com_north = 1 
    948                      endif  
     857                     idx_bdy(ib_bdy)%nbi(icount,igrd)   = nbidta(ib,igrd,ib_bdy)- mig(1)+1   ! global to local indexes 
     858                     idx_bdy(ib_bdy)%nbj(icount,igrd)   = nbjdta(ib,igrd,ib_bdy)- mjg(1)+1   ! global to local indexes 
    949859                     idx_bdy(ib_bdy)%nbr(icount,igrd)   = nbrdta(ib,igrd,ib_bdy) 
    950860                     idx_bdy(ib_bdy)%nbmap(icount,igrd) = ib 
    951861                  ENDIF 
    952                   ! check if point has to be received from a neighbour 
    953                   IF(nbondi == 0) THEN 
    954                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    955                        & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    956                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    957                        ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    958                        if( ii == (nlcit(nowe+1)-1) ) then 
    959                           ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    960                           if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    961                             com_south = 1 
    962                           elseif((ij == nlcjt(nowe+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    963                             com_north = 1 
    964                           endif 
    965                           com_west_b = 1 
    966                        endif  
    967                      ENDIF 
    968                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND.   & 
    969                        & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND.   & 
    970                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    971                        ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    972                        if( ii == 2 ) then 
    973                           ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    974                           if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    975                             com_south = 1 
    976                           elseif((ij == nlcjt(noea+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    977                             com_north = 1 
    978                           endif 
    979                           com_east_b = 1 
    980                        endif  
    981                      ENDIF 
    982                   ELSEIF(nbondi == 1) THEN 
    983                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND.   & 
    984                        & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND.   & 
    985                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    986                        ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 
    987                        if( ii == (nlcit(nowe+1)-1) ) then 
    988                           ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 
    989                           if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    990                             com_south = 1 
    991                           elseif((ij == nlcjt(nowe+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    992                             com_north = 1 
    993                           endif 
    994                           com_west_b = 1 
    995                        endif  
    996                      ENDIF 
    997                   ELSEIF(nbondi == -1) THEN 
    998                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND.   & 
    999                        & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND.   & 
    1000                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1001                        ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 
    1002                        if( ii == 2 ) then 
    1003                           ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 
    1004                           if((ij == 2) .and. (nbondj == 0 .or. nbondj == 1)) then 
    1005                             com_south = 1 
    1006                           elseif((ij == nlcjt(noea+1)-1) .and. (nbondj == 0 .or. nbondj == -1)) then 
    1007                             com_north = 1 
    1008                           endif 
    1009                           com_east_b = 1 
    1010                        endif  
    1011                      ENDIF 
    1012                   ENDIF 
    1013                   IF(nbondj == 0) THEN 
    1014                      IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    1015                        & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
    1016                        & nbjdta(ib,igrd,ib_bdy) == is_b(4) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 
    1017                        com_north_b = 1  
    1018                      ENDIF 
    1019                      IF(com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1  & 
    1020                        &.OR. nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 
    1021                        & nbjdta(ib,igrd,ib_bdy) == in_b(3) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 
    1022                        com_south_b = 1  
    1023                      ENDIF 
    1024                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(3) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(3) .AND.   & 
    1025                        & nbjdta(ib,igrd,ib_bdy) >= is_b(3) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(3) .AND.   & 
    1026                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1027                        ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1028                        if((com_south_b .ne. 1) .and. (ij == (nlcjt(noso+1)-1))) then 
    1029                           com_south_b = 1 
    1030                        endif  
    1031                      ENDIF 
    1032                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(4) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(4) .AND.   & 
    1033                        & nbjdta(ib,igrd,ib_bdy) >= is_b(4) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(4) .AND.   & 
    1034                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1035                        ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1036                        if((com_north_b .ne. 1) .and. (ij == 2)) then 
    1037                           com_north_b = 1 
    1038                        endif  
    1039                      ENDIF 
    1040                   ELSEIF(nbondj == 1) THEN 
    1041                      IF( com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1 .OR. & 
    1042                        & nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 
    1043                        & nbjdta(ib,igrd,ib_bdy) == in_b(3) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 
    1044                        com_south_b = 1  
    1045                      ENDIF 
    1046                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(3) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(3) .AND.   & 
    1047                        & nbjdta(ib,igrd,ib_bdy) >= is_b(3) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(3) .AND.   & 
    1048                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1049                        ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 
    1050                        if((com_south_b .ne. 1) .and. (ij == (nlcjt(noso+1)-1))) then 
    1051                           com_south_b = 1 
    1052                        endif  
    1053                      ENDIF 
    1054                   ELSEIF(nbondj == -1) THEN 
    1055                      IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1  & 
    1056                        & .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 
    1057                        & nbjdta(ib,igrd,ib_bdy) == is_b(4) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 
    1058                        com_north_b = 1  
    1059                      ENDIF 
    1060                      IF( nbidta(ib,igrd,ib_bdy) >= iw_b(4) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(4) .AND.   & 
    1061                        & nbjdta(ib,igrd,ib_bdy) >= is_b(4) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(4) .AND.   & 
    1062                        & nbrdta(ib,igrd,ib_bdy) == ir  ) THEN 
    1063                        ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 
    1064                        if((com_north_b .ne. 1) .and. (ij == 2)) then 
    1065                           com_north_b = 1 
    1066                        endif  
    1067                      ENDIF 
    1068                   ENDIF 
    1069                ENDDO 
    1070             ENDDO 
    1071          ENDDO  
     862               END DO 
     863            END DO 
     864         END DO   ! igrd 
     865 
     866      END DO   ! ib_bdy 
     867 
     868      ! Initialize array indicating communications in bdy 
     869      ! ------------------------------------------------- 
     870 
     871      ! Allocate array indicating if a send    instruction is needed in bdy treatment 
     872      ALLOCATE( nbondi_bdy(nb_bdy) ) 
     873      ALLOCATE( nbondj_bdy(nb_bdy) ) 
     874      nbondi_bdy(:)=2 
     875      nbondj_bdy(:)=2 
     876      ! Allocate array indicating if a receive instruction is needed in bdy treatment 
     877      ALLOCATE( nbondi_bdy_b(nb_bdy)) 
     878      ALLOCATE( nbondj_bdy_b(nb_bdy)) 
     879      nbondi_bdy_b(:)=2 
     880      nbondj_bdy_b(:)=2 
     881 
     882      DO ib_bdy = 1, nb_bdy 
     883         ! default : no send 
     884         llsend_ea = .false.    
     885         llsend_we = .false. 
     886         llsend_so = .false. 
     887         llsend_no = .false. 
     888         ! default : no receive 
     889         llrecv_ea = .false. 
     890         llrecv_we = .false. 
     891         llrecv_so = .false. 
     892         llrecv_no = .false. 
     893         DO igrd = 1, jpbgrd 
     894            DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd)   ! only the rim triggers communications, see bdy routines 
     895               ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     896               ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     897               ! 
     898               ! check if point has to be sent     to   a neighbour 
     899               ! E neighbour and on the inner right side 
     900               IF( ii == nlci-1 .and. (nbondi == 0 .or. nbondi == -1) )   llsend_ea = .true. 
     901               ! W neighbour and on the inner left  side 
     902               IF( ii == 2      .and. (nbondi == 0 .or. nbondi ==  1) )   llsend_we = .true. 
     903               ! N neighbour and on the inner up   side 
     904               IF( ij == nlcj-1 .and. (nbondj == 0 .or. nbondj == -1) )   llsend_no = .true. 
     905               ! S neighbour and on the inner down side 
     906               IF( ij == 2      .and. (nbondj == 0 .or. nbondj ==  1) )   llsend_so = .true. 
     907               ! 
     908               ! check if point has to be received from a neighbour 
     909               ! E neighbour and on the outter right side 
     910               IF( ii == nlci .and. (nbondi == 0 .or. nbondi == -1) )   llrecv_ea = .true. 
     911               ! W neighbour and on the outter left  side 
     912               IF( ii == 1    .and. (nbondi == 0 .or. nbondi ==  1) )   llrecv_we = .true. 
     913               ! N neighbour and on the outter up   side 
     914               IF( ij == nlcj .and. (nbondj == 0 .or. nbondj == -1) )   llrecv_no = .true. 
     915               ! S neighbour and on the outter down side 
     916               IF( ij == 1    .and. (nbondj == 0 .or. nbondj ==  1) )   llrecv_so = .true. 
     917               ! 
     918            END DO 
     919         END DO  ! igrd 
    1072920 
    1073921         ! definition of the i- and j- direction local boundaries arrays used for sending the boundaries 
    1074          IF(     (com_east  == 1) .and. (com_west  == 1) ) THEN   ;   nbondi_bdy(ib_bdy) =  0 
    1075          ELSEIF( (com_east  == 1) .and. (com_west  == 0) ) THEN   ;   nbondi_bdy(ib_bdy) = -1 
    1076          ELSEIF( (com_east  == 0) .and. (com_west  == 1) ) THEN   ;   nbondi_bdy(ib_bdy) =  1 
     922         IF(           llsend_ea .and.       llsend_we ) THEN   ;   nbondi_bdy(ib_bdy) =  0 
     923         ELSEIF(       llsend_ea .and. .not. llsend_we ) THEN   ;   nbondi_bdy(ib_bdy) = -1 
     924         ELSEIF( .not. llsend_ea .and.       llsend_we ) THEN   ;   nbondi_bdy(ib_bdy) =  1 
    1077925         ENDIF 
    1078          IF(     (com_north == 1) .and. (com_south == 1) ) THEN   ;   nbondj_bdy(ib_bdy) =  0 
    1079          ELSEIF( (com_north == 1) .and. (com_south == 0) ) THEN   ;   nbondj_bdy(ib_bdy) = -1 
    1080          ELSEIF( (com_north == 0) .and. (com_south == 1) ) THEN   ;   nbondj_bdy(ib_bdy) =  1 
     926         IF(           llsend_no .and.       llsend_so ) THEN   ;   nbondj_bdy(ib_bdy) =  0 
     927         ELSEIF(       llsend_no .and. .not. llsend_so ) THEN   ;   nbondj_bdy(ib_bdy) = -1 
     928         ELSEIF( .not. llsend_no .and.       llsend_so ) THEN   ;   nbondj_bdy(ib_bdy) =  1 
    1081929         ENDIF 
    1082930 
    1083931         ! definition of the i- and j- direction local boundaries arrays used for receiving the boundaries 
    1084          IF(     (com_east_b  == 1) .and. (com_west_b  == 1) ) THEN   ;   nbondi_bdy_b(ib_bdy) =  0 
    1085          ELSEIF( (com_east_b  == 1) .and. (com_west_b  == 0) ) THEN   ;   nbondi_bdy_b(ib_bdy) = -1 
    1086          ELSEIF( (com_east_b  == 0) .and. (com_west_b  == 1) ) THEN   ;   nbondi_bdy_b(ib_bdy) =  1 
     932         IF(           llrecv_ea .and.       llrecv_we ) THEN   ;   nbondi_bdy_b(ib_bdy) =  0 
     933         ELSEIF(       llrecv_ea .and. .not. llrecv_we ) THEN   ;   nbondi_bdy_b(ib_bdy) = -1 
     934         ELSEIF( .not. llrecv_ea .and.       llrecv_we ) THEN   ;   nbondi_bdy_b(ib_bdy) =  1 
    1087935         ENDIF 
    1088          IF(     (com_north_b == 1) .and. (com_south_b == 1) ) THEN   ;   nbondj_bdy_b(ib_bdy) =  0 
    1089          ELSEIF( (com_north_b == 1) .and. (com_south_b == 0) ) THEN   ;   nbondj_bdy_b(ib_bdy) = -1 
    1090          ELSEIF( (com_north_b == 0) .and. (com_south_b == 1) ) THEN   ;   nbondj_bdy_b(ib_bdy) =  1 
     936         IF(           llrecv_no .and.       llrecv_so ) THEN   ;   nbondj_bdy_b(ib_bdy) =  0 
     937         ELSEIF(       llrecv_no .and. .not. llrecv_so ) THEN   ;   nbondj_bdy_b(ib_bdy) = -1 
     938         ELSEIF( .not. llrecv_no .and.       llrecv_so ) THEN   ;   nbondj_bdy_b(ib_bdy) =  1 
    1091939         ENDIF 
    1092940 
     
    1114962         END DO  
    1115963 
    1116       END DO 
     964      END DO ! ib_bdy 
    1117965 
    1118966      ! ------------------------------------------------------ 
     
    13361184   END SUBROUTINE bdy_segs 
    13371185 
     1186 
    13381187   SUBROUTINE bdy_ctl_seg 
    13391188      !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.