FEM Mesh/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "Ajoutez un volume avec le numéro d'élément.")
No edit summary
 
(46 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{TOCright}}
== Créer un FEM Mesh ==

<span id="Create_a_finite_element_mesh"></span>
==Créer un maillage à éléments finis==

L'analyse par éléments finis (FEA) est effectuée sur un maillage composé de multiples éléments triangulaires et quadrilatéraux qui subdivisent le corps d'origine. Plus le maillage est raffiné, plus les résultats numériques seront précis, mais le temps de calcul sera également plus long. Un équilibre entre la taille du maillage, le temps de calcul et la précision des résultats est une caractéristique importante d'une analyse par éléments finis bien définie.
L'analyse par éléments finis (FEA) est effectuée sur un maillage composé de multiples éléments triangulaires et quadrilatéraux qui subdivisent le corps d'origine. Plus le maillage est raffiné, plus les résultats numériques seront précis, mais le temps de calcul sera également plus long. Un équilibre entre la taille du maillage, le temps de calcul et la précision des résultats est une caractéristique importante d'une analyse par éléments finis bien définie.


Il existe différentes possibilités pour configurer un maillage dans l'[[FEM Workbench/fr|atelier FEM]] :
Il existe différentes possibilités pour configurer un maillage dans l'[[FEM_Workbench/fr|atelier FEM]] :
* L'[[FEM MeshGmshFromShape/fr|outil Gmsh]] de l'interface utilisateur graphique.
* L'[[FEM_MeshGmshFromShape/fr|outil Gmsh]] de l'interface utilisateur graphique.
* L'[[FEM MeshNetgenFromShape/fr|outil Netgen]] à partir de l'interface graphique.
* L'[[FEM_MeshNetgenFromShape/fr|outil Netgen]] à partir de l'interface graphique.
* Importer un maillage depuis un autre programme. En particulier, Gmsh et Netgen peuvent être utilisés seuls en dehors de FreeCAD pour mailler des corps solides tels que des fichiers Step.
* Importer un maillage depuis un autre programme. En particulier, Gmsh et Netgen peuvent être utilisés seuls en dehors de FreeCAD pour mailler des corps solides tels que des fichiers Step.
* Créer manuellement le maillage à l'aide de scripts [[Python/fr|Python]].
* Créer manuellement le maillage à l'aide de scripts [[Python/fr|Python]].


Les outils Gmsh et Netgen prennent en charge les corps de maillage créés avec les ateliers [[Part Workbench/fr|Part]] et [[PartDesign Workbench/fr|PartDesign]], ainsi que les copies simples de ces solides. En général, tout atelier générant des objets solides, tel que l'[[Arch Workbench/fr|atelier Arch]], peut être utilisé comme base de création de maillages. Notez qu'un maillage utilisé pour FEA est différent d'un maillage créé ou importé à partir de l'[[Mesh Workbench/fr|atelier Mesh]].
Les outils Gmsh et Netgen prennent en charge les corps de maillage créés avec les ateliers [[Part_Workbench/fr|Part]] et [[PartDesign_Workbench/fr|PartDesign]], ainsi que les copies simples de ces solides. En général, tout atelier générant des objets solides, tel que l'[[Arch_Workbench/fr|atelier Arch]], peut être utilisé comme base de création de maillages. Notez qu'un maillage utilisé pour FEA est différent d'un maillage créé ou importé à partir de l'[[Mesh_Workbench/fr|atelier Mesh]].


[[Image:FEM_Workbench_workflow.svg|600px]]
[[Image:FEM_Workbench_workflow.svg|600px]]

{{Caption|L'atelier FEM appelle l'outil externe Gmsh pour obtenir un maillage à partir d'un corps solide créé avec n'importe quel atelier dans FreeCAD ; il peut aussi importer un maillage créé en externe}}
{{Caption|L'atelier FEM appelle l'outil externe Gmsh pour obtenir un maillage à partir d'un corps solide créé avec n'importe quel atelier dans FreeCAD ; il peut aussi importer un maillage créé en externe}}


[[Image:FEM_Mesh.png|600px]]
[[Image:FEM_Mesh.png|600px]]

{{Caption|(1) Corps solide créé avec PartDesign ; (2) maillage produit par l'outil Gmsh à l'intérieur de l'atelier FEM (tous les triangles) ; et (3) un maillage produit en externe par Gmsh, exporté au format Abaqus {{FileName|.inp}}, puis importé dans FreeCAD (tous les quadrangles).}}
{{Caption|(1) Corps solide créé avec PartDesign ; (2) maillage produit par l'outil Gmsh à l'intérieur de l'atelier FEM (tous les triangles) ; et (3) un maillage produit en externe par Gmsh, exporté au format Abaqus {{FileName|.inp}}, puis importé dans FreeCAD (tous les quadrangles).}}


Les outils [[FEM MeshGmshFromShape/fr|Gmsh]] et [[FEM MeshNetgenFromShape|Netgen]] sont des outils pratiques pour rapidement mailler un corps et ne pas exposer ainsi toutes les capacités de ces programmes. ils créent normalement des maillages triangulaires, ce qui peut ne pas être idéal pour certains types d'analyse. Si vous souhaitez mieux contrôler le maillage créé (utilisez uniquement des quadrilatères, un nombre et une taille d'élément précis, une résolution variable du maillage, etc.), vous devez utiliser ces programmes en externe, créez un fichier de maillage dans un format pris en charge ({{FileName|.inp}}, {{FileName|.unv}}, {{FileName|.vtk}}, {{FileName|.z88}}), et importez ce fichier dans FreeCAD.
Les outils [[FEM_MeshGmshFromShape/fr|Gmsh]] et [[FEM_MeshNetgenFromShape/fr|Netgen]] sont des outils pratiques pour rapidement mailler un corps, mais ils n'exposent pas toutes leurs capacités. Ils créent par défaut des maillages triangulaires, ce qui peut ne pas être idéal pour certains types d'analyse. Si vous souhaitez mieux contrôler le maillage créé (utilisez uniquement des quadrilatères, un nombre et une taille d'élément précis, une résolution variable du maillage, etc.), vous devez utiliser ces programmes en externe, créez un fichier de maillage dans un format pris en charge ({{FileName|.inp}}, {{FileName|.unv}}, {{FileName|.vtk}}, {{FileName|.z88}}), et importez ce fichier dans FreeCAD.


Auparavant, Netgen était inclus dans FreeCAD et pouvait être utilisé immédiatement. Maintenant, Netgen et Gmsh doivent être installés avant de pouvoir être utilisés par l'[[FEM Workbench/fr|atelier FEM]]. Reportez-vous à [[FEM Install/fr|Installation FEM]] pour les instructions.
Auparavant, Netgen était inclus dans FreeCAD et pouvait être utilisé immédiatement. Maintenant, Netgen et Gmsh doivent être installés avant de pouvoir être utilisés par l'[[FEM Workbench/fr|atelier FEM]]. Reportez-vous à [[FEM_Install/fr|Installation FEM]] pour les instructions.


<span id="Meshing_software"></span>
== Logiciels de maillage ==
== Logiciels de maillage ==


Les logiciels de maillage fonctionne sur des corps solides pouvant se présenter sous différents formats, comme Step et Brep. Ces programmes peuvent être utilisés indépendamment de FreeCAD et disposent généralement de nombreuses options pour contrôler les algorithmes de maillage, la taille des éléments et les conditions aux limites.
Les logiciels de maillage opèrent sur des corps solides qui peuvent être dans différents formats, comme Step et Brep. Ces programmes peuvent être utilisés indépendamment de FreeCAD, et disposent généralement de nombreuses options pour contrôler les algorithmes de maillage, la taille des éléments et les conditions aux limites.


L'[[FEM Workbench/fr|atelier FEM]] a développé des interfaces de communication simples pour utiliser Gmsh et Netgen directement dans FreeCAD. D'autres programmes n'ont pas d'interface, mais cela pourrait changer à l'avenir si la communauté suscite de l'intérêt et si ces applications sont faciles à intégrer. Le logiciel de maillage peut être compilé et distribué avec FreeCAD seulement si sa licence est compatible avec les licences GPL2 ou LGPL2 ; sinon le programme doit être utilisé comme un binaire externe, comme Gmsh.
L'[[FEM_Workbench/fr|atelier FEM]] a développé des interfaces de communication simples pour utiliser Gmsh et Netgen directement dans FreeCAD. D'autres programmes n'ont pas d'interface, mais cela pourrait changer à l'avenir si la communauté suscite de l'intérêt et si ces applications sont faciles à intégrer. Le logiciel de maillage peut être compilé et distribué avec FreeCAD seulement si sa licence est compatible avec les licences GPL2 ou LGPL2 ; sinon le programme doit être utilisé comme un binaire externe, comme Gmsh (GPL2).


<span id="Interface_implemented_in_FreeCAD"></span>
=== Interface implémenté dans FreeCAD ===
=== Interface implémenté dans FreeCAD ===


Line 34: Line 38:
* Netgen : [https://ngsolve.org/ site web principal], [https://github.com/NGSolve/netgen dépôt du code]
* Netgen : [https://ngsolve.org/ site web principal], [https://github.com/NGSolve/netgen dépôt du code]


<span id="No_interface_in_FreeCAD"></span>
=== Sans interface dans FreeCAD ===
=== Sans interface dans FreeCAD ===


Line 42: Line 47:
* Tetgen, [http://wias-berlin.de/software/tetgen/ site web principal]
* Tetgen, [http://wias-berlin.de/software/tetgen/ site web principal]


<span id="Mesh_elements_in_FreeCAD"></span>
== Éléments de maillage dans FreeCAD ==
== Éléments de maillage dans FreeCAD ==

FreeCAD supporte différents types d'éléments. L'article suivant explique la différence qui existe entre eux et quand vous pouvez les utiliser : [https://www.comsol.com/blogs/meshing-your-geometry-various-element-types/ Maillage de votre géométrie : quand utiliser les différents types d'élément].
FreeCAD supporte différents types d'éléments. L'article suivant explique la différence qui existe entre eux et quand vous pouvez les utiliser : [https://www.comsol.com/blogs/meshing-your-geometry-various-element-types/ Maillage de votre géométrie : quand utiliser les différents types d'élément].


{| class="wikitable" style="color:black; background-color:#eeeeef;" cellpadding="5" cellspacing="0" border="1"
{| class="wikitable" style="color:black; background-color:#eeeeef;" cellpadding="5" cellspacing="0" border="1"
|+ Importation et exportation d'éléments de maillage
|+ Import and export of mesh elements
|-
! Elément !! Elément !! FreeCAD API !! FreeCAD GUI !! med !! unv !! inp !! frd !! txt !! xml
|-
| Med || CalculiX || Python || Maillage FEM || SMESH || IDEAS/FreeCAD || Abaqus/CalculiX || Résultat de Mesh || Z88 || FEniCS
|-
| Nom || Nom || Créer des éléments || Éléments d'affichage || Importer/exporter || Importer/exporter || Importer/exporter || Importer || Importer/exporter || Importer/exporter
|-
|-
! Element !! Element !! FreeCAD API !! FreeCAD GUI !! med !! unv !! inp !! frd !! txt !! xml
|-
| Med || CalculiX || Python || FEM Mesh || SMESH || IDEAS/FreeCAD || Abaqus/CalculiX || Result Mesh || Z88 || Fenics
|-
| Name || Name || create elements || view elements || import/export || import/export || import/export || import || import/export || import/export
|-
| seg 2 || B31 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]]
| seg 2 || B31 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]]
|-
|-
| seg 3 || B32 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || NI || [[File:Edit_Cancel.svg|20px]]
| seg 3 || B32 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || NI || [[File:Edit_Cancel.svg|20px]]
|-
|-
| tria 3 || S3 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]]
| tria 3 || S3 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]]
|-
|-
| tria 6 || S6 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| tria 6 || S6 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|-
|-
| quad 4 || S4 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]]
| quad 4 || S4 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]]
|-
|-
| quad 8 || S8 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| quad 8 || S8 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|-
|-
| tetra 4 || C3D4 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]]
| tetra 4 || C3D4 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]]
|-
|-
| tetra 10 || C3D10 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| tetra 10 || C3D10 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|-
|-
| hexa 8 || C3D8 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ([[File:Edit_Cancel.svg|20px]]) the format allows it,<br/> but it's not readable or writable by fenics
| hexa 8 || C3D8 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ([[File:Edit_Cancel.svg|20px]]) le format le permet, <br/>mais il n'est pas lisible<br/> ou modifiable par FEniCS.
|-
|-
| hexa 20 || C3D20 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| hexa 20 || C3D20 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|-
|-
| penta 6 || C3D6 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ? || [[File:Edit_Cancel.svg|20px]]
| penta 6 || C3D6 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ? || [[File:Edit_Cancel.svg|20px]]
|-
|-
| penta 15 || C3D15 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ? || [[File:Edit_Cancel.svg|20px]]
| penta 15 || C3D15 || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || ? || [[File:Edit_Cancel.svg|20px]]
|-
|-
| pyra 5 || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| pyra 5 || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|-
|-
| pyra 13 || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
| pyra 13 || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_OK.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]] || [[File:Edit_Cancel.svg|20px]]
|}
|}

* "NI" signifie que le type d'élément n'est pas implémenté dans FreeCAD, mais le format est supporté.
* "NI" signifie que le type d'élément n'est pas implémenté dans FreeCAD, mais le format est supporté.
* [[File:Edit_Cancel.svg|20px]] "-" signifie que la spécification de format ne supporte pas ce type d'élément, et qu'il ne sera pas accepté par FreeCAD.
* [[File:Edit_Cancel.svg|20px]] signifie que la spécification de format ne supporte pas ce type d'élément, et qu'il ne sera pas accepté par FreeCAD.
* "?" signifie qu'on ne sait pas si ce type d'élément est supporté.
* "?" signifie qu'on ne sait pas si ce type d'élément est supporté.


<span id="FEM_element_types"></span>
== Types d'éléments FEM ==
== Types d'éléments FEM ==


Vous trouverez plus d'informations sur les éléments et leur structure de données dans FreeCAD dans [[FEM Element Types/fr|Types d'élément FEM]].
Vous trouverez plus d'informations sur les éléments et leur structure de données dans FreeCAD dans [[FEM Element Types/fr|Types d'élément FEM]].


<span id="Segment_element"></span>
=== Les segments ===
=== Les segments ===


[[Image:FEM_mesh_elements_1_segment.svg|600px]]
[[Image:FEM_mesh_elements_1_segment.svg|600px]]


<span id="Triangle_element"></span>
=== Les triangles ===
=== Les triangles ===


[[Image:FEM_mesh_elements_2_triangle.svg|600px]]
[[Image:FEM_mesh_elements_2_triangle.svg|600px]]


<span id="Quadrangle_element"></span>
=== Les quadrangles ===
=== Les quadrangles ===


[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]]
[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]]


<span id="Tetrahedron_element"></span>
=== Les tétraèdres ===
=== Les tétraèdres ===


[[Image:FEM_mesh_elements_4_tetrahedron.svg|600px]]
[[Image:FEM_mesh_elements_4_tetrahedron.svg|600px]]


<span id="Hexahedron_element"></span>
=== Les hexaèdres ===
=== Les hexaèdres ===


[[Image:FEM_mesh_elements_5_hexahedron.svg|600px]]
[[Image:FEM_mesh_elements_5_hexahedron.svg|600px]]


<span id="Pentahedron_element_(prism)"></span>
=== Les pentaèdres (prismes) ===
=== Les pentaèdres (prismes) ===


[[Image:FEM_mesh_elements_6_pentahedron.svg|600px]]
[[Image:FEM_mesh_elements_6_pentahedron.svg|600px]]


<span id="Pyramid_element"></span>
=== Les pyramides ===
=== Les pyramides ===


[[Image:FEM_mesh_elements_7_pyramid.svg|600px]]
[[Image:FEM_mesh_elements_7_pyramid.svg|600px]]


<span id="Scripting"></span>
== Les Scripts ==
==Script==
=== Créez un maillage FEM totalement en python ===


<span id="Create_a_FEM_mesh_completely_in_Python"></span>
{{Emphasis|Voir aussi :}} [[FreeCAD Scripting Basics/fr|Débuter avec les scripts]].
=== Créez un maillage FEM entièrement en Python ===

{{Emphasis|Voir aussi :}} [[FreeCAD_Scripting_Basics/fr|FreeCAD Script de base]].


L'API Python permet à l'utilisateur de définir un maillage d'éléments finis en ajoutant directement des nœuds individuels et en définissant des arêtes, des faces et des volumes.
L'API Python permet à l'utilisateur de définir un maillage d'éléments finis en ajoutant directement des nœuds individuels et en définissant des arêtes, des faces et des volumes.
Line 134: Line 153:
}}
}}


<span id="Creating_a_mesh_with_one_Tet-10_element"></span>
==== Création d'un maillage avec un élément Tet-10 ====
==== Création d'un maillage avec un élément Tet-10 ====


Créez un FemMesh vide, remplissez-le avec des nœuds, créez le volume et appelez enfin {{incode|Fem.show()}} pour créer l'objet du document avec le maillage correspondant.
Créez un FemMesh vide, remplissez-le avec des nœuds, créez le volume et appelez enfin {{incode|Fem.show()}} pour créer l'objet du document avec le maillage correspondant.
Line 158: Line 178:
obj = FreeCAD.ActiveDocument.ActiveObject
obj = FreeCAD.ActiveDocument.ActiveObject
}}
}}

Si vous souhaitez une numérotation prédéfinie des noeuds et des éléments, transmettez l'ID approprié aux méthodes de noeud et de volume.
Si vous souhaitez une numérotation prédéfinie des noeuds et des éléments, transmettez l'ID approprié aux méthodes de noeud et de volume.


Pour créer un objet document réel, au lieu de {{incode|Fem.show()}} vous pouvez utiliser la méthode {{incode|addObject()}} ; attachez ensuite le maillage créé à l'attribut {{incode|FemMesh}} de cet objet.
Pour créer un objet document réel, au lieu de {{incode|Fem.show()}} vous pouvez utiliser la méthode {{incode|addObject()}} ; attachez ensuite le maillage créé à l'attribut {{incode|FemMesh}} de cet objet.

{{Code|code=
{{Code|code=
a = Fem.FemMesh()
a = Fem.FemMesh()
Line 181: Line 203:
}}
}}


<span id="Visual_properties"></span>
==== Propriétés visuelles ====
==== Propriétés visuelles ====


Line 192: Line 215:
obj.ViewObject.HighlightedNodes = [1, 2, 3]
obj.ViewObject.HighlightedNodes = [1, 2, 3]
}}
}}

Les éléments individuels d'un maillage peuvent être modifiés en passant un dictionnaire avec les paires {{incode|key:value}} appropriées.
Les éléments individuels d'un maillage peuvent être modifiés en passant un dictionnaire avec les paires {{incode|key:value}} appropriées.


Réglez le volume 1 sur rouge
Réglez le volume 1 sur rouge

{{Code|code=
{{Code|code=
obj.ViewObject.ElementColor = {1:(1,0,0)}
obj.ViewObject.ElementColor = {1:(1,0,0)}
}}
}}

Définissez les nœuds 1, 2 et 3 sur une certaine couleur; les faces entre les nœuds acquièrent une couleur interpolée
Définissez les nœuds 1, 2 et 3 sur une certaine couleur; les faces entre les nœuds acquièrent une couleur interpolée.

{{Code|code=
{{Code|code=
obj.ViewObject.NodeColor = {1:(1,0,0), 2:(0,1,0), 3:(0,0,1)}
obj.ViewObject.NodeColor = {1:(1,0,0), 2:(0,1,0), 3:(0,0,1)}
}}
}}

Déplacer les nœuds 1 et 2 par le sens et la direction définies par un vecteur
Déplacer les nœuds 1 et 2 par le sens et la direction définies par un vecteur.

{{Code|code=
{{Code|code=
obj.ViewObject.NodeDisplacement = {1:FreeCAD.Vector(0,1,0), 2:FreeCAD.Vector(1,0,0)}
obj.ViewObject.NodeDisplacement = {1:FreeCAD.Vector(0,1,0), 2:FreeCAD.Vector(1,0,0)}
}}
}}

Doubler le facteur de déplacement indiqué ({{Emphasis|Note aux éditeurs : supprimé dans les nouvelles versions ?)}}
Doubler le facteur de déplacement indiqué. ({{Emphasis|Note aux éditeurs : supprimé dans les nouvelles versions ?)}}

{{Code|code=
{{Code|code=
obj.ViewObject.animate(2.0)
obj.ViewObject.animate(2.0)
}}
}}


<span id="Scripting_examples_of_each_supported_element_type"></span>
== Exemples de script de chaque type d'élément supporté ==
== Exemples de script de chaque type d'élément supporté ==


<span id="Beam,_2_node_line,_seg2_(linear)"></span>
=== Poutre, ligne à 2 nœuds, seg2 (linéaire) ===
=== Poutre, ligne à 2 nœuds, seg2 (linéaire) ===


Line 230: Line 263:
}}
}}


<span id="Beam,_3_node_line,_seg3_(quadratic)"></span>
=== Poutre, ligne à 3 nœuds, seg3 (quadratique) ===
=== Poutre, ligne à 3 nœuds, seg3 (quadratique) ===


Line 248: Line 282:
}}
}}


<span id="Shell,_3_node_triangle,_tria3_(linear)"></span>
=== Coque, triangle à 3 nœuds, tria3 (linéaire) ===
=== Coque, triangle à 3 nœuds, tria3 (linéaire) ===


Line 268: Line 303:


Ajoutez une face avec le numéro d'élément.
Ajoutez une face avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemtria3 = Fem.FemMesh()
elemtria3 = Fem.FemMesh()
Line 284: Line 320:
}}
}}


<span id="Shell,_6_node_triangle,_tria6_(quadratic)"></span>
=== Coque, triangle à 6 nœuds, tria6 (quadratique) ===
=== Coque, triangle à 6 nœuds, tria6 (quadratique) ===


Line 307: Line 344:


Ajoutez une face avec le numéro d'élément.
Ajoutez une face avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemtria6 = Fem.FemMesh()
elemtria6 = Fem.FemMesh()
Line 322: Line 360:
}}
}}


<span id="Shell,_4_node_quadrangle,_quad4_(linear)"></span>
=== Coque, quadrilatère à 4 nœuds, quad4 (linéaire) ===
=== Coque, quadrilatère à 4 nœuds, quad4 (linéaire) ===


Line 343: Line 382:


Ajoutez une face avec le numéro d'élément.
Ajoutez une face avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemquad4 = Fem.FemMesh()
elemquad4 = Fem.FemMesh()
Line 358: Line 398:
}}
}}


<span id="Shell,_8_node_quadrangle,_quad8_(quadratic)"></span>
=== Coque, quadrilatère à 8 nœuds, quad8 (quadratique) ===
=== Coque, quadrilatère à 8 nœuds, quad8 (quadratique) ===


Line 382: Line 423:
}}
}}


Ajoutez une face avec le numéro d'élément.
Ajoutez une face avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemquad8 = Fem.FemMesh()
elemquad8 = Fem.FemMesh()
Line 398: Line 440:
}}
}}


<span id="Volume,_4_node_tetrahedron,_tetra4_(linear)"></span>
=== Volume, tétraèdre à 4 nœuds, tétra4 (linéaire) ===
=== Volume, tétraèdre à 4 nœuds, tétra4 (linéaire) ===


Line 418: Line 461:


Ajoutez un volume avec le numéro d'élément.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemtetra4 = Fem.FemMesh()
elemtetra4 = Fem.FemMesh()
Line 432: Line 476:
}}
}}


=== Volume, 10 node tetrahedron, tetra10 (quadratic) ===
<span id="Volume,_10_node_tetrahedron,_tetra10_(quadratic)"></span>
=== Volume, tétraèdre à 10 nœuds, tétra10 (quadratique) ===


{{Code|code=
{{Code|code=
Line 459: Line 504:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemtetra10 = Fem.FemMesh()
elemtetra10 = Fem.FemMesh()
Line 474: Line 520:
}}
}}


=== Volume, 8 node hexahedron, hexa8 (linear) ===
<span id="Volume,_8_node_hexahedron,_hexa8_(linear)"></span>
=== Volume, hexaèdre à 8 nœuds, hexa8 (linéaire) ===


{{Code|code=
{{Code|code=
Line 497: Line 544:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemhexa8 = Fem.FemMesh()
elemhexa8 = Fem.FemMesh()
Line 512: Line 560:
}}
}}


=== Volume, 20 node hexahedron, hexa20 (quadratic) ===
<span id="Volume,_20_node_hexahedron,_hexa20_(quadratic)"></span>
=== Volume, hexaèdre à 20 noeuds, hexa20 (quadratique) ===


{{Code|code=
{{Code|code=
Line 550: Line 599:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elemhexa20 = Fem.FemMesh()
elemhexa20 = Fem.FemMesh()
Line 565: Line 615:
}}
}}


=== Volume, 6 node pentahedron, penta6 (linear) ===
<span id="Volume,_6_node_pentahedron,_penta6_(linear)"></span>
=== Volume, pentaèdre à 6 nœuds, penta6 (linéaire) ===


{{Code|code=
{{Code|code=
Line 586: Line 637:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elempenta6 = Fem.FemMesh()
elempenta6 = Fem.FemMesh()
Line 601: Line 653:
}}
}}


=== Volume, 15 node pentahedron, penta15 (quadratic) ===
<span id="Volume,_15_node_pentahedron,_penta15_(quadratic)"></span>
=== Volume, pentaèdre à 15 noeuds, penta15 (quadratique) ===


{{Code|code=
{{Code|code=
Line 634: Line 687:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elempenta15 = Fem.FemMesh()
elempenta15 = Fem.FemMesh()
Line 649: Line 703:
}}
}}


=== Volume, 5 node pyramid, pyra5 (linear) ===
<span id="Volume,_5_node_pyramid,_pyra5_(linear)"></span>
=== Volume, pyramide à 5 nœuds, pyra5 (linéaire) ===


{{Code|code=
{{Code|code=
Line 669: Line 724:
}}
}}


Add a volume with the element number.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elempyra5 = Fem.FemMesh()
elempyra5 = Fem.FemMesh()
Line 684: Line 740:
}}
}}


=== Volume, 13 node pyramid, pyra13 (quadratic) ===
<span id="Volume,_13_node_pyramid,_pyra13_(quadratic)"></span>
=== Volume, pyramide à 13 nœuds, pyra13 (quadratique) ===


{{Code|code=
{{Code|code=
Line 715: Line 772:


Ajoutez un volume avec le numéro d'élément.
Ajoutez un volume avec le numéro d'élément.

{{Code|code=
{{Code|code=
elempyra13 = Fem.FemMesh()
elempyra13 = Fem.FemMesh()
Line 729: Line 787:
}}
}}


<span id="Scripting_examples_for_groups"></span>
{{FEM Tools navi/fr}}
== Exemples de script pour les groupes ==
{{Userdocnavi/fr}}

{{clear}}
Voir par exemple https://forum.freecadweb.org/viewtopic.php?f=18&t=37304&start=20#p318823


{{FEM Tools navi{{#translation:}}}}
{{Userdocnavi{{#translation:}}}}

Latest revision as of 03:59, 2 December 2023

Créer un maillage à éléments finis

L'analyse par éléments finis (FEA) est effectuée sur un maillage composé de multiples éléments triangulaires et quadrilatéraux qui subdivisent le corps d'origine. Plus le maillage est raffiné, plus les résultats numériques seront précis, mais le temps de calcul sera également plus long. Un équilibre entre la taille du maillage, le temps de calcul et la précision des résultats est une caractéristique importante d'une analyse par éléments finis bien définie.

Il existe différentes possibilités pour configurer un maillage dans l'atelier FEM :

  • L'outil Gmsh de l'interface utilisateur graphique.
  • L'outil Netgen à partir de l'interface graphique.
  • Importer un maillage depuis un autre programme. En particulier, Gmsh et Netgen peuvent être utilisés seuls en dehors de FreeCAD pour mailler des corps solides tels que des fichiers Step.
  • Créer manuellement le maillage à l'aide de scripts Python.

Les outils Gmsh et Netgen prennent en charge les corps de maillage créés avec les ateliers Part et PartDesign, ainsi que les copies simples de ces solides. En général, tout atelier générant des objets solides, tel que l'atelier Arch, peut être utilisé comme base de création de maillages. Notez qu'un maillage utilisé pour FEA est différent d'un maillage créé ou importé à partir de l'atelier Mesh.

L'atelier FEM appelle l'outil externe Gmsh pour obtenir un maillage à partir d'un corps solide créé avec n'importe quel atelier dans FreeCAD ; il peut aussi importer un maillage créé en externe

(1) Corps solide créé avec PartDesign ; (2) maillage produit par l'outil Gmsh à l'intérieur de l'atelier FEM (tous les triangles) ; et (3) un maillage produit en externe par Gmsh, exporté au format Abaqus .inp, puis importé dans FreeCAD (tous les quadrangles).

Les outils Gmsh et Netgen sont des outils pratiques pour rapidement mailler un corps, mais ils n'exposent pas toutes leurs capacités. Ils créent par défaut des maillages triangulaires, ce qui peut ne pas être idéal pour certains types d'analyse. Si vous souhaitez mieux contrôler le maillage créé (utilisez uniquement des quadrilatères, un nombre et une taille d'élément précis, une résolution variable du maillage, etc.), vous devez utiliser ces programmes en externe, créez un fichier de maillage dans un format pris en charge (.inp, .unv, .vtk, .z88), et importez ce fichier dans FreeCAD.

Auparavant, Netgen était inclus dans FreeCAD et pouvait être utilisé immédiatement. Maintenant, Netgen et Gmsh doivent être installés avant de pouvoir être utilisés par l'atelier FEM. Reportez-vous à Installation FEM pour les instructions.

Logiciels de maillage

Les logiciels de maillage opèrent sur des corps solides qui peuvent être dans différents formats, comme Step et Brep. Ces programmes peuvent être utilisés indépendamment de FreeCAD, et disposent généralement de nombreuses options pour contrôler les algorithmes de maillage, la taille des éléments et les conditions aux limites.

L'atelier FEM a développé des interfaces de communication simples pour utiliser Gmsh et Netgen directement dans FreeCAD. D'autres programmes n'ont pas d'interface, mais cela pourrait changer à l'avenir si la communauté suscite de l'intérêt et si ces applications sont faciles à intégrer. Le logiciel de maillage peut être compilé et distribué avec FreeCAD seulement si sa licence est compatible avec les licences GPL2 ou LGPL2 ; sinon le programme doit être utilisé comme un binaire externe, comme Gmsh (GPL2).

Interface implémenté dans FreeCAD

Sans interface dans FreeCAD

Éléments de maillage dans FreeCAD

FreeCAD supporte différents types d'éléments. L'article suivant explique la différence qui existe entre eux et quand vous pouvez les utiliser : Maillage de votre géométrie : quand utiliser les différents types d'élément.

Importation et exportation d'éléments de maillage
Elément Elément FreeCAD API FreeCAD GUI med unv inp frd txt xml
Med CalculiX Python Maillage FEM SMESH IDEAS/FreeCAD Abaqus/CalculiX Résultat de Mesh Z88 FEniCS
Nom Nom Créer des éléments Éléments d'affichage Importer/exporter Importer/exporter Importer/exporter Importer Importer/exporter Importer/exporter
seg 2 B31
seg 3 B32 NI
tria 3 S3
tria 6 S6
quad 4 S4
quad 8 S8
tetra 4 C3D4
tetra 10 C3D10
hexa 8 C3D8 () le format le permet,
mais il n'est pas lisible
ou modifiable par FEniCS.
hexa 20 C3D20
penta 6 C3D6 ?
penta 15 C3D15 ?
pyra 5
pyra 13
  • "NI" signifie que le type d'élément n'est pas implémenté dans FreeCAD, mais le format est supporté.
  • signifie que la spécification de format ne supporte pas ce type d'élément, et qu'il ne sera pas accepté par FreeCAD.
  • "?" signifie qu'on ne sait pas si ce type d'élément est supporté.

Types d'éléments FEM

Vous trouverez plus d'informations sur les éléments et leur structure de données dans FreeCAD dans Types d'élément FEM.

Les segments

Les triangles

Les quadrangles

Les tétraèdres

Les hexaèdres

Les pentaèdres (prismes)

Les pyramides

Script

Créez un maillage FEM entièrement en Python

Voir aussi : FreeCAD Script de base.

L'API Python permet à l'utilisateur de définir un maillage d'éléments finis en ajoutant directement des nœuds individuels et en définissant des arêtes, des faces et des volumes.

Le maillage lui-même est de type Fem::FemMesh, qui doit être attaché à un objet approprié du document de type Fem::FemMeshObject.

App.ActiveDocument.Mesh_object.TypeId = Fem::FemMeshObject
                              .
                              .
                              .FemMesh.TypeId = Fem::FemMesh

Création d'un maillage avec un élément Tet-10

Créez un FemMesh vide, remplissez-le avec des nœuds, créez le volume et appelez enfin Fem.show() pour créer l'objet du document avec le maillage correspondant.

import FreeCAD, Fem

m = Fem.FemMesh()

m.addNode(0,    1,    0)
m.addNode(0,    0,    1)
m.addNode(1,    0,    0)
m.addNode(0,    0,    0)
m.addNode(0,    0.5,  0.5)
m.addNode(0.5,  0.03, 0.5)
m.addNode(0.5,  0.5,  0.03)
m.addNode(0,    0.5,  0)
m.addNode(0.03, 0,    0.5)
m.addNode(0.5,  0,    0)

m.addVolume([1,2,3,4,5,6,7,8,9,10])
Fem.show(m)
obj = FreeCAD.ActiveDocument.ActiveObject

Si vous souhaitez une numérotation prédéfinie des noeuds et des éléments, transmettez l'ID approprié aux méthodes de noeud et de volume.

Pour créer un objet document réel, au lieu de Fem.show() vous pouvez utiliser la méthode addObject() ; attachez ensuite le maillage créé à l'attribut FemMesh de cet objet.

a = Fem.FemMesh()

a.addNode(0,    1,    0,    1)
a.addNode(0,    0,    1,    2)
a.addNode(1,    0,    0,    3)
a.addNode(0,    0,    0,    4)
a.addNode(0,    0.5,  0.5,  5)
a.addNode(0.5,  0.03, 0.5,  6)
a.addNode(0.5,  0.5,  0.03, 7)
a.addNode(0,    0.5,  0,    8)
a.addNode(0.03, 0,    0.5,  9)
a.addNode(0.5,  0,    0,   10)

a.addVolume([1,2,3,4,5,6,7,8,9,10], 1)
obj_2 = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObject")
obj_2.Placement.Base = FreeCAD.Vector(2, 0, 0)
obj_2.FemMesh = a

Propriétés visuelles

Une fois qu'un objet FemMesh a été créé avec Fem.show() , certaines de ses propriétés visuelles peuvent être modifiées en modifiant les différents attributs de son ViewObject. Cela peut être utile pour post-traiter le maillage après avoir obtenu une solution d'éléments finis.

Mettez en surbrillance certains nœuds dans le maillage

Fem.show(m)
obj = FreeCAD.ActiveDocument.ActiveObject

obj.ViewObject.HighlightedNodes = [1, 2, 3]

Les éléments individuels d'un maillage peuvent être modifiés en passant un dictionnaire avec les paires key:value appropriées.

Réglez le volume 1 sur rouge

obj.ViewObject.ElementColor = {1:(1,0,0)}

Définissez les nœuds 1, 2 et 3 sur une certaine couleur; les faces entre les nœuds acquièrent une couleur interpolée.

obj.ViewObject.NodeColor = {1:(1,0,0), 2:(0,1,0), 3:(0,0,1)}

Déplacer les nœuds 1 et 2 par le sens et la direction définies par un vecteur.

obj.ViewObject.NodeDisplacement = {1:FreeCAD.Vector(0,1,0), 2:FreeCAD.Vector(1,0,0)}

Doubler le facteur de déplacement indiqué. (Note aux éditeurs : supprimé dans les nouvelles versions ?)

obj.ViewObject.animate(2.0)

Exemples de script de chaque type d'élément supporté

Poutre, ligne à 2 nœuds, seg2 (linéaire)

import Fem

seg2 = Fem.FemMesh()
seg2.addNode( 0, 0, 0, 1)
seg2.addNode(10, 0, 0, 2)
seg2.addEdge(1, 2)
print(seg2)

obj = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObject", "seg2")
obj.FemMesh = seg2
obj.Placement.Base = FreeCAD.Vector(0, 110, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Poutre, ligne à 3 nœuds, seg3 (quadratique)

import Fem

seg3 = Fem.FemMesh()
seg3.addNode( 0, 0, 0, 1)
seg3.addNode(10, 0, 0, 2)
seg3.addNode( 5, 0, 0, 3)
seg3.addEdge([1, 2, 3])
print(seg3)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "seg3")
obj.FemMesh = seg3
obj.Placement.Base = FreeCAD.Vector(30, 110, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Coque, triangle à 3 nœuds, tria3 (linéaire)

import Fem

tria3 = Fem.FemMesh()
tria3.addNode( 0,  0, 0, 1)
tria3.addNode( 6, 12, 0, 2)
tria3.addNode(12,  0, 0, 3)
tria3.addFace([1, 2, 3])
print(tria3)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "tria3")
obj.FemMesh = tria3
obj.Placement.Base = FreeCAD.Vector(0, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False

Ajoutez une face avec le numéro d'élément.

elemtria3 = Fem.FemMesh()
nodes = tria3.Nodes
for n in nodes:
    elemtria3.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemtria3.addFace([1, 2, 3], 88)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemtria3")
obj.FemMesh = elemtria3
obj.Placement.Base = FreeCAD.Vector(200, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
print(elemtria3.Faces)

Coque, triangle à 6 nœuds, tria6 (quadratique)

import Fem

tria6 = Fem.FemMesh()
tria6.addNode( 0,  0, 0, 1)
tria6.addNode( 6, 12, 0, 2)
tria6.addNode(12,  0, 0, 3)
tria6.addNode( 3,  6, 0, 4)
tria6.addNode( 9,  6, 0, 5)
tria6.addNode( 6,  0, 0, 6)
tria6.addFace([1, 2, 3, 4, 5, 6])
print(tria6)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "tria6")
obj.FemMesh = tria6
obj.Placement.Base = FreeCAD.Vector(30, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False

Ajoutez une face avec le numéro d'élément.

elemtria6 = Fem.FemMesh()
nodes = tria6.Nodes
for n in nodes:
    elemtria6.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemtria6.addFace([1, 2, 3, 4, 5, 6], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemtria6")
obj.FemMesh = elemtria6
obj.Placement.Base = FreeCAD.Vector(230, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
print(elemtria6.Faces)

Coque, quadrilatère à 4 nœuds, quad4 (linéaire)

import Fem

quad4 = Fem.FemMesh()
quad4.addNode( 0, 10, 0, 1)
quad4.addNode(10, 10, 0, 2)
quad4.addNode(10,  0, 0, 3)
quad4.addNode( 0,  0, 0, 4)
quad4.addFace([1, 2, 3, 4])
print(quad4)

obj = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObject", "quad4")
obj.FemMesh = quad4
obj.Placement.Base = FreeCAD.Vector(60, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False

Ajoutez une face avec le numéro d'élément.

elemquad4 = Fem.FemMesh()
nodes = quad4.Nodes
for n in nodes:
    elemquad4.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemquad4.addFace([1, 2, 3, 4], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemquad4")
obj.FemMesh = elemquad4
obj.Placement.Base = FreeCAD.Vector(260, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
print(elemquad4.Faces)

Coque, quadrilatère à 8 nœuds, quad8 (quadratique)

import Fem

quad8 = Fem.FemMesh()
quad8.addNode( 0, 10, 0, 1)
quad8.addNode(10, 10, 0, 2)
quad8.addNode(10,  0, 0, 3)
quad8.addNode( 0,  0, 0, 4)
quad8.addNode( 5, 10, 0, 5)
quad8.addNode(10,  5, 0, 6)
quad8.addNode( 5,  0, 0, 7)
quad8.addNode( 0,  5, 0, 8)
quad8.addFace([1, 2, 3, 4, 5, 6, 7, 8])
print(quad8)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "quad8")
obj.FemMesh = quad8
obj.Placement.Base = FreeCAD.Vector(90, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False

Ajoutez une face avec le numéro d'élément.

elemquad8 = Fem.FemMesh()
nodes = quad8.Nodes
for n in nodes:
    elemquad8.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemquad8.addFace([1, 2, 3, 4, 5, 6, 7, 8], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemquad8")
obj.FemMesh = elemquad8
obj.Placement.Base = FreeCAD.Vector(290, 80, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
print(elemquad8.Faces)

Volume, tétraèdre à 4 nœuds, tétra4 (linéaire)

import Fem

tetra4 = Fem.FemMesh()
tetra4.addNode( 6, 12, 18, 1)
tetra4.addNode( 0,  0, 18, 2)
tetra4.addNode(12,  0, 18, 3)
tetra4.addNode( 6,  6,  0, 4)
tetra4.addVolume([1, 2, 3, 4])
print(tetra4)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "tetra4")
obj.FemMesh = tetra4
obj.Placement.Base = FreeCAD.Vector(0, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elemtetra4 = Fem.FemMesh()
nodes = tetra4.Nodes
for n in nodes:
    elemtetra4.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemtetra4.addVolume([1, 2, 3, 4], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemtetra4")
obj.FemMesh = elemtetra4
obj.Placement.Base = FreeCAD.Vector(200, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elemtetra4.Volumes)

Volume, tétraèdre à 10 nœuds, tétra10 (quadratique)

import Fem

tetra10 = Fem.FemMesh()
tetra10.addNode( 6, 12, 18, 1)
tetra10.addNode( 0,  0, 18, 2)
tetra10.addNode(12,  0, 18, 3)
tetra10.addNode( 6,  6,  0, 4)

tetra10.addNode( 3,  6, 18, 5)
tetra10.addNode( 6,  0, 18, 6)
tetra10.addNode( 9,  6, 18, 7)

tetra10.addNode( 6,  9,  9, 8)
tetra10.addNode( 3,  3,  9, 9)
tetra10.addNode( 9,  3,  9,10)
tetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(tetra10)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "tetra10")
obj.FemMesh = tetra10
obj.Placement.Base = FreeCAD.Vector(30, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elemtetra10 = Fem.FemMesh()
nodes = tetra10.Nodes
for n in nodes:
    elemtetra10.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemtetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemtetra10")
obj.FemMesh = elemtetra10
obj.Placement.Base = FreeCAD.Vector(230, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elemtetra10.Volumes)

Volume, hexaèdre à 8 nœuds, hexa8 (linéaire)

import Fem

hexa8 = Fem.FemMesh()
hexa8.addNode( 0, 10, 10, 1)
hexa8.addNode( 0,  0, 10, 2)
hexa8.addNode(10,  0, 10, 3)
hexa8.addNode(10, 10, 10, 4)
hexa8.addNode( 0, 10,  0, 5)
hexa8.addNode( 0,  0,  0, 6)
hexa8.addNode(10,  0,  0, 7)
hexa8.addNode(10, 10,  0, 8)
hexa8.addVolume([1, 2, 3, 4, 5, 6, 7, 8])
print(hexa8)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "hexa8")
obj.FemMesh = hexa8
obj.Placement.Base = FreeCAD.Vector(60, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elemhexa8 = Fem.FemMesh()
nodes = hexa8.Nodes
for n in nodes:
    elemhexa8.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemhexa8.addVolume([1,  2,  3, 4, 5, 6, 7, 8], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemhexa8")
obj.FemMesh = elemhexa8
obj.Placement.Base = FreeCAD.Vector(260, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elemhexa8.Volumes)

Volume, hexaèdre à 20 noeuds, hexa20 (quadratique)

import Fem

hexa20 = Fem.FemMesh()
hexa20.addNode( 0, 10, 10,  1)
hexa20.addNode( 0,  0, 10,  2)
hexa20.addNode(10,  0, 10,  3)
hexa20.addNode(10, 10, 10,  4)
hexa20.addNode( 0, 10,  0,  5)
hexa20.addNode( 0,  0,  0,  6)
hexa20.addNode(10,  0,  0,  7)
hexa20.addNode(10, 10,  0,  8)

hexa20.addNode( 0,  5, 10,  9)
hexa20.addNode( 5,  0, 10, 10)
hexa20.addNode(10,  5, 10, 11)
hexa20.addNode( 5, 10, 10, 12)

hexa20.addNode( 0,  5,  0, 13)
hexa20.addNode( 5,  0,  0, 14)
hexa20.addNode(10,  5,  0, 15)
hexa20.addNode( 5, 10,  0, 16)

hexa20.addNode( 0, 10,  5, 17)
hexa20.addNode( 0,  0,  5, 18)
hexa20.addNode(10,  0,  5, 19)
hexa20.addNode(10, 10,  5, 20)
hexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
print(hexa20)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "hexa20")
obj.FemMesh = hexa20
obj.Placement.Base = FreeCAD.Vector(90, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elemhexa20 = Fem.FemMesh()
nodes = hexa20.Nodes
for n in nodes:
    elemhexa20.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elemhexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elemhexa20")
obj.FemMesh = elemhexa20
obj.Placement.Base = FreeCAD.Vector(290, 50, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elemhexa20.Volumes)

Volume, pentaèdre à 6 nœuds, penta6 (linéaire)

import Fem

penta6 = Fem.FemMesh()
penta6.addNode(10, 10, 10, 1)
penta6.addNode( 0,  0, 10, 2)
penta6.addNode(20,  0, 10, 3)
penta6.addNode(10, 10,  0, 4)
penta6.addNode( 0,  0,  0, 5)
penta6.addNode(20,  0,  0, 6)
penta6.addVolume([1, 2, 3, 4, 5, 6])
print(penta6)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "penta6")
obj.FemMesh = penta6
obj.Placement.Base = FreeCAD.Vector(0, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elempenta6 = Fem.FemMesh()
nodes = penta6.Nodes
for n in nodes:
    elempenta6.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elempenta6.addVolume([ 1, 2, 3, 4, 5, 6], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elempenta6")
obj.FemMesh = elempenta6
obj.Placement.Base = FreeCAD.Vector(200, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elempenta6.Volumes)

Volume, pentaèdre à 15 noeuds, penta15 (quadratique)

import Fem

penta15 = Fem.FemMesh()
penta15.addNode(10, 10, 10,  1)
penta15.addNode( 0,  0, 10,  2)
penta15.addNode(20,  0, 10,  3)
penta15.addNode(10, 10,  0,  4)
penta15.addNode( 0,  0,  0,  5)
penta15.addNode(20,  0,  0,  6)

penta15.addNode( 5,  5, 10,  7)
penta15.addNode(10,  0, 10,  8)
penta15.addNode(15,  5, 10,  9)

penta15.addNode( 5,  5,  0, 10)
penta15.addNode(10,  0,  0, 11)
penta15.addNode(15,  5,  0, 12)

penta15.addNode(10, 10,  5, 13)
penta15.addNode( 0,  0,  5, 14)
penta15.addNode(20,  0,  5, 15)
penta15.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
print(penta15)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "penta15")
obj.FemMesh = penta15
obj.Placement.Base = FreeCAD.Vector(40, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elempenta15 = Fem.FemMesh()
nodes = penta15.Nodes
for n in nodes:
    elempenta15.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elempenta15.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elempenta15")
obj.FemMesh = elempenta15
obj.Placement.Base = FreeCAD.Vector(240, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elempenta15.Volumes)

Volume, pyramide à 5 nœuds, pyra5 (linéaire)

import Fem

pyra5 = Fem.FemMesh()
pyra5.addNode( 0, 20,  0, 1)
pyra5.addNode(20, 20,  0, 2)
pyra5.addNode(20,  0,  0, 3)
pyra5.addNode( 0,  0,  0, 4)
pyra5.addNode(10, 10, 10, 5)
pyra5.addVolume([1, 2, 3, 4, 5])
print(pyra5)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "pyra5")
obj.FemMesh = pyra5
obj.Placement.Base = FreeCAD.Vector(80, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elempyra5 = Fem.FemMesh()
nodes = pyra5.Nodes
for n in nodes:
    elempyra5.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elempyra5.addVolume([1, 2, 3, 4, 5], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elempyra5")
obj.FemMesh = elempyra5
obj.Placement.Base = FreeCAD.Vector(280, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elempyra5.Volumes)

Volume, pyramide à 13 nœuds, pyra13 (quadratique)

import Fem

pyra13 = Fem.FemMesh()
pyra13.addNode( 0, 20,  0,  1)
pyra13.addNode(20, 20,  0,  2)
pyra13.addNode(20,  0,  0,  3)
pyra13.addNode( 0,  0,  0,  4)
pyra13.addNode(10, 10, 10,  5)

pyra13.addNode(10, 20,  0,  6)
pyra13.addNode(20, 10,  0,  7)
pyra13.addNode(10,  0,  0,  8)
pyra13.addNode( 0, 10,  0,  9)

pyra13.addNode( 5, 15,  5, 10)
pyra13.addNode(15, 15,  5, 11)
pyra13.addNode(15,  5,  5, 12)
pyra13.addNode( 5,  5,  5, 13)
pyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
print(pyra13)

obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "pyra13")
obj.FemMesh = pyra13
obj.Placement.Base = FreeCAD.Vector(120, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"

Ajoutez un volume avec le numéro d'élément.

elempyra13 = Fem.FemMesh()
nodes = pyra13.Nodes
for n in nodes:
    elempyra13.addNode(nodes[n].x, nodes[n].y, nodes[n].z, n)

elempyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject", "elempyra13")
obj.FemMesh = elempyra13
obj.Placement.Base = FreeCAD.Vector(320, 0, 0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
print(elempyra13.Volumes)

Exemples de script pour les groupes

Voir par exemple https://forum.freecadweb.org/viewtopic.php?f=18&t=37304&start=20#p318823