我正在使用Fortran 90程序,该程序在许多其他程序中声明了以下变量:
real(r8) :: smp_node_lf
real(r8), pointer :: sucsat(:,:)
real(r8), pointer :: h2osoi_vol(:,:)
real(r8), pointer :: watsat(:,:)
real(r8), pointer :: bsw(:,:)
在程序中的某个时刻,有一个代数运算如下:
do j = 1,nlevgrnd
do c = 1,fn
...
smp_node_lf = -sucsat(c,j)*(h2osoi_vol(c,j)/watsat(c,j))**(-bsw(c,j))
...
end do
end do
我正在尝试"翻译"这个程序的十几行到R,但上面的摘录特别让我感到困惑。
smp_node_lf
的维度是多少?它是标量吗?它是否继承了数组sucsat
,h2osoi_vol
,watsat
和bsw
的维度?
答案 0 :(得分:1)
smp_node_lf缺少维度,因为它是一个标量,并且它正在多次接收该标量操作的值,如果没有任何内容可以将其值保存到向量或其他内容,则会被重写。
它永远不会继承任何元素的维度,永远不会有一个要继承的向量,它接收的所有东西都是标量
如果你必须检索它的值,假设原始代码能够原样,那么在这个循环中应该有另一个部分,在它被另一个传递覆盖之前保存该值。 如果没有这样的东西,实现它,你可能正在处理不完整的代码,它没有做任何事情。
我已经处理了我的“完美代码”的公平份额,“当我上次使用时创造了奇迹”,并且在其代码行中找不到任何奇迹。