【发布时间】:2021-02-06 22:48:31
【问题描述】:
我有以下模块:
module prestel
implicit none
contains
subroutine gradient(rho,N,gradiant_rho)
implicit none
real(kind=real), allocatable :: rho(:)
real(kind=real),allocatable :: gradiant_rho(:)
integer,intent(in) :: N
integer :: i
do i = 1,N
gradiant_rho(i) = rho(i) - 2
end do
end subroutine gradient
subroutine state_system(density,N,grad_density)
implicit none
real(kind=real), allocatable :: density(:)
real(kind=real), allocatable :: grad_density(:)
integer :: i,j
integer, intent(in) :: N
call gradient(density,velocity,N,grad_density,grad_velocity)
do i=1,N
density (i+1) = density(i) - 2*grad_density(i))
end do
end subroutine state_system
end module prestel
现在子程序“状态系统”使用第一个子程序“梯度”。我们从一个初始数组“密度”开始,“状态系统”子程序对它的每个元素进行操作,直到我们有一个修改后的新数组。
现在我的问题是我需要把它放在一个循环中(比如说做 j=1,10)。因此,在此循环的每次迭代中,子程序(系统状态和梯度)将返回一个修改后的数组,然后我希望我的程序用获得的新数组替换旧数组(即两个子程序的输入)并执行再次执行。
我不知道如何在每次迭代时更新子例程中的这两个数组。我尝试定义一个新数组并将所有新值放入其中,但它并没有导致任何地方。
如果我想这样做,是在主程序调用子程序的时候,还是在子程序里面?
【问题讨论】:
标签: arrays loops fortran subroutine