这个项目给人的启发也是不小的,例如Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP在此处截断和关于奇点的讨论。尤其是后一点,很有意思,在此详细论述一下。
  书中的图有些误导人,因为那是一个中心排斥势的散射图,而Lennard-Jones势函数在散射中应该是起到了吸引的作用。假设Lennard-Jones势函数中的能量是量子化的。当入射粒子能量和瞄准距离都合适时,可能被俘获。也就是形成共振现象。在此处所谓的奇点便是指的这个。当粒子接近到Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP时,被俘获。此时,粒子能量分为径向能量和切向能量。被俘获时,径向能量与在该距离下的Lennard-Jones势相抵消,而只剩余切向能量。从而粒子只能绕行很多圈。
  此时,径向能量为:
  Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP
  那么,Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP,两边再同时除以E,即可得到如下关系式:
  Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP
  也就是书中提到的,被积分式接近零,使得积分出现奇点。
  书中给出的公式为:
  Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP
  其中第一项的奇点是Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP,即下域;第二项的奇点便是Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP
  

点击(此处)折叠或打开

  1. !
  2. module param
  3.   implicit none
  4.   real,parameter :: pi=3.1415926
  5.   real,parameter :: E=1.0 ! incident energy in unit of V0
  6.   real,parameter :: Bmin=0.1 ! minimum of impact parameter
  7.   real,parameter :: Bmax=2.4 ! maximum of impact parameter
  8.   real,parameter :: Rmax=2.5 ! maximum of radius
  9.   real,parameter :: Tolr=0.0001 ! tolerance for turning point search
  10.   integer,parameter :: Nb=20 ! number of steps in impact parameter b
  11.   integer,parameter :: Npts=40 ! number of quadrature points
  12.   real,parameter :: db=(Bmax-Bmin)/(Nb-1)
  13.   integer,parameter :: BnumMax=100

  14. end module
  15. !

  16. !
  17. Program main
  18. ! Project 1: Scattering by the Lennard-Jones potential
  19. !
  20.   use param
  21.   call archon

  22. stop

  23. end program
  24. !

  25. !
  26. subroutine archon
  27. !
  28. ! Global variables
  29.   use param
  30. ! Local variables
  31.   implicit none
  32.   real :: Impact(0:BnumMax)=0.0
  33.   integer :: Ib=0
  34.   real :: Angle(0:BnumMax)=0.0
  35.   real :: Int1,Int2,Rmin

  36.   do Ib=0,(Nb-1),1
  37.     Impact(Ib)=Bmin+Ib*db
  38.     call Theta(Impact(Ib),Int1,Int2,Rmin)
  39.     write(*,*)"Int1:",Int1,"Int2:",Int2
  40.     Angle(Ib)=2.0*Impact(Ib)*(Int1-Int2)*180.0/pi
  41.     write(*,*)"b(",Ib,"):",Impact(Ib),"Angle(",Ib,"):",Angle(Ib)
  42.   end do

  43. return

  44. end subroutine
  45. !

  46. !
  47. subroutine Theta(b,Int1,Int2,Rmin)
  48. !
  49. ! Global variables
  50.   use param
  51. ! Input/Output variables
  52.   real :: b ! impact parameter (Input)
  53.   real :: Int1 ! the 1st integral (Output)
  54.   real :: Int2 ! the 2nd integral (Output)
  55.   real :: Rmin ! radius of the closes approach (Output)
  56. ! Local variables
  57.   real :: r=1.0
  58.   real :: dr=0.2
  59.   real,external :: pot,fun,fun1,fun2
  60.   real :: u
  61.   real :: total=0.0
  62.   integer :: Iu
  63.   real :: umax
  64.   real :: step
  65.   
  66.   Rmin=Rmax

  67.   do while(dr>Tolr)
  68.     Rmin=Rmin-dr
  69.     if(fun(Rmin,b)<0)then
  70.       Rmin=Rmin+dr
  71.       dr=dr/2.0
  72.     end if
  73.   end do
  74. !
  75.   umax=sqrt(Rmax-b)
  76.   step=umax/Npts
  77.   total=0.0
  78.   do Iu=1,Npts,1
  79.     u=step*(Iu-0.5)
  80.     r=u**2+b
  81.     total=total+u*fun1(r,b)
  82.   end do
  83.   Int1=2.0*step*total
  84. !
  85.   total=0.0
  86.   umax=sqrt(Rmax-Rmin)
  87.   step=umax/Npts
  88.   do Iu=1,Npts,1
  89.     u=step*(Iu-0.5)
  90.     r=u**2+Rmin
  91.     total=total+u*fun2(r,b)
  92.   end do
  93.   Int2=2.0*step*total

  94. return
  95. end subroutine
  96. !

  97. !
  98. real function pot(r)
  99.   implicit none
  100.   real :: r
  101.   pot=4.0*(1/r**12-1/r**6)
  102.   return
  103. end function
  104. !

  105. !
  106. real function fun(r,b)
  107.   use param
  108.   implicit none
  109.   real :: r,b
  110.   real,external :: pot
  111.   fun=1-b**2/r**2-pot(r)/E
  112. return
  113. end function
  114. !

  115. !
  116. real function fun1(r,b)
  117.   implicit none
  118.   real :: r,b
  119.   fun1=1/r**2*(1/sqrt(1-b**2/r**2))
  120. return
  121. end function
  122. !

  123. !
  124. real function fun2(r,b)
  125.   use param
  126.   implicit none
  127.   real :: r,b
  128.   real,external :: pot
  129.   fun2=1/r**2*(1/sqrt(1-b**2/r**2-pot(r)/E))
  130. return
  131. end function
  132. !
  得到的计算结果为:
 b(0):  0.100000001     Angle(0):   168.910172    
 b(1):  0.221052647     Angle(1):   169.855896    
 b(2):  0.342105299     Angle(2):   164.271286    
 b(3):  0.463157952     Angle(3):   158.649170    
 b(4):  0.584210575     Angle(4):   152.974335    
 b(5):  0.705263257     Angle(5):   147.230621    
 b(6):  0.826315880     Angle(6):   141.401428    
 b(7):  0.947368503     Angle(7):   135.465668    
 b(8):   1.06842113     Angle(8):   129.401596    
 b(9):   1.18947387     Angle(9):   123.180473    
 b(10):   1.31052649     Angle(10):   116.771988    
 b(11):   1.43157911     Angle(11):   110.134575    
 b(12):   1.55263174     Angle(12):   103.215302    
 b(13):   1.67368436     Angle(13):   95.9486313    
 b(14):   1.79473698     Angle(14):   88.2398682    
 b(15):   1.91578972     Angle(15):   79.9521637    
 b(16):   2.03684235     Angle(16):   70.8765564    
 b(17):   2.15789509     Angle(17):   60.6551018    
 b(18):   2.27894759     Angle(18):   48.5505600    
 b(19):   2.40000033     Angle(19):   32.5175247 
  当碰撞参数很小时,出现大角度散射现象;当碰撞参数变大时,散射角逐渐减小。因此计算结果也是符合物理直觉的。Computational Physics: Fortran Version——Project I Lennard-Jones中心势散射-LMLPHP

09-14 14:57