Что нужно изменить, чтобы подпрограмма Fortran 90 «PURE»? - PullRequest
0 голосов
/ 23 марта 2012

Я определил модуль кода (файл Fortran F90) и снабдил его следующими двумя подпрограммами:

pure Subroutine XRotation (x, y, z, Xrot, xp, yp, zp)
! Rotate about X-axis through the angle Xrot

real*4, INTENT(IN) :: x, y, z, xrot
real*4, INTENT(OUT) :: xp, yp, zp
real*4 xrad

Xrad = Xrot * 3.141592627 / 180 ! Convert to radians
yp = y * COS(Xrad) + z * SIN(Xrad)
xp = x
zp = z * COS(Xrad) - y * SIN(Xrad)


END


Pure Subroutine DummyDummy()

Call XRotation(1,2,3,4,5,6,7)

End Subroutine

Компилятор (Intel Fortran 12, нацеленный на 32-битную Windows, во что бы то ни стало) возвращает одно сообщение об ошибке:

ошибка # 7137: любая процедура, указанная в процедуре PURE, включая один, на который ссылаются посредством определенной операции или назначения, должен быть явно объявлено ЧИСТЫМ. [XROTATION]

Я немного озадачен. Как я могу изменить этот код так, чтобы подпрограмма PURE "DummyDummy" компилировалась?

1 Ответ

1 голос
/ 23 марта 2012

Я не знаю много о Фортране 90 (в свое время и т. Д. И т. Д.), Но если поместить его в модуль, он будет работать.У меня складывается впечатление, что модули нужны для различных «современных» функций Fortran.

В любом случае, кто-то умнее (или моложе?), чем я, может объяснить, но это должно помочь вам продолжить.

module foo
  implicit none
contains

  pure Subroutine XRotation (x, y, z, Xrot, xp, yp, zp)
  ....

end module foo

ах, вот объяснение (см. Ответы) - Написание и вызов чистых подпрограмм в Fortran 90 с использованием gfortran

ps Я также получаю предупреждение о типе, так как вы передаете целые числа варгументы с плавающей точкой.

...