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 :

[Fortran 90] Ecriture dans fichier


Sujet :

Fortran

  1. #1
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut [Fortran 90] Ecriture dans fichier
    Bonjour à tous.
    Dans mon stage, je suis confronté à un problème.
    A partir d'un logiciel dont la source est disponible (en fortran), et à partir d'un fichier particulier correspondant à une fonction (nonbon.f pour info...), je dois faire écrire un calcul effectué ici dans un fichier texte quelconque pour utiliser celui-ci par la suite dans un programme en C que je code.

    Le problème est que je ne connais que trop peu le fortran (formé en 3 jours avec des docs sur Internet...).
    Voici ce que j'ai écris :
    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
     
    !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
      !******************************************************************************************
      !* INSERTION DES INSTRUCTIONS POUR L'ECRITURE DANS UN FICHIER deriv.txt DE LA MATRICE ddr *
      !******************************************************************************************
      open( unit=1, &
            file = "deriv.txt", &
            form = "formated", &
            access = "sequential", &
            action = "write", &
            status = "new", &
            iostat = ios)
      ! ---- line correspond aux lignes de la matrice ddr
      do line = 1,6
           ! ---  column correspond aux colonnes de la matrice ddr
           do column = 1,6
              write(unit=1, fmt=*) ddr(line,column),"|"
           end do
           write(unit=1, fmt=*) "newline"
      end do
     
      !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    D'après ce que j'ai lu dans d'autres posts, il faudrait modifier ma déclaration de fichier mais si je pouvais avoir l'expertise de quelqu'un, cela me rassurerait... Je me sens plus à l'aise en Ada ou en C/C++... lol

    Merci d'avance


    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Il faudrait preciser ton probleme. Le contenu du fichier n'est pas celui escompte?

  3. #3
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    en fait cela ne compile pas...
    Mon problème est en fait :

    COMMENT FAIRE ECRIRE DANS UN FICHIER AU PROGRAME FORTRAN UN CALCUL QU'IL EFFECTUE DEJA ? Ma syntaxe de compile pas... Merci déjà d'avoir répondu !
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Excuse-moi, je dois etre mal reveille mais je ne comprend strictement rien a ce que tu veux faire! Cette histoire de 'calcul qu'il effectue deja' est peu claire...

  5. #5
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Bon... Ah les questions de réveil !!!

    DAns le programme Fortran que j'utilise, toutes les fonctions sont des fichiers à part en .f => OK ?
    Ces fonctions ont déjà un rôle et renvoient chacune UN élément.
    Une de ces fonctions réalise un calcul initial (mais complexe !) avant d'en faire un second avec le résultats du premier (une matrice de dérivées secondes) avant de retourner un résultat à la fonction appelante (qui ne m'intéresse pas).

    CE QUE JE VEUX : ECRIRE CETTE MATRICE DE DERIVEES SECONDE DANS UN FICHIER ANNEXE (format .TXT par exemple.) => MTNT CA VA ? ou ?
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Evite les phrases en majuscules et en rouge, cela donne la desagreable impression que tu me gueules dessus.
    Pour ton probleme, je ne vois rien de tres complexe.
    Tu commences par ouvrir ton fichier texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    OPEN(unit=10, file='toto.txt', iostat=ios)
    IF (IOS /= 0) THEN
      WRITE(6, *) 'Could not create toto.txt'
      ! gerer l'erreur -> fin du programme (violent) ou retour d'un code
      !                       d'erreur a la fonction principale
      RETURN ios ! ou STOP
    ENDIF
    Il est inutile de preciser les autres caracteristiques, on utilise celles par default.
    Ensuite, tu ecris le contenu de ton tableau. Tu peux aussi faire le calcul a la volee.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DO j = 1, dimension_2
      DO i = 1, dimension_1
        ! ici, on peut faire le calcul de values(i, j)
        ...
        ! on ecrit la valeur dans le fichier ouvert precedemment
        WRITE(10, fmt='(1pe12.5)') values(i, j)
      ENDDO
    ENDDO
    Le fichier contiendra une valeur par ligne, en format scientifique avec 5 chiffres apres la virgule flottante. Pour lire le fichier, il suffit de remplacer WRITE() par READ().
    Enfin, on ferme le fichier.

  7. #7
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Je suis desole si tu as eu l'impression que je t'engueulais... Simpliement, le rouge, ca reveille !

    Merci pour tes precisions fort utiles... Je m'en vais de ce click essayer !

    Merci encore et sorry

    (EXCUSEZ POUR LES ACCENTS => clavier QWERTY)
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  8. #8
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Voilà, j'ai revu le code :

    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
     
     
    !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    !+ [Enter a one-line description of subroutine difbon here]
    subroutine difbon(dd,df,ddf,xij,b, &
          i3p,j3p,nbel)
       implicit double precision (a-h,o-z)
     
       !     ----- calculate second derivatives of bond-like terms -----
     
       !           dd  ... second derivative matrix
       !           df  ... first der. of v with respect to bond length
       !           ddf ... corresponding second der.
       !           xij ... bond vector x(i)-x(j) etc
       !           b   ... bond length
       !           i3p ... atom coordinate index for atom i (3*i-3)
       !           j3p ... atom coordinate for atom j
     
       !           coded by d.a.case
     
       dimension dr(6),ddr(6,6), nbel(*), istore(6,6)
       dimension dd(2),xij(2)
       ibel(m3) = nbel(m3/3+1)
     
     
       i3 = ibel(min(i3p,j3p))
       j3 = ibel(max(i3p,j3p))
     
       !     ----- first set up array dr, which holds first derivative of bond
       !           length with respect to cartesian coordinates -----
     
       do 10 k = 1,3
          dr(k) = xij(k)/b
          dr(k+3) = -dr(k)
       10 continue
     
       !     ----- now set up array ddr, which contains the second derivatives
       !           of bond length with respect to cartesians -----
     
       a = (1.0e0-dr(1)*dr(1))/b
       ddr(1,1) = a
       ddr(4,4) = a
       ddr(1,4) = -a
       a = (1.0e0-dr(2)*dr(2))/b
       ddr(2,2) = a
       ddr(5,5) = a
       ddr(2,5) = -a
       a = (1.0e0-dr(3)*dr(3))/b
       ddr(3,3) = a
       ddr(6,6) = a
       ddr(3,6) = -a
       a = -dr(1)*dr(2)/b
       ddr(1,2) = a
       ddr(4,5) = a
       ddr(1,5) = -a
       ddr(2,4) = -a
       a = -dr(1)*dr(3)/b
       ddr(1,3) = a
       ddr(4,6) = a
       ddr(1,6) = -a
       ddr(3,4) = -a
       a = -dr(2)*dr(3)/b
       ddr(2,3) = a
       ddr(5,6) = a
       ddr(2,6) = -a
       ddr(3,5) = -a
     
       !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
       !******************************************************************************************
       !* INSERTION DES INSTRUCTIONS POUR L'ECRITURE DANS UN FICHIER deriv.txt DE LA MATRICE ddr *
       !******************************************************************************************
       OPEN(unit=10, file='deriv.txt', iostat=ios)
       IF (IOS /= 0) THEN
       		WRITE(6, *) 'Could not create deriv.txt'
      		! gerer l'erreur -> fin du programme (violent) ou retour d'un code
      		!                       d'erreur a la fonction principale
       		RETURN ios ! ou STOP
       ENDIF
     
    	 DO column = 1, 6
       		DO line = 1, 6
        		! ici, on peut faire le calcul de values(i, j)
        		! on ecrit la valeur dans le fichier ouvert precedemment
        		WRITE(10, fmt='(1pe12.5)') ddr(line,column),'|'
      		ENDDO
      		write(unit=1, fmt=*) 'newline'
    	 ENDDO   
     
     
     
       !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  9. #9
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Je suis con mais personne n'avait lu le code non ?

    En effet, il manquait le "end if" et le message d'erreur IO était de la forme "write(10,*)" au lieu de "write(*,*).

    Qu'enfin voilà.

    Merci à tous vos conseils cependant.


    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
    !******************************************************************************************
       !* INSERTION DES INSTRUCTIONS POUR L'ECRITURE DQNS UN FICHIER deriv.txt DE LA MATRICE ddr *
       !******************************************************************************************
       open( unit=10,  file = "deriv.txt",  iostat = ios)
       ! ---- line correspond aux lignes de la matrice ddr
       if (IOS /= 0) then 
       			write(* , *) 'Could not create deriv.txt'  !----ERREUR RENVOYEE ICI---
       end if
       do line = 1,6
            ! ---  column correspond aux colonnes de la matrice ddr
            do column = 1,6
    	          write(unit=10, fmt='(1pe12.5)') ddr(line,column),"|"
    				end do
    				write(unit=10, fmt=*) "newline"
       end do
     
       !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Si si, on avait bien lu le code. Mais les erreurs que tu as trouvées n'étaient pas dans le code de ton post... (cf 02/06/2006 09h09)

Discussions similaires

  1. Ecriture dans fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2006, 13h42
  2. Obtenir les droits d'ecriture dans fichiers et base de registre
    Par Sunchaser dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 17/07/2006, 11h33
  3. [VB.NET]Ecriture dans fichier
    Par mhamdi45 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/07/2006, 10h20
  4. ecriture dans fichier par ma methode print
    Par makohsarah dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 17/05/2006, 19h26
  5. Écriture dans fichier PDF
    Par clairette dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/05/2006, 16h52

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