gpt4 book ai didi

arrays - 如何将标量传递给 Fortran 子程序的向量(一维数组)?

转载 作者:行者123 更新时间:2023-12-01 16:18:38 25 4
gpt4 key购买 nike

有这个程序:

INTEGER i,k
REAL*8 mp(15,48)
REAL*8 sp(15)
k=0
do i=1,12
k=k+1
call Equaltensors(sp,mp(1,k),15)
enddo
end

c=====================

subroutine Equaltensors(tensA,tensB,n)
REAL*8 tensA(n),tensB(n)
INTEGER i
do i=1,n
tensB(i)=tensA(i)
enddo
return
end

所以基本上 mp(1,1) 等的值作为 n=15 的向量 tensB(15) 传递给子程序。我不明白的是如何将实数存储在子程序中的一维数组中。

最佳答案

你的问题标题有点误导。 Fortran 不允许您将标量传递给数组。但是它允许将数组的单个元素传递给例程的数组虚拟参数 - 这在 Fortran 中称为“序列关联”。正如 IanH 和其他人所说,以下元素自动与虚拟数组的元素相关联,直到被调用例程的实际数组中的最后一个元素。

但是,此功能有一些限制。如果元素是 POINTER 数组,则不能执行此操作。

回到你的标题,我看到许多程序将常量 3 传递给一个例程,其中哑元是一个数组。该例程仅使用第一个元素,但这是不合法的,较新的编译器可能会检测到错误并提示。一种解决方法是使用数组构造函数将参数转换为数组 - 例如,CALL FOO ([3]),但这仅适用于读取而不是写入值的情况。

我写了一些关于这个一般问题的博客文章 - 见 http://software.intel.com/en-us/blogs/2009/03/31/doctor-fortran-in-ive-come-here-for-an-argumenthttp://software.intel.com/en-us/blogs/2009/07/10/doctor-fortran-in-ive-come-here-for-an-argument-side-2

关于arrays - 如何将标量传递给 Fortran 子程序的向量(一维数组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com