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

Simulation Discussion :

Scripting Python Abaqus


Sujet :

Simulation

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Scripting Python Abaqus
    Bonjour à tous,

    je souhaite créer un script python permettant d'extraire des infos d'un odb (fichier résultat abaqus).

    Concrètement, je veux sortir par face géométrique la somme des flux radiatifs (RADFLA) présents sur chaque facette d'élément de cette face géométrique.

    Je peux lister les surfaces géométriques (odb.rootassembly.surfaces) et les valeurs de RADFLA (odb.steps.frames.fieldoutputs(radfla).values.data)
    Mais je suis incapable de sortir la liste des faces d'éléments correspondant à la liste des RADFLA et de sortir la liste des faces d'éléments associés à chaque surface géométrique.

    Quelqu'un a-t-il déjà fait du script sous Abaqus et peut m'aider??

    Merci d'avance!!

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Bonjour,

    Je peux lister les surfaces géométriques (odb.rootassembly.surfaces) et les valeurs de RADFLA (odb.steps.frames.fieldoutputs(radfla).values.data)
    Est-ce que cela veut dire qu'il existe une API python pour Abaqus? Si oui, c'est du côté de sa doc qu'il faut chercher. Sinon, est-ce tu pourais montrer un exemple representatif (mais court) d'un fichier de sortie odb?

    J

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour Julien,

    Effectivement, il existe une doc mais pas aussi détaillée que je le souhaite (je suis peut être aussi trop mauvais !!)

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Si la doc est incomplete, dans un cas similaire j'essaye de "lire" le code de L'API. Sans chercher pour autant à décripter en detail tout le code, je commence par determiner comment celui-ci est contruit, puis je repère les elements que je connnais déjà (ici pour odb.rootassembly.surfaces et odb.steps.frames.fieldoutputs(radfla).values.data, je rechercherais l'objet odb, puis la methode rootassembly, etc). J'utilise aussi abondamment la methode __dict__ qui liste les attributs d'un objet

    Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print odb.rootassembly.__dict__
    Bref, si tu veux résoudre ton probleme, tu vas être obligé de fouiller. Il y a très peu de chance que quelqu'un ici utilise aussi cette API (mais on ne sait jamais!!)

    [EDIT]
    La fonction dir() liste les methodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print dir(odb.rootassembly)
    J

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonsoir Julien,

    C'est effectivement ce que j'ai tenté de faire en passant par l'éditeur présent dans Abq viewer, où je passais les différents attributs.
    Je ne connaissais pas _dict_ par contre, merci pour le conseil.

    Voici l'ébauche du scripttest.py

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut Manu,

    Malheureusement je n'ai pas Abaqus, ni sur mon PC ni au boulot. Donc je ne peux pas vraiment tester ton script. Cependant je peux te conseiller sur certains morceaux du code:

    Par exemple ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    liste_surfaces=[]
    for surface in myassembly.surfaces.keys():
      liste_surfaces.append(surface)
     
    nb_surfaces=len(liste_surfaces)
    
    i=0
    while i < nb_surfaces:
      print liste_surfaces[i] 
      i+=1
    Je suppose que tu souhaites récupérer les surfaces de ton modèle et les afficher. Tu peux tout simplement faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_surfaces = myassembly.surfaces.keys()
    print liste_surfaces
    La méthode keys() du dictionnaire par défaut sort une liste des clés. Tu peux directement les afficher. Si tu souhaites uniquement les afficher tu peux tout aussi bien faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print myassembly.surfaces.keys()
    Les compter est tout aussi simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print len(myassembly.surfaces.keys())
    A ce que je comprends, les surfaces sont constituées de faces. Et tu aimerais également les récupérer. Est-ce que ces faces sont les "valeurs" associées aux "clés" de myassembly.surfaces? Est-ce que tu peux tester ceci et poster le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key, value in myassembly.surfaces.iteritems():
        print "clé: ", key, type(key)
        print "valeur: ", value, type(value)
    Ju

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Salut Julien,

    Effectivement mon code n'est pas forcément optimal!

    Je n'ai pas Abaqus ici, je testerai seulement lundi...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Je n'ai pas pu faire fonctionner ton bout de code, tant pis!

    Je me suis aussi rapproché du support abaqus, qui m'a conseillé de revoir la méthode car il n'est pas possible de lier surfaces géométriques et faces d'éléments...
    Je vais essayer de m'en sortir par le JDD, je vais regarder ça dans la semaine.

    Merci en tout cas pour ton aide et tes conseils!

  9. #9
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    De rien, et bon courage.

Discussions similaires

  1. Script python pour extraire les déplacements à partir d'Abaqus
    Par amandine2402 dans le forum Simulation
    Réponses: 3
    Dernier message: 19/04/2014, 11h46
  2. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  3. Accents Command Line depuis un script Python
    Par nicou50 dans le forum Général Python
    Réponses: 6
    Dernier message: 29/12/2006, 10h41
  4. Interpreter un script python dans un prog python
    Par romeo9423 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2005, 16h16
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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