Je suis nouveau à Fortran et j'essaie de comprendre si ce qui suit est possible. Mon idée de structurer le programme est de déclarer la précision et les types de variables dans un module. Utilisez ensuite ces variables sans déclarer à nouveau le type dans d'autres modules ou dans le programme principal.Modules de liaison Fortran pour les types de variables de précision et globales
module pre
implicit none
INTEGER, PARAMETER :: sp=SELECTED_REAL_KIND(6,37)
INTEGER, PARAMETER :: dp=SELECTED_REAL_KIND(15,307)
INTEGER, PARAMETER :: qp=SELECTED_REAL_KIND(33,4931)
REAL(dp), PARAMETER :: pi = 4.*ATAN(1.)
REAL(dp) :: H
REAL(dp) :: M
REAL(dp) :: KR
end module pre
Maintenant, je veux utiliser toutes les variables dans un autre module qui contient une ou plusieurs fonctions, telles que:
module hon
use pre
implicit none
contains
function KE(H,M) result(KR)
KR = 2*PI/H/M
end function KE
end module hon
Puis-je utiliser gfortran dans cet ordre:
gfortran -c mod_pre.f90
gfortran -c mod_hon.f90
Comme 'module pre' fait partie de 'module hon' je compile dans l'ordre, mais gfortran montre une erreur.
Avec le code ci-dessus, je comprends que les types de variables et les paramètres doivent avoir été inclus par USE; Mais le message que je reçois de gfortran est qu'aucune de mes variables n'a le type IMPLICIT lorsque j'essaie de compiler 'module hon'.
Quelqu'un pourrait-il clarifier le problème ou suggérer une solution? Je voudrais éviter que mes variables soient dispersées dans plusieurs modules.
Merci!
Bonjour francescalus, s'il te plaît, fais attention à moi. Ensuite, il n'est pas utile de déclarer les types de variables et d'utiliser ce module dans d'autres? Par exemple, le résultat 'kr' sera toujours un réel (dp) et aussi le reste des variables d'entrée. Cela signifierait que je dois déclarer «H» ou n'importe quel autre dans chaque module au lieu de simplement le définir une fois? – musi
Dans votre exemple, sp, dp et qp peuvent être utilisés comme suit: 'real (kind = dp) :: ke' pour définir le type de fonction. La variable * kr comme mention de @francescalus est redéfinie comme étant locale. Le champ 'kr' sera utilisé si aucun' kr' local n'est défini. –
Bonjour, merci pour vos réponses, j'avais travaillé autour de la solution et le seul moyen que j'ai trouvé est de redéfinir les variables à l'intérieur de la fonction. Je fais maintenant face à un autre problème concernant la fonction comme les états de gfortran que je transmets des variables REAL (4) à REAL (8). Je trouve que c'est un peu difficile de commencer. Y a-t-il un moyen de surmonter ce problème? – musi