Résultats de 1 à 2 sur 2

Sujet : Pb sur les assumed-size/shape arrays

  1. #1

    Pb sur les assumed-size/shape arrays

    Bonjour,

    J\'ai a nouveau un probleme que j\'ai du mal a saisir.

    J\'utilise dans un de mes programmes une fonction de la librairie BLAS1 (juste pour calculer une bete norme). En fait, cette fonction est utilisee dans une fonction que j\'ai cree, cette derniere se trouvant dans un module. J\'ai interface la fonction BLAS1, puisque j\'ai un IMPLICIT NONE en debut du module.

    Or au debut, ma fonction me repondait n\'importe quoi. En fait, elle me repondait toujours la meme valeur, quelle que soit le parametre passe. Et des fois, ca se finissait en \"Arithmetic Exception: - aborting\".

    Apres avoir bataille pendant un moment, je me suis rendu compte quand je n\'interfacais pas la fonction (donc en enlevant l\'IMPLICIT NONE), tout marchait parfaitement.

    D\'ou ma stupefaction, puisque je croyais que le IMPLICIT NONE permettait d\'eviter des erreurs, et non d\'en rajouter.

    Donc apres nouvelles investigations, j\'ai constate que ca venait du fait que je declarais dans l\'interface le vecteur (dont je veux calculer la norme) en :

    DOUBLE PRECISION :: X(

    Alors qu\'il faut le declarer en :

    DOUBLE PRECISION :: X(*)

    D\'ou finalement ma question : comment ce fait-il que le compilateur ne soit pas capable de detecter ce genre de probleme, qui m\'a fait perdre une bonne heure.

    Question subsidiaire : je ne comprends pas pourquoi les programmeurs de BLAS1 on specifie en decalaration que l\'argument etait du type DIMENSION(*) et pas du type DIMENSION(, vu que c\'est une librairie qui ne s\'applique qu\'a des vecteurs. Quel est l\'interet d\'une telle pratique ?

    Merci de me permettre d\'avancer dans ce defrichage laborieux pour moi.

  2. #2
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    Je n\'ai jamais utilisé IMPLICIT NONE, car au contraire, je préfère que mes variables se trouvent déclarées automatiquement sur la base de leur première lettre.
    Je suppose qu\'ayant mis IMPLICIT NONE tu as utilisé une variable que tu n\"a pas déclarée, ce faisant, le FORTRAN lui a donné un type quelconque. Ainsi si tu as transmis un réel, il a considéré qu\'il s\'agissait d\'un entier...
    Il faudrait préciser quel est ton FORTRAN et sur quel système et avec quelle norme 66, 77, 90, 95...format fixe, format libren 16 ou 32 bit....
    Amicalement
    Moby
    moby

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!