2014-11-07 5 views
0

Я пытаюсь передать массив неизвестной длины функции. Я также предпочел бы, чтобы индексы a были такими же, как b. Это возможно?Fortran передать массив функции

Программа компилируется, но выполняет функцию.

Любая помощь будет оценена по достоинству.

function RealCumSum(i) result(j) 
    real, dimension(1:), intent(in) :: i ! input 
    real, dimension(size(i)) :: j ! output 
    integer :: m 

    do m = 1,size(i) 
     j(m) = sum(i(1:m)) 
    end do 

end function RealCumSum 

program xfunc 
    implicit none 
    real, dimension(2) :: a = (/ 3.2 , 2.5 /) 
    real, dimension(2) :: b, RealCumSum 

    b = RealCumSum(a) 

    write(*,*) "cumulative sum of ",a," is ", b 
end program xfunc 

ответ

1

Аргументы массива предполагаемых форм (dimension(:)) требуют явного интерфейса. Это лучше всего сделать, поместив процедуру в модуль. Другие варианты - сделать процедуру внутренней (используя contains) или поставить блок interface.

module m 
implicit none 
contains 
function RealCumSum(i) result(j) 
    real, dimension(1:), intent(in) :: i ! input 
    real, dimension(size(i)) :: j ! output 
    integer :: m 

    do m = 1,size(i) 
     j(m) = sum(i(1:m)) 
    end do 

end function RealCumSum 
end module 

program xfunc 
    use m 

    implicit none 
    real, dimension(2) :: a = (/ 3.2 , 2.5 /) 
    real, dimension(2) :: b, RealCumSum 

    b = RealCumSum(a) 

    write(*,*) "cumulative sum of ",a," is ", b 
end program xfunc 
Смежные вопросы