FEM Tutorial Python

Introduction
This tutorial is meant to show how a simple Finite Element Analysis (FEA) in FreeCAD's FEM Workbench is done using python. The model from the FEM CalculiX Cantilever 3D tutorial will be used for this example.



Requirements

 * The compatible version of FreeCAD as designated in the tutorial overview.
 * Use the to see the version of FreeCAD that is installed.
 * Impotant Note: Due to the continuous development of the [[Image:Workbench_FEM.svg|32px]] FEM Workbench it is recommended to use the latest development snapshot of FreeCAD especially for python scripted FEM analyses.
 * A working FEM workbench. Run the FEM CalculiX Cantilever 3D analysis to ascertain this.

FEM mesh
This section contains the FEM mesh code. Please expand it to view the contents.

Note: Check out the Additional Information section below for how to script mesh generation with GMSH or Netgen mesh object.

Run the analysis
To run the analysis using Python, an instance of the module needs to be created. Once this instance has been created, we have two choices when running the analysis: If there is only one analysis in the document and only one solver in the analysis, then no objects need to be passed on. The method of the  class will activate the analysis if the GUI is up.
 * 1) Run all processes together at once (see "All in one" section below)
 * 2) Run processes one after the other (see "Step by step" section below)

Activating an analysis using Python works a follows:

Netgen
Scripting the Netgen mesh object was attempted in the "Parametrized FEM study" (FreeCAD FEM subforum thread), but has some limitations.

GMSH
On the contrary, the GMSH mesh object fully supports python scripting. See the following forum posts:
 * https://forum.freecadweb.org/viewtopic.php?f=22&t=42922#p365042
 * forum topic http://forum.freecadweb.org/viewtopic.php?f=18&t=20087

Scripting multiple analysis
See forum post: http://forum.freecadweb.org/viewtopic.php?f=18&t=19549#p151385

Standard FreeCAD result object
See forum posts:
 * https://forum.freecadweb.org/viewtopic.php?f=18&t=34048&p=289519#p289519 → scale factor in standard result object
 * http://forum.freecadweb.org/viewtopic.php?f=18&t=4677&start=20#p148982
 * http://forum.freecadweb.org/viewtopic.php?f=18&t=4677&start=30#p149043
 * http://forum.freecadweb.org/viewtopic.php?t=18415#p144028
 * https://forum.freecadweb.org/viewtopic.php?f=18&t=31123&p=258761#p258761 → coloring just one element
 * https://forum.freecadweb.org/viewtopic.php?f=18&t=41951&p=357687#p357685 → reset all result mesh, show colored displacement magnitude

Vtk result object
See forum posts:
 * https://forum.freecadweb.org/viewtopic.php?f=18&t=47227#p405406

Console mode
Writing the input file in FreeCAD console mode (no Gui) could be done in test mode. See this relevant forum post for more details and experimentation.

Appendix
Have Fun! Also if you have feedback or any refinements, feel free to participate on the FreeCAD FEM subforum.