MSC.Nastran depuis sa version 2016 dispose de la sortie des résultats au format hdf5. Ce format est un format standard et vous pouvez trouver sur internet un ensemble de bibliothèques python ou c++ vous permettant d’accéder aux données.
C’est vraiment une bonne option pour vous écrire des programmes de post-traitement spécifiques.

Pourquoi ?

Il vous arrive certainement (comme pour moi) de vouloir travailler avec des données non standard (Combinaison de résultats, création de résultats spécifiques, création de chargements spécifiques, etc …).

La sortie hdf5 de MSC.Nastran vous permet de faire cela rapidement et simplement (Surtout en python). Il est cependant dommage que MSC ne fournisse pas une bibliothèque python permettant d’accéder à toutes les données et résultats.

Vous pourrez donc extraire des informations du fichier hdf5, faire vos calculs, sortir vos résultats en fichier csv et pourquoi pas dans un autre fichier hdf5, qui pourra être lu par Patran 2017, etc …

Dans un premier temps, je vais vous donner les bases pour développer en python l’accès aux données et résultats. Si vous désirez plus d’informations ou d’autres choses contacter moi sur le formulaire “contact”.

Avant de programmer

Il est nécessaire d’avoir une installation python qui fonctionne avec les modules suivants :

Modules obligatoires

  • os,
  • sys,
  • tables : que vous pourrez télécharger sur http://www.pytables.org/  pour les routines de base d’accès au fichier hdf5.

Modules facultatifs

Outils indispensables  pour comprendre la base de données :

Personnellement j’utilise :

  • Python 3.6.0 depuis anaconda (https://www.continuum.io/downloads) qui permet une installation facile des différents modules et qui est livré avec Spyder comme GUI avec un débogger intégré.

Introduction

Pour bien comprendre la base du schéma utilisé pour stocker les données dans le fichier hdf5 de MSC.Nastran, voici une capture d’écran issue de hdfview.

Exemple HDF5 Nastran
Exemple HDF5 Nastran

contenu de /NASTRAN/INPUT/ELEMENT/CQUAD4
contenu de /NASTRAN/INPUT/ELEMENT/CQUAD4

Pour accéder à une table particulière il suffit donc de suivre l’arborescence. Par exemple :

  • Les cquad4 : /NASTRAN/INPUT/ELEMENT/CQUAD4
  • Les contraintes pour les cquad4  obtenues par la commande STRESS(SORT1,VONMISES,CORNER): /NASTRAN/RESULT/ELEMENTAL/STRESS/QUAD_CN
  • etc, …

Dans hdfview si vous cliquez dans l’arbre, bouton de droite/propriétés vous pourrez voir les différentes données et format pour une table particulière.

Propriétés des différents données d'un CQUAD4

Propriétés des différentes données d’un CQUAD4

Par exemple, les nœuds sont l’attribut ‘G’ stockés dans un tableau de 4 entiers

Pour récupérer les données d’une table, il suffit de :

  1. Récupérer la table,
  2. Boucler sur les lignes de la table,
  3. Récupérer pour chaque ligne les différents champs qui vous intéressent.
elem_list = file.get_node("/NASTRAN/INPUT/ELEMENT/CQUAD4")
for elem in elem_list:
  element_id = elem['EID']
  node_id = elem['G']
  prop_id = elem['PID']

Vous trouverez plus d’informations sur le fichier hdf5 de MSC.Nastran dans le release guide de la version 2016 ou 2017, disponible sur le site : https://simcompanion.mscsoftware.com/infocenter/index?page=content&id=DOC10957&actp=LIST 

 

Comment

Obtention du fichier hdf5

Lors du lancement de MSC.Nastran vous pouvez par exemple ajouter l’option sys702=1 dans la ligne de commande pour obtenir le fichier hdf5.

D:\MSC.Software\MSC_Nastran\20160\bin\nastran.exe modal.bdf   sys702=1

Ouverture du fichier hdf5

Rien de plus simple, il suffit de fournir à votre programme le nom du fichier hdf5.

import tables
file = tables.open_file(file_name)

Fermeture du fichier

file.close()

Récupération du nombre de nœuds

 def get_nb_node(file):
     """
     Recuperation du nombre de noeuds
    """
    grid = file.root.NASTRAN.INPUT.NODE.GRID
    return len(grid)

Récupération du contenu du fichier hdf5

 def liste_contenu(file):
   """
   Liste le contenu du fichier hdf5
   """
   print('Affiche toutes les tables du fichier hdf5')
   for array in file.walk_nodes("/", "Table"):
     print(array)

 

Comment aller plus loin

Vous pouvez maintenant démarrer la programmation de votre propre interface avec le fichier hdf5.
SimuFem peut également vous aider dans ce cadre.

Utilisez le formulaire “contact” pour obtenir plus d’informations si besoin.

Related posts