|
在 p_t 函数里,你知道写
if((abs(rd).ge.1.e-8).and.(number.le.1000))goto 77
而在 rov 和 rol 函数里,你却写成了
if((abs(DP/(rou + 0.0010)) .gt. 1e-5).or.(number.le.30))goto 99
这就导致了无限死循环。尝试也写成 .and.
你的代码有三层嵌套的迭代,速度非常慢,我没耐心做完。
做完一次 rol 和 rov 就耗时几十分钟。p_t 函数里,number 要从 500 到 1000,要做500次。我可没那么大的耐心。
我建议你好好优化一下你的算法。
最后,给你一些善意的忠告:
1. 不要用固定格式,而用自由格式
2. 用 Implicit None
3. 使用检查程序接口的编译器,例如 IVF 或 gfortran,而放弃 CVF 这种老的编译器。这对你的代码有好处。
4. 你的程序中大量的实参虚参不一致。例如虚参的 z(2,2) 而实参却是 z(2,1),这很危险。
5. 对于规则的数据,例如你的 cr_sk.dat,读取时不必指定格式 FORMAT(1X,2000g15.6) , read( 13 , * ) 就可以了
6. 不要输出那么多 liumeng,你的程序本来就够慢了,输出这么多只会让你的程序更慢。更好的办法是 rov、rol 迭代时,把 number 输出出来。
|
|