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 :

Calculer la valeur maximum d'une colonne


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut Calculer la valeur maximum d'une colonne
    Bonjour,

    J'ai des répertoires : a_01, a_02 ....a_n, dans des répertoires a_i, i=1,n; ils contiennent des fichiers : maps000001, maps000002, ...., maps00000n, i=1,n.
    Chaque fichier maps00000i: est un tableau de 3 colonne et m lignes.

    Exemple :
    a_01: maps000001, maps000002,
    dans maps000001:
    L1 L2 L3
    0.0000000E+00 0.9000000E+02 -0.3228331E+5
    0.0000000E+00 0.8800000E+02 -0.1468246E-14
    0.0000000E+00 0.8600000E+02 0.1261635E-12
    0.0000000E+00 0.8400000E+02 0.3256342E-14
    0.0000000E+00 0.8200000E+02 0.3353514E-15
    0.0000000E+00 0.8000000E+02 - 0.1879126E-1
    0.0000000E+00 0.7800000E+02 0.2759277E-15
    0.0000000E+00 0.7600000E+02 -0.2333509E-13
    0.0000000E+00 0.7400000E+02 0.2687527E-15
    0.0000000E+00 0.7200000E+02 0.5729601E-15
    Je voudrais calculer la valeur maximum de valeur absolue de la colonne 3 du fichier maps00000i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maximum = max (abs (maps00000i(L3( : ))))
    et puis écrire les lignes corespondant à ces valeurs dans un fichier.

    Il me faut écrire L1, L2, maximum dans un fichier.
    Dans cet exemple : c'est
    0.0000000E+00 0.8000000E+02 0.1879126E-1
    dans un fichier. Je ne suis pas arrivé à écrire des valeurs L1, L2 correspondant à valeur maximum.

    Voici mon 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
     
    program maxxi_map
      implicit none
     
    ! Declaration
      character(len=4)      :: map="maps"
      character(len=9)      :: some_maps
      character(len=2)      :: nd
      character(len=6)      :: nf
      character(len=2)      :: Fa="a_"
      character(len=9)      :: map_sorti="map_stack"
      integer               :: i,j,k,nmax,mmax,ncol,nlign, n, m
      real, allocatable     :: l1(:), l2(:), l3(:), l4(:)
      real                  :: tr,maxxi
     
     
      print*,"enter value of maps nmax"
      read*,nmax
      print*, "enter value of repertoire  mmax"
      read*,mmax
    ! arrays' size with the first file
     nlign = 0
    open(10,file="a_01"//"/maps000001",status="old",action="read")
     do
       read(10,*,end=40) tr,tr,tr
       nlign = nlign+1
      end do
    40  close(10)
    write(*,*) nlign," lines read"
     
    ! allocations
     allocate(l1(nlign),l2(nlign),l3(nlign),l4(nlign) )
     
     
    !! boucle
      Do m=1,mmax
         write(nd,"(i2.2)")m
             do n=1,nmax
               write(nf,"(i6.6)")n
                  open(10, file="a_"//nd//"/maps"//nf,status="old",action="read")
                         do j = 1,nlign
                           read(10,*) l1(j),l2(j),l3(j)
                              l4(j) = abs (l3(j))
                         end do
                        maxxi = maxval(l4 (:), dim=1)
                        print*,'valeur point maxi',l1,l2,maxxi
                  close(10)
             end do
     
                 open(20,file="map_stack"//"/maps"//nf,action="write",status="replace")
                 do k = 1,nlign
                    write(20,"(e14.7,1x,e14.7,1x,e14.7)") l1(k),l2(k),maxxi
                 end do
      end do
             close(20)
     
    ! Deallocations
    deallocate(l1,l2,l3,l4)
     
    end program maxxi_map
    Est-ce que quelqu'un connaît ou a d'autres solutions à ce problème ?

    Merci par avance,

    Chip

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Par défaut
    Salut,

    un petit tour suivit d'un léger survole des formidables cours de développer.net ou de l'IDRIS devraient te permettre sans mal de résoudre ton problème.

    Si je peux me permettre un conseil et si tu as le choix de la version fortran à utiliser, opte pour fortran en norme 90, une fonction de recherche d'un maximum d'un tableau est déjà toute faite et optimisé.

    http://fortran.developpez.com/
    http://www.idris.fr/data/cours/lang/...choix_doc.html

    Bon courage,
    Yann.

  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 : 84
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Sur l'excellent site www.netlib.org, tu trouveras, dans une bibliothèque appelée BLAS, le programme ISAMAX (ou IDAMAX en double précision) qui devrait correspondre à ce que tu cherches.
    Jean-Marc Blanc

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/08/2013, 18h36
  2. [8.4] Grouper suivant la valeur maximum d'une colonne
    Par dodo285 dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/02/2013, 13h53
  3. [1.x] Calculer le maximum d'une colonne
    Par tiffany dans le forum Symfony
    Réponses: 5
    Dernier message: 30/08/2010, 12h19
  4. Réponses: 2
    Dernier message: 10/06/2009, 10h59
  5. Valeur calculée:retirer l'heure d'une colonne date
    Par gracouille dans le forum SharePoint
    Réponses: 1
    Dernier message: 30/05/2008, 11h35

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