将元素存储在矢量Fortran中

时间:2014-12-01 17:09:56

标签: vector fortran fortran90

我有一个非常简单的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;向量。

非常感谢你的帮助。

1 个答案:

答案 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]。更简洁的方法可能是修改您拥有的内容,以便x0编入索引,也许

allocate(x(0:num-1))

然后简单地使用一个循环,如

do step = 1,999
   x(step) = x(step-1)+0.5
end do

我不确定为什么让pos参与设置x的值。