Source code for rockphypy.utils

#!/usr/bin/env python
# -*-coding:utf-8 -*-

# moduli transfor and velocity calculation

import numpy as np

[docs]class utils: """ Basic calculations for velocities, moduli and stiffness matrix. """
[docs] @staticmethod def V(K, G, rho): """Compute velocity given density and elastic moduli. Parameters ---------- K : float or array (GPa): bulk modulus G : float or array (GPa): shear moulus rho : float or array (g/m3): density of the frame Returns ------- float or array Vp, Vs (m/s): velocity """ Vp = np.sqrt((K+4./3*G)/rho)*1e3 Vs = np.sqrt(G/rho)*1e3 return Vp, Vs
[docs] @staticmethod def poi(K, G): """Compute poisson's ratio from K an G Parameters ---------- K : float or array (GPa): bulk modulus G : float or array (GPa): shear moulus Returns ------- float or array Poisson's ratio """ nu=(3*K-2*G)/(6*K+2*G) return nu
[docs] @staticmethod def lame(K, G): """Compute lame constant lamdba from K an G Parameters ---------- K : float or array (GPa): bulk modulus G : float or array (GPa): shear moulus Returns ------- float or array Poisson's ratio """ lamda= K-2*G/3 return lamda
[docs] @staticmethod def M_from_V(den, vp,vs): """_summary_ Parameters ---------- den : float or array (g/cm3): bulk density vp : float or array (m/s): p wave velocity vs : float or array (m/s): s wave velocity Returns ------- float or array K, G (GPa):bulk and shear moduli """ """Compute K and G from velocities and density Args: den (g/cm3): bulk density vp (m/s): p wave velocity vs (m/s): s wave velocity Returns: K, G (GPa):bulk and shear moduli Written by Jiaxin Yu (July 2021) """ K=den*1000*(vp**2-4*vs**2/3) G=den*1000*vs**2 K=K/10**9 G=G/10**9 return K, G
[docs] @staticmethod def write_HTI_matrix(C11,C33,C13,C44,C55): """formulate HTI stiffness matrix Parameters ---------- C11 : float (GPa): stiffness C33 : float (GPa): stiffness C13 : float (GPa): stiffness C44 : float (GPa): stiffness C55 : float (GPa): stiffness Returns ------- 2d array C: 6x6 stiffness matrix """ C23= C33-2*C44 C=np.array([[C11,C13,C13,0,0,0], [C13,C33,C23,0,0,0], [C13,C23,C33,0,0,0], [0,0,0,C44,0,0], [0,0,0,0,C55,0], [0,0,0,0,0,C55]]) return C
[docs] @staticmethod def write_VTI_compliance(S11,S12,S13,S33,S44): """formulate VTI compliance matrix Parameters ---------- S11 : float (GPa): stiffness S12 : float (GPa): stiffness S13 : float (GPa): stiffness S33 : float (GPa): stiffness S44 : float (GPa): stiffness Returns ------- 2d array S: 6x6 compliance matrix """ S66=2*(S11-S12) # attention, this is different from Stiffness matrix S=np.array([[S11,S12,S13,0,0,0], [S12,S11,S13,0,0,0], [S13,S13,S33,0,0,0], [0,0,0,S44,0,0], [0,0,0,0,S44,0], [0,0,0,0,0,S66]]) return S
[docs] @staticmethod def write_VTI_matrix(C11,C33,C13,C44,C66): """formulate VTI stiffness matrix Parameters ---------- C11 : float (GPa): stiffness C33 : float (GPa): stiffness C13 : float (GPa): stiffness C44 : float (GPa): stiffness C66 : float (GPa): stiffness Returns ------- 2d array C: 6x6 stiffness matrix """ C12= C11-2*C66 C=np.array([[C11,C12,C13,0,0,0], [C12,C11,C13,0,0,0], [C13,C13,C33,0,0,0], [0,0,0,C44,0,0], [0,0,0,0,C44,0], [0,0,0,0,0,C66]]) return C
[docs] @staticmethod def write_matrix(C11,C22,C33,C12,C13,C23,C44,C55,C66): """formulate general 6x6 stiffness matrix in Voigt notation Parameters ---------- C11 : float (GPa): stiffness C22 : float (GPa): stiffness C33 : float (GPa): stiffness C12 : float (GPa): stiffness C13 : float (GPa): stiffness C23 : float (GPa): stiffness C44 : float (GPa): stiffness C55 : float (GPa): stiffness C66 : float (GPa): stiffness Returns ------- 2d array C: 6x6 stiffness matrix """ C=np.array([[C11,C12,C13,0,0,0], [C12,C22,C23,0,0,0], [C13,C23,C33,0,0,0], [0,0,0,C44,0,0], [0,0,0,0,C55,0], [0,0,0,0,0,C66]]) return C
[docs] @staticmethod def write_iso(K,G): """formulate isotropic 6x6 stiffness matrix in Voigt notation Parameters ---------- K : float or array (GPa): bulk modulus G : float or array (GPa): shear moulus Returns ------- 2d array C: 6x6 stiffness matrix """ lamda = K - 2*G/3 C=np.array([[lamda+2*G,lamda,lamda,0,0,0], [lamda,lamda+2*G,lamda,0,0,0], [lamda,lamda,lamda+2*G,0,0,0], [0,0,0,G,0,0], [0,0,0,0,G,0], [0,0,0,0,0,G]]) return C
[docs] @staticmethod def crack_por(crd, alpha): """compute crack porosity from crack aspect ratio and crack density Parameters ---------- crd : float or array (unitless): crack density alpha : float or array crack aspect ratio Returns ------- float or array cpor (frac): crack porosity """ cpor= 4*np.pi*alpha*crd/3 return cpor
[docs] @staticmethod def v_to_c_VTI(Vp0,Vp45,Vp90,Vs0,Vsh90,den): """compute stiffness matrix given velocity measurements along different directions Parameters ---------- Vp0 : float or array (km/s): incident angle dependent velocity measurements Vp45 : float or array (km/s): incident angle dependent velocity measurements Vp90 : float or array (km/s): incident angle dependent velocity measurements Vs0 : float or array (km/s): incident angle dependent velocity measurements Vsh90 : float or array (km/s): incident angle dependent velocity measurements den : float or array (g/cm3):density of the sample Returns ------- 2d array C: VTI stiffness matrix """ C11 = den*Vp90**2 C12 = C11-2*den*Vsh90**2 C33 = den*Vp0**2 C44 = den*Vs0**2 M = 4*den**2*Vp45**4-2*den*Vp45**2*(C11+C33+2*C44)+(C11+C44)*(C33+C44) C13 = -C44+np.sqrt(M) C66 = 0.5*(C11-C12) C = utils.write_VTI_matrix(C11,C33,C13,C44,C66) return C