1

我为毕业论文编写的程序有问题。

我正在使用一个计算一些流量问题的代码,现在我正在向它添加一个应用程序。

为此,我需要一个矩阵并从旧代码中获取它。

这被称为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

希望有人可以帮助我!

4

1 回答 1

0

谢谢,我找到了解决方案。我刚刚插入: matrix_solve(1:n,1:2*n) = 0. before matrix_solve(1:n,1:n) = matrix_in(1:n,1:n)

现在它起作用了,我不知道为什么我必须先在矩阵中写入一个零,但是它起作用了......

于 2013-07-29T07:04:27.927 回答