Single Rib (Forman 2020)#

Model validation information

  • Performed by : Johan Iraeus

  • Notebook prepared by: Chiara Fichera

  • Reviewed by :

Added to VIVA+ Validation Catalog on : 2022-11-30

Last modified :

Model version (this notebook run for): 0.3.2

© 2019-2023, OpenVT Organization (OVTO)

Available openly under Creative Commons Attribution 4.0 International License

Experiment by Forman et al. (2020)#

Summary:#

The simulated data have previously been reported in:

Forman, J., “Small Female/Older Occupant Thoracic Biofidelity - Quasi-Static Rib Loading Report”, Report for NHTSA contract DTNH2215D000022/TO00001, Center for Applied Biomechanics, University of Virginia, March 2020

(Setup for the isolated VIVA+ 50F rib 6 model)

Experiment#

Information on the subjects/specimens#

  • Rib 6 and 7 from 10 female specimens (average age: 65 yrs, average mass: 44 kg, average height: 158 cm)

Loading and Boundary Conditions#

The ribs were loaded in a three point bending configuration, loading the ribs from the pleural to the cutaneous side. Distance between the 12mm diameter supports were 100 mm (112 mm center to center). The loading was applied with a 12mm diameter impactor at a quasi static loading speed of 2.54 mm/min. The loading speed in the simulation was increased to 0.0175 mm/ms, without observing any dynamic effects or kinetic energy.

Positioning#

The ribs were positioned according to the report, where it was stated that the samples were harvested between the posterior axillary and the midclavicular lines, roughly corresponding to the most lateral portion of the ribs.

Responses recorded#

The reference values from the paper were digitalised and are included in the package.

Other Notes for simulation#

As only female ribs were tested, only ribs from the 50F model is compared to the PMHS responses.

Hide code cell source
fig_energy, (ax1,ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8,5))
fig_energy.suptitle('Model Energies')
#plt.set_title('Simulation #1')
#plt.set_ylabel('Energies (J)')
ax1.plot(simData_R6.MODEL.Hourglass_Energy.time, simData_R6.MODEL.Hourglass_Energy.energy, label = "Hourglass Energy")
ax1.plot(simData_R6.MODEL.Internal_Energy.time, simData_R6.MODEL.Internal_Energy.energy, label = "Internal Energy")
ax1.plot(simData_R6.MODEL.Kinetic_Energy.time, simData_R6.MODEL.Kinetic_Energy.energy, label = "Kinetic Energy")
ax1.plot(simData_R6.MODEL.Total_Energy.time, simData_R6.MODEL.Total_Energy.energy, label = "Total Energy")

ax2.plot(simData_R7.MODEL.Hourglass_Energy.time, simData_R7.MODEL.Hourglass_Energy.energy) 
ax2.plot(simData_R7.MODEL.Internal_Energy.time, simData_R7.MODEL.Internal_Energy.energy) 
ax2.plot(simData_R7.MODEL.Kinetic_Energy.time, simData_R7.MODEL.Kinetic_Energy.energy) 
ax2.plot(simData_R7.MODEL.Total_Energy.time, simData_R7.MODEL.Total_Energy.energy)

ax1.set(xlabel="Time [ms]", ylabel="Energy [kJ]", title = 'Rib 6')
ax2.set(xlabel="Time [ms]", title = 'Rib 7')

fig_energy.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig_energy.tight_layout(pad=0.5)
../_images/3797eee8916e054348487476c9daed76d560e1821f7b032f280b0cbd1078a6b9.png

Force-Deflection Plots#

The figures below compares the predicted force-deflection based on the 50F with the PMHS responses.

Hide code cell source
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize= (10,5))

for col in range(0,19,2):
    ax1.plot(exp_rib_6.iloc[:,col], exp_rib_6.iloc[:,col+1], label = exp_rib_6.columns[col].split('_')[-2],**plotExperiment)
     
for col in range(0,19,2):
    ax2.plot(exp_rib_7.iloc[:,col], exp_rib_7.iloc[:,col+1], **plotExperiment)
    
ax1.plot(simData_R6.impactor.displacement.z_displacement*(-1), simData_R6.impactor.force.z_force*(-1000), label = 'VIVA+ 50F',**plot50F) # (-1 ) for positive dz and (-1000) from KN to N   
ax2.plot(simData_R7.impactor.displacement.z_displacement *(-1), simData_R7.impactor.force.z_force*(-1000), **plot50F)   
    
ax1.set(xlabel="Displacement [mm]", ylabel="Force [N]", title = 'Rib 6', xlim =(0,8), ylim =(0,200))
ax2.set(xlabel="Displacement [mm]", title = 'Rib 7', xlim =(0,8),  ylim =(0,200))

fig.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.tight_layout(pad=0.5)
plt.show()
../_images/290d56425d5a04dfefebc7b601e8b49a77938ecf00b4c817f2e92cb7b1c80bac.png