Source code for rockphypy.Emp

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


import numpy as np


[docs]class Empirical: """ Empirical relations that widely applied """
[docs] @staticmethod def krief(phi, Kg,Gg): """Compute porous background elastic constants as a function of porosity according to Krief model. Parameters ---------- phi : float or array porosity in porous rock Kg : float grain bulk modulus Gg : float grain shear modulus Returns ------- float or array lamda,G,K """ a0= 1-(1-phi)**(3/(1-phi)) G = (1-a0)*Gg K = (1-a0)*Kg lamda= K-2*G/3 return lamda,G,K
[docs] @staticmethod def esti_VS(Vp, vsh): """Estimate, using the Greenberg-Castagna empirical relations, the shearwave velocity in a brine-saturated shaly sandstone with vp since we only assume two minearl phases: so L=2, X1= 1-vsh, X2= vsh Parameters ---------- Vp : float or array-like compressional velocities, m/s vsh : float or array-like shale volume Returns ------- float or array-like vs (m/s): estimated shear wave velocities References ---------- - handbook of rock physics P516 """ Vs_sand= 0.80416*Vp/1000 - 0.85588 # km/s Vs_shale= 0.76969*Vp/1000 - 0.86735 #km/s Vs_arith= (1-vsh)*Vs_sand+ vsh*Vs_shale Vs_harm=( (1-vsh)/Vs_sand +vsh/Vs_shale )**-1 Vs= 0.5*(Vs_arith+Vs_harm) return Vs*1000
[docs] @staticmethod def han(phi,C): """Han (1986) found empirical regressions relating ultrasonic (laboratory) velocities to porosity and clay content.effective pressure is 20Mpa Parameters ---------- phi : float or array-like porosity C : float or array-like clay volume fraction Returns ------- float or array-like P and S wave velocities """ vp=5.59-6.93*phi-2.81*C vs=3.52-4.91*phi-1.89*C return vp*1000,vs*1000
########################################################## to do
[docs] @staticmethod def ehrenberg(Z): """porosity reference trend for Norwegian Sea sandstone. Note that the functional form of the porosity model is not published in Ehrenberg (1990). It is obtained by linear regression of the digitized data point from the original plot in the paper. Parameters ---------- Z : float or array burial depth below see floor in Km References ---------- Ehrenberg, S., 1990, Relationship between diagenesis and reservoir quality in sandstones of the Garn Formation, Haltenbanken, mid-Norwegian continental shelf: AAPG bulletin, 74, no. 10, 1538 Returns ------- float or array porosity """ Z= Z/1000 phi = -0.092200747*Z+0.4802422 return phi
[docs] @staticmethod def yu_segment_trend(Z): """Reference trend for Norwegian sea normally buried clean sandstones Parameters ---------- Z : float or array burial depth below see floor in m Returns ------- float or array P wave velocities """ V1=1707.998+0.66*Z[Z<=2630] V2=1200.84+0.853*Z[Z>2630] V= np.hstack((V1,V2)) return V
[docs] @staticmethod def ramm_porosity(Z, HB=True): """porosity reference trend according to Ramm & Bjørlykke (1994) Parameters ---------- Z : float or array burial depth wrt. sea floor in m HB : bool, optional if True: only show the regression line for halten bakken area porosity data False: The regression line for all porosity from north sea and norwegian sea, by default True Returns ------- float or array porosity """ if HB==True: phi= 46.4-0.0085*Z else: phi= 42.7-0.0069*Z return phi/100
[docs] @staticmethod def ramm_porosity_segment(Z): """segment porosity reference trend according to Ramm & Bjørlykke (1994) considering the mechanical and chemical compaction Parameters ---------- Z : float or array burial depth wrt. sea floor in m Returns ------- float or array porosity """ phi1= 45*np.exp(-0.00025*Z) phi2= 25-0.013*(Z-2500) phi1[phi1>phi2]=phi2[phi2<phi1] return phi1
[docs] @staticmethod def empirical_StPeter(Pe, sample=1): """compute the Vp and Vs for st peter sandstone using the empirical relationship in the form of V= A+KPe-Be^(-DPe) Parameters ---------- Pe : float or array effective pressure in Kbar, 1kbar= 100Mpa sample : int, optional 1-sample 1, phi= 0.205. 2-sample 2, phi= 0.187, by default 1 Returns ------- float or array Vp,Vs in km """ if sample==1: Vp= 4.21+0.187*Pe-0.746*np.exp(-24*Pe) Vs= 2.58+0.160*Pe-0.781*np.exp(-20*Pe) elif sample ==2: Vp= 4.55+0.298*Pe-0.8*np.exp(-19*Pe) Vs= 2.83+0.195*Pe-0.741*np.exp(-16*Pe) return Vp*1000, Vs*1000
[docs] @staticmethod def Scherbaum(Z): """ velocity depth trend for Lower and Middle Buntsandstein Parameters ---------- Z : float or array burial depth wrt. sea floor in m References ---------- Scherbaum, F., 1982. Seismic velocities in sedimentary rocks—indicators of subsidence and uplift?. Geologische Rundschau, 71(2), pp.519-536. Returns ------- float or array P wave velocities in m/s """ V = 2325+0.51*Z return V
[docs] @staticmethod def Sclater(phi): """Sclater-Christie exponential curve for sandstone Parameters ---------- phi : float or array porosity Returns ------- Z : float or array depth wrt. sea floor in km. """ Z= 3.7*np.log(0.49/phi) return Z
[docs] @staticmethod def Storvoll(Z): """Storvoll velocity compaction trend. The trend is for shale and shaly sediments but also used for siliciclastic rock like sandstone Parameters ---------- Z : float or array depth wrt. sea floor in m. Returns ------- float or array Vp meters per second """ V= 1/1.76*Z+2600 return V
[docs] @staticmethod def Hillis(Z): """compaction trend for Bunter Sandstone in North sea Parameters ---------- Z : float or array depth below sea bed (in kilometers) Returns ------- float or array Vp km/s """ transit= 135.9-20.22*Z/1000 V= 304.8*1000/transit return V
[docs] @staticmethod def Japsen(Z): """a segmented linear velocity–depth function, These equations are considered as approximation for bunter sandstone trend although they are originally for bunter shale. proposed by Japsen 1999 Parameters ---------- Z : float or array depth below sea bed in m. Returns ------- float or array Vp m/s """ V1=1550+0.6*Z[Z<1393] V2= -400+2*Z[(Z>=1393)&(Z<2000)] V3=2600+0.5*Z[(Z>=2000)&(Z<3500)] V4=3475+0.25*Z[(Z>=3500)&(Z<5300)] V= np.hstack((V1,V2,V3,V4)) return V
[docs] @staticmethod def hjelstuen(Z): """Velocity-depth relationships for the Bjørna-Sørkapp margin deposits. note: the seismic velocities are not directly comparable with velocities from sonic logs (because of the different frequencies), and the velocity-depth profile of Hjelstuen et al. (1996) has not been corrected for uplift and erosion Parameters ---------- Z : float or array Z< 3.8km Returns ------- float or array V: m/s """ V=1.87+0.55*(Z/1000) # convert Z to km return V*1000
[docs] @staticmethod def Cp(phi): """The coordination number n depends on porosity, as shown by Murphy 1982. Parameters ---------- phi : float or array total porosity , for a porosity of 0.4, n=8.6 Returns ------- float or array coordination number """ return 20-34*phi+14*phi**2