Ignore:
Timestamp:
Dec 14, 2017 5:12:51 PM (4 years ago)
Author:
kanani
Message:

Merge of branch palm4u into trunk

Location:
palm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk

  • palm/trunk/SOURCE

  • palm/trunk/SOURCE/exchange_horiz.f90

    r2298 r2696  
    11!> @file exchange_horiz.f90
    22!------------------------------------------------------------------------------!
    3 ! This file is part of PALM.
     3! This file is part of the PALM model system.
    44!
    55! PALM is free software: you can redistribute it and/or modify it under the
     
    2525! -----------------
    2626! $Id$
     27! 3D-Integer exchange on multigrid level (MS)
     28!
     29! 2298 2017-06-29 09:28:18Z raasch
    2730! sendrecv_in_background related parts removed
    2831!
     
    266269!> @todo Missing subroutine description.
    267270!------------------------------------------------------------------------------!
    268  SUBROUTINE exchange_horiz_int( ar, nbgp_local)
     271 SUBROUTINE exchange_horiz_int( ar, nys_l, nyn_l, nxl_l, nxr_l, nzt_l, nbgp_local)
    269272
    270273    USE control_parameters,                                                    &
    271         ONLY:  bc_lr, bc_lr_cyc, bc_ns, bc_ns_cyc
     274        ONLY:  bc_lr, bc_lr_cyc, bc_ns, bc_ns_cyc, grid_level
    272275                       
    273276    USE indices,                                                               &
     
    280283    IMPLICIT NONE
    281284
    282 
     285    INTEGER(iwp) ::  nxl_l       !< local index bound at current grid level, left side
     286    INTEGER(iwp) ::  nxr_l       !< local index bound at current grid level, right side
     287    INTEGER(iwp) ::  nyn_l       !< local index bound at current grid level, north side
     288    INTEGER(iwp) ::  nys_l       !< local index bound at current grid level, south side
     289    INTEGER(iwp) ::  nzt_l       !< local index bound at current grid level, top
    283290    INTEGER(iwp) ::  nbgp_local  !< number of ghost points
    284291   
    285     INTEGER(iwp), DIMENSION(nzb:nzt+1,nys-nbgp_local:nyn+nbgp_local,           &
    286                         nxl-nbgp_local:nxr+nbgp_local) ::  ar  !< treated array
     292    INTEGER(iwp), DIMENSION(nzb:nzt_l+1,nys_l-nbgp_local:nyn_l+nbgp_local,     &
     293                            nxl_l-nbgp_local:nxr_l+nbgp_local) ::  ar  !< treated array
    287294
    288295
     
    293300!--    within the PE memory
    294301       IF ( bc_lr_cyc )  THEN
    295           ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
    296           ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     302          ar(:,:,nxl_l-nbgp_local:nxl_l-1) = ar(:,:,nxr_l-nbgp_local+1:nxr_l)
     303          ar(:,:,nxr_l+1:nxr_l+nbgp_local) = ar(:,:,nxl_l:nxl_l+nbgp_local-1)
    297304       ENDIF
    298305    ELSE
    299306!
    300307!--    Send left boundary, receive right one (synchronous)
    301        CALL MPI_SENDRECV(                                                      &
    302            ar(nzb,nys-nbgp_local,nxl),   1, type_yz_int, pleft,  0,            &
    303            ar(nzb,nys-nbgp_local,nxr+1), 1, type_yz_int, pright, 0,            &
     308       CALL MPI_SENDRECV(                                                          &
     309           ar(nzb,nys_l-nbgp_local,nxl_l),   1, type_yz_int(grid_level), pleft,  0,&
     310           ar(nzb,nys_l-nbgp_local,nxr_l+1), 1, type_yz_int(grid_level), pright, 0,&
    304311           comm2d, status, ierr )
    305312!
    306313!--    Send right boundary, receive left one (synchronous)
    307        CALL MPI_SENDRECV(                                                      &
    308            ar(nzb,nys-nbgp_local,nxr+1-nbgp_local), 1, type_yz_int, pright, 1, &
    309            ar(nzb,nys-nbgp_local,nxl-nbgp_local),   1, type_yz_int, pleft,  1, &
     314       CALL MPI_SENDRECV(                                                          &
     315           ar(nzb,nys_l-nbgp_local,nxr_l+1-nbgp_local), 1, type_yz_int(grid_level),&
     316           pright, 1,                                                              &
     317           ar(nzb,nys_l-nbgp_local,nxl_l-nbgp_local),   1, type_yz_int(grid_level),&
     318           pleft,  1,                                                              &
    310319           comm2d, status, ierr )
    311320    ENDIF
     
    317326!--    within the PE memory
    318327       IF ( bc_ns_cyc )  THEN
    319           ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:)
    320           ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:)
     328          ar(:,nys_l-nbgp_local:nys_l-1,:) = ar(:,nyn_l-nbgp_local+1:nyn_l,:)
     329          ar(:,nyn_l+1:nyn_l+nbgp_local,:) = ar(:,nys_l:nys_l+nbgp_local-1,:)
    321330       ENDIF
    322331
     
    325334!
    326335!--    Send front boundary, receive rear one (synchronous)
    327        CALL MPI_SENDRECV(                                                      &
    328            ar(nzb,nys,nxl-nbgp_local),   1, type_xz_int, psouth, 0,            &
    329            ar(nzb,nyn+1,nxl-nbgp_local), 1, type_xz_int, pnorth, 0,            &
     336       CALL MPI_SENDRECV(                                                          &
     337           ar(nzb,nys_l,nxl_l-nbgp_local),   1, type_xz_int(grid_level), psouth, 0,&
     338           ar(nzb,nyn_l+1,nxl_l-nbgp_local), 1, type_xz_int(grid_level), pnorth, 0,&
    330339           comm2d, status, ierr )
    331340!
    332341!--    Send rear boundary, receive front one (synchronous)
    333        CALL MPI_SENDRECV( ar(nzb,nyn-nbgp_local+1,nxl-nbgp_local), 1,          &
    334                           type_xz_int, pnorth, 1,                              &
    335                           ar(nzb,nys-nbgp_local,nxl-nbgp_local),   1,          &
    336                           type_xz_int, psouth, 1,                              &
     342       CALL MPI_SENDRECV( ar(nzb,nyn_l-nbgp_local+1,nxl_l-nbgp_local), 1,          &
     343                          type_xz_int(grid_level), pnorth, 1,                      &
     344                          ar(nzb,nys_l-nbgp_local,nxl_l-nbgp_local),   1,          &
     345                          type_xz_int(grid_level), psouth, 1,                      &
    337346                          comm2d, status, ierr )
    338347
     
    342351
    343352    IF ( bc_lr == 'cyclic' )  THEN
    344        ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr)
    345        ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1)
     353       ar(:,:,nxl_l-nbgp_local:nxl_l-1) = ar(:,:,nxr_l-nbgp_local+1:nxr_l)
     354       ar(:,:,nxr_l+1:nxr_l+nbgp_local) = ar(:,:,nxl_l:nxl_l+nbgp_local-1)
    346355    ENDIF
    347356
    348357    IF ( bc_ns == 'cyclic' )  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,:)
     358       ar(:,nys_l-nbgp_local:nys_l-1,:) = ar(:,nyn_l-nbgp_local+1:nyn_l,:)
     359       ar(:,nyn_l+1:nyn_l+nbgp_local,:) = ar(:,nys_l:nys_l+nbgp_local-1,:)
    351360    ENDIF
    352361
Note: See TracChangeset for help on using the changeset viewer.