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
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