簡體   English   中英

Fortran "ANY" function 檢查數組是否包含值時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM