def __init__(self, offset=0, nlay=3, v0=1465, d0=200, muteDirect=0, verbose=True): """Init forward operator for velocity increases with fixed 1st layer. Parameters ---------- offset : iterable vector of offsets between shot and geophone nlay : int number of layers v0 : float first layer velocity (at the same time base velocity) d0 : float depth of first layer """ super().__init__(verbose=verbose) self.nlay = nlay self.offset = offset self.v0 = v0 self.mDirect = muteDirect mesh = pg.createMesh1DBlock(nlay) self.setMesh(mesh)
def test_createMesh1DBlock(self): mesh = pg.createMesh1DBlock(nLayers=5) self.assertEqual(mesh.cellCount(), 9.0) mesh = pg.createMesh1DBlock(5) self.assertEqual(mesh.cellCount(), 9.0) mesh = pg.createMesh1DBlock(5, 1) self.assertEqual(mesh.cellCount(), 9.0) mesh = pg.createMesh1DBlock(nLayers=4, nProperties=2) self.assertEqual(mesh.cellCount(), 11.0) mesh = pg.createMesh1DBlock(4, 2) self.assertEqual(mesh.cellCount(), 11.0)
def __init__(self, mrsAll, nlay=3): mesh = pg.createMesh1DBlock(nlay, 2) # thk, wc, T2* pg.ModellingBase.__init__(self, mesh) self.fAll = [] for mrs in mrsAll: mrs.createFOP(nlay) self.fAll.append(mrs.f)
def __init__(self, nlay, height): # Attribute self.nlay = nlay self.height = height self.wem = (2.0 * pi * self.f) ** 2 * self.ep0 * self.mu0 self.iwm = np.complex(0, 1) * 2.0 * pi * self.f * self.mu0 mesh = pg.createMesh1DBlock(nlay) pg.ModellingBase.__init__(self, mesh)
def __init__(self, nlay, ab2, mn2, freq, coilspacing, verbose=False): """Init number of layers, AB/2, MN/2, frequencies & coil spacing.""" pg.ModellingBase.__init__(self, verbose) self.nlay_ = nlay self.fDC_ = pg.DC1dModelling(nlay, ab2, mn2, verbose) self.fEM_ = pg.FDEM1dModelling(nlay, freq, coilspacing, verbose) self.mesh_ = pg.createMesh1DBlock(nlay) self.setMesh(self.mesh_)
def __init__(self, nlay, K, zvec, t, verbose=False): """Constructor with number of layers, kernel, z and t vectors.""" mesh = pg.createMesh1DBlock(nlay, 2) # thk, wc, T2* pg.ModellingBase.__init__(self, mesh) self.K_ = K self.zv_ = np.array(zvec) self.nl_ = nlay self.nq_ = len(K) self.t_ = np.array(t) self.nt_ = len(t)
def __init__(self, nlay, K, zvec, t, verbose=False): """constructor with number of layers, kernel, z and t vectors""" mesh = pg.createMesh1DBlock(nlay, 2) # thk, wc, T2* pg.ModellingBase.__init__(self, mesh) self.K_ = K self.zv_ = np.array(zvec) self.nl_ = nlay self.nq_ = len(K) self.t_ = np.array(t) self.nt_ = len(t)
def __init__( self, nlay, ab2, mn2, freq, coilspacing, verbose = False ): ''' constructor, number of layers, AB/2 & MN/2, frequencies & coil spacing */ ''' g.ModellingBase.__init__( self, verbose ) self.nlay_ = nlay self.fDC_ = g.DC1dModelling( nlay, ab2, mn2, verbose ) self.fEM_ = g.FDEM1dModelling( nlay, freq, coilspacing, verbose ) self.mesh_ = g.createMesh1DBlock( nlay ) self.setMesh( self.mesh_ )
def __init__(self, nlay, KR, KI, zvec, t, verbose=False): """constructor.""" mesh = pg.createMesh1DBlock(nlay, 2) # thk, wc, T2* pg.ModellingBase.__init__(self, mesh, verbose) self.KR_ = KR self.KI_ = KI self.zv_ = N.array(zvec) self.nl_ = nlay self.nq_ = len(KR) self.t_ = N.array(t) self.nt_ = len(t)
def createFOP(self): """Creates the forward operator instance.""" if self.type == 'block': self.FOP = pg.DC1dModelling(self.Z, self.ab2, self.mn2) mesh1D = pg.createMesh1DBlock(self.Z) if self.type == 'smooth': self.FOP = pg.DC1dRhoModelling(self.Z, self.ab2, self.mn2) mesh1D = pg.createMesh1D(nCells=len(self.Z) + 1) self.FOP.setMesh(mesh1D) self.applyModelTrans()
def setLayers(self, nLayers): if nLayers < 2: raise Exception("Number of layers need to be at least 2") mesh = pg.createMesh1DBlock(nLayers, self.__nBlocks) self.setMesh(mesh) #self.setStartModel(pg.RVector(0)) for i in range(self.__nBlocks + 1): self.setRegionProperties(i, trans='log') if self.__withMultiThread: self.setMultiThreadJacobian(2*nLayers - 1)
def __init__(self, nlay, height, f=None, r=None): # Attribute self.nlay = nlay self.height = height self.f = f self.r = r if self.f is None: self.f = self.fdefault if self.r is None: self.r = self.rdefault self.wem = (2.0 * pi * self.f) ** 2 * self.ep0 * self.mu0 self.iwm = np.complex(0, 1) * 2.0 * pi * self.f * self.mu0 mesh = pg.createMesh1DBlock(nlay) pg.ModellingBase.__init__(self, mesh)
def __init__(self, nlay, height, f=None, r=None, **kwargs): """Initialize class with geometry Parameters ---------- nlay : int number of layers height : float helicopter f : array [BGR RESOLVE system 387Hz-133kHz] frequency vector r : array [BGR RESOLVE system 7.91-7.94] distance vector scaling : float scaling factor or string (ppm=1e6, percent=1e2) """ # Attribute self.nlay = nlay self.height = height self.f = np.asarray(f) if r is None: raise Exception("Specify separation value or vector!") if 'scaling' in kwargs: if kwargs['scaling'] == 'ppm': self.scaling = 1e6 elif kwargs['scaling'] in ['percent', '%']: self.scaling = 1e2 else: self.scaling = kwargs['scaling'] if self.f is None: self.f = self.fdefault if isinstance(r, float) or isinstance(r, int): self.r = np.ones_like(f, dtype=np.float) * r else: if len(r) == len(self.f): self.r = r else: raise Exception('Length vector have to be matching!') if self.r is None: self.r = self.rdefault self.wem = (2.0 * pi * self.f)**2 * self.ep0 * self.mu0 self.iwm = np.complex(0, 1) * 2.0 * pi * self.f * self.mu0 mesh = pg.createMesh1DBlock(nlay) pg.ModellingBase.__init__(self, mesh)
def __init__(self, nlay, height, f=None, r=None, **kwargs): """Initialize class with geometry Parameters ---------- nlay : int number of layers height : float helicopter f : array [BGR RESOLVE system 387Hz-133kHz] frequency vector r : array [BGR RESOLVE system 7.91-7.94] distance vector scaling : float scaling factor or string (ppm=1e6, percent=1e2) """ # Attribute self.nlay = nlay self.height = height self.f = np.asarray(f) if r is None: raise Exception("Specify separation value or vector!") if 'scaling' in kwargs: if kwargs['scaling'] == 'ppm': self.scaling = 1e6 elif kwargs['scaling'] in ['percent', '%']: self.scaling = 1e2 else: self.scaling = kwargs['scaling'] if self.f is None: self.f = self.fdefault if isinstance(r, float) or isinstance(r, int): self.r = np.ones_like(f, dtype=np.float) * r else: if len(r) == len(self.f): self.r = r else: raise Exception('Length vector have to be matching!') if self.r is None: self.r = self.rdefault self.wem = (2.0 * pi * self.f) ** 2 * self.ep0 * self.mu0 self.iwm = np.complex(0, 1) * 2.0 * pi * self.f * self.mu0 mesh = pg.createMesh1DBlock(nlay) pg.ModellingBase.__init__(self, mesh)
def __init__(self, offset=0, nlay=3, vbase=1100, verbose=True): """Init forward operator. Model are velocity increases. Parameters ---------- offset : iterable vector of offsets between shot and geophone nlay : int number of layers vbase : float base velocity (all values are above) """ super().__init__(verbose=verbose) self.nlay = nlay self.offset = offset self.vbase = vbase mesh = pg.createMesh1DBlock(nlay) self.setMesh(mesh)
def __init__(self, nlay, kr, ki, zvec, t, verbose=False): """Initialize modelling class. Parameters ---------- nlay : int [3] number of layers kr/ki : RMatrix real/imaginary kernel functions zvec : array vertical discretization of the kernel t : array time discretization """ mesh = pg.createMesh1DBlock(nlay, 2) # thk, wc, T2* pg.ModellingBase.__init__(self, mesh, verbose) self.kr_ = kr self.ki_ = ki self.zv_ = np.array(zvec) self.nl_ = nlay self.nq_ = len(kr) self.t_ = np.array(t) self.nt_ = len(t)
def __init__(self, nlay, K, z, t, ab2, mn2, verbose=False): self.nlay_ = nlay mesh = pg.createMesh1DBlock(nlay, 3) # 3 paramaters: thk,wc,t2,res pg.ModellingBase.__init__(self, mesh) self.fMRS = MRS1dBlockQTModelling(nlay, K, z, t) self.fVES = pg.DC1dModelling(nlay, ab2, mn2)
def __init__( self, nlay, K, z, t, ab2, mn2, verbose = False ): self.nlay_ = nlay mesh = pg.createMesh1DBlock( nlay, 3 ) # 3 paramaters: thk,wc,t2,res pg.ModellingBase.__init__( self, mesh ) self.fMRS = MRS1dBlockQTModelling(nlay, K, z, t) self.fVES = pg.DC1dModelling(nlay, ab2, mn2)
def __init__(self, nlay, height=1, **kwargs): """Init class (see HEMmodelling).""" HEMmodelling.__init__(self, nlay, height, **kwargs) self.scaling = 1e2 self.mymesh = pg.createMesh1DBlock(nlay, nProperties=2) self.setMesh(self.mymesh) # only for inversion