一些背景.我有这段代码:
function areeq(array1,array2) result(eq)
real :: array1(1:100,1:100), array2(1:100,1:100)
logical :: eq
integer :: x,y,f
do x=1,100
do y = 1,100
print *,array1(x:x,y:y)
print *,array2(x:x,y:y)
if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
eq = .false.
return
end if
read *,f
end do
end do
eq = .true.
return
end function
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行它时,它会抛出此错误消息:
if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression
Run Code Online (Sandbox Code Playgroud)
这是我第二次遇到需要Scalar的问题,尽管我最后一次成功地进行了临时工作,但我真的应该并且需要能够正确处理它们.
所以,TL; DR:这段代码出了什么问题,在这种情况下我应该怎样做呢?
特定
integer n
real x(5)
Run Code Online (Sandbox Code Playgroud)
然后,给出适当的定义 n
x(n)
Run Code Online (Sandbox Code Playgroud)
是的数组元素x,和
x(n:n)
Run Code Online (Sandbox Code Playgroud)
是一个数组部分x.
数组元素是标量,而数组部分本身是大小为1的数组.
正如史蒂夫莱昂内尔所说,就问题而言,
array1(x:x,y:y) == array2(x:x,y:y)
Run Code Online (Sandbox Code Playgroud)
是一个数组值表达式(虽然大小为1),可以将其缩减为标量表达式ALL.然而
array1(x,y) == array2(x,y)
Run Code Online (Sandbox Code Playgroud)
是一个标量表达式,两个操作数都是标量数组元素.
在引用中,x(n)我们有一个标量数组元素n.对于n数组,我们将使用数组作为向量下标x.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |