2013-07-27 30 views
1

我正在爲我的畢業論文寫作的程序有問題。<no value>出現在IDB

我正在使用一個代碼來計算一些流量問題,現在我正在給它添加一個應用程序。

爲此,我需要一個矩陣並從舊代碼中獲取它。

這叫做AA_save_SP,是real(sp)

我想反轉矩陣並將其作爲matrix_in(也ral(sp)size(n,n))作爲子程序。

在該子程序中,我定義了一個名爲matrix_solve的新矩陣,它是real(sp),其大小爲(n,2*n)

從idb中,我收到消息:"Program received signal SIGSEGV",如果我查找Matrix中的值,他們是<no value>

所以我沒有做任何與矩陣和所有其他時間我定義了一個變量,它工作正常,我從來沒有這個問題。

子程序:

SUBROUTINE BL3D_LIB_invert_matrix(matrix_in,n,matrix_invert) 
! Parameter 
! Arguments 
    REAL , INTENT(IN ) :: matrix_in(n,n) 
    INTEGER , INTENT(IN ) :: n 
    REAL , INTENT( OUT) :: matrix_invert(n,n) 
! Locals 
    REAL     :: matrix_solve(n,2*n) 
    INTEGER     :: k, i 


    matrix_solve(1:n,1:n) = matrix_in(1:n,1:n) 
    matrix_solve(1:n,n+1:2*n) = 0. 

    DO i = 1, n 
    matrix_solve(i,n+i) = -1. 
    END DO 


    call math_solve(matrix_solve,n,n,k,1.e-12_sp) 

    IF (k.eq.0) THEN 

    matrix_invert(1:n,1:n) = matrix_solve(1:n,n+1:2*n) 

    ELSE 
    WRITE (*,*) "Fehler beim invertieren der Koeff.-Matrix." 
    END IF 

    END SUBROUTINE BL3D_LIB_invert_matrix 

希望有一個人誰可以幫幫我!

+1

我不能馬上看到你的子程序有什麼問題。告訴我們你是怎樣稱呼它的,最好是發佈儘可能少的代碼,這是可編譯的,哪些(重新)產生錯誤。 –

+0

嘗試在'call math_solve(...)'之前和之後嘗試打印'matrix_solve'來查看是否可能導致了這個子程序的問題。但肯定會有更多的信息需要。 –

回答

0

謝謝,我找到了一個解決方案。我剛剛在matrix_solve(1:n,1:n)= matrix_in(1:n,1:n)之前插入:matrix_solve(1:n,1:2 * n)= 0.

現在,不知道爲什麼我必須先寫入零矩陣,但它的工作原理...

相關問題