[英]Fortran "ANY" function error while checking if a array contains a value
我想檢查一個二維數組是否包含來自其他一維數組的值。
do i=1,nlines
do j=1,nchecks(i)
if (type(i).eq.4) then
do k=1,nlines
do l=1,nchecks(k)
if (type(k).eq.3) then
if (ANY(con(i,j)==id(k))) then
...
但我面臨以下錯誤:
test1.f(98): error #6361: An array-valued argument is required in this context. [ANY]
if (ANY(conn(i,j)==id2(k))) then
我究竟做錯了什么? 我也嘗試過類似的東西
do i=1,nlines
do j=1,nchecks(i)
if (type(i).eq.4) then
r1=conn(i,j)
do k=1,nlines
do l=1,nchecks(k)
if (type(k).eq.3) then
if (ANY(r1==id(k))) then
...
但這也帶來了同樣的錯誤。 所有變量都正確定義,格式沒有錯誤。 我是否以錯誤的方式使用任何命令?
您的問題是 ANY 是縮減操作,它需要存儲在邏輯數組中的許多值並將它們縮減為單個值,在本例中為 value.True。 是數組中的任何值是 true 還是 .false。 如果它們都是假的。 這是一個非常簡單的例子
ian@eris:~/work/stack$ cat any.f90
Program Any_test
Implicit None
Write( *, * ) Any( [ .True. , .False. ] )
Write( *, * ) Any( [ .False., .False. ] )
End Program Any_test
ian@eris:~/work/stack$ gfortran -std=f2008 -Wall -Wextra -fcheck=all any.f90
ian@eris:~/work/stack$ ./a.out
T
F
您的直接問題是您只是為 ANY 提供標量值,而不是數組,因此會出現錯誤。 簡單地
if (r1==id(k)) then
將解決眼前的問題。
但是這里可能有一種方法可以使用 ANY,這可能是解決您正在做的事情的最佳方法。 但是,如果沒有包括變量聲明在內的代碼 rest,就不可能說了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.