subroutine getnemsandscatter(me,nfile,im,jm,jsta,jsta_2l & ,jend_2u,MPI_COMM_COMP,icnt,idsp,spval,VarName,VcoordName & ,l,impf,jmpf,nframe,buf) ! use nemsio_module, only: nemsio_gfile, nemsio_readrecvw34 implicit none type(nemsio_gfile),intent(inout) :: nfile INCLUDE "mpif.h" ! character(len=20),intent(in) :: VarName,VcoordName real,intent(in) :: spval integer,intent(in) :: me,im,jm,jsta_2l,jend_2u,jsta, & MPI_COMM_COMP,l,impf,jmpf,nframe integer,intent(in) :: ICNT(0:1023), IDSP(0:1023) real,intent(out) :: buf(im,jsta_2l:jend_2u) integer :: iret,i,j,idiff,jj real dummy(im,jm) ! real dummy2(impf,jmpf) real, allocatable:: dum1d(:) if(me == 0) then ! nframe=nframed2*2 allocate(dum1d((impf)*(jmpf))) idiff = (impf-im)/2 call nemsio_readrecvw34(nfile,trim(VarName) & ,trim(VcoordName),l,data=dum1d,nframe=nframe,iret=iret) ! if(trim(VarName)=='tmp')print*,'in getnems debug: ',impf,jmpf, & ! nframe,trim(VarName),trim(VcoordName),l if (iret /= 0) then print*,VarName,VcoordName,l," not found in NEMS file-Assigned missing values" !$omp parallel do private(i,j) do j=1,jm do i=1,im dummy(i,j) = spval enddo enddo else !$omp parallel do private(i,j,jj) do j=1,jm jj= (j-1)*impf + idiff do i=1,im dummy(i,j) = dum1d(jj+i) if(dummy(i,j) >= 9.9E20) dummy(i,j) = spval ! if(trim(VarName)=='tmp' .and. j==72)print*, & ! 'T before scatter',i,j,dummy(i,j) ! dummy(i,j)=dummy2(i+nframed2,j+nframed2) end do end do end if deallocate(dum1d) end if call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & ,buf(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) RETURN END