FEM Mesh/de: Difference between revisions
(Created page with "Netzerstellungssoftware arbeitet mit Festkörpern, die in verschiedenen Formaten vorliegen können, wie Step und Brep. Diese Programme können unabhängig von FreeCAD verwende...") |
(Created page with "Setzt man die Knoten 1, 2 und 3 auf unterschiedliche Farben, erhält die Fläche dazwischen eine daraus errechnete Farbe.") |
||
(55 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
{{TOCright}} |
{{TOCright}} |
||
== |
==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]] |
* Manuelle Erstellung des Netzes durch [[Python/de|Python]]-Skripte. |
||
Die Gmsh und Netgen Werkzeuge unterstützen die Vernetzung von Körpern, die mit |
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)}} |
||
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 |
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 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). |
|||
The [[FEM Workbench]] has developed simple communication interfaces to use Gmsh and Netgen directly inside FreeCAD. Other programs don't have an interface, but this could change in the future if there is interest from the community, and if those applications are easy to integrate. The meshing software can be compiled and distributed together with FreeCAD only if its license is compatible with the LGPL2 license; otherwise, the program has to be used as an external binary, like Gmsh (GPL2) is used. |
|||
=== |
=== Oberfläche in FreeCAD implementiert === |
||
* Gmsh: [http://gmsh.info/ |
* Gmsh: [http://gmsh.info/ Hauptwebseite], [https://gitlab.onelab.info/gmsh/gmsh Code Repositorium] |
||
* Netgen: [https://ngsolve.org/ |
* Netgen: [https://ngsolve.org/ Hauptwebseite], [https://github.com/NGSolve/netgen Code Repositorium] |
||
=== |
=== Keine Oberfläche in FreeCAD === |
||
* ENigMA, [https://forum.freecadweb.org/viewtopic.php?f=18&t= |
* ENigMA, [https://forum.freecadweb.org/viewtopic.php?f=18&t=33048beitrag], [https://github.com/bjaraujo/ENigMA Code Repositorium] |
||
* libMesh, [http://libmesh.github.io/ |
* 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/ |
* PythonOCC, [http://www.pythonocc.org/ Haupt-Webseite] |
||
* SnappyHexMesh, [https://openfoamwiki.net/index.php/SnappyHexMesh |
* SnappyHexMesh, [https://openfoamwiki.net/index.php/SnappyHexMesh Hauptwebseite] |
||
* Tetgen, [http://wias-berlin.de/software/tetgen/ |
* Tetgen, [http://wias-berlin.de/software/tetgen/ Hauptwebseite] |
||
== |
==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 || |
| 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 |
| 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. |
|||
* [[File:Edit_Cancel.svg|20px]] "-" means the format specification does not support this element type, thus FreeCAD cannot support it. |
|||
* "?" means it is not known if the format supports this element type. |
|||
* NI" bedeutet, dass der Elementtyp in FreeCAD nicht implementiert ist, aber das Format ihn unterstützen würde. |
|||
== FEM element types == |
|||
* [[File:Edit_Cancel.svg|20px]] 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 == |
|||
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]] |
||
=== |
=== Dreieckelement === |
||
[[Image:FEM_mesh_elements_2_triangle.svg|600px]] |
[[Image:FEM_mesh_elements_2_triangle.svg|600px]] |
||
=== |
=== Viereckelement === |
||
[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]] |
[[Image:FEM_mesh_elements_3_quadrangle.svg|600px]] |
||
=== |
=== Tetraederelement === |
||
[[Image:FEM_mesh_elements_4_tetrahedron.svg|600px]] |
[[Image:FEM_mesh_elements_4_tetrahedron.svg|600px]] |
||
=== |
=== Hexaederelement === |
||
[[Image:FEM_mesh_elements_5_hexahedron.svg|600px]] |
[[Image:FEM_mesh_elements_5_hexahedron.svg|600px]] |
||
=== |
=== Pentaederelement (Prisma) === |
||
[[Image:FEM_mesh_elements_6_pentahedron.svg|600px]] |
[[Image:FEM_mesh_elements_6_pentahedron.svg|600px]] |
||
=== |
=== Pyramidenelement === |
||
[[Image:FEM_mesh_elements_7_pyramid.svg|600px]] |
[[Image:FEM_mesh_elements_7_pyramid.svg|600px]] |
||
== |
==Skripten== |
||
=== Create a FEM mesh completely in Python === |
|||
===Ein FEM-Netz komplett in Python erstellen=== |
|||
{{Emphasis| |
{{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. |
|||
The Python API allows the user to define a finite element mesh by directly adding individual nodes, and defining edges, faces, and volumes. |
|||
Das Netz selbst ist vom Typ {{incode|Fem::FemMesh}}, das an ein entsprechendes Dokumentobjekt vom Typ {{incode|Fem::FemMeshObject}} angehängt werden muss . |
|||
{{Code|code= |
{{Code|code= |
||
Line 136: | Line 138: | ||
}} |
}} |
||
==== |
====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. |
|||
{{Code|code= |
{{Code|code= |
||
Line 160: | Line 162: | ||
obj = FreeCAD.ActiveDocument.ActiveObject |
obj = FreeCAD.ActiveDocument.ActiveObject |
||
}} |
}} |
||
If you want to have predefined node and element numbering, pass the appropriate ID to the node and volume methods. |
|||
Wenn du eine vordefinierte Knoten- und Elementnummerierung wünschst, übergib die entsprechende ID an die Knoten- und Volumen Methoden |
|||
To create an actual document object, instead of {{incode|Fem.show()}} you can also use the document {{incode|addObject()}} method; then attach the created mesh to this object's {{incode|FemMesh}} attribute. |
|||
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 183: | Line 187: | ||
}} |
}} |
||
==== |
==== Visuelle Eigenschaften ==== |
||
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 == |
|||
=== |
=== Träger, 2 Knoten Linie, seg2 (linear) === |
||
{{Code|code= |
{{Code|code= |
||
Line 232: | Line 244: | ||
}} |
}} |
||
=== |
=== 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
- Gmsh: Hauptwebseite, Code Repositorium
- Netgen: Hauptwebseite, Code Repositorium
Keine Oberfläche in FreeCAD
- ENigMA, [1], Code Repositorium
- libMesh, Hauptwebseite, Code Repositorium, Forumsbeitrag; es ist ein sehr aktives Projekt, und es ist nur C++
- PythonOCC, Haupt-Webseite
- SnappyHexMesh, Hauptwebseite
- Tetgen, Hauptwebseite
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.
- 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
- Materials: Solid, Fluid, Nonlinear mechanical, Reinforced (concrete); Material editor
- Element geometry: Beam (1D), Beam rotation (1D), Shell (2D), Fluid flow (1D)
Constraints
- Electromagnetic: Electrostatic potential, Current density, Magnetization
- Geometrical: Plane rotation, Section print, Transform
- Mechanical: Fixed, Displacement, Contact, Tie, Spring, Force, Pressure, Centrif, Self weight
- Thermal: Initial temperature, Heat flux, Temperature, Body heat source
- Overwrite Constants: Constant vacuum permittivity
- Solve: CalculiX Standard, Elmer, Mystran, Z88; Equations: Deformation, Elasticity, Electrostatic, Electricforce, Magnetodynamic, Magnetodynamic 2D, Flow, Flux, Heat; Solver: Solver control, Solver run
- Results: Purge, Show; Postprocessing: Apply changes, Pipeline from result, Warp filter, Scalar clip filter, Function cut filter, Region clip filter, Contours filter, Line clip filter, Stress linearization plot, Data at point clip filter, Filter function plane, Filter function sphere, Filter function cylinder, Filter function box
- Additional: Preferences; FEM Install, FEM Mesh, FEM Solver, FEM CalculiX, FEM Concrete; FEM Element Types
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzlicher Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Programmeinstellungen, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, Hilf FreeCAD, Spende
- Hilfe: Tutorien, Video Tutorien
- Arbeitsbereiche: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web