tag:linuxfr.org,2005:/tags/aster/public
LinuxFr.org : les contenus étiquetés avec « aster »
2018-01-06T22:23:01+01:00
/favicon.png
tag:linuxfr.org,2005:Diary/37690
2018-01-06T18:40:49+01:00
2018-01-06T18:40:49+01:00
Tutorial Code_Aster
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#code_aster-quest-ce-cest">Code_Aster, qu'est-ce c'est ?</a><ul>
<li><a href="#installation">Installation</a></li>
</ul>
</li>
<li>
<a href="#calcul-de-poutre">Calcul de Poutre</a><ul>
<li><a href="#cr%C3%A9ation-de-la-g%C3%A9om%C3%A9trie-avec-gmsh">Création de la géométrie avec Gmsh</a></li>
<li><a href="#fichier-de-commande">Fichier de commande</a></li>
<li><a href="#astk">Astk</a></li>
<li><a href="#r%C3%A9sultat">Résultat</a></li>
</ul>
</li>
<li><a href="#aller-plus-loin">Aller plus loin</a></li>
</ul><p>Bonjour Nal', une fois n'est pas coutume, il pleut en Haute-Garonne ! Alors j'ai tué le temps jetant un œil à Code Aster. Je laisse ici mes notes.</p>
<h2 id="code_aster-quest-ce-cest">Code_Aster, qu'est-ce c'est ?</h2>
<p><a href="https://www.code-aster.org/spip.php?rubrique1">Code_Aster</a> est un code de calcul de structure thermo-mécanique par la méthode des éléments finis isoparamétriques.<br>
Il est développé par EDF sous licence GNU/GPLv3.<br>
Il permet de faire à peu près tout ce qui est imaginable en mécanique, voir à ce propos-là <a href="https://www.code-aster.org/UPLOAD/DOC/Presentation/plaquette_aster_fr.pdf">plaquette de présentation</a></p>
<p>Ce code de calcul est intégré à la suite de logiciels libres Salomé-Méca, qui contient un préprocesseur, Code_Aster, et un post-processeur/vieweur pour voir les résultats.</p>
<p>Aujourd'hui, nous allons utiliser le code en version stand_alone, et nous utiliserons notre éditeur de texte préferé, gmsh, astk, puis de nouveau gmsh pour voir les résultats de nos calculs.</p>
<h3 id="installation">Installation</h3>
<p>Cela se passe <a href="https://www.code-aster.org/spip.php?rubrique7">ici</a>.<br>
Deux options:<br>
1. Soit on compile code_aster<br>
1. Soit on n'aime pas compiler et on télécharge le binaire de Salome-Méca qui contient code_aster de façon préinstallé, et quelques Gio d'outils dont ne nous servirons pas.</p>
<p>La compilation se passe assez bien, et les paquets prérequis (voir les instructions de compilation sur leur site) se trouvent assez facilement.</p>
<h2 id="calcul-de-poutre">Calcul de Poutre</h2>
<p>Nous allons étudier le comportement mécanique d'une poutre encastrée d'un côté et soumise à un effort ponctuel de l'autre côté:<br><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f36564e6b6b416232524163782f76556e4638493245397555512e706e67/vUnF8I2E9uUQ.png" alt="poutre_encastre" title="Source : https://framapic.org/6VNkkAb2RAcx/vUnF8I2E9uUQ.png"></p>
<p>Nous allons le faire de 3 façons:</p>
<ol>
<li>En modélisation poutre 1D</li>
<li>En modélisation plaque 2D</li>
<li>En modélisation complète 3D</li>
</ol><h3 id="création-de-la-géométrie-avec-gmsh">Création de la géométrie avec Gmsh</h3>
<p>Pour fonctionner, Code_Aster a besoin d'un fichier de commande, et d'un fichier décrivant un maillage: une liste de nœuds et une liste d'éléments reliant ces nœuds. On pourrait lui fournir un fichier texte contenant les coordonnées géométriques de chaque nœud du maillage, mais vu qu'on a la flemme et que cela peut être assez ennuyeux pour des problèmes complexes, on va demander à <a href="http://gmsh.info/">Gmsh</a> de le faire pour nous.</p>
<p>On crée tout d'abord la <strong>géométrie</strong> de notre problème à l'aides de points, de lignes, surfaces et volumes, on <strong>doit</strong> aussi définir des groupes d’intérêts (la poutre entière, la partie encastrée, et la partie sur laquelle on applique la force). On peut jouer 5 minutes avec la partie GUI de Gmsh pour lequel on trouvera de nombreux tutoriaux sur le web, mais on en revient vite à un fichier texte.</p>
<p>Voici donc poutre1d.geo:</p>
<pre><code class="python"><span class="o">//==</span> <span class="n">parametres</span> <span class="o">==</span>
<span class="o">//</span><span class="n">taille</span> <span class="n">maillage</span> <span class="n">autour</span> <span class="n">des</span> <span class="n">noeuds</span><span class="o">.</span> <span class="mf">2.5</span><span class="n">mm</span> <span class="n">entre</span> <span class="n">deux</span> <span class="n">noeuds</span><span class="o">.</span>
<span class="n">cl__1</span> <span class="o">=</span> <span class="mf">2.5</span><span class="p">;</span>
<span class="o">//</span> <span class="o">==</span> <span class="n">geometrie</span> <span class="o">==</span>
<span class="o">//</span><span class="n">points</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span> <span class="o">//</span> <span class="n">extremite</span> <span class="n">encastre</span> <span class="n">de</span> <span class="n">ma</span> <span class="n">poutre</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">100</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span> <span class="o">//</span> <span class="n">extremite</span> <span class="n">libre</span> <span class="n">de</span> <span class="n">ma</span> <span class="n">poutre</span><span class="p">,</span> <span class="n">soumise</span> <span class="err">à</span> <span class="n">une</span> <span class="n">force</span>
<span class="o">//</span><span class="n">lignes</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">};</span> <span class="o">//</span> <span class="n">on</span> <span class="n">cree</span> <span class="n">la</span> <span class="n">ligne</span> <span class="n">entre</span> <span class="n">Point1</span> <span class="n">et</span> <span class="n">Point2</span>
<span class="o">//==</span> <span class="n">groupe</span> <span class="o">==</span>
<span class="n">Physical</span> <span class="n">Point</span><span class="p">(</span><span class="s2">"encastr"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span>
<span class="o">//</span> <span class="n">on</span> <span class="n">encastrera</span> <span class="n">le</span> <span class="n">noeud</span> <span class="n">correspondant</span> <span class="err">à</span> <span class="n">ce</span> <span class="n">point</span>
<span class="n">Physical</span> <span class="n">Point</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">2</span><span class="p">};</span>
<span class="o">//</span><span class="n">on</span> <span class="n">appliquera</span> <span class="n">la</span> <span class="n">force</span> <span class="n">sur</span> <span class="n">le</span> <span class="n">noeud</span> <span class="n">correspondant</span> <span class="err">à</span> <span class="n">ce</span> <span class="n">point</span>
<span class="n">Physical</span> <span class="n">Line</span> <span class="p">(</span><span class="s2">"poutre"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span>
<span class="o">//</span> <span class="n">notre</span> <span class="n">poutre</span> <span class="n">sera</span> <span class="n">constitue</span> <span class="n">des</span> <span class="n">tous</span> <span class="n">les</span> <span class="n">noeuds</span> <span class="n">et</span> <span class="n">elements</span> <span class="n">correspondant</span> <span class="err">à</span> <span class="n">cette</span> <span class="n">ligne</span></code></pre>
<p>Une fois ce fichier poutre1d.geo crée, on l'ouvre avec gmsh (Terminal: gmsh poutre1d.geo)<br>
On clique sur <em>Mesh</em> > <em>1D</em>, le maillage est fait, mais on ne le voit pas car seul la géometrie est affichée ! Donc <em>Tools</em> > <em>Options</em>, Onglet <em>Visibily</em> de Géometrie, on décoche <em>Points</em> et <em>Lines</em> et dans Mesh, on coche <em>Nodes</em> and <em>Lines</em>. Cela donne ceci:</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f73426e796e48564c6c4278482f594e4b5836537854486e647a2e706e67/YNKX6SxTHndz.png" alt="maillage1d" title="Source : https://framapic.org/sBnynHVLlBxH/YNKX6SxTHndz.png"></p>
<p>Notez qu'avec <em>Tools</em> > <em>Options</em>, dans l'onglet <em>list bowser</em>, on peut visualiser/désafficher (toucher enter du clavier une fois cliqué sur le nom du groupe dans la fenêtre) les groupes que nous avons crée et leurs affectations. C'est très pratique. On voit par exemple bien que notre groupe "poutre" est constitué de tous les éléments de la poutre.</p>
<p>Pour sauvegarder notre maillage, on fait <em>File</em> > <em>Export</em> et on choisit le format de maillage appelé .MED, on obtient donc un beau mesh1d.med. <strong>Surtout</strong>, on veille à ce que tout soit décoché dans la fenêtre pop-up qui apparaît et on clique rapidement sur <em>OK</em>.</p>
<p>De même, voici poutre2d.geo, qu'on maille en 2D avec gmsh:</p>
<pre><code class="python"><span class="o">//==</span> <span class="n">parametres</span><span class="p">:</span> <span class="o">==</span>
<span class="o">//</span><span class="n">taille</span> <span class="n">maillage</span> <span class="n">autour</span> <span class="n">des</span> <span class="n">noeuds</span><span class="o">.</span> <span class="mf">2.5</span><span class="n">mm</span> <span class="n">entre</span> <span class="n">deux</span> <span class="n">noeuds</span><span class="o">.</span>
<span class="n">cl__1</span> <span class="o">=</span> <span class="mf">2.5</span><span class="p">;</span>
<span class="n">L</span><span class="o">=</span><span class="mi">100</span><span class="p">;</span> <span class="o">//</span><span class="n">longeur</span> <span class="n">poutre</span> <span class="n">de</span> <span class="mi">100</span><span class="n">mm</span>
<span class="n">R</span><span class="o">=</span><span class="mi">5</span><span class="p">;</span> <span class="o">//</span> <span class="n">ratio</span> <span class="n">longueur</span><span class="o">/</span><span class="n">largeur</span>
<span class="n">l</span><span class="o">=</span><span class="n">L</span><span class="o">/</span><span class="n">R</span><span class="p">;</span>
<span class="o">//==</span> <span class="n">geometrie</span> <span class="o">==</span>
<span class="o">//</span><span class="n">points</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span> <span class="n">l</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="o">//</span><span class="n">lignes</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">};</span>
<span class="o">//</span><span class="n">surface</span>
<span class="n">Line</span> <span class="n">Loop</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">};</span> <span class="o">//</span><span class="n">on</span> <span class="n">cree</span> <span class="n">une</span> <span class="n">boucle</span> <span class="n">de</span> <span class="n">lignes</span>
<span class="n">Plane</span> <span class="n">Surface</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span> <span class="o">//</span> <span class="n">on</span> <span class="n">cr</span><span class="err">é</span><span class="n">e</span> <span class="n">une</span> <span class="n">surface</span> <span class="err">à</span> <span class="n">partir</span> <span class="n">de</span> <span class="n">la</span> <span class="n">boucle</span>
<span class="o">//==</span> <span class="n">groupe</span> <span class="o">==</span>
<span class="n">Physical</span> <span class="n">Line</span><span class="p">(</span><span class="s2">"encastr"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">5</span><span class="p">};</span> <span class="o">//</span> <span class="n">on</span> <span class="n">encastrera</span> <span class="n">cette</span> <span class="n">ligne</span>
<span class="n">Physical</span> <span class="n">Point</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">5</span><span class="p">};</span> <span class="o">//</span> <span class="n">lieu</span> <span class="n">application</span> <span class="n">force</span>
<span class="n">Physical</span> <span class="n">Surface</span><span class="p">(</span><span class="s2">"poutre"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span> <span class="o">//</span> <span class="n">notre</span> <span class="n">poutre</span> <span class="mi">2</span><span class="n">d</span></code></pre>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f5252706755754e64624a54682f4b347857696837637a5439312e706e67/K4xWih7czT91.png" alt="maillage2d" title="Source : https://framapic.org/RRpgUuNdbJTh/K4xWih7czT91.png"></p>
<p>Et poutre3d.geo qu'on mesh en 3D avec gmsh:</p>
<pre><code class="python"><span class="o">//==</span> <span class="n">param</span><span class="err">è</span><span class="n">tres</span><span class="p">:</span> <span class="o">==</span>
<span class="o">//</span><span class="n">taille</span> <span class="n">maillage</span> <span class="n">autour</span> <span class="n">des</span> <span class="n">noeuds</span><span class="o">.</span>
<span class="n">cl__1</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="n">L</span><span class="o">=</span><span class="mi">100</span><span class="p">;</span> <span class="o">//</span><span class="n">longeur</span> <span class="n">poutre</span>
<span class="n">R</span><span class="o">=</span><span class="mi">5</span><span class="p">;</span> <span class="o">//</span> <span class="n">ratio</span> <span class="n">longueur</span><span class="o">/</span><span class="n">largeur</span>
<span class="n">l</span><span class="o">=</span><span class="n">L</span><span class="o">/</span><span class="mi">5</span><span class="p">;</span>
<span class="o">//==</span> <span class="n">geometrie</span> <span class="o">==</span>
<span class="o">//</span><span class="n">points</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span><span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="n">l</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="n">L</span><span class="p">,</span> <span class="n">l</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cl__1</span><span class="p">};</span>
<span class="o">//</span><span class="n">lignes</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">};</span>
<span class="n">Line</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">};</span>
<span class="o">//</span><span class="n">surface</span>
<span class="n">Line</span> <span class="n">Loop</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">};</span>
<span class="n">Plane</span> <span class="n">Surface</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span>
<span class="n">Point</span><span class="p">{</span><span class="mi">5</span><span class="p">}</span> <span class="n">In</span> <span class="n">Surface</span><span class="p">{</span><span class="mi">1</span><span class="p">};</span> <span class="o">//</span> <span class="n">pour</span> <span class="n">que</span> <span class="n">le</span> <span class="n">point</span> <span class="mi">5</span> <span class="n">soit</span> <span class="n">contenu</span> <span class="n">dans</span> <span class="n">la</span> <span class="n">surface</span>
<span class="o">//</span><span class="n">volume</span>
<span class="n">Extrude</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">3</span><span class="p">}{</span><span class="n">Surface</span><span class="p">{</span><span class="mi">1</span><span class="p">};</span><span class="n">Layers</span><span class="p">{</span><span class="mi">3</span><span class="p">};</span> <span class="n">Recombine</span><span class="p">;}</span>
<span class="o">//</span><span class="n">on</span> <span class="n">extdure</span> <span class="n">la</span> <span class="n">surface</span> <span class="mi">1</span> <span class="n">de</span> <span class="o">-</span><span class="mi">3</span><span class="n">mm</span> <span class="n">selon</span> <span class="n">l</span><span class="s1">''</span><span class="n">axe</span> <span class="n">Z</span>
<span class="o">//</span><span class="n">en</span> <span class="n">cr</span><span class="err">é</span><span class="n">ant</span> <span class="mi">3</span> <span class="err">é</span><span class="n">l</span><span class="err">é</span><span class="n">ments</span> <span class="n">dans</span> <span class="n">l</span><span class="s1">''</span><span class="err">é</span><span class="n">paiseur</span> <span class="n">avec</span> <span class="n">l</span><span class="s1">''</span><span class="n">aide</span> <span class="n">de</span> <span class="n">layers</span>
<span class="o">//==</span> <span class="n">groupe</span> <span class="o">==</span>
<span class="o">//</span><span class="n">on</span> <span class="n">sait</span> <span class="n">que</span> <span class="n">c</span><span class="s1">''</span><span class="n">est</span> <span class="n">la</span> <span class="n">surface</span> <span class="mi">25</span> <span class="n">parce</span> <span class="n">qu</span><span class="s1">''</span><span class="n">on</span> <span class="n">le</span> <span class="n">visualise</span> <span class="n">sous</span> <span class="n">gmsh</span> <span class="n">en</span> <span class="n">affichant</span> <span class="s2">"surface label"</span><span class="o">.</span>
<span class="o">//</span><span class="n">il</span> <span class="n">peut</span> <span class="n">y</span> <span class="n">avoir</span> <span class="n">une</span> <span class="n">erreur</span> <span class="n">lors</span> <span class="n">de</span> <span class="n">l</span><span class="s1">''</span><span class="kn">import</span> <span class="nn">si</span> <span class="nn">le</span> <span class="nn">num</span><span class="err">é</span><span class="n">ro</span> <span class="n">de</span> <span class="n">la</span> <span class="n">surface</span> <span class="n">cr</span><span class="err">é</span><span class="n">e</span> <span class="n">par</span> <span class="n">l</span><span class="s1">''</span><span class="n">extrusion</span> <span class="n">n</span><span class="s1">''</span><span class="n">est</span> <span class="n">pas</span> <span class="mf">25.</span><span class="s1">'</span>
<span class="o">//</span> <span class="n">C</span><span class="s1">''</span><span class="n">est</span> <span class="n">pas</span> <span class="n">grave</span><span class="p">,</span> <span class="n">on</span> <span class="n">regarde</span> <span class="err">à</span> <span class="n">quoi</span> <span class="n">correspond</span> <span class="n">la</span> <span class="n">surface</span> <span class="err">à</span> <span class="n">encastrer</span><span class="p">,</span> <span class="n">on</span> <span class="n">trouve</span> <span class="n">son</span> <span class="n">label</span><span class="p">,</span> <span class="n">et</span> <span class="n">mon</span> <span class="n">modifie</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">ci</span><span class="o">-</span><span class="n">dessous</span><span class="o">.</span>
<span class="n">Physical</span> <span class="n">Surface</span><span class="p">(</span><span class="s2">"encastr"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">25</span><span class="p">};</span> <span class="o">//</span> <span class="n">on</span> <span class="n">encastrera</span> <span class="n">cette</span> <span class="n">surface</span>
<span class="n">Physical</span> <span class="n">Point</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">5</span><span class="p">};</span> <span class="o">//</span> <span class="n">lieu</span> <span class="n">application</span> <span class="n">force</span>
<span class="n">Physical</span> <span class="n">Volume</span><span class="p">(</span><span class="s2">"poutre"</span><span class="p">)</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">};</span> <span class="o">//</span> <span class="n">notre</span> <span class="n">poutre</span> <span class="mi">3</span><span class="n">d</span>
<span class="o">//==</span> <span class="n">mailage</span> <span class="o">==</span>
<span class="n">Transfinite</span> <span class="n">Line</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">}</span><span class="o">=</span><span class="mi">8</span><span class="o">*</span><span class="n">R</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span> <span class="o">//</span> <span class="mi">8</span><span class="o">*</span><span class="n">R</span> <span class="err">é</span><span class="n">lem</span> <span class="n">dans</span> <span class="n">la</span> <span class="n">longueur</span> <span class="o">=</span> <span class="mi">41</span> <span class="n">noeuds</span> <span class="n">entre</span> <span class="n">lignes</span> <span class="mi">1</span> <span class="n">et</span> <span class="mi">3</span>
<span class="n">Transfinite</span> <span class="n">Line</span><span class="p">{</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">}</span><span class="o">=</span><span class="mi">8</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span> <span class="o">//</span> <span class="mi">8</span> <span class="err">é</span><span class="n">lem</span> <span class="n">dans</span> <span class="n">la</span> <span class="n">largeur</span> <span class="o">=</span> <span class="mi">9</span> <span class="n">noeuds</span> <span class="n">entre</span> <span class="n">lignes</span> <span class="mi">4</span> <span class="n">et</span> <span class="mi">2</span>
<span class="n">Transfinite</span> <span class="n">Surface</span> <span class="s2">"*"</span><span class="p">;</span> <span class="o">//</span> <span class="n">on</span> <span class="n">veut</span> <span class="n">un</span> <span class="n">maillage</span> <span class="n">propre</span>
<span class="n">Recombine</span> <span class="n">Surface</span> <span class="s2">"*"</span><span class="p">;</span> <span class="o">//</span> <span class="n">on</span> <span class="n">veut</span> <span class="n">un</span> <span class="n">maillage</span> <span class="n">quadra</span></code></pre>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f56315a7a3763467037334c6b2f3339305739764b52526850342e706e67/390W9vKRRhP4.png" alt="maillage3d" title="Source : https://framapic.org/V1Zz7cFp73Lk/390W9vKRRhP4.png"></p>
<p>Nous voici maintenant avec 3 maillages au format.med Il nous faut maitenant créer notre fichier de commande !</p>
<h3 id="fichier-de-commande">Fichier de commande</h3>
<pre><code class="python"><span class="c1">#U1.03.02</span>
<span class="n">DEBUT</span><span class="p">();</span>
<span class="c1">#on charge le fichier de maillage .MED, unité logique 20</span>
<span class="n">mesh</span><span class="o">=</span><span class="n">LIRE_MAILLAGE</span><span class="p">(</span>
<span class="n">INFO</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">INFO_MED</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">UNITE</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
<span class="n">FORMAT</span><span class="o">=</span><span class="s1">'MED'</span><span class="p">,</span>
<span class="p">);</span>
<span class="c1">#on a importé le maillage et ses groupes, on crée d'autres groupes:</span>
<span class="n">mesh</span><span class="o">=</span><span class="n">DEFI_GROUP</span><span class="p">(</span>
<span class="n">reuse</span> <span class="o">=</span><span class="n">mesh</span><span class="p">,</span>
<span class="n">INFO</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">MAILLAGE</span><span class="o">=</span><span class="n">mesh</span><span class="p">,</span>
<span class="c1">#on crée un groupe nommé TOUT qui contient toutes les mailles du maillage.</span>
<span class="c1">#on ne va pas s'en servir, mais ça peut être utile</span>
<span class="n">CREA_GROUP_MA</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span><span class="n">NOM</span><span class="o">=</span><span class="s1">'TOUT'</span><span class="p">,</span><span class="n">TOUT</span><span class="o">=</span><span class="s1">'OUI'</span><span class="p">,),</span>
<span class="c1">#on grée un groupe de noeud qui contient tous les noeuds de toutes les mailles.</span>
<span class="c1"># Il faut le faire quand le maillage provient de Gmsh, car Gmsh transforme les noeuds en maille, on les retransforme ici en noeud</span>
<span class="n">CREA_GROUP_NO</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span><span class="n">TOUT_GROUP_MA</span><span class="o">=</span><span class="s1">'OUI'</span><span class="p">,),</span>
<span class="p">);</span>
<span class="c1">#on affecte au groupe de maille 'poutre' crée avec gmsh,</span>
<span class="c1"># des éléments finis de types Poutre, ici POU_D_T</span>
<span class="n">model</span><span class="o">=</span><span class="n">AFFE_MODELE</span><span class="p">(</span>
<span class="n">MAILLAGE</span><span class="o">=</span><span class="n">mesh</span><span class="p">,</span>
<span class="n">AFFE</span><span class="o">=</span><span class="p">(</span>
<span class="n">_F</span><span class="p">(</span>
<span class="n">GROUP_MA</span><span class="o">=</span><span class="p">(</span><span class="s1">'poutre'</span><span class="p">,),</span>
<span class="n">PHENOMENE</span><span class="o">=</span><span class="s1">'MECANIQUE'</span><span class="p">,</span>
<span class="n">MODELISATION</span><span class="o">=</span><span class="s1">'POU_D_T'</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="p">);</span>
<span class="c1">#on définit un matériaux, ici de l''acier:</span>
<span class="c1"># Module d'Young' E = 210000 N/mm2</span>
<span class="c1"># Coefficient de Poisson, nu = 0.3</span>
<span class="c1"># masse volumique = 8e-9 tonne/mm3</span>
<span class="n">steel</span><span class="o">=</span><span class="n">DEFI_MATERIAU</span><span class="p">(</span><span class="n">ELAS</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span><span class="n">E</span><span class="o">=</span><span class="mf">210000.</span><span class="p">,</span><span class="n">NU</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span><span class="n">RHO</span><span class="o">=</span><span class="mf">8e-9</span><span class="p">),);</span>
<span class="c1">#U4.43.03</span>
<span class="c1">#on assigne notre matériaux à nos mailles du groupe 'poutre'</span>
<span class="n">material</span><span class="o">=</span><span class="n">AFFE_MATERIAU</span><span class="p">(</span>
<span class="n">MAILLAGE</span><span class="o">=</span><span class="n">mesh</span><span class="p">,</span>
<span class="n">AFFE</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span><span class="n">GROUP_MA</span><span class="o">=</span><span class="p">(</span><span class="s1">'poutre'</span><span class="p">,),</span> <span class="n">MATER</span><span class="o">=</span><span class="n">steel</span><span class="p">,),</span>
<span class="p">);</span>
<span class="c1">#U4.42.01</span>
<span class="c1">#On assigne à nos éléments poutre POU_D_T une section rectangulaire de largeur 20mm et d'épaisseur 3mm</span>
<span class="n">elemcar</span><span class="o">=</span><span class="n">AFFE_CARA_ELEM</span><span class="p">(</span>
<span class="n">MODELE</span><span class="o">=</span><span class="n">model</span><span class="p">,</span>
<span class="n">INFO</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">POUTRE</span><span class="o">=</span><span class="p">(</span>
<span class="n">_F</span><span class="p">(</span>
<span class="n">GROUP_MA</span><span class="o">=</span><span class="p">(</span><span class="s1">'poutre'</span><span class="p">,),</span>
<span class="n">SECTION</span><span class="o">=</span><span class="s1">'RECTANGLE'</span><span class="p">,</span>
<span class="n">CARA</span><span class="o">=</span><span class="p">(</span><span class="s1">'HY'</span><span class="p">,</span><span class="s1">'HZ'</span><span class="p">,),</span>
<span class="n">VALE</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">20</span><span class="p">),</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="p">);</span>
<span class="c1">#on interdit toutes rotations et translations aux noeuds du groupe 'encastr' (1 seul noeud ici).</span>
<span class="c1"># cela simule l'encastrement</span>
<span class="n">encast</span><span class="o">=</span><span class="n">AFFE_CHAR_MECA</span><span class="p">(</span>
<span class="n">MODELE</span><span class="o">=</span><span class="n">model</span><span class="p">,</span>
<span class="n">DDL_IMPO</span><span class="o">=</span><span class="p">(</span>
<span class="n">_F</span><span class="p">(</span>
<span class="n">GROUP_NO</span><span class="o">=</span><span class="p">(</span><span class="s1">'encastr'</span><span class="p">,),</span>
<span class="n">DX</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">DY</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">DZ</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">DRX</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">DRY</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">DRZ</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="n">INFO</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="p">);</span>
<span class="c1"># on applique 500N selon la direction -Z au noeud de notre groupe 'force'</span>
<span class="n">force_f</span><span class="o">=</span><span class="n">AFFE_CHAR_MECA</span><span class="p">(</span>
<span class="n">MODELE</span><span class="o">=</span><span class="n">model</span><span class="p">,</span>
<span class="n">FORCE_NODALE</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span>
<span class="n">GROUP_NO</span><span class="o">=</span><span class="p">(</span><span class="s1">'force'</span><span class="p">,),</span>
<span class="n">FZ</span><span class="o">=-</span><span class="mi">500</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">INFO</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">);</span>
<span class="c1">#U4.51.01</span>
<span class="c1">#on compile les précédents concepts pour le calcul</span>
<span class="n">stat</span><span class="o">=</span><span class="n">MECA_STATIQUE</span><span class="p">(</span>
<span class="n">MODELE</span><span class="o">=</span><span class="n">model</span><span class="p">,</span>
<span class="n">CHAM_MATER</span><span class="o">=</span><span class="n">material</span><span class="p">,</span>
<span class="n">CARA_ELEM</span><span class="o">=</span><span class="n">elemcar</span><span class="p">,</span>
<span class="n">EXCIT</span><span class="o">=</span><span class="p">(</span>
<span class="n">_F</span><span class="p">(</span><span class="n">CHARGE</span><span class="o">=</span><span class="n">encast</span><span class="p">,),</span>
<span class="n">_F</span><span class="p">(</span><span class="n">CHARGE</span><span class="o">=</span><span class="n">force_f</span><span class="p">,),</span>
<span class="p">),</span>
<span class="p">);</span>
<span class="c1"># Par défaut, sont calculés uniquement les déplacements et les réactions nodales aux points de gauss des éléments, je crois.</span>
<span class="c1"># du coup on enrichit le concept "stat" pour lui demander d'autres choses.</span>
<span class="c1"># SIEF_ELNO: ici, efforts théorie des poutres au niveau des nœuds des éléments</span>
<span class="c1"># SIPO_ELNO: ici, contraintes dans la poutre, au niveau des nœuds des éléments</span>
<span class="c1"># SIPM_ELNO: ici, contrainte max dans la poutre</span>
<span class="c1"># REAC_NODA: forces/moments aux nœuds limites</span>
<span class="n">stat</span><span class="o">=</span><span class="n">CALC_CHAMP</span><span class="p">(</span>
<span class="n">reuse</span> <span class="o">=</span><span class="n">stat</span><span class="p">,</span>
<span class="n">RESULTAT</span><span class="o">=</span><span class="n">stat</span><span class="p">,</span>
<span class="n">CONTRAINTE</span><span class="o">=</span><span class="p">(</span>
<span class="s1">'SIEF_ELNO'</span><span class="p">,</span><span class="s1">'SIPO_ELNO'</span><span class="p">,</span><span class="s1">'SIPM_ELNO'</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">FORCE</span><span class="o">=</span><span class="p">(</span><span class="s1">'REAC_NODA'</span><span class="p">,),</span>
<span class="p">);</span>
<span class="c1">#on imprime ça dans un fichier de sortie .med, unité logique 80.</span>
<span class="c1">#on n'imprime que les déplacements et les contraintes</span>
<span class="c1"># (on n'affiche pas tout ce qu'on a calculé, genre SIPM_ELNO ou REAC_NODA pourquoi pas !)</span>
<span class="n">IMPR_RESU</span><span class="p">(</span>
<span class="n">FORMAT</span><span class="o">=</span><span class="s1">'MED'</span><span class="p">,</span>
<span class="n">UNITE</span><span class="o">=</span><span class="mi">80</span><span class="p">,</span>
<span class="n">RESU</span><span class="o">=</span><span class="n">_F</span><span class="p">(</span>
<span class="n">RESULTAT</span><span class="o">=</span><span class="n">stat</span><span class="p">,</span>
<span class="n">NOM_CHAM</span><span class="o">=</span><span class="p">(</span>
<span class="s1">'DEPL'</span><span class="p">,</span>
<span class="s1">'SIPO_ELNO'</span><span class="p">,</span>
<span class="s1">'SIPM_ELNO'</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="p">);</span>
<span class="n">FIN</span><span class="p">();</span></code></pre>
<p>(Notez que les #U4.51.01 ou autres renvoient à la documentation )<br>
On enregistre ce fichier texte en 1d.comm par exemple, et nous allons lancer le calcul à l'aider d'astk.</p>
<h3 id="astk">Astk</h3>
<p>Astk est l'outil permettant de mener à bien un calcul, on le lance via /opt/code_aster/bin/astk (si vous avez installé code_aster dans /opt/).</p>
<p>On cherche à obtenir une fenêtre qui a cette allure :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f504b745632394b54587a59662f614d6549467a76757a6850642e706e67/aMeIFzvuzhPd.png" alt="astk" title="Source : https://framapic.org/PKtV29KTXzYf/aMeIFzvuzhPd.png"></p>
<p>Ensuite :<br>
- <em>File</em> -> <em>New</em><br>
- on choisit notre <em>path</em> / dossier de travail<br>
- dans la colonne d'icônes au milieu à droite, on clique sur l’icône en forme de dossier bleu, pour aller chercher son mesh1d.med et son 1d.comm<br>
- on clique sur l’icône du dessus pour ajouter deux lignes, puis dans <em>type</em> pour la ligne, on choisit <em>mess</em> et <em>rmed</em>, dans <em>name</em> on les appels ./log1d.mess et ./resu1d.rmed<br>
- <em>File</em> -> <em>Save_As</em> -> 1d.astk</p>
<p>La colonne LU correspond à Logique Unité, c'est l'endroit de la mémoire où je ne sais quoi où on s'attend à trouver le fichier, dans le fichier.comm on a précisé que l'unité logique était 20 pour le maillage .med et 80 pour le résultat .med<br>
Les colonnes DRC veulent dire Datas, Récrire, Compressé.</p>
<p>Une fois que cela est fait on clique sur <em>Run</em> ! Le calcul est lancé, il se termine, on va voir le log1d.mess qui a était crée, il contient toutes les infos relatives au calcul.<br>
L'information la plus importante étant la dernière ligne.</p>
<p>Chez moi j'ai: EXECUTION_CODE_ASTER_EXIT_13223-localhost=0<br>
Si le code renvoit 0, c'est que cela a fonctionné ! S'il renvoit 1, c'est que ça a planté et qu'il faut débuger…</p>
<h3 id="résultat">Résultat</h3>
<p>Normalement tout a fonctionné, nous avons un beau resu1d.rmed que nous ouvrons aves gmsh (Terminal gmsh resu1d.rmed)</p>
<p>On peut donc voir les déplacements et la contrainte, tout ce dont a besoin un mécanicien pour dimenssionner des systèmes mécaniques !</p>
<p>Voici les paramètres sur lequels agir pour afficher le déplacement multiplié par 10. Il faut afficher des <em>Vectors</em> et non pas l'<em>Original Field</em>. Comme ci-dessous:</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f766472415564686a334a62482f4850384e35723549554134662e706e67/HP8N5r5IUA4f.png" alt="gmsh poutre 1d" title="Source : https://framapic.org/vdrAUdhj3JbH/HP8N5r5IUA4f.png"></p>
<p>Pour les contraintes, SIPO_ELNO contient la contribution de chaque force/moment aux contraintes de la poutre.</p>
<p>C'est grossomodo un vecteur de 6 composantes que voici:</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f72696a6a73576f4c784265522f597a4f5972496a596d674e312e706e67/YzOYrIjYmgN1.png" alt="contraintes" title="Source : https://framapic.org/rijjsWoLxBeR/YzOYrIjYmgN1.png"></p>
<p>Pour les afficher une par une, on se place dans Options > Visibility > et, en bas, la première case à droite de la liste déroulante Original Field/Scalar Force/Vector/Tensor. 0 Correspond à SN et 5 correspond à SNT, par rapport au tableau ci-dessus. (Je ne sais pas trop ce que présente SIPO_ELNO par défaut)</p>
<p>SIPM_ELNO quant à lui présente par défaut la contrainte maximum selon XX.</p>
<p>Voici d'autre visu avec les modèles 2D et 3D:</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f5043594f4d3249574961327a2f655848786d4e494e446b48792e706e67/eXHxmNINDkHy.png" alt="2d_vmises" title="Source : https://framapic.org/PCYOM2IWIa2z/eXHxmNINDkHy.png"><br><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f7836533748696a31493367782f4f515a674856485a31306e4d2e706e67/OQZgHVHZ10nM.png" alt="3d_déplacement" title="Source : https://framapic.org/x6S7Hij1I3gx/OQZgHVHZ10nM.png"><br><img src="//img.linuxfr.org/img/68747470733a2f2f6672616d617069632e6f72672f697341634e306946704557752f364f55534c586164386f455a2e706e67/6OUSLXad8oEZ.png" alt="3d_vmises" title="Source : https://framapic.org/isAcN0iFpEWu/6OUSLXad8oEZ.png"></p>
<h2 id="aller-plus-loin">Aller plus loin</h2>
<p>Code_Aster est très vaste, il contient près de 400 types d'éléments finis ! Pour aller plus loin, n'hésitez pas à lire la <a href="https://www.code-aster.org/spip.php?rubrique5">doc</a>, qui contient aussi des <a href="https://www.code-aster.org/V2/doc/v13/fr/index.php?man=V4">exemples</a> de calcul qui sont livrés avec le code.</p>
<p>Je vous conseille aussi notamment l'excellent livre sous licence libre de <a href="https://framabook.org/docs/Code_Aster/beginning_with_Code_Aster_JPAubry_20131206.pdf">Jean-Pierre Aubry</a>, qui est un passage obligatoire pour prendre en main le code ! (Le code date par contre de la version 11 de Code_Aster, mais une nouvelle version est en cours d'écriture !)<br>
On y fait notamment des analyses non-linéaires avec du contact entre pièces et du frottement.<br><a href="https://www.youtube.com/watch?v=BsaTZpJta3Y">Aster Study</a> vient aussi de faire son apparition.</p>
<p>Voilou cher journal, n'hésite pas à t'amuser !</p>
<p>Je poste en commentaire à ce journal les fichiers .comm de calcul en 2D et 3D.</p><div><a href="https://linuxfr.org/users/joalland/journaux/tutorial-code_aster.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113462/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/joalland/journaux/tutorial-code_aster#comments">ouvrir dans le navigateur</a>
</p>
Joalland
https://linuxfr.org/nodes/113462/comments.atom