[Fortran] 纯文本查看 复制代码 program test
implicit none
integer :: k, j
real :: E, T1, F1, F, T, V, a
real, PARAMETER :: pi = 3.1415926535897932
write (*,*) '输入V和a,都是原子单位'
read (*,*) V, a
open (unit=100,file='E.dat')
open (unit=200,file='k.dat')
k=int(a*sqrt(2.0*V)/pi)+1 !解的总个数,通过横坐标ε进行判断
write (200,*) k !看一下解的个数,和后面得到的E的个数应该是相等的
j=1 !初始解个数为1个
E=0.001 !开始寻找时E的初始数值
F1=-1.0 !偶宇称时,表达式在E=0时的初始值
T1=-1.0 !奇宇称时,表达式在E=0时的初始值
do while (j .LE. k) !和解的总个数K比较,得到进行的循环的次数
F=sqrt(E/(V-E))*tan(0.5*a*sqrt(2.0*E))-1.0 ! 偶宇称时化简后的表达式
T=sqrt(E/(V-E))*tan(0.5*a*sqrt(2.0*E)+pi/2.0)-1.0 !奇宇称时化简后的表达式
if (F*F1 .LE. 0.0) then !寻找满足的E,它使f的符号变化。
if(abs(F) .LT. abs(F1) .and. F .GT. -1.0) write (100,*) V, E !看看谁和0更近,去进的时候的E
if(abs(F) .GT. abs(F1) .and. F .GT. -1.0) write (100,*) V, E-0.001 !因为0.001是E的步长
j=j+1 !偶宇称得到一个解
end if
if (T*T1 .LE. 0.0) then
if (abs(T) .LT. abs(T1) .and. T .GT. -1.0) write (100,*) V, E
if (abs(T) .GT. abs(T1) .and. T .GT. -1.0) write (100,*) V, E-0.001
j=j+1 !奇宇称时的一个解
end if
F1=F !把新的f放到f1中,进行下一步的比较
T1=T !把新的t放到t1中,在进行下一步比较
E=E+0.001 ! E的步长
end do !do 循环结束,这样随着E的增大,得到了k个解
end program test
|