Beispiel #1
0
    def HzKernel_layer(self, lamda, f, nlay, sig, chi, depth, h, z, flag):

        """

            Kernel for vertical magnetic component (Hz) due to vertical magnetic
            diopole (VMD) source in (kx,ky) domain

        """
        u0 = lamda
        rTE = np.zeros(lamda.size, dtype=complex)
        if self.jacSwitch == True:
            drTE = np.zeros((nlay, lamda.size), dtype=complex)
            rTE, drTE = rTEfunjac(nlay, f, lamda, sig, chi, depth, self.survey.HalfSwitch)
        else:
            rTE = rTEfunfwd(nlay, f, lamda, sig, chi, depth, self.survey.HalfSwitch)

        if flag=='secondary':

            # Note
            # Here only computes secondary field.
            # I am not sure why it does not work if we add primary term.
            # This term can be analytically evaluated, where h = 0.

            kernel = 1/(4*np.pi)*(rTE*np.exp(-u0*(z+h)))*lamda**3/u0

        else:
            kernel = 1/(4*np.pi)*(np.exp(u0*(z-h))+ rTE*np.exp(-u0*(z+h)))*lamda**3/u0

        if self.jacSwitch == True:
            jackernel = 1/(4*np.pi)*(drTE)*(np.exp(-u0*(z+h))*lamda**3/u0)
            Kernel = []
            Kernel.append(kernel)
            Kernel.append(jackernel)

        else:

            Kernel = kernel


        return  Kernel
Beispiel #2
0
    def HzkernelCirc_layer(self, lamda, f, nlay, sig, chi, depth, h, z, I, a, flag):

        """

                Kernel for vertical magnetic component (Hz) at the center
                due to circular loop source in (kx,ky) domain

                .. math::

                    H_z = \\frac{Ia}{2} \int_0^{\infty} [e^{-u_0|z+h|} + r_{TE}e^{u_0|z-h|}] \\frac{\lambda^2}{u_0} J_1(\lambda a)] d \lambda


        """

        w = 2*np.pi*f
        rTE = np.zeros(lamda.size, dtype=complex)
        u0 = lamda
        if self.jacSwitch ==  True:
            drTE = np.zeros((nlay, lamda.size), dtype=complex)
            rTE, drTE = rTEfunjac(nlay, f, lamda, sig, chi, depth, self.survey.HalfSwitch)
        else:
            rTE = rTEfunfwd(nlay, f, lamda, sig, chi, depth, self.survey.HalfSwitch)

        if flag == 'secondary':
            kernel = I*a*0.5*(rTE*np.exp(-u0*(z+h)))*lamda**2/u0
        else:
            kernel = I*a*0.5*(np.exp(u0*(z-h))+rTE*np.exp(-u0*(z+h)))*lamda**2/u0

        if self.jacSwitch == True:
            jackernel = I*a*0.5*(drTE)*(np.exp(-u0*(z+h))*lamda**2/u0)
            Kernel = []
            Kernel.append(kernel)
            Kernel.append(jackernel)
        else:

            Kernel = kernel

        return  Kernel