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 展开
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 展开
1个回答
展开全部
问题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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询