Ваша проблема в том, что ЛЮБОЙ является операцией сокращения, она принимает много значений, хранящихся в логическом массиве, и сводит их к одному значению, в данном случае к значению .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
решит проблему немедленно.
Но, вероятно, здесь есть способ, где вы можете использовать ЛЮБОЙ, и это может быть лучшим способом решения ваших задач. Однако без остальной части кода, включая объявления переменных, невозможно сказать.