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 :

lire un tableau tridimentionnel en fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut lire un tableau tridimentionnel en fortran
    Bonjour,

    je précise que j'utilise le g77 pour la compilation de mon programme.

    Je veux lire un fichier .dat avec mon fortran avec ce genre d'instruction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    READ (9,*) (((X_Centers(i,j,k),i=1,Nbi),j=1,Nbj),k=1,Nbk) 
    READ (9,*) (((Y_Centers(i,j,k),i=1,Nbi),j=1,Nbj),k=1,Nbk)
    READ (9,*) (((Z_Centers(i,j,k),i=1,Nbi),j=1,Nbj),k=1,Nbk)
    (Chaque ligne du fichier .dat contient 5 valeurs des coordonnées séparées par un espace, la 1ère instruction donc lit Nbi*Nbj*Nbk valeurs , puis passe aux Y et ensuite aux Z)
    Or, bien sur avec g77 c'est impossible! il ne reconnait pas cette syntaxe, et quand j'essaie de faire des boucles do i=1,Nbi ..... il lit le nombre de lignes dans le fichiers et pas le nombre de valeurs!

    Quelqu'un a t'il une idée?

    Merci
    Manal

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Par défaut
    Cela marche sur mon G77, il faut bien sûr autant ou plus de données dans le fichier que de variables à remplir ! Toutes les données sont sur une seule ligne !

  3. #3
    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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Quelqu'un a t'il une idée?
    Il faudrait d'abord qu'on comprenne à quoi ressemble la structure de ton fichier. Si, par exemple, tu as Nbi=2, Nbj=3 et Nbk=4, ton fichier doit avoir (sauf erreur de ma part) la forme:
    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
    X(1,1,1) X(2,1,1) X(1,2,1) X(2,2,1) X(1,3,1)
    X(2,3,1) X(1,1,2) X(2,1,2) X(1,2,2) X(2,2,2)
    X(1,3,2) X(2,3,2) X(1,1,3) X(2,1,3) X(1,2,3)
    X(2,2,3) X(1,3,3) X(2,3,3) X(1,1,4) X(2,1,4)
    X(1,2,4) X(2,2,4) X(1,3,4) X(2,3,4)
    Y(1,1,1) Y(2,1,1) Y(1,2,1) Y(2,2,1) Y(1,3,1)
    Y(2,3,1) Y(1,1,2) Y(2,1,2) Y(1,2,2) Y(2,2,2)
    Y(1,3,2) Y(2,3,2) Y(1,1,3) Y(2,1,3) Y(1,2,3)
    Y(2,2,3) Y(1,3,3) Y(2,3,3) Y(1,1,4) Y(2,1,4)
    Y(1,2,4) Y(2,2,4) Y(1,3,4) Y(2,3,4)
    Z(1,1,1) Z(2,1,1) Z(1,2,1) Z(2,2,1) Z(1,3,1)
    Z(2,3,1) Z(1,1,2) Z(2,1,2) Z(1,2,2) Z(2,2,2)
    Z(1,3,2) Z(2,3,2) Z(1,1,3) Z(2,1,3) Z(1,2,3)
    Z(2,2,3) Z(1,3,3) Z(2,3,3) Z(1,1,4) Z(2,1,4)
    Z(1,2,4) Z(2,2,4) Z(1,3,4) Z(2,3,4)
    D'autre part, pourquoi n'utilises-tu pas de format?

    Jean-Marc Blanc

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    la forme de mon fichier est la suivante :

    X(1,1,1) X(1,1,2) X(1,1,3) X(1,1,4) X(1,2,1)
    X(1,2,2) X(1,2,3) X(1,2,4) X(1,3,1)X(1,3,2)
    etc...

    Malheureusement quand je fais l'instruction read, elle lit soit par ligne (avec un do ; exemple :
    do i=1, Nbi
    do j=1, Nbj
    do k=1, Nbk
    read (9,*) X(i,j,k)
    enddo
    enddo
    enddo
    (ça ne fait que lire la première colonne pour un total de Nbi*Nbj*Nbk lignes).

    si je fais :

    do i= 1 , (Nbi*Nbj*Nbk)/5 (c'est barbare mais comme ça je ne prends que les X et pas les Y et Z lignes)

    read(9,*) t1(i), t2(i),t3(i),t4(i),t5(i)
    enddo
    il les stocks bien dans des vecteurs, mais c'est un casse tete pour récupérer ensuite mes valeurs dans le bon ordre!

    Si vous avez une quelconque idée ou une autre methode, je prends!

    Manal

  5. #5
    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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Deux remarques:
    1. Comme je j'ai déjà écrit, tu devrais lire avec un format.
    2. Je pense que tes indices ne varient pas dans le bon ordre.


    Essaie donc, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    READ (9,'(5F10.3)') (((X_Centers(i,j,k),k=1,Nbk),j=1,Nbj),i=1,Nbi) 
    READ (9,'(5F10.3)') (((Y_Centers(i,j,k),k=1,Nbk),j=1,Nbj),i=1,Nbi)
    READ (9,'(5F10.3)') (((Z_Centers(i,j,k),k=1,Nbk),j=1,Nbj),i=1,Nbi)
    Jean-Marc Blanc

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,

    Comme je l'ai déjà précisé, la notation que vous avez mentionnée n'est pas prise en charge par g77.

    J'obtiens l'erreur suivante quand je compile :

    fmt: end of file
    apparent state : unit 9 named fort.9
    last format: (5F10.3)
    lately reading sequential formatted external IO
    aborted (core dumped)
    déjà j'ai l"impression qu'il apprécie pas le format (5F10.3), j'ai déjà essayé le read (9,*) aussi qui marche pas!

    Donc je ne sais toujours pas quoi faire pour résoudre le problème :

    voici un bout de mon fichier .dat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -8.509950340E-002 -8.420702815E-002 -8.331453800E-002 -8.242201060E-002 -8.152943850E-002
     -8.063680679E-002 -7.974408567E-002 -7.885126770E-002 -7.795833796E-002 -7.706527412E-002
     -7.617206872E-002 -7.527869940E-002 -7.438515127E-002 -7.349140197E-002 -7.259744406E-002
     -7.170326263E-002 -7.080883533E-002 -6.991414726E-002 -6.901919097E-002 -6.812393665E-002
     -6.722837687E-002 -6.633248925E-002 -6.543627381E-002 -6.453969330E-002 -6.364274770E-002
     -6.274541467E-002 -6.184768304E-002 -6.095046923E-002 -6.005198509E-002 -5.915306136E-002
     -5.825368315E-002 -5.735382810E-002 -5.645348877E-002 -5.555264652E-002 -5.465129018E-002

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    Une petite question: As-tu un retour à la ligne entre les données qui doivent aller dans les différents tableaux X, Y et Z?

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,

    Les données X,Y,Z ne sont pas séparées, je veux qu'elles se suivent les unes les autres.

    Je viens de résoudre ce problème en installant G95! Il lit bien l'instruction sans créer d'erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read (9,*) (((X_centers(i,j,k), i=1,Nbi), j=1, Nbj), k=1,Nbk)
    Seulement, il y'a un autre problème qui se pose, quand je compilais mes programmes, je le faisais avec un makefile ( ou il compile avec le F77).

    Quand je change l'option F77 par G95, il ne veut pas compiler mon programme.
    Je vous donne un bout de mon makefile (le programme que je souhaite compiler c'est kira.f90):

    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
     
    # Generated automatically from Makefile.in by configure.
     
    CGNSDIR = ..
    include $(CGNSDIR)/make.system
    include $(CGNSDIR)/make.$(SYSTEM)
     
    CGNSLIB = $(CGNSDIR)/$(LIBCGNS)
     
    COPTS  = $(CFLAGS) -I$(CGNSDIR) -I$(CGNSDIR)/$(ADFDIR)
    FOPTS  = $(FFLAGS) -I$(CGNSDIR)
    LDLIBS = $(CGNSLIB) $(HDF5LIB) $(SZIPLIB) $(ZLIBLIB)
     
     
    FALL =  cgwrite$(EXE) \
    	cgread$(EXE) \
    	essaii$(EXE) \
    	2zo_nnstru_stru$(EXE) \
    	kira$(EXE)
     
    fortran : $(FALL)
     
     
     
    #----------
     
    cgwrite$(EXE) : cgwrite.F $(CGNSLIB)
    	$(F77) $(FOPTS) $(FEOUT)$@ cgwrite.F $(LDLIBS) $(FLIBS)
    	$(STRIP) $@
     
    #----------
    kira$(EXE) : kira.f $(CGNSLIB)
    	$(F77) $(FOPTS) $(FEOUT)$@ kira.f $(LDLIBS) $(FLIBS)
    	$(STRIP) $@
     
    clean :
    	-$(RM) *.$(O)
     
    allclean : clean
    	-$(RM) $(ALL) $(FALL)
    	-$(RM) *.cgns
    Donc, comme je le disais, changer le F77 par G95, ne marche pas, je suppose que c'est question de librairie ...et de paths.

    Quelqu'un s'y connait il en makefile??

    Meri

    Manal

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Hello,

    J'ai un nouveau problème ! (ça en finit pas ...) :
    quand je compile avec G95 il me produit l'erreur suivante maintenant :

    /lib//libcygwin.a(libcmain.o).text+0xa9): undifined reference to 'Winmain@16'
    Vous savez à quoi est due cette erreur?? est ce que c'est parce que j'ai aussi installé le gfortran sur mon ordi?? ( je commence à ne plus rien comprendre, vu que tout marchait parfaitement !!!)

    Manal

Discussions similaires

  1. [TP] Comment lire un tableau d'enregistrements ?
    Par ruud101 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 12/05/2007, 00h59
  2. Tableau dynamique en Fortran
    Par fredericsorel dans le forum Fortran
    Réponses: 1
    Dernier message: 11/12/2006, 17h05
  3. Lire un tableau php
    Par hunzi dans le forum XMLRAD
    Réponses: 1
    Dernier message: 26/10/2006, 10h39
  4. Réponses: 9
    Dernier message: 02/08/2006, 12h31
  5. [Tableaux] lire un tableau de requete
    Par 18Marie dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 22h00

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