恭喜, 解決了問題, 一樂也。 三個可以算是 "难以理解"的, 與君同樂 (a) 光看主程式, "WRITE(*,*) 5", write出來說不是"5", 不可能吧! [Fortran] 纯文本查看 复制代码 write(*,*) resid call zgeqp3(n, d, resid, n, workint, & workqr,workqr(1+min(n,d)), & worklen, rwork, info) write(*,*) resid compile-time給wraning或fatal error, 或是run-time出現不知所云error的, 是"嚴謹"的compilers run-time告訴你"5"不是"5", 不是Fortran的錯, 也不是compiler的錯(compiler太老實了點), 是程式員的錯(logical error) compile-time沒任何訊息, run-time告訴你"5"就是"5"的compilers, 太自作聰明了 用Fortrn 90"INTENT"attribute, 是一個好習慣, 但是, 請看 (b) (b) 光看副程式, 兩個"WRITE(*,*) x", 沒理由值不同吧? [Fortran] 纯文本查看 复制代码 do 15 i=1, d, 1 call zcopy(min(d+1-i,nrv),resid(1+(d-i)*n),1, & u(1,(-1+i)*(ncv+1)+1),1) temp1=(1.0d0)/rnorm do 16 jj=1, min(d+1-i,nrv) write(*,*) u(jj,(i-1)*(ncv+1)+1) write(*,*) cmplx(temp1,0.0d0) write(*,*) u(jj, & (i-1)*(ncv+1)+1)*cmplx(temp1,0.0d0) u(jj,(i-1)*(ncv+1)+1)=u(jj, & (i-1)*(ncv+1)+1)*cmplx(temp1,0.0d0) 16 continue 15 continue 原因出在主程式 "CALL abc(x, x)" 主/副程式, "語法"都是正確的, 程式員的錯(logical error) 不要以為這是"無聊"的把戲, "x"帶訊息進去責任已了, 能省則省新的訊息由"x"帶出來, 挺合理的 多加一對小括號 "CALL abc((x), x)", 就完全沒問題了 (c) 說一套(syntax defined by language standrad), 做一套(compilation by compiler) [Fortran] 纯文本查看 复制代码 PROGRAM test IMPLICIT NONE WRITE(*,*) 5 CALL abc(5) WRITE(*,*) 5 CALL abc(5) WRITE(*,*) 5 CONTAINS SUBROUTINE abc(five) IMPLICIT NONE INTEGER :: five five = five + 1 END SUBROUTINE abc END PROGRAM test (a), (b), (c) compile-time/run-time 會怎樣, compile-time "options" dependent, "compiler" dependent, 甚至會是 compiler "version" dependent, 怎辦? ["SAVE"也是一樣] 不怎辦, 都是程式員的錯 (logical errors) |
额!我大概找到原因了,很可能是库文件的问题。。。我刚才换了一个版本的库文件后,这些神奇的现象就都消失了。。具体原因不知道。我猜想的是原来的库文件是专门for windows用户的,而我在编译时是用MinGw的shell,会不会这里出现了问题(这方面我不懂,很可能是瞎想);后来我换的新版本就不是给windows用户的了(且这次库文件是用MinGw编译的,而前面是现成的)。 最后,谢谢大家的关心! |
pasuka 发表于 2017-8-14 12:37 而且无论是否出现nan,zgeqp3返回的info都是0,就是说正常结束。。。 |
pasuka 发表于 2017-8-14 12:37 谢谢,我检查过了,应该是对的。而且我用其他例子简单测试过这个函数的用法,并没有出现相同问题。 |
建議試試: 1. compile-time-opions儘量non-optimization 2. 用不同的compilers試試 "lapack库"是用別人的".lib", 還是自己建立的 |
无法提供可以再现问题的最短fortran代码,就只能对照zgeqp3的函数说明看看有没有参数输入错误 http://www.netlib.org/lapack/exp ... b3f0d9468d99c28d36e |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 23:05