fortran,将可分配数组传递给具有右边界的子例程

用户名

我需要在程序中将一些可分配的数组传递给子例程,并且我需要知道我的方式是否符合标准。

如果您知道可以在哪里搜索fortran的标准,请告诉我。

这是一个比单词更好解释的小代码

program test

use modt99

implicit none

real(pr), dimension(:), allocatable :: vx

allocate(vx(-1:6))
vx=(/666,214,558,332,-521,-999,120,55/)
call test3(vx,vx,vx)
deallocate(vx)

end program test

与模块modt99

module modt99

contains
subroutine test3(v1,v2,v3)
  real(pr), dimension(:), intent(in) :: v1
  real(pr), dimension(0:), intent(in) :: v2
  real(pr), dimension(:), allocatable, intent(in) :: v3

  print*,'================================'
  print*,v1(1:3)
  print*,'================================'
  print*,v2(1:3)
  print*,'================================'
  print*,v3(1:3)
  print*,'================================'

end subroutine test3


end module modt99

在屏幕上,我得到

 ================================
   666.000000000000        214.000000000000        558.000000000000     
 ================================
   214.000000000000        558.000000000000        332.000000000000     
 ================================
   558.000000000000        332.000000000000       -521.000000000000     
 ================================

那么子例程test3中的伪参数的三种方式是否合法(在哪个版本的fortran,90、95、2003?)中,它们的行为是否正常?

亚历山大·沃格特

第一个版本将数组切片传递给子例程。请注意,边界信息不会以这种方式传递,因此假定数组从开始1并转到size(array)

第二种方法与第一种类似,但是您将下边界手动设置为0,这就是为什么打印v3(1:3)为您提供偏移量为的值的原因1

第三种方式将所有数组信息传递给子例程(包括边界),因此将“正确”索引。传递allocatable数组是在Fortran 2003中引入的。

除了存在别名问题(将相同的变量传递给三个不同的伪参数)外,所有三个版本都是合法的。

您可以在此处找到该标准的所有文档

特别是,请看一下Fortran 2003 Standard,Ch. 5.1.2.5 DIMENSION attribute以了解虚拟参数中假定形状递延形状数组之间的差异

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Fortran中将可分配字符传递给具有无限多态伪参数的子例程

来自分类Dev

FORTRAN-子例程中的可分配数组

来自分类Dev

将可分配数组从fortran传递到C并对其进行malloc

来自分类Dev

在Fortran子例程中分配数组

来自分类Dev

如何在Fortran子例程中使用可分配数组?

来自分类Dev

分配具有自身值的可分配数组

来自分类Dev

Fortran函数返回可分配数组

来自分类Dev

如何指示子例程,可分配数组使用哪个模块

来自分类Dev

Intel Fortran错误“未分配可分配数组或指针”

来自分类Dev

为什么在Fortran中需要可分配数组?

来自分类Dev

fortran 77和gfortran中的可分配数组

来自分类Dev

为什么在Fortran中需要可分配数组?

来自分类Dev

写入 Fortran 可分配数组时出现访问冲突

来自分类Dev

Fortran将数字传递给子例程

来自分类Dev

在不同编译器(PGI和Intel)之间传递包含可分配数组的fortran派生类型

来自分类Dev

共享可分配数组

来自分类Dev

复制到另一个可分配数组后,Fortran 90不会保持数组上下边界

来自分类Dev

将可选的可分配数组与可选的不可分配虚拟参数相关联时出现分段错误

来自分类Dev

Fortran是否复制传递给函数/子例程的数组节的副本?

来自分类Dev

将2d数组作为1d参数fortran传递给子例程

来自分类Dev

如何使用f2py将字符串数组传递给Fortran子例程

来自分类Dev

当传递给 Fortran 中的子例程时,数组是否被视为指针?

来自分类Dev

重置(取消分配/无效化)已损坏的Fortran可分配数组

来自分类Dev

重置(取消分配/无效化)已损坏的Fortran可分配数组

来自分类Dev

如何将动态分配的数组传递给子例程

来自分类Dev

Fortran:派生类型的可分配数组,包含派生类型的数组

来自分类Dev

将FFTW计划传递给Fortran子例程

来自分类Dev

FORTRAN:将伪参数传递给子例程

来自分类Dev

Fortran:将任意“结构”传递给模块子例程

Related 相关文章

  1. 1

    在Fortran中将可分配字符传递给具有无限多态伪参数的子例程

  2. 2

    FORTRAN-子例程中的可分配数组

  3. 3

    将可分配数组从fortran传递到C并对其进行malloc

  4. 4

    在Fortran子例程中分配数组

  5. 5

    如何在Fortran子例程中使用可分配数组?

  6. 6

    分配具有自身值的可分配数组

  7. 7

    Fortran函数返回可分配数组

  8. 8

    如何指示子例程,可分配数组使用哪个模块

  9. 9

    Intel Fortran错误“未分配可分配数组或指针”

  10. 10

    为什么在Fortran中需要可分配数组?

  11. 11

    fortran 77和gfortran中的可分配数组

  12. 12

    为什么在Fortran中需要可分配数组?

  13. 13

    写入 Fortran 可分配数组时出现访问冲突

  14. 14

    Fortran将数字传递给子例程

  15. 15

    在不同编译器(PGI和Intel)之间传递包含可分配数组的fortran派生类型

  16. 16

    共享可分配数组

  17. 17

    复制到另一个可分配数组后,Fortran 90不会保持数组上下边界

  18. 18

    将可选的可分配数组与可选的不可分配虚拟参数相关联时出现分段错误

  19. 19

    Fortran是否复制传递给函数/子例程的数组节的副本?

  20. 20

    将2d数组作为1d参数fortran传递给子例程

  21. 21

    如何使用f2py将字符串数组传递给Fortran子例程

  22. 22

    当传递给 Fortran 中的子例程时,数组是否被视为指针?

  23. 23

    重置(取消分配/无效化)已损坏的Fortran可分配数组

  24. 24

    重置(取消分配/无效化)已损坏的Fortran可分配数组

  25. 25

    如何将动态分配的数组传递给子例程

  26. 26

    Fortran:派生类型的可分配数组,包含派生类型的数组

  27. 27

    将FFTW计划传递给Fortran子例程

  28. 28

    FORTRAN:将伪参数传递给子例程

  29. 29

    Fortran:将任意“结构”传递给模块子例程

热门标签

归档