!-------------------! program processdata !-------------------! implicit none integer :: i,j,nn,nr real(8) :: de real(8), allocatable :: s(:),d(:),sr(:,:),dr(:,:),er(:,:) open(10,file='read.in',status='old') read(10,*)nn close(10) allocate(s(0:nn/2)) allocate(d(0:nn/2)) allocate(sr(2,0:nn/2)); sr=0.d0 allocate(dr(2,0:nn/2)); dr=0.d0 allocate(er(2,0:nn/2)); er=0.d0 open(10,file='cor.dat',status='old') nr=0 do do i=0,nn/2 read(10,*,end=10)j,s(i),d(i) enddo sr(1,:)=sr(1,:)+s sr(2,:)=sr(2,:)+s**2 dr(1,:)=dr(1,:)+d dr(2,:)=dr(2,:)+d**2 de=0.5d0*(d(0)-d(1)) er(1,0)=er(1,0)+de er(2,0)=er(2,0)+de**2 do i=1,nn/2-1 de=0.5d0*(d(i)-0.5d0*d(i-1)-0.5d0*d(i+1))*(-1)**i er(1,i)=er(1,i)+de er(2,i)=er(2,i)+de**2 enddo de=0.5d0*(d(nn/2)-d(nn/2-1))*(-1)**(nn/2) er(1,nn/2)=er(1,nn/2)+de er(2,nn/2)=er(2,nn/2)+de**2 nr=nr+1 enddo 10 close(10) write(*,*)nr sr=sr/dble(nr) dr=dr/dble(nr) er=er/dble(nr) sr(2,:)=sqrt(abs(sr(2,:)-sr(1,:)**2)/dble(nr)) dr(2,:)=sqrt(abs(dr(2,:)-dr(1,:)**2)/dble(nr)) er(2,:)=sqrt(abs(er(2,:)-er(1,:)**2)/dble(nr)) open(10,file='c.dat',status='replace') do i=0,nn/2 write(10,'(i5,6f15.10)')i,sr(:,i),dr(:,i),er(:,i) enddo close(10) deallocate(sr) deallocate(dr) deallocate(er) end program processdata !-----------------------!