This Python script analyses Split Hopkinson Pressure Bar (SHPB) experimental data to calculate stress-strain curves and other relevant parameters. Follow the instructions below to use the script with your experimental data.
-
Install Dependencies: Make sure you have Python installed on your system. You can install the required Python packages by running the following command:
pip install -r requirements.txt
-
Prepare Experimental Data:
- Ensure that your experimental data is stored in a CSV or Excel file.
- The file should contain columns for "Time", "Incident", "Reflected", and "Transmitted" voltages.
- Voltage values should be in volts (V).
- Specify the file name in the Python script (
analysis.py
) using thefilename
variable. For example:
filename = "path/to/your/data_file.csv"
-
Customize Input Parameters:
- Open the Python script (
analysis.py
) in a text editor. - Update the input parameters according to your experiment setup. Parameters such as Young's modulus, density, initial length, and cross-sectional areas should be adjusted based on your experimental conditions.
- Open the Python script (
-
Run the Script:
- Run the script using the following command:
python analysis.py
-
View Plots and Analyze Results:
- After running the script, view the generated plots to analyze the results.
- The script will generate plots for filtered voltage data, strain data, stress-strain curve, and true stress-strain curve.
Here's an example of how to use the script with your experimental data:
- Ensure that Python and the required dependencies are installed on your system.
- Prepare your experimental data in a CSV or Excel file format.
- Customize the input parameters in the
analysis.py
script based on your experiment setup. - Specify the file name of your experimental data in the script.
- Run the script using
python analysis.py
. - Analyze the generated plots to interpret the results of your SHPB experiment.
In the Split Hopkinson Pressure Bar (SHPB) experiment, the characteristic relations associated with one-dimensional elastic wave propagation in the bar provide the basis for calculating stress and strain in the specimen.
-
Particle Velocity at Specimen/Input-Bar and Specimen/Output-Bar Interface:
- The particle velocity
$v_1(t)$ at the specimen/input-bar interface is given by:$v_1(t) = c_b(\varepsilon_I - \varepsilon_R)$ - Here,
$c_b = \sqrt{\frac{E_b}{\rho_b}}$ represents the bar wave speed, with$E_b$ denoting the Young's modulus and$\rho_b$ the density of the bar material. - The particle velocity
$v_2(t)$ at the specimen/output-bar interface is given by:$v_2(t) = c_b \varepsilon_T$
- The particle velocity
-
Mean Axial Strain Rate in the Specimen:
- The mean axial strain rate
$\dot{e}_s$ in the specimen is calculated as:$\dot{e}_s = \frac{c_b}{l_0} (\varepsilon_I - \varepsilon_R - \varepsilon_T) = \frac{v_1 - v_2}{l_0}$ - Here,
$l_0$ represents the initial specimen length.
- The mean axial strain rate
-
Calculation of Bar Stresses and Normal Forces:
- The stresses and normal forces at the specimen/bar interfaces are computed as follows:
-
$P_1 = E_b (\varepsilon_I + \varepsilon_R) A_b$ at the specimen/input-bar interface. -
$P_2 = E_b \varepsilon_T A_b$ at the specimen/output-bar interface.
-
- Here,
$A_b$ denotes the cross-sectional area of the bars.
- The stresses and normal forces at the specimen/bar interfaces are computed as follows:
-
Mean Axial Stress in the Specimen:
- The mean axial stress
$\bar{S}_s(t)$ in the specimen is given by:$\bar{S}_s(t) = \frac{(P_1 + P_2)}{2} \left( \frac{1}{A_s} \right)$ - Here,
$A_s$ represents the initial cross-sectional area of the specimen.
- The mean axial stress
-
Stress-Strain Relationship:
- Assuming stress equilibrium, uniaxial stress conditions in the specimen, and one-dimensional elastic stress wave propagation without dispersion in the bars, the nominal strain rate
$\dot{e}_s$ , nominal strain$e_s$ , and nominal stress$S_s$ in the specimen are estimated using:$\dot{e}_s(t) = \frac{2c_b}{l_0} \varepsilon_R(t)$ $e_s(t) = \int_0^t \dot{e}_s(\tau) d\tau$ $S_s(t) = \frac{E_b A_b}{A_s} \varepsilon_T(t)$
- Assuming stress equilibrium, uniaxial stress conditions in the specimen, and one-dimensional elastic stress wave propagation without dispersion in the bars, the nominal strain rate
-
True Stress-Strain:
-
True strain
$\varepsilon_s(t)$ in the specimen is given by:-
$\varepsilon_s(t) = -\ln(1 - e_s(t))$
Here,$e_s(t)$ represents the engineering strain in the specimen.
-
-
The true strain rate
$\dot{\varepsilon}_s(t)$ in the specimen is calculated as:$\dot{\varepsilon}_s(t) = \frac{\dot{e}_s(t)}{1 - e_s(t)}$
-
The true stress
$\sigma_s(t)$ in the specimen is obtained as:-
$\sigma_s(t) = S_s(t) \cdot (1 - e_s(t))$
Here,$S_s(t)$ represents the nominal stress in the specimen.
-
-
-
Data Preparation:
- Prepare your SHPB data in CSV format. Each CSV file should contain three columns: 'Time' and the respective voltage data (e.g., 'Incident' and 'Transmitted').
-
Launching the Tool:
- Run the Python script
crop.py
. - The tool will display a graphical interface with multiple subplots.
- Run the Python script
-
Selecting Regions:
- For Incident Voltage: Click and drag on the subplot (labelled 'Incident Voltage') to select a region of interest.
- For Reflected Voltage: Click and drag on the subplot (labelled 'Reflected Voltage') to select a region of interest.
- For Transmitted Voltage: Click and drag on the subplot (labelled 'Transmitted Voltage') to select a region of interest.
-
Saving Selected Data:
- The selected regions will be displayed on their respective subplots.
- The selected data will be saved automatically to CSV files in the same directory as the script.
- Selected Incident Voltage data will be saved to
selected_incident.csv
. - Selected Reflected Voltage data will be saved to
selected_reflected.csv
. - Selected Transmitted Voltage data will be saved to
selected_transmitted.csv
.
- Selected Incident Voltage data will be saved to
The theory and equations used in this project are based on the following sources:
- Ramesh, K.T. (2008). High Rates and Impact Experiments. In: Sharpe, W. (eds) Springer Handbook of Experimental Solid Mechanics. Springer Handbooks. Springer, Boston, MA. DOI: 10.1007/978-0-387-30877-7_33
- Kolsky, H. (1963). Stress Waves in Solids. United Kingdom: Dover Publications.
This project is licensed under the Apache-2.0 License. - see the LICENSE file for details.