Abdominal Impact (Hardy 2001)#

Model validation information

  • Performed by : Johan Iraeus

  • Reviewed by : Matej Kranjec

Added to VIVA+ Validation Catalog on 2022-06-28 by Johan Iraeus

Version

Date

Performed by

LS-Dyna

0.3.2

2022-06-28

Johan Iraeus

9.2.1

0.3.2

2022-07-05

Johan Iraeus

9.2.1

1.1.1

2024-05-22

Matej Kranjec

12.2.1

© 2019-2024, OpenVT Organization (OVTO)

Available openly under under Creative Commons Attribution 4.0 International License

Experiment by Hardy et al. (2001)#

Summary:#

The simulated outputs are compared to the references from PMHS tests reported by Hardy et al. (2001).

Hardy, W. N., Schneider, L. W., and Rouhana, S. W. (2001). Abdominal impact response to rigid-bar, seatbelt, and airbag loading. Stapp Car Crash J 45, 1–32.

(figure shows aligned impactors for easier visualisation)

Experiment#

Information on the subjects/specimens used for the validation#

  • 2 female specimens (average age: 89 yrs, average mass: 55 kg, average height: 165 cm)

  • 4 male specimens (average age: 79 yrs, average mass: 76 kg, average height: 175 cm)

Loading and Boundary Conditions#

Low-Speed (LS=6.3m/s) and High-Speed (HS=9.2m/s) impacts at the mid position according to the paper (approximately at the level of L3).

Positioning#

The VIVA+ model is rotated 23 degress forward to reach an upright posture. No contact is modelled between arms and impactors.

Responses recorded#

The reference values from the paper were digitalised and are incuded in the package. The data corresponds to the unnormalised corridors.

Simulation Energies#

Hide code cell source
# fig_energy, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2)
fig_energy, (ax1, ax2, ax3, ax4) = plt.subplots(1,4, figsize=(10,5))
fig_energy.suptitle('Model Energies', y=1.02)
#ax.set_title('Simulation #1')
ax1.set_ylabel('Energies (J)')
ax1.set(title='50F 6.3 m/s', xlabel='time (ms)')
ax2.set(title='50M 6.3 m/s', xlabel='time (ms)')
ax3.set(title='50F 9.2 m/s', xlabel='time (ms)')
ax4.set(title='50M 9.2 m/s', 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")

# ax1.plot(simData_50F.Bone.Disp_x.time, simData_50F.Bone.Disp_x.displacement, label="Displacement")
# ax1.plot(simData_50F.Bone.Rigid_x.time, simData_50F.Bone.Rigid_x.displacement, label="Displacement")
# ax1.plot(simData_50F.Impactor.Force_x.time, simData_50F.Impactor.Force_x.force, label="Force X")

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")

# ax2.plot(simData_50M.Bone.Disp_x.time, simData_50M.Bone.Disp_x.displacement, label="Displacement")
# ax2.plot(simData_50M.Bone.Rigid_x.time, simData_50M.Bone.Rigid_x.displacement, label="Displacement")
# ax2.plot(simData_50M.Impactor.Force_x.time, simData_50M.Impactor.Force_x.force, label="Force X")

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.1)



fig_energy.legend(loc='center left', bbox_to_anchor=(1, 0.5));
../_images/9153c0985d6248bea7a19ed49de503e5761ed5ab0c9b9bd5b82a30d9951b106f.png
Hide code cell source
fig_cont, (ax1, ax2) = plt.subplots(1,2, figsize=(10,5))
fig_cont.suptitle('Contact Force Impactor - HBM', y=1.02)
ax1.set_ylabel('Force (kN)')
ax1.set(title='6.3 m/s', xlabel='time (ms)')
ax2.set(title='9.2 m/s',xlabel='time (ms)')

    
ax1.plot(simData_50F.IMPACTOR.Force_x.time, simData_50F.IMPACTOR.Force_x.force, label = "VIVA+ 50F", **plot50F)
ax1.plot(simData_50M.IMPACTOR.Force_x.time, simData_50M.IMPACTOR.Force_x.force, label = "VIVA+ 50M", **plot50M)
ax1.plot(experiment['Time-F_GI3 M'], experiment['Force_GI3 M'], label = "Experiment 6.3m/s GI3 M", **plotExperimentMale)
ax1.plot(experiment['Time-F_GI4 F'], experiment['Force_GI4 F'], label = "Experiment 6.3m/s GI4 F", **plotExperimentFemale)
ax1.plot(experiment['Time-F_GI6 M'], experiment['Force_GI6 M'], label = "Experiment 6.3m/s GI6 M", **plotExperimentMale2)



ax2.plot(simData_50F_2.IMPACTOR.Force_x.time, simData_50F_2.IMPACTOR.Force_x.force, **plot50F)#, label = "50 F")
ax2.plot(simData_50M_2.IMPACTOR.Force_x.time, simData_50M_2.IMPACTOR.Force_x.force, **plot50M)#, label = "50 M")
ax2.plot(experiment['Time-F_GS7 M'], experiment['Force_GS7 M'], label = "Experiment 9.2m/s GS7 M", **plotExperimentMale)
ax2.plot(experiment['Time-F_GS8 M'], experiment['Force_GS8 M'], label = "Experiment 9.2m/s GS8 M", **plotExperimentMale2)
ax2.plot(experiment['Time-F_GS9 F'], experiment['Force_GS9 F'], label = "Experiment 9.2m/s GS9 F", **plotExperimentFemale)

ax2.set_ylim(0,13)
ax2.set_xlim(0,100)
ax1.set_ylim(0,13)
ax1.set_xlim(0,100)

fig_cont.tight_layout(pad=0.5)

fig_cont.legend(loc='center left', bbox_to_anchor=(1, 0.5));
plt.show()
../_images/5ac74bbb046e85e6aa33f3218270abcb46fd089bb2ea2afa59b4cc896c0c1ec7.png
Hide code cell source
fig_fd, (ax1, ax2) = plt.subplots(1,2, figsize=(10,5))
#fig_, ((ax1, ax2)) = plt.subplots(2, figsize=(5,5))
fig_fd.suptitle('Force - Displacement', y=1.02)
ax1.set_ylabel('Force (kN)')
ax2.set_ylabel('Force (kN)')
ax1.set(title='6.3 m/s', xlabel='displacement (mm)')
ax2.set(title='9.2 m/s', xlabel='displacement (mm)')

#displ = simData_50F.Bone.Rigid_x.displacement - simData_50F.Bone.Disp_x.displacement

#ax1.plot(simData_50F.Bone.Rigid_x.time, displ, label = "Displacement 50F", **plot50F)

#df = pd.read_csv("Hardy_Bar_Impact.csv", header=1, delimiter=';', decimal=',')
x=experiments_s['Displacement_GI3 M']
y=df10['Force_GI3 M']

x2=df10['Displacement_GI4 F']
y2=df10['Force_GI4 F']

x3=df10['Displacement_GI6 M']
y3=df10['Force_GI6 M']

displacement_sim_50F=- (simData_50F.IMPACTOR.Rigid_x.displacement.to_numpy()-simData_50F.Bone.Disp_x.displacement.to_numpy())
displacement_sim_50F = displacement_sim_50F - displacement_sim_50F[0]
force_50F = simData_50F.IMPACTOR.Force_x.force
displacement_sim_50M= -(simData_50M.IMPACTOR.Rigid_x.displacement.to_numpy()-simData_50M.Bone.Disp_x.displacement.to_numpy())
displacement_sim_50M = displacement_sim_50M - displacement_sim_50M[0]
force_50M = simData_50M.IMPACTOR.Force_x.force

ax1.plot(displacement_sim_50F, force_50F, label = "VIVA+ 50 F", **plot50F)
ax1.plot(displacement_sim_50M, force_50F, label = "VIVA+ 50 M", **plot50M)
ax1.plot(experiments_s['Displacement_GI3 M'], experiments_s['Force_GI3 M'], label = "Experiment 6.3m/s GI3 M ", **plotExperimentMale)
ax1.plot(experiments_s['Displacement_GI4 F'], experiments_s['Force_GI4 F'], label = "Experiment 6.3m/s GI4 F ", **plotExperimentFemale)
ax1.plot(experiments_s['Displacement_GI6 M'], experiments_s['Force_GI6 M'], label = "Experiment 6.3m/s GI6 M ", **plotExperimentMale2)


displacement_sim_50F_2=- (simData_50F_2.IMPACTOR.Rigid_x.displacement.to_numpy()-simData_50F_2.Bone.Disp_x.displacement.to_numpy())
displacement_sim_50F_2 = displacement_sim_50F_2 - displacement_sim_50F_2[0]
force_50F_2 = simData_50F_2.IMPACTOR.Force_x.force
displacement_sim_50M_2= -(simData_50M_2.IMPACTOR.Rigid_x.displacement.to_numpy()-simData_50M_2.Bone.Disp_x.displacement.to_numpy())
displacement_sim_50M_2 = displacement_sim_50M_2 - displacement_sim_50M_2[0]
force_50M_2 = simData_50M_2.IMPACTOR.Force_x.force

ax2.plot(displacement_sim_50F_2, force_50F_2, **plot50F)
ax2.plot(displacement_sim_50M_2, force_50M_2, **plot50M)
ax2.plot(experiments_s['Displacement_GS7 M'], experiments_s['Force_GS7 M'], label = "Experiment 9.2m/s GS7 M", **plotExperimentMale)
ax2.plot(experiments_s['Displacement_GS8 M'], experiments_s['Force_GS8 M'], label = "Experiment 9.2m/s GS8 M", **plotExperimentMale2)
ax2.plot(experiments_s['Displacement_GS9 F'], experiments_s['Force_GS9 F'], label = "Experiment 9.2m/s GS9 F", **plotExperimentFemale)

ax2.set_ylim(0,13)
ax2.set_xlim(0,210)
ax1.set_ylim(0,13)
ax1.set_xlim(0,210)

fig_fd.tight_layout(pad=0.5)

fig_fd.legend(loc='center left', bbox_to_anchor=(1, 0.5));
plt.show()
../_images/cc7d0fd7a18c129764a91d967024a0c675632abb9b629e1273f22eab13c81186.png