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 :

[Fortran 90] Appel d'un programme


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut [Fortran 90] Appel d'un programme
    Les programmes disponibles dans le labo dans lequel je travaille sont tous rédiger en FORTRAN (77 et 90). Je découvre donc le FORTRAN depuis quelques semaines.
    L'un des programmes avec lequel je dois travailler (a.f90) n'est pas adapté pour la quantité de donnée que je dois traiter. Comme ce programme est très complexe et que d'autres personnes l'utilise tel quel, je ne peux pas le modifier. J'ai donc créé un autre programme (b.f90 qui se compose d'une simple boucle) dans lequel j'aimerais pouvoir appeler n fois le programme a qui se trouve dans un autre directory.
    La commande call ne fonctionne pas car elle est réservée à l'appel de sous-routines. Je pense devoir employer la commande "call system" mais je ne comprend pas bien comment elle fonctionne.

    Est-ce que quelqu'un serait me dire:
    1) Si cette commande est bien adaptée à ce que je veux faire
    2) Comment employer cette commande (explication adaptée à une vrai débutante si possible )

    D'avance merci!

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par bomcke.e Voir le message
    1) Si cette commande est bien adaptée à ce que je veux faire
    Ca depend un peu de ce que produit le programme en question. Disons que ton gros programme s'appelle myprog et qu'il calcule trois nombres.
    Si myprog imprime ces trois nombres sur la sortie standard, alors il suffit de rediriger cette sortie vers un fichier, puis lire ce fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    call system('myprog > myprog.out')
    open(unit=17, file='myprog.out')
    read(17,*) ...
    close(17)
    Si myprog cree des fichiers sortie, alors il suffit de lire ces fichiers.

    Une autre solution serait de remplacer la fonction principale du programme (program) par une sous-routine dont les arguments contiennent les resultats du programme original. Du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    subroutine myprog(a, b, c)
    implicit none
     
    real a
    real b
    real c
    ... ! Ici, le code de myprog, sans les sorties eventuelles
    a = ...
    b = ...
    c = ...
     
    end subroutine myprog
    Cette derniere solution est particulierement simple si myprog a ete bien concu, c'est a dire si c'est simplement une suite d'appels de sous-routines/fonctions avec traitement d'erreur.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut
    Merci pour ces explications.
    Il restait le problème lié au fait que le programme a employer (progB) ne se trouvait pas dans le même directory que celui dans lequel se trouvait le programme que je créais.
    A titre d'information (au cas où quelqu'un se trouverait un jour dans la même situation), je joint ci-dessous une copie de mon code.
    J'appelle progB en passant par le fichier script.sh parce que:
    1) si je met le chemin d'accès au niveau du call system, l'instruction n'est pas reconnue par le compilateur.
    2) progB a besoin d'un fichier paramètre pour tourner, ça permet de ne pas réintroduire le nom du fichier paramètre à chaque tour de boucle.
    Finalement, avant de refermer la boucle, je lis le fichier solutions qui est généré à chaque tour et stocke les valeurs qui m'intéresse dans un vecteur.

    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
     
    ----------programme principal-------
    do n=1,somme
     
    call system ('csh script.sh')
     
    open(10,file='solutions')
     
    do i=1,anim
    read(10,*) solution
    Valeur(n,i)=solution(4)
    enddo
    close(10)
     
    enddo
     
    ----------------appel de progB: fichier script.sh---------------
    /chemin_d'accès_de_progB << eof >> fichier.out
    nom_fichier_paramètre
    eof

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/06/2006, 15h55
  2. Appel d'un programme C dans un script shell
    Par Spacy_green dans le forum Linux
    Réponses: 6
    Dernier message: 01/06/2006, 13h01
  3. Réponses: 4
    Dernier message: 01/05/2006, 14h37
  4. appelle de plusieurs programme
    Par vince2005 dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2006, 21h35
  5. DLL Visual C++ appelée dans un programme Visual Basic
    Par marseillais57 dans le forum MFC
    Réponses: 7
    Dernier message: 21/07/2005, 14h57

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