FEM Mesh/de: Difference between revisions

From FreeCAD Documentation
(Created page with "==== Visuelle Eigenschaften ====")
(Created page with "Setzt man die Knoten 1, 2 und 3 auf unterschiedliche Farben, erhält die Fläche dazwischen eine daraus errechnete Farbe.")
 
(40 intermediate revisions by 3 users not shown)
Line 2: Line 2:
{{TOCright}}
{{TOCright}}


== Ein FE Polygonnetz erstellen ==
==Ein Finite-Elemente-Netz erstellen==
Die Finite Elemente Analyse (FEA) wird an einem Polygonnetz durchgeführt, das aus mehreren drei- und vierseitigen Finite Elementen besteht, die einen Originalkörper unterteilen. Je feiner das Netz ist, desto genauer sind die numerischen Ergebnisse, aber auch desto größer ist die Berechnungszeit. Ein ausgewogenes Verhältnis zwischen der Größe des Netzes, der Berechnungszeit und der Genauigkeit der Ergebnisse ist ein wichtiges Merkmal einer gut definierten Finite Elemente Analyse.


Die Finite-Elemente-Analyse (FEA) wird auf einem Polygonnetz durchgeführt, das aus mehreren drei- und vierseitigen finiten Elementen besteht, die einen Originalkörper unterteilen. Je feiner das Netz ist, desto genauer sind die numerischen Ergebnisse, aber desto größer ist auch die Berechnungszeit. Ein Gleichgewicht zwischen der Größe des Netzes, der Berechnungszeit und der Genauigkeit der Ergebnisse ist ein wichtiges Merkmal einer gut definierten Finite-Elemente-Analyse.
Es gibt verschiedene Möglichkeiten, ein Polygonnetz im [[FEM Workbench|FEM Arbeitsbereich]] einzurichten:

* Das [[FEM MeshGmshFromShape/de|Gmsh Werkzeug]] von der grafischen Benutzeroberfläche aus.
Es gibt verschiedene Möglichkeiten, ein Polygonnetz im Arbeitsbereich [[FEM_Workbench/de|FEM]] einzurichten:
* Das [[FEM MeshGmshFromShape/de|Netgen Werkzeug]] von der grafischen Benutzeroberfläche aus.
* Das Werkzeug [[FEM MeshGmshFromShape/de|FEM mesh from shape by Gmsh]] aus der grafischen Benutzeroberfläche.
* Das Werkzeug [[FEM MeshGmshFromShape/de|FEM mesh from shape by Netgen]] aus der grafischen Benutzeroberfläche.
* Importieren eines Polygonnetzes aus einem anderen Programm. Insbesondere können Gmsh und Netgen außerhalb von FreeCAD allein verwendet werden, um Volumenkörper wie Step Dateien zu vernetzen.
* Importieren eines Polygonnetzes aus einem anderen Programm. Insbesondere können Gmsh und Netgen außerhalb von FreeCAD allein verwendet werden, um Volumenkörper wie Step Dateien zu vernetzen.
* Manuelle Erstellung des Netzes durch [[Python/de|Python]] Skripten.
* Manuelle Erstellung des Netzes durch [[Python/de|Python]]-Skripte.


Die Gmsh und Netgen Werkzeuge unterstützen die Vernetzung von Körpern, die mit der [[Part Workbench/de|Part]] und [[PartDesign Workbench/de|PartDesign Arbeitsbereiche]] erstellt wurden, sowie einfache Kopien dieser Körper. Im Allgemeinen kann jeder Arbeitsbereich, der Volumenkörper erzeugt, wie z.B. die [[Arch Workbench/de|Arch Arbeitsbereich]], als Grundlage für die Erstellung von Polygonnetzen verwendet werden. Beachte, dass sich ein für die FEA verwendetes Netz von einem Netz unterscheidet, das mit der [[Mesh Workbench/de|Polygonnetz Arbeitsbereich]] erstellt oder importiert wurde.
Die Gmsh und Netgen Werkzeuge unterstützen die Vernetzung von Körpern, die mit den Arbeitsbereichen [[Part_Workbench/de|Part]] und [[PartDesign_Workbench/de|PartDesign]] erstellt wurden, sowie einfache Kopien dieser Körper. Im Allgemeinen kann jeder Arbeitsbereich, der Volumenkörper erzeugt, wie z.B. der Arbeitsbereich [[Arch Workbench/de|Arch]], als Grundlage für die Erstellung von Polygonnetzen verwendet werden. Beachte, dass sich ein für die FEA verwendetes Netz von einem Netz unterscheidet, das mit dem Arbeitsbereich [[Mesh Workbench/de|Mesh]] erstellt oder importiert wurde.


[[Image:FEM_Workbench_workflow.svg|600px]]
[[Image:FEM_Workbench_workflow.svg|600px]]
{{Caption|Der Arbeitsbereich FEM ruft das externe Werkzeug Gmsh auf, um ein Netz aus einem Volumenkörper zu erhalten, der mit einem beliebigen Arbeitsbereich in FreeCAD erstellt wurde; es kann auch ein extern erstelltes Netz importieren}}

{{Caption|Der FEM Arbeitsbereich ruft das externe Werkzeug Gmsh auf, um ein Netz aus einem Volumenkörper zu erhalten, der mit einem beliebigen Arbeitsbereich in FreeCAD erstellt wurde; es kann auch ein extern erstelltes Netz importieren}}


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

{{Caption|(1) Festkörper, der mit PartDesign erzeugt wurde; (2) Netz, das mit dem Gmsh Werkzeug innerhalb des FEM Arbeitsbereich erzeugt wurde (alle Dreiecke); und (3) Netz, das extern mit Gmsh erzeugt wurde, in das Abaqus Format {{FileName|.inp}} exportiert und dann in FreeCAD importiert wurde (alle Vierecke)}}
{{Caption|(1) Festkörper, der mit PartDesign erzeugt wurde; (2) Netz, das mit dem Gmsh Werkzeug innerhalb des FEM Arbeitsbereich erzeugt wurde (alle Dreiecke); und (3) Netz, das extern mit Gmsh erzeugt wurde, in das Abaqus Format {{FileName|.inp}} exportiert und dann in FreeCAD importiert wurde (alle Vierecke)}}


The [[FEM MeshGmshFromShape|Gmsh]] and [[FEM MeshNetgenFromShape|Netgen tools]] are convenience tools to quickly mesh a body, and thus don't expose the full capabilities of these programs; they normally create triangular meshes, which may not be ideal for some types of analysis. If you'd like to have more control of the created mesh (use only quadrilaterals, precise element number and size, variable resolution of the mesh, etc.), you should use these programs externally, produce a mesh file in a supported format ({{FileName|.inp}}, {{FileName|.unv}}, {{FileName|.vtk}}, {{FileName|.z88}}), and import this file into FreeCAD.
Die [[FEM_MeshGmshFromShape/de|Gmsh-]] und [[FEM MeshNetgenFromShape/de|Netgen-]]Werkzeuge sind einfach anzuwendende Werkzeuge, um einen Körper schnell zu vernetzen, und besitzen nicht den vollen Funktionsumfang dieser Programme; sie erzeugen normalerweise Dreiecksnetze, die für manche Arten von Analysen nicht ideal sind. Wird mehr Kontrolle über das erstellte Netz gebraucht (nur Vierecke verwenden, genaue Elementanzahl und -Größe, variable Auflösung des Netzes, usw.), sollten diese Programme extern verwendet, eine Netzdatei in einem unterstützten Format ({{FileName|.inp}}, {{FileName|.unv}}, {{FileName|.vtk}}, {{FileName|.z88}}) erzeugt und diese Datei in FreeCAD importiert werden.


Zuvor war Netgen in FreeCAD enthalten und konnte sofort verwendet werden. Nun sollten sowohl Netgen als auch Gmsh installiert werden, bevor sie vom [[FEM Workbench/de|FEM Arbeitsbereich]] verwendet werden können. Siehe für [[FEM-Installation|FEM Installation]] Anweisungen.
Zuvor war Netgen in FreeCAD enthalten und konnte sofort verwendet werden. Nun sollten sowohl Netgen als auch Gmsh installiert werden, bevor sie vom Arbeitsbereich [[FEM Workbench/de|FEM]] verwendet werden können. Siehe [[FEM Install/de|FEM Installation]] für Anleitungen.


== Netzerstellungssoftware ==
== Netzerstellungssoftware ==
Line 29: Line 28:
Netzerstellungssoftware arbeitet mit Festkörpern, die in verschiedenen Formaten vorliegen können, wie Step und Brep. Diese Programme können unabhängig von FreeCAD verwendet werden und verfügen typischerweise Über viele Optionen zur Steuerung der Vernetzungsalgorithmen, der Elementgröße und der Randbedingungen.
Netzerstellungssoftware arbeitet mit Festkörpern, die in verschiedenen Formaten vorliegen können, wie Step und Brep. Diese Programme können unabhängig von FreeCAD verwendet werden und verfügen typischerweise Über viele Optionen zur Steuerung der Vernetzungsalgorithmen, der Elementgröße und der Randbedingungen.


Der [[FEM Workbench/de|FEM Arbeitsbereich]] hat einfache Kommunikationsoberflächen entwickelt, um Gmsh und Netgen direkt in FreeCAD zu verwenden. Andere Programme haben keine Oberfläche, aber das könnte sich in Zukunft ändern, wenn Interesse aus der Gemeinschaft besteht und wenn diese Anwendungen leicht zu integrieren sind. Die Netzerstellungssoftware darf nur dann zusammen mit FreeCAD kompiliert und verteilt werden, wenn ihre Lizenz mit der LGPL2-Lizenz kompatibel ist; andernfalls muss das Programm als externe Binärdatei verwendet werden, wie z.B. Gmsh (GPL2).
Der Arbeitsbereich [[FEM_Workbench/de|FEM]] hat einfache Kommunikationsoberflächen entwickelt, um Gmsh und Netgen direkt in FreeCAD zu verwenden. Andere Programme haben keine Oberfläche, aber das könnte sich in Zukunft ändern, wenn Interesse in der Gemeinschaft besteht und wenn diese Anwendungen leicht zu integrieren sind. Die Netzerstellungssoftware darf nur dann zusammen mit FreeCAD kompiliert und verteilt werden, wenn ihre Lizenz mit der LGPL2-Lizenz kompatibel ist; andernfalls muss das Programm als externe Binärdatei verwendet werden, wie z.B. Gmsh (GPL2).


=== Oberfläche in FreeCAD implementiert ===
=== Oberfläche in FreeCAD implementiert ===


* Gmsh: [http://gmsh.info/ main website], [https://gitlab.onelab.info/gmsh/gmsh Code Repositorium]
* Gmsh: [http://gmsh.info/ Hauptwebseite], [https://gitlab.onelab.info/gmsh/gmsh Code Repositorium]
* Netgen: [https://ngsolve.org/ main website], [https://github.com/NGSolve/netgen Code Repositorium]
* Netgen: [https://ngsolve.org/ Hauptwebseite], [https://github.com/NGSolve/netgen Code Repositorium]


=== Keine Oberfläche in FreeCAD ===
=== Keine Oberfläche in FreeCAD ===


* ENigMA, [https://forum.freecadweb.org/viewtopic.php?f=18&t=33048 forum thread], [https://github.com/bjaraujo/ENigMA code repository]
* ENigMA, [https://forum.freecadweb.org/viewtopic.php?f=18&t=33048beitrag], [https://github.com/bjaraujo/ENigMA Code Repositorium]
* libMesh, [http://libmesh.github.io/ main website], [https://github.com/libMesh/libmesh code repository], [https://forum.freecadweb.org/viewtopic.php?f=18&t=33621 forum thread]; it's a very active project, and it's C++ only
* libMesh, [http://libmesh.github.io/ Hauptwebseite], [https://github.com/libMesh/libmesh Code Repositorium], [https://forum.freecadweb.org/viewtopic.php?f=18&t=33621 Forumsbeitrag]; es ist ein sehr aktives Projekt, und es ist nur C++
* PythonOCC, [http://www.pythonocc.org/ main website]
* PythonOCC, [http://www.pythonocc.org/ Haupt-Webseite]
* SnappyHexMesh, [https://openfoamwiki.net/index.php/SnappyHexMesh main website]
* SnappyHexMesh, [https://openfoamwiki.net/index.php/SnappyHexMesh Hauptwebseite]
* Tetgen, [http://wias-berlin.de/software/tetgen/ main website]
* Tetgen, [http://wias-berlin.de/software/tetgen/ Hauptwebseite]


== Mesh elements in FreeCAD ==
==Netzelemente in FreeCAD==

FreeCAD supports various element types. The following article explains the difference between them, and when should be used: [https://www.comsol.com/blogs/meshing-your-geometry-various-element-types/ Meshing Your Geometry: When to Use the Various Element Types].
FreeCAD unterstützt verschiedene Elementtypen. Der folgende Artikel erklärt den Unterschied zwischen ihnen und wann sie verwendet werden sollten (engl.): [https://www.comsol.com/blogs/meshing-your-geometry-various-element-types/ Meshing Your Geometry: When to Use the Various Element Types].


{| 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"
Line 51: Line 51:
|-
|-
! Element !! Element !! FreeCAD API !! FreeCAD GUI !! med !! unv !! inp !! frd !! txt !! xml
! 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
| 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
| 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]]) the format allows it,<br/> but it's not readable or writable by 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" means the element type is not implemented in FreeCAD but the format would support it.
* NI" bedeutet, dass der Elementtyp in FreeCAD nicht implementiert ist, aber das Format ihn unterstützen würde.
* [[File:Edit_Cancel.svg|20px]] "-" means the format specification does not support this element type, thus FreeCAD cannot support it.
* [[File:Edit_Cancel.svg|20px]] bedeutet, dass die Formatspezifikation diesen Elementtyp nicht unterstützt, so dass FreeCAD ihn nicht unterstützen kann.
* "?" means it is not known if the format supports this element type.
* "?" bedeutet, dass es nicht bekannt ist, ob das Format diesen Elementtyp unterstützt.


== FEM Elementtypen ==
== FEM Elementtypen ==


More information on the elements, and their data structure inside FreeCAD can be found in [[FEM Element Types|FEM Element Types]].
Mehr Informationen über die Elemente und ihre Datenstruktur in FreeCAD kann in [[FEM Element Types/de|FEM Elementtypen]] gefunden werden.


=== Segment element ===
=== Segmentelement ===


[[Image:FEM_mesh_elements_1_segment.svg|600px]]
[[Image:FEM_mesh_elements_1_segment.svg|600px]]
Line 104: Line 105:
[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]]
[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]]


=== Tetrahedron element ===
=== Tetraederelement ===


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


=== Hexahedron element ===
=== Hexaederelement ===


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


=== Pentahedron element (prism) ===
=== Pentaederelement (Prisma) ===


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


=== Pyramid element ===
=== Pyramidenelement ===


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


== Scripting ==
==Skripten==

=== Create a FEM mesh completely in Python ===
===Ein FEM-Netz komplett in Python erstellen===


{{Emphasis|Siehe auch:}} [[FreeCAD Grundlagen Skripten]].
{{Emphasis|Siehe auch:}} [[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]].


Die Python API ermöglicht dem Benutzer ein Finite Element Netz festzulegen, durch direktes hinzufügen einzelner Knoten und festlegen von Kanten, Flächen und Volumen.
Die Python API ermöglicht dem Benutzer ein Finite Element Netz festzulegen, durch direktes hinzufügen einzelner Knoten und festlegen von Kanten, Flächen und Volumen.
Line 136: Line 138:
}}
}}


====Erstellen eines Netzes mit einem Tet-10 Element====
====Erstellen eines Netzes mit einem Tet-10 Element====


Erstelle ein leeres FemMesh, bestücke es mit Knoten, erstelle das Volumen und rufe schließlich {{incode|Fem.show()}} auf, um das Dokumentobjekt mit dem zugehörigen Netz zu erstellen.
Erstelle ein leeres FemMesh, bestücke es mit Knoten, erstelle das Volumen und rufe schließlich {{incode|Fem.show()}} auf, um das Dokumentobjekt mit dem zugehörigen Netz zu erstellen.
Line 160: Line 162:
obj = FreeCAD.ActiveDocument.ActiveObject
obj = FreeCAD.ActiveDocument.ActiveObject
}}
}}

Wenn du eine vordefinierte Knoten- und Elementnummerierung wünschst, übergib die entsprechende ID an die Knoten- und Volumen Methoden
Wenn du eine vordefinierte Knoten- und Elementnummerierung wünschst, übergib die entsprechende ID an die Knoten- und Volumen Methoden


Um ein aktuelles Dokumentobjekt zu erstellen, kannst du anstelle von {{incode|Fem.show()}} auch die Methode document {{incode|addObject()}} verwenden; hänge dann das erstellte Netz an das {{incode|FemMesh}} Attribut dieses Objekts an.
Um ein aktuelles Dokumentobjekt zu erstellen, kannst du anstelle von {{incode|Fem.show()}} auch die Methode document {{incode|addObject()}} verwenden; hänge dann das erstellte Netz an das {{incode|FemMesh}} Attribut dieses Objekts an.

{{Code|code=
{{Code|code=
a = Fem.FemMesh()
a = Fem.FemMesh()
Line 185: Line 189:
==== Visuelle Eigenschaften ====
==== Visuelle Eigenschaften ====


Once a FemMesh object has been created with {{incode|Fem.show()}}, some of its visual properties can be changed by modifying the different attributes of its {{incode|ViewObject}}. This can be useful to postprocess the mesh after a finite element solution has been obtained.
Sobald ein FemMesh Objekt mit {{incode|Fem.show()}} erstellt wurde, können einige seiner visuellen Eigenschaften durch Ändern der verschiedenen Attribute seines {{incode|ViewObject}} geändert werden. Dies kann nützlich sein, um das Netz nach einer Finite Elemente Lösung nachzubearbeiten.


Heben Sie einige Knoten im Netz hervor
Highlight some nodes in the mesh
{{Code|code=
{{Code|code=
Fem.show(m)
Fem.show(m)
Line 194: Line 198:
obj.ViewObject.HighlightedNodes = [1, 2, 3]
obj.ViewObject.HighlightedNodes = [1, 2, 3]
}}
}}
The individual elements of a mesh can be modified by passing a dictionary with the appropriate {{incode|key:value}} pairs.


Die einzelnen Elemente eines Netzes können durch die Übergabe eines Wörterbuchs mit den entsprechenden {{incode|key:value}} Paaren modifiziert werden
Set volume 1 to red

Setze das Volumen 1 auf rot

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

Set nodes 1, 2 and 3 to a certain color; the faces between the nodes acquire an interpolated color
Setzt man die Knoten 1, 2 und 3 auf unterschiedliche Farben, erhält die Fläche dazwischen eine daraus errechnete Farbe.

{{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)}
}}
}}

Displace the nodes 1 and 2 by the magnitude and direction defined by a vector
Displace the nodes 1 and 2 by the magnitude and direction defined by a vector.

{{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)}
}}
}}

Double the factor of the displacement shown ({{Emphasis|Note to editors: removed in newer versions?}})
Double the factor of the displacement shown. ({{Emphasis|Note to editors: removed in newer versions?}})

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


== Skripten Beispiele für jeden unterstützten Elementtyp ==
== Scripting examples of each supported element type ==


=== Beam, 2 node line, seg2 (linear) ===
=== Träger, 2 Knoten Linie, seg2 (linear) ===


{{Code|code=
{{Code|code=
Line 232: Line 244:
}}
}}


=== Beam, 3 node line, seg3 (quadratic) ===
=== Träger, 3 Knoten Linie, seg3 (quadratisch) ===


{{Code|code=
{{Code|code=
Line 270: Line 282:


Add a face with the element number.
Add a face with the element number.

{{Code|code=
{{Code|code=
elemtria3 = Fem.FemMesh()
elemtria3 = Fem.FemMesh()
Line 309: Line 322:


Add a face with the element number.
Add a face with the element number.

{{Code|code=
{{Code|code=
elemtria6 = Fem.FemMesh()
elemtria6 = Fem.FemMesh()
Line 345: Line 359:


Add a face with the element number.
Add a face with the element number.

{{Code|code=
{{Code|code=
elemquad4 = Fem.FemMesh()
elemquad4 = Fem.FemMesh()
Line 384: Line 399:
}}
}}


Add a face with the element number.
Add a face with the element number.

{{Code|code=
{{Code|code=
elemquad8 = Fem.FemMesh()
elemquad8 = Fem.FemMesh()
Line 420: Line 436:


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elemtetra4 = Fem.FemMesh()
elemtetra4 = Fem.FemMesh()
Line 461: Line 478:
}}
}}


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elemtetra10 = Fem.FemMesh()
elemtetra10 = Fem.FemMesh()
Line 499: Line 517:
}}
}}


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elemhexa8 = Fem.FemMesh()
elemhexa8 = Fem.FemMesh()
Line 553: Line 572:


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elemhexa20 = Fem.FemMesh()
elemhexa20 = Fem.FemMesh()
Line 589: Line 609:


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elempenta6 = Fem.FemMesh()
elempenta6 = Fem.FemMesh()
Line 637: Line 658:


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elempenta15 = Fem.FemMesh()
elempenta15 = Fem.FemMesh()
Line 672: Line 694:


Add a volume with the element number.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elempyra5 = Fem.FemMesh()
elempyra5 = Fem.FemMesh()
Line 716: Line 739:
}}
}}


Füge ein Volumen mit der Elementnummer hinzu.
Add a volume with the element number.

{{Code|code=
{{Code|code=
elempyra13 = Fem.FemMesh()
elempyra13 = Fem.FemMesh()
Line 732: Line 756:


== Scripting examples for groups ==
== Scripting examples for groups ==
See for example https://forum.freecadweb.org/viewtopic.php?f=18&t=37304&start=20#p318823


See for example https://forum.freecadweb.org/viewtopic.php?f=18&t=37304&start=20#p318823




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

Latest revision as of 19:07, 1 October 2022

Ein Finite-Elemente-Netz erstellen

Die Finite-Elemente-Analyse (FEA) wird auf einem Polygonnetz durchgeführt, das aus mehreren drei- und vierseitigen finiten Elementen besteht, die einen Originalkörper unterteilen. Je feiner das Netz ist, desto genauer sind die numerischen Ergebnisse, aber desto größer ist auch die Berechnungszeit. Ein Gleichgewicht zwischen der Größe des Netzes, der Berechnungszeit und der Genauigkeit der Ergebnisse ist ein wichtiges Merkmal einer gut definierten Finite-Elemente-Analyse.

Es gibt verschiedene Möglichkeiten, ein Polygonnetz im Arbeitsbereich FEM einzurichten:

  • Das Werkzeug FEM mesh from shape by Gmsh aus der grafischen Benutzeroberfläche.
  • Das Werkzeug FEM mesh from shape by Netgen aus der grafischen Benutzeroberfläche.
  • Importieren eines Polygonnetzes aus einem anderen Programm. Insbesondere können Gmsh und Netgen außerhalb von FreeCAD allein verwendet werden, um Volumenkörper wie Step Dateien zu vernetzen.
  • Manuelle Erstellung des Netzes durch Python-Skripte.

Die Gmsh und Netgen Werkzeuge unterstützen die Vernetzung von Körpern, die mit den Arbeitsbereichen Part und PartDesign erstellt wurden, sowie einfache Kopien dieser Körper. Im Allgemeinen kann jeder Arbeitsbereich, der Volumenkörper erzeugt, wie z.B. der Arbeitsbereich Arch, als Grundlage für die Erstellung von Polygonnetzen verwendet werden. Beachte, dass sich ein für die FEA verwendetes Netz von einem Netz unterscheidet, das mit dem Arbeitsbereich Mesh erstellt oder importiert wurde.

Der Arbeitsbereich FEM ruft das externe Werkzeug Gmsh auf, um ein Netz aus einem Volumenkörper zu erhalten, der mit einem beliebigen Arbeitsbereich in FreeCAD erstellt wurde; es kann auch ein extern erstelltes Netz importieren

(1) Festkörper, der mit PartDesign erzeugt wurde; (2) Netz, das mit dem Gmsh Werkzeug innerhalb des FEM Arbeitsbereich erzeugt wurde (alle Dreiecke); und (3) Netz, das extern mit Gmsh erzeugt wurde, in das Abaqus Format .inp exportiert und dann in FreeCAD importiert wurde (alle Vierecke)

Die Gmsh- und Netgen-Werkzeuge sind einfach anzuwendende Werkzeuge, um einen Körper schnell zu vernetzen, und besitzen nicht den vollen Funktionsumfang dieser Programme; sie erzeugen normalerweise Dreiecksnetze, die für manche Arten von Analysen nicht ideal sind. Wird mehr Kontrolle über das erstellte Netz gebraucht (nur Vierecke verwenden, genaue Elementanzahl und -Größe, variable Auflösung des Netzes, usw.), sollten diese Programme extern verwendet, eine Netzdatei in einem unterstützten Format (.inp, .unv, .vtk, .z88) erzeugt und diese Datei in FreeCAD importiert werden.

Zuvor war Netgen in FreeCAD enthalten und konnte sofort verwendet werden. Nun sollten sowohl Netgen als auch Gmsh installiert werden, bevor sie vom Arbeitsbereich FEM verwendet werden können. Siehe FEM Installation für Anleitungen.

Netzerstellungssoftware

Netzerstellungssoftware arbeitet mit Festkörpern, die in verschiedenen Formaten vorliegen können, wie Step und Brep. Diese Programme können unabhängig von FreeCAD verwendet werden und verfügen typischerweise Über viele Optionen zur Steuerung der Vernetzungsalgorithmen, der Elementgröße und der Randbedingungen.

Der Arbeitsbereich FEM hat einfache Kommunikationsoberflächen entwickelt, um Gmsh und Netgen direkt in FreeCAD zu verwenden. Andere Programme haben keine Oberfläche, aber das könnte sich in Zukunft ändern, wenn Interesse in der Gemeinschaft besteht und wenn diese Anwendungen leicht zu integrieren sind. Die Netzerstellungssoftware darf nur dann zusammen mit FreeCAD kompiliert und verteilt werden, wenn ihre Lizenz mit der LGPL2-Lizenz kompatibel ist; andernfalls muss das Programm als externe Binärdatei verwendet werden, wie z.B. Gmsh (GPL2).

Oberfläche in FreeCAD implementiert

Keine Oberfläche in FreeCAD

Netzelemente in FreeCAD

FreeCAD unterstützt verschiedene Elementtypen. Der folgende Artikel erklärt den Unterschied zwischen ihnen und wann sie verwendet werden sollten (engl.): Meshing Your Geometry: When to Use the Various Element Types.

Import and export of mesh elements
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
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 () the format allows it,
but it's not readable or writable by FEniCS
hexa 20 C3D20
penta 6 C3D6 ?
penta 15 C3D15 ?
pyra 5
pyra 13
  • NI" bedeutet, dass der Elementtyp in FreeCAD nicht implementiert ist, aber das Format ihn unterstützen würde.
  • bedeutet, dass die Formatspezifikation diesen Elementtyp nicht unterstützt, so dass FreeCAD ihn nicht unterstützen kann.
  • "?" bedeutet, dass es nicht bekannt ist, ob das Format diesen Elementtyp unterstützt.

FEM Elementtypen

Mehr Informationen über die Elemente und ihre Datenstruktur in FreeCAD kann in FEM Elementtypen gefunden werden.

Segmentelement

Dreieckelement

Viereckelement

Tetraederelement

Hexaederelement

Pentaederelement (Prisma)

Pyramidenelement

Skripten

Ein FEM-Netz komplett in Python erstellen

Siehe auch: FreeCAD Grundlagen Skripten.

Die Python API ermöglicht dem Benutzer ein Finite Element Netz festzulegen, durch direktes hinzufügen einzelner Knoten und festlegen von Kanten, Flächen und Volumen.

Das Netz selbst ist vom Typ Fem::FemMesh, das an ein entsprechendes Dokumentobjekt vom Typ Fem::FemMeshObject angehängt werden muss .

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

Erstellen eines Netzes mit einem Tet-10 Element

Erstelle ein leeres FemMesh, bestücke es mit Knoten, erstelle das Volumen und rufe schließlich Fem.show() auf, um das Dokumentobjekt mit dem zugehörigen Netz zu erstellen.

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

Wenn du eine vordefinierte Knoten- und Elementnummerierung wünschst, übergib die entsprechende ID an die Knoten- und Volumen Methoden

Um ein aktuelles Dokumentobjekt zu erstellen, kannst du anstelle von Fem.show() auch die Methode document addObject() verwenden; hänge dann das erstellte Netz an das FemMesh Attribut dieses Objekts an.

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

Visuelle Eigenschaften

Sobald ein FemMesh Objekt mit Fem.show() erstellt wurde, können einige seiner visuellen Eigenschaften durch Ändern der verschiedenen Attribute seines ViewObject geändert werden. Dies kann nützlich sein, um das Netz nach einer Finite Elemente Lösung nachzubearbeiten.

Heben Sie einige Knoten im Netz hervor

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

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

Die einzelnen Elemente eines Netzes können durch die Übergabe eines Wörterbuchs mit den entsprechenden key:value Paaren modifiziert werden

Setze das Volumen 1 auf rot

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

Setzt man die Knoten 1, 2 und 3 auf unterschiedliche Farben, erhält die Fläche dazwischen eine daraus errechnete Farbe.

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

Displace the nodes 1 and 2 by the magnitude and direction defined by a vector.

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

Double the factor of the displacement shown. (Note to editors: removed in newer versions?)

obj.ViewObject.animate(2.0)

Skripten Beispiele für jeden unterstützten Elementtyp

Träger, 2 Knoten Linie, seg2 (linear)

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"

Träger, 3 Knoten Linie, seg3 (quadratisch)

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"

Shell, 3 node triangle, tria3 (linear)

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

Add a face with the element number.

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)

Shell, 6 node triangle, tria6 (quadratic)

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

Add a face with the element number.

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)

Shell, 4 node quadrangle, quad4 (linear)

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

Add a face with the element number.

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)

Shell, 8 node quadrangle, quad8 (quadratic)

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

Add a face with the element number.

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, 4 node tetrahedron, tetra4 (linear)

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"

Add a volume with the element number.

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, 10 node tetrahedron, tetra10 (quadratic)

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"

Add a volume with the element number.

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, 8 node hexahedron, hexa8 (linear)

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"

Add a volume with the element number.

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, 20 node hexahedron, hexa20 (quadratic)

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"

Add a volume with the element number.

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, 6 node pentahedron, penta6 (linear)

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"

Add a volume with the element number.

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, 15 node pentahedron, penta15 (quadratic)

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"

Add a volume with the element number.

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, 5 node pyramid, pyra5 (linear)

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"

Add a volume with the element number.

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, 13 node pyramid, pyra13 (quadratic)

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"

Füge ein Volumen mit der Elementnummer hinzu.

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)

Scripting examples for groups

See for example https://forum.freecadweb.org/viewtopic.php?f=18&t=37304&start=20#p318823