我正在为我的毕业论文写作的课程有问题。
我正在使用一个计算一些流问题的代码,现在我正在添加一个应用程序。
为此我需要一个矩阵并从旧代码中获取它。
这称为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
希望有人可以帮助我!
答案 0 :(得分:0)
谢谢,我找到了解决方案。我刚插入:matrix_solve(1:n,1:2 * n)= 0.在matrix_solve之前(1:n,1:n)= matrix_in(1:n,1:n)
现在它有效,我不知道为什么我必须首先将零写入矩阵,但它有效......