Фортран Подпрограмма не возвращает значение - PullRequest
0 голосов
/ 20 февраля 2019

Я столкнулся со странной проблемой.Я использую подпрограмму поиска из книги рецептов Фортрана.Цель состоит в том, чтобы найти случайное число в 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, поскольку было инициировано.Любая помощь с благодарностью

1 Ответ

0 голосов
/ 20 февраля 2019

Проблема была в том, что подпрограмма была в другом файле.Как только я включил подпрограмму в тот же модуль, что и функция, все стало хорошо.

...