主题:开个贴回答Fotran 的问题
trimtrim
[专家分:1640] 发布于 2010-03-31 10:15:00
开个贴试着回答Fortran的问题。有问题的请跟贴。
有两种问题不想回答:
1. Fortran文件读取方面的问题。
2. Fortran程序调试或者找程序中的错误。
回复列表 (共83个回复)
81 楼
chouxiaoya [专家分:0] 发布于 2012-10-17 12:34:00
大侠,我是fortran初学者,想问您两个简单的fortran语言问题:
1) DO 110 I=1,L
IF(I.EQ.J) GO TO 110
IF(A(J,I).NE.0.0) GO TO 120
110 CONTINUE 像这么一段语句,if i==j goto 110是相当于重新开始这个循环还是跳出循环啊?
2)在子程序的开始有这样的语句:
dreal(zdumr) = zdumr
dimag(zdumi) = (0.0d0,-1.0d0)*zdumi
cabs1(zdum) = dabs(dreal(zdum)) + dabs(dimag(zdum))
csign1(zdum1,zdum2) = cabs1(zdum1)*(zdum2/cabs1(zdum2)) 这是相当于每句定义一个函数吗?还是什么意思啊。。。
3) wkm = (1.0d0,0.0d0) 与dcmplx(da,0.0d0) 这两种表示方法都是表示复数吧?两种表示说法有什么区别吗?第一个也就是wkm=1?
82 楼
yeg001 [专家分:14390] 发布于 2012-10-17 17:41:00
1. goto 是跳转. if(i==j) goto 110 在你贴的代码里面相当于fortran90标准的cycle. 就是跳过这次循环. 如果自己写代码, 建议放弃使用goto. 它不单止不利于代码阅读还很可能降低编译器对代码的优化而降低运行效率.
2. 形如dreal(zdumr)的是数组. 具体可以看代码的最开始是否有定义.
3. (1.0d0,0.0d0)是表示一个复数常数. 而dcmplx(da,0.0d0)本身是一个函数, 把两实数组合成一个复数. 确实wkm=1. (注意wkm在代码一开始的定义)
初学最好先看一看书, 学一点基础的东西, 推荐彭国伦的书. 感觉你现在看的代码是fortran77标准的老代码, 建议看懂就可以了,自用最好还是fortran90/95/2003标准的.
83 楼
chouxiaoya [专家分:0] 发布于 2012-10-17 18:30:00
恩,明白了。。多谢多谢啊!!
我来回复