Попытка вызвать подпрограмму с аргументом как процедуру, когда требуется реальное

У меня есть программа на Фортране, которая без проблем компилируется, но затем выдает ошибку:

Попытка вызвать подпрограмму с аргументом номер один как процедуру, когда требуется вещественное (kind=2)

ROOTS!X_ROOT - в файле exerc2base.f90 в строке 20 [+0074]

main - в файле exerc2base.f90 в строке 65 [+00c8]

Я действительно не знаю, что это значит, я подумал, может быть, это означает, что я передаю аргумент какой-то функции, которая не является правильным типом, но приведенные ссылки не имеют смысла:

  • строка 20 end function x_rtsmpl
  • строка 66 answer=x_root(bb_integral,l1,l2,epsx,epsf,root_type)

так что я не понимаю, что происходит...

Я использую Silverfrost с IDE Платона.

module roots
  implicit none
  character(20) :: root_type

contains

  function x_rtsmpl(f,x1,x2,epsx,epsf) result(x_root)
    implicit none
    real(2) :: x_root
    real(2), intent(IN) :: x1,x2,epsx,epsf
    interface
      function f(x)
        implicit none
        real(2), intent(IN) :: x
        real(2) :: f
      end function f
    end interface
    real(2) :: xx,fx
    x_root=x1
  end function x_rtsmpl

  function x_root(f,x1,x2,epsx,epsf) result(x_r)
    implicit none
    real(2) :: x_r
    real(2), intent(IN) :: x1,x2,epsx,epsf
    interface
      function f(x)
        implicit none
        real(2), intent(IN) :: x
        real(2) :: f
      end function f
    end interface
      x_r=x_rtsmpl(f,x1,x2,epsx,epsf)
    return
  end function x_root

end module roots

module blackbody
  implicit none
  private
  public :: Ibb

contains
  function Ibb(lambda)
    real(2) , intent (in) :: lambda
    real(2) :: Ibb
    Ibb=lambda+1._2
    return
  end function Ibb

end module blackbody

program master

  use roots
  use blackbody
  implicit none
  real(2) :: l2,epsx,epsf,answer,l1,epsi,requested
  l1=4.d-7
  l2=1.d-4
  epsx=1.d-2*l1
  epsf=1.d-1
  epsi=1.d-4
  answer=x_root(Ibb,l1,l2,epsx,epsf)

end program master

РЕДАКТИРОВАТЬ: код теперь урезан до базовых функций с помощью только объявлений и простых "фиктивных" вычислений.

0 ответов

Другие вопросы по тегам