View source: R/foam_mechanical_analysis.R
foam_mechanical_analysis | R Documentation |
Analysis of foam compression curves. This function assumes a classical foam compression behaviour, with a steeper elastic, a flatter plateau and then again a steep densification region in stress-strain (or equivalently, force-distance) diagrams (Gibson&Ashby, 1997). This function separates the prototypical foam compression curve into different zones by indicating the transition points: [free zone (no contact between chuck and foam)] - touchpoint - elastic compression region - transition to plateau - plateau region - transition to densification- densification. Localization and mechanical properties are analyzed at the points from touchpoint to the transition to densification.
foam_mechanical_analysis(theData,start_height,approximate_gel_touch_point=NULL,landmarks=NULL,gel_thickness=NULL,stress_column="pressure",stress_slope_column="pressureSlope", do_plot = FALSE)
theData |
Force-Distance data, typically from a "down"-"up" cycle of the chuck; the data needs to be smooth and contain already at the very least the columns |
start_height |
The texture Analyzer typically starts a file by |
approximate_gel_touch_point |
Initial guess for the gel touch point (will be refined by a call to find_landmarks_gel_compression) |
landmarks |
Possibility to manually provide landmarks. Typically, there is no need to provide this as the function uses find_landmarks_gel_compression internally. If provided, numeric vector with elements named "touch_point", "elastic_limit", "densification_limit". If an incomplete set of named elements is given, the function will try to find the missing values via find_landmarks_gel_compression |
gel_thickness |
Possibility to manually provide gel thicknessm in the same units as is the "Distance" column in |
stress_column |
Name of the column in |
stress_slope_column |
Name of the column in |
do_plot |
If |
The algorithm sequentially evaluates the positions of the analysis points (touchpoint, mid elastic, transition to plateau, plateau, transition to densification), and also evaluates the different geometric and mechanical measures at these points. First, the function needs the landmarks available either manually or more typically through find_landmarks_gel_compression, called internally if the landmarks
argument is not provided.
Within the elastic region delimited by the landmarks, the algorithm then looks for a local maximum of the slope (in the column designated by the argument stress_slope_column
in theData
. For this it is important that the curve is appropriately smoothened beforehand, in general by using smooth_texture_analyzer_data before using this function. Appropriately means here that noise should be removed so that the slope appears smooth, but the smoothing should still conserve the overall features of the curve and namely the existence of a local maximum in the elastic compression region.
The touchpoint is then sought using the data from the elastic midpoint. For this, the algorithm considers the tangent at the elastic midpoint in the Force vs. Distance diagram, and looks for its intersection with x-axis. This defines the touchpoint where the chuck is assumed to substantially enter into interaction with the gel.
On the other side of the midpoint of the elastic region defined by the local maximum slope, the algorithm then looks for a minimum slope at higher compression. For this it is again important to have the curve appropriately smoothened, otherwise the minimum will be defined by noise rather than the global shape of the curve. The plateau is a feature of foams with sufficiently high pore fraction, it may not exist in all experimental configurations. If no local minimum is found, the plateau midpoint is set identical to the elastic compression midpoint, and plateau_detected=FALSE
will be returned for the corresponding direction ("down" or "up", see value section). In this case, the analysis is not appropriate and the caution should be applied in the interpretation of the values.
The transition point between elastic compression and elastic compression region and the plateau region is then sought as the intersection between the tangent at the plateau midpoint and the tangent at the elastic midpoint, in the Force vs. Distance diagram. The transition point is noted "transition_E_P" for transition from elastic to plateau.
Finally, the function determines the transition point from plateau to densification ("transition_P_D"). For this, it first determines the slope at the transition point from elastic compression to plateau, and then looks for the first point beyond the plateau midpoint where this slope is again exceeded. This first point is the transition point from plateau to densification.
The above algorithm is carried out on both the descending "down" part of the compression cycle and the ascending ("up") part of the compression cycle. Usually, the positions and values for the individual points differ slightly. For the determination of the gel height, the average of the touchpoint Distance is evaluated. This is then substracted from the starting height, which needs to be supplied (start_height
).
With the positions of the different points known, stress, strain, and Young moduli are then evaluated for the points for both the "down" and "up" part of the compression cycle and tabulated as described in the value section.
A list with different geometric and mechanical measures:
Position of the analyzed points. The starting point of the compression is 0. This is a matrix with 2 rows (for the "down" and "up" part of the compression cycle"), and 5 columns. There is a column for each characteristic point of the curve: "touchpoint" for the point where the chuck touches the gel; "elastic" for the midpoint of the elastic compression part; "transition_E_P" for the transition point between elastic compression and plateau; "plateau" for the plateau midpoint; "transition_P_D" transition point from the plateau to densification.
Relative compression. This is distance relative to the touchpoint, divided by gel height. This variable has the same structure as the Distance element described above.
Relative compression. This is distance relative to the touchpoint, divided by gel height. This variable has the same structure as the Distance element described above.
Mechanical stress (force per area) at the different points. Again same matrix layout.
Local Young moduli. The local Young moduli are the local slopes (derivative) in strain-stress diagrams. Same structure. The Young modulus on the elastic segment ("elastic") in the compression direction ("down" if using compression and relaxation) can be used to define the Young modulus as it corresponds to the zone of linear elasticity (Gibson&Ashby 1997).
Young moduli as measured from the touchpoint.The slope is taken from the straight line connecting the touchpoint to the desired second point on the curve in the strain-stress diagram. Same matrix structure as the variables before.
Whether or not the was a plateau detected. A plateau is detected if the smoothened slope has a minimum beyond the elastic compression, otherwise no plateau is detected. Logical vector of two elements, for the down and up part of the compression cycle.
In terms of strain, the width of the plateau. Numerical vector of two values, for the up and down part of the compression cycle.
Height of the gel. Single numerical value, in mm
Thomas Braschler
Gibson, L. J. & Ashby, M. F. Cellular Solids: Structure and properties. (Cambridge University Press, 1997).
find_landmarks_gel_compression, used internally
data(sampleGelSmooth) results=foam_mechanical_analysis( sampleGelSmooth,start_height=start_height_mm,approximate_gel_touch_point=0.15) results Distance = results[["Distance"]] stress = results[["stress"]] plot(pressure ~ Distance, sampleGelSmooth,type="l",xlab="Distance [mm]", ylab="Stress [Pa]",ylim=c(0,2500)) lines(Distance["down",],stress["down",],type="p",col="red") lines(Distance["up",],stress["up",],type="p",col="green") text(x=Distance["up","touchpoint"]+0.22,y=stress["up","touchpoint"],labels="Touchpoint") text(x=Distance["up","elastic"]+0.3,y=stress["up","elastic"],labels="Linear elasticity") text(x=Distance["up","transition_E_P"]+0.2,y=stress["up","transition_E_P"]-30,labels="Transition") text(x=Distance["up","plateau"]+0.2,y=stress["up","plateau"]-30,labels="Plateau") text(x=Distance["up","transition_P_D"]+0.45,y=stress["up","transition_P_D"]-30,labels="Transition to densification") legend("topleft",pch=c(1,1),col=c("red","green"),legend=c("Compression","Relaxation"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.