为什么带有假定形状参数的子例程不能具有内部函数?

js216

我有一个带有假定形状数组的子例程,该数组还包含一个内部函数:

subroutine test(x)
   real x(:)
contains
   function a()
   end
end

当我尝试使用f2py(f2py -c test.f90 -m test进行编译时,将显示以下错误:

gfortran:f77: /tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f
/tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f:11:10:

           function a() ! in :test:test.f90:test
          1
Error: Unclassifiable statement at (1)
/tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f:13:13:

           end function a
             1
Error: Expecting END SUBROUTINE statement at (1)

但是,如果我删除了内部函数a(),或者给数组指定了明确的形状(例如real x(5)),则可以正常编译。上面给出的代码有什么问题?

弗拉基米尔F

情况似乎很特殊。为了更确定发生什么end function a错误消息,我添加了完整的end语句

subroutine test(x)
   real x
contains
   function a()
   end function a
end subroutine test

从错误消息中可以看到,gfortran错误并非来自原始源代码,而是来自/tmp/目录中的其他源代码如果将其打开,则如下所示:

C     -*- fortran -*-
C     This file is autogenerated with f2py (version:2)
C     It contains Fortran 77 wrappers to fortran functions.

      subroutine f2pywraptest (x, f2py_x_d0)
      integer f2py_x_d0
      real x(f2py_x_d0)
      interface
      subroutine test(x) 
          real, dimension(:) :: x
          function a() ! in :nestedf:nestedf.f90:test
          end function a
      end subroutine test
      end interface
      call test(x)
      end

它是用于调用子例程的包装器。这样做的原因是使Python可以更轻松地调用您的代码,而无需Python理解假定的shape参数。但是,f2py在创建接口时无法正确理解内部功能。

不幸的是,您必须选择。您可以具有假定的shape参数,也可以具有内部函数。但是f2py不能同时理解两者。否则您将不得不以某种方式拦截f2py临时文件并进行修复,然后再继续操作,但我不知道该怎么做。

包装源中提到Fortran 77不会让我分心它们可能意味着包装器本身可以在没有显式接口的情况下被调用,并且源文件是固定格式的。但它显然包含Fortran 90功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么带有数组作为输入的子例程比具有自动本地数组的相同子例程具有更快的性能?

来自分类Dev

带有可选块参数的子例程

来自分类Dev

为什么不能在带有const的函数内部使用此函数?

来自分类Dev

为什么带有参数的函数不能在迭代器中调用?

来自分类Dev

为什么我不能在settimeout / setinterval中多次调用带有参数的函数

来自分类Dev

为什么构造函数中的全局变量和参数变量不能具有相同的名称?

来自分类Dev

为什么带有空参数列表的函数原型与具有char参数的函数原型冲突?

来自分类Dev

当基类具有带参数的构造函数时,为什么不能创建无参数子类构造函数?

来自分类Dev

带有参数的python内部函数

来自分类Dev

调整具有特定形状的图像大小

来自分类Dev

使用 numpy 组合具有特定形状的数组

来自分类Dev

为什么带有私有构造函数的私有内部类可以被子类化?

来自分类Dev

为什么带有私有构造函数的私有内部类可以被子类化?

来自分类Dev

为什么在函数参数中声明带有静态变量的函子在Windows中不是错误?

来自分类Dev

Java公共类,带有带有非公共参数的公共构造函数。为什么?

来自分类Dev

为什么默认参数和功能参数不能具有相同的名称?

来自分类Dev

Javascript Pipe函数-为什么所有标准实现都返回带有参数的函数

来自分类Dev

为什么我不能在带有嵌套函数的函数内声明变量?

来自分类Dev

为什么内部类和外部类不能具有相同的名称?

来自分类Dev

当两个文件相互包含时,为什么不能具有内部结构?

来自分类Dev

在类声明中,为什么构造函数中的参数不能与私有部分中定义的变量具有相同的名称?

来自分类Dev

为什么不能将具有返回值的函数分配给具有 void 的指针函数?

来自分类Dev

为什么带有背景的父元素不能覆盖宽度大于视口的子元素?

来自分类Dev

使用具有N个顶点的多边形估算给定形状的算法是什么?

来自分类Dev

使用具有N个顶点的多边形估算给定形状的算法是什么?

来自分类Dev

为什么我们不能为带有两个参数的方法捕获通配符?

来自分类Dev

为什么我不能使用带有“ GET”方法的Express'Router()访问我的参数

来自分类Dev

为什么不能使用Start-Process调用带有参数的脚本?

来自分类Dev

为什么我不能使用带有“ GET”方法的Express'Router()访问我的参数

Related 相关文章

  1. 1

    为什么带有数组作为输入的子例程比具有自动本地数组的相同子例程具有更快的性能?

  2. 2

    带有可选块参数的子例程

  3. 3

    为什么不能在带有const的函数内部使用此函数?

  4. 4

    为什么带有参数的函数不能在迭代器中调用?

  5. 5

    为什么我不能在settimeout / setinterval中多次调用带有参数的函数

  6. 6

    为什么构造函数中的全局变量和参数变量不能具有相同的名称?

  7. 7

    为什么带有空参数列表的函数原型与具有char参数的函数原型冲突?

  8. 8

    当基类具有带参数的构造函数时,为什么不能创建无参数子类构造函数?

  9. 9

    带有参数的python内部函数

  10. 10

    调整具有特定形状的图像大小

  11. 11

    使用 numpy 组合具有特定形状的数组

  12. 12

    为什么带有私有构造函数的私有内部类可以被子类化?

  13. 13

    为什么带有私有构造函数的私有内部类可以被子类化?

  14. 14

    为什么在函数参数中声明带有静态变量的函子在Windows中不是错误?

  15. 15

    Java公共类,带有带有非公共参数的公共构造函数。为什么?

  16. 16

    为什么默认参数和功能参数不能具有相同的名称?

  17. 17

    Javascript Pipe函数-为什么所有标准实现都返回带有参数的函数

  18. 18

    为什么我不能在带有嵌套函数的函数内声明变量?

  19. 19

    为什么内部类和外部类不能具有相同的名称?

  20. 20

    当两个文件相互包含时,为什么不能具有内部结构?

  21. 21

    在类声明中,为什么构造函数中的参数不能与私有部分中定义的变量具有相同的名称?

  22. 22

    为什么不能将具有返回值的函数分配给具有 void 的指针函数?

  23. 23

    为什么带有背景的父元素不能覆盖宽度大于视口的子元素?

  24. 24

    使用具有N个顶点的多边形估算给定形状的算法是什么?

  25. 25

    使用具有N个顶点的多边形估算给定形状的算法是什么?

  26. 26

    为什么我们不能为带有两个参数的方法捕获通配符?

  27. 27

    为什么我不能使用带有“ GET”方法的Express'Router()访问我的参数

  28. 28

    为什么不能使用Start-Process调用带有参数的脚本?

  29. 29

    为什么我不能使用带有“ GET”方法的Express'Router()访问我的参数

热门标签

归档