zjp 发表于 2023-9-29 09:59:40

语法没有报错,程序有错误,想知道错在哪里?谢谢大家

固定r、cost的值,利用离散的z得到v,但是v的数据一直是同一个数据,请问程序错在哪呀?

Transpose 发表于 2023-9-29 15:07:52

看起来应该是子程序的问题,需要更多代码才能判断

zjp 发表于 2023-9-29 16:23:43

Transpose 发表于 2023-9-29 15:07
看起来应该是子程序的问题,需要更多代码才能判断

麻烦您忙看一下,子程序中还有几个子程序,我就是写的主程序调用一下,不知道问题出在哪里?
program main
implicit none
integer,parameter :: n = 200
real*8,parameter :: r = 5.d0,cost = 0
real*8,parameter :: zmin = 20.d0,zmax = 100.d0
real*8 ::z,v
integer :: i

do i=1,n
   z=zmin + (zmax-zmin)*(i-1.d0)/(n-1.d0)
   call potlr_li_li2(z,r,cost,v)
   write(111,*)z,v
enddo

stop
end

subroutine potlr_li_li2(z,r,cost,v)
implicit none
real*8,intent(in) :: z,r,cost
real*8,intent(out) :: v
real*8 :: polli,ionli,polyli2,polzli2,ionli2,vdisp,vli2
real*8 :: fac


!polarizability of Li
   polli=165.09246072d0
!ionization energy of Li
ionli=0.19809291d0
!excitation energy of Li2 (X --> A)
ionli2=0.06371177857d0
!perpendicular polarizability of Li2
call poly_li2(r,polyli2)
!parallel polarizability of Li2
call polz_li2(r,polzli2)

!dispersion energy
fac=0.5d0*ionli*ionli2*polli/(ionli+ionli2)/z**6
vdisp=-fac*(2.d0*polyli2+polzli2+(polzli2-polyli2)*(1.5d0*cost**2-0.5d0))

!diatom energy
call pot_li2(r,vli2)

!total long-range energy
v=vdisp+vli2-0.006661542414d0

return
end subroutine

subroutine pot_li2(r,v,idg,dv)
implicit none

风平老涡 发表于 2023-9-29 21:42:44

zjp 发表于 2023-9-29 16:23
麻烦您忙看一下,子程序中还有几个子程序,我就是写的主程序调用一下,不知道问题出在哪里?
program...

从输出结果看,下面的计算有问题。

!total long-range energy
v=vdisp+vli2-0.006661542414d0

其中的vdisp和vli2的都为零。可以看到以下语句有问题:

!diatom energy
call pot_li2(r,vli2)
。。。
。。。
subroutine pot_li2(r,v,idg,dv)
implicit none

不知编译是如何通过的。

zjp 发表于 2023-9-29 22:35:28

风平老涡 发表于 2023-9-29 21:42
从输出结果看,下面的计算有问题。

!total long-range energy


好的,我再试一下,麻烦您了
页: [1]
查看完整版本: 语法没有报错,程序有错误,想知道错在哪里?谢谢大家