Changeset 1968 for palm/trunk/SOURCE/exchange_horiz_2d.f90
- Timestamp:
- Jul 18, 2016 12:01:49 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/exchange_horiz_2d.f90
r1933 r1968 19 19 ! Current revisions: 20 20 ! ----------------- 21 ! 21 ! 2D-INTEGER exchange adopted for different multigrid level 22 22 ! 23 23 ! Former revisions: … … 203 203 !------------------------------------------------------------------------------! 204 204 205 SUBROUTINE exchange_horiz_2d_int( ar )205 SUBROUTINE exchange_horiz_2d_int( ar, nys_l, nyn_l, nxl_l, nxr_l, nbgp_local ) 206 206 207 207 208 208 USE control_parameters, & 209 ONLY: bc_lr_cyc, bc_ns_cyc, nest_bound_l, nest_bound_n, nest_bound_r,&210 nest_bound_ s209 ONLY: bc_lr_cyc, bc_ns_cyc, grid_level, nest_bound_l, nest_bound_n, & 210 nest_bound_r, nest_bound_s 211 211 212 212 USE cpulog, & 213 213 ONLY: cpu_log, log_point_s 214 215 USE indices, & 216 ONLY: nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg 217 214 218 215 USE kinds 219 216 … … 222 219 IMPLICIT NONE 223 220 224 INTEGER(iwp) :: i 225 INTEGER(iwp) :: ar(nysg:nyng,nxlg:nxrg) !< 221 INTEGER(iwp) :: i !< dummy index to zero-gradient conditions at in/outflow boundaries 222 INTEGER(iwp) :: nxl_l !< local index bound at current grid level, left side 223 INTEGER(iwp) :: nxr_l !< local index bound at current grid level, right side 224 INTEGER(iwp) :: nyn_l !< local index bound at current grid level, north side 225 INTEGER(iwp) :: nys_l !< local index bound at current grid level, south side 226 INTEGER(iwp) :: nbgp_local !< number of ghost layers to be exchanged 227 228 INTEGER(iwp), DIMENSION(nys_l-nbgp_local:nyn_l+nbgp_local, & 229 nxl_l-nbgp_local:nxr_l+nbgp_local) :: ar !< treated array 226 230 227 231 CALL cpu_log( log_point_s(13), 'exchange_horiz_2d', 'start' ) … … 236 240 !-- One-dimensional decomposition along y, boundary values can be exchanged 237 241 !-- within the PE memory 238 ar(:,nxlg:nxl-1) = ar(:,nxr-nbgp+1:nxr) 239 ar(:,nxr+1:nxrg) = ar(:,nxl:nxl+nbgp-1) 240 242 ar(:,nxl_l-nbgp_local:nxl_l-1) = ar(:,nxr_l-nbgp_local+1:nxr_l) 243 ar(:,nxr_l+1:nxr_l+nbgp_local) = ar(:,nxl_l:nxl_l+nbgp_local-1) 241 244 242 245 ELSE 243 246 ! 244 247 !-- Send left boundary, receive right one 245 CALL MPI_SENDRECV( ar(nysg,nxl), 1, type_y_int, pleft, 0, & 246 ar(nysg,nxr+1), 1, type_y_int, pright, 0, & 248 CALL MPI_SENDRECV( ar(nys_l-nbgp_local,nxl_l), 1, & 249 type_y_int(grid_level), pleft, 0, & 250 ar(nys_l-nbgp_local,nxr_l+1), 1, & 251 type_y_int(grid_level), pright, 0, & 247 252 comm2d, status, ierr ) 248 253 ! 249 254 !-- Send right boundary, receive left one 250 CALL MPI_SENDRECV( ar(nysg,nxr+1-nbgp), 1, type_y_int, pright, 1, & 251 ar(nysg,nxlg), 1, type_y_int, pleft, 1, & 252 comm2d, status, ierr ) 255 CALL MPI_SENDRECV( ar(nys_l-nbgp_local,nxr_l+1-nbgp_local), 1, & 256 type_y_int(grid_level), pright, 1, & 257 ar(nys_l-nbgp_local,nxl_l-nbgp_local), 1, & 258 type_y_int(grid_level), pleft, 1, & 259 comm2d, status, ierr ) 253 260 254 261 ENDIF … … 258 265 !-- One-dimensional decomposition along x, boundary values can be exchanged 259 266 !-- within the PE memory 260 ar(nys g:nys-1,:) = ar(nyn+1-nbgp:nyn,:)261 ar(nyn +1:nyng,:) = ar(nys:nys-1+nbgp,:)267 ar(nys_l-nbgp_local:nys_l-1,:) = ar(nyn_l+1-nbgp_local:nyn_l,:) 268 ar(nyn_l+1:nyn_l+nbgp_local,:) = ar(nys_l:nys_l-1+nbgp_local,:) 262 269 263 270 … … 265 272 ! 266 273 !-- Send front boundary, receive rear one 267 CALL MPI_SENDRECV( ar(nys,nxlg), 1, type_x_int, psouth, 0, & 268 ar(nyn+1,nxlg), 1, type_x_int, pnorth, 0, & 274 CALL MPI_SENDRECV( ar(nys_l,nxl_l-nbgp_local), 1, & 275 type_x_int(grid_level), psouth, 0, & 276 ar(nyn_l+1,nxl_l-nbgp_local), 1, & 277 type_x_int(grid_level), pnorth, 0, & 269 278 comm2d, status, ierr ) 270 279 271 280 ! 272 281 !-- Send rear boundary, receive front one 273 CALL MPI_SENDRECV( ar(nyn+1-nbgp,nxlg), 1, type_x_int, pnorth, 1, & 274 ar(nysg,nxlg), 1, type_x_int, psouth, 1, & 282 CALL MPI_SENDRECV( ar(nyn_l+1-nbgp_local,nxl_l-nbgp_local), 1, & 283 type_x_int(grid_level), pnorth, 1, & 284 ar(nys_l-nbgp_local,nxl_l-nbgp_local), 1, & 285 type_x_int(grid_level), psouth, 1, & 275 286 comm2d, status, ierr ) 276 287 … … 282 293 !-- Lateral boundary conditions in the non-parallel case 283 294 IF ( bc_lr_cyc ) THEN 284 ar(:,nxl g:nxl-1) = ar(:,nxr-nbgp+1:nxr)285 ar(:,nxr +1:nxrg) = ar(:,nxl:nxl+nbgp-1)295 ar(:,nxl_l-nbgp_local:nxl_l-1) = ar(:,nxr_l-nbgp_local+1:nxr_l) 296 ar(:,nxr_l+1:nxr_l+nbgp_local) = ar(:,nxl_l:nxl_l+nbgp_local-1) 286 297 ENDIF 287 298 288 299 IF ( bc_ns_cyc ) THEN 289 ar(nys g:nys-1,:) = ar(nyn+1-nbgp:nyn,:)290 ar(nyn +1:nyng,:) = ar(nys:nys-1+nbgp,:)300 ar(nys_l-nbgp_local:nys_l-1,:) = ar(nyn_l+1-nbgp_local:nyn_l,:) 301 ar(nyn_l+1:nyn_l+nbgp_local,:) = ar(nys_l:nys_l-1+nbgp_local,:) 291 302 ENDIF 292 303 … … 295 306 !-- Neumann-conditions at inflow/outflow/nested boundaries 296 307 IF ( nest_bound_l ) THEN 297 DO i = nbgp , 1, -1298 ar(:,nxl -i) = ar(:,nxl)308 DO i = nbgp_local, 1, -1 309 ar(:,nxl_l-i) = ar(:,nxl_l) 299 310 ENDDO 300 311 ENDIF 301 312 IF ( nest_bound_r ) THEN 302 DO i = 1, nbgp 303 ar(:,nxr +i) = ar(:,nxr)313 DO i = 1, nbgp_local 314 ar(:,nxr_l+i) = ar(:,nxr_l) 304 315 ENDDO 305 316 ENDIF 306 317 IF ( nest_bound_s ) THEN 307 DO i = nbgp , 1, -1308 ar(nys -i,:) = ar(nys,:)318 DO i = nbgp_local, 1, -1 319 ar(nys_l-i,:) = ar(nys_l,:) 309 320 ENDDO 310 321 ENDIF 311 322 IF ( nest_bound_n ) THEN 312 DO i = 1, nbgp 313 ar(nyn +i,:) = ar(nyn,:)323 DO i = 1, nbgp_local 324 ar(nyn_l+i,:) = ar(nyn_l,:) 314 325 ENDDO 315 326 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.