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 :

Utilisation des données d'un fichier .dat


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut Utilisation des données d'un fichier .dat
    salut tout le monde,
    ma question est la suivante, comment je dois faire pour écrire une condition initiale comme suivante:
    do j=1,10
    A(1,j)=B(j)
    enddo
    càd prendre les valeurs déjà calculés de B pour j variant de 1 à 10 sachant que les valeurs du tableau B sont enregistrés dans un fichier resultat.dat; merci pour votre aide!!

  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 !

    Si tes données ne sont pas en mémoire, mais dans un fichier, il faut ouvrir ce fichier et les lire.

    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
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut !

    Si tes données ne sont pas en mémoire, mais dans un fichier, il faut ouvrir ce fichier et les lire.

    Jean-Marc Blanc
    ok merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par driss80 Voir le message
    ok merci
    bonsoir, j'ai essayé avec ce que vous m'avez proposé et je reçois le message d'erreurs suivant:
    : N is used but never set....
    pour utiliser les fichiers déjà existants j'ai utilisé la commande:
    OPEN(20,FILE="c:\these_driss\résultats\cloop50\pump.dat",ACTION="read"),
    mais après compilation je reçois le message au dessus....et merci pour votre aide..

  5. #5
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Tu devrais fournir ton programme pour qu'on puisse t'aider.

    Le message est assez clair je crois : tu utilises une variable appelée N, mais tu ne lui donnes pas de valeur...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Sylvain Bergeron Voir le message
    Tu devrais fournir ton programme pour qu'on puisse t'aider.

    Le message est assez clair je crois : tu utilises une variable appelée N, mais tu ne lui donnes pas de valeur...
    bonjour,
    voilà ce qui m'interesse est la partie "conditions initiales" où je dois déclarer les tableaux N1T,N2T,PpT,PsplusT en fonction des tableaux stationnaires N1,N2,Pp,Psplus déjà trouvés et enregistrés sur les fichiers .dat, pour etre plus clair voici le début de mon programme...
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    program dynamic
      implicit none
      INTEGER, parameter :: Nstep=200,SIZE=1000,TSIZE=200,cst_loop=100
      REAL*8, parameter :: W0=30.D0,PsmoinsL=1.D-07,L=500.D0,Lt=100.D0
      INTEGER*4 :: i,j,NstepT
      REAL*8 :: Rco,Aco,Rfo,Acl,gamma_p
      REAL*8 :: lambda_s,sigma_ap,sigma_ep,sigma_es,sigma_as
      REAL*8 :: gamma_s,R1,R2,tau_s,h
      REAL*8 :: c,vp,vs,A21,pi,N
      REAL*8 :: xmin,xmax,Tmin,Tmax,deltaT
      REAL*8 :: resultat,Tol
      LOGICAL :: fini
      REAL*8, DIMENSION(SIZE) :: N1,N2,X,Pp
      REAL*8, DIMENSION(SIZE) :: Psplus,Psmoins
      REAL*8, DIMENSION(SIZE) :: R12,R21,W12,W21
      REAL*8, DIMENSION(TSIZE) :: T,R2_R,Pout
      REAL*8, DIMENSION(SIZE,TSIZE) :: PsplusT,PsmoinsT,PpT
      REAL*8, DIMENSION(SIZE,TSIZE) :: N1T,N2T
    
    !!!!!!!!!!!!!!!!
    
      OPEN(20,FILE="c:\these_driss\résultats\cloop50\pump.dat",ACTION="read")
      OPEN(30,FILE="c:\these_driss\résultats\cloop50\signal+.dat",ACTION="read")
     
      OPEN(30,FILE="c:\these_driss\résultats\cloop50\signal-.dat",ACTION="read")
     OPEN(50,FILE="c:\these_driss\résultats\cloop50\population_1.dat",ACTION="read")
      OPEN(60,FILE="c:\these_driss\résultats\cloop50\population_2.dat",ACTION="read")
    
    
    !!!!!!!!! initialisation des tableaux
    
      do j=1,TSIZE
       T(j)=0.D0
       Pout(j)=0.D0
       do i=1,SIZE
        PsplusT(i,j)=0.D0
        PsmoinsT(i,j)=0.D0
        N1T(i,j)=0.D0
        N2T(i,j)=0.D0
       enddo
      enddo
    
    !!!!!!!!! données
    
      Tmin=0.D0
      Tmax=300.D-09
      deltaT=deltaX/v
      NstepT=int((Tmax-Tmin)/deltaT)
      write(*,*)'NstepT=',NstepT
    
    !!!!!!!!! conditions initiales
    
      do i=1,Nstep+1
       N1T(i,1)=(N1(i)/N)*N
       N2T(i,1)=(N2(i)/N)*N
       PpT(i,1)=Pp(i)
       PsplusT(i,1)=Psplus(i)
       do j=1,NstepT+1
        PsmoinsT(i,j)=Psmoins(i)
       end do
      end do
    
    !!!!!!!!! Détérmination de R2(T)
    
      do j=Tmin,Tmax,deltaT
       R2_R=R2/300.D-09*j
       R2_R=REAL((ifft(fft(R2_R)))) !???????????
      end do
    
      do j=0,NstepT
       T(j+1)=j*deltaT
       IF (j.lt.INT(300.D-09/deltaT)) then
        R2T=R2_R(j+1)
       else if (j.lt.INT(50.D-06/deltaT)) then
        R2T=R2
       else
        R2T=0.D0
       end if
      end do
    
    !!!!!!!!! boucles de calcul
    
      do WHILE (j.lt.NstepT+1)
    
       R12=(sigma_ap*PpT(i,j)*gamma_p)/(Aco*h*vp)
       R21=(sigma_ep*PpT(i,j)*gamma_p)/(Aco*h*vp)
    
       W12=(sigma_as*(PsplusT(i,j)+PsmoinsT(i,j))*gamma_s)/(Aco*h*vs)
       W21=(sigma_es*(PsplusT(i,j)+PsmoinsT(i,j))*gamma_s)/(Aco*h*vs)
             
       N2T(i,j+1)=N2T(i,j)+((R12+W12)*N1T(i,j)-(R21+W21+A21)*N2T(i,j))*deltaT
       N1T(i,j+1)=N-N2T(i,j+1)
    
       do i=1,Nstep-1
    
        PpT(i+1,j+1)=PpT(i,j)+gamma_p*(sigma_ep*N2T(i,j+1)-sigma_ap*N1T(i,j+1))*PpT(i,j)*deltaX-alpha_p*PpT(i,j)*deltaX
    
        PsplusT(i+1,j+1)=PsplusT(i,j)+gamma_s*(sigma_es*N2T(i,j+1)-sigma_as*N1T(i,j+1))*PsplusT(i,j)*deltaX+gamma_s*N2T(i,j+1)*&
        sigma_es*2.D0*nm*h*c*c*(delta_lambda_S/lambda_S**3)*deltaX-alpha_s*PsplusT(i,j)*deltaX
    
        R12=(sigma_ap*PpT(i+1,j)*gamma_p)/(Aco*h*vp)
        R21=(sigma_ep*PpT(i+1,j)*gamma_p)/(Aco*h*vp)
    
        W12=(sigma_as*(PsplusT(i+1,j)+PsmoinsT(i+1,j))*gamma_s)/(Aco*h*vs)
        W21=(sigma_es*(PsplusT(i+1,j)+PsmoinsT(i+1,j))*gamma_s)/(Aco*h*vs)
             
        N2T(i+1,j+1)=N2T(i+1,j)+((R12+W12)*N1T(i+1,j)-(R21+W21+A21)*N2T(i+1,j))*deltaT
        N1T(i+1,j+1)=N-N2T(i+1,j+1)
    
       end do
    
       PsmoinsT(i,j+1)=R2T(j+1)*PsplusT(i,j+1)
    
       do i=Nstep,2,-1
    
        PsmoinsT(i-1,j+1)=PsmoinsT(i,j)+gamma_s*(sigma_es*N2T(i,j+1)-sigma_as*N1T(i,j+1))*PsmoinsT(i,j)*deltaX+gamma_s*N2T(i)*&
        sigma_es*2.D0*nm*h*c*c*(delta_lambda_S/lambda_S**3)*deltaX-alpha_s*Psmoins(i)*deltaX
       end do
    
      end do
    END program
    ---------------------------------------
    merci

  7. #7
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    En Fortran (et dans tout langage de programmation), un "open action=read", ce n'est pas équivalent à "Fichier, Ouvrir" comme en Word ou Excel. Ça ne fait que créer une connexion entre le programme et le fichier. Il faut ensuite le lire, via un ou des énoncés "read".

    La logique est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    open(unit, fichier,...)
    read(unit,format) liste de variable, dont N probablement
    utilisation des variables...
    En terminant : tu ouvres 2 fichiers associés au unit 30. Si tu veux que ça fonctionne, tu devras lire le premier fichier avant de faire le open sur le deuxième...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Salut
    Je ne comprends pas cette façon de déclarer les variables avec un "D0" ou un "D-7" après la partie entière du réel

    REAL*8, parameter :: W0=30.D0,PsmoinsL=1.D-07,L=500.D0,Lt=100.D0
    Pourrai-je avoir une explication sur ce que fait exactement cet ajout

    Merci

  9. #9
    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 !

    C'est ce qu'on appelle la notation scientifique:
    3.5D0 signifie 3,5
    3.5D3 signifie 3500
    3.5D-3 signifie 0,0035
    On utilise usuellement la lettre E pour les variables Real*3 et D pour les variables Real*8

    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)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Ok

    Merci


Discussions similaires

  1. utilisation des données d'un fichier dans un autre
    Par étudiant11 dans le forum Excel
    Réponses: 2
    Dernier message: 12/05/2015, 18h12
  2. [XL-2007] Utilisation de plusieurs fichiers (pour utiliser des données)
    Par Ramac dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/07/2011, 21h19
  3. Réponses: 0
    Dernier message: 07/06/2010, 16h01
  4. utiliser des données d'un autre fichier
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/11/2009, 14h45
  5. Réponses: 1
    Dernier message: 05/09/2006, 17h56

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