Hi everyone, I am from Singapore and currently in my final year of study in Nanyang Technological University. My final year research project focuses on the torsional integrity of the femur and tibia with different pin placements using FEA. Thank you in advance for your time and any guidance you can provide.
As shown in the image above, the cortical bone has been segmented as a hollow structure from CT data. However, when I attempt to generate the mesh in PrePoMax, the meshing process fails or takes an extremely long time, even though all surfaces appear smooth, closed, and free of visible defects. I have waited over 30 minutes for the mesh generation and have tried adjusting various mesh settings, but without success. Do note that they are segmented bones which are required for the FEA analysis from which I will be doing a live experiment to validate the results calculated by Prepomax
I would appreciate any advice on whether modelling the cortical bone as a hollow structure is recommended, or if it is better to import cortical and cancellous bones as separate solid volumes and mesh them together instead. I would also like to understand what common issues might cause meshing to fail or stall for hollow bone geometries.
From the image below, I imported the cortical and cancellous bones as two separate volumes with overlapping geometry in order to test this workflow. However, when I apply torsional loading, the cancellous bone shows the highest stress, which does not seem physically correct, as the cortical bone should be carrying most of the torsional load.
In addition, the deformation pattern looks unusual when the torsional load is applied via a reference point. I am unsure whether this behaviour is caused by the overlapping volumes, meshing strategy, contact definition between cortical and cancellous regions, or the way the load is applied (reference point and coupling).
I would appreciate advice on the correct modelling approach for cortical–cancellous interaction in PrePoMax, particularly whether these regions should be combined using a boolean operation or connected using a specific contact or tie constraint to ensure proper load transfer.
Can you share this geometry here or via private message ?
Basically, since those are different materials, you shouldn’t fuse them together with a boolean operation unless it preserves the individual subsolids. PrePoMax does it as Compound part creation:
Tie constraints are necessary if you can’t create a compound (sometimes it fails due to small misalignments of the geometry, especially for surface geometries). Contact is helpful if you want to allow for relative sliding or separation of the surfaces.
I am moving this discussion to the discourse where you previously replied to my queries. Regarding the surface selection for the rigid body, I manually selected the cancellous and cortical parts of the bone. To select both the proximal surfaces, I used left-click + shift. Under the FE model tab, I created a surface as this enabled me to locate the centroid of the bone using the reference point function for the center of gravity.
Does the way I’ve done it require that I still identify a specific region or surface to which the rigid body constraint can be applied, or can I use the surface function I created instead?
I have also sent you a copy of my .pmx file via Google Drive in a private message. Since I’m still unsure whether the process I did is correct, I would love to hear your professional opinion on what I can improve and learn and any mistakes I made.
Now I see that your geometry (despite being created from medical image segmentation) doesn’t have the redundant faces created directly from STL triangles, so the most common issue we were talking about is not relevant here. You only have a few geometric faces, and thus you can easily select both ends for load/BC definition.
Btw. how did you clean this model up after segmentation ?
There are two ways to do selections in PrePoMax:
Create node sets, element sets, and surfaces based on the geometry or mesh selections and then choose those sets/surfaces for analysis feature definitions.
Select regions for analysis features only when you create those features (no mesh selection available then).
Since you already created a surface, you can use it for rigid body constraint definition. Or you can select it only when creating the rigid body constraint, as you did. The result will be the same.
I thought that the cortical (outer) part was hollow - without a cutout for the cancellous (inner) part, but it isn’t, and the meshes overlap. As I’ve mentioned in the first reply, if you make this cutout, you can use tie constraint (or tied contact) to connect both parts using the surfaces inside (there’s a contact pair detection available).
Maybe try with a similar setup, but simplified to cylinders, as I initially suggested, in order to understand the workflow:
Hi Slurrpuff,
I was also from NTU.
I used to import .stl file for compound parts and problematic issues occurred, so I usually generate .step file and import to PPM.
Just wonder what kind of material properties to be assigned to the bone, especially the structure of the bone is porous?
Thank you.
For the bone in my research, I typically use Elastic material properties, as this is the closest fit to the bone’s behavior in terms of including Young’s Modulus and Poisson’s ratio, which are essential for my project.
For cortical bone, I assign Young’s Modulus of 17,000 MPa and Poisson’s ratio of 0.3, while for cancellous bone, I use Young’s Modulus of 445 MPa and Poisson’s ratio of 0.2. These values are based on established research and literature to ensure the material properties are as accurate as possible for the bone specimens used in my simulations.
I am not sure if it will help you, but my project focuses on Maximum shear strain and shear stress so Young Modulus and poison’s ratio are crucial properties that affect the results too, so these are my considerations to the values that I set.
Hello,
The STL format is a mesh with vertex coordinates. The sparse mesh subdivision is the model’s record. And it can’t be changed without additional processing. In STL, you can divide meshes into smaller ones. The STEP format is a mathematical notation based on formulas. Therefore, it allows for flexible meshing. If an infinitesimal triangle is included in STL, it will condense the entire model and increase the meshing time. STL doesn’t contain smooth surfaces; it’s always jagged, and this cannot be changed.
@FEAnalyst , thanks for providing the publications, related to the OPs question. When it comes to model biomechanics on the basis of CT scans, the RVE approach might be a good idea. Unfortnuately, as you mentioned, quite some scripting is involved, to do that. On the other hand, there is a strong correlation to the homogenization method used in topology optimization.
As proposed by Morgan et al. (2003) within this publication “Developing CT based computational models of pediatric femurs” using isotropic material definition is possible.
Does the OP (@Slurrpuff ) have a CT data in raw format? Are you able to share the raw data? With that you could map the actual gray values to the finite elements (some scripting and / or filtering in Paraview involved) and use my compiled version of ccx:
You’ll have to define the actual Young’s Modulus per element in the file: (which is similar to the RVE attempt) topOpt_xPhys.txt
There is a way to map material properties from a file to the model. PrePoMax now includes a distribution feature that can read point or vector data from a file. This distribution can then be applied to the model’s temperature field, and material properties can be created in dependence on temperature. If temperature is treated not as temperature but as material density, it becomes possible to map material properties from the file.
Let’s see if the OP is interested in such an advanced approach and needs non-uniform patient-specific distribution of the Young’s modulus for this univeristy project. For now, he was able to obtain good results (agreeing with simplified hand calcs) of a torsional test with homogeneous isotropic linear elastic properties for each bone type. The next step could be e.g. orthotropy (btw. below I shared two additional interesting papers about material properties of a femur for use in FEA):
When working with geometry designed in CAD software (such as machine components), STEP is definitely superior. However, for geometries obtained from 3D scans or medical imaging, the STEP file would have the same division into triangles (just converted into faces of a CAD geometry) unless some advanced (and not available in open-source tools) processing is used.
That’s not what it was intended for. I wanted to use a simple example to demonstrate the dependence of meshing on the type of imported file. I was surprised, because from version 1… to version 2.4, the meshing quality improved. There are still differences.
Ok, I see. Then maybe it should be a separate thread in the Tips and Tricks section where we usually put such content.
Integration of Gmsh (and thus also introduction of hex, wedge, and pyramid element generation) improved meshing a lot, partially even for STL files. Without Gmsh, STL models are meshed with Netgen (solid parts) or mmg3D (shell parts).
It’s also important to highlight that STL parts can’t be meshed with extrusion/revolution/sweep and transfinite techniques as shown in one of your screenshots.
Sure, the default coarse tessellation is well visible on any curved faces. Btw. FreeCAD has a pretty good Mesh workbench (already used by the OP after our recent discussion) and can generate such STL meshes with different tools (including Netgen and Gmsh), so that exporting to STL doesn’t use the default mesh.
In PrePoMax, different shading is used (by design) if the file was imported from .stl or CAD, so the difference should be inspected by displaying the element edges.
Maybe it would make sense to display the element edges for STL parts by default, but I guess the problem is that currently the display mode is only global. In FreeCAD, it can be changed per part too:
This approach is sometimes also used in Abaqus to define spatial or time variation of material properties (of course, assuming that actual thermal effects are not of interest), although Abaqus has so-called field variables for that and they don’t always require the use of Fortran subroutines. It could be even used to simulate bone remodeling (change in bone’s apparent density due to change in load - in Abaqus, the USDFLD subroutine is utilized for that).