печать имени функции в фортране 90 - PullRequest
4 голосов
/ 15 января 2012

Я написал код, который находит корень функции, имя которой указано в аргументах, я думаю, что взял ее из Числовых Рецептов.Что-то вроде

функции двойной точности rtsafe (x_init, x1, x2, xacc, func, dfunc)

, где func и dfunc являются именами двух функций.Конечно, я использую rtsafe с разными функциями func и dfunc.Я хотел бы напечатать имя вызываемых функций func и dfunc, когда я нахожусь внутри rtsafe, потому что когда есть ошибка в rtsafe, я хотел бы знать, какую функцию я использовал.Что-то вроде

напишите (, ) "my func =", func

(?)

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 20 июня 2012

Вы можете добавить в свои функции дополнительный аргумент, который возвращает имя функции:

    FUNCTION f(x, fname) RESULT (fx)
      IMPLICIT NONE
      REAL                        :: x, fx
      CHARACTER(LEN=*), OPTIONAL  :: fname
      CHARACTER(LEN=*), PARAMETER :: myfname='somename'

      IF (present(fname)) fname=myfname

      fx = x   ! or whatever else

    END FUNCTION f

При первом вызове вашей функции в rtsafe вы получаете имя функции для последующей печати в случае, еслиошибки.

Не проверял это, но оно должно работать более или менее так, и это единственный способ, которым я могу думать, сделать это в Фортране.

0 голосов
/ 15 января 2012

Может быть, вы можете найти какое-то ручное решение (передать имя функции, затем напечатать его с помощью «OK» ... или что-то в этом роде), но напечатать имена функций / подпрограмм ( отражающие ) невозможно.

...