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 : Sélectionner tout - Visualiser dans une fenêtre à part REAL WS(COM_SIZE)
Dans ma fonction FOO, ce paramètre corespond a un tableau a 5 dimensions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part CALL FOO(WS(OFFSET))
La shape de FIELDS corespond a une signification logique au niveau des données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SUBROUTINE FOO(FIELDS) /*input/output*/ REAL FIELDS(MXLON,NLAT,NVER,NF,NLAYERS)
...La tout va bien dans le meilleur des mondes
Maintenant je veut appeller une autre fonction a partir de mon main,
le meme tableau en fait, mais pas toutes les données,
Code : Sélectionner tout - Visualiser dans une fenêtre à part CALL BAR(WS(OFFSET))
du point de vu logique je veut passer:
avec NLON<MXLON
Code : Sélectionner tout - Visualiser dans une fenêtre à part FIELDS(1:NLON,NLAT,NVER,NF,NLAYERS)
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:
Toutes les remarques seront les bienvenuesSections 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.
Partager