计算化学公社
标题: 调用程序代码,不管怎么修改出入文件都得到一样的结果,求指点。 [打印本页]
作者Author: wulalalana 时间: 2020-11-10 11:16
标题: 调用程序代码,不管怎么修改出入文件都得到一样的结果,求指点。
[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
作者Author: wzkchem5 时间: 2020-11-10 12:17
首先,请先用数学语言说明:(1)你的程序是做什么计算的,公式是什么;(2)为什么你认为你得到的smax和rmin是错的;(3)你认为正确的smax和rmin是多少。
完全没有上下文的话,没有任何人能解答。
作者Author: wulalalana 时间: 2020-11-10 13:32
不好意思,我这个是算原子和分子碰撞的,没有公式,因为我对输入文件做了修改之后,或者我换一个计算体系,它的smax还是等于10.01,不变,所以我觉得是程序这里有问题了,但是我并不知道正确的smax是多少,所以想让大家帮忙看看我这个程序代码是需要怎么修改一下
作者Author: 喵星大佬 时间: 2020-11-10 13:38
连个注释都没有,这都是啥玩意
作者Author: wzkchem5 时间: 2020-11-10 13:53
首先,smax的物理意义是什么?
其次,为什么你预计smax会变?或者说为什么你认为smax恒等于10.01肯定是错误的?
问问题先把问题背景交代清楚,别人连smax为什么必须不能总是等于10.01都不知道,怎么解答你的问题?
另外,公式肯定是有的,没有公式不可能写出代码。如果你的代码是改的别人的代码(程序自带的示例的代码也算别人的代码),那么请给出原代码的链接。
作者Author: wzkchem5 时间: 2020-11-10 14:00
我这么举个例子你就懂了:
我直接把smax设成一个随机数,算不算解决了你的问题?它肯定不会每次都等于10.01了。
既然这不算是解决了你的问题,你就必须用数学语言一步一步讲明白,这个程序本来是打算做什么样的数学变换的。只有我们知道了这个程序本来要用来做什么,我们才可能知道它错在哪里。
再举个例子,好比你本来要算一个函数f(x)=3(x+6),结果写成了f(x)=3x+6,算出来的数不对。结果你在问问题的时候,只说“我的代码算出来结果不对,麻烦大家看看是什么问题,我的代码是f(x)=3x+6,代入x=2算出来的是12,正确答案我也不知道是几,只知道12肯定不对”。别人怎么回答?你就算问菲尔兹奖得主,他也回答不了你啊。你必须说,你想算的是先把x加6,再乘以3,这样大家才能告诉你,你少写了括号。
欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |