Esempio n. 1
0
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)
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
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
Esempio n. 7
0
 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]
Esempio n. 8
0
    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
Esempio n. 9
0
    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)
Esempio n. 10
0
 def __init__(self):
     self.model = vmodel.model1d()
     self.indata = data.data1d()
     self.eigkR = eigenkernel.eigkernel()
     self.eigkL = eigenkernel.eigkernel()
     return