Fortran一直可以调试,但是就是没有数据,大家帮个忙啊,急

PROGRAMEEC_kx_kyDOUBLEPRECISIONEDOUBLEPRECISIONkx,kyDOUBLEPRECISIONv,t,b,dOPEN(UNIT=1... PROGRAM EEC_kx_ky

DOUBLE PRECISION E
DOUBLE PRECISION kx,ky
DOUBLE PRECISION v,t,b,d
OPEN(UNIT=1,FILE='EEC_E1.dat')

v=2.55d0
b=v**2
t=250.d0
d=t**2
DO 10 kx=-0.2,0.2,0.001
DO 20 ky=-0.16,0.16,0.001
temp1=b*(kx**2+ky**2)
temp2=d*(kx**2)*((kx**2-3.d0*ky**2)**2)
E=SQRT(temp1+temp2)
IF(E.EQ.0.1) THEN
WRITE(1,*) kx,ky
END IF
20 CONTINUE
10 CONTINUE
END
展开
 我来答
天河流纹石
2012-09-12 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7623
采纳率:76%
帮助的人:6626万
展开全部
问题1:
IF(E.EQ.0.1) THEN
e 是一个浮点数。浮点数最好不要做想等的判断。

因为计算机存储浮点数是有一定误差的,很难实现完全的相等。
建议用

IF( abs(E-0.1)<0.0001 ) THEN

来替代。也就是输出 e 在 0.1 附近的值。其中的 0.0001 代表精度,具体需要多少,你自己判断。

问题2:
循环变量 kx , ky 最好是整数,而不是要浮点数。原因跟问题1一样,循环终止条件时,需要做相等判断。
解决方法是这样:
Do i = 1 , N
Do j = 1 , M
kx = i * ....

N , M 你自己想想应该是多少,给 i 循环变量乘一个系数,使之变成你想要的 kx 和 ky
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式