11# Fabric intensities and plots -------------------------------------------------
22
3- # ' Orientation tensor fabric intensity and shape
3+ # ' Fabric Intensity and Shape of Orientation Tensor
44# '
55# ' Fabric intensity and shape parameters of the orientation tensor based on Vollmer (1990)
66# '
@@ -66,7 +66,7 @@ vollmer <- function(x) {
6666 c(P = P , G = G , R = R , B = B , C = C , I = I , D = D , U = U )
6767}
6868
69- # ' Fabric plot of Vollmer (1990)
69+ # ' Fabric Plot of Vollmer (1990)
7070# '
7171# ' Creates a fabric plot using the eigenvalue method
7272# '
@@ -219,7 +219,7 @@ vollmer_plot.list <- function(x, labels = NULL, add = FALSE, ngrid = c(5, 5, 5),
219219}
220220
221221
222- # ' Fabric plot of Woodcock (1977)
222+ # ' Fabric Plot of Woodcock (1977)
223223# '
224224# ' Creates a fabric plot using the eigenvalue method
225225# '
@@ -294,23 +294,48 @@ woodcock_plot <- function(x, labels = NULL, add = FALSE, max = 7, main = "Woodco
294294 invisible (x_eigen )
295295}
296296
297- # ' Fabric plot of Hsu (1965)
297+ # ' Fabric Plot of Hsu (1965)
298298# '
299- # ' 3D strain diagram using the Hsu (1965) method to display the natural
300- # ' octahedral strain (Nádai, 1950) and Lode's parameter (Lode, 1926).
299+ # ' 3D strain diagram using the Hsu (1965) method to display the amount of the natural
300+ # ' octahedral strain, \eqn{\bar{\epsilon}_s} (Nádai, 1950) and Lode's parameter
301+ # ' for the symmetry of strain \eqn{\nu} (Lode, 1926).
301302# '
302- # ' @param x accepts the following objects: a two-column matrix where first column is the ratio of maximum strain and
303- # ' intermediate strain (X/Y) and second column is the the ratio of intermediate strain and minimum strain (Y/Z);
304- # ' objects of class `"Vec3"`, `"Line"`, `"Ray"`, or `"Plane"`; or `"ortensor"` objects.
303+ # ' @param x accepts the following objects: a two-column matrix where first
304+ # ' column is the ratio of maximum strain and
305+ # ' intermediate strain (X/Y) and second column is the the ratio of intermediate
306+ # ' strain and minimum strain (Y/Z);
307+ # ' objects of class `"Vec3"`, `"Line"`, `"Ray"`, `"Plane"`, `"ortensor"` and `"ellipsoid"` objects.
308+ # ' Tensor objects can also be lists of such objects (`"ortensor"` and `"ellipsoid"`).
305309# ' @inheritParams Rphi_plot
306310# ' @param labels character. text labels
307311# ' @param add logical. Should data be plotted to an existing plot?
308312# ' @param ... plotting arguments passed to [graphics::points()]
309313# ' @param es.max maximum strain for scaling.
310314# '
311- # ' @returns plot and when stored as object, a list containing the Lode parameter `lode` and the natural octahedral strain `es`.
315+ # ' @returns a list containing the Lode parameter `lode` and the natural octahedral strain `es`.
312316# ' @family fabric-plot
313317# ' @seealso [lode()] for Lode parameter, and [nadai] for natural octahedral strain.
318+ # ' [ellipsoid()] class, [ortensor()] class
319+ # '
320+ # ' @details
321+ # ' The **amount of strain** related to the natural octahedral unit shear \eqn{\bar{\gamma}_o}
322+ # ' is (Nádai, 1963, p.73):
323+ # ' \deqn{\bar{\epsilon}_s = \frac{\sqrt{3}}{2} \bar{\gamma}_o}
324+ # ' where \eqn{\bar{\gamma}_o} is defined as
325+ # ' \deqn{\bar{\gamma}_o = \frac{2}{3} \sqrt{(\bar{\epsilon}_1 - \bar{\epsilon}_2)^2 + (\bar{\epsilon}_2 - \bar{\epsilon}_3)^2 + (\bar{\epsilon}_3 - \bar{\epsilon}_1)^2}}
326+ # ' and \eqn{\bar{\epsilon}} is the natural strain (\eqn{\bar{\epsilon} = \log{1+\epsilon}})
327+ # ' and \eqn{\epsilon} is the conventional strain given by \eqn{\epsilon = \frac{l-l_0}{l_0}}
328+ # ' where \eqn{l} and \eqn{l_0} is the length after and before the strain, respectively (Nádai, 1959, p.70).
329+ # ' The amount of strain \eqn{\bar{\epsilon}_s} is directly proportional to the
330+ # ' amount of mechanical work applied in the coaxial component of strain.
331+ # '
332+ # ' The **symmetry of strain** is defined by Lode’s (1926, p.932) ratio (\eqn{\nu}):
333+ # ' \deqn{\nu = \frac{2 \bar{\epsilon}_2 - \bar{\epsilon}_1 - \bar{\epsilon}_3}{\bar{\epsilon}_1 - \bar{\epsilon}_3}}
334+ # ' The values range between -1 and +1, where -1 gives constriction, 0 gives
335+ # ' plane strain, and +1 gives flattening.
336+ # '
337+ # ' @note Hossack (1968) was the first one to use this graphical representation
338+ # ' of 3D strain and called the plot "Strain plane plot"
314339# '
315340# ' @name hsu_plot
316341# '
@@ -328,10 +353,12 @@ woodcock_plot <- function(x, labels = NULL, add = FALSE, max = 7, main = "Woodco
328353# ' (Southern Norway). Tectonophysics, 5(4), 315–339. \doi{10.1016/0040-1951(68)90035-8}
329354# '
330355# ' @examples
356+ # ' # default
331357# ' R_XY <- holst[, "R_XY"]
332358# ' R_YZ <- holst[, "R_YZ"]
333359# ' hsu_plot(cbind(R_XY, R_YZ), col = "#B63679", pch = 16, type = "b")
334360# '
361+ # ' # orientation data
335362# ' set.seed(20250411)
336363# ' mu <- Line(120, 50)
337364# ' x <- rvmf(100, mu = mu, k = 1)
@@ -340,6 +367,12 @@ woodcock_plot <- function(x, labels = NULL, add = FALSE, max = 7, main = "Woodco
340367# ' set.seed(20250411)
341368# ' y <- rvmf(100, mu = mu, k = 20)
342369# ' hsu_plot(ortensor(y), labels = "y", col = "red", add = TRUE)
370+ # '
371+ # ' # ellipsoid objects
372+ # ' hossack_ell <- lapply(seq.int(nrow(hossack1968)), function(i) {
373+ # ' ellipsoid_from_stretch(hossack1968[i, 3], hossack1968[i, 2], hossack1968[i, 1])
374+ # ' })
375+ # ' hsu_plot(hossack_ell, col = "#B63679", pch = 16)
343376NULL
344377
345378# ' @rdname hsu_plot
@@ -532,16 +565,31 @@ hsu_plot.list <- function(x, labels = NULL, add = FALSE, es.max = 3, main = "Hsu
532565}
533566
534567
535- # ' Flinn diagram
568+ # ' Flinn Diagram
569+ # '
570+ # ' Plots the strain ratios X/Y against Y/Z and shows the strain intensity and
571+ # ' the strain symmetry after Flinn (1965)
536572# '
537573# ' @inheritParams hsu_plot
538574# ' @param R.max numeric. Maximum aspect ratio for scaling.
539575# ' @param log logical. Whether the axes should be in logarithmic scale.
540576# '
541- # ' @returns plot and when stored as an object, the multiplication factors for X, Y and Z.
577+ # ' @returns list. Relative magnitudes of X, Y and Z (Z=1) .
542578# '
543579# ' @family fabric-plot
544580# ' @name flinn_plot
581+ # ' @seealso [ellipsoid()] class, [ortensor()] class, [flinn()] for Flinn's
582+ # ' strain parameters.
583+ # '
584+ # ' @details **Strain symmetry** (Flinn 1965):
585+ # ' \deqn{k = \frac{s_1/s_2 - 1}{s_2/s_3 - 1}}
586+ # ' where \eqn{s_1 \geq s_2 \geq s_3} the semi-axis lengths of the ellipsoid.
587+ # ' The value ranges from 0 to \eqn{\infty}, and is 0 for oblate ellipsoids
588+ # ' (flattening), 1 for plane strain and \eqn{\infty} for prolate ellipsoids (constriction).
589+ # '
590+ # ' and **strain intensity** (Flinn 1965):
591+ # ' \deqn{d = \sqrt{(s_1/s_2 - 1)^2 + (s_2/s_3 - 1)^2}}
592+ # '
545593# '
546594# ' @references Flinn, D. (1965). On the Symmetry Principle and the Deformation
547595# ' Ellipsoid. Geological Magazine, 102(1), 36–45. \doi{10.1017/S0016756800053851}
@@ -553,6 +601,12 @@ hsu_plot.list <- function(x, labels = NULL, add = FALSE, es.max = 3, main = "Hsu
553601# ' flinn_plot(cbind(R_XY, R_YZ), log = FALSE, col = "#B63679", pch = 16)
554602# ' flinn_plot(cbind(R_XY, R_YZ), log = TRUE, col = "#B63679", pch = 16, type = "b")
555603# '
604+ # ' # ellipsoid objects
605+ # ' hossack_ell <- lapply(seq.int(nrow(hossack1968)), function(i) {
606+ # ' ellipsoid_from_stretch(hossack1968[i, 3], hossack1968[i, 2], hossack1968[i, 1])
607+ # ' })
608+ # ' flinn_plot(hossack_ell, col = "#B63679", pch = 16, log = TRUE)
609+ # '
556610# ' set.seed(20250411)
557611# ' mu <- Line(120, 50)
558612# ' x <- rvmf(100, mu = mu, k = 1)
@@ -669,3 +723,16 @@ flinn_plot.ellipsoid <- function(x, ...) {
669723flinn_plot.spherical <- function (x , ... ) {
670724 flinn_plot.ortensor(ortensor(x ), ... )
671725}
726+
727+ # ' @rdname flinn_plot
728+ # ' @export
729+ flinn_plot.list <- function (x , ... ) {
730+ a <- lapply(x , principal_stretch ) | >
731+ sapply(sort , decreasing = TRUE ) | >
732+ t()
733+
734+ R_xy <- a [, 1 ] / a [, 2 ]
735+ R_yz <- a [, 2 ] / a [, 3 ]
736+
737+ flinn_plot.default(cbind(R_xy , R_yz ), ... )
738+ }
0 commit comments