Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Fortran中添加数字并将其移动到同一数组中_Fortran_Fortran90_Fortran95 - Fatal编程技术网

在Fortran中添加数字并将其移动到同一数组中

在Fortran中添加数字并将其移动到同一数组中,fortran,fortran90,fortran95,Fortran,Fortran90,Fortran95,我的代码中有一个数组,它由2049年开始的元素总数组成。其中1681称为流体粒子,368称为边界粒子。 现在粒子的排列1681+368=2049。我需要向数组中添加40个粒子。新粒子必须在1681之后添加。我的问题是,如何从阵列中移动368以添加1681之后为40的新数字,从而使总数=2088。 注意,我必须不时地将相同的数字添加到我的数组中您需要分配一个新数组并复制内容。例如: real, allocatable::a(:),tmp(:) allocate(a(4)) a=(/1,2,3

我的代码中有一个数组,它由2049年开始的元素总数组成。其中1681称为流体粒子,368称为边界粒子。 现在粒子的排列1681+368=2049。我需要向数组中添加40个粒子。新粒子必须在1681之后添加。我的问题是,如何从阵列中移动368以添加1681之后为40的新数字,从而使总数=2088。
注意,我必须不时地将相同的数字添加到我的数组中

您需要分配一个新数组并复制内容。例如:

 real, allocatable::a(:),tmp(:)
 allocate(a(4))
 a=(/1,2,3,4/)
 write(*,*)a
 allocate(tmp(5))
 tmp(1:2)=a(1:2)
 tmp(4:5)=a(3:4)
 tmp(3)=0
 call move_alloc(tmp,a)
 write(*,*)a
1.02.03.04.0

1.0 2.0 0.0 3.0 4.0

注意:如果您真的有一个脏兮兮的旧f95编译器,带有out
move\u alloc
,那么最后一行需要替换为:

 deallocate(a)
 allocate(a(5))
 a=tmp
 deallocate(tmp)

这可能需要两倍于使用
move\u alloc
的时间,因为它实际上会将所有内容复制两次。如果您发现自己使用大型数组执行此操作,您真的应该升级编译器。

这是一个相当混乱的问题,请尝试使用一些正确的文本格式,并对您要查找的内容进行更易于理解的解释?对我来说,这听起来像是你在寻找可以动态增长的数组?是的,我希望我的数组根据我的条件自动增长。你有一个一维数组,维度为(1:2049),你希望将其增加到(1:2088),并将元素(1682:2049)移动到(1721:2088)。我说得对吗?是的,对,我必须用新的元素替换1682元素。还有更简洁的
a=[a(:2),0.,a(3:)]
。但不是w/f95。我猜这是2008年的标准?(不适用于ifort 13,我认为它符合2003)赋值上的重新分配和对数组构造函数使用方括号都是Fortran 2003。ifort需要/标准语义才能工作,并且在数组构造函数的左侧重新分配的对象也出现错误。它是F2003(原样是
move\u alloc
)。ifort 13不符合F2003,甚至15拒绝编译一些F2003代码。