我想通过一个矩阵并检查它的任何块是否与预定义的单位相同。这是我的代码。 'sd5'是2乘2的预定义单位。
ALLOCATE (fList((n-1)**2,3))
fList = 0
p = 1
DO i = 1, n-1, 1
DO j = 1, n-1, 1
IF (TEST(i:i+1, j:j+1) == sd5) THEN
fList(p,1:3) = (i, j+1, 101) ! 101 should be replaced by submatrix number
END IF
p = p+1
END DO
END DO
问题似乎出现在IF
语句中,因为TEST(i:i+1, j:j+1) == sd5
中返回了四个逻辑语句。我收到这个错误:
Error: IF clause at (1) requires a scalar LOGICAL expression
我收到另一个错误:
fList(p,1:3) = (i, j+1, 101) ! 101 should be replaced by sub matrix number
1
Error: Expected PARAMETER symbol in complex constant at (1)
我不明白这个错误,因为所有变量都是我定义的整数。
答案 0 :(得分:5)
首先,如果语句需要标量子句。
(TEST(i:i+1, j:j+1) == sd5)
会产生包含.true.
或.false.
的2x2 矩阵。由于您要检查所有条目,因此该语句应为
IF ( all( TEST(i:i+1, j:j+1) == sd5) ) THEN
[如果只有一个匹配条目就足够了,您也可以使用any
。 ]
第二个陈述有点棘手,因为你没有陈述你想要达到的目的。事实上,它不是你所期望的。我的猜测是你试图存储一个长度为3的向量,而赋值应该是
fList(p,1:3) = (/ i, j+1, 101 /)
或
fList(p,1:3) = [ i, j+1, 101 ]
您提供的语法实际上用于指定复杂常量:
( Real, Imag )
在这种形式中,Real
和Imag
本身需要是常量或文字,参见Fortran 2008标准,R417。