Я столкнулся со странной проблемой.Я использую подпрограмму поиска из книги рецептов Фортрана.Цель состоит в том, чтобы найти случайное число в CDF-таблице и вернуть индекс arrax, так что я могу посмотреть в другой таблице значение, которое будет соответствовать.Однако я не могу получить его, чтобы передать значение j (jlo в охватывающей функции) обратно.Он просто остается равным 0. Подпрограмма locate меняет значение j на правильное, но затем не передает его обратно.
SUBROUTINE locate(xx,n,x,j)
INTEGER, INTENT(out) :: j
REAL*8 x,xx(n)
INTEGER jl,jm,ju,n
jl=0
ju=n+1
10 if(ju-jl.gt.1)then
jm=(ju+jl)/2
if((xx(n).ge.xx(1)).eqv.(x.ge.xx(jm)))then
jl=jm
else
ju=jm
endif
goto 10
endif
if(x.eq.xx(1))then
j=1
else if(x.eq.xx(n))then
j=n-1
else
j=jl
endif
return
END
Это дизайн подпрограммы
и вот как оно включено:
function CDF() result(xyz)
implicit none
real(BW) :: rand
integer(I2B) :: jlo, N_points_table
real(BW), allocatable :: CDFtable(:)
N_points_table= 1000
jlo=0
CALL RANDOM_NUMBER(rand)
allocate(CDFtable(N_points_table))
...
!setting the content of CDFtable to a CDF of some kind
...
call locate(CDFtable,N_points_table,rand,jlo)
....
....
Однако после выполнения подпрограммы jlo по-прежнему равно 0, поскольку было инициировано.Любая помощь с благодарностью