Changeset 1864 for LMDZ5/branches/testing/libf/dyn3dmem/mod_hallo.F90
- Timestamp:
- Sep 11, 2013, 11:45:01 AM (11 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 1797-1799,1801-1811,1813-1834,1836,1838-1840,1842-1860
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/dyn3dmem/mod_hallo.F90
r1669 r1864 1 1 module mod_Hallo 2 USE parallel 2 USE parallel_lmdz 3 3 implicit none 4 4 logical,save :: use_mpi_alloc 5 integer, parameter :: MaxRequest=2006 5 integer, parameter :: MaxProc=512 7 integer, parameter :: MaxBufferSize=1024*1024*100 6 integer, parameter :: DefaultMaxBufferSize=1024*1024*100 7 integer, SAVE :: MaxBufferSize=0 8 8 integer, parameter :: ListSize=1000 9 9 … … 28 28 type request_SR 29 29 integer :: NbRequest=0 30 integer :: NbRequestMax=0 30 31 integer :: BufferSize 31 32 integer :: Pos 32 33 integer :: Index 33 type(Hallo), dimension(MaxRequest) :: Hallo34 type(Hallo), POINTER :: Hallo(:) 34 35 integer :: MSG_Request 35 36 end type request_SR … … 63 64 64 65 subroutine Init_mod_hallo 65 USE dimensions 66 USE dimensions_mod 67 USE IOIPSL 66 68 implicit none 67 69 integer :: jj_nb_gather(0:mpi_size-1) … … 70 72 Buffer_Pos(Index_Pos)=1 71 73 MaxBufferSize_Used=0 72 74 !$OMP MASTER 75 MaxBufferSize=DefaultMaxBufferSize 76 CALL getin("mpi_buffer_size",MaxBufferSize) 77 !$OMP END MASTER 78 !$OMP BARRIER 79 73 80 IF (use_mpi_alloc .AND. using_mpi) THEN 74 81 CALL create_global_mpi_buffer … … 77 84 ENDIF 78 85 86 !$OMP MASTER 79 87 jj_nb_gather(:)=0 80 88 jj_nb_gather(0)=jjp1 81 89 82 90 CALL create_distrib(jj_nb_gather,distrib_gather) 91 !$OMP END MASTER 92 !$OMP BARRIER 83 93 84 94 end subroutine init_mod_hallo … … 176 186 177 187 178 subroutine Init_Hallo(Field,Stride,NbLevel,offset,size,NewHallo)188 subroutine New_Hallo(Field,Stride,NbLevel,offset,size,Ptr_request) 179 189 integer :: Stride 180 190 integer :: NbLevel … … 182 192 integer :: offset 183 193 real, dimension(Stride,NbLevel),target :: Field 184 type(Hallo) :: NewHallo 185 194 type(request_SR),pointer :: Ptr_request 195 type(Hallo),POINTER :: NewHallos(:),HalloSwitch(:), NewHallo 196 197 Ptr_Request%NbRequest=Ptr_Request%NbRequest+1 198 IF(Ptr_Request%NbRequestMax==0) THEN 199 Ptr_Request%NbRequestMax=10 200 ALLOCATE(Ptr_Request%Hallo(Ptr_Request%NbRequestMax)) 201 ELSE IF ( Ptr_Request%NbRequest > Ptr_Request%NbRequestMax) THEN 202 Ptr_Request%NbRequestMax=INT(Ptr_Request%NbRequestMax*1.2) 203 ALLOCATE(NewHallos(Ptr_Request%NbRequestMax)) 204 NewHallos(1:Ptr_Request%NbRequest-1)=Ptr_Request%hallo(1:Ptr_Request%NbRequest-1) 205 HalloSwitch=>Ptr_Request%hallo 206 Ptr_Request%hallo=>NewHallos 207 DEALLOCATE(HalloSwitch) 208 ENDIF 209 210 NewHallo=>Ptr_Request%hallo(Ptr_Request%NbRequest) 211 186 212 NewHallo%Field=>Field 187 213 NewHallo%Stride=Stride … … 190 216 NewHallo%offset=offset 191 217 192 193 end subroutine Init_Hallo 218 end subroutine New_Hallo 194 219 195 220 subroutine Register_SendField(Field,ij,ll,offset,size,target,a_request) 196 USE dimensions 221 USE dimensions_mod 197 222 implicit none 198 223 … … 204 229 205 230 Ptr_Request=>a_request%RequestSend(target) 206 Ptr_Request%NbRequest=Ptr_Request%NbRequest+1 207 if (Ptr_Request%NbRequest>=MaxRequest) then 208 print *,'STOP :: La taille de MaxRequest dans mod_hallo.F90 est trop petite !!!!' 209 stop 210 endif 211 call Init_Hallo(Field,ij,ll,offset,size,Ptr_request%Hallo(Ptr_Request%NbRequest)) 231 232 call New_Hallo(Field,ij,ll,offset,size,Ptr_request) 212 233 213 234 end subroutine Register_SendField 214 235 215 236 subroutine Register_RecvField(Field,ij,ll,offset,size,target,a_request) 216 USE dimensions 237 USE dimensions_mod 217 238 implicit none 218 239 … … 224 245 225 246 Ptr_Request=>a_request%RequestRecv(target) 226 Ptr_Request%NbRequest=Ptr_Request%NbRequest+1227 228 if (Ptr_Request%NbRequest>=MaxRequest) then229 print *,'STOP :: La taille de MaxRequest dans mod_hallo.F90 est trop petite !!!!'230 stop231 endif232 247 233 call Init_Hallo(Field,ij,ll,offset,size,Ptr_request%Hallo(Ptr_Request%NbRequest))248 call New_Hallo(Field,ij,ll,offset,size,Ptr_request) 234 249 235 250 … … 237 252 238 253 subroutine Register_SwapField(FieldS,FieldR,ij,ll,jj_Nb_New,a_request) 239 USE dimensions 254 USE dimensions_mod 240 255 implicit none 241 256 … … 285 300 286 301 subroutine Register_SwapFieldHallo(FieldS,FieldR,ij,ll,jj_Nb_New,Up,Down,a_request) 287 USE dimensions 302 USE dimensions_mod 288 303 289 304 implicit none … … 338 353 339 354 SUBROUTINE Register_SwapField1d_u(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 340 USE parallel 341 USE dimensions 355 USE parallel_lmdz 356 USE dimensions_mod 342 357 IMPLICIT NONE 343 358 … … 369 384 370 385 SUBROUTINE Register_SwapField2d_u1d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 371 USE parallel 372 USE dimensions 386 USE parallel_lmdz 387 USE dimensions_mod 373 388 IMPLICIT NONE 374 389 … … 403 418 404 419 SUBROUTINE Register_SwapField3d_u(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 405 USE parallel 406 USE dimensions 420 USE parallel_lmdz 421 USE dimensions_mod 407 422 IMPLICIT NONE 408 423 … … 438 453 439 454 SUBROUTINE Register_SwapField1d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 440 USE parallel 441 USE dimensions 455 USE parallel_lmdz 456 USE dimensions_mod 442 457 443 458 IMPLICIT NONE … … 470 485 471 486 SUBROUTINE Register_SwapField2d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 472 USE parallel 473 USE dimensions 487 USE parallel_lmdz 488 USE dimensions_mod 474 489 475 490 IMPLICIT NONE … … 505 520 506 521 SUBROUTINE Register_SwapField3d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 507 USE parallel 508 USE dimensions 522 USE parallel_lmdz 523 USE dimensions_mod 509 524 IMPLICIT NONE 510 525 … … 544 559 545 560 SUBROUTINE Register_SwapField1d_v(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 546 USE parallel 547 USE dimensions 561 USE parallel_lmdz 562 USE dimensions_mod 548 563 IMPLICIT NONE 549 564 … … 575 590 576 591 SUBROUTINE Register_SwapField2d_v1d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 577 USE parallel 578 USE dimensions 592 USE parallel_lmdz 593 USE dimensions_mod 579 594 IMPLICIT NONE 580 595 … … 609 624 610 625 SUBROUTINE Register_SwapField3d_v(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 611 USE parallel 612 USE dimensions 626 USE parallel_lmdz 627 USE dimensions_mod 613 628 IMPLICIT NONE 614 629 … … 645 660 646 661 SUBROUTINE Register_SwapField1d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 647 USE parallel 648 USE dimensions 662 USE parallel_lmdz 663 USE dimensions_mod 649 664 IMPLICIT NONE 650 665 … … 676 691 677 692 SUBROUTINE Register_SwapField2d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 678 USE parallel 679 USE dimensions 693 USE parallel_lmdz 694 USE dimensions_mod 680 695 IMPLICIT NONE 681 696 … … 710 725 711 726 SUBROUTINE Register_SwapField3d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down) 712 USE parallel 713 USE dimensions 727 USE parallel_lmdz 728 USE dimensions_mod 714 729 IMPLICIT NONE 715 730 … … 745 760 746 761 SUBROUTINE Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,Up,Down,a_request) 747 USE parallel 748 USE dimensions 762 USE parallel_lmdz 763 USE dimensions_mod 749 764 IMPLICIT NONE 750 765 … … 787 802 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 788 803 DO l=1,ll 789 FieldR(ijb:ije, :)=FieldS(ijb:ije,:)804 FieldR(ijb:ije,l)=FieldS(ijb:ije,l) 790 805 ENDDO 791 806 !$OMP END DO NOWAIT … … 798 813 799 814 SUBROUTINE Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,Up,Down,a_request) 800 USE parallel 801 USE dimensions 815 USE parallel_lmdz 816 USE dimensions_mod 802 817 IMPLICIT NONE 803 818 … … 858 873 859 874 subroutine Register_Hallo(Field,ij,ll,RUp,Rdown,SUp,SDown,a_request) 860 USE dimensions 875 USE dimensions_mod 861 876 implicit none 862 877 … … 925 940 926 941 subroutine Register_Hallo_u(Field,ll,RUp,Rdown,SUp,SDown,a_request) 927 USE dimensions 942 USE dimensions_mod 928 943 implicit none 929 944 #ifdef CPP_MPI … … 990 1005 991 1006 subroutine Register_Hallo_v(Field,ll,RUp,Rdown,SUp,SDown,a_request) 992 USE dimensions 1007 USE dimensions_mod 993 1008 implicit none 994 1009 #ifdef CPP_MPI … … 1055 1070 1056 1071 subroutine SendRequest(a_Request) 1057 USE dimensions 1072 USE dimensions_mod 1058 1073 implicit none 1059 1074 … … 1179 1194 1180 1195 subroutine WaitRequest(a_Request) 1181 USE dimensions 1196 USE dimensions_mod 1182 1197 implicit none 1183 1198 … … 1273 1288 1274 1289 subroutine WaitSendRequest(a_Request) 1275 USE dimensions 1290 USE dimensions_mod 1276 1291 implicit none 1277 1292 … … 1329 1344 1330 1345 subroutine WaitRecvRequest(a_Request) 1331 USE dimensions 1346 USE dimensions_mod 1332 1347 implicit none 1333 1348 … … 1410 1425 1411 1426 subroutine CopyField(FieldS,FieldR,ij,ll,jj_Nb_New) 1412 USE dimensions 1427 USE dimensions_mod 1413 1428 1414 1429 implicit none … … 1448 1463 1449 1464 subroutine CopyFieldHallo(FieldS,FieldR,ij,ll,jj_Nb_New,Up,Down) 1450 USE dimensions 1465 USE dimensions_mod 1451 1466 1452 1467 implicit none … … 1488 1503 1489 1504 subroutine Gather_field_u(field_loc,field_glo,ll) 1490 USE dimensions 1505 USE dimensions_mod 1491 1506 implicit none 1492 1507 integer :: ll … … 1511 1526 1512 1527 subroutine Gather_field_v(field_loc,field_glo,ll) 1513 USE dimensions 1528 USE dimensions_mod 1514 1529 implicit none 1515 1530 integer :: ll … … 1539 1554 1540 1555 subroutine Scatter_field_u(field_glo,field_loc,ll) 1541 USE dimensions 1556 USE dimensions_mod 1542 1557 implicit none 1543 1558 integer :: ll … … 1573 1588 1574 1589 subroutine Scatter_field_v(field_glo,field_loc,ll) 1575 USE dimensions 1590 USE dimensions_mod 1576 1591 implicit none 1577 1592 integer :: ll
Note: See TracChangeset
for help on using the changeset viewer.