Tabletop tests (Kent 2004)¶
Model validation information
| Version | Date | Performed by | LS-Dyna |
|---|---|---|---|
| 0.3.2 | 2022-11-30 | Johan Iraeus | 9.3.1 |
| 1.1.1 | 2024-05-22 | Johan Iraeus | 12.2.1 |
Added to VIVA+ Validation Catalog on : November 30th, 2022
© 2019-2024, OpenVT Organization (OVTO)
Available openly under under Creative Commons Attribution 4.0 International License 
Experiment by Kent et al. (2004)¶
Summary:¶
The simulated outputs are compared to the references from PMHS tests reported by Kent et al. 2004 1
1 Kent, R., Lessley, D., and Sherwood, C. (2004), “Thoracic Response to Dynamic, Non-impact Loading from a Hub, Distributed Belt, Diagonal Belt, and Double Diagonal Belts”, in Stapp Car Crash Journal, ed. The Stapp Association (Warrendale, PA, United States: SAE International).

(figure shows diagonal belt loading condition with the VIVA+ 50F model)
Experiment¶
Information on the subjects/specimens¶
- 8 female specimen (average age: 69.8 yrs, average mass: 57.9 kg, average height: 163.8 kg)
- 7 male specimen (average age: 69.3 yrs, average mass: 80.3 kg, average height: 176.4 cm)
Loading and Boundary Conditions¶
Tabletop tests with a hub, a diagonal belt and two diagonal belts ("X-belt") were performed. First, sub-injurious tests were performed before a final injurious test for each specimen.
Positioning¶
The VIVA+ model is used in the default seated position, with the arms positioned towards the side during gravity settling (during the first 350ms).
Responses recorded¶
The reference values from the paper were digitalised and are incuded in the package. The are color coded in the plots to visualise female/male specimen.
# Libraries for plotting
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
sns.set_style("whitegrid")
#sns.set_context("paper",
# font_scale=1.4
# )
#sns.color_palette("Blues", as_cmap=True)
#sns.color_palette("dark:salmon_r", as_cmap=True);
#sns.set_palette("Spectral")
#sns.color_palette("coolwarm", as_cmap=True)
plot50F = {"linestyle" :'-', "color" : 'r', 'linewidth' : 3}
plotExperimentFemale = {"linestyle" :'--', "color" : 'r', "alpha" : 0.7 }
plot50M = { "linestyle" :'-', "color" : 'b', 'linewidth' : 3}
plotExperimentMale = {"linestyle" :'--', "color" : 'b',"alpha" : 0.7,}
plotExperimentMale2 = {"linestyle" :':', "color" : 'b',"alpha" : 0.7,}
plotExperiment = {"linestyle" :'--', "color" : 'grey', "alpha" : 0.7 }
plt.rcParams['figure.dpi'] = 140
# Your name
name="Johan_Iraeus"
# LS-Dyna version (if you have not run the simulations on your own, fill in "example"):
dyna_executable_name="ls-dyna_mpp_s_R12_2_1_x64_centos79_ifort160_avx2_intelmpi-2018_sharelib"
# Overall number of CPUs
n_cpu = "32"
# Platform (from d3hsp file)
platform = "Intel-MPI 2018 Xeon64"
# OS Level (from d3hsp file)
os_level = "Linux CentOS 7.9 uom"
# Do not change! Date is filled in automatically
date = datetime.date.today().strftime("%Y-%m-%d")
# Import dynasaur library
from dynasaur.plugins.data_visualization_controller import DataVisualizationController
from dynasaur.plugins.criteria_controller import CriteriaController
# write metadata
metadata={
"date": date,
"name": name,
"n_cpu": n_cpu,
"dyna_executable_name": dyna_executable_name,
"platform": platform,
"os_level": os_level
}
with open(os.path.join(processed_data_dir, simulation_meta_file_name), 'w+') as f:
json.dump(metadata, f, indent=4)
Results¶
Energies¶
The energy balance is show in the figure below. The negative internal energy is from the pretension of the seat belt and the reposition springs (contributing to the model with "negative" energy)
Force-Deflection Plots¶
The figures below compare the simulation predictions with the PMHS tests for the non-injurious load cases, for both the 50F and 50M models.
# apply offset (remove part with gravity settling and positioning)
simData_50F_Hub_offset = simData_50F_Hub.iloc[350:,:]
simData_50F_Hub_offset_defl = simData_50F_Hub_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50F_Hub_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50F_Hub_offset_force = simData_50F_Hub_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50F_Hub_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]
simData_50M_Hub_offset = simData_50M_Hub.iloc[350:,:]
simData_50M_Hub_offset_defl = simData_50M_Hub_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50M_Hub_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50M_Hub_offset_force = simData_50M_Hub_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50M_Hub_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]
simData_50F_Belt_offset = simData_50F_Belt.iloc[350:,:]
simData_50F_Belt_offset_defl = simData_50F_Belt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50F_Belt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50F_Belt_offset_force = simData_50F_Belt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50F_Belt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]
simData_50M_Belt_offset = simData_50M_Belt.iloc[350:,:]
simData_50M_Belt_offset_defl = simData_50M_Belt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50M_Belt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50M_Belt_offset_force = simData_50M_Belt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50M_Belt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]
simData_50F_Xbelt_offset = simData_50F_Xbelt.iloc[350:,:]
simData_50F_Xbelt_offset_defl = simData_50F_Xbelt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50F_Xbelt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50F_Xbelt_offset_force = simData_50F_Xbelt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50F_Xbelt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]
simData_50M_Xbelt_offset = simData_50M_Xbelt.iloc[350:,:]
simData_50M_Xbelt_offset_defl = simData_50M_Xbelt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'] - simData_50M_Xbelt_offset['IMPACTOR']['Chest_deflection_vs_time']['displacement'].iloc[0]
simData_50M_Xbelt_offset_force = simData_50M_Xbelt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'] - simData_50M_Xbelt_offset['IMPACTOR']['Contactforce_z_table_to_HBM_torso_CFC_180']['force'].iloc[0]