| 
 | 
在 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 输出出来。 
 |   
 
 
 
 |