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"].




-- ["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.


==== When starting with explicit surface representation ===

==== When starting with parametric geometry ===


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

IA-FEMesh + rounded STL:

Software: IA-FEMesh, Version 1.0

Method: Quadrilateral Surface Meshing

Input: rounded STL triangulated surface geometry (i.e. no sharp edges in STL surface geometry)

Example Files:

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

IA-FEMesh block: attachment:femur_IA-FEMesh_Block.vtk

NOTES: block edges should be tangential to and circumscribed about surface geometry

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

  1. Run IA-FEMesh.
  2. Load surface geometry:
    • Surface tab: select "Load" from drop-down menu (e.g. femur.stl).
  3. Change surface geometry opacity:
    • Click on name of loaded surface geometry in Object Manager.
    • e.g. set Opacity to 0.5 (out of 1.0 = opaque).
  4. Create a basic block:
    • Block(s) tab: select "Create" from drop-down menu.
    • Select "Create block from surface bounds".
    • Click "Apply".
  5. Move basic block nodes to project to desire locations on surface:
    • Block(s) tab: select "Build/Edit" from drop-down menu.
    • Click hand button.
    • Iteratively refine node positions:
      • Rotate view (left mouse button outside of block geometry).
      • Move node in planes perpendicular to view.
      • Rotate view orthogonal to first view.
      • Move node to final desired location.
      • Click "Cancel" to finish.
  6. Partition block to refine block geometry to match surface geometry:
    • Block(s) tab: select "Build/Edit" from drop-down menu.
    • Iteratively partition block and edit/move newly created nodes:
      • Click "Split" button.
      • Select an edge perpendicular to desired block partitioning dimension (turns green when selected).
      • Click "Apply".
      • Iteratively move nodes (as in prior step).
    • Click "Cancel" to finish.
  7. Save block IF desired:
    • Block(s) tab: select "Save" from drop-down menu.
    • Select desired "Building Block" in drop-down menu.
    • Click "Apply".
    • Name "File name" as desired.
    • Click "Save".
  8. Assign Mesh Seeds:
    • Mesh tab: select "Assign/Edit Mesh Seeds" from drop-down menu.
    • Select "Element Length" from drop-down menu.
    • Click "Apply".
    • Iteratively refine seed sizes:
      • Select a block edge in the 3D view to refine seeding for a particular partition of the block (vectors showing partition dimension will appear, i.e. Rx (red), Ry (green), Rz (blue)).
      • Make desired partition dimension seeding either smaller or larger to decrease or increase the seed size respectively.
      • Click "Cancel" to finish.
  9. Create mesh:
    • Mesh tab: select "Create" from drop-down menu.
    • Select "Surface Mesh", select "quad" (square).
    • Specify "Node" and "Element" Label names.
    • Click "Apply".
  10. Inspect mesh quality:
    • Quality tab: select "Evaluate/Display Mesh Quality" from drop-down menu.
    • Select Metric from drop-down menu: e.g. "Jacobian"
    • Click "Cancel" to finish.
  11. Iteratively smooth mesh IF needed:
    • Quality tab: select "Mesh Improvement" from drop-down menu.
    • Set "Smoothing Iterations": e.g. 5.
    • Click "Apply".
  12. Export mesh:
    • Mesh tab: select "Export ABAQUS File" from drop-down menu.
    • Select desired "Mesh" in drop-down menu.
    • Click "Apply".
    • Name "File name" as desired.
    • Click "Save".

Example file results:

IA-FEMesh quad surface mesh: attachment:femur_IA-FEMesh_SurfMesh.vtk





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

IA-FEMesh + rounded STL:

Follow the corresponding procedure from the Quadrilateral Meshing section above, besides the following step:

  1. Create mesh:
    • Mesh tab: select "Create" from drop-down menu.
    • Select "Volumetric Mesh", select "hex" (cube).
    • Specify "Node" and "Element" Label names.
    • Click "Apply".

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

  14. Export mesh:
    • Select mesh name in Geometry hierarchy window.
    • File -> Export -> UNV file.

    • Name "File name" as desired.
    • Click "Save".

Example file results:

Salome hex mesh: attachment:lat_tibial_cartilage_Salome_HEX.unv


Salome + STL: