Changeset 4474


Ignore:
Timestamp:
Mar 26, 2020 9:32:18 AM (5 years ago)
Author:
raasch
Message:

bugfix for correct usage of alternative communicators in case of 1d-decompositions and in non-parallel mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/exchange_horiz_mod.f90

    r4461 r4474  
    2525! -----------------
    2626! $Id$
     27! bugfix for correct usage of alternative communicators in case of 1d-decompositions and in
     28! non-parallel mode
     29!
     30! 4461 2020-03-12 16:51:59Z raasch
    2731! optional communicator added to exchange_horiz
    2832!
     
    182186!--    One-dimensional decomposition along y, boundary values can be exchanged
    183187!--    within the PE memory
    184        IF ( bc_lr_cyc )  THEN
    185           ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
    186           ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     188       IF ( PRESENT( alternative_communicator ) )  THEN
     189          IF ( alternative_communicator <= 2 )  THEN
     190             ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
     191             ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     192          ENDIF
     193       ELSE
     194          IF ( bc_lr_cyc )  THEN
     195             ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
     196             ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     197          ENDIF
    187198       ENDIF
    188199
     
    244255!--    One-dimensional decomposition along x, boundary values can be exchanged
    245256!--    within the PE memory
    246        IF ( bc_ns_cyc )  THEN
    247           ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
    248           ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     257       IF ( PRESENT( alternative_communicator ) )  THEN
     258          IF ( alternative_communicator == 1  .OR.  alternative_communicator == 3 )  THEN
     259             ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
     260             ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     261          ENDIF
     262       ELSE
     263          IF ( bc_ns_cyc )  THEN
     264             ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
     265             ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     266          ENDIF
    249267       ENDIF
    250268
     
    302320!-- workaround has to be removed later. Also, since PGI compiler 12.5 has problems
    303321!-- with array syntax, explicit loops are used.
    304     IF ( bc_lr_cyc )  THEN
    305        ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
    306        ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     322    IF ( PRESENT( alternative_communicator ) )  THEN
     323       IF ( alternative_communicator <= 2 )  THEN
     324          ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
     325          ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     326       ENDIF
     327    ELSE
     328       IF ( bc_lr_cyc )  THEN
     329          ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
     330          ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     331       ENDIF
    307332    ENDIF
    308333
     
    315340    !$ACC WAIT(2)
    316341
    317     IF ( bc_ns_cyc )  THEN
    318        ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
    319        ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     342    IF ( PRESENT( alternative_communicator ) )  THEN
     343       IF ( alternative_communicator == 1  .OR.  alternative_communicator == 3 )  THEN
     344          ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
     345          ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     346       ENDIF
     347    ELSE
     348       IF ( bc_ns_cyc )  THEN
     349          ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
     350          ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     351       ENDIF
    320352    ENDIF
    321353
Note: See TracChangeset for help on using the changeset viewer.