用于重新排序的数组的Fortran指针传递给过程

时间:2011-06-10 18:52:25

标签: pointers fortran arrays

我正在尝试集成两个Fortran 9x代码,这些代码包含具有相反数组排序的数据数组。一个代码(我称之为旧代码)有一个已建立的子程序库,我试图尽可能有效地利用其他(新)代码(即不必创建临时数组只是为了重新排序数组并将其传递给子程序,然后必须用新的重新排序结果替换旧数组。例如,

旧代码:
oldarray(1:n,1) - > n个元素的变量1 oldarray(1:n,2) - > n个元素的变量2 ..等等

新代码:
newarray(1,1:n) - > n个元素的变量1 newarray(1,1:n) - > n个元素的变量2 ..等等

变量索引不一定与两个代码相关。如果我只需要一个变量传递给一个过程,我只是传递newarray(1,1:n),程序不知道区别。但是,如果旧代码中的过程需要oldarray的变量1-6,它可能对应于newarray的变量2,6,8,1,4,3(我只选择了任意数字),是否可以创建一个指针我可以通过程序吗? 在一个更简单的方面,是否可以只为新数组的转置创建指针?例如,指针(1000,6)指向newarray(6,1000)。

注意:不可能重写新代码以使用相同的数组排序,因为两个代码都使用最适合其循环结构的数组排序,无法更改。

另外,我对指针的经验很少。我知道我可以创建一个派生数据类型,它由一个指针数组组成,但我不认为我能够以所需的方式将它传递给一个过程(我可能错了,因为我对派生数据类型的经验也很少)。我所拥有的参考书(Fortran 95/2003 for Scientists and Engineers)仅探讨了链表和树的高级指针应用。我还在互联网上的本书所涵盖的内容之外找到了一些Fortran指针信息。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为答案是否定的,你不能这样做,反正无论如何也无济于事。

你可以使用数组指针进行各种超酷的事情,跨越数组等等,但是从表面上我看不出如何改变数据的顺序。

所以我可能错了,这是可能的,但问题是:它对你有什么帮助?据推测,您希望用户指针重新排列数据而不进行复制;但是当你传递这样的东西时,编译器可以进行拷入,拷贝;例如,创建一个临时数组,复制数据,将其传递给子程序,并在返回时复制数据。事实上,在这种情况下几乎肯定是正确的做法,性能方面;这样,旧代码可以按快速顺序访问内存,转换副本也可以快速完成。

所以我怀疑处理这个问题的正确方法是自己明确地执行复制/复制方法。