在 Fortran 90 中打印函数名称

发布于 2024-12-27 14:31:12 字数 340 浏览 1 评论 0原文

我编写了一段代码,用于查找函数的根,该函数的名称在参数中提供,我想我是从数值食谱中获取的。 之类的东西

像双精度函数 rtsafe(x_init, x1, x2, xacc, func, dfunc)

,其中 func 和 dfunc 是两个函数的名称。 当然,我使用 rtsafe 和不同的函数 func 和 dfunc。 当我在 rtsafe 中时,我想打印被调用函数 func 和 dfunc 的名称,因为当 rtsafe 出现错误时我想知道我正在使用哪个函数。像

write(,)"my func = ", func

(?)

这样的东西有人知道该怎么做吗?

I wrote a code that finds the root of a function whose name is provided among the arguments, I think I took it from Numerical Recipes. Something like

double precision function rtsafe(x_init, x1, x2, xacc, func, dfunc)

where func and dfunc are two functions' names.
Of course I use rtsafe with different function func and dfunc.
I would like to print the name of the called functions func and dfunc when I am inside rtsafe, because when there is an error in rtsafe I would like to know which function I was using. Something like

write(,)"my func = ", func

(?)

Does anybody know how to do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

望喜 2025-01-03 14:31:12

您可以在函数中添加一个可选参数,该参数返回函数的名称:

    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 中第一次调用函数时,您将获得函数的名称,以便稍后在出现错误时打印。

没有测试这个,但它应该或多或少像这样工作,这是我能想到的在 Fortran 中做到这一点的唯一方法。

You could add an optional argument in your functions that returns the name of the function:

    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

In the first call to your function in rtsafe you get the name of the function for later printing in case of an error.

Did not test this but it should work more or less like this, and it the only way I can think of to do this in Fortran.

遗心遗梦遗幸福 2025-01-03 14:31:12

也许您可以制定一些手动解决方案(传递函数的名称,然后用“OK”打印它......或类似的东西),但打印函数/子例程的名称(反射)是不可能的。

Maybe you can work up some manual solution (pass the name of the function, then print it with "OK" ... or something like that), but printing the names of the functions/subroutines (reflecting) is not possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文