Попытка вызвать подпрограмму с аргументом как процедуру, когда требуется реальное
У меня есть программа на Фортране, которая без проблем компилируется, но затем выдает ошибку:
Попытка вызвать подпрограмму с аргументом номер один как процедуру, когда требуется вещественное (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
РЕДАКТИРОВАТЬ: код теперь урезан до базовых функций с помощью только объявлений и простых "фиктивных" вычислений.