Welcome to the forums. Please post in English or French.

You are not logged in.

#1 2017-11-07 17:06:40

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Méthode inverse de Code_Aster avec Python

Bonjour,

Comme je le disais dans le post de présentation, je découvre Code_Aster et j'avoue être un peu perdu avec la nouvelle version du 1er septembre 2017 car le savoir-faire qu'il y a au labo remonte à quelques années sur Code_Aster.
Après avoir modélisé notre cas sur Abaqus et Calculix, nous souhaiterions donc passer à Code_Aster qui semble meilleur.

Je vais donc vous expliquer ce que je voudrais faire et où j'en suis :

J'aimerai, via Python :
- lancer une modélisation et un calcul Code_Aster
- lire le déplacement d'un nœud précis dans le fichier résultat
- puis relancer le calcul avec de nouvelles valeurs de matériaux que j'ai choisi
- boucler jusqu'à mon critère d'arrêt.

Où j'en suis :
- ma routine Python réalise les étapes si-dessus automatiquement sous Abaqus et Calculix (elle écrit un fichier INP qu'elle modifie à chaque calcul, les solveurs lisent alors le fichier pour résoudre le problème et générer un résultat)
- j'importe manuellement (en utilisant le module graphique Salome-Meca) la géométrie à partir d'un fichier .stp
- je génère manuellement les sets nécessaires à l'application des conditions limites et chargements
- je génère manuellement le maillage
- je lance le calcul direct de notre problème sur Code_Aster et j'observe les iso-valeurs
- je pense avoir compris les nécessités (set de nœud pour les BC, etc) de Code_Aster pour notre cas.

Cependant, je ne comprends pas du tout ce qu'est un fichier EFICAS.
En effet, je ne trouve pas ce fameux fichier dans ceux enregistrés (mais parfois j'ai des bogues au moment de la sauvegarde avant le calcul, j'ai vu qu'une nouvelle version était apparue le 3 novembre dernier).

J'ai donc quelques questions :
1) Le fichier EFICAS suffit il à lancer un calcul? A la lecture des pdf u1.03.00 et sv3.u2.01 je ne suis pas sur.
2) Est ce envisageable de rédiger totalement un fichier EFICAS via Python, à la manière d'un fichier texte?
3) Peut on lire un fichier EFICAS avec un éditeur de texte, ou est il dans le fichier HDF de sauvegarde, à quel moment le fichier EFICAS est il généré?
4) Avez vous une méthode bien plus simple pour faire du calcul en boucle avec Code_Aster?
5) J'ai vu que Code_Aster pouvait être piloté par Python, ne serait ce alors pas plus simple pour moi de faire un programme Python qui donne les instructions à Code_Aster afin que celui-ci rédige le fichier EFICAS?
6) Plus généralement, avez vous des conseils pour apprendre à comprendre et maitriser l'écriture d'un fichier de calcul Code_Aster? La lecture de la doc ne semble pas suffire. Et comme je n'ai pas encore trouvé de fichier EFICAS de mes problèmes générés par Salome-Meca en interface graphique, j'avoue être perdu.

J'espère en retour pouvoir être utile à la communauté grâce à nos développements.

Cordialement,
Guillaume

Offline

#2 2017-11-08 07:07:11

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

bonjour

efficas est un éditeur de fichier de commande, *.comm
mais on peut parfaitement s'en passer
en dix ans je ne m'en suis jamais servi

peut être pourriez vous lire mon livre, en téléchargement ici
https://    framabook.org/beginning-with-code_aster/

jean pierre aubry

Last edited by jeanpierreaubry (2017-11-08 07:07:41)


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#3 2017-11-08 07:54:05

JGWagenfeld
Member
Registered: 2016-04-01
Posts: 30

Re: Méthode inverse de Code_Aster avec Python

Bonjour Guillaume,

comme jean pierre aubry a écrit, le *.comm file gère la simulation CodeAster.
C'est juste un fichier txt et c'est tout a faite possible de le manipuler avec Python.

C'est possible de directement utiliser Python dans cette fichier txt et CodeAster va le comprendre (il y a des bonnes documentations dans cette site). Pour ces objectives que tu as décrit, c'est la façon la plus facile je pense.

- lancer une modélisation et un calcul Code_Aster
- lire le déplacement d'un nœud précis dans le fichier résultat
- puis relancer le calcul avec de nouvelles valeurs de matériaux que j'ai choisi
- boucler jusqu'à mon critère d'arrêt.

J'ai ajouté un fichier qui calcule en boucle, lit les résultats puis change des paramétrés. Dans mon cas, je change une ressort après chaque boucle.


Attachments:
002_TUBE_Friction_aster.comm, Size: 36.79 KiB, Downloads: 619

Offline

#4 2017-11-09 11:11:02

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

jeanpierreaubry wrote:

peut être pourriez vous lire mon livre, en téléchargement ici
https://    framabook.org/beginning-with-code_aster/

Merci Jean-Pierre!
Je ne comprenais pas bien ce qu'était EFICAS, mais je vois maintenant que c'est l'écriture du fichier .comm qu'il faut que je maîtrise.
Quand est généré le fichier .comm quand on utilise l'interface graphique? A la sauvegarde une fois réalisé les étapes de AsterStudy?
Les pages 25 à 42 m'ont l'air particulièrement adaptés, félicitations pour ce livre!

JGWagenfeld wrote:

J'ai ajouté un fichier qui calcule en boucle, lit les résultats puis change des paramétrés. Dans mon cas, je change une ressort après chaque boucle.

Si je comprends bien, tu fais lire ce fichier .comm à Python, qui en donne les instructions à Code_Aster via import os?
Ton fichier est très intéressant, merci Wagenfeld! Je souhaite effectivement faire quelque chose de similaire mais en important un maillage décomposés dans un fichier HDF.

Entre ton exemple et le livre de Jean-Pierre je peux déjà faire un bon de géant! Merci messieurs!

Offline

#5 2017-11-09 11:35:42

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

merci pour les compliments !!

je vais émettre ici un avis net et tranché
considérant le niveau du problème que vous comptez résoudre
et en examinant le fichier de commande attaché au post de JGWagenfeld
qui me semble du niveau de ce que vous voulez faire

il vaudrait mieux que vous vous lancier directement dans code_aster  stand alone
avec l'interface astk, p 117 du livre
sans passer par Salome meca ou AsterStudy
vous passerez un peu de temps au début pour en gagner beaucoup ensuite

et vous gagnerez aussi beaucoup de temps en vous faisant la main sur des problèmes un peu plus simples
notament sans python

Last edited by jeanpierreaubry (2017-11-09 11:39:10)


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#6 2017-11-09 15:07:29

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

jeanpierreaubry wrote:

il vaudrait mieux que vous vous lancier directement dans code_aster  stand alone
avec l'interface astk, p 117 du livre
sans passer par Salome meca ou AsterStudy
vous passerez un peu de temps au début pour en gagner beaucoup ensuite

Mais du coup, à la lecture des pages 117-118, la solution que vous préconisez n'utilise pas Python du tout?

Car pour être précis, je dois développer cette méthode inverse de manière automatique en un seul clic pour l'intégrer à un logiciel libre, donc Python me semble indispensable puisque la méthode de JGWagenfeld permet de se passer d'interface graphique. Ou alors je n'ai pas compris, et vous parliez de contrôler ASTK via Python.

Offline

#7 2017-11-09 15:24:21

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

non je ne parlait pas  de de contrôler ASTK via Python
mais de lancer les premières études d'apprentissage dans code_aster  stand alone
avec l'interface astk

la quasi totalité des études peuvent être menée sans Python
Python est à utiliser quand on sort des trucs simples et prendra sans doute toute sa valeur pour votre étude inverse

le fichier de JGWagenfeld est un fichier de commande
qui contient des instructions ou commandes Python mais n'est pas un fichier exécutable Python
et il faut tout de même lancer une étude laquelle doit préciser
quel est le fichier maillage
quels sont les fichiers ou imprimer les résultats
donc soit en mode "graphique" avec astk
soit avec as_run


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#8 2017-11-09 16:54:31

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

C'est bien ce que je venais de comprendre.
Mais il faut que j'aboutisse à une étude par méthode inverse en un seul clic, donc je ne peux utiliser l'interface graphique.
Là je viens de voir que Salome-Meca proposait de générer automatiquement un script Python des actions effectuées en interface graphique.

Je me demande donc s'il est possible de lancer les Commandes Python de l'interpréteur directement via une autre commande python :
- générer un fichier Script.comm à partir du script automatique proposé par Salome-Meca
- puis lancer ce script sous ouvrir Salome ou Aster, juste avec un commande Python, genre : os.system("/home/Code_Aster -i Script.comm ")

Du coup savez vous comment lancer un Script de Commande dans Code_Aster, à l'aide de Python?

A partir de là, je pourrai créer une boucle qui modifie le Script.comm et boucler.

Merci d'avance, z'êtes top!

EDIT : je viens de trouver ça :
Sur ce forum un sujet s'appelle : How to run a calculation *completely* via Python mais je ne peux pas coller le lien, c'est interdit apparemment.

Last edited by Groguiguy (2017-11-09 17:04:48)

Offline

#9 2017-11-09 17:05:13

JGWagenfeld
Member
Registered: 2016-04-01
Posts: 30

Re: Méthode inverse de Code_Aster avec Python

Pardon, je pense mon fichier .comm était plutôt confusant.

Comme jeanpierreaubry a dit, le fichier *.comm juste define la simulation en Code Aster.
Avant ca, je dois définir mon maillage en Salome . Puis avec AsterStudy,astk ou as_run il faut lancer l'etude en utilisant le maillage et le fichier *.comm.

C'est possible de lancer as_run avec subprocess.Popen() par un script Python, mais je pense c'est pas vraiment nécessaire ici. Si on veut juste changer des conditions limites et pas la géométrie ou le maillage on peut rester dans CodeAster (ou on peut utiliser des commands python).

Dans la section Formation, il y a des bonnes explication - et surtout dans le livre de jeanpierreaubry.
https://www code-aster org/V2/UPLOAD/DOC/Formations/18-python.pdf

Offline

#10 2017-11-09 17:54:56

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

Pas de soucis, je me suis moi-même très mal exprimé : je suis obligé de commander l'ensemble de la méthode inverse par Python en 1 clic.

C'est possible de lancer as_run avec subprocess.Popen() par un script Python

Ok je vais me renseigner sur cette méthode, merci. Je ne voudrais modifier que les matériaux, mais sans utiliser d'interface graphique, tout en Python, même la lecture des résultats.

Donc si je comprends bien, il me faut deux fichiers :
1) fichier .med pour le maillage
2) fichier .comm pour les instructions de calcul et lecture des résultats.

Et il me faudra créer un script qui lance le fichier .comm via as_run en lisant le fichier .med.

Offline

#11 2017-11-10 07:23:07

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

pour parler franchement
vous vous poser beaucoup trop de questions avant d'avoir fait tourner un problème même simple
je vous conseille de traiter quelques exemples simple pour bien maîtriser le fonctionnement de code_aster
et de revenir ensuite avec les questions de détails seront alors exprimées bien différemment

cependant ce que vous voulez faire est possible
même si dans le détail cela ne se fera peut-être pas exactement comme vous le penser maintenant

par exemple

Donc si je comprends bien, il me faut deux fichiers :
1) fichier .med pour le maillage
2) fichier .comm pour les instructions de calcul et lecture des résultats.

1) oui
2)non, un fichier de commande qui n'est que lu, pas écrit
un ou plusieurs fichiers pour écrire les résultats en ascii
un ou plusieurs fichiers pour écrire les résultats en graphique, .med ou autre


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#12 2017-11-10 15:41:48

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

Justement, en faisant des cas simples je crois comprendre que le mieux pour moi serait de fixer le Script Python décrivant la géométrie et les BC et le fichier .med du maillage lu par Salome_Meca, et ne modifier que le matériau du fichier .comm

Avec cette logique, j'ai deux questions où je ne trouve pas de réponse :
1) Comment lancer un fichier .comm avec une commande Python externe?
2) Comment, dans un fichier .comm, Code_Aster trouve le chemin pour le maillage et les groupes de nœuds des conditions limites?

Mes réponses pour le moment :
1) Utiliser "from subprocess import Popen":
   

ASTER_ROOT='/opt/aster'
    WORKING_DIR='/home/cealinux/case'

    from subprocess import Popen
    aster_run = Popen(ASTER_ROOT + '/bin/as_run ' + WORKING_DIR + '/study.export', shell='TRUE')
    aster_run.wait()

2) Un cas simple de cube contraint donne ceci dans le fichier CUBE.comm :

DEBUT()

mesh = LIRE_MAILLAGE(FORMAT='MED', UNITE=20)

model = AFFE_MODELE(
    AFFE=_F(MODELISATION=('3D', ), PHENOMENE='MECANIQUE', TOUT='OUI'),
    MAILLAGE=mesh
)

steel = DEFI_MATERIAU(ELAS_HYPER=_F(C10=1000.0, K=1000000.0))

fieldmat = AFFE_MATERIAU(AFFE=_F(MATER=(steel, ), TOUT='OUI'), MODELE=model)

Sym = AFFE_CHAR_MECA(
    FACE_IMPO=(
        _F(DX=0.0, GROUP_MA=('Group_1', )), _F(DY=0.0, GROUP_MA=('Group_3', )),
        _F(DZ=0.0, GROUP_MA=('Group_4', ))
    ),
    MODELE=model
)

Force = AFFE_CHAR_MECA(
    FORCE_FACE=_F(FX=300.0, GROUP_MA=('Group_2', )), MODELE=model
)

CUBE = MECA_STATIQUE(
    CHAM_MATER=fieldmat, EXCIT=(_F(CHARGE=Force), _F(CHARGE=Sym)), MODELE=model
)

IMPR_RESU(FORMAT='MED', RESU=_F(RESULTAT=CUBE), UNITE=80)

FIN()

Les Group_i ont été défini par un Script Python ou en interface graphique, mais quelles sont les règles des "chemins" pour que Code_Aster comprenne ce que sont ces Group_i. Savez vous où trouver ses informations?

EDIT :
Apparemment je peux trouver les informations ici https:               //www.code-aster.org/V2/doc/v12/fr/man_u/u1/u1.04.00.pdf

Mais j'ai toujours des problèmes du type "erreur lors de la copie de [file:///home/Code_Aster/Cube_Files/RunCase_3/Result-Stage_1/RunCase_3_Stage_1.comm] vers /tmp/astk_/Precision-3520-profil_astk.10446"
3) Même si j'exécute cela sur un cas simple, j'ai souvent ce type d'erreur, d'où ça peut venir?

Last edited by Groguiguy (2017-11-10 16:56:19)

Offline

#13 2017-11-10 16:59:33

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

2) Comment, dans un fichier .comm, Code_Aster trouve le chemin pour le maillage et les groupes de nœuds des conditions limites?

avec cette commande

mesh = LIRE_MAILLAGE(FORMAT='MED', UNITE=20)

les Group-i doivent être définis dans le fichier maillage

la commande pour lancer un problème depuis un terminal est as_run
as_run est un script bash qui se lance très bien depuis une console ou une application python
ceci est expliqué page 283 de mon livre
il faut préalablement avoir crée un fichier .export
ce qui peut se faire en utilisant une première fois astk

je vais me répéter
essayer de traiter une première fois un exemple simple
par exemple le fichier .comm que vous donnez ci dessus
avec la méthode basique pour comprendre comment fonctionne code_aster

après vous pourrez essayer d'appliquer une méthode 1 clic

Last edited by jeanpierreaubry (2017-11-10 17:04:24)


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#14 2017-11-15 11:19:42

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

Merci Jean-pierre.
Je me suis effectivement mis à faire des cas simples, mais depuis la nouvelle mise à jour AsterStudy 2017.0.2 je n'arrive plus à faire le moindre calcul.
J'ai mis le fichier .comm en pièce jointe, mais voici le log d'erreur avec un  <I>_EXIT_CODE = 127.

>>> 2017/11/15-11:07:52.226  [execute@/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_frontend-20170/lib/python2.7/site-packages/asrun/execution.py:373]
cmd :
( /home/dufaye/Programmes/V2017.0.2/tools/Code_aster_stable-v134_smeca/bin/aster /home/dufaye/Programmes/V2017.0.2/tools/Code_aster_stable-v134_smeca/lib/aster/Execution/E_SUPERV.py -commandes fort.1 --num_job=6463 --mode=interactif --rep_outils=/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_frontend-20170/outils --rep_mat=/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_frontend-20170/../Code_aster_stable-v134_smeca/share/aster/materiau --rep_dex=/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_frontend-20170/../Code_aster_stable-v134_smeca/share/aster/datg --numthreads=4 --suivi_batch --memjeveux=128.0 --tpmax=900.0 ; echo EXECUTION_CODE_ASTER_EXIT_6463=$? ) | tee fort.6 ; exit `grep -a EXECUTION_CODE_ASTER_EXIT_6463 fort.6 | head -1 | sed -e 's/EXECUTION_CODE_ASTER_EXIT_6463=//'`
background : False
follow_output : True
/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_stable-v134_smeca/bin/aster: error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory
EXECUTION_CODE_ASTER_EXIT_6463=127

>>> 2017/11/15-11:07:52.231  [local_shell@/home/dufaye/Programmes/V2017.0.2/tools/Code_aster_frontend-20170/lib/python2.7/site-packages/asrun/system.py:333]
    ERROR : iret = 127
    +++ STANDARD OUTPUT:
    /home/dufaye/Programmes/V2017.0.2/tools/Code_aster_stable-v134_smeca/bin/aster: error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory
    EXECUTION_CODE_ASTER_EXIT_6463=127
   
    +++ STANDARD ERROR:
   
    +++ END

J'ai réinstallé la dernière version pourtant.
Une idée du pourquoi du comment?

Last edited by Groguiguy (2017-11-15 11:21:08)

Offline

#15 2017-11-15 13:54:46

konyaro
Member
From: Genève
Registered: 2016-04-02
Posts: 279

Re: Méthode inverse de Code_Aster avec Python


失敗は成功のもと (L'échec est la base de la réussite)

Offline

#16 2017-11-15 14:32:04

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

Une idée du pourquoi du comment?

oui
et c'est assez clairement exprimé
la librairie blas n'est pas installé
BLAS (Basic Linear Algebra Subprograms)
selon les distributions le nom peut changer un  peu blas, open blas, libblas

c'est donc la première fois que vous lancer une étude !
d'ou l'intérêt de résoudre des problèmes simples avant de se lancer dans les spéculations intellectuelles


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#17 2017-11-15 17:24:54

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

Merci messieurs, j'avais effectivement trouvé la solution, mais je m'étais mal exprimé et je voulais comprendre pourquoi ce fichier manquait à mon installation, vu qu'à terme j'allais devoir l'installer sur plusieurs machine.

Et non, ça n'était pas du tout mon premier calcul, juste le premier depuis mardi où j'avais installé la version AsterStudy 2017.0.2.
J'ai multiplié les cas tests et cas complexes sur la version précédente, et je pense avoir trouvé comment tout lancer en un seul clic interne à Python en suivant les étapes suivantes dans mon script (en gros, j'ai juste compilé ici des exemples) :

# Nom de fichier Study2.py
import sys
import salome

salome.salome_init()
theStudy = salome.myStudy

import salome_notebook
notebook = salome_notebook.NoteBook(theStudy)
sys.path.insert( 0, r'/home/dufaye/Code_Aster')

###
### GEOM component
###

import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS

geompy = geomBuilder.New(theStudy)

O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
Bo_te_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
[Face_1,Face_2,Face_3,Face_4,Face_5,Face_6] = geompy.ExtractShapes(Bo_te_1, geompy.ShapeType["FACE"], True)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( Bo_te_1, 'Boite_1' )
geompy.addToStudyInFather( Bo_te_1, Face_1, 'Face_1' )
geompy.addToStudyInFather( Bo_te_1, Face_2, 'Face_2' )
geompy.addToStudyInFather( Bo_te_1, Face_3, 'Face_3' )
geompy.addToStudyInFather( Bo_te_1, Face_4, 'Face_4' )
geompy.addToStudyInFather( Bo_te_1, Face_5, 'Face_5' )
geompy.addToStudyInFather( Bo_te_1, Face_6, 'Face_6' )

###
### SMESH component
###

import  SMESH, SALOMEDS
from salome.smesh import smeshBuilder

smesh = smeshBuilder.New(theStudy)
Maillage_1 = smesh.Mesh(Bo_te_1)
NETGEN_1D_2D_3D = Maillage_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
NETGEN_3D_Parameters_1.SetMaxSize( 10.641 )
NETGEN_3D_Parameters_1.SetSecondOrder( 1 )
NETGEN_3D_Parameters_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1.SetFineness( 2 )
NETGEN_3D_Parameters_1.SetMinSize( 0.34641 )
NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 0 )
NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
isDone = Maillage_1.Compute()
Group_1 = Maillage_1.GroupOnGeom(Face_1,'Group_1',SMESH.FACE)
Group_2 = Maillage_1.GroupOnGeom(Face_6,'Group_2',SMESH.FACE)

## Set names of Mesh objects
smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
smesh.SetName(Group_1, 'G_1')
smesh.SetName(Group_2, 'G_2')

Maillage_1.ExportMED(r'/home/dufaye/Code_Aster/CubeMED1.med', 0)
Maillage_1.ExportMED(r'/home/dufaye/Code_Aster/CubeMED2.med', 1)
Maillage_1.ExportMED(r'/home/dufaye/Code_Aster/CubeMED3.med', meshPart=Group_1)

Le script ci-dessus nommé Study2.py doit être interprété par Salome_meca et génère le fichier MED nécessaire au script suivant.

# Ecrire et lancer un calcul Code_Aster:
import os
os.system(./salome start -t ~/Code_Aster/Study2.py)
#%%1) Ecrire le fichier .comm au meme endroit que le maillage .med
calcul = open("calcul.comm",'w')
calcul.write(""""DEBUT()
mesh = LIRE_MAILLAGE(FORMAT='MED', UNITE=20)
model = AFFE_MODELE(
    AFFE=_F(MODELISATION=('3D', ), PHENOMENE='MECANIQUE', TOUT='OUI'),
    MAILLAGE=mesh
)
mater = DEFI_MATERIAU(ELAS_HYPER=_F(C10=0.1, K=1000000.0))
fieldmat = AFFE_MATERIAU(AFFE=_F(MATER=(mater, ), TOUT='OUI'), MODELE=model)
load = AFFE_CHAR_MECA(
    FACE_IMPO=_F(DX=0.0, DY=0.0, DZ=0.0, GROUP_MA=('Group_1', )), MODELE=model
)
Pression = AFFE_CHAR_MECA(
    FORCE_FACE=_F(FZ=-0.0005, GROUP_MA=('Group_2', )), MODELE=model
)
reslin = MECA_STATIQUE(
    CHAM_MATER=fieldmat,
    EXCIT=(_F(CHARGE=Pression), _F(CHARGE=load)),
    MODELE=model
)
IMPR_RESU(FORMAT='MED', RESU=_F(RESULTAT=reslin), UNITE=20)
FIN()""")

#%%2) Ecrire le fichier export en suivant l'exemple du nouvel Aster
export = open("export",'w')
export.write(""""P actions make_etude
P memjob 1048576
P memory_limit 1024.0
P mode interactif
P mpi_nbcpu 1
P mpi_nbnoeud 1
P ncpus
P nomjob RunCase_2_Stage_1
P origine AsterStudy 2017.0.1
P studyid 28402-0001-dufaye-Precision-3520
P time_limit 900.0
P tpsjob 16
P version stable
A memjeveux 128.0
A tpmax 900.0
F comm RunCase_2_Stage_1.comm D  1
F libr _ExportedFromSalomeObject_0_1_2_3.med D  20
F libr _ExportedFromSalomeObject_0_1_2_3.med R  20
F mess message R  6
R base base-stage1 RC 0
""")

#%%3) Lancer le fichier export
os.system("as_run /Code_Aster/Cube_Files/RunCase_2/Result_Stage_1/export")

Ce script "maitre" permet de lancer via Python la création des fichiers MED, .comm et export, puis lance le calcul via as_run.
Reste à rentrer ça dans ma boucle d'optimisation, qui pourra même comprendre un remaillage au besoin, impeccable.

Merci beaucoup pour votre aide, notamment Jean-Pierre pour ton livre qui m'a permis de tout structurer. Maintenant il me reste à étudier les lois de comportements hyperelastiques, les méthodes d'applications des conditions limites, et comment générer les résultats voulus. smile

Last edited by Groguiguy (2017-11-15 17:26:28)

Offline

#18 2017-11-15 18:13:34

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

Et non, ça n'était pas du tout mon premier calcul, juste le premier depuis mardi où j'avais installé la version AsterStudy 2017.0.2.

c'est assez curieux que les versions précédentes aient fonctionné sans blas

en ce qui concerne les scripts joints je dirais
effectivement on peut faire comme cela
et
pourquoi faire simple quand c'est si facile de faire compliqué

et je ne vois pas ou se trouve

- lire le déplacement d'un nœud précis dans le fichier résultat
- puis relancer le calcul avec de nouvelles valeurs de matériaux que j'ai choisi
- boucler jusqu'à mon critère d'arrêt.


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#19 2017-11-16 17:58:39

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

pourquoi faire simple quand c'est si facile de faire compliqué

Tu as des solutions plus simples? J'ai déjà l'impression que c'est assez simple ici, plus simple qu'avec Calculix ou Abaqus.

et je ne vois pas ou se trouve

- lire le déplacement d'un nœud précis dans le fichier résultat
    - puis relancer le calcul avec de nouvelles valeurs de matériaux que j'ai choisi
    - boucler jusqu'à mon critère d'arrêt.

Comme je le disais, il me reste la lecture des résultats à comprendre.
Mais je viens à l'instant de comprendre qu'en demandant un fichier de sortie au format IDEAS ou Result j'obtiens alors un fichier texte facilement analysable en python. Mais il faut encore que je comprenne bien ce que j'y demande, et comment le lire au mieux.

Du reste, comparer les résultats à des valeurs voulues, puis boucler avec de nouvelles valeurs matériaux (en réécrivant les matériaux dans le fichier .comm) je l'ai fait pour Abaqus et Calculix grâce à scipy.optimize.minimize en python.

Offline

#20 2017-11-16 21:56:14

sébastien meunier
Member
From: EDF Lab Les Renardières
Registered: 2007-12-02
Posts: 287

Re: Méthode inverse de Code_Aster avec Python

Bravo ! Joli travail pour quelqu'un qui découvre code_aster depuis peu de temps !
Pour information, concernant la lecture/écriture et manipulation de résultats au format MED, il existe la bibliothèque medcoupling embarquée dans Salome-Meca.
Bon courage !

Last edited by sébastien meunier (2017-11-16 21:58:21)


Sébastien Meunier - EDF Lab Les Renardières

Offline

#21 2017-11-17 07:22:15

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 4,049

Re: Méthode inverse de Code_Aster avec Python

je voulais juste dire que tout ce qui est fait là pourrait être fait
dans une ou plusieurs boucles dans in fichier .comm conventionnel
qui pourrait être lancé en un clic
ce fichier contiendrait un peu de Python à l'intérieur

il faut bien sur faire le maillage avant
celui qui est présenté en exemple est quand même très simple
cela ne vas pas être la même histoire avec des maillages de la vraie vie

ceci étant, comme le dit et comme le dit sébastien meunier c'est un très beau travail

pour ma part dans la vraie vie je ne passe jamais par l'interface Salome-meca
j'attaque un code_aster stand alone directement
les maillages et le post processing graphique sont fait sous Gmsh qui n'a rien à voir avec Salome-meca en terme de rapport prestation/effort pour y arriver


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#22 2017-11-17 10:33:10

Groguiguy
Member
From: Centrale Lille
Registered: 2017-11-07
Posts: 94

Re: Méthode inverse de Code_Aster avec Python

C'est effectivement un des problèmes que je vais devoir attaquer : le paramétrage du maillage pour l'appliquer à mon cas.

Pour information, concernant la lecture/écriture et manipulation de résultats au format MED, il existe la bibliothèque medcoupling embarquée dans Salome-Meca.

Merci de l'info, mais finalement j'écris les résultats dans un fichier texte, bien plus simple à traiter.

les maillages et le post processing graphique sont fait sous Gmsh qui n'a rien à voir avec Salome-meca en terme de rapport prestation/effort pour y arriver

C'est à dire? Tu as des conseils pour aboutir à l'écriture d'un maillage de qualité sous GMSH?

Mais là j'ai un problème plus urgent, car mon code ne sauvegarde pas le maillage!
En l'état mon code ressemble à ça :

# Ecrire le batch python pour faire le maillage Salome_meca et le lancer
import os

Cube_Python = open("Cube_Python.py","w")
Cube_Python.write("""
# -*- coding: utf-8 -*-

###
### This file is generated automatically by SALOME v8.3.0 with dump python functionality
###

import sys
import salome

salome.salome_init()
theStudy = salome.myStudy

import salome_notebook
notebook = salome_notebook.NoteBook(theStudy)
sys.path.insert( 0, r'/home/dufaye/Code_Aster')

###
### GEOM component
###

import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS


geompy = geomBuilder.New(theStudy)

O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
Bo_te_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
[Face_1,Face_2,Face_3,Face_4,Face_5,Face_6] = geompy.ExtractShapes(Bo_te_1, geompy.ShapeType["FACE"], True)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( Bo_te_1, 'Bo_te_1' )
geompy.addToStudyInFather( Bo_te_1, Face_1, 'Face_1' )
geompy.addToStudyInFather( Bo_te_1, Face_2, 'Face_2' )
geompy.addToStudyInFather( Bo_te_1, Face_3, 'Face_3' )
geompy.addToStudyInFather( Bo_te_1, Face_4, 'Face_4' )
geompy.addToStudyInFather( Bo_te_1, Face_5, 'Face_5' )
geompy.addToStudyInFather( Bo_te_1, Face_6, 'Face_6' )

###
### SMESH component
###

import  SMESH, SALOMEDS
from salome.smesh import smeshBuilder

smesh = smeshBuilder.New(theStudy)
Maillage_1 = smesh.Mesh(Bo_te_1)
NETGEN_1D_2D_3D = Maillage_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
NETGEN_3D_Parameters_1.SetMaxSize( 34.641 )
NETGEN_3D_Parameters_1.SetSecondOrder( 1 )
NETGEN_3D_Parameters_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1.SetFineness( 2 )
NETGEN_3D_Parameters_1.SetMinSize( 0.34641 )
NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 0 )
NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
isDone = Maillage_1.Compute()
Face_encast = Maillage_1.GroupOnGeom(Face_1,'Face_encast',SMESH.FACE)
Face_force = Maillage_1.GroupOnGeom(Face_6,'Face_force',SMESH.FACE)


## Set names of Mesh objects
smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
smesh.SetName(Face_encast, 'Face_encast')
smesh.SetName(Face_force, 'Face_force')
smesh.SetName(Maillage_1.GetMesh(), 'Maillage_1')


if salome.sg.hasDesktop():
  salome.sg.updateObjBrowser(True)               
""")
Cube_Python.close()
os.system("./salome start -t ~/Code_Aster/Cube_Python.py")

#%%1) Ecrire le fichier .comm au meme endroit que le maillage .med
Commande = open("Commande.comm",'w')
Commande.write(""""DEBUT()

mesh = LIRE_MAILLAGE(FORMAT='MED', UNITE=20)

model = AFFE_MODELE(
    AFFE=_F(MODELISATION=('3D', ), PHENOMENE='MECANIQUE', TOUT='OUI'),
    MAILLAGE=mesh
)

Graisse = DEFI_MATERIAU(ELAS=_F(E=0.45, NU=0.45))

fieldmat = AFFE_MATERIAU(
    AFFE=_F(MATER=(Graisse, ), TOUT='OUI'), MAILLAGE=mesh, MODELE=model
)

Encast = AFFE_CHAR_MECA(
    FACE_IMPO=_F(DX=0.0, DY=0.0, DZ=0.0, GROUP_MA=('Face_encast', )),
    MODELE=model
)

force = AFFE_CHAR_MECA(
    FORCE_FACE=_F(FX=1000.0, GROUP_MA=('Face_force', )), MODELE=model
)

reslin = MECA_STATIQUE(
    CHAM_MATER=fieldmat,
    EXCIT=(_F(CHARGE=force), _F(CHARGE=Encast)),
    MODELE=model
)

IMPR_RESU(FORMAT='RESULTAT', RESU=_F(MAILLAGE=mesh, RESULTAT=reslin), UNITE=10)

FIN()""")
Commande.close()

#%%2) Ecrire le fichier export en suivant l'exemple du nouvel Aster
export = open("export",'w')
export.write(""""P actions make_etude
P memjob 1048576
P memory_limit 1024.0
P mode interactif
P mpi_nbcpu 1
P mpi_nbnoeud 1
P ncpus
P nomjob RunCase_4_Stage_1
P origine AsterStudy 2017.0.2
P studyid 5549-0004-dufaye-Precision-3520
P time_limit 900.0
P tpsjob 16
P version stable
A memjeveux 128.0
A tpmax 900.0
F comm Commande.comm D  1
F libr _ExportedFromSalomeObject_0_1_2_3.med D  20
F libr Resultats_cube R  10
F mess message R  6
R base base-stage1 RC 0
""")
export.close()

#%%3) Lancer le fichier export
os.system("as_run /home/dufaye/Code_Aster/Cube_Files/RunCase_4/Result-Stage_1/export")

Cependant à la suite de cette commande os.system("./salome start -t ~/Code_Aster/Cube_Python.py") j'aimerai que Salome_meca crée le fichier .med, ce qui n'est pas le cas là. Bref, j'ai du boulot mais si vous connaissez la commande pour sauver le maillage je suis preneur! big_smile

EDIT : j'ai vu que page 291 de ton livre Jean-Pierre, tu donnais des conseils pour GMSH. smile

Last edited by Groguiguy (2017-11-17 10:43:26)

Offline

#23 2017-11-19 06:36:04

JGWagenfeld
Member
Registered: 2016-04-01
Posts: 30

Re: Méthode inverse de Code_Aster avec Python

L’opération "dump study" ne donne pas tout les commandes nécessaires. Si on passe par Python, il faut dire a SalomeMeca dexporter le maillage.

Completed_Mesh.ExportMED( r'  ici laddresse du fichier    ', 0)

puis, on doit référencer cette adresse dans le fichier .export

F libr  "Completed_Mesh.mmed" D  20


Salome a une bonne documentation pour l'interface avec python. Cest plus utile que le "dump study".

docs salome-platform org/latest/gui/SMESH/tui_creating_meshes_page html#tui_export_mesh

Pas exactement ce que vous voulez faire mais peut-être aussi intéressant c'est le dossier "Aster-Calc Section" qui utilise des boucles sur salome et aster pour calculer des sections poutre différentes.

github com/core-engineering/aster-calc-section/blob/master/Manager py

Last edited by JGWagenfeld (2017-11-19 06:53:58)

Offline