3. Écriture du code de la macro-commande#
Il s’agit de la fonction principale de la commande déclarée dans le catalogue
par l’argument op, cf. Catalogue de la macro-commande:
op=OPS("code_aster.MacroCommands.conv_mail_med_ops.conv_mail_med_ops")
Le fichier associé est donc code_aster/MacroCommands/conv_mail_med_ops.py
dont voici le squelette fourni :
from ..Cata.Syntax import _F
from ..CodeCommands import CREA_TABLE, IMPR_RESU, LIRE_MAILLAGE
from ..Messages import UTMESS
def conv_mail_med_ops(self, UNITE_IN, FORMAT_IN, UNITE_OUT, **args):
"""Convert a mesh from ASTER, GMSH ou GIBI format to MED format and
return some mesh properties.
Arguments:
**args (dict): User's keywords.
Returns:
Table: Object containing some characteristics of the mesh.
"""
args = _F(args)
info = args.get("INFO", 1)
# INFO is mandatory so:
# info = args["INFO"]
# or adding INFO in arguments also works
# print the information message
UTMESS(...)
# read the input mesh
mesh = ...
# write the mesh into a MED file
...
# extract some mesh characteristics
nbnodes = mesh. ...
nbcells = mesh. ...
# fill the output table
tab = CREA_TABLE(
LISTE=(
...
)
)
return tab
3.1. Description détaillé#
Voir les d7.01.01-regles.
On débute par l’import des fonctions utilisées, en particulier, les commandes appelées. On note qu’on importe les fonctions des commandes, pas le catalogue.
_F() est utilisé dans le fichier de commandes.
Les mots-clés peuvent être fournis aux commandes sous forme de dictionnaire Python.
L’objet _F étend le dictionnaire pour faciliter les traitements systématiques.
Les mots-clés obligatoires devraient apparaître dans les arguments de la fonction
puisqu’ils doivent être toujours présents (positional arguments).
Les mots-clés facultatifs sont passés dans les keywords arguments.
On aurait ainsi pu mettre INFO dans les arguments de la fonction.
A titre d’exemple, on montre qu’on aurait aussi pu utiliser args["INFO"].
.get() est utilisé pour les mots-clés facultatifs, retourne None (ou la valeur
fournie) si le mot-clé est absent.
On propose d’afficher un message pour informer l’utilisateur du travail en cours.
La fonction print() est proscrite.
Il faut utiliser l’utilitaire UTMESS, cf. code_aster/Messages/Utmess.py.
La lecture du maillage s’effectue en appelant la commande LIRE_MAILLAGE.
La conversion est faite simplement avec IMPR_RESU au bon format.
Pour extraire les informations du maillage, on utilise les méthodes de l’objet Mesh. On peut chercher les méthodes disponibles :
dans les exemples/cas-tests (répertoire
astest/),dans la documentation embarquée :
xdg-open ../install/mpi/share/doc/html/index.html(hors du conteneur),dans les docstrings de l’objet :
$ ../install/mpi/bin/run_aster >>> help(CA.Mesh)
Il faut chercher les méthodes qui permettent de récupérer le nombre de noeuds et de mailles.
On termine la fonction en créant la table avec CREA_TABLE. Le cas-test fourni montre le nom des paramètres à créer dans la table. Comme une fonction classique, la table produite, retournée à l’utilisateur, est la valeur de retour de la fonction.
Complétez le squelette et testez votre code : d7.01.01-build-dev.