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]
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
Show 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()
Show 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()
Show 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()