Доступ к модулю Fortran в функции, определенной в другом файле - PullRequest
0 голосов
/ 19 мая 2010

Я использую Fortran 90. Я определил модуль Fortran в fileA.f как:

module getArr
   double precision a(100)
end module getArr

Тот же fileA.f содержит подпрограмму, которая использует этот модуль:

subroutine my_sub
   use getArr
   implicit none

   a(1) = 10.5

end subroutine

В fileB.f у меня есть функция Fortran . Я пытаюсь получить доступ к значению a(1) как:

double precision function my_func(R)
  use getArr
  double precision x
  x = a(1)

  return 
end

Но я получаю ошибки во время компиляции. Он говорит, что не может получить доступ к модулю getArr. Это как-то связано с использованием модуля в функции , а не в подпрограмме ? Как мне объявить свою функцию?

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

T.E.D. верно в отношении синтаксиса - «getArr%» не является частью имени массива «a». Эта нотация используется для пользовательского типа.

Еще один аспект, выходящий за рамки языкового стандарта - компиляция исходного кода: В большинстве компиляторов вам нужно скомпилировать файлы по порядку, поместив файл исходного кода, содержащий модуль, перед любым отдельным файлом, который его использует. Компилятор должен «знать» о модуле, прежде чем он сможет его использовать.

Кроме того, у вас есть основная программа в вашем примере?

Если это все еще не работает, пожалуйста, покажите нам точное сообщение об ошибке.

1 голос
/ 19 мая 2010

Похоже, вы пытаетесь использовать getArr% в качестве какого-то спецификатора модуля. Вы уверены, что это правильно? Я не эксперт f90, но мой компилятор, похоже, не поддерживает ничего подобного. Как только вы выполните use, все содержимое этого модуля будет доступно локально, как вы заявили об этом в своей подпрограмме.

Попробуйте удалить это getArr% и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...