Rear Sled (Yoganadan 2000)#

PMHS Rear Impact with rigid seat by Yoganandan et al. (2000)

Model validation information

  • Performed by: Jobin John

  • Reviewed by:

Added to VIVA+ Validation Catalog on 2022-12-27

Model version (this notebook was last run for): 0.3.2

© 2019-2024, OpenVT Organization (OVTO)

Available openly under under Creative Commons Attribution 4.0 International License

Experiment#

Information on the subjects/specimens#

  • Number of subjects/specimens: 5

  • Sex: 4 female, 1 male

  • Mass (kg): [female: 72.6, 55.4, 40.4, 36.3], [male: 107.5]

  • Height (m): [female: 1.64, 1.56, 1.65, 1.52], [male: 1.85]

  • Age: not available

Loading and Boundary Conditions#

Impact#

  • 2 female at 4.3 m/s

  • 2 female, 1 male at 6.8 m/s

PMHS

Velocity

Sex

101

6.8 m/s (25 km/h)

F

102

4.3 m/s (16 km/h)

F

103

4.3 m/s (16 km/h)

F

104

6.8 m/s (25 km/h)

M

105

6.8 m/s (25 km/h)

F

Positioning#

  • Head Frankfort plane horizontal

  • Upper extremities crossed in front of the thorax

  • Knee-foot-ankle stretched out

  • Lap belt was tightened without slack

Seat#

  • Seatback for male : 448 mm x 700 mm

  • Seatback for female : 448 mm x 583 mm

Responses recorded#

  • Triaxial linear accelerometers on skull, T1 spinous process, sacrum and sled

  • Radiographs of positioned specimen prior to Impact

  • High speed photography (1000 f/sec): right lateral, overhead top, and close-up lateral on head-neck and neck-torso-pelvis

OC x-displacment with respect to T1#

A local coordinate was defined at T1 based on the description from the experiments

The landmarks used for the definitions and the directions of the axes are:

  • x-axis: Defined between the superior anterior edge of vertebral body and posterior edge of spinous process

    • In the experiments, the axis direction is opposite. Hence use the negative to compare.

  • y-axis: perpendicular to x-axis, in the mid-sagittal plane (corresponds to negative z-axis in the experiments)

  • z-axis: perpendicular to x-y, left to right (corresponds to negative y-axis in the experiments)

Does the T1 rotate 90 degrees ?!

Motion of T1 relative to sled due to straightening of thoracic spine?

Head and T1 Kinematics#

Hide code cell source
fig_ht1, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(2,3, sharex=True, figsize=(20, 10))

#fig_ht1.delaxes(ax3)
################################### Head ############################

ax1.plot(head_y_rot_exp['P16-5-r'].X*1000, head_y_rot_exp['P16-5-r'].Y, label='4.3 m/s', **plotExperimentFemale, marker = "x")
ax1.plot(head_y_rot_exp['P16-5-u'].X*1000, head_y_rot_exp['P16-5-u'].Y, label='4.3 m/s', **plotExperimentFemale2, marker = "x")
ax1.plot(head_y_rot_exp['P25-5-r'].X*1000, head_y_rot_exp['P25-5-r'].Y, label='6.8 m/s', **plotExperimentFemale)
ax1.plot(head_y_rot_exp['P25-95-u'].X*1000, head_y_rot_exp['P25-95-u'].Y, label='6.8 m/s', **plotExperimentMale2)
ax1.plot(head_y_rot_exp['P25-5-u'].X*1000, head_y_rot_exp['P25-5-u'].Y, label='6.8 m/s', **plotExperimentFemale2)
#axs.plot(simData_50F.Bone.Head_COG_ry.time, np.degrees(simData_50F.Bone.Head_COG_ry.rotationy), label='VIVA+ 50F', **plot50F )
ax1.plot(simData_50F.Bone.T1_COG_ry.time.values[simData_50F.Bone.Head_COG_ry.time>350]-t_grav, 
         np.degrees((simData_50F.Bone.Head_COG_ry.displacement - simData_50F.Bone.T1_COG_ry.displacement).values[simData_50F.Bone.Head_COG_ry.time>t_grav]), 
         label='VIVA+ 50F', **plot50F, linestyle = '--', marker = "o", markevery=20 )
ax1.plot(simData_50M.Bone.T1_COG_ry.time.values[simData_50M.Bone.Head_COG_ry.time>350]-t_grav, 
         np.degrees((simData_50M.Bone.Head_COG_ry.displacement - simData_50M.Bone.T1_COG_ry.displacement).values[simData_50M.Bone.Head_COG_ry.time>t_grav]), 
         label='VIVA+ 50M', **plot50M, linestyle = '--', marker = "o", markevery=20 )

ax1.plot(simData_50F_2.Bone.T1_COG_ry.time.values[simData_50F_2.Bone.Head_COG_ry.time>350]-t_grav, 
         np.degrees((simData_50F_2.Bone.Head_COG_ry.displacement - simData_50F_2.Bone.T1_COG_ry.displacement).values[simData_50F_2.Bone.Head_COG_ry.time>t_grav]), 
         label='VIVA+ 50F', **plot50F)
ax1.plot(simData_50M_2.Bone.T1_COG_ry.time.values[simData_50M_2.Bone.Head_COG_ry.time>350]-t_grav, 
         np.degrees((simData_50M_2.Bone.Head_COG_ry.displacement - simData_50M_2.Bone.T1_COG_ry.displacement).values[simData_50M_2.Bone.Head_COG_ry.time>t_grav]), 
         label='VIVA+ 50M', **plot50M)

ax1.set_ylabel('Head Rotation (deg)')
#ax1.set_xlabel('time (ms)')
ax1.set_xlim(0,250)


ax2.plot(head_x_disp_exp.P16_5_r.X*1000, head_x_disp_exp.P16_5_r.Y*1000, label='4.3 m/s', ** plotExperimentFemale, marker = 'x')
ax2.plot(head_x_disp_exp.P16_5_u.X*1000, head_x_disp_exp.P16_5_u.Y*1000, label='4.3 m/s', ** plotExperimentFemale2, marker = 'x')
ax2.plot(head_x_disp_exp.P25_5_r.X*1000, head_x_disp_exp.P25_5_r.Y*1000, label='6.8 m/s', ** plotExperimentFemale)
ax2.plot(head_x_disp_exp.P25_5_u.X*1000, head_x_disp_exp.P25_5_u.Y*1000, label='6.8 m/s', ** plotExperimentFemale2)
ax2.plot(head_x_disp_exp.P25_95_u.X*1000, head_x_disp_exp.P25_95_u.Y*1000, label='6.8 m/s', ** plotExperimentMale2)

OC_x_disp_50F = -simData_50F.Bone.OC_x.displacement.values[simData_50F.Bone.OC_x.time>t_grav]
OC_x_disp_50M = -simData_50M.Bone.OC_x.displacement.values[simData_50M.Bone.OC_x.time>t_grav]
OC_x_disp_50F_2 = -simData_50F_2.Bone.OC_x.displacement.values[simData_50F_2.Bone.OC_x.time>t_grav]
OC_x_disp_50M_2 = -simData_50M_2.Bone.OC_x.displacement.values[simData_50M_2.Bone.OC_x.time>t_grav]

ax2.plot(simData_50F.Bone.OC_x.time.values[simData_50F.Bone.OC_x.time>t_grav]-t_grav,  
         OC_x_disp_50F,
         label='VIVA+ 50F', **plot50F, marker = "o", markevery=20 )
ax2.plot(simData_50M.Bone.OC_x.time.values[simData_50M.Bone.OC_x.time>t_grav]-t_grav,  
          OC_x_disp_50M,
         label='VIVA+ 50M', **plot50M, marker = "o", markevery=20)
ax2.plot(simData_50F_2.Bone.OC_x.time.values[simData_50F_2.Bone.OC_x.time>t_grav]-t_grav,  
         OC_x_disp_50F_2,
         label='VIVA+ 50F', **plot50F, )
ax2.plot(simData_50M_2.Bone.OC_x.time.values[simData_50M_2.Bone.OC_x.time>t_grav]-t_grav,  
          OC_x_disp_50M_2,
         label='VIVA+ 50M', **plot50M, )

ax2.set(ylabel='OC-T1 x-displacment (mm)',)

ax3.plot(Head_z_wrt_T1.P16_5_r.X*1000, Head_z_wrt_T1.P16_5_r.Y*1000, label='4.3 m/s', ** plotExperimentFemale, marker = 'x' )
ax3.plot(Head_z_wrt_T1.P16_5_u.X*1000, Head_z_wrt_T1.P16_5_u.Y*1000, label='4.3 m/s', ** plotExperimentFemale2, marker = 'x')
ax3.plot(Head_z_wrt_T1.P25_5_u.X*1000, Head_z_wrt_T1.P25_5_u.Y*1000, label='6.8 m/s', ** plotExperimentFemale2)
ax3.plot(Head_z_wrt_T1.P25_5_r.X*1000, Head_z_wrt_T1.P25_5_r.Y*1000, label='6.8 m/s', ** plotExperimentFemale)
ax3.plot(Head_z_wrt_T1.P25_95_u.X*1000, Head_z_wrt_T1.P25_95_u.Y*1000, label='6.8 m/s', ** plotExperimentMale)

OC_z_disp_50F = -simData_50F.Bone.OC_y.displacement.values[simData_50F.Bone.OC_y.time>t_grav]
OC_z_disp_50M = -simData_50M.Bone.OC_y.displacement.values[simData_50M.Bone.OC_y.time>t_grav]

OC_z_disp_50F_2 = -simData_50F_2.Bone.OC_y.displacement.values[simData_50F_2.Bone.OC_y.time>t_grav]
OC_z_disp_50M_2 = -simData_50M_2.Bone.OC_y.displacement.values[simData_50M_2.Bone.OC_y.time>t_grav]


ax3.plot(simData_50F.Bone.OC_y.time.values[simData_50F.Bone.OC_y.time>t_grav]-t_grav,  
         OC_z_disp_50F,
         label='VIVA+ 50F', **plot50F, marker = "o", markevery=20 )
ax3.plot(simData_50M.Bone.OC_z.time.values[simData_50M.Bone.OC_y.time>t_grav]-t_grav,  
         OC_z_disp_50M,
         label='VIVA+ 50M', **plot50M, marker = "o", markevery=20 )
ax3.plot(simData_50F_2.Bone.OC_y.time.values[simData_50F_2.Bone.OC_y.time>t_grav]-t_grav,  
         OC_z_disp_50F_2,
         label='VIVA+ 50F', **plot50F,  )
ax3.plot(simData_50M_2.Bone.OC_z.time.values[simData_50M_2.Bone.OC_y.time>t_grav]-t_grav,  
         OC_z_disp_50M_2,
         label='VIVA+ 50M', **plot50M,   )
ax3.set(
    #xlabel='time (ms)', 
    ylabel='OC-T1 z-displacment (mm)',
       #title='Head X-displacment wrt T1',
       )

################################### T1 ############################



ax4.plot(T1_rot_exp_wrt_sacrum.P16_5_r.X*1000, T1_rot_exp_wrt_sacrum.P16_5_r.Y, label="4.3 ms", **plotExperimentFemale,  marker = 'x')
ax4.plot(T1_rot_exp_wrt_sacrum.P16_5_u.X*1000, T1_rot_exp_wrt_sacrum.P16_5_u.Y, label="4.3 ms", **plotExperimentFemale2, marker = 'x')
ax4.plot(T1_rot_exp_wrt_sacrum.P25_95_u.X*1000, T1_rot_exp_wrt_sacrum.P25_95_u.Y, label="6.8 ms", **plotExperimentMale2,  )
ax4.plot(simData_50F.Bone.T1_COG_ry.time - t_grav, 
         np.degrees(simData_50F.Bone.T1_COG_ry.displacement), label='VIVA+ 50F', **plot50F, marker = "o", markevery=20)
ax4.plot(simData_50M.Bone.T1_COG_ry.time - t_grav, 
         np.degrees(simData_50M.Bone.T1_COG_ry.displacement
                    #-simData_50M.Bone.PE_Sacrum_posterior_ry.displacement
                   ), label='VIVA+ 50M', **plot50M, marker = "o", markevery=20)
ax4.plot(simData_50F_2.Bone.T1_COG_ry.time - t_grav, 
         np.degrees(simData_50F_2.Bone.T1_COG_ry.displacement), label='VIVA+ 50F', **plot50F, )
ax4.plot(simData_50M_2.Bone.T1_COG_ry.time - t_grav, 
         np.degrees(simData_50M_2.Bone.T1_COG_ry.displacement
                    #-simData_50M.Bone.PE_Sacrum_posterior_ry.displacement
                   ), label='VIVA+ 50M', **plot50M,  )

ax4.set_ylabel('T1 Rotation (deg)')
ax4.set_xlabel('time (ms)')


ax5.plot(T1_disp_wrt_sled.P16_5_r_x.X*1000, T1_disp_wrt_sled.P16_5_r_x.Y*1000, label='4.3 m/s', **plotExperimentFemale,  marker = 'x')
ax5.plot(T1_disp_wrt_sled.P16_5_u_x.X*1000, T1_disp_wrt_sled.P16_5_u_x.Y*1000, label='4.3 m/s', **plotExperimentFemale2,  marker = 'x')
ax5.plot(T1_disp_wrt_sled.P25_5_r_x.X*1000, T1_disp_wrt_sled.P25_5_r_x.Y*1000, label='6.8 m/s', **plotExperimentFemale)
ax5.plot(T1_disp_wrt_sled.P25_5_u_x.X*1000, T1_disp_wrt_sled.P25_5_u_x.Y*1000, label='6.8 m/s', **plotExperimentFemale2)
ax5.plot(T1_disp_wrt_sled.P25_95_u_x.X*1000, T1_disp_wrt_sled.P25_95_u_x.Y*1000, label='6.8 m/s', **plotExperimentMale2)

ax5.plot(simData_50F.Bone.T1_COG_x.time - t_grav, T1_x_wrt_sled_50F - T1_x_wrt_sled_50F.iloc[0] ,  **plot50F, marker = "o", markevery=20)
ax5.plot(simData_50M.Bone.T1_COG_x.time - t_grav, T1_x_wrt_sled_50M - T1_x_wrt_sled_50M.iloc[0] ,  **plot50M, marker = "o", markevery=20)
ax5.plot(simData_50F_2.Bone.T1_COG_x.time - t_grav, T1_x_wrt_sled_50F_2- T1_x_wrt_sled_50F_2.iloc[0] ,  **plot50F, )
ax5.plot(simData_50M_2.Bone.T1_COG_x.time - t_grav, T1_x_wrt_sled_50M_2 - T1_x_wrt_sled_50M_2.iloc[0] ,  **plot50M, )
#axs.legend();

ax5.set_ylabel('T1 x-displacement (mm)')
ax5.set_xlabel('time (ms)')


ax6.plot(T1_disp_wrt_sled.P16_5_r_z.X*1000, T1_disp_wrt_sled.P16_5_r_z.Y*1000, label='4.3 m/s', **plotExperimentFemale,  marker = "x")
ax6.plot(T1_disp_wrt_sled.P16_5_u_z.X*1000, T1_disp_wrt_sled.P16_5_u_z.Y*1000, label='4.3 m/s', **plotExperimentFemale2,  marker = "x")
ax6.plot(T1_disp_wrt_sled.P25_5_r_z.X*1000, T1_disp_wrt_sled.P25_5_r_z.Y*1000, label='6.8 m/s', **plotExperimentFemale)
ax6.plot(T1_disp_wrt_sled.P25_5_u_z.X*1000, T1_disp_wrt_sled.P25_5_u_z.Y*1000, label='6.8 m/s', **plotExperimentFemale2)
ax6.plot(T1_disp_wrt_sled.P25_95_u_z.X*1000, T1_disp_wrt_sled.P25_95_u_z.Y*1000, label='6.8 m/s', **plotExperimentMale2)

ax6.plot((simData_50F.Bone.T1_COG_z.time - t_grav).values[simData_50F.Bone.T1_COG_z.time>t_grav], 
         T1_z_wrt_sled_50F - T1_z_wrt_sled_50F[0] , label='VIVA+ 50F 4.3 m/s', **plot50F,  marker = "o", markevery=20)
ax6.plot((simData_50M.Bone.T1_COG_z.time - t_grav).values[simData_50M.Bone.T1_COG_z.time>t_grav], 
         T1_z_wrt_sled_50M - T1_z_wrt_sled_50M[0] , label='VIVA+ 50M 4.3 m/s', **plot50M, marker = "o", markevery=20)
ax6.plot((simData_50F_2.Bone.T1_COG_z.time - t_grav).values[simData_50F_2.Bone.T1_COG_z.time>t_grav], 
         T1_z_wrt_sled_50F_2 - T1_z_wrt_sled_50F_2[0] , label='VIVA+ 50F 6.8 m/s', **plot50F)
ax6.plot((simData_50M_2.Bone.T1_COG_z.time - t_grav).values[simData_50M.Bone.T1_COG_z.time>t_grav], 
         T1_z_wrt_sled_50M_2 - T1_z_wrt_sled_50M_2[0] , label='VIVA+ 50M 6.8 m/s', **plot50M)
#axs.legend();

ax6.set_ylabel('T1 z-displacement (mm)')
ax6.set_xlabel('time (ms)')

ax6.legend(loc='center left', bbox_to_anchor=(0.9, 1.1))
<matplotlib.legend.Legend at 0x1dd888cb7c0>
../_images/d191607875de4bba408cbc9fde335b6bddabeb96b640a4bd145ba8265097f338.png