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)