Fortran中如何向subroutine中传入数组
时间: 2024-12-16 19:31:09 浏览: 6
在Fortran中,向子程序(Subroutine)传递数组通常有两种方法:
1. **通过实际参数(Actual Parameters)**:
当直接将数组名作为参数传递时,Fortran会创建数组的一个副本,并将其值复制到子程序内部。这称为按值传递(Pass by Value)。示例代码如下:
```fortran
subroutine my_sub(array, n)
real, intent(in) :: array(n) ! 定义数组array为输入
integer :: n ! 输入参数n
... ! 子程序体内的操作
end subroutine my_sub
call my_sub(input_array, size_of_array)
```
2. **通过引用参数(Assumed Shape or Intent(INOUT))**:
如果想在子程序中修改数组元素,可以使用"intent(inout)"声明,这时传递的是数组的引用,改变数组在子程序中的内容会影响到主程序。对于未知形状(unformatted)的数组,可以使用assumed shape。例如:
```fortran
subroutine my_sub(array, n) bind(c, name='my_sub') ! 使用bind(c)对外暴露给C接口
real, dimension(:), intent(inout) :: array ! 标记为inout并指定为实型数组
integer :: n ! 输入参数n
... ! 子程序体内的操作,如对array进行操作
end subroutine my_sub
real, allocatable :: arr(:)
allocate(arr(size))
call my_sub(arr, size)
```
注意这里需要先为数组分配内存。
阅读全文