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 :

test dimension d'un tableau qui ne compile pas ?


Sujet :

Fortran

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut test dimension d'un tableau qui ne compile pas ?
    Bonjour,

    Dans une subroutine, je cherche a tester que deux tableaux ont même dimension avant de faire le calcul, normal. Or le code compile avec ifort mais me renvoie une erreur avec g95:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if (.not.((size(ya(1,1,1,:)).eq.o).and.(size(y2a(1,1,1,:).eq.o))&
                                          1
    Error: Operands of logical operator '.and.' at (1) are LOGICAL(4)/INTEGER(4)
    Le test en lui même se présente ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
        INTEGER::L,m,n,o
        REAL, dimension(:,:,:,:),intent(in)::ya,y2a !size L,m,n,o
     
        L=size(x0a);m=size(x1a);n =size(x2a);o=size(x3a)
     
        if (.not.((size(ya(1,1,1,:)).eq.o).and.(size(y2a(1,1,1,:).eq.o))&
             .and.(size(ya(1,1,:,1)).eq.n).and.(size(y2a(1,1,:,1).eq.n))&
             .and.(size(ya(1,:,1,1)).eq.m).and.(size(y2a(1,:,1,1).eq.m))&
             .and.(size(ya(:,1,1,1)).eq.L).and.(size(y2a(:,1,1,1).eq.L))))then
           write(*,*)"splin4 input error: unexpected array dimension"
           STOP
        end if
    Pourquoi g95 me met-il une erreur ?

    merci beaucoup

  2. #2
    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
    Les parenthèses des tests sur y2a sont mal placées. Tu fais (size(y2a(1,1,1,:).eq.o)) alors que tu devrais faire (size(y2a(1,1,1,:)) .eq.o).

    y2a() .eq. o retourne un vecteur de vrai ou faux, le size du tout te retourne un entier. Le .and. compare alors un logical (du test sur ya) avec un entier (du test sur y2a).

    ifort ne fonctionne pas, mais il semble fonctionner. En fait, il contient une extension dangereuse transformant le .and. en bitwise and. Le résultat est donc certainement erroné.

    Petites notes aditionnelles :

    Il serait certainement plus efficace de faire size(A,1) car size(A(:,1,1,1)) requiert la création du vecteur temporaire.

    Il serait possiblement plus simple de faire quelque chose comme if (any((ubound(ya) /= ubound(y2a)) .or. any(ubound(ya) /= (/L,m,n,o /))) ...

Discussions similaires

  1. [HTML/XHTML] Tableau qui ne garde pas ses dimensions
    Par mimagyc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 22/06/2007, 14h54
  2. exemple qui ne compile pas
    Par Edta dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 01/11/2006, 13h58
  3. sscanf - syntaxe qui ne compile pas
    Par xilebo dans le forum C
    Réponses: 4
    Dernier message: 12/09/2006, 13h41
  4. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  5. Réponses: 5
    Dernier message: 18/05/2006, 12h06

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