Фиктивный аргумент, связанный с фактической процедурой, отличается от фиктивного аргумента фиктивной процедуры - PullRequest
0 голосов
/ 06 ноября 2018

Я использую функцию NEQNF из библиотеки IMSL Fortran для решения системы нелинейных уравнений и получения 3 ошибок. Я использую Visual Studio 2017 в системе x64. Ошибка говорит следующее:

Error #7061: The characterístic of dummy argument 1 of the associated actual procedure differ from the characteristics of dummy argument 1 of the dummy procedure [FCN_SS]


Error #7062: The characterístic of dummy argument 2 of the associated actual procedure differ from the characteristics of dummy argument 2 of the dummy procedure [FCN_SS]

Error #7063: The characterístic of dummy argument 3 of the associated actual procedure differ from the characteristics of dummy argument 3 of the dummy procedure [FCN_SS]

Код:

    include 'link_fnl_shared.h' 

    use neqnf_int
    use umach_int

    implicit none

!Declaring variables
    .
    .
    .

    Contains

    subroutine solve_ss(x, fnorm)

        integer n
        parameter (n=2)

        integer k, nout
        real(dp) :: fnorm, x(n), xguess(n)

        data xguess/1.0_dp, 0.3_dp/   !guess for total output in units

        call umach (2, nout)
        call neqnf (fcn_ss, x, xguess=xguess, fnorm=fnorm)

    end subroutine solve_ss


    subroutine fcn_ss(x, f, n)

        implicit none

        !specification
        integer n
        real(dp) :: x(n), f(n)

    .
    .
    .

    F(1)=...

    F(2)=...

    end subroutine fcn_ss

Я не уверен, в чем суть ошибки, поскольку объявление переменных одинаково в solve_ss и fcn_ss.

1 Ответ

0 голосов
/ 11 ноября 2018

Документация библиотеки прямо заявляет ( здесь и здесь ), что вам необходимо use соответствующих модулей, чтобы иметь доступ к современной реализации подпрограмм.

В противном случае, вы можете (я не могу проверить, но я опираюсь на this ) получить доступ к устаревшей поддержке библиотеки. Таким образом, вместо универсального интерфейса Fortran 90, он может привести вас к интерфейсу, специфичному для FORTRAN77:

NEQNF (FCN, ERRREL, N, ITMAX, XGUESS, X, FNORM)

Другая деталь заключается в том, что в документах указано, что вы должны объявить переданную функцию как внешнюю:

external fcn_ss

Тем не менее, я не уверен в этих догадках. Это может быть та или иная странная ошибка. Пожалуйста, оставьте отзыв.

...