subroutine MATRIX_VECTOR & (ifile_in,name_in,NENS_START,NENS,MPIRANK,NPROC,jsta,jend,N_1,x,sum_loc) !********************************************************************** ! * ! * ABSTRACT: MATRIX * VECTOR product ! * (N_1 x NENS) * (NENS) = (N_1) ! * ! * 09/01/2003 ..... M. ZUPANSKI: ! * ! ********************************************************************** !----- integer :: ifile_in integer :: NENS,NENS_START integer :: N_1 integer :: NPROC,MPIRANK integer :: jsta,jend character*20 :: name_in character*30 :: filein real,dimension(1:N_1) :: sum_loc real,dimension(NENS_START:NENS) :: x integer :: NN real,allocatable :: x_in(:) !========================================================= if(MPIRANK.eq.0) then write(*,*) "start MATRIX_VECTOR" end if 100 format(A,i4.4) allocate(x_in(1:N_1)) !==============start calculation=================== sum_loc(:)=0.0 ii=0 do jj=jsta,jend ii=ii+1 write(filein,100) trim(name_in),jj CLOSE(ifile_in) OPEN(UNIT=ifile_in,FILE=filein,FORM='UNFORMATTED',IOSTAT=IER) IF(IER.NE.0) WRITE(*,*) ifile_in,' OPEN UNIT ERROR IER=',IER READ(ifile_in) NN if(NN.ne.N_1) then write(*,*) "MATRIX_VECTOR: PROBLEM WITH DIMENSIONS NN=",NN," N_1=",N_1 end if READ(ifile_in) x_in CLOSE(ifile_in,STATUS='KEEP') do m=1,N_1 sum_loc(m)=sum_loc(m)+x_in(m)*x(jj) end do end do !jj deallocate(x_in) if(MPIRANK.eq.0) then write(*,*) "end MATRIX_VECTOR" end if return end subroutine MATRIX_VECTOR