Head Blunt Impact (Raymond 2009)#

Beta version

This loadcase is run for a beta version of the model under active development and the results can be expected to change

Model validation information

  • Performed by : Yash Niranjan Poojary

  • Reviewed by :

Added to VIVA+ Validation Catalog on :

Last modified : 2nd May 2023

ViVa Model version: 2.0.0 beta 1

LS Dyna version: mpp d R12.1

Experiment by Raymond et al. (2009)#

Summary:#

The simulated outputs are compared to the references from PMHS tests reported by Raymond et al. [1]

Blunt impact
  1. Raymond, David, et al. “Development of biomechanical response corridors of the head to blunt ballistic temporo-parietal impact.” Journal of biomechanical engineering 131.9 (2009) Article.

Experiment#

Information on the subjects/specimens#

No.

Specimen ID

Age

Sex

Head mass [kg]

1

2426

69

M

3.26

2

2427

57

M

2.98

3

2904

74

M

4.30

4

2939

63

F

3.28

5

2965

75

F

3.42

6

2908

73

F

3.48

7

2978

55

F

3.10

Loading and Boundary Conditions#

  • Low-Speed (LS) and High-Speed (HS) impacts bilaterally in a paired randomized manner.

  • Impactor made from Aluminum 6061 with diameter 38 mm and weighing 103 grams is propelled into the test specimen using compressed air.

  • The specimen was suspended to allow for impacts at 25 mm anterior to the external acoustic meatus and 35 mm superior to the Frankfurt plane.

Impact conditions#

No.

Specimen ID

Velocity-Left side Impact [m/s]

Velocity-Right side Impact [m/s]

1

2426

32.1

22.22

2

2427

34.2

23.4

3

2904

31.9

17.3

4

2939

16.3

34.4

5

2965

18

35.2

6

2908

35.1

19.6

7

2978

19.5

32.4

Responses recorded#

  • Impactor velocity was measured by an light-emitting diode-based velocity trap mounted at the end of the cannon barrel.

  • Impact force was calculated by multiplying the acceleration signal of the impactor by the total impactor mass.

  • Deformation was determined through double integration of the impactor accelerometer and verified by digital image tracking from the high speed video.

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

Other Notes for simulation#

Material cards used in skull bone#

  • Trabecular bone modelled with MAT124 MAT_PLASTICITY_COMPRESSION_TENSION based on compression and tension stress-strain curves from tests done by Boruah (2013)

  • Cortical bone available with two types material cards based tests done by Wood (1971)

    • MAT124 MAT_PLASTICITY_COMPRESSION_TENSION

    • MAT81 MAT_PLASTICITY_WITH_DAMAGE

Hide code cell source
fig_fd_comp, axs = plt.subplots(nrows=1, ncols=2,figsize=(15, 7))
fig_fd_comp.suptitle('Force time history (F50)',fontsize=24)

mat124 = {"linestyle" :'-', 'linewidth' : 2,'alpha':1}
mat81 = { "linestyle" :':', 'linewidth' : 2,'alpha':0.5}

for i in range(2):
    axs[i].set_ylabel('Force[kN]');
    axs[i].set_xlabel('Time[ms]');

axs[1].set_xlim([0,0.7])
axs[1].set_ylim([0,10])

axs[0].set_xlim([0,0.7])
axs[0].set_ylim([0,10])

axs[0].set_title('Low speed ')
axs[1].set_title('High Speed ')

k=0
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[0]]).Model.Impactor_Head_contact.time.iloc[0:70] ,pd.DataFrame(sim_output[version[k],Tests[0]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C0',label='19.6 m/s 2908|R ',**mat124)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[5]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[5]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C1',label='16.3 m/s 2939|L ',**mat124)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[6]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[6]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C2',label='18 m/s 2965|L ',**mat124)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[7]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[7]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C3',label='19.5 m/s 2978|L',**mat124)

k=1
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[0]]).Model.Impactor_Head_contact.time.iloc[0:70] ,pd.DataFrame(sim_output[version[k],Tests[0]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C0',**mat81)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[5]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[5]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C1',**mat81)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[6]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[6]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C2',**mat81)
axs[0].plot(pd.DataFrame(sim_output[version[k],Tests[7]]).Model.Impactor_Head_contact.time.iloc[0:70],pd.DataFrame(sim_output[version[k],Tests[7]]).Model.Impactor_Head_contact.force.iloc[0:70],color='C3',**mat81)

axs[0].fill_between(exp_fts.sci_time*1000,exp_fts.sci_force/1000,color='silver',alpha=0.4,label='Corridor (including males)')
axs[0].plot(exp_fts.savg_time*1000,exp_fts.savg_force/1000,'--',color='k',label='Corridor average (including males) ')
axs[0].legend(loc="best");

k=0
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[4]]).Model.Impactor_Head_contact.time.iloc[0:50],pd.DataFrame(sim_output[version[k],Tests[4]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C0',label='35.1 m/s 2908|L',**mat124)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[1]]).Model.Impactor_Head_contact.time.iloc[0:50],pd.DataFrame(sim_output[version[k],Tests[1]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C1',label='34.4 m/s 2939|R ',**mat124)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[2]]).Model.Impactor_Head_contact.time.iloc[0:50] ,pd.DataFrame(sim_output[version[k],Tests[2]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C2',label='35.2 m/s 2965|R ',**mat124)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[3]]).Model.Impactor_Head_contact.time.iloc[0:50] ,pd.DataFrame(sim_output[version[k],Tests[3]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C3',label='32.4 m/s 2978|R ',**mat124)
k=1
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[4]]).Model.Impactor_Head_contact.time.iloc[0:50],pd.DataFrame(sim_output[version[k],Tests[4]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C0',**mat81)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[1]]).Model.Impactor_Head_contact.time.iloc[0:50],pd.DataFrame(sim_output[version[k],Tests[1]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C1',**mat81)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[2]]).Model.Impactor_Head_contact.time.iloc[0:50] ,pd.DataFrame(sim_output[version[k],Tests[2]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C2',**mat81)
axs[1].plot(pd.DataFrame(sim_output[version[k],Tests[3]]).Model.Impactor_Head_contact.time.iloc[0:50] ,pd.DataFrame(sim_output[version[k],Tests[3]]).Model.Impactor_Head_contact.force.iloc[0:50],color='C3',**mat81)

axs[1].fill_between(exp_fts.fci_time*1000,exp_fts.fci_force/1000,color='silver',alpha=0.4,label='Corridor (including males)')
axs[1].plot(exp_fts.favg_time*1000,exp_fts.favg_force/1000,'--',color='k',label='Corridor average (including males) ')
fig_fd_comp.text(0.05,0,'The dotted lines in the plots are from the simulation results using MAT_81 material card and solid lines are from simulations run using MAT_124 material card', style='italic',color='grey')
axs[1].legend(loc="best");
fig_fd_comp.tight_layout()
../_images/b7ef151caa029b7d230199a533afa94f91572665f991bf47888521960662c4ae.png
Hide code cell source
fig_fd_2, axs = plt.subplots(nrows=2, ncols=2,figsize=(10, 6))
fig_fd_2.suptitle('Force Vs Deflection (F50)|High speed tests')
fig_fd_2.supylabel('Force[kN]')
fig_fd_2.supxlabel('Impactor displacement [mm]')

for x in range(2):
    for y in range(2):
        axs[x,y].set_xlim([0,14])
        axs[x,y].set_ylim([0,10])


axs[0,0].set_title('F | 73 years | 2908: left|35.1 m/s')
axs[0,0].plot(pd.DataFrame(sim_output[version[0],Tests[4]]).Impactor.Displacement.displacement.iloc[0:50] *-1,pd.DataFrame(sim_output[version[0],Tests[4]]).Model.Impactor_Head_contact.force.iloc[0:50], linewidth=2,color='r',label='Cortical MAT 124')
axs[0,0].plot(pd.DataFrame(sim_output[version[1],Tests[4]]).Impactor.Displacement.displacement.iloc[0:50] *-1,pd.DataFrame(sim_output[version[1],Tests[4]]).Model.Impactor_Head_contact.force.iloc[0:50],':b',linewidth=2,label='Cortical MAT 81')
axs[0,0].plot(experiment['2908L_dist']*1000,experiment['2908L_forc']/1000, '--',linewidth=2,color='k',label='Experiment')

axs[0,1].set_title('F | 63 years | 2939: Right|34.4 m/s')
axs[0,1].plot(pd.DataFrame(sim_output[version[0],Tests[1]]).Impactor.Displacement.displacement.iloc[0:55],pd.DataFrame(sim_output[version[0],Tests[1]]).Model.Impactor_Head_contact.force.iloc[0:55], linewidth=2,color='r')
axs[0,1].plot(pd.DataFrame(sim_output[version[1],Tests[1]]).Impactor.Displacement.displacement.iloc[0:55],pd.DataFrame(sim_output[version[1],Tests[1]]).Model.Impactor_Head_contact.force.iloc[0:55],':b', linewidth=2)
axs[0,1].plot(experiment['2939R_dist']*1000,experiment['2939R_forc']/1000, '--',linewidth=2,color='k')

axs[1,1].set_title('F | 75 years | 2965: Right|35.2 m/s')
axs[1,1].plot(pd.DataFrame(sim_output[version[0],Tests[2]]).Impactor.Displacement.displacement.iloc[0:55] ,pd.DataFrame(sim_output[version[0],Tests[2]]).Model.Impactor_Head_contact.force.iloc[0:55], linewidth=2,color='r')
axs[1,1].plot(pd.DataFrame(sim_output[version[1],Tests[2]]).Impactor.Displacement.displacement.iloc[0:55] ,pd.DataFrame(sim_output[version[1],Tests[2]]).Model.Impactor_Head_contact.force.iloc[0:55],':b', linewidth=2)
axs[1,1].plot(experiment['2965R_dist']*1000,experiment['2965R_forc']/1000, '--',linewidth=2,color='k')

axs[1,0].set_title('F | 55 years | 2978: Right | 32.4 m/s ')
axs[1,0].plot(pd.DataFrame(sim_output[version[0],Tests[3]]).Impactor.Displacement.displacement.iloc[0:55] ,pd.DataFrame(sim_output[version[0],Tests[3]]).Model.Impactor_Head_contact.force.iloc[0:55], linewidth=2,color='r')
axs[1,0].plot(pd.DataFrame(sim_output[version[1],Tests[3]]).Impactor.Displacement.displacement.iloc[0:55] ,pd.DataFrame(sim_output[version[1],Tests[3]]).Model.Impactor_Head_contact.force.iloc[0:55],':b',linewidth=2)
axs[1,0].plot(experiment['2978R_dist']*1000,experiment['2978R_forc']/1000, '--',linewidth=2,color='k')

fig_fd_2.legend(loc="upper center", bbox_to_anchor=(0.5, 0), ncol=3);# fig_fd.show()
fig_fd_2.tight_layout()
../_images/bfe4686dd3acc7a895d0e97d24ac46ce2c1e5598d8eb92c3a377e6b94a721cb1.png
Hide code cell source
fig_fd_3, axs = plt.subplots(nrows=2, ncols=2,figsize=(10, 6))
fig_fd_3.suptitle('Force Vs Deflection (F50) | Low speed Tests',)
fig_fd_3.supylabel('Force[kN]',)
fig_fd_3.supxlabel('Impactor displacement [mm]',)

for x in range(2):
    for y in range(2):
        axs[x,y].set_xlim([0,12])
        axs[x,y].set_ylim([0,4])


axs[0,0].set_title('F | 73 years | 2908: Right|19.6m/s',)
axs[0,0].plot(pd.DataFrame(sim_output[version[0],Tests[0]]).Impactor.Displacement.displacement.iloc[0:80] ,pd.DataFrame(sim_output[version[0],Tests[0]]).Model.Impactor_Head_contact.force.iloc[0:80], linewidth=2,color='r',label='Cortical MAT 124')
axs[0,0].plot(pd.DataFrame(sim_output[version[1],Tests[0]]).Impactor.Displacement.displacement.iloc[0:80] ,pd.DataFrame(sim_output[version[1],Tests[0]]).Model.Impactor_Head_contact.force.iloc[0:80],':b',linewidth=2,label='Cortical MAT 81')
axs[0,0].plot(experiment['2908R_dist']*1000,experiment['2908R_forc']/1000, '--',linewidth=2,color='k',label='Experiment')

axs[0,1].set_title('F | 63 years | 2939: left|16.3 m/s',)
axs[0,1].plot(pd.DataFrame(sim_output[version[0],Tests[5]]).Impactor.Displacement.displacement.iloc[0:80]*-1,pd.DataFrame(sim_output[version[0],Tests[5]]).Model.Impactor_Head_contact.force.iloc[0:80], linewidth=2,color='r')
axs[0,1].plot(pd.DataFrame(sim_output[version[1],Tests[5]]).Impactor.Displacement.displacement.iloc[0:80] *-1,pd.DataFrame(sim_output[version[1],Tests[5]]).Model.Impactor_Head_contact.force.iloc[0:80],':b',linewidth=2)
axs[0,1].plot(experiment['2939L_dist']*1000,experiment['2939L_forc']/1000, '--',linewidth=2,color='k')
axs[1,1].set_title('F | 75 years | 2965: left|18 m/s',)

axs[1,1].plot(pd.DataFrame(sim_output[version[0],Tests[6]]).Impactor.Displacement.displacement.iloc[0:80] *-1,pd.DataFrame(sim_output[version[0],Tests[6]]).Model.Impactor_Head_contact.force.iloc[0:80], linewidth=2,color='r')
axs[1,1].plot(pd.DataFrame(sim_output[version[1],Tests[6]]).Impactor.Displacement.displacement.iloc[0:80] *-1,pd.DataFrame(sim_output[version[1],Tests[6]]).Model.Impactor_Head_contact.force.iloc[0:80],':b',linewidth=2)
axs[1,1].plot(experiment['2965L_dist']*1000,experiment['2965L_forc']/1000, '--',linewidth=2,color='k')

axs[1,0].set_title('F | 55 years | 2978: left | 19.5 m/s ',)
axs[1,0].plot(pd.DataFrame(sim_output[version[0],Tests[7]]).Impactor.Displacement.displacement.iloc[0:80] *-1,pd.DataFrame(sim_output[version[0],Tests[7]]).Model.Impactor_Head_contact.force.iloc[0:80], linewidth=2,color='r')
axs[1,0].plot(pd.DataFrame(sim_output[version[1],Tests[7]]).Impactor.Displacement.displacement.iloc[0:80] *-1,pd.DataFrame(sim_output[version[1],Tests[7]]).Model.Impactor_Head_contact.force.iloc[0:80],':b',linewidth=2)
axs[1,0].plot(experiment['2978L_dist']*1000,experiment['2978L_forc']/1000, '--',linewidth=2,color='k')

fig_fd_3.legend(loc="upper center", bbox_to_anchor=(0.5, 0), ncol=3)
fig_fd_3.tight_layout()
../_images/2e9e750408727bd25ebe96e5011d202e0110486693d4380b39f8b4d514fbcb91.png