Changeset 985 for LMDZ4/trunk/libf/dyn3dpar/parallel.F90
- Timestamp:
- Jul 30, 2008, 5:50:03 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/dyn3dpar/parallel.F90
r884 r985 16 16 integer, allocatable, save, dimension(:) :: jj_nb_para 17 17 integer, save :: OMP_CHUNK 18 18 integer, save :: omp_rank 19 integer, save :: omp_size 20 !$OMP THREADPRIVATE(omp_rank) 21 19 22 contains 20 23 … … 27 30 integer :: type_size 28 31 integer, dimension(3) :: blocklen,type 29 30 32 integer :: comp_id 33 #ifdef _OPENMP 34 INTEGER :: OMP_GET_NUM_THREADS 35 EXTERNAL OMP_GET_NUM_THREADS 36 INTEGER :: OMP_GET_THREAD_NUM 37 EXTERNAL OMP_GET_THREAD_NUM 38 #endif 31 39 include 'mpif.h' 32 40 #include "dimensions.h" … … 95 103 print *,"ij_begin",ij_begin 96 104 print *,"ij_end",ij_end 97 105 106 !$OMP PARALLEL 107 108 #ifdef _OPENMP 109 !$OMP MASTER 110 omp_size=OMP_GET_NUM_THREADS() 111 !$OMP END MASTER 112 omp_rank=OMP_GET_THREAD_NUM() 113 #else 114 omp_size=1 115 omp_rank=0 116 #endif 117 !$OMP END PARALLEL 98 118 99 119 end subroutine init_parallel … … 230 250 REAL, dimension(:),allocatable :: Buffer_Recv_up,Buffer_Recv_down 231 251 INTEGER :: Buffer_size 232 252 253 !$OMP CRITICAL (MPI) 233 254 call MPI_Barrier(COMM_LMDZ,ierr) 255 !$OMP END CRITICAL (MPI) 234 256 call VTb(VThallo) 235 257 … … 266 288 allocate(Buffer_Send_up(Buffer_size)) 267 289 call PACK_Data(Field(ij_begin,1),ij,ll,down,Buffer_Send_up) 290 !$OMP CRITICAL (MPI) 268 291 call MPI_ISSEND(Buffer_send_up,Buffer_Size,MPI_REAL8,MPI_Rank-1,1, & 269 292 COMM_LMDZ,Request(NbRequest),ierr) 293 !$OMP END CRITICAL (MPI) 270 294 ENDIF 271 295 … … 277 301 call PACK_Data(Field(ij_end+1-up*iip1,1),ij,ll,up,Buffer_send_down) 278 302 303 !$OMP CRITICAL (MPI) 279 304 call MPI_ISSEND(Buffer_send_down,Buffer_Size,MPI_REAL8,MPI_Rank+1,1, & 280 305 COMM_LMDZ,Request(NbRequest),ierr) 306 !$OMP END CRITICAL (MPI) 281 307 ENDIF 282 308 … … 287 313 allocate(Buffer_recv_up(Buffer_size)) 288 314 315 !$OMP CRITICAL (MPI) 289 316 call MPI_IRECV(Buffer_recv_up,Buffer_size,MPI_REAL8,MPI_Rank-1,1, & 290 317 COMM_LMDZ,Request(NbRequest),ierr) 318 !$OMP END CRITICAL (MPI) 291 319 292 320 … … 298 326 allocate(Buffer_recv_down(Buffer_size)) 299 327 328 !$OMP CRITICAL (MPI) 300 329 call MPI_IRECV(Buffer_recv_down,Buffer_size,MPI_REAL8,MPI_Rank+1,1, & 301 330 COMM_LMDZ,Request(NbRequest),ierr) 331 !$OMP END CRITICAL (MPI) 302 332 303 333 … … 309 339 310 340 call VTe(VThallo) 341 !$OMP CRITICAL (MPI) 311 342 call MPI_Barrier(COMM_LMDZ,ierr) 343 !$OMP END CRITICAL (MPI) 344 312 345 RETURN 313 346 314 347 end subroutine exchange_Hallo 315 348 316 349 317 350 subroutine Gather_Field(Field,ij,ll,rank) 318 351 implicit none … … 342 375 if (MPI_Rank==rank) then 343 376 allocate(Buffer_Recv(ij*ll)) 377 378 !CDIR NOVECTOR 344 379 do i=0,MPI_Size-1 345 380 346 381 if (ij==ip1jmp1) then 347 382 Recv_count(i)=(jj_end_para(i)-jj_begin_para(i)+1)*ll*iip1 … … 351 386 stop 'erreur dans Gather_Field' 352 387 endif 353 388 354 389 if (i==0) then 355 390 displ(i)=0 … … 361 396 362 397 endif 363 398 399 !$OMP CRITICAL (MPI) 364 400 call MPI_GATHERV(Buffer_send,(min(ij_end,ij)-ij_begin+1)*ll,MPI_REAL8, & 365 401 Buffer_Recv,Recv_count,displ,MPI_REAL8,rank,COMM_LMDZ,ierr) 402 !$OMP END CRITICAL (MPI) 366 403 367 404 if (MPI_Rank==rank) then … … 380 417 381 418 endif 382 419 383 420 end subroutine Gather_Field 384 421 422 385 423 subroutine AllGather_Field(Field,ij,ll) 386 424 implicit none … … 394 432 395 433 call Gather_Field(Field,ij,ll,0) 434 !$OMP CRITICAL (MPI) 396 435 call MPI_BCAST(Field,ij*ll,MPI_REAL8,0,COMM_LMDZ,ierr) 436 !$OMP END CRITICAL (MPI) 397 437 398 438 end subroutine AllGather_Field … … 409 449 INTEGER :: ierr 410 450 451 !$OMP CRITICAL (MPI) 411 452 call MPI_BCAST(Field,ij*ll,MPI_REAL8,rank,COMM_LMDZ,ierr) 453 !$OMP END CRITICAL (MPI) 412 454 413 455 end subroutine Broadcast_Field
Note: See TracChangeset
for help on using the changeset viewer.