Fortran Coder

查看: 1036|回复: 4
打印 上一主题 下一主题

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

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
15 元
贡献
7 点
跳转到指定楼层
楼主
发表于 2023-9-29 09:59:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
固定r、cost的值,利用离散的z得到v,但是v的数据一直是同一个数据,请问程序错在哪呀?

311ea0c40a25be210d6df215c53da90.png (241.55 KB, 下载次数: 116)

得到的数据

得到的数据

65c5d6a668909e31a58a4a22b917036.png (108.96 KB, 下载次数: 110)

主程序调用子程序

主程序调用子程序
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

159

帖子

2

主题

1

精华

大师

Vim

F 币
961 元
贡献
469 点

规矩勋章

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

3

帖子

1

主题

0

精华

新人

F 币
15 元
贡献
7 点
板凳
 楼主| 发表于 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

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

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

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

[Fortran] 纯文本查看 复制代码
  !total long-range energy
  v=vdisp+vli2-0.006661542414d0


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

[Fortran] 纯文本查看 复制代码
  !diatom energy
  call pot_li2(r,vli2)
。。。
。。。
  subroutine pot_li2(r,v,idg,dv)
  implicit none


不知编译是如何通过的。

3

帖子

1

主题

0

精华

新人

F 币
15 元
贡献
7 点
5#
 楼主| 发表于 2023-9-29 22:35:28 | 只看该作者
风平老涡 发表于 2023-9-29 21:42
从输出结果看,下面的计算有问题。

[mw_shl_code=fortran,true]  !total long-range energy

好的,我再试一下,麻烦您了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 13:33

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表