Changeset 74 for codes/icosagcm/trunk
- Timestamp:
- 08/02/12 21:37:39 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/transfert_mpi.f90
r44 r74 578 578 INTEGER :: ireq,nreq 579 579 INTEGER :: ind,n 580 INTEGER :: dim3 580 INTEGER :: dim3,dim4 581 581 582 582 IF (field(1)%data_type==type_real) THEN … … 704 704 705 705 ENDDO 706 707 ENDIF 708 706 707 ELSE IF (field(1)%ndim==4) THEN 708 709 nreq=sum(request(:)%nsend)+sum(request(:)%nrecv) 710 ALLOCATE(mpi_req(nreq)) 711 ALLOCATE(status(MPI_STATUS_SIZE,nreq)) 712 713 ireq=0 714 DO ind=1,ndomain 715 dim3=size(field(ind)%rval4d,2) 716 dim4=size(field(ind)%rval4d,3) 717 rval4d=>field(ind)%rval4d 718 719 req=>request(ind) 720 DO isend=1,req%nsend 721 send=>req%send(isend) 722 723 ALLOCATE(send%buffer_r4(send%size,dim3,dim4)) 724 buffer_r4=>send%buffer_r4 725 value=>send%value 726 DO n=1,send%size 727 buffer_r4(n,:,:)=rval4d(value(n),:,:) 728 ENDDO 729 730 ireq=ireq+1 731 CALL MPI_ISEND(buffer_r4,send%size*dim3*dim4,MPI_REAL8,send%rank,ind,comm_icosa, mpi_req(ireq),ierr) 732 ENDDO 733 734 DO irecv=1,req%nrecv 735 recv=>req%recv(irecv) 736 ALLOCATE(recv%buffer_r4(recv%size,dim3,dim4)) 737 738 ireq=ireq+1 739 CALL MPI_IRECV(recv%buffer_r4,recv%size*dim3*dim4,MPI_REAL8,recv%rank,recv%domain,comm_icosa, mpi_req(ireq),ierr) 740 ENDDO 741 742 ENDDO 743 744 CALL MPI_WAITALL(nreq,mpi_req,status,ierr) 745 ! DO ind=1,ndomain 746 ! field(ind)%rval2d(:)=0. 747 ! ENDDO 748 749 DO ind=1,ndomain 750 rval4d=>field(ind)%rval4d 751 752 req=>request(ind) 753 DO isend=1,req%nsend 754 send=>req%send(isend) 755 DEALLOCATE(send%buffer_r4) 756 ENDDO 757 758 DO irecv=1,req%nrecv 759 recv=>req%recv(irecv) 760 buffer_r4=>recv%buffer_r4 761 value=>recv%value 762 DO n=1,recv%size 763 rval4d(value(n),:,:)=buffer_r4(n,:,:) 764 ENDDO 765 DEALLOCATE(recv%buffer_r4) 766 ENDDO 767 768 ENDDO 769 770 ENDIF 709 771 710 772 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.