def make_rc_elastic(model_vp,model_vs,model_rho,ang): ''' Computes angle-dependent reflectivities of an elastic model created with make_wedge + assign_el. Uses Aki-Richards approximation. INPUT model_vp: 2D numpy array containing Vp values model_vs: 2D numpy array containing Vs values model_rho: 2D numpy array containing density values ang: list with near, mid, far angle, e.g. ang=[5,20,40] OUTPUT rc_near: 2D numpy array containing near-stack reflectivities rc_mid: 2D numpy array containing mid-stack reflectivities rc_far: 2D numpy array containing far-stack reflectivities ''' from agilegeo.avo import akirichards [n_samples, n_traces] = model_vp.shape rc_near=np.zeros((n_samples,n_traces)) rc_mid=np.zeros((n_samples,n_traces)) rc_far=np.zeros((n_samples,n_traces)) uvp = model_vp[:-1][:][:] lvp = model_vp[1:][:][:] uvs = model_vs[:-1][:][:] lvs = model_vs[1:][:][:] urho = model_rho[:-1][:][:] lrho = model_rho[1:][:][:] rc_near=akirichards(uvp,uvs,urho,lvp,lvs,lrho,ang[0]) rc_mid=akirichards(uvp,uvs,urho,lvp,lvs,lrho,ang[1]) rc_far=akirichards(uvp,uvs,urho,lvp,lvs,lrho,ang[2]) rc_near=np.concatenate((rc_near,np.zeros((1,n_traces)))) # add 1 row of zeros at the end rc_mid=np.concatenate((rc_mid,np.zeros((1,n_traces)))) rc_far=np.concatenate((rc_far,np.zeros((1,n_traces)))) return rc_near, rc_mid, rc_far
def make_rc_elastic(model_vp, model_vs, model_rho, ang): ''' Computes angle-dependent reflectivities of an elastic model created with make_wedge + assign_el. Uses Aki-Richards approximation. INPUT model_vp: 2D numpy array containing Vp values model_vs: 2D numpy array containing Vs values model_rho: 2D numpy array containing density values ang: list with near, mid, far angle, e.g. ang=[5,20,40] OUTPUT rc_near: 2D numpy array containing near-stack reflectivities rc_mid: 2D numpy array containing mid-stack reflectivities rc_far: 2D numpy array containing far-stack reflectivities ''' from agilegeo.avo import akirichards [n_samples, n_traces] = model_vp.shape rc_near = np.zeros((n_samples, n_traces)) rc_mid = np.zeros((n_samples, n_traces)) rc_far = np.zeros((n_samples, n_traces)) uvp = model_vp[:-1][:][:] lvp = model_vp[1:][:][:] uvs = model_vs[:-1][:][:] lvs = model_vs[1:][:][:] urho = model_rho[:-1][:][:] lrho = model_rho[1:][:][:] rc_near = akirichards(uvp, uvs, urho, lvp, lvs, lrho, ang[0]) rc_mid = akirichards(uvp, uvs, urho, lvp, lvs, lrho, ang[1]) rc_far = akirichards(uvp, uvs, urho, lvp, lvs, lrho, ang[2]) rc_near = np.concatenate((rc_near, np.zeros( (1, n_traces)))) # add 1 row of zeros at the end rc_mid = np.concatenate((rc_mid, np.zeros((1, n_traces)))) rc_far = np.concatenate((rc_far, np.zeros((1, n_traces)))) return rc_near, rc_mid, rc_far
def test_akirichards(self): vp1 = 12250. vp2 = 11600. vs1 = 6200. vs2 = 6650. rho1 = 2.66 rho2 = 2.34 theta = 40. reflect = avo.akirichards(vp1, vs1, rho1, vp2, vs2, rho2, theta) self.assertAlmostEquals(reflect, -0.112236, places=3)
def test_akirichards(self): vp1 = 12250. vp2 = 11600. vs1 = 6200. vs2 = 6650. rho1 = 2.66 rho2 = 2.34 theta = 40. reflect = avo.akirichards( vp1,vs1,rho1,vp2,vs2,rho2,theta ) self.assertAlmostEquals( reflect, -0.112236, places=3 )
def test_akirichards(self): vp1 = 12250. vp2 = 11600. vs1 = 6200. vs2 = 6650. rho1 = 2.66 rho2 = 2.34 theta = np.arange(45) reflect = avo.akirichards(vp1, vs1, rho1, vp2, vs2, rho2, theta) reflect_zoep = avo.zoeppritz(vp1, vs1, rho1, vp2, vs2, rho2, theta) # See if it is within .1 of zoep for < 45 deg test = np.allclose(reflect, reflect_zoep, rtol=self.tolerance) self.assertTrue(test)
def akirichards(Rp0, Rp1, theta1): reflection.akirichards(Rp0.vp, Rp0.vs, Rp0.rho, Rp1.vp, Rp1.vs, Rp1.rho, theta1)