2010-06-09 7 views
2

Y at-il un bon moyen d'écrire une déclaration Fortran ASSOCIÉ pour activer cetteSyntaxe Fortran ASSOCIATE pour autoriser l'accès indexé?

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 

en quelque chose comme le

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 

suivante Je regarde à Adams et al de Le Fortran 2003 section Manuel 8.2, mais je ne vois pas comment écrire la construction associate-name => selector pour permettre l'accès indexé dans le associate-name.

De toute évidence, ce que je vais faire est exagéré pour quelques lignes. J'en ai un tas que je voudrais condenser.

Répondre

2

À moins que je ne dise des choses, je ne pense pas que ce soit possible. Le specification dit (section 8.1.4.3):

Dans un TYPE SELECT ou construction ASSOCIÉ, chaque entité associant a le même rang que son sélecteur associé.

et pour autant que je peux voir, vous voulez un rang 1 entité associant (V) et aura besoin d'un rang 2 sélecteur associé (pour tenir v).

+0

Merci pour la réponse Andrew. À moins de jouer à des jeux de préprocesseur, y a-t-il un langage standard pour accomplir ce que je veux? –

+0

@Rhys: Je pense que l'idiome serait d'utiliser des pointeurs vers des sections de tableau, mais je ne pense pas que cela rendra votre code plus compréhensible ou plus net ou plus court, ce qui semble être vos objectifs. –

+0

@Mark: Je suis tout à fait d'accord avec les pointeurs sur les sections de tableau qui ne rendent pas plus agréable. Merci les gars. –