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 :

Inversion de tableau avec fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut Inversion de tableau avec fortran
    Bonjour à tous

    J'ai un problème avec fortran. En fait j'ai un logiciel qui calcule des valeurs saturation (So) a chaque noeud et génère un fichier résultat avec les coordonnées x,z,So.
    (Voir ci dessous la forme )
    le nombre total de noeuds : nn=nx*ny
    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
     
    variables="x","z","So"	
    ZONE T=" 0.300E+01", I =	41,K =    41, F=point
    0.00000E+00	0.30000E+01	0.50000E-01	
    0.75000E-01	0.30000E+01	0.50000E-01	
    0.15000E+00	0.30000E+01	0.50000E-01	
    0.22500E+00	0.30000E+01	0.22880E+00	
    0.30000E+00	0.30000E+01	0.21850E-01	
    0.37500E+00	0.30000E+01	0.19080E-01	
    0.45000E+00	0.30000E+01	0.40080E-01	
    ....
    0.00000E+00	0.29250E+01	0.50000E-01
    0.75000E-01	0.29250E+01	0.50000E-01
    0.15000E+00	0.29250E+01	0.50000E-01
    0.22500E+00	0.29250E+01	0.50000E-01
    0.30000E+00	0.29250E+01	0.50000E-01
    0.37500E+00	0.29250E+01	0.50000E-01
    0.45000E+00	0.29250E+01	0.50000E-01
    0.52500E+00	0.29250E+01	0.50000E-01
    ....
    Sur le fichier, les valeurs sont imprimés à partir de z=3 m pour l'ensemble des noeuds en i. Ensuite, on passe a la valeur z=2.925 et on imprime les valeurs pour l'ensemble des noeuds en i. Et ainsi de suite jusqu'a z=0.

    De cette façon le noeud #1 a pour coordonnées (x=0,z=3), le noeud #2 (x=0.075,z=3), le noeud #3 (x=0.15,z=3).....


    Le problème est que je dois utiliser ces valeurs dans un autre logiciel qui lui n'utilise pas la meme répartition. C'est à dire que le noeud #1 a pour coordonnées (x=0, z=0).
    Il faudrait que je transforme le fichier de sorte que les noeuds correspondent, c'est a dire que le noeud #1 du logiciel 1 soit le noeud nn (soit nx=ny)

    En resumé le logiciel 1 produit les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    variables="x","z","So"	
    ZONE T=" 0.300E+01", I =	41,K =    41, F=point
    0.00000E+00	0.30000E+01	noeud1	
    0.75000E-01	0.30000E+01	noeud2
    alors que le logiciel 2 utilise les valeurs du logiciel 1 en suivant ce schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    variables="x","z","So"	
    ZONE T=" 0.300E+01", I =	41,K =    41, F=point
    0.00000E+00	0.0000E+00	noeud1	
    0.75000E-01	0.0000E+00	noeud2
    Y'aurait il un moyen de faire le tri ou de classifier les valeurs produites par le logiciel , de facon a ce que ce soit compatible.

    Merci d'avance et bonne fin de journée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    En fait j'ajoute juste une petite précision

    J'aurais juste besoin de modifier la structure du fichier résultat suivant
    (avec Fortran, Matlab ou autre) de sorte qu'il soit lu correctement par le second logiciel


    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
     
    variables="x","z","So"    
    ZONE T=" 0.300E+01", I =    41,K =    41, F=point
    0.00000E+00    0.30000E+01    0.50000E-01    
    0.75000E-01    0.30000E+01    0.50000E-01    
    0.15000E+00    0.30000E+01    0.50000E-01    
    0.22500E+00    0.30000E+01    0.22880E+00    
    0.30000E+00    0.30000E+01    0.21850E-01    
    0.37500E+00    0.30000E+01    0.19080E-01    
    0.45000E+00    0.30000E+01    0.40080E-01    
    ....
    0.00000E+00    0.29250E+01    0.50000E-01
    0.75000E-01    0.29250E+01    0.50000E-01
    0.15000E+00    0.29250E+01    0.50000E-01
    0.22500E+00    0.29250E+01    0.50000E-01
    0.30000E+00    0.29250E+01    0.50000E-01
    0.37500E+00    0.29250E+01    0.50000E-01
    0.45000E+00    0.29250E+01    0.50000E-01
    0.52500E+00    0.29250E+01    0.50000E-01
    ....
    J'aimerais avoir quelquechose qui ressemble a


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    variables="x","z","So"    
    ZONE T=" 0.300E+01", I =    41,K =    41, F=point
    0.00000E+00    0.00000E+0    0.640000E-01    
    0.75000E-01    0.00000E+0    0.540000E-01    
    0.15000E+00    0.00000E+0    0.50000E-01    
    0.22500E+00    0.00000E+00    0.224880E+00

    Auriez vous une idée de comment faire ?
    J'ai ajouté le fichier en pièce jointe
    il y a 41 noeuds en x , 41 noeuds en y
    et plusieurs zone , qui correspondent a des pas de temps différents

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  3. #3
    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
    Ce que je comprends :
    • Tu as un programme Fortran qui produit un tableau.
    • Le tableau doit être lu par un programme (MatLab?), mais l'ordre des cellules n'est pas le bon
    • Tu peux modifier le programme Fortran
    • La liste des cellules semble ordonnée, mais en ordre descendant plutôt qu'ascendant.


    À moins qu'il manque une contrainte dans la description du problème, tu pourrais simplement inverser les bornes de la boucle sur "z" (ex: do iz = nz, 1, -1) lors de l'impression.

    Les résultats sont-ils bien dans un tableau ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Ouais exactement il faut imprimer seulement les valeurs de z et S en valeur descendante. Le problème c'est que je fais une opération entre
    Voila 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
     
    Case 2D
          Implicit integer*4(i-n)
          Parameter(maxn=2500000)
     
          Real*4 nmoleF(maxn),x(maxn), y(maxn), z(maxn)
          real*4 So(maxn), Sw(maxn), n_oil(maxn), xmoln(maxn,3)
          real*4 Mn, Ve, por, ncomp, fraction_mol(3)
          integer itzone
     
     
          Character*10 title1,title2
     
          ncomp=3
    c     nn=nx*ny*nz              !I = 41, J = 1, K = 41,
          por=0.33
          Mn=10.0e+3
          Ve = 0.000025
     
          open(6,file='comp2D.lst')
          open(unit=90, file ='plot.out',status='unknown',iostat=ierr55)
          open(unit=91, file ='saturation.out')
     
          Read(90,1) title1
       1  format(a)
     
          write(91,8213)
     8213 format('variables="x","z","So","xmole1","xmole2","xmole3"')
     
     
     
          do jj=1,999
     
          Read(90,3,end=888) time,nx,nz
      3   format(11x,f10.0,6x,i3,6x,i4)
          nn=nx*nz              !I = 41, J = 5, K = 41,
     
          write(6,222) time,nx,nz,nn
     222  format(/10x,'check: time,nx,nz,nn',f10.2,3i5)
     
          do k=1,nz
          do i=1,nx
          nd = (k-1)*nx + i
          read(90,*) x(nd),z(nd), nmoleF(nd), So(nd), Sw(nd)
          end do
          end do
     
     
          fraction_mol(1)=0.07767
          fraction_mol(2)= 0.43945
          fraction_mol(3)=0.48288
     
          do i=1,nn
          n_oil(i)=So(i)*por*Mn*Ve
          do k=1,ncomp
            xmoln(i,k)=fraction_mol(k)*n_oil(i)
          end do
          end do
     
     
          write(91,30) time,nx,nz
      30  format(1x,'ZONE T=" ',e15.3,'", I = ',i5,
         +    ',K = ',i5, ', F=POINT')
    C'est la que je dois imprimer les valeurs de x en ordre ascendant mais les valeurs de z,So, xmol en ordre descendant. J'ai essayé ce que tu m'as proposé mais ca compile pas correctement.
    J'ai pas réussi a obtenir la structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    variables="x","z","So"    
    ZONE T=" 0.300E+01", I =    41,K =    41, F=point
    0.00000E+00    0.00000E+0    0.640000E-01    
    0.75000E-01    0.00000E+0    0.540000E-01    
    0.15000E+00    0.00000E+0    0.50000E-01    
    0.22500E+00    0.00000E+00    0.224880E+00
    voila la fin du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      888 continue
          Close(90)
          Close(91)
          stop
          end

    Merci de ton 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
    Par défaut
    Faudrait que tu nous montres le bout qui ne fonctionne pas...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    C'est bon j'ai trouvé la solution.
    C'était une histoire de boucles

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Réponses: 4
    Dernier message: 23/02/2012, 14h21
  3. balise <img> dans un tableau avec firefox
    Par yannock dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/10/2004, 16h44
  4. pb de coord de tex dans tableau avec multitex
    Par sebh dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/01/2004, 21h36
  5. Réponses: 13
    Dernier message: 14/10/2003, 14h31

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