예제 #1
0
파일: fdem.py 프로젝트: gimli-org/gimli
    def __init__(self, data, nlay=2, verbose=False):
        """Parameters: FDEM data class and number of layers."""
        super(FDEM2dFOP, self).__init__(verbose)
        self.nlay = nlay
        self.header = {}
        self.pos, self.z, self.topo = None, None, None
        self.FOP = data.FOP(nlay)
        self.nx = len(data.x)
        self.nf = len(data.freq())
        npar = 2 * nlay - 1
        self.mesh1d = pg.createMesh1D(self.nx, npar)
        self.mesh_ = pg.createMesh1D(self.nx, 2 * nlay - 1)
        self.setMesh(self.mesh_)

        # self.J = NDMatrix(self.nx, self.nf*2, npar)
        self.J = pg.RBlockMatrix()
        self.FOP1d = []
        for i in range(self.nx):
            self.FOP1d.append(pg.FDEM1dModelling(
                nlay, data.freq(), data.coilSpacing, -data.height))
            n = self.J.addMatrix(self.FOP1d[-1].jacobian())
            self.J.addMatrixEntry(n, self.nf * 2 * i, npar * i)

        self.J.recalcMatrixSize()
        print(self.J.rows(), self.J.cols())
예제 #2
0
    def __init__(self, data, nlay=2, verbose=False):
        """Parameters: FDEM data class and number of layers."""
        super(FDEM2dFOP, self).__init__(verbose)
        self.nlay = nlay
        self.header = {}
        self.pos, self.z, self.topo = None, None, None
        self.FOP = data.FOP(nlay)
        self.nx = len(data.x)
        self.nf = len(data.freq())
        npar = 2 * nlay - 1
        self.mesh1d = pg.createMesh1D(self.nx, npar)
        self.mesh_ = pg.createMesh1D(self.nx, 2 * nlay - 1)
        self.setMesh(self.mesh_)

        # self.J = NDMatrix(self.nx, self.nf*2, npar)
        self.J = pg.RBlockMatrix()
        self.FOP1d = []
        for i in range(self.nx):
            self.FOP1d.append(
                pg.FDEM1dModelling(nlay, data.freq(), data.coilSpacing,
                                   -data.height))
            n = self.J.addMatrix(self.FOP1d[-1].jacobian())
            self.J.addMatrixEntry(n, self.nf * 2 * i, npar * i)

        self.J.recalcMatrixSize()
        print(self.J.rows(), self.J.cols())
예제 #3
0
 def __init__(self, fvec, tvec, verbose=False):  # save reference in class
     """constructor with frequecy and tau vector"""
     self.f_ = fvec
     self.nf_ = len(fvec)
     self.t_ = tvec
     mesh = pg.createMesh1D(len(tvec))  # standard 1d discretization
     pg.ModellingBase.__init__(self, mesh, verbose)
예제 #4
0
    def test_createMesh1D(self):

        mesh = pg.createMesh1D(10, 1)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(nCells=10)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(nCells=5, nProperties=2)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(5, 2)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(10)
        self.assertEqual(mesh.cellCount(), 10.0)
예제 #5
0
    def test_createMesh1D(self):

        mesh = pg.createMesh1D(10, 1)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(nCells=10)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(nCells=5, nProperties=2)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(5, 2)
        self.assertEqual(mesh.cellCount(), 10.0)

        mesh = pg.createMesh1D(10)
        self.assertEqual(mesh.cellCount(), 10.0)
예제 #6
0
 def __init__(self, frequencies, coilspacing, nlay=2, verbose=False):
     """Set up class by frequencies and geometries."""
     pg.ModellingBase.__init__(self, verbose)
     self.nlay_ = nlay  # real layers (actually one more!)
     self.FOP_ = pg.FDEM1dModelling(nlay + 1, frequencies, coilspacing, 0.0)
     self.mesh_ = pg.createMesh1D(nlay, 2)  # thicknesses and resistivities
     self.mesh_.cell(0).setMarker(2)
     self.setMesh(self.mesh_)
예제 #7
0
 def __init__(self, dvec, *args, **kwargs):
     """ not yet working! """
     self.nlay = len(dvec) + 1
     self.dvec = np.asarray(dvec)
     self.zvec = np.hstack((0, np.cumsum(dvec)))
     HEMmodelling.__init__(self, self.nlay, *args, **kwargs)
     self.mymesh = pg.createMesh1D(self.nlay, nProperties=2)
     self.setMesh(self.mymesh)  # only for inversion
예제 #8
0
 def __init__(self, dvec, height=1., **kwargs):
     """Init class by specifying frequencies and distances (s. HEMMod)."""
     nlay = len(dvec) + 1
     self.dvec = np.asarray(dvec)
     self.zvec = np.hstack((0, np.cumsum(dvec)))
     HEMmodelling.__init__(self, nlay, height, **kwargs)
     self.mymesh = pg.createMesh1D(nlay)
     self.setMesh(self.mymesh)  # only for inversion
예제 #9
0
 def __init__(self, dvec, *args, **kwargs):
     """ not yet working! """
     self.nlay = len(dvec) + 1
     self.dvec = np.asarray(dvec)
     self.zvec = np.hstack((0, np.cumsum(dvec)))
     HEMmodelling.__init__(self, self.nlay, *args, **kwargs)
     self.mymesh = pg.createMesh1D(self.nlay, nProperties=2)
     self.setMesh(self.mymesh)  # only for inversion
예제 #10
0
    def test_createPartMesh(self):
        mesh = pg.createMesh1D(np.linspace(0, 1, 10))
        self.assertEqual(mesh.cellCount(), 9)

        mesh2 = mesh.createMeshByCellIdx(
            pg.find(pg.x(mesh.cellCenters()) < 0.5))
        self.assertEqual(mesh2.cellCount(), 4)
        self.assertEqual(mesh2.cellCenters()[-1][0] < 0.5, True)
예제 #11
0
 def __init__(self, dvec, height, verbose):
     """ not yet working! """
     nlay = len(dvec)
     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.createMesh1D(nlay)
     pg.ModellingBase.__init__(self, mesh)
예제 #12
0
    def test_createPartMesh(self):
        mesh = pg.createMesh1D(np.linspace(0, 1, 10))
        self.assertEqual(mesh.cellCount(), 9)

        mesh2 = mesh.createMeshByCellIdx(
            pg.find(pg.x(mesh.cellCenters()) < 0.5))
        self.assertEqual(mesh2.cellCount(), 4)
        self.assertEqual(mesh2.cellCenters()[-1][0] < 0.5, True)
예제 #13
0
 def __init__(self, fvec, tvec, verbose=False):  # save reference in class
     """constructor with frequecy and tau vector"""
     self.f_ = fvec
     self.nf_ = len(fvec)
     self.t_ = tvec
     pg.ModellingBase.__init__(self, verbose)
     self.mesh = pg.createMesh1D(len(tvec))  # standard 1d discretization
     self.setMesh(self.mesh)
예제 #14
0
 def __init__(self, dvec, height=1., **kwargs):
     """Init class by specifying frequencies and distances (s. HEMMod)."""
     nlay = len(dvec) + 1
     self.dvec = np.asarray(dvec)
     self.zvec = np.hstack((0, np.cumsum(dvec)))
     HEMmodelling.__init__(self, nlay, height, **kwargs)
     self.mymesh = pg.createMesh1D(nlay)
     self.setMesh(self.mymesh)  # only for inversion
예제 #15
0
 def __init__(self, frequencies, coilspacing, nlay=2, verbose=False):
     """ Set up class by frequencies and geometries """
     pg.ModellingBase.__init__(self, verbose)
     self.nlay_ = nlay  # real layers (actually one more!)
     self.FOP_ = pg.FDEM1dModelling(nlay + 1, frequencies, coilspacing, 0.0)
     self.mesh_ = pg.createMesh1D(nlay, 2)  # thicknesses and resistivities
     self.mesh_.cell(0).setMarker(2)
     self.setMesh(self.mesh_)
예제 #16
0
 def __init__(self, data, nlay=2, verbose=False):
     """ constructor with data and (optionally) number of layers """
     pg.ModellingBase.__init__(self, verbose)
     self.nlay = nlay
     self.FOP1d = data.FOP(nlay)
     self.nx = len(data.x)
     self.nf = len(data.freq())
     self.mesh_ = pg.createMesh1D(self.nx, 2 * nlay - 1)
     self.setMesh(self.mesh_)
예제 #17
0
 def __init__(self, data, nlay=2, verbose=False):
     """ constructor with data and (optionally) number of layers """
     pg.ModellingBase.__init__(self, verbose)
     self.nlay = nlay
     self.FOP1d = data.FOP(nlay)
     self.nx = len(data.x)
     self.nf = len(data.freq())
     self.mesh_ = pg.createMesh1D(self.nx, 2 * nlay - 1)
     self.setMesh(self.mesh_)
예제 #18
0
파일: fdem.py 프로젝트: wk1984/gimli
 def __init__(self, data, nlay=2, verbose=False):
     """
     """
     pg.ModellingBase.__init__(self, verbose)
     self.nlay_ = nlay
     self.FOP_  = data.FOP(nlay)
     self.nx_   = len(data.x)
     self.nf    = len(data.freq())
     self.mesh_ = pg.createMesh1D(self.nx_, 2*nlay-1)
     self.setMesh(self.mesh_)
예제 #19
0
파일: siptools.py 프로젝트: wk1984/gimli
    def __init__(self, fvec, tvec=None, zero = False, verbose = False):
        if tvec == None:
            tvec = N.logspace(-4, 0, 5)

        mesh = pg.createMesh1D(len(tvec))
        if zero:
            mesh.cell(0).setMarker(-1)
            mesh.cell(len(tvec)-1).setMarker(1)
        pg.ModellingBase.__init__(self, mesh, verbose)
        self.f_ = pg.asvector(fvec)
        self.t_ = tvec
        self.zero_ = zero
예제 #20
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()
예제 #21
0
파일: ves.py 프로젝트: gimli-org/gimli
    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()
예제 #22
0
파일: siptools.py 프로젝트: wk1984/gimli
def ReadAndRemoveEM(filename, readsecond=False, doplot=False,
                    dellast=True, ePhi=0.5, ePerc=1., lam=2000.):
    """ Read res1file and remove EM effects using a double-Cole-Cole model
    fr,rhoa,phi,dphi = ReadAndRemoveEM(filename, readsecond/doplot bools)"""
    fr, rhoa, phi, drhoa, dphi = read1resfile(filename, readsecond,
                                              dellast=dellast)
    # forward problem
    mesh = pg.createMesh1D(1, 6) # 6 independent parameters
    f = DoubleColeColeModelling(mesh, pg.asvector(fr) , phi[2]/abs(phi[2]))
    f.regionManager().loadMap("region.control")
    model = f.createStartVector()
    # inversion
    inv = pg.RInversion(phi, f, True, False)
    inv.setAbsoluteError(phi * ePerc * 0.01 + ePhi / 1000.)
    inv.setRobustData(True)
#    inv.setCWeight(pg.RVector(6, 1.0)) # wozu war das denn gut?
    inv.setMarquardtScheme(0.8)
    inv.setLambda(lam)
    inv.setModel(model)
    erg = inv.run()
    inv.echoStatus()
    chi2 = inv.chi2()
    mod0 = pg.RVector(erg)
    mod0[ 0 ] = 0.0 # set IP term to zero to obtain pure EM term
    emphi = f(mod0)
    resid = (phi - emphi) * 1000.
    if doplot:
        s = "IP: m= " + str(rndig(erg[0])) + " t=" + str(rndig(erg[1]))  +  \
        " c =" + str(rndig(erg[2]))
        s = s + "  EM: m= " + str(rndig(erg[3])) + " t=" + str(rndig(erg[4])) +\
        " c =" + str(rndig(erg[5]))
        fig = P.figure(1)
        fig.clf()
        ax = P.subplot(111)
        P.errorbar(fr, phi*1000., yerr=dphi*1000., fmt='x-', label='measured')
        ax.set_xscale('log')
        P.semilogx(fr, f(mod0) * 1000., label='EM term (CC)')
        P.errorbar(fr, resid, yerr=dphi*1000., label='IP term')
        ax.set_yscale('log')
        P.xlim((min(fr), max(fr)))
        P.ylim((0.1, max(phi) * 1000.))
        P.xlabel('f in Hz')
        P.ylabel(r'-$\phi$ in mrad')
        P.grid(True)
        P.title(s)
        P.legend(loc=2)#('measured','2-cole-cole','residual'))
        fig.show()

    return N.array(fr), N.array(rhoa), N.array(resid), N.array(phi)*1e3, dphi, chi2, N.array(emphi)*1e3
예제 #23
0
    def __init__(self, fvec, tvec=None, zero=False, verbose=False):

        if tvec is None:
            tvec = N.logspace(-4, 0, 5)

        mesh = pg.createMesh1D(len(tvec))

        if zero:
            mesh.cell(0).setMarker(-1)
            mesh.cell(len(tvec) - 1).setMarker(1)

        pg.ModellingBase.__init__(self, mesh, verbose)
        self.f_ = pg.asvector(fvec)
        self.t_ = tvec
        self.zero_ = zero
예제 #24
0
    def __init__(self, fvec, tvec, verbose=False):  # save reference in class
        """constructor with frequecy and tau vector"""
        self.f = fvec
        self.nf = len(fvec)
        self.t = tvec
        self.nt = len(tvec)
        mesh = pg.createMesh1D(len(tvec))  # standard 1d discretization
        pg.ModellingBase.__init__(self, mesh, verbose)
        T, W = np.meshgrid(tvec, fvec * 2. * pi)
        WT = W * T
        self.A = WT**2 / (WT**2 + 1)
        self.B = WT / (WT**2 + 1)
        self.J = pg.RMatrix()
        self.J.resize(len(fvec) * 2, len(tvec))
        for i in range(self.nf):
            wt = fvec[i] * 2.0 * pi * tvec
            wt2 = wt**2
            self.J[i] = wt2 / (wt2 + 1.0)
            self.J[i + self.nf] = wt / (wt2 + 1.0)

        self.setJacobian(self.J)
예제 #25
0
파일: models.py 프로젝트: gimli-org/gimli
    def __init__(self, fvec, tvec, verbose=False):  # save reference in class
        """constructor with frequecy and tau vector"""
        self.f = fvec
        self.nf = len(fvec)
        self.t = tvec
        self.nt = len(tvec)
        mesh = pg.createMesh1D(len(tvec))  # standard 1d discretization
        pg.ModellingBase.__init__(self, mesh, verbose)
        T, W = np.meshgrid(tvec, fvec * 2. * pi)
        WT = W*T
        self.A = WT**2 / (WT**2 + 1)
        self.B = WT / (WT**2+1)
        self.J = pg.RMatrix()
        self.J.resize(len(fvec)*2, len(tvec))
        for i in range(self.nf):
            wt = fvec[i] * 2.0 * pi * tvec
            wt2 = wt**2
            self.J[i] = wt2 / (wt2 + 1.0)
            self.J[i+self.nf] = wt / (wt2 + 1.0)

        self.setJacobian(self.J)
예제 #26
0
파일: models.py 프로젝트: gimli-org/gimli
 def __init__(self, f, verbose=False):  # initialize class
     """Setup class by specifying the frequency."""
     pg.ModellingBase.__init__(self, verbose)  # call default constructor
     self.f_ = f                               # save frequencies
     self.setMesh(pg.createMesh1D(1, 6))       # 4 single parameters
예제 #27
0
 def __init__(self, f, verbose=False):  # initialize class
     pg.ModellingBase.__init__(self, verbose)  # call default constructor
     self.f_ = f  # save frequencies
     self.setMesh(pg.createMesh1D(1, 4))  # 4 single parameters
예제 #28
0
 def __init__(self, xvec, verbose=False):
     pg.ModellingBase.__init__(self, verbose)
     self.x = xvec
     self.setMesh(pg.createMesh1D(1, 2))
예제 #29
0
 def __init__(self, xvec, verbose=False):
     pg.ModellingBase.__init__(self, verbose)
     self.x = xvec
     self.setMesh(pg.createMesh1D(1, 2))
예제 #30
0
파일: models.py 프로젝트: ziogibom/gimli
 def __init__(self, f, verbose=False):  # initialize class
     """Setup class by specifying the frequency."""
     pg.ModellingBase.__init__(self, verbose)  # call default constructor
     self.f_ = f  # save frequencies
     self.setMesh(pg.createMesh1D(1, 6))  # 4 single parameters
예제 #31
0
파일: models.py 프로젝트: ziogibom/gimli
 def __init__(self, f, verbose=False):
     """Setup class by specifying the frequency."""
     pg.ModellingBase.__init__(self, verbose)
     self.f_ = f
     self.setMesh(pg.createMesh1D(1, 3))
예제 #32
0
파일: models.py 프로젝트: gimli-org/gimli
 def __init__(self, f, verbose=False):
     """Setup class by specifying the frequency."""
     pg.ModellingBase.__init__(self, verbose)
     self.f_ = f
     self.setMesh(pg.createMesh1D(1, 3))
예제 #33
0
def ReadAndRemoveEM(filename, readsecond=False, doplot=False,
                    dellast=True, ePhi=0.5, ePerc=1., lam=2000.):
    """
        Read res1file and remove EM effects using a double-Cole-Cole model
        fr,rhoa,phi,dphi = ReadAndRemoveEM(filename, readsecond/doplot bools)
    """
    fr, rhoa, phi, drhoa, dphi = read1resfile(filename,
                                              readsecond,
                                              dellast=dellast)
    # forward problem
    mesh = pg.createMesh1D(1, 6)  # 6 independent parameters
    f = DoubleColeColeModelling(mesh, pg.asvector(fr), phi[2] / abs(phi[2]))
    f.regionManager().loadMap("region.control")
    model = f.createStartVector()

    # inversion
    inv = pg.RInversion(phi, f, True, False)
    inv.setAbsoluteError(phi * ePerc * 0.01 + ePhi / 1000.)
    inv.setRobustData(True)

    # inv.setCWeight(pg.RVector(6, 1.0)) # wozu war das denn gut?
    inv.setMarquardtScheme(0.8)
    inv.setLambda(lam)
    inv.setModel(model)
    erg = inv.run()
    inv.echoStatus()
    chi2 = inv.chi2()
    mod0 = pg.RVector(erg)
    mod0[0] = 0.0  # set IP term to zero to obtain pure EM term
    emphi = f.response(mod0)
    resid = (phi - emphi) * 1000.

    if doplot:
        s = "IP: m= " + str(rndig(erg[0])) + " t=" + str(rndig(erg[1])) + \
            " c =" + str(rndig(erg[2]))
        s += "  EM: m= " + str(rndig(erg[3])) + " t=" + str(rndig(erg[4])) + \
            " c =" + str(rndig(erg[5]))
        fig = P.figure(1)
        fig.clf()
        ax = P.subplot(111)
        P.errorbar(
            fr,
            phi *
            1000.,
            yerr=dphi *
            1000.,
            fmt='x-',
            label='measured')
        ax.set_xscale('log')
        P.semilogx(fr, emphi * 1000., label='EM term (CC)')
        P.errorbar(fr, resid, yerr=dphi * 1000., label='IP term')
        ax.set_yscale('log')
        P.xlim((min(fr), max(fr)))
        P.ylim((0.1, max(phi) * 1000.))
        P.xlabel('f in Hz')
        P.ylabel(r'-$\phi$ in mrad')
        P.grid(True)
        P.title(s)
        P.legend(loc=2)  # ('measured','2-cole-cole','residual'))
        fig.show()

    return N.array(fr), N.array(rhoa), N.array(resid), N.array(
        phi) * 1e3, dphi, chi2, N.array(emphi) * 1e3
예제 #34
0
파일: models.py 프로젝트: gimli-org/gimli
 def __init__(self, f, verbose=False):  # initialize class
     pg.ModellingBase.__init__(self, verbose)  # call default constructor
     self.f_ = f                               # save frequencies
     self.setMesh(pg.createMesh1D(1, 4))       # 4 single parameters