!--------------------------------- ! ! Find Halo ! !--------------------------------- Module DATA Integer(kind=8) :: Nhalos Integer(kind=4), parameter :: Ntab =60 Real(kind=8), dimension(0:Ntab) :: Dprof, Vrad, Vrad2, Vtan, Vrms Integer(kind=8), dimension(0:Ntab) :: Nprof Real(kind=8) :: xc,yc,zc,VXc,Vyc,Vzc, Rad, x0, y0, z0 Real(kind=4), ALLOCATABLE,DIMENSION(:) :: XPAR,YPAR,Zpar,Dens, & VX, VY, VZ Real(kind=4) :: redshift end Module DATA !------------------------------------ ! Program FindHalo use DATA !character :: txt1*10,filename*20 Rad = 0.050 Call ReadData Call FindCenter !xc = 0.; yc = 0. ; zc =0. Call FindProperties end Program FindHalo !------------------------------------ ! SUBROUTINE ReadData use DATA character :: txt1*10,filename*20 write(*,'(a)',ADVANCE='NO')'Enter file name: ' read(*,*)filename Open(1,file=TRIM(filename)) Read(1,*) txt1,redshift print *,'Redshift= ',redshift dmax = 0. x0 = 0.; y0 =0.; z0 =0. Nhalos =0 Do Read(1,*,iostat=ierr) x If(ierr==0)Then Nhalos = Nhalos +1 else exit end If end Do print *,'Number of particles = ',Nhalos ALLOCATE(Xpar(Nhalos),Ypar(Nhalos),Zpar(Nhalos),Dens(Nhalos)) ALLOCATE(VX(Nhalos),VY(Nhalos),VZ(Nhalos)) rewind(1) read(1,*) txt1 ii =0 Do i=1,Nhalos Read(1,*) Xpar(i),Ypar(i),Zpar(i),vx(i),vy(i),vz(i),Dens(i) If(Dens(i)>dmax)Then dmax = Dens(i) x0 = Xpar(i) ; y0 =Ypar(i); z0 =Zpar(i) ii = i end If end Do close(1) print '(a,3f9.3,a,f9.2,a,i12)',' Center=',x0,y0,z0, & ' Max.density= ',dmax,' particle= ',ii Xpar(:) = Xpar(:) - x0 Ypar(:) = Ypar(:) - y0 Zpar(:) = Zpar(:) - z0 end SUBROUTINE ReadData !------------------------------------ ! SUBROUTINE FindCenter use DATA Real(kind=8) :: xx, yy, zz, aM xc = 0. ; yc =0. ; zc =0. R2 = Rad**2 print *,Rad,R2 do j=1,20 Nn =0 xx = 0.; yy =0.; zz=0. ; aM = 0. Do i=1,Nhalos dd = (Xpar(i)-xc)**2 + (Ypar(i)-yc)**2 + (Zpar(i)-zc)**2 If(dd1.5e-3)R2 = R2*0.97 print '(a,i8,a,3f9.5,a,f9.5)',' particles= ',Nn,' Center= ',xc,yc,zc,' Search Radius= ',(R2) end do xx =0. ; ii = 0 Do i=1,Nhalos dd = (Xpar(i)-xc)**2 + (Ypar(i)-yc)**2 + (Zpar(i)-zc)**2 If(ddxx)Then xx = dens(i) ii = i end If end Do xc = Xpar(ii) yc = Ypar(ii) zc = Zpar(ii) print '(a,f9.2,a,3f9.5,a,f9.5)',' Densest ',dens(ii),' Center= ',xc,yc,zc,' Search Radius= ',(R2) end SUBROUTINE FindCenter !------------------------------------ ! SUBROUTINE FindProperties use DATA real(kind=8) :: dx,dy,dz, dvx,dvy,dvz, vv,vvr,vvt Rmax = 0.100 R2 = Rmax**2 d = Rmax/Ntab Nn = 0 VXc = 0.; VYc = 0.; VZc = 0 !----- find bulk velocity Do i=1,Nhalos dd = (Xpar(i)-xc)**2 + (Ypar(i)-yc)**2 + (Zpar(i)-zc)**2 If(dd r_out Np Overden Ovd(