Green's Function
The interactions among fault patches, asthenosphere elements as well as between fault and asthenosphere are computed via convolution of Green's Function. Currently supported Green's Function:
- 1D elastic line dislocation
- 2D elastic rectangular dislocation
- 2D elastic triangular dislocation
- 3D inelastic strain in Hex8 or Tet4 elements
Other types, such as 2D inelastic (plane stress or antiplane stress), polygon dislocation, are WIP (PR are welcome!).
All functions translated here are ensured to be type stable and have minimum allocation. Broadcasting isn't supported here (why?) so you can easily embed them into multiprocessors parallel computation, which is implemented here.
Also be aware of the coordinate system difference among all the Green's function provided here. Users are encouraged to view the original sources for further details. This package preserves the original coordinate systems as well as function arguments for all, whose outcomes are also tested against original ones.
Public Interface
Quaycle.compose_stress_greens_func — Methodcompose_stress_greens_func(ee::AbstractArray, ev::NTuple, ve::NTuple, vv::NTuple{N, <:Tuple},
ϵcomp::NTuple, σcomp::NTuple) where NConcatenate tuple of matrix or tuple of tuple of matrix which arrange them in a way to update traction/stress rate using only one BLAS call. It does nothing to the elastic Green's function and specifically used for the outputs from stress_greens_func and stress_greens_func.
Arguments
ee::AbstractArray: traction Green's function within the elastic faultev::NTuple: stress Green's function from elastic fault to inelastic asthenosphereve::NTuple: traction Green's function inelastic asthenosphere to elastic faultvv::NTuple: stress Green's function within inelastic asthenosphereϵcomp: strain component to be considered, must be a subset ofσcompσcomp: stress component to be considered
Quaycle.compose_stress_greens_func — Methodcompose_stress_greens_func(mf::OkadaMesh, me::SBarbotMeshEntity,
λ::T, μ::T, ft::PlaneFault, comp::NTuple{N, <:Symbol}) where {T, N}Shortcut function for computing all 4 Green's function for viscoelastic relaxation. Arguments stays the same as stress_greens_func.
Quaycle.stress_greens_func — Methodstress_greens_func(mf::AbstractMesh{2}, ma::SBarbotMeshEntity,
λ::T, μ::T, ft::FlatPlaneFault,
σcomp::NTuple{N, Symbol}; kwargs...) where {T<:Real, I<:Integer, N}Compute stress Green's function from fault mesh to asthenosphere mesh.
Arguments
mf::AbstractMesh{2}: mesh of faultma::SBarbotMeshEntity{3}: mesh of asthenosphereλ::T: Lamé's first parameterμ::T: shear modulusft::FlatPlaneFault: fault type, eitherDIPPING()orSTRIKING()σcomp::NTuple{N, Symbol}: stress components to consider
KWARGS Arguments
The same as previously mentioned:
nrept::Integerbuffer_ratio::Real
Output
The output is a tuple of length(σcomp) matrix, each corresponds $σ_{ij}$ in the same order as given by σcomp.
Quaycle.stress_greens_func — Methodstress_greens_func(mesh::LineOkadaMesh, λ::T, μ::T, ft::FlatPlaneFault; kwargs...) where TCompute traction Green function in 1-D elastic fault in LineOkadaMesh.
Arguments
mesh::LineOkadaMesh: the line mesh coupled withdc3dλ::T: Lamé's first parameterμ::T: shear modulusft::FlatPlaneFault: fault type, eitherDIPPING()orSTRIKING()
KWARGS Arguments
ax_ratio::Real: ratio of along-strike to along-downdip, default is12.5
Quaycle.stress_greens_func — Methodstress_greens_func(mesh::RectOkadaMesh, λ::T, μ::T, ft::FlatPlaneFault;
fourier_domain=true, kwargs...) where TCompute traction Green's function in 2-D elastic fault in RectOkadaMesh. Translational symmetry is considered.
Arguments
mesh::RectOkadaMesh: the rectangular mesh coupled withdc3dλ::T: Lamé's first parameterμ::T: shear modulusft::FlatPlaneFault: fault type, eitherDIPPING()orSTRIKING()
KWARGS Arguments
fourier_domain::Bool: whether or not transform the tensor to fourier domainnrept::Integer: number of periodic summation is performedbuffer_ratio::Real: ratio of length of buffer zone (along-strike) to that of fault (along-strike) It is recommended to set at least1for strike-slip fault for mimicing zero-dislocation at ridge on both sides.
Quaycle.stress_greens_func — Methodstress_greens_func(mesh::TDTri3MeshEntity, λ::T, μ::T, ft::FlatPlaneFault; kwargs...) where TCompute traction Green's function in 2-D elastic fault in TDTri3MeshEntity.
Arguments
mesh::TDTri3MeshEntity: the triangular mesh coupled withtd_stress_hsλ::T: Lamé's first parameterμ::T: shear modulusft::FlatPlaneFault: fault type, eitherDIPPING()orSTRIKING()
KWARGS Arguments
nrept::Integer: number of periodic summation is performedbuffer_ratio::Real: ratio of length of buffer zone (along-strike) to that of fault (along-strike). Notice the direction of strike is the average value ofmesh.ssand the length is the strike projected maximum horizontal expansion.
Quaycle.stress_greens_func — Methodstress_greens_func(ma::SBarbotMeshEntity{3}, λ::T, μ::T,
ϵcomp::NTuple{N1, Symbol}, σcomp::NTuple{N2, Symbol}; kwargs...) where {T, N1, N2}Compute stress Green's function within SBarbotTet4MeshEntity or SBarbotHex8MeshEntity
Arguments
ma::SBarbotMeshEntity{3}: asthenosphere meshλ::T: Lamé's first parameterμ::T: shear modulusϵcomp: the strain ϵcomponent(s) to be consideredσcomp::NTuple{N, Symbol}: stress components to consider
Output
A tuple of $n$ tuple of matrix, each tuple represents interaction from one strain component, w.r.t. ϵcomp to the stress ϵcomponents, whose order is $σ_{ij}$ whose order is the same as σcomp, each of which is a matrix.
Quaycle.stress_greens_func — Methodstress_greens_func(ma::SBarbotMeshEntity{3}, mf::AbstractMesh{2}, λ::T, μ::T, ft::PlaneFault,
ϵcomp::NTuple{N, Symbol}; kwargs...) where {T, N}Compute traction Green's function from SBarbotTet4MeshEntity or SBarbotHex8MeshEntity to RectOkadaMesh
Arguments
ma::SBarbotMeshEntity{3}: asthenosphere meshmf::AbstractMesh{2}: fault meshλ::T: Lamé's first parameterμ::T: shear modulusft::FlatPlaneFault: fault type, eitherDIPPING()orSTRIKING()ϵcomp: the strain ϵcomponent(s) to be considered
Output
A tuple of $n$ matrix, each represents interaction from one strain to the traction on fault.
Quaycle.dc3d — Methoddc3d(x::T, y::T, z::T, α::T, dep::T, dip::T,
al::Union{A, SubArray}, aw::Union{A, SubArray}, disl::A
) where {T <: Number, A <: AbstractVecOrMat{T}}Calculate displacements and gradient of displacements due to a rectangular dislocation in an elastic isotropic halfspace.
Please see dc3d for details. Also this fault coordinate system is widely used in this package.
Arguments
x,y,z: observational position, where $z ≤ 0$α: elastic constantdep: depth of fault origindip: dip angle in degreeal: a vector of 2 numbers, indicating along strike (x-axis) spanningaw: a vector of 2 numbers, indicating along downdip (y-z plane) spanningdisl: a vector of 3 numbers, indicating dislocation in along-strike, along-downdip and tensile respectively.
Output
A vector of 12 numbers, each is $u_{x}$, $u_{y}$, $u_{z}$, $u_{x,x}$, $u_{y,x}$, $u_{z,x}$, $u_{x,y}$, $u_{y,y}$, $u_{z,y}$, $u_{x,z}$ $u_{y,z}$, $u_{z,z}$.
Quaycle.sbarbot_disp_hex8 — Methodsbarbot_disp_hex8(
x1::R, x2::R, x3::R, q1::R, q2::R, q3::R,
L::R, T::R, W::R, theta::R,
epsv11p::R, epsv12p::R, epsv13p::R, epsv22p::R, epsv23p::R, epsv33p::R,
G::R, nu::R,
) where RCompute displacement arisen from inelastic strain in Hex8 elements. Please see original version for complete details, especially the coordinate system used here.
Arguments
x1,x2,x3: observational position, where $x_{3} ≥ 0$q1,q2,q3: Hex8 element position, where $q_{3} ≥ 0$L,T,W: Hex8 element length, thickness and widththeta: strike angleepsv**: strain components, each is $ϵ_{11}$, $ϵ_{12}$, $ϵ_{13}$, $ϵ_{22}$, $ϵ_{23}$, $ϵ_{33}$G: shear modulusnu: poisson ratio
Output
A vector of 3 numbers, each represents $u_{1}$, $u_{2}$, $u_{3}$
Notice
- Inplace version:
sbarbot_disp_hex8!(u, args...)where u is a vector of 3 numbers.
Quaycle.sbarbot_stress_hex8 — Methodsbarbot_stress_hex8(
x1::R, x2::R, x3::R, q1::R, q2::R, q3::R,
L::R, T::R, W::R, theta::R,
epsv11p::R, epsv12p::R, epsv13p::R, epsv22p::R, epsv23p::R, epsv33p::R,
G::R, nu::R,
) where RCompute stress arisen from inelastic strain in Hex8 elements. Please see original version for complete details, especially the coordinate system used here.
Arguments
The same as sbarbot_disp_hex8
Output
A vector of 6 numbers, each represents $σ_{11}$, $σ_{12}$, $σ_{13}$, $σ_{22}$, $σ_{23}$, $σ_{33}$
Notice
- Inplace version:
sbarbot_stress_hex8!(u, args...)where u is a vector of 6 numbers.
Quaycle.sbarbot_disp_tet4 — Methodsbarbot_disp_tet4(quadrature::Q,
x1::R, x2::R, x3::R, A::U, B::U, C::U, D::U,
e11::R, e12::R, e13::R, e22::R, e23::R, e33::R, nu::R
) where {R, U, Q}Compute displacement arisen from inelastic strain in Tet4 elements. Please see original version for complete details, especially the coordinate system used here.
Arguments
quadrature: quadrature rule for integration, see FastGaussQuadrature.jlx1,x2,x3: observational position, where $x_{3} ≥ 0$A,B,C,D: a list of 3 numbers for each, each of which represents coordinates of the vertex. All depth coordinates must be greater or equal to 0 (no checking is performed here)e**: strain components, each is $ϵ_{11}$, $ϵ_{12}$, $ϵ_{13}$, $ϵ_{22}$, $ϵ_{23}$, $ϵ_{33}$nu: poisson ratio
Output
A vector of 3 numbers, each represents $u_{1}$, $u_{2}$, $u_{3}$
Notice
- Inplace version:
sbarbot_disp_tet4!(u, args...)where u is a vector of 3 numbers.
Quaycle.sbarbot_stress_tet4 — Methodsbarbot_stress_tet4(quadrature::Q,
x1::R, x2::R, x3::R, A::U, B::U, C::U, D::U,
e11::R, e12::R, e13::R, e22::R, e23::R, e33::R, G::R, nu::R
) where {R, U, Q}Compute stress arisen from inelastic strain in Tet4 elements. Please see original version for complete details, especially the coordinate system used here.
Arguments
quadrature: quadrature rule for integration, see FastGaussQuadrature.jlx1,x2,x3: observational positionA,B,C,D: a list of 3 numbers for each, each of which represents coordinates of the vertexe**: strain components, each is $ϵ_{11}$, $ϵ_{12}$, $ϵ_{13}$, $ϵ_{22}$, $ϵ_{23}$, $ϵ_{33}$G: shear modulusnu: poisson ratio
Output
A vector of 6 numbers, each represents $σ_{11}$, $σ_{12}$, $σ_{13}$, $σ_{22}$, $σ_{23}$, $σ_{33}$
Notice
- Inplace version:
sbarbot_stress_tet4!(u, args...)where u is a vector of 6 numbers.
Quaycle.td_disp_fs — Methodtd_disp_fs(X::T, Y::T, Z::T, P1::V, P2::V, P3::V, Ss::T, Ds::T, Ts::T, nu::T) where {T, V}Compute displacement risen from triangular dislocation in elastic fullspace. Please see original version (in supporting information) for details, especially the coordinate system used here.
Arguments
The same as td_disp_hs
Quaycle.td_disp_hs — Methodtd_disp_hs(X::T, Y::T, Z::T, P1::V, P2::V, P3::V, Ss::T, Ds::T, Ts::T, nu::T) where {T, V}Compute displacement risen from triangular dislocation in elastic halfspace. Please see original version (in supporting information) for details, especially the coordinate system used here.
Arguments
X,Y,Z: observational coordinatesP1,P2,P3: three triangular vertices coordinates respectivelySs,Ds,Ts: triangular dislocation vector, Strike-slip, Dip-slip, Tensile-slip respectivelynu: poisson ratio
Output
By order: $u_x$, $u_y$, $u_z$
Quaycle.td_stress_fs — Methodtd_stress_fs(X::T, Y::T, Z::T, P1::V, P2::V, P3::V, Ss::T, Ds::T, Ts::T, λ::T, μ::T) where {T, V}Compute stress risen from triangular dislocation in elastic fullspace. Please see original version (in supporting information) for details, especially the coordinate system used here.
Arguments
The same as td_stress_hs
Quaycle.td_stress_hs — Methodtd_stress_hs(X::T, Y::T, Z::T, P1::V, P2::V, P3::V, Ss::T, Ds::T, Ts::T, λ::T, μ::T) where {T, V}Compute stress risen from triangular dislocation in elastic halfspace. Please see original version (in supporting information) for details, especially the coordinate system used here.
Arguments
X,Y,Z: observational coordinatesP1,P2,P3: three triangular vertices coordinates respectivelySs,Ds,Ts: triangular dislocation vector, Strike-slip, Dip-slip, Tensile-slip respectivelyλ: Lamé's first parameterμ: shear modulus
Output
By order: $σ_{xx}$, $σ_{yy}$, $σ_{zz}$, $σ_{xy}$, $σ_{xz}$, $σ_{yz}$. Please be aware of its different order, where principle components come first, against sbarbot_stress_hex8 and sbarbot_stress_tet4 aside from coordinate system difference.
References
Okada, Y. (1992). Internal deformation due to shear and tensile faults in a half-space. Bulletin of the Seismological Society of America, 82(2), 1018–1040.
Pan, E., Yuan, J. H., Chen, W. Q., & Griffith, W. A. (2014). Elastic Deformation due to Polygonal Dislocations in a Transversely Isotropic Half‐SpaceElastic Deformation due to Polygonal Dislocations in a Transversely Isotropic Half‐Space. Bulletin of the Seismological Society of America, 104(6), 2698–2716. https://doi.org/10.1785/0120140161
Nikkhoo, M., & Walter, T. R. (2015). Triangular dislocation: an analytical, artefact-free solution. Geophysical Journal International, 201(2), 1119–1141. https://doi.org/10.1093/gji/ggv035
Barbot, S., Moore, J. D. P., & Lambert, V. (2017). Displacement and Stress Associated with Distributed Anelastic Deformation in a Half‐Space. Bulletin of the Seismological Society of America, 107(2), 821–855. https://doi.org/10.1785/0120160237
Barbot, S. (2018). Deformation of a Half‐Space from Anelastic Strain Confined in a Tetrahedral Volume. Bulletin of the Seismological Society of America, 108(5A), 2687–2712. https://doi.org/10.1785/0120180058