IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

un common dans un module ?


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut un common dans un module ?
    Bonjour

    Ma question parait bizarre mais pourtant je suis tombé sur le bout de code suivant dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
      integer, parameter    :: mdin_ctrl_int_cnt = 48
     
      integer                       imin, nmropt, ntx, irest, ntrx, ntxo, &
                                    ntpr, ntave, ntwr, iwrap, ntwx, ntwv, &
                                    ntwe, ioutfm, ntwprt, ntf, ntb, nsnb, &
                                    ipol, ibelly, ntr, maxcyc, ncyc, ntmin, &
                                    nstlim, nscm, nrespa, ntt, ig, vrand, ntp, &
                                    ntc, jfastw, ivcap, igb, alpb, rbornstat, &
                                    gbsa, nrespai, ndfmin, jar, &
                                    no_intermolecular_bonds, ene_avg_sampling, &
                                    loadbal_verbose
      character(4)                  ihwtnm(2), iowtnm, iwtnm
     
      common / mdin_ctrl_int /      imin, nmropt, ntx, irest, ntrx, ntxo, &
                                    ntpr, ntave, ntwr, iwrap, ntwx, ntwv, &
                                    ntwe, ioutfm, ntwprt, ntf, ntb, nsnb, &
                                    ipol, ibelly, ntr, maxcyc, ncyc, ntmin, &
                                    nstlim, nscm, nrespa, ntt, ig, vrand, ntp, &
                                    ntc, jfastw, ivcap, igb, alpb, rbornstat, &
                                    gbsa, nrespai, ndfmin, jar, & 
                                    no_intermolecular_bonds, ene_avg_sampling, &
                                    loadbal_verbose, &
                                    ihwtnm, iowtnm, iwtnm
     
      save  :: / mdin_ctrl_int /
    C'est un bout de code d'un module d'un gros programme. J'ai du mal à comprendre l'utilité de ce common étant donné qu'on est dans un module et que ce common n'est réutilisé nulle part ailleurs dans l'ensemble du code.

    Est ce que le but du common est de pouvoir utiliser save pour figer les variables à leurs valeurs dans ce module là ?

    Merci de votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par Ladgalen Voir le message
    ...
    Est ce que le but du common est de pouvoir utiliser save pour figer les variables à leurs valeurs dans ce module là ?...
    Si c'est la raison, c'est une stratégie inutile puisqu'il suffisait de faire un « use » du module dans le programme principal pour que les variables ne perdent jamais leur valeur.

    L'autre possibilité aurait pu être d'utiliser un common pour organiser la mémoire et naviguer cette mémoire vectoriellement, mais ça semble peu probable puisqu'il n'y a pas de vecteur dans le common (sauf la variable caractère presqu'à la fin).

    En fait, je crois que c'est un programme classique Fortran 77 avec common, mais sans module, qui a été converti à Fortran 90 avec module en changeant le moins de chose possible... Si tu enlève le common et le save, et que tu use le module dans le programme principal, ça devrait donner le même résultat...

  3. #3
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    En fouillant un peu j'ai vu que plus loin dans une subroutine du module la premiere variable du common et le nombre de variable dans le common sont en arguments d'une subroutine qui fait du broadcast pour l'utilisation parrallele du code.

    L'utilisation du common aurait alors pour but de transférer l'ensemble du common en limitant le nombre d'arguments. Grace a la premiére variable et du nombre de variable comme on connait le type on peu trouver l'adresse de toutes les autres variables du common.

    C'est une astuce pour simplifier l'ecriture (pas la lecture). Mais comme tu le dis cette astuce a certainement été employée pour éviter de reécrire du code. Un tableau d'entiet ou une structure aurait peut être été plus lisible et plus dzns la fibre Fortran90.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par Ladgalen Voir le message
    L'utilisation du common aurait alors pour but de transférer l'ensemble du common en limitant le nombre d'arguments. Grace a la premiére variable et du nombre de variable comme on connait le type on peu trouver l'adresse de toutes les autres variables du common.
    Bien que ça me semblait peu probable, c'est donc ma 2ième supposition qui était la bonne...

Discussions similaires

  1. statut d'une table dans un module de donnee
    Par kewine dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/11/2005, 03h56
  2. Comparaison de code dans plusieurs modules
    Par jbaudin dans le forum Access
    Réponses: 2
    Dernier message: 03/10/2005, 11h47
  3. Fonction retournant un recordset dans un module
    Par suspiria dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2005, 15h46
  4. violation d'adresse dans le module 'bdert70.bpl'
    Par Magnus dans le forum Bases de données
    Réponses: 6
    Dernier message: 19/08/2005, 13h34
  5. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo