Bonjour à toutes et à tous,
Je travaille sur un code en Fortran 90 issu d'un code en Fortran 77. Je n'avais pas eu à utiliser de propriétés spécifiques du Fortran 90 jusqu'alors car j'ai gardé la même structure de gestion mémoire initialement utilisée en 77 :
On définit dans le programme principal un unique tableau T à une dimension. On appelle ensuite une subroutine avec en argument les (T(1),T(n1),....,T(ni),....) qui seront l'ensemble des tableaux utilisés par la suite. les ni sont des entiers correspondant à la taille des tableaux. Par exemple pour si le tableau 1 est de dimension 2 et de taille taille M*N (connue) alors n1=M*N et ainsi de suite. Cette première subroutine appelée contenant tous les tableaux sera une sorte de nouveau programme principal à partir duquel on travaillera. Ainsi toute la mémoire nécessaire au programme est allouée dès le début, et il n'y a aucun conflit.
Cependant, mon programme est devenu beaucoup plus conséquent que le programme initial et possède des subroutines imbriquées sur 5 niveaux. Il y a une trentaine de tableaux à appeler, sans compter les variables simples. L'appel des subroutines est donc devenu extrêmement lourd et source d'erreurs quand je dois ajouter ou retirer des tableaux lors de la modification de ce programme. J'aimerais donc profiter de Fortran 95 pour réorganiser mon programme de manière plus "intelligente" compte tenu des nouveaux outils à ma disposition. J'ai épluché tous les cours de l'IDRIS (qui m'ont appris beaucoup de chose mais qui sont un peu compliqués à mon niveau pour ce qui m'intéresse) mais je n'arrive pas à trouver la solution qui m'aidera. J'ai saisi le principe de l'allocation dynamique dans les grandes lignes mais, dans mon programme, seules trois variables (m,n,k) lues en données d'entrées utilisateurs suffisent à définir toutes les dimensions de mes tableaux, donc je ne suis pas sûr que ce soit la bonne méthode.
Pourriez-vous m'aiguiller sur cet aspect où me proposer d'autres solutions pour réorganiser ce programme et avoir une gestion de mémoire plus appropriée afin (entre autres) de ne plus avoir à mettre tous les arguments en appel dans les subroutines s'il-vous-plait ?
Merci d'avance !
Mathieu
Partager