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 :

Problème en Fotran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut Problème en Fotran
    Bonjour,
    Je travaille sur un code en fortran qui permet de calculer les concentrations de NO, NO2 et HNO2. Il calcule l'évolution de ces concentrations en fonction
    de l'épaisseur du lit catalytique que j'utilise et également la consommation de la fraction de sites catalytiques. La boucle est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dowhile (i<=n)
            i=i+1  
    dXNO(i)=dz*(-G*k1*XNO(i)*XNO2(i)*XH2O+G*k1*XHNO2(i)**2)      
    dXNO2(i)=dz*(-G*k1*XNO(i)*XNO2(i)*XH2O+G*k1*XHNO2(i)**2)
    dXHNO2(i)=dz*G*(k1*XNO(i)*XNO2(i)*XH2O
         .          +k4*XH2O**2*(1-frac(i)))/(k2+k3*frac(i))     
    dfrac(i)=dt*(-k4*(1-frac(i))*XH2O**2+k3*frac(i)*XHNO2(i)**2)
    frac(i)=DMAX1(frac(i)-dt*dfrac(i),0.0D+00)
           XNO2(i+1)=XNO2(i)+dXNO2(i)
           XNO(i+1)=XNO(i)+dXNO(i)
           XHNO2(i+1)=XHNO2(i)+dXHNO2(i)
    enddo
    Le problème est qu'il ne tourne pas, il m'affiche le message suivant :
    parse error, unexpected end of statement, expecting EQV, or NEQv or ')'
    sur l'équation de dfrac(i).
    J'ai vérifié s'il manque une parenthèse ou autre, il y a rien qui manque et je ne sais pas pourquoi il me sort ce message d'erreur.

    Pourriez vous m'aider?

    Merci d'avance pour votre aide.

  2. #2
    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
    Bonjour

    Petite remarque n'oublis pas les balise code (le # en haut) ça rend ton code plus lisible.

    Tu est en fortran 90 ou 77 ? La ligne juste avant celle de dfrac(i), ligne 5 et 6 semble coupée avec un . pour la commencer. Si tu es en Fortran 90 il faut enlever ce point et metre un & à la fin de la ligne précédente si tu veux la couper. Si tu est en F77, je ne suis pas sur que le . en colonne 6 pour annoncer une suite de ligne soit autorisé essaye avec un 1 ou une *.

    Bon courage

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    Merci pour votre réponse, mais j'ai vérifié, ça ne vient pas de ce point .

  4. #4
    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
    Bonjour

    Le code suivant compile et s'éxécute sans erreur ... voilà ce que j'ai fait par rapport au tiens (mis à part la déclaration des variables).

    1) dowhile -> do while (je pense qu'il faut un espace)

    2) Tu gères mal la condition d'arret de ta boucle. Si tu fais while( i <= n ) il faut que tes tableaux soient de dimension n+2. En effet, pour i = n tu fais une nouvelle itération dans ta boucle qui commence par i=i+1 donc tu fais la dernière itération avec i = n+1. Donc si tes tableaux sont de dimensions n ça va coincer. Ensuite dans ta boucle tu utilises l'éléments i+1, donc encore une fois si tes tableaux sont de dimensions n il faut que tu t'arretes à i = n-1 ! Ceci dis je ne sais pas exactement ce que tu fais. Visiblement tu intégère un schéma cinétique mais j'en sais pas plus ...

    3) La ligne qui est coupée, comme ce que je t'ai donné est en fortran 90 j'ai mis un & à la fin de la ligne précédente.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    program tt
     
      implicit none
      integer, parameter             :: n = 100
      integer                        :: i
      double precision               :: k1, k2, k3, K4
      double precision               :: dt, dz, G
      double precision               :: XH2O
      double precision, dimension(n) :: XNO, XNO2, XHNO2
      double precision, dimension(n) :: dXNO, dXNO2, dXHNO2
      double precision, dimension(n) :: dfrac, frac
     
      i = 0
      dz = 0.1d0
     
      XNO(:)   = 0.5d0
      XNO2(:)  = 0.3d0
      XHNO2(:) = 0.1d0
      XH2O     = 0.2d0
     
      k1 = 1.d0
      k2 = 1.d0
      k3 = 1.d0
      k4 = 1.d0
     
      G = 1.d0
     
      dt = 0.001d0
     
      do while (i<n-1)
        i=i+1  
        dXNO(i)=dz*(-G*k1*XNO(i)*XNO2(i)*XH2O+G*k1*XHNO2(i)**2)      
        dXNO2(i)=dz*(-G*k1*XNO(i)*XNO2(i)*XH2O+G*k1*XHNO2(i)**2)
        dXHNO2(i)=dz*G*(k1*XNO(i)*XNO2(i)*XH2O &
                +k4*XH2O**2*(1-frac(i)))/(k2+k3*frac(i))     
        dfrac(i)=dt*(-k4*(1-frac(i))*XH2O**2+k3*frac(i)*XHNO2(i)**2)
        frac(i)=DMAX1(frac(i)-dt*dfrac(i),0.0D+00)
        XNO2(i+1)=XNO2(i)+dXNO2(i)
        XNO(i+1)=XNO(i)+dXNO(i)
        XHNO2(i+1)=XHNO2(i)+dXHNO2(i)
      enddo
     
    end program tt

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    Bonjour,

    merci pour votre réponse.
    Je viens d'appliquer ce que m'avez dit et j'ai toujours le même problème.

  6. #6
    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
    Là c'est étonnant ... peux tu mettre la ligne complete de compilation que tu utilises et le message d'erreur ?

    Essaye aussi en compilant uniquement ce que je t'ai donné pour voir.

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 15h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 12h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 22h11

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