Below is the information from prior workflows:


=== QUADRILATERAL MESHING ===

'''''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.
 1. Load surface geometry:
  * Surface tab: select "Load" from drop-down menu (e.g. femur.stl).
 1. 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).
 1. Create a basic block:
  * Block(s) tab: select "Create" from drop-down menu.
  * Select "Create block from surface bounds".
  * Click "Apply".
 1. 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.
 1. 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.
 1. 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".
 1. 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.
 1. Create mesh:
  * Mesh tab: select "Create" from drop-down menu.
  * Select "Surface Mesh", select "quad" (square).
  * Specify "Node" and "Element" Label names.
  * Click "Apply".
 1. 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.
 1. Iteratively smooth mesh IF needed:
  * Quality tab: select "Mesh Improvement" from drop-down menu.
  * Set "Smoothing Iterations": e.g. 5.
  * Click "Apply".
 1. 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]]

{{attachment:femur_IA-FEMesh_Surf.png}}

{{attachment:femur_IA-FEMesh_Block.png}}

{{attachment:femur_IA-FEMesh_SurfMesh.png}}

=== HEXAHEDRAL MESHING ===

'''''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:

 9. 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: [[attachment:lat_tibial_cartilage_Salome_HEX.py]]

 1. Run Salome.
 1. Activate "New" Geometry Module.
 1. Load IGES file:
  * File -> Import -> IGES (e.g. lat_tibial_cartilage.igs)
  * If warned to "take units in account", select "Yes".
 1. If geometry is not visible in OCC 3D scene viewer:
  * click 'Global Panning" button in OCC viewer.
 1. 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.
 1. To volumetrically render the geometry, select:
  * View -> Display Mode -> Shading With Edges
 1. Check geometry information:
  * Measures -> What is
  * Need to REPAIR the geometry IF:
   a. faces are not watertight
   a. it is NOT a solid.
   a. it does NOT have: 8 vertices, 12 edges, 6 wires, 6 faces.
 1. IF geometry REPAIR is needed:
  a. 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_#
  a. IF geometry is NOT SOLID:
   * New Entity -> Build -> Solid
   * Select sewing: Sewing_#
   * Check "What is" geometry: 6 wires, 6 faces, 1 shell, 1 solid.
   * OUTPUT GEOMETRY NAME: Solid_1
  a. 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
 1. Explode edges from solid geometry:
  * New Entity -> Explode
  * Select Sub-shape Types: Edge
 1. Activate the Mesh module.
 1. 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
 1. 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
 1. Calculate mesh:
  * Mesh -> Compute
 1. 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]]

{{attachment:lat_tibial_cartilage_Salome_HEX.png}}

==== Salome + STL: ====



----

== Output ==

 * Finite element mesh of tissue of interest; in human readable format, e.g., Abaqus input (INP) file, XML file, or as open format binary files, e.g., MED file, including
  * node definitions (numbering and coordinates)
  * element definitions (numbering, element-specific node numbers and connectivity)
  * node set definitions (set name(s) and relevant node numbers)
  * element set definitions (set name(s) and relevant element numbers)
  * face definitions (numbering, face-specific node numbers and connectivity)
  * surface set definitions (set name(s) and relevant face numbers)