Source code for anisotropy.effective_modelling.hudson

# -*- coding: utf-8 -*-
"""
Modelling the effective elastic properties of a material consisting of an
isotropic host matrix with unidirectionally aligned cracks.

For more information, please read:

    Hudson, J.A., 1980, September. Overall properties of a cracked solid. In
    Mathematical Proceedings of the Cambridge Philosophical Society (Vol. 88,
    No. 2, pp. 371-384). Cambridge University Press.

    Hudson, J.A., 1981. Wave speeds and attenuation of elastic waves in material
    containing cracks. Geophysical Journal International, 64(1), pp.133-150.

    Hudson, J.A., 1986. A higher order approximation to the wave propagation
    constants for a cracked solid. Geophysical Journal International, 87(1),
    pp.265-274.

If you use this code, please cite these articles.

:copyright:
    2021--2022, AnisotroPy developers.
:license:
    GNU General Public License, Version 3
    (https://www.gnu.org/licenses/gpl-3.0.html)

"""

import numpy as np

from anisotropy.materials import Material


[docs]def model(matrix, inclusions, aspect_ratio, crack_density): """ Calculate the effective elastic properties of a material comprised of an isotropic matrix hosting penny-shaped cracks (ellipsoidal inclusions) that may contain a different isotropic material. The effective anisotropy is controlled by the crack density and the aspect ratio of the inclusions. The theory is valid when the crack density (= Na^2 / nu) << 1, where N is the number of cracks of radius a in a volume nu. The expressions used describe a system that is transversely isotropic about x1, as written in Crampin (1984). The original expressions in Hudson (1982) correspond to a system that is transversely isotropic about x3. They give the most general expressions, but can be tuned to model various different crack types: Dry cracks: Set vpi, vsi, and rhoi to 0. Water-filled: Set vsi to 0 and vpi*rhoi = 2.25x10E9 Parameters ---------- matrix : `anisotropy.Material` object An isotropic material that forms the host matrix for the inclusions, whose elastic properties are fully described by its stiffness tensor and density. inclusions : `anisotropy.Material` object An isotropic material that occupies the inclusions, whose elastic properties are fully described by its stiffness tensor and density. aspect_ratio : float Aspect ratio of inclusions. crack_density : float Volumetric fraction of the inclusions within the composite material. Returns ------- effective_material : `anisotropy.Material` object The composite material with effective elastic properties. """ if crack_density > 0.1: print(("The expressions in Hudson (1982) are only valid for epsilon" " << 0.1. Continuing anyway...")) la, mu = matrix.lame_coefficients _, mui = inclusions.lame_coefficients inclusions_K = inclusions.bulk_modulus # Calculate theta = la + 2*mu, as per Backus (1962) th = la + 2*mu K = ((inclusions_K + 4*mui/3)/(np.pi*aspect_ratio*mu)) * th/(la + mu) M = ((4*mui)/(np.pi*aspect_ratio*mu)) * th/(3*la + 4*mu) U1 = (4/3)*(th/(la + mu)) / (1 + K) U3 = (16/3)*(th/(3*la + 4*mu)) / (1 + M) # Calculate the first-order correction from Hudson (1981) C1 = np.array( [[U1*th**2, la*th*U1, la*th*U1, 0, 0, 0], [la*th*U1, U1*la**2, U1*la**2, 0, 0, 0], [la*th*U1, U1*la**2, U1*la**2, 0, 0, 0], [ 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, U3*mu**2, 0], [ 0, 0, 0, 0, 0, U3*mu**2]]) C1 *= (-crack_density/mu) # Calculate the second-order correction from Hudson (1982) q = 15*(la/mu)**2 + 28*(la/mu) + 28 X = 2*mu*(3*la + 8*mu)/th C2 = np.array( [[th*q*U1**2, la*q*U1**2, la*q*U1**2, 0, 0, 0], [la*q*U1**2, q*(la*U1)**2/th, q*(la*U1)**2/th, 0, 0, 0], [la*q*U1**2, q*(la*U1)**2/th, q*(la*U1)**2/th, 0, 0, 0], [ 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, X*U3**2, 0], [ 0, 0, 0, 0, 0, X*U3**2]]) C2 *= (crack_density**2/15) rho_bulk = (1 - crack_density)*matrix.rho + crack_density*inclusions.rho C = (matrix.C + C1 + C2) return Material(C, rho_bulk)