计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3440|回复 Reply: 5
打印 Print 上一主题 Last thread 下一主题 Next thread

[综合交流] 调用程序代码,不管怎么修改出入文件都得到一样的结果,求指点。

[复制链接 Copy URL]

66

帖子

0

威望

201

eV
积分
267

Level 3 能力者

[size=14.6667px]下面给出来的是程序的模块,我在调用时,计算得到的smax=10.01,rmin=0,不管怎么改输入文件(emax是已经给定了,不能修改),都是这样,所以想让大家帮忙看看是哪里出了问题,要怎么修改这个程序代码。输入文件用图片给出。


c     local arrays
c
      parameter (m = 1000)
      dimension v(m)
      dimension smin(3),vmid(3)
c
c     smax
c
      ds = 0.01d0
      smax = 0.d0
      scut = 5.d0
      ered = rmlmda*emax
      do ia = 1,3
         lmid = 1
         do l = 1,m
            sa = l*ds
            call potenl (100.d0,sa,0.d0,v(l),ia)
            if (v(l) .lt. v(lmid)) lmid = l
         enddo
         vmid(ia) = v(lmid)
         ll = 0
         do l = 1,lmid
            if (v(l) .lt. ered) go to 1
            ll = l
         enddo
   1     sum = 0.d0
         lmin = 0
         do l = ll,1,-1
            lmin = l
            sum = sum+ds*sqrt(v(l)-ered)
            if (sum .gt. scut) go to 2
         enddo
   2     smin(ia) = lmin*ds
         lr = m+1
         do l = m,lmid,-1
            if (v(l) .lt. ered) go to 3
            lr = l
         enddo
   3     sum = 0.0d0
         lmax = m+1
         do l = lr,m
            lmax = l
            sum = sum+ds*sqrt(v(l)-ered)
            if (sum .gt. scut) go to 4
         enddo
   4     smax = max(smax,lmax*ds)
      enddo
c
c     rmin
c
      pi = acos(-1.d0)
      rm2 = 0.d0
      rm2 = rm2+(1.d0-mass(1)/mtot)*smin(1)**2
      rm2 = rm2+(1.d0-mass(2)/mtot)*smin(2)**2
      rm2 = rm2+(1.d0-mass(3)/mtot)*smin(3)**2
      rmin = sqrt(rm2)
c
c     nvi
c
      nvi = 0            
      range = 2.d0*smax/pi
      do ia = 1,3
         if (ered .gt. vmid(ia)) then
            wave = sqrt(ered-vmid(ia))
            nvia = range*wave
            nvi = max(nvi,nvia)   
         endif
      enddo
c
c     mro and mvi
c
      mro = 3*(2*(jmax+1)+(nvi+1))/4
      mvi = 3*(2*(nvi+1)+(jmax+1))/4
c
c     parameter summary
c
      write (6,61) rmin,mro,mvi,nvi,smax
      if (rmin .ge. rmax) stop 'parset 1'
      return
  61  format(/1x,'PARSET:'/1x,70('-')/1x,
     +'  rmin = ',f32.2/1x,
     +'   mro = ',i32/1x,
     +'   mvi = ',i32/1x,
     +'   nvi = ',i32/1x,
     +'  smax = ',f32.2/1x,70('-'))
      end     

1604978032(1).png (4.67 KB, 下载次数 Times of downloads: 394)

1604978032(1).png

1万

帖子

0

威望

7406

eV
积分
18181

Level 6 (一方通行)

2#
发表于 Post on 2020-11-10 12:17:17 | 只看该作者 Only view this author
首先,请先用数学语言说明:(1)你的程序是做什么计算的,公式是什么;(2)为什么你认为你得到的smax和rmin是错的;(3)你认为正确的smax和rmin是多少。
完全没有上下文的话,没有任何人能解答。

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
zjxitcc + 2 正解

查看全部评分 View all ratings

BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员

66

帖子

0

威望

201

eV
积分
267

Level 3 能力者

3#
 楼主 Author| 发表于 Post on 2020-11-10 13:32:03 | 只看该作者 Only view this author
wzkchem5 发表于 2020-11-10 12:17
首先,请先用数学语言说明:(1)你的程序是做什么计算的,公式是什么;(2)为什么你认为你得到的smax和rm ...

不好意思,我这个是算原子和分子碰撞的,没有公式,因为我对输入文件做了修改之后,或者我换一个计算体系,它的smax还是等于10.01,不变,所以我觉得是程序这里有问题了,但是我并不知道正确的smax是多少,所以想让大家帮忙看看我这个程序代码是需要怎么修改一下

1633

帖子

4

威望

4097

eV
积分
5810

Level 6 (一方通行)

喵星人

4#
发表于 Post on 2020-11-10 13:38:05 | 只看该作者 Only view this author
连个注释都没有,这都是啥玩意

1万

帖子

0

威望

7406

eV
积分
18181

Level 6 (一方通行)

5#
发表于 Post on 2020-11-10 13:53:09 | 只看该作者 Only view this author
wulalalana 发表于 2020-11-10 13:32
不好意思,我这个是算原子和分子碰撞的,没有公式,因为我对输入文件做了修改之后,或者我换一个计算体系 ...

首先,smax的物理意义是什么?
其次,为什么你预计smax会变?或者说为什么你认为smax恒等于10.01肯定是错误的?
问问题先把问题背景交代清楚,别人连smax为什么必须不能总是等于10.01都不知道,怎么解答你的问题?
另外,公式肯定是有的,没有公式不可能写出代码。如果你的代码是改的别人的代码(程序自带的示例的代码也算别人的代码),那么请给出原代码的链接。
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员

1万

帖子

0

威望

7406

eV
积分
18181

Level 6 (一方通行)

6#
发表于 Post on 2020-11-10 14:00:07 | 只看该作者 Only view this author
wulalalana 发表于 2020-11-10 13:32
不好意思,我这个是算原子和分子碰撞的,没有公式,因为我对输入文件做了修改之后,或者我换一个计算体系 ...

我这么举个例子你就懂了:
我直接把smax设成一个随机数,算不算解决了你的问题?它肯定不会每次都等于10.01了。
既然这不算是解决了你的问题,你就必须用数学语言一步一步讲明白,这个程序本来是打算做什么样的数学变换的。只有我们知道了这个程序本来要用来做什么,我们才可能知道它错在哪里。
再举个例子,好比你本来要算一个函数f(x)=3(x+6),结果写成了f(x)=3x+6,算出来的数不对。结果你在问问题的时候,只说“我的代码算出来结果不对,麻烦大家看看是什么问题,我的代码是f(x)=3x+6,代入x=2算出来的是12,正确答案我也不知道是几,只知道12肯定不对”。别人怎么回答?你就算问菲尔兹奖得主,他也回答不了你啊。你必须说,你想算的是先把x加6,再乘以3,这样大家才能告诉你,你少写了括号。

评分 Rate

参与人数
Participants 2
eV +8 收起 理由
Reason
hebrewsnabla + 5 233333
喵星大佬 + 3 233333

查看全部评分 View all ratings

BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-27 18:55 , Processed in 0.264729 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list