Introduction

The processing of Split Hopkinson Pressure Bar (SHPB) data has been extensively studied for over 65 years, beginning with Kolsky’s modifications [1] to the Hopkinson Pressure Bar [2]. In these experiments, strain gages provide the load and displacement history of the specimen being deformed. Calculations of these values can be quite intensive [3], and many labs have developed their own in-house tools to expedite the results.

The two goals of this technical note are (1) point researchers in the dynamic testing community towards an open-source tool [4] that can quickly and accurately process SHPB tests and (2) explain the capabilities of this tool. The theory and calculations that this tool utilizes are not novel. Instead, it uses the traditional one, two, and three wave techniques in a user friendly approach. Also, this tool is not the first of its kind. Examples of software akin to this one already exist but lack the open source nature that is offered here. The main issue resolved in this software package is that many Hopkinson Bar operators require full control of governing equations. For instance, many different dispersion relations have been developed for solid elastic rods either analytically, numerically, or empirically [58]; other corrections have also been developed for hollow rods [9] and for viscoelastic rods [10]. Temperature effects may be added as part of calculations [11]. Futhermore, many researchers require additional calculations for strain gage calibration, inertia, and friction [3, 12]. Still researchers may need data filtering, curve fitting, and iterative modeling for their application [13]. Having a moldable software package that all Hopkinson Bar users can have open access to is paramount for synergizing these vast methods. The effect of this kind of software package is that different labs can then reproduce datasets created by other labs and lead to further investigations of the scientific nature of the materials being experimented upon.

Force–Displacement Graphical User Interface

For the majority of SHPB tests, the stress–strain curve with an averaged strain rate is the primary desired end goal. Due to the dynamic nature of this testing, a black box approach that jumps from voltages to stress–strain will ultimately provide unreliable results. The shape of the loading wave and specimen stress equilibrium are examples of factors that must be considered before confirming a “successful” test. Therefore, the experimentalist needs to follow each step in the analysis to make sure that the results are trustworthy. Figure 1 shows the graphic approach from importing the incident and transmitted bar strain gage voltages all the way to calculating the displacements, velocities, and forces.

Fig. 1
figure 1

Graphical interface for calculating the force-displacement

After the voltages are imported, users can visually determine the null space in the signals to accurately zero the voltages. A simple algorithm attempts to determine this space as well as the beginning of the incident, transmitted, and reflected wave. Users can input distances from the specimen to the strain gages, or using sliders in conjunction with the bars’ wavespeeds, these distances (d I and d T ) can be calculated by

$$ \begin{array}{lllll} d_{I} &= \frac{1}{2} c_{I} \times \Delta t \left( Sl_{R} - Sl_{I} \right)\\ d_{T} &= \Delta t \left( Sl_{T} c_{T} - Sl_{I} c_{I} \right) - d_{I} \end{array} $$
(1)

where c I and c T are the wavespeeds of the incident and transmitted bars, respectively; Δt is the time period between voltage samples; S l R ,S l I , and S l T are the slider locations for the beginning of the reflected, incident, transmitted waves, respectively.

The dispersion method described by Li and Lambros [14] was used where the strain ε(nΔt) is expressed as a discrete Fourier series as

$$ \varepsilon \left( n \Delta t\right) = \frac{A_{0}}{2} + \sum\limits_{k=1}^{N} \left[ A_{k} \cos\left( k \omega_{0} n \Delta t \right) + B_{k} \sin\left( k \omega_{0} n \Delta t \right) \right] $$
(2)

where n = 1,2,…2N; k = 1, 2, …N; and the fundamental frequency ω 0 = 2π/t = 2π/(2NΔt). The discrete Fourier coefficients are given as

$$ \begin{array}{lll} A_{0} &= \frac{2}{T} \sum\limits_{n=1}^{2N} \varepsilon \left( n \Delta t\right) \Delta t \\ A_{k} &= \frac{2}{T} \sum\limits_{n=1}^{2N} \varepsilon \left( n \Delta t\right) \cos\left( k \omega_{0} n \Delta t \right) \Delta t \\ B_{k} &= \frac{2}{T} \sum\limits_{n=1}^{2N} \varepsilon \left( n \Delta t\right) \sin\left( k \omega_{0} n \Delta t \right) \Delta t \end{array} $$
(3)

The code uses the non-linear curve fit approach from Gong et al. [15] of the form

$$ \frac{c_{k}}{c_{0}} = A + \frac{B}{C\left( \frac{a}{\Lambda_{k}} \right)^{4} \,+\, D\left( \frac{a}{\Lambda_{k}} \right)^{3} \,+\, E\left( \frac{a}{\Lambda_{k}} \right)^{2}\,+\, F\left( \frac{a}{\Lambda_{k}} \right)^{1.5} \,+\, 1} $$
(4)

which calculates the wave velocity at each wavelength Λ k . Equation (4) is able to fit the original dispersion work of Bancroft [5] and Davies [16] (see Gama et al. [3]) and the software has preloaded constants for Poisson’s ratios from 0.20–0.35 along with the option of inputting manual constants A–F. Assuming that the phase velocity (c k ) is dependent on the wavelength (Λ k ), a phase angle to shift the discrete Fourier transformation results is defined as

$$ \phi_{k} = k \omega_{o} \left( \Delta k/c_{k} \right) $$
(5)

Using an inverse discrete Fourier transformation along with the wavelength dependent wave velocities and phase angles, a properly dispersed signal can be created with

$$ \begin{array}{llll} E \left( n \Delta t\right) &=& \frac{A_{0}}{2} + \sum\limits_{k=1}^{N} [ A_{k} \cos (k \omega_{0} n \Delta t - \phi_{k} )\\ &&+ \left.B_{k} \sin\left( k \omega_{0} n \Delta t -\phi_{k} \right) \right] \end{array} $$
(6)

where E is the dispersed strain. For a more thorough review of dispersion techniques, the work of Gama et al. [3] is a good place to begin.

The traditional techniques for calculating force, velocity, and displacement are utilized. A summary of the calculation follows, however, to look deeper in to the theory of SHPB testing, the reader is directed to the following book chapters dedicated to the subject: Gray [17] and Ramesh [18]. The forces at the incident and transmitted ends (F I (t) and F T (t)), shown in Fig. 2(a), are calculated by

$$ \begin{array}{lll} F_{I}(t) &= A_{I} E_{I} \left( \varepsilon_{I}(t) + \varepsilon_{R}(t) \right)\\ F_{T}(t) &= A_{T} E_{T} \varepsilon_{T}(t) \end{array} $$
(7)

where A and E are the areas and elastic modulus, respectively. ε I (t),ε R (t), and ε T (t) are the the strain values at time t in the incident, reflected, and transmitted waves, respectively. In the one-wave analysis in Fig. 2(d), F T is used for the force. In the two-wave analysis, F I is used for the force. For the three-wave analysis, assuming the areas and moduli are identical for the incident and transmitted bars, the force is calculated as

$$ \begin{array}{lll} F_{\mathrm{3wave}}(t) &=& \frac{1}{2} A_{I} E_{I} \left( \varepsilon_{I}(t) + \varepsilon_{R}(t) + \varepsilon_{T}(t)\right)\\ &=& \frac{F_{I}(t) + F_{T}(t)}{2} \end{array} $$
(8)
Fig. 2
figure 2

Calculated plots available to the user in the GUI: (a) Force–Time, (b) Velocity–Time, (c) Displacement–Time, and (d) Force–Displacement

The three-wave and one-wave velocities are calculated as

$$ \begin{array}{llll} v_{\mathrm{3wave}}(t) &= c_{I} \left[ \varepsilon_{I}(t) - \varepsilon_{R}(t) \right] - c_{T} \varepsilon_{T}(t)\\ v_{\mathrm{1wave}}(t) &= 2 c_{I} \varepsilon_{R}(t) \end{array} $$
(9)

where c I is the wavespeed of the incident bar. The velocity in the three-wave analysis, v 3wave(t), takes the velocity of both bar-specimen interfaces into consideration. The velocity the incident bar interface is accounted for in equation (9) by c 0I [ε I (t) − ε R (t)] and the velocity at the transmitted bar interface is accounted for by c T ε T (t). In the one-wave analysis, the force is assumed to be in equilibrium (ε I (t) + ε R (t) = ε T (t)), therefore only the reflected wave is used. To determine the displacements, the same assumptions used in calculating the velocities are used. The three-wave and one-wave displacements are calculated as

$$ \begin{array}{lllll} u_{\mathrm{3wave}}(t) &= \Delta t \sum\limits_{t=0}^{t} \left( c_{0I} \left[ \varepsilon_{I}(t) - \varepsilon_{R}(t) \right] - c_{T} \varepsilon_{T}(t) \right)\\ u_{\mathrm{1wave}}(t) &= 2 c_{0I} \sum\limits_{t=0}^{t} \varepsilon_{R}(t) \end{array} $$
(10)

For the two-wave analysis in Fig. 2(d), the displacement values from the three-wave calculations are used.

By quickly visualizing the forces, displacements, and velocities, users can quickly determine the reliability of the test before attempting to generate stress–strain curves. Once a “good” force–displacement curve is generated, users can export the data into a second open source program that will visually calculate the stress–strain behavior.

Stress–Strain Graphical User Interface

A separate graphical user interface (GUI) was developed for calculating stress–strain behavior from the previous force–displacement GUI. Seen in Fig. 3, this GUI has one interactive plot (to calculate the modulus by bracketing the desired region) and two results plots (stress–strain and strain rate). After inputting the sampling rate, specimen geometry, and force–displacement files, the user will then specify whether the test was in compression or tension. For an easier display, the forces, displacements, stresses, and strain will always appear positive. However, this will be troublesome when calculating true stresses and strains. Therefore, users must specify the testing type to make sure the true stress/strain is calculated properly.

Fig. 3
figure 3

Matlab GUI for calculating the stress–strain from force–displacement data

The program gives the users the options of exporting stress–strain and strain rate data. If the test is compressive, then the values exported will be made negative. The stress–strain behavior can be exported as engineering, true, modulus-corrected engineering, or modulus-corrected true. The strain rate can be exported as a function of time or strain.

Summary

An open source Matlab GUI has been developed to analyze SHPB data. The program can export stress–strain curves given the initial voltages and other SHPB testing parameters. Users can visually interact with the data with the intent to efficiently process data. The software aims to enable experimentalist to visualize the most important aspects of a test in an integrated GUI.

The Matlab programs can be directly downloaded from the Matlab file exchange: http://www.mathworks.com/matlabcentral/fileexchange/50921-split-hopkinson-pressure-bar-graphical-analysis-tool.

Documentation along with a video tutorial can be found at Mississippi State University’s Integrated Computational Materials Engineering website: http://icme.hpc.msstate.edu/mediawiki/index.php/Code:_SHPB_Analysis. The executable is also housed at this site. The code was built and tested on Matlab 2014b.