将数组数组传递给子例程

时间:2018-03-29 21:00:17

标签: arrays fortran subroutine

我参加了原子模拟课程,语言是Fortran。 我正在编写一个模拟盒子中原子运动的程序。 我有一个主要和众多的子程序。主程序代码如下:

program Spheres
    implicit none
    integer :: nspheres
    double precision :: rvolume
    integer :: ncollisions
    double precision :: sigma
    double precision, allocatable :: pos(:,:)
    integer :: k,j  
    write(*,*) '1st subroutine read_input:' 
    call read_input(nspheres,rvolume,ncollisions)
    write(*,*) ' '

    allocate(pos(1:3,1:nspheres))

    write(*,*) '2nd subroutine validate_input:'
    call validate_input(nspheres,rvolume)
    write(*,*) ' '

    write(*,*) '3rd subroutine compute_diameter:'
    call compute_diameter(nspheres,rvolume,sigma)
    write(*,*) ' '

    do k = 1, 3
          do j = 1, nspheres
               pos(k,j) = k
          end do
    end do

    write(*,*) '4th subroutine assign_positions:'
    call assign_positions(pos)
    write(*,*) ' '

end program Spheres

我已经创建了一个二维数组,我根据用户输入的整数(整数命名为nspheres)进行分配。 从另一个子程序接收到nspheres后,我为数组分配。

然后,数组被发送到另一个子程序,该子程序决定给定原子量的位置(子程序的名称为assign_positions)。

" assign_positions'子程序代码如下,与代码的相关部分:

subroutine assign_positions(pos)
double precision, dimension(:,:), intent(inout), allocatable :: pos 
    integer :: nspheres 
    ...
    write(*,*), size(pos,2)
    nspheres = size(pos,2)
    ...
    do k = 1, 3
         do j = 1, nspheres
             write(*,*), pos(k,j)
         end do
    end do

end subroutine assign_positions

事情是我的讲师想要子程序" assign-positions"从发送数组的大小计算nspheres,而不是发送数组和nspheres整数。

在子程序中,我创建了另一个数组,以便接收发送的数组和另一个名为nspheres的整数(以及其他变量..)。

在该子例程之外(即在它之前)size(pos,2)返回nspheres,因为该数组是为nspheres创建的,但是在该子例程中,size(pos,2)给出了一个巨大的数字, 1862125071。

我正在使用gfortran编译器在虚拟ubuntu环境中工作。

为了测试我的代码,我已经在main中的数组中输入了一些值,然后将它们打印在main中,然后在子suboutine中。 程序已编译,并在转到该子程序时出现下一个错误:

Program received signal SIGBUS: Access to an undefined portion of a memory object.

Backtrace for this error:
#0  0x7FEF314C0E08
#1  0x7FEF314BFF90
#2  0x7FEF30E074AF
#3  0x7FEF3159863F
#4  0x7FEF3159B154
#5  0x7FEF3159BD3E
#6  0x400EC5 in assign_positions_
#7  0x40192D in MAIN__ at Spheres.f90:?
Bus error (core dumped)

0 个答案:

没有答案