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 avec l'instruction WRITE


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut Problème avec l'instruction WRITE
    Bonjour à tous,

    J'essaie de programmer un problème d'hydraulique en fortran 95. Cependant, je suis débutant et je rencontre certaines difficultés. J'ai trouvé des exemples de programme fortran (p216, 217) qui donnaient le code pour ce problème, cependant c'est en fortran 77 et j'ai quelques difficultés à le retranscrire en fortran 95. Surtout au niveau des go to [étiquette]. De plus je néglige les pertes de charge donc il y a pas mal de variable qui ne m’intéresse pas (CC, ZK, C1, C2, R, QI (initial flow), C3, CC3, C4).

    Ce problème est sur le coup de bélier dans une canalisation régulée par une vanne à son extrémité.

    Cette canalisation reçoit par le biais d'un réservoir un débit initial Q0 et il règne dans la canalisation une hauteur piézométrique H0. J'ai négligé les pertes de charge pour simplifier le problème.

    J'utilise la méthode des caractéristiques pour résoudre ce problème.

    Lorsque je compile ce code, il y a des erreurs qui apparaissent au niveau des instructions write que je n'arrive pas à résoudre.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    !Exercice sur le coup de bélier
    !Ce programme modélise un réservoir par lequel s'échappe un débit ini Q0, 
    !dans un tuyaux régulé par une vanne à son extrémité. 
    !Pour ce premier modèle nous ne prenons pas en comtpe les pertes de charges, ainsi que les fluctuations. 
    !du réservoir.
     
    program Vanne_Reservoir
     
    !Déclaration des variables
    implicit none
    real, dimension(11) :: Hp, Qp, H, Q
    real				:: a, Din, Pi, B, K, g, L, E, ep, epsilon, rho, S, D 
    real				:: H0, Q0, Cp, Cm, Hr
    real				:: t, Tmax, dt, th, Tc, mu, Tau, dtv
    logical				:: fini
    integer				:: Ns, N, i
     
    ! Données initiales
     
    D = 100.*1e-3		!diametre de la section de la conduite
    ep = 5.*1e-3		!épaisseur de la conduite
    E = 2.2*1e11		!module de young du matériau de la conduite
    epsilon = 2.*1e9	!déformation de la conduite
    rho = 1.e3			!masse volumique de l'eau
    g = 9.81			!gravité terrestre
    Pi = 3.14159
    Q0 = 0.015			!en m^3/s	
    H0 = 50				!en m.CE
    Tc = 2.1			!tau = (1 - t/tc)^Em
    N = 5
     
    ! Calcul des grandeurs initiales
     
    a = 1/sqrt(rho*(1/epsilon + Din/(E*ep)))	!Célérité de l'onde
    S = Pi*D**2/4								!Section
    NS = N + 1
    B = a/(g*S)
    dt = L/(a*float(N))
    t = 0
     
    ! Trouver les conditions d'écoulement stationnaire 
    ! et sauvegarder les variables initiales
     
     do i = 1, NS
       H(i) = H0
       Q(i) = Q0
     end do
     
    write(*, FMT='a, L, Din=',2F8.1,2F8.4/' Hr, H0, Q0=',2F8.2,F8.3/2'Tc, &
    		& E=',3F8.3/' G, Tmax,dt,B=',F8.3,F8.1,2F8.3/' N =', & 
    		& 32I4//' Heads and discharges along the pipe'//' Time X/L= 40.	.2	.4	.6	.8	1.	TAU') &
    		a, L, Din, Hr, H(NS), Q0, Tc, E, g, Tmax, dt, B, N
     
    write(6, FMT=1H0,F7.3,5H 'H=',6F8.2,F7.3/10X,3H 'Q=',6F8.3) t, (H(i),i=1,NS),Tau, (Q(i), i=1, NS)
     
    t = t + dt
    fini = .false.
    	do while (t.GT.Tmax)
        ! Calcul des noeuds intérieur
        	do i = 2, N
            	Cp = H(i-1) + B*Q(i-1)
            	Cm = H(i+1) - B*Q(i+1)
            	Hp(i) = .5*(Cp + Cm)
            	Qp(i) = (Cp - Hp(i))/B
            end do
        !Condition limite
        	Hp(1) = H0
            Cm = H(2) - B*Q(2)
            Qp(1) = (Hp(1)-Cm)/B
            Cp = H(N) + B*Q(N) !valve at end of pipe
           if(t.LT.Tc) then
              dtv = Tc/10
              i = ifix(t/dtv)+1
              Th = (t - (i-1)*dtv)/dtv
              Hp(NS) = Cp - B*Qp(NS)
            else
              Qp(NS) = 0
              Hp(NS) = Cp
            end if
            Do i = 1, NS
              Q(i) = Qp(i)
              H(i) = Hp(i)
            end do
     end do
     
    end program Vanne_Reservoir
    Je vous remercie par avance de l'aide que vous pourrait m'apporter pour la résolution de ce problème.

    Yu Cloud

  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
    Sans analyser très en détail, je vois 2 problèmes :
    • Un format doit commencer par ( et se terminer par ), par exemple fmt='(a,i0,....)'
    • Les textes dans un format doivent être entre guillemets. Par exemple : fmt='("valeur=",f0.4,"; Aussi=",i0)') Valeur,Aussi

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Par défaut
    Bonsoir Yu Cloud,
    Il manque essentiellement des virgules un peu partout et il y a des & en trop. Voici un exemple quelque peu retouché.
    Attention la variable L n'est pas initialisée dans ton exemple.
    Dernière remarque, attention l'affichage des exponentiels prend de la place.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    write(*,FMT=40),a,L,Din,Hr,H(NS),Q0,Tc, REAL(E),g, Tmax, dt, B,N
    40 FORMAT('a, L, Din=',1F8.1,2F8.4,//,'Hr, H0, Q0=',1F8.2,2F8.3,//, &
              'TC, E=',1F8.3,1F12.3//,'G, Tmax,dt,B=',1F8.3,1F8.1,2F8.3,//, &
              'N=',I4,//,'Heads and discharges along the pipe Time X/L= 40.	.2	.4	.6	.8	1.	TAU')
    Pour finir si tu veux directement déclarer le format d'affichage sans renvois, regardes la remarque de Sylvain.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut
    Merci pour votre aide mon programme fonctionne maintenant !

    J'ai encore quelques problèmes d'affichage (ou plutôt de mise en page) que j'essaie de résoudre mais cela n'empêche plus l'exécution du programme.

Discussions similaires

  1. [aide]probléme avec l'instruction group by
    Par diden138 dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/05/2007, 07h09
  2. Problème avec une instruction VBA
    Par Jpeg69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2007, 12h58
  3. [PHP-JS] problème avec mon document.write
    Par kevinf dans le forum Langage
    Réponses: 18
    Dernier message: 06/10/2006, 06h27
  4. Problème avec l'instruction IN : 16 bits retournés
    Par HadiNET dans le forum Assembleur
    Réponses: 4
    Dernier message: 11/02/2006, 17h43
  5. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56

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