Flower hugging the sun

Was strolling about my garden and found a wonderful flower. It looked like it was hugging the sun, trying to reach it pushing the lower petals down and the pulling the fluffy pink part up. So beautiful…

A flower hugging the sun
A flower hugging the sun

Line wheel

 

I just love this photo a simple static problem an object mass supported by a table. The most simple structural problem I can imagine with added drama of a close up and incredible lighting.

Line Wheel Light and Shadow
Line Wheel Light and Shadow

The measuring scale

Units play a major role on any simulation software. What are units? Which units are present in specific physics problems and the various types of units that exist for the same physics are a small list of this world. Some times units can be a big headache when we want to send data from one system to another. A good example where I have struggled with this was in combining Ansys with LS-Dyna; fortunately today interchanging k files is a breeze but this was not so in the past.

Measuring Scale & units
Measuring Scale & units

Compiling FreeCAD for FEM in Mac OS

I always like to take the latest FreeCAD version to check out new features that are coming along.

Since I use a Mac operating system things aren’t the same as using a Windows or Linux system.

Some software is useful to have already installed to help in the compiling process:

Latest python, Xcode and homebrew should be installed.

Then in a terminal window type:

brew tap homebrew/science
brew tap freecad/freecad
brew install eigen
brew install --only-dependencies freecad --with-packaging-utils

(Repeat again the same instruction it seems that not everything is installed at first run)

brew install --only-dependencies freecad --with-packaging-utils
brew install gmsh --with-opencascade
Brew install netgen
brew install homebrew/science/nglib --with-opencascade

Dependencies X-Code:

xcode-select --install

After setting up all the necessary content it’s time to compile!

The source and build folders are created side-by-side under username. This will change from system to system (it’s your home folder name)

Create a folder named FreeCAD

mkdir ~/FreeCAD
cd ~/FreeCAD

You will get the following folder configuration:

/Users/username/FreeCAD

The following command will clone the FreeCAD git repository into a directory called FreeCAD-git.

git clone https://github.com/FreeCAD/FreeCAD FreeCAD-git

Go back

cd ..

Create the build folder.

mkdir ~/FreeCAD/build
cd build

Now we need to configure (this part can change with time depending of path locations and versions):

cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DBUILD_QT5=1 \
-DCMAKE_PREFIX_PATH="/usr/local/Cellar/qt@5.6/5.6.2/lib/cmake" \
-DFREECAD_USE_EXTERNAL_KDL=1 \
-DBUILD_FEM_NETGEN=1 \
-DFREECAD_CREATE_MAC_APP=1 \
-DCMAKE_INSTALL_PREFIX="./.." \
-OCC_INCLUDE_DIR="/usr/local/Cellar/opencascade/7.1.0_1/include/opencascade/" \
../FreeCAD-git/

Compiling: use -j and a number (for 4 cores I use 4 + 1)

make -j5 install

The peach close-up

Learning bit of photography gave me more sensitivity about what my eyes are seeing. The way light touches objects, involving them, bouncing back shedding a shadow giving texture and form. Is a illusion? Maybe yes. But still lighting is a pathway to our senses and mood expression. I know there are out there rendering software that intends to simulate lighting effects but maybe still lacks the warmth real light gives to photography.

Light, form, shape, texture and a peach
Light, form, shape, texture and a peach

 

Light, form, shape, texture and a peach close-up
Light, form, shape, texture and a peach close-up

Understanding what NetGen is doing!

When using FreeCAD 0.17 it is not that difficult to make a simulation of something pressuring a cube that is fixed to the ground. I’t a simple case where we follow the typical simulation procedure… Make drawing, define boundary conditions, generate mesh, solve and get results.

Simulation Process Steps
Simulation Process Steps

I can understand that I need boundary conditions since these are the essence of the problem. But the mesh seems out of place. Or not… It is the building block of the finite element method where we describe a complex geometry into multiple small connected elements. The mesher will transform the solid in building blocks that represent the geometry we wish to study. We can use a mirrad of element types (block shapes) and the mathematical formulations they hold. NetGen should not be any different it can have tetrahedrons, hexahedrons, … and each specific nodes required…

But a question which came to my mind was how would the element shape originator and the element formulation originator work. Are they the same?Why I make this question? In freeCAD I generate a mesh with NetGen or Gmsh, however I solve it with Calculix and not the solver from NGSolve or Gmsh.

Before attempting a solution, a mesh is generated and thus the shape of the elements is defined and from the images they look tetrahedrons.

Paper Clip tetrahedron Mesh
Paper Clip tetrahedron Mesh
Paper Clip Circular section Mesh
Paper Clip Circular section Mesh

I found an answer to my questions in a paper written by one of the Authors of NetGen: Joachim Schöberl: An advancing front 2D/3D-mesh generator based on abstract rules.

The mesh is generated according to a specific sequence from a geometry. First special points are gathered on the corners of the target geometry, next edges have to be detected to then create a surface mesh that follows specific element shape rules; the final step is to create a volume mesh from the surface mesh and another specific rules necessary for element quality.

The output should be a cloud of nodes, elements and their connectivity to each other. From the paper it looks like it is purely connected to the geometry but then what connects to the differential equations we wish to solve? For instance how do I say a line is a beam? Or how do I create a body shell which basically is a shell with thickness.

Here comes the solver part. In case of calculix with NetGen used in this example all tetrahedrons should have a specific element type which will define the physics involved being structural, thermal, electric. In this case structural.

Indirectly the program gives a hint of the element type suggesting structural loads and forces in the boundary conditions or for a thermal case (not this one), the appropriate thermal boundary conditions.

As an example I am picking a Cube made in FreeCAD using NetGen mesher and Calculix solver. Before entering the solving process I generated the .inp file which contains the mesh, the boundary conditions and the material data to perform the simulation.

Somewhere in the .inp file you will find the following:

TYPE=C3D10

The element type name used is C3D10, as expected expected since normally the solver has a ton of element types, and there should also be in the Calculix solver a similar variety  like for instance Ansys with Solid187 (https://www.sharcnet.ca/Software/Ansys/17.0/en-us/help/ans_elem/Hlp_E_SOLID187.html), Solid186 or Solid226; for a list see this reference:

https://www.sharcnet.ca/Software/Ansys/17.0/en-us/help/ans_elem/

More details about C3D10 element can be seen in:

http://web.mit.edu/calculix_v2.7/CalculiX/ccx_2.7/doc/ccx/node33.html

And a list off all Calculix elements can be seen here:

http://web.mit.edu/calculix_v2.7/CalculiX/ccx_2.7/doc/ccx/node25.html

 

** written by FreeCAD inp file writer for CalculiX,Abaqus meshes

** Nodes
*Node, NSET=Nall
1, 10, 10, 0
2, 10, 10, 10
3, 10, 0, 0
4, 10, 0, 10
5, 0, 10, 0
6, 0, 10, 10
7, 0, 0, 0
8, 0, 0, 10
9, 0, 5, 10
10, 5, 10, 10
11, 10, 5, 10
12, 5, 0, 10
13, 0, 5, 0
14, 5, 10, 0
15, 10, 5, 0
16, 5, 0, 0
17, 10, 10, 5
18, 0, 10, 5
19, 10, 0, 5
20, 0, 0, 5
21, 5, 5, 10
22, 5, 5, 0
23, 5, 10, 5
24, 5, 0, 5
25, 10, 5, 5
26, 0, 5, 5

** Volume elements
<span style="color: #0000ff;"><strong>*Element, TYPE=C3D10, ELSET=Evolumes</strong></span>
25, 7, 4, 6, 8, 24, 21, 26, 20, 12, 9
26, 7, 6, 4, 1, 26, 21, 24, 22, 23, 25
27, 5, 7, 1, 6, 13, 22, 14, 18, 26, 23
28, 4, 7, 1, 3, 24, 22, 25, 19, 16, 15
29, 4, 2, 1, 6, 11, 17, 25, 21, 10, 23

** Define element set Eall
*ELSET, ELSET=Eall
Evolumes

***********************************************************
** Element sets for materials and FEM element type (solid, shell, beam, fluid)
** written by write_element_sets_material_and_femelement_type function
*ELSET,ELSET=SolidMaterialSolid
Evolumes

***********************************************************
** Node sets for fixed constraint
** written by write_node_sets_constraints_fixed function
** FemConstraintFixed
*NSET,NSET=FemConstraintFixed
3,
4,
7,
8,
12,
16,
19,
20,
24,

***********************************************************
** Materials
** written by write_materials function
** Young's modulus unit is MPa = N/mm2
** FreeCAD material name: 1C60
** SolidMaterial
*MATERIAL, NAME=SolidMaterial
*ELASTIC
210000, 0.300

***********************************************************
** Sections
** written by write_femelementsets function
*SOLID SECTION, ELSET=SolidMaterialSolid, MATERIAL=SolidMaterial

***********************************************************
** At least one step is needed to run an CalculiX analysis of FreeCAD
** written by write_step_begin function
*STEP
*STATIC

***********************************************************
** Fixed Constraints
** written by write_constraints_fixed function
** FemConstraintFixed
*BOUNDARY
FemConstraintFixed,1
FemConstraintFixed,2
FemConstraintFixed,3

***********************************************************
** Node loads Constraints
** written by write_constraints_force function
*CLOAD
** FemConstraintForce
** node loads on shape: Box:Face4
1,2,-0.0000000000000E+00
2,2,-0.0000000000000E+00
5,2,-0.0000000000000E+00
6,2,-0.0000000000000E+00
10,2,-1.6666666666667E+02
14,2,-1.6666666666667E+02
17,2,-1.6666666666667E+02
18,2,-1.6666666666667E+02
23,2,-3.3333333333333E+02

***********************************************************
** Outputs --&amp;gt; frd file
** written by write_outputs_types function
*NODE FILE
U
*EL FILE
S, E
** outputs --&amp;gt; dat file
*NODE PRINT , NSET=Nall
U
*EL PRINT , ELSET=Eall
S

***********************************************************
** written by write_step_end function
*END STEP

***********************************************************
** CalculiX Input file
** written by write_footer function
** written by --&amp;gt; FreeCAD 0.17.12321 (Git)
** written on --&amp;gt; Sun Oct 8 21:43:43 2017
** file name --&amp;gt;
** analysis name --&amp;gt; Analysis
**
**
**
** Units
**
** Geometry (mesh data) --&amp;gt; mm
** Materials (Young's modulus) --&amp;gt; N/mm2 = MPa
** Loads (nodal loads) --&amp;gt; N
**

 

The apple

A simple apple resting on top of a table. The apple could simply be a pressure point on top of the table. But what if instead of having a rigid support the apple was resting on top of an elastic surface? Depending if we want to know the transient between oscillation (transient) to final static resting position (static structural). I know that can try my luck with FreeCAD and Calculix to study stationary problems but what about explicit methods for transient analysis?

The Apple
The Apple

The Paper Clip

A paper clip as simple as it is. It always is handy when we need to join paper sheets together. A soft metal wire is bended in such a way that when we insert a few paper sheets in-between the bended profile, it will act as a spring load pressing the paper sheets together.

Paper Clip
Paper Clip

The mesher used in this case was NetGen with standard options:

Max Size: 1000
Growth Rate: 0.3
Nbr. Segments per Edge: 1
Nbr. Segments per Radius: 2

Resulting Mesh:

Node count: 80181
Triangle count: 25166
Tetrahedron count: 39417

Paper Clip tetrahedron Mesh
Paper Clip tetrahedron Mesh

But what did NetGen actually do? It did a mesh but many questions should now start to appear. Some questions came to my mind, like what elements did it used, what is the general quality of the elements like for instance:

  • Element quality criteria;
  • Aspect ratio
  • Jacobean
  • Warping factor
  • Maximum corner angle
  • Skewness
  • Orthogonal quality

Also I wonder what element types are used and where can I find documentation. I will try to understand this better in my next posts…