Section d'un tableau en paramètre d'une fonction
Bonjour à tous,
Voila mon problème,
J'ai pour global un tableau "tres" grand, permetant de gerer toute les données de mon application:
Dans mon main, j'apelle une fonction foo:
Code:
CALL FOO(WS(OFFSET))
Dans ma fonction FOO, ce paramètre corespond a un tableau a 5 dimensions:
Code:
1 2 3 4
|
SUBROUTINE FOO(FIELDS)
/*input/output*/
REAL FIELDS(MXLON,NLAT,NVER,NF,NLAYERS) |
La shape de FIELDS corespond a une signification logique au niveau des données.
...La tout va bien dans le meilleur des mondes
Maintenant je veut appeller une autre fonction a partir de mon main,
Code:
CALL BAR(WS(OFFSET))
le meme tableau en fait, mais pas toutes les données,
du point de vu logique je veut passer:
Code:
FIELDS(1:NLON,NLAT,NVER,NF,NLAYERS)
avec NLON<MXLON
Ce qui corespont pour mon tableaux WS, (de rang 1) a une sous section non contigus.
Je peut, par l'intermediaire d'un vecteur d'indice, faire une indexation directe
(i.e. je fait un vecteur avec tous les indices que je veux voir dans ma sous section)
Le probleme, c'est qu'un tel sous-tableau ne peut pas figurer à gauche d’un signe d’affectation, donc le passage en parametre ne marche pas non plus.
De plus j'ai lu dans un tutorial:
Citation:
Sections non régulières en argument de procédures
Si on passe une section non régulière en argument d’appel d’une
procédure, il faut savoir que :
• c’est une copie contiguë en mémoire qui est passée par le
compilateur,
• l’argument muet correspondant de la procédure ne doit pas avoir la
vocation INTENT(inout) ou INTENT(out) ; autrement dit, en
retour de la procédure, il n’y a pas mise-à-jour du tableau “père” de la
section irrégulière.
Toutes les remarques seront les bienvenues