Changeset 74 for codes


Ignore:
Timestamp:
08/02/12 21:37:39 (12 years ago)
Author:
ymipsl
Message:

add mpi transfert for 4-dim tracers

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/transfert_mpi.f90

    r44 r74  
    578578    INTEGER :: ireq,nreq 
    579579    INTEGER :: ind,n 
    580     INTEGER :: dim3 
     580    INTEGER :: dim3,dim4 
    581581 
    582582    IF (field(1)%data_type==type_real) THEN 
     
    704704         
    705705        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       
    709771       
    710772    ENDIF 
Note: See TracChangeset for help on using the changeset viewer.