def lnpostfn_emcee(p): if not np.all(p > space[0, :]): return -np.inf if not np.all(p < space[1, :]): return -np.inf T = disp_data[:, 0] pvelo = disp_data[:, 1] stdpvelo= disp_data[:, 2] model = vmodel.model1d() model.get_para_model(paraval=p) model.isomod.mod2para() ilvry = 2 nper = T.size per = np.zeros(200, dtype=np.float64) per[:nper] = T[:] qsinv = 1./model.qs # print model.qs (ur0,ul0,cr0,cl0) = fast_surf.fast_surf(model.nlay, ilvry, \ model.vpv, model.vsv, model.rho, model.h, qsinv, per, nper) pvelp = cr0[:nper] gvelp = ur0[:nper] # misfit misfit = ((pvelo - pvelp)**2/stdpvelo**2).sum() L = np.exp(-0.5 * np.sqrt(misfit)) return np.log(L)
def init_eigensolver(self, inmodel=None, T=None, Tmin=10., Tmax=50., dT=5., c=None, cmin=2500., cmax=5000., dc=50., nmodes=1, zmax=400., dz=1.): ##### # initialize eigenfunction solver ##### if isinstance(inmodel, vmodel.model1d): eigensolver = eigen.eigen_solver(inmodel) else: m=vmodel.model1d() m.get_radius(zmax, dz) m.model_prem() eigensolver = eigen.eigen_solver(m) if not isinstance(T, np.ndarray): T = np.arange(Tmin, Tmax+dT, dT, dtype=np.float32) if not isinstance(c, np.ndarray): c = np.arange(cmin, cmax+dc, dc, dtype=np.float32) rmin = np.float32(6371000. - zmax*1000.) dr = np.float32(dz*1000.) eigensolver.init_dbase(T, c, rmin, dr, np.int32(nmodes)) # if newsolver: # self.eigensolver.init_dbase(T, c, rmin, dr, np.int32(nmodes)) # else: # r = np.arange(rmin, 6371000.+dr, dr, dtype=np.float32) # if r.size == self.eigensolver.r.size and T.size == self.eigensolver.T.size and \ # c.size == self.eigensolver.c.size and nmodes == self.eigensolver.nmodes: # if not (np.allclose(r, self.eigensolver.r) and np.allclose(T, self.eigensolver.T) \ # and np.allclose(c, self.eigensolver.c) and nmodes == self.eigensolver.nmodes): # self.eigensolver.init_dbase(T, c, rmin, dr, nmodes) # else: # self.eigensolver.init_dbase(T, c, rmin, dr, nmodes) return eigensolver
def __init__(self): self.model = vmodel.model1d() self.indata = data.data1d() self.eigkR = eigenkernel.eigkernel() self.eigkL = eigenkernel.eigkernel() self.hArr = np.array([], dtype=np.float32) self.disprefR = False self.disprefL = False return
def __init__(self): self.model = vmodel.model1d() self.data = data.data1d() self.fs = 40. self.slowness = 0.06 self.gausswidth = 2.5 self.amplevel = 0.005 self.t0 = 0. return
def __init__(self, factor=1., thresh=0.5, waterdepth=-1., vpwater=1.5, stdfactor=2.): self.data = data.data1d() self.factor = factor self.thresh = thresh self.stdfactor = stdfactor # models self.avg_model = vmodel.model1d() self.min_model = vmodel.model1d() self.init_model = vmodel.model1d() self.real_model = vmodel.model1d() self.temp_model = vmodel.model1d() # self.vprfwrd = vprofile.vprofile1d() self.waterdepth = waterdepth self.vpwater = vpwater # self.avg_misfit = 0. self.code = '' return
def logp_sampyl(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13): T = disp_data[:, 0] pvelo = disp_data[:, 1] stdpvelo= disp_data[:, 2] model = vmodel.model1d() model.get_para_model(paraval=np.array([x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13])) model.isomod.mod2para() ilvry = 2 nper = T.size per = np.zeros(200, dtype=np.float64) per[:nper] = T[:] qsinv = 1./model.qs # print model.qs (ur0,ul0,cr0,cl0) = fast_surf.fast_surf(model.nlay, ilvry, \ model.vpv, model.vsv, model.rho, model.h, qsinv, per, nper) pvelp = cr0[:nper] gvelp = ur0[:nper] # misfit misfit = ((pvelo - pvelp)**2/stdpvelo**2).sum() L = np.exp(-0.5 * misfit) return L
def fitness(self, x): T = disp_data[:, 0] pvelo = disp_data[:, 1] stdpvelo = disp_data[:, 2] model = vmodel.model1d() model.get_para_model(paraval=x) model.isomod.mod2para() ilvry = 2 nper = T.size per = np.zeros(200, dtype=np.float64) per[:nper] = T[:] qsinv = 1./model.qs (ur0,ul0,cr0,cl0) = fast_surf.fast_surf(model.nlay, ilvry, \ model.vpv, model.vsv, model.rho, model.h, qsinv, per, nper) pvelp = cr0[:nper] gvelp = ur0[:nper] # misfit misfit = ((pvelo - pvelp)**2/stdpvelo**2).sum() # L = np.exp(-0.5 * np.sqrt(misfit)) # print 'run' return [misfit]
m.add_perturb_layer_love(0, 20., 4, 0.2, True) (~ 0.15 %, ~ 0.25 % for Love group) m.add_perturb_layer_love(0, 20., 4, -0.1, True); m.add_perturb_layer_love(0, 20., 3, -0.2, True) (~ 0.15 %, ~ 0.25 % for Love group) m.add_perturb_layer_love(0, 20., 5, +-0.3, True) (~ 0.15 %, ~ 0.25 % for Love group) Cases failed ! m.add_perturb_layer_love(0, 20., 3, -0.3, True) T = 5 sec, aniprop yields seemly wrong result. OTHERS are consistent ( ~ 0.05 %) m.add_perturb_layer_love(0, 20., 4, 0.3, True), T = 5 sec, aniprop yields seemly wrong result. OTHERS are consistent ( ~ 0.05 %) m.add_perturb_layer_love(0, 20., 4, -0.1, True); m.add_perturb_layer_love(0, 20., 3, -0.3, True) T = 5 sec, wrong results ( ~ 0.05 %) """ import eigen, tcps, aniproppy, ref import vmodel import numpy as np import matplotlib.pyplot as plt m1=vmodel.model1d() m1.model_ak135_cps() m1.flat=1 m1.add_perturb_layer(0, 20., 0, 3.494, False) m1.add_perturb_layer(0, 20., 1, 3.702, False) m1.add_perturb_layer(0, 20., 2, 5.94, False) m1.add_perturb_layer(0, 20., 3, 6.28, False) m1.add_perturb_layer(0, 20., 4, 0.82, False) m1.add_perturb_layer(0, 20., 5, 2.73, False) m1.init_tilt() m1.dipArr[-1] = 34; m1.dipArr[-2] = 34 m1.strikeArr[-1] = 20; m1.strikeArr[-2] = 20
m.add_perturb_layer_love(0, 20., 4, 0.2, True) (~ 0.15 %, ~ 0.25 % for Love group) m.add_perturb_layer_love(0, 20., 4, -0.1, True); m.add_perturb_layer_love(0, 20., 3, -0.2, True) (~ 0.15 %, ~ 0.25 % for Love group) m.add_perturb_layer_love(0, 20., 5, +-0.3, True) (~ 0.15 %, ~ 0.25 % for Love group) Cases failed ! m.add_perturb_layer_love(0, 20., 3, -0.3, True) T = 5 sec, aniprop yields seemly wrong result. OTHERS are consistent ( ~ 0.05 %) m.add_perturb_layer_love(0, 20., 4, 0.3, True), T = 5 sec, aniprop yields seemly wrong result. OTHERS are consistent ( ~ 0.05 %) m.add_perturb_layer_love(0, 20., 4, -0.1, True); m.add_perturb_layer_love(0, 20., 3, -0.3, True) T = 5 sec, wrong results ( ~ 0.05 %) """ import eigen, tcps, aniproppy import vmodel import numpy as np import matplotlib.pyplot as plt m=vmodel.model1d() m.model_ak135_cps() m.flat=1 # # # model perturbation: isotropic -> VTI # # # m.add_perturb_layer_love(0, 20., 4, -0.1, True) # # m.add_perturb_layer_love(0, 20., 3, -0.3, True) # # m.add_perturb_layer_love(0, 20., 0, -0.05, True) # m.add_perturb_layer_love(0, 20., 1, 0.05, True) # m.add_perturb_layer_love(0, 20., 3, -0.05, True) # m.add_perturb_layer_love(0, 20., 4, 0.05, True) m.add_perturb_layer_love(0, 35, 0, -0.02, True)
def __init__(self): self.model = vmodel.model1d() self.indata = data.data1d() self.eigkR = eigenkernel.eigkernel() self.eigkL = eigenkernel.eigkernel() return