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 :

Quelle action fait : if(s-0.0) 595,595,596


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Quelle action fait : if(s-0.0) 595,595,596
    Bonjour, je suis en train de modifier un programme en Fortran mais un if me pose des problèmes. Je ne sais pas si c'est un true, si cela doit faire 0, etc.
    J'apprécierais énormément de l'aide!

    il s'agit de la ligne if(s-0.0) 595,595,596 dans la partie suivante :
    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
    subroutine tempave(at, sg, ta)
          dimension at(20),sg(20)
          dimension ta(20,20)
          real s
    *
    *     calculate the average temperaure to be used for each path
    *     using a pressure weighted average Dp=6sigma(1-sigma)
    *
          do 600 i=1,19
            do 599 j=i,19
             ta(i,j)=0.0
             s=0.0
              do 590 k=i,j
               ta(i,j)=ta(i,j)+6.0*sg(k)*(1-sg(k))*at(k)
               s=s+6.0*sg(k)*(1-sg(k))
    590       continue
               if(s-0.0) 595,595,596
    595         ta(i,j)=at(i)
                goto 597
    596         ta(i,j)=ta(i,j)/s
    597         ta(j,i)=ta(i,j)
    599     continue
    600   continue
          return
          end
    Merci

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Quelle horreur ! C'est ce qu'on appelle le if arithmétique, par opposition au if logique que tu connais certainement. C'est un archaïsme qui reste des premières versions du Fortran. Si le contenu de la parenthèse est négatif ou nul, le programme saute à l'étiquette 595, s'il est positif, il va à 596. En outre, je ne vois vraiment pas à quoi sert le -0.0 (c'est peut-être un reste d'autre-chose). De nos jours, on écrirait plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            if(s.le.0.0) then
              ta(i,j)=at(i)
            else
              ta(i,j)=ta(i,j)/s
            end if
            ta(j,i)=ta(i,j)
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    merci énormément. Tout le programme avec lequel je travail fait ce genre d'archaïsme très difficile à comprendre pour moi !

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Je pense que tu aurais tout avantage à "moderniser" le code dont tu as hérité. Au début, ça te coûtera un peu de temps, mais ensuite tu comprendras bien mieux ce que tu fais. Je l'ai fait, à titre d'exemple, pour le petit bout de code qui accompagnait ton message.

    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
    27
    28
    29
    30
     
          subroutine tempave(at, sg, ta)
          implicit none
          real*8 at(20),sg(20)
          real*8 ta(20,20)
          real*8 s
          integer i,j,k
    *
    *     calculate the average temperaure to be used for each path
    *     using a pressure weighted average Dp=6sigma(1-sigma)
    *
          do i=1,19
            do j=i,19
              ta(i,j)=0.d0
              s=0.d0
              do k=i,j
                ta(i,j)=ta(i,j)+6.d0*sg(k)*(1-sg(k))*at(k)
                s=s+6.d0*sg(k)*(1.d0-sg(k))
              end do
              if(s.le.0.d0) then
                ta(i,j)=at(i)
              else
                ta(i,j)=ta(i,j)/s
              end if
              ta(j,i)=ta(i,j)
            end do
          end do
    C
          return
          end
    Remarque que:
    • j'ai mis toutes les variables réelles en double précision: le codage sur 4 octets se justifiait à l'époque où la mémoire était très restreinte et où les processeurs ne possédaient pas d'instructions pour les opérations sur 8 octets et que celles-ci devaient être effectuées par dessous-programmes cachés;
    • pour faciliter la mise au point des programmes, il faut être très rigoureux avec l'indentation: pour ma part, j'indente de 2 positions supplémentaires pour chaque niveau;
    • mets toujours l'instruction implicit none au début pour éviter d'utiliser des variables non déclarées qui ne sont pas du type voulu.


    Certain feront peut-être remarquer que mon code est presque aussi archaïque que le tien, car c'est du pur Fortran 77; les nouvelles versions (90, 95 et 2003) comportent une masse de nouveautés, mais je pense qu'il faut y aller par étapes.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Merci pour ces bons conseils !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/04/2011, 18h30
  2. quelle action supplémentaire pour mon site
    Par florent00760 dans le forum Mon site
    Réponses: 0
    Dernier message: 21/06/2008, 23h46
  3. Réponses: 1
    Dernier message: 14/01/2008, 18h48
  4. Récupérer toutes les actions faites dans Oracle ?
    Par M Roncheau dans le forum Oracle
    Réponses: 3
    Dernier message: 16/11/2007, 16h16
  5. Quelle "ACTION" définir pour un formulaire ?
    Par bob.seki dans le forum Langage
    Réponses: 31
    Dernier message: 07/06/2007, 12h08

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