Fortran «ЛЮБАЯ» ошибка функции при проверке, содержит ли массив значение - PullRequest
0 голосов
/ 24 апреля 2020

I sh, чтобы проверить, содержит ли один 2D-массив значение из другого 1D-массива.

   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
   ...

Но это также принесло ту же ошибку. Все переменные правильно определены, и нет ошибок в формате. Я использую ЛЮБУЮ команду неправильно?

1 Ответ

2 голосов
/ 24 апреля 2020

Ваша проблема в том, что ЛЮБОЙ является операцией сокращения, она принимает много значений, хранящихся в логическом массиве, и сводит их к одному значению, в данном случае к значению .True. является ли любое из значений в массиве истинным или Ложным. если все они ложные. Вот очень простой пример

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

Ваша непосредственная проблема заключается в том, что вы просто предоставляете ЛЮБОМ скалярному значению, а не массиву, отсюда и ошибку. Просто

if (r1==id(k)) then

решит проблему немедленно.

Но, вероятно, здесь есть способ, где вы можете использовать ЛЮБОЙ, и это может быть лучшим способом решения ваших задач. Однако без остальной части кода, включая объявления переменных, невозможно сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...