Target Outcome

Finite element mesh of a tissue of interest ready for model development:


Include(Infrastructure/AuxiliarySoftware, "Infrastructure", 2, from="= Geometry & Mesh Generation & Manipulation =", to="= Scripting & Numerical Analysis =")

Previous Protocols

For more details, see ["Specifications/GeometryGeneration"].



Meshing Techniques

-- ["aerdemir"] DateTime(2013-12-30T15:14:36Z) This section may list general purpose procedures and alternatives to utilize the same input to reach the same output. Procedures optimized for specific tissues should also be provided in here.



Model components: rigid bodies, shell (i.e. bone: femur, tibia, patella)

IA-FEMesh + STL:

Software: IA-FEMesh, Version 1.0

Method: Quadrilateral Surface Meshing

Input: STL triangulated surface geometry

Example Files:

OpenKnee, Gen. 1 model, femoral geometry (w/o holes): attachment:femur.igs,

IA-FEMesh block:

LIMITATION: not able to control projection of block edge elements nodes to geometric edges!

  1. Run IA-FEMesh

Example file results:

IA-FEMesh surface mesh:


Model components: deformable bodies, volumetric (i.e. cartilage, ligaments, menisci)

IA-FEMesh + STL:

Salome Sub-Meshing + Hex-topology IGES:

Software: Salome 7.5.1

Method: Hexahedral Sub-Meshing (NOTE: tried Salome HEXABLOCK meshing, but face elements were twisted due to edge curvature)

Input: IGES parametric surface/volume geometry with hexahedral topology (i.e. 8 nodes, 12 edges, 6 faces)

Example Files:

OpenKnee, Gen. 1 model, lateral tibia cartilage geometry: attachment:lat_tibial_cartilage.igs,

Salome meshing script:

  1. Run Salome.
  2. Activate "New" Geometry Module.
  3. Load IGES file:
    • File -> Import -> IGES (e.g. lat_tibial_cartilage.igs)

    • If warned to "take units in account", select "Yes".
  4. If geometry is not visible in OCC 3D scene viewer:
    • click 'Global Panning" button in OCC viewer.
  5. If 3D view manipulation shortcut + mouse button control is not working:
    • click "Rotation" button in OCC viewer and rotate view a little, then shorcut + mouse will work.
  6. To volumetrically render the geometry, select:
    • View -> Display Mode -> Shading With Edges

  7. Check geometry information:
    • Measures -> What is

    • Need to REPAIR the geometry IF:
      1. faces are not watertight
      2. it is NOT a solid.
      3. it does NOT have: 8 vertices, 12 edges, 6 wires, 6 faces.
  8. IF geometry REPAIR is needed:
    1. IF edges of faces are not watertight, SEW the geometry:
      • Repair -> Sewing

      • Select shape: loaded geometry (e.g. lat_tibial_cartilage_1)
      • Iteratively reduce the tolerance (from 1e-7) one order of magnitude at a time until geometry is valid:
        • Check "What is" geometry until the result has: 6 wires, 6 faces, 1 shell.
        • e.g. 1e-5 works with example geometry (lat_tibial_cartilage_1)
      • OUTPUT GEOMETRY NAME: Sewing_#
    2. IF geometry is NOT SOLID:
      • New Entity -> Build -> Solid

      • Select sewing: Sewing_#
      • Check "What is" geometry: 6 wires, 6 faces, 1 shell, 1 solid.
    3. IF geometry has MORE THAN 8 vertices OR 6 edges:
      • Repair -> Remove Extra Edges

      • Select: Solid_1
      • Check "What is" geometry: 8 vertices, 12 edges, 6 wires, 6 faces, 1 shell, 1 solid.
      • OUTPUT GEOMETRY NAME: NoExtraEdges_1

  9. Explode edges from solid geometry:
    • New Entity -> Explode

    • Select Sub-shape Types: Edge
  10. Activate the Mesh module.
  11. Create a new mesh:
    • Mesh -> Create Mesh

    • Geometry: NoExtraEdges_1

    • Mesh type: Hexahedral
    • 3D tab:
      • Algorithm: Hexahedron (i,j,k)
    • 2D tab:
      • Algorithm: Quadrangle (Mapping)
      • Hypothesis:
        • Transition: Standard
  12. Create 3 sub-meshes for each set of 4 matching hex-mesh block dimension edges:
    • Mesh -> Create Sub-mesh

    • Name: SubMesh_<dim> (e.g. SubMesh_z -or- SubMesh_3)

    • Mesh: Mesh_1
    • Geometry: interactively select 4 corresponding edges in Geometry hierarchy window
      • use Shift or Ctrl to select multiple edges at once
      • e.g. for SubMesh_z, select: Edge_1, Edge_2, Edge_9, Edge_10

      • e.g. for SubMesh_x, select: Edge_3, Edge_4, Edge_11, Edge_12

      • e.g. for SubMesh_y, select: Edge_5, Edge_6, Edge_7, Edge_8

    • 1D tab:
      • Algorithm: Wire Discretisation
      • Hypothesis: Nb. Segments
        • Name: Nb. Segments_<dim> (e.g. Nb. Segments_z)

        • Number of Segments: <desired #> (e.g. z = 3, x = 50, y = 50)

        • Type of distribution: Equidistant distribution
        • NOTE: create new Hypothesis for each block dimension: x,y,z
  13. Calculate mesh:
    • Mesh -> Compute

Example file results:


Salome + STL: