gpt4 book ai didi

Fortran 运行时警告 : temporary array

转载 作者:行者123 更新时间:2023-12-02 08:39:08 27 4
gpt4 key购买 nike

在运行我的代码(使用 gfortran 编译)时,我收到 Fortran 运行时警告“创建了临时数组”,我想知道是否有更好的方法来解决此警告。

我原来的代码是这样的:

allocate(flx_est(lsign,3))
allocate(flx_err(lsign,3))
do i=1,lsign
call combflx_calc(flx_est(i,:),flx_err(i,:))
enddo

在子例程中,我定义如下变量:

subroutine combflx_calc(flx_est,flx_err)
use,intrinsic :: ISO_Fortran_env, only: real64
implicit none
real(real64),intent(inout) :: flx_est(3),flx_err(3)

flux_estflx_err 向量可能会根据多种条件在子例程内发生变化,我需要相应地更新它们的值。

Fortran 似乎不喜欢这种结构。我可以通过定义临时变量来解决它:

tmp_flx_est=flx_est(i,:)
tmp_flx_err=flx_err(i,:)
call combflx_calc(tmp_flx_est,tmp_flx_err)
flx_est(i,:)=tmp_flx_est
flx_err(i,:)=tmp_flx_err

但在我看来,这是一种相当愚蠢的解决方法。

正如您所见,我不是 Fortran 专家,因此非常欢迎任何帮助。

最佳答案

一种方法是传递假定的形状数组

real(real64),intent(inout) :: flx_est(:),flx_err(:)

另一个是交换数组的维度,以便您可以传递二维数组的连续部分。

call combflx_calc(flx_est(:,i),flx_err(:,i))

问题在于您的过程的显式大小虚拟参数 (var(n)) 需要连续数组。假定的形状数组可以有一些跨度。

关于Fortran 运行时警告 : temporary array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28859524/

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