Синтаксис Fortran ASSOCIATE, чтобы разрешить индексированный доступ? - PullRequest
2 голосов
/ 09 июня 2010

Есть ли хороший способ написать оператор Fortran ASSOCIATE, чтобы превратить это

FORALL (i = 2:n-2)
    v(:,i) = v(:,i) + MATMUL(A, &
             c(2)*u(:,i-2) + c(1)*u(:,i-1) + c(0)*u(:,i) + c(1)*u(:,i+1) + c(2)*u(:,i+2))
END FORALL

в нечто вроде следующего

ASSOCIATE ( U => ..., V => ...)
    FORALL (i = 2:n-2)
        V(i) = V(i) + MATMUL(A, &
               c(2)*U(i-2) + c(1)*U(i-1) + c(0)*U(i) + c(1)*U(i+1) + c(2)*U(i+2))
    END FORALL
END ASSOCIATE

Я смотрю на Адамса и др. Справочник Фортрана 2003 раздел 8.2, но я не вижу, как написать конструкцию associate-name => selector для индексированного доступа в associate-name.

Очевидно, что я собираюсь излишне убить пару строк. У меня есть куча их, которые я бы хотел сжать.

1 Ответ

2 голосов
/ 09 июня 2010

Если я не читаю вещи, я не думаю, что это возможно. спецификация гласит (раздел 8.1.4.3):

В конструкции SELECT TYPE или ASSOCIATE каждый ассоциированный объект имеет тот же ранг, что и его связанный селектор.

и, насколько я понимаю, вы хотите ассоциирующую сущность ранга 1 (V) и вам понадобится ранг 2 связанный селектор (для удержания v).

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