Beispiel #1
0
    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)
Beispiel #3
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)
Beispiel #4
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)
Beispiel #5
0
    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)
Beispiel #6
0
 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)
Beispiel #7
0
 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_)
Beispiel #8
0
 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_)
Beispiel #9
0
 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)
Beispiel #10
0
 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)
Beispiel #11
0
 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_ )
Beispiel #12
0
 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)
Beispiel #13
0
    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()
Beispiel #14
0
    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()
Beispiel #15
0
    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)
Beispiel #16
0
    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)
Beispiel #17
0
    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)
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
0
    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)
Beispiel #21
0
    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)
Beispiel #22
0
    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)
Beispiel #23
0
    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)
Beispiel #24
0
 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)
Beispiel #25
0
 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)
Beispiel #26
0
 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
Beispiel #27
0
 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