我有一个非常简单的do循环,其中我想保存(存储)在循环中计算的向量的元素到另一个,例如我可以回想起循环外第二个向量的元素。 我的天真测试如下:
程序测试
implicit none
integer :: num,i
real*8, DIMENSION(3, 1) :: pos
real*8, dimension(:),allocatable :: x(:)
real*8 :: step,delta
pos = 0.0 ! clear the vector all components are equal to zero
pos(1,1)=1. ! only first elements of the vector 'pos' of object 1 is diff. from zero
num=1000
delta = 1.
step = 0.
allocate(x(num)) ! allocate a vector with dimension equal to num
x=0.
do while ( step < num )
pos(1,1) = pos(1,1) + 0.5d0 ! move the objects
x=pos(1,1) ! store the elements of vector 'pos' in vector 'x'
step = step + delta
end do
print*, x(120) ! print the 120th elements of the vector x
end program test
我认为问题在于我如何传递来自&#39; pos&#39;到&#39; x&#39;向量。
非常感谢你的帮助。
答案 0 :(得分:1)
本声明
allocate(x(num)) ! allocate a vector with dimension equal to num
使x
成为具有num
(即1000
)元素的向量。下一个陈述
x=0.
将x
的每个元素设置为0.0
。到现在为止还挺好。然后代码进入该语句的循环
x=pos(1,1) ! store the elements of vector 'pos' in vector 'x'
重复将x
的每个元素设置为pos(1,1)
的最新值。这可能不是你想要做的。我认为最简单的解决方法是像这样重写循环
do step = 1,1000
pos(1,1) = pos(1,1) + 0.5d0 ! move the objects
x(step) = pos(1,1) ! store the elements of vector 'pos' in vector 'x'
end do
我不确定您要做什么,看起来好像是在尝试使用算术系列x
中的术语填充1 + n*0.5, n = [0,999]
。更简洁的方法可能是修改您拥有的内容,以便x
从0
编入索引,也许
allocate(x(0:num-1))
然后简单地使用一个循环,如
do step = 1,999
x(step) = x(step-1)+0.5
end do
我不确定为什么让pos
参与设置x
的值。