Mid-Sternum (Kroell 1971)#

Model validation information

  • Performed by : Jobin John

  • Notebook preparation: Matej Kranjec

  • Reviewed by :

Added to VIVA+ Validation Catalog on : 2022-06-28

Last modified: 2022-07-05

VIVA+ model version (this notebook run for): 0.3.2

© 2019-2024, OpenVT Organization (OVTO)

Available openly under under Creative Commons Attribution 4.0 International License

Summary:#

The simulated outputs are compared to the corridors taken from the references of PMHS tests reported by Kroell et al., 1971, 1974 and updated by Lebarbé et al. 2021.

Kroell, C. K., Schneider, D. C., & Nahum, A. M. (1971). Impact Tolerance and Response of the Human Thorax. Paper 7 1 085 1, Proceedings of Fifteenth Stapp Car Crash Conference, P-39.

Kroell, C. K., Schneider, D. C., & Nahum, A. M. (1974). Impact Tolerance and Response of the Human Thorax II. SAE Transactions, 83, 3724–3762.

Lebarbé, M., Petit, P. (2012). New biofidelity targets for the thorax of a 50th percentile adult male in frontal impact. 2012 IRCOBI Conference Proceedings - International Research Council on the Biomechanics of Injury. 856-870.

Published in:#

John, J., Klug, C., Kranjec, M., Svenning, E., Iraeus, J. (2022). “Hello, world! VIVA+: A human body model lineup to evaluate sex-differences in crash protection.” Frontiers in bioengineering and biotechnology 10, https://doi.org/10.3389/fbioe.2022.918904

Experiments by Kroell et al. (1971, 1974)#

Information on the subjects/specimens#

The experiments were carried out on 37 PMHS - 14 in the 1971 and 23 (20M,) in 1974 research.

For the Korell et al. 1971 the subjects age ranged from 19 to 81 years, mass from 53 to 81 kg and the height from 156 to 183 cm. The impactors had the weight between 1.6 and 23.6 kg and were propelled toward subjects with the speeds ranging from 6.2 m/s to 14.3 m/s. The smaller impactors had greater speeds. The impactors were unpadded flat round wooden forms with the diameter of 152 mm and a 12.7 mm edge radius.

For the Korell et al. 1971 the subjects age ranged from 46 to 76 years, mass from 37.2 to 94.8 kg and the height from 156 to 185 cm. The impactors had the weight of 19.5 kg and 23.1 kg and were propelled toward subjects with the speeds of 4.9 m/s and 7.2 m/s respectively. Additionally some test were carried out at 9.8 m/s.

Simulations#

Loading and Boundary Conditions#

4 loading configurations of front hub impacts were used. Both female and male models were impacted using a rigid hub with the diameter of 152 mm and weighing 23 kg. The impact velocities were 4.3m/s for low speed simulations and 6.7 m/s for high speed simulations.

Configuration

Impact v [m/s]

Model

1

4.3

50F

2

6.7

50F

3

4.3

50M

4

6.7

50M

Positioning#

For the validation purposes we used seated VIVA+ 50F and 50M models rotated for 23° around Y axis to get the torso somewhat vertical. The centre of impactor was positioned at the midsternal location (4th interspace) for each model.

Simulation results#

Model Energies#

Hide code cell source
fig_energy, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2,figsize=(5, 5))
#fig_energy, (ax1, ax2, ax3, ax4, ax5, ax6) = plt.subplots(1,6)
fig_energy.suptitle('Model Energies')
#ax.set_title('Simulation #1')
ax1.set_ylabel('Energies (J)')

ax1.set(title='50F', xlabel='time (ms)')
ax2.set(title='50M', xlabel='time (ms)')


ax1.plot(simData_50F.MODEL.Hourglass_Energy.time, simData_50F.MODEL.Hourglass_Energy.energy, label="Hourglass Energy")
ax1.plot(simData_50F.MODEL.Internal_Energy.time, simData_50F.MODEL.Internal_Energy.energy, label="Internal Energy")
ax1.plot(simData_50F.MODEL.Kinetic_Energy.time, simData_50F.MODEL.Kinetic_Energy.energy, label="Kinetic Energy")
ax1.plot(simData_50F.MODEL.Total_Energy.time, simData_50F.MODEL.Total_Energy.energy, label="Total Energy")
ax1.plot(simData_50F.MODEL.Added_Mass.time, simData_50F.MODEL.Added_Mass.mass, label="Added Mass")


ax2.plot(simData_50M.MODEL.Hourglass_Energy.time, simData_50M.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax2.plot(simData_50M.MODEL.Internal_Energy.time, simData_50M.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax2.plot(simData_50M.MODEL.Kinetic_Energy.time, simData_50M.MODEL.Kinetic_Energy.energy)#, #label="Kinetic Energy")
ax2.plot(simData_50M.MODEL.Total_Energy.time, simData_50M.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax2.plot(simData_50M.MODEL.Added_Mass.time, simData_50M.MODEL.Added_Mass.mass)#, #label="Added Mass")


ax3.plot(simData_50F_2.MODEL.Hourglass_Energy.time, simData_50F_2.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax3.plot(simData_50F_2.MODEL.Internal_Energy.time, simData_50F_2.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax3.plot(simData_50F_2.MODEL.Kinetic_Energy.time, simData_50F_2.MODEL.Kinetic_Energy.energy)#, label="Kinetic Energy")
ax3.plot(simData_50F_2.MODEL.Total_Energy.time, simData_50F_2.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax3.plot(simData_50F_2.MODEL.Added_Mass.time, simData_50F_2.MODEL.Added_Mass.mass)#, #label="Added Mass")


ax4.plot(simData_50M_2.MODEL.Hourglass_Energy.time, simData_50M_2.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax4.plot(simData_50M_2.MODEL.Internal_Energy.time, simData_50M_2.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax4.plot(simData_50M_2.MODEL.Kinetic_Energy.time, simData_50M_2.MODEL.Kinetic_Energy.energy)#, #label="Kinetic Energy")
ax4.plot(simData_50M_2.MODEL.Total_Energy.time, simData_50M_2.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax4.plot(simData_50M_2.MODEL.Added_Mass.time, simData_50M_2.MODEL.Added_Mass.mass)#, #label="Added Mass")

fig_energy.tight_layout(pad=0.7)



fig_energy.legend(loc='center left', bbox_to_anchor=(1, 0.5));
../_images/0495452fa72bbb9ded51417aa947e143e2775bb2a3d9d43a0834c6c8e3549317.png

Chest Force vs Deflection#

4.3 m/s impact#

Hide code cell source
## TODO: Define Deflection!!!
fig_fd_ll, axs = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True,figsize=(10, 6))
#fig_fd.suptitle('Chest Force vs Deflection')

axs.plot(chest_deflection_50F_2 -chest_deflection_50F_2.iloc[0], simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1], label="VIVA+ 50F", **plot50F)
axs.plot(chest_deflection_50M_2 -chest_deflection_50M_2.iloc[0], simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] , label="VIVA+ 50M", **plot50M)

#axs.plot(ex_Neathery_impact_force_deflection.Average.Lower.Deflection_mm, ex_Neathery_impact_force_deflection.Average.Lower.Force_kN,label="Kroell Average", **plotExperiment)
#axs.plot(ex_Neathery_impact_force_deflection.Average.Upper.Deflection_mm, ex_Neathery_impact_force_deflection.Average.Upper.Force_kN, **plotExperiment)



axs.plot(ex_Lebarbe_impact_force_deflection.low_speed_4_3_max.X, ex_Lebarbe_impact_force_deflection.low_speed_4_3_max.Y/1000, label = "Lebarbe corridor 4.3 m/s", **plotExperimentMale2)
axs.plot(ex_Lebarbe_impact_force_deflection.low_speed_4_3_min.X, ex_Lebarbe_impact_force_deflection.low_speed_4_3_min.Y/1000, **plotExperimentMale2)

axs.set_xlabel('Deflection (mm)')
axs.set_ylabel('Impact Force (kN)');

axs.legend(loc="upper right", bbox_to_anchor=(1.05, 1.05));
#fig_fd_ll.tight_layout(pad=0.5);
../_images/36db5b282d7e0ce6d7f2b9e7e9d145b6396932f89a3db8734aea716b346a87ac.png

6.6 m/s impact#

Hide code cell source
## TODO: Define Deflection!!!
fig_fd_k, axs = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True,figsize=(10, 6))
#fig_fd.suptitle('Chest Force vs Deflection')

axs.plot(chest_deflection_50F -chest_deflection_50F.iloc[0], simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1], label="VIVA+ 50F", **plot50F)
axs.plot(chest_deflection_50M -chest_deflection_50M.iloc[0], simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] , label="VIVA+ 50M", **plot50M)

#axs.plot(ex_impact_force_deflection.Average.Lower.Deflection_mm, ex_impact_force_deflection.Average.Lower.Force_kN,label="Kroell Average", **plotExperiment)
#axs.plot(ex_impact_force_deflection.Average.Upper.Deflection_mm, ex_impact_force_deflection.Average.Upper.Force_kN, **plotExperiment)



axs.set_ylabel('Impact Force (kN)')

axs.plot(ex_kroell_impact_force_deflection["15FM"].d*25.4, ex_kroell_impact_force_deflection["15FM"].F*0.00445, **plotExperimentMale)
axs.plot(ex_kroell_impact_force_deflection["13FM"].d*25.4, ex_kroell_impact_force_deflection["13FM"].F*0.00445, **plotExperimentMale)
axs.plot(ex_kroell_impact_force_deflection["18FM"].d*25.4, ex_kroell_impact_force_deflection["18FM"].F*0.00445, **plotExperimentMale)
axs.plot(ex_kroell_impact_force_deflection["20FM"].d*25.4, ex_kroell_impact_force_deflection["20FM"].F*0.00445, **plotExperimentMale)
axs.plot(ex_kroell_impact_force_deflection["19FM"].d*25.4, ex_kroell_impact_force_deflection["19FM"].F*0.00445, **plotExperimentMale)
axs.plot(ex_kroell_impact_force_deflection["22FM"].d*25.4, ex_kroell_impact_force_deflection["22FM"].F*0.00445, **plotExperimentMale)

axs.plot(ex_kroell_impact_force_deflection["12FF"].d*25.4, ex_kroell_impact_force_deflection["12FF"].F*0.00445, **plotExperimentFemale)
axs.plot(ex_kroell_impact_force_deflection["14FF"].d*25.4, ex_kroell_impact_force_deflection["14FF"].F*0.00445, **plotExperimentFemale)


#axs.plot(ex_impact_force_deflection.M50.Lower.Deflection_mm, ex_impact_force_deflection.M50.Lower.Force_kN,label="Kroell 50th percentile", **plotExperimentMale)
#axs.plot(ex_impact_force_deflection.M50.Upper.Deflection_mm, ex_impact_force_deflection.M50.Upper.Force_kN,  **plotExperimentMale)

#axs.plot(ex_impact_force_deflection.F05.Lower.Deflection_mm, ex_impact_force_deflection.F05.Lower.Force_kN,label="Kroell 5th percentile", **plotExperimentFemale)
#axs.plot(ex_impact_force_deflection.F05.Upper.Deflection_mm, ex_impact_force_deflection.F05.Upper.Force_kN, **plotExperimentFemale)
axs.set_xlabel('Deflection (mm)')
axs.set_ylabel('Impact Force (kN)');
plt.xlim([-0.5, 112])
axs.legend(loc="upper right", bbox_to_anchor=(1, 1));
../_images/4e4a01bab532f82dad13d5e86e2f183ddbc9771224f1fe0a6cf0e153b775a574.png
Hide code cell source
## TODO: Define Deflection!!!
fig_fd_hnl, axs = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True,figsize=(8, 5))
#fig_fd.suptitle('Chest Force vs Deflection')

axs.plot(chest_deflection_50F -chest_deflection_50F.iloc[0], simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1], label="50F", **plot50F)
axs.plot(chest_deflection_50M -chest_deflection_50M.iloc[0], simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] , label="50M", **plot50M)

axs.plot(ex_Neathery_impact_force_deflection.Average.Lower.Deflection_mm, ex_Neathery_impact_force_deflection.Average.Lower.Force_kN,label="Kroell Average", **plotExperiment)
axs.plot(ex_Neathery_impact_force_deflection.Average.Upper.Deflection_mm, ex_Neathery_impact_force_deflection.Average.Upper.Force_kN, **plotExperiment)


axs.plot(ex_Neathery_impact_force_deflection.M50.Lower.Deflection_mm, ex_Neathery_impact_force_deflection.M50.Lower.Force_kN,label="Kroell 50th percentile", **plotExperimentMale)
axs.plot(ex_Neathery_impact_force_deflection.M50.Upper.Deflection_mm, ex_Neathery_impact_force_deflection.M50.Upper.Force_kN,  **plotExperimentMale)


axs.plot(ex_Lebarbe_impact_force_deflection.high_speed_6_7_max.X, ex_Lebarbe_impact_force_deflection.high_speed_6_7_max.Y/1000, label = " Lebarbe corridor", **plotExperimentMale2)
axs.plot(ex_Lebarbe_impact_force_deflection.high_speed_6_7_min.X, ex_Lebarbe_impact_force_deflection.high_speed_6_7_min.Y/1000, **plotExperimentMale2)
#axs.plot(ex_Neathery_impact_force_deflection.F05.Lower.Deflection_mm, ex_Neathery_impact_force_deflection.F05.Lower.Force_kN,label="Kroell 5th percentile", **plotExperimentFemale)
#axs.plot(ex_Neathery_impact_force_deflection.F05.Upper.Deflection_mm, ex_Neathery_impact_force_deflection.F05.Upper.Force_kN, **plotExperimentFemale)
axs.set_xlabel('Deflection (mm)')
axs.set_ylabel('Impact Force (kN)');

axs.legend(loc="upper right", bbox_to_anchor=(1.35, 1));
../_images/ebc2d7a4a3d6cf05ea9b561f392e01bcd2c1095188acf17928b12ab6d4df167f.png
Hide code cell source
## TODO: Define Deflection!!!
fig_fd_ll_hs, axs = plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True,figsize=(10, 6))
#fig_fd.suptitle('Chest Force vs Deflection')

axs.plot(chest_deflection_50F -chest_deflection_50F.iloc[0], simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1], label="VIVA+ 50F", **plot50F)
axs.plot(chest_deflection_50M -chest_deflection_50M.iloc[0], simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] , label="VIVA+ 50M", **plot50M)

#axs.plot(ex_impact_force_deflection.Average.Lower.Deflection_mm, ex_impact_force_deflection.Average.Lower.Force_kN,label="Kroell Average", **plotExperiment)
#axs.plot(ex_impact_force_deflection.Average.Upper.Deflection_mm, ex_impact_force_deflection.Average.Upper.Force_kN, **plotExperiment)



axs.set_ylabel('Impact Force (kN)')


axs.plot(ex_Lebarbe_impact_force_deflection.high_speed_6_7_max.X, ex_Lebarbe_impact_force_deflection.high_speed_6_7_max.Y/1000, label = "Lebarbe corridor 6.7 m/s", **plotExperimentMale2)
axs.plot(ex_Lebarbe_impact_force_deflection.high_speed_6_7_min.X, ex_Lebarbe_impact_force_deflection.high_speed_6_7_min.Y/1000, **plotExperimentMale2)

#axs.plot(ex_impact_force_deflection.M50.Lower.Deflection_mm, ex_impact_force_deflection.M50.Lower.Force_kN,label="Kroell 50th percentile", **plotExperimentMale)
#axs.plot(ex_impact_force_deflection.M50.Upper.Deflection_mm, ex_impact_force_deflection.M50.Upper.Force_kN,  **plotExperimentMale)

#axs.plot(ex_impact_force_deflection.F05.Lower.Deflection_mm, ex_impact_force_deflection.F05.Lower.Force_kN,label="Kroell 5th percentile", **plotExperimentFemale)
#axs.plot(ex_impact_force_deflection.F05.Upper.Deflection_mm, ex_impact_force_deflection.F05.Upper.Force_kN, **plotExperimentFemale)
axs.set_xlabel('Deflection (mm)')
axs.set_ylabel('Impact Force (kN)');
plt.xlim([-0.5, 112])
axs.legend(loc="upper right", bbox_to_anchor=(1.05, 1.05));
#fig_fd_ll_hs.tight_layout(pad=0.5);
../_images/fb446a61e637ef83a8e4126273757016f63c6c14345b881578cfbb710614e561.png