9

クロネッカー積を計算する単純な fortran 関数があります。

function kron(A, B)
    implicit none
    real, intent(in) :: A(:, :), B(:, :)
    integer :: i, j, ma, na, mb, nb
    real, dimension(:, :) :: kron

    ma = ubound(A, 1)
    na = ubound(A, 2)
    mb = ubound(b, 1)
    nb = ubound(b, 2)
    forall(i=1:ma, j=1:na)
        kron(mb*(i-1)+1:mb*i, nb*(j-1)+1:nb*j) = A(i,j)*B
    end forall
end function kron

モジュール内にありますが、でコンパイルするとgfortran -static -ffree-form -std=f2003 -Wall、次のエラーが発生します。

function kron(A, B)
                1
Error: Array 'kron' at (1) cannot have a deferred shape

返される配列のサイズを事前に知っているはずなので、このエラーが発生していますか?

4

3 に答える 3

6

それはまさにエラーがあなたに伝えていることです:kron明示的な形を持っている必要があります. 事前に配列サイズを渡したくない場合は、次のように定義する必要がありkronます

real, dimension(lbound(a,dim=1):ubound(a,dim=1),&
                lbound(a,dim=2):ubound(a,dim=2)) :: kron

上記の特定の明示的な宣言を使用すると、gfortran 4.6.3 でコンパイルされます。

于 2013-09-12T16:53:47.820 に答える