mon programme est le suivant:
Module x
utilisation mpi x comprend module mpi
aucun implicite
...
contientpoignée de MPI_COMM_WORLD perd de sa valeur dans un sous-programme
subroutine do_something_with_mpicommworld
!use mpi !uncommenting this makes a difference (****)
call MPI_...(MPI_COMM_WORLD,...,ierr)
end subroutine
..
module de fin x
programme principal
utilisation mpi utilisation x
MPI_Init (...)
appel do_something_with_mpicommworld principal programme de fin
Ce programme échoue avec l'erreur suivante: MPI_Cart_create (199): communication non valide, à moins la ligne marquée (* *) est décommenté.
Maintenant, peut-être ma connaissance de Fortran 90 est incomplète, mais je pensais que si vous avez une clause d'utilisation dans la définition du module (voir mon module x), quelle que soit la variable globale existe dans le module inclus (en cas de x : MPI_COMM_WORLD à partir du module include mpi) aura la même valeur dans l'un des sous-programmes contenus (do_something_with_mpicommworld) même si ces sous-programmes n'incluent pas explicitement le module (par exemple quand (* *) est mis en commentaire). Ou, pour le dire simplement, si vous incluez un module dans un autre module, les sous-routines contenues dans le second module auront accès aux globales dans le module inclus sans instruction spéciale use. Lorsque j'ai exécuté mon programme, j'ai vu un comportement différent. Le sous-contenu de x était en train de créer des erreurs à moins qu'il n'ait l'instruction 'use mpi'.
Alors, quel est le problème, ai-je une idée fausse au sujet de Fortran 90, ou y at-il quelque chose de spécial au sujet du module MPI qui induit un tel comportement?
Pouvez-vous envoyer le code, plutôt que d'un condensé de votre code. Le diable est si souvent dans le détail. –