def get1DEfields(m1d, sigma, freq, sourceAmp=1.0): """Function to get 1D electrical fields""" # Get the gradient G = m1d.nodalGrad # Mass matrices # Magnetic permeability Mmu = simpeg.Utils.sdiag(m1d.vol * (1.0 / mu_0)) # Conductivity Msig = m1d.getFaceInnerProduct(sigma) # Set up the solution matrix A = G.T * Mmu * G + 1j * 2. * np.pi * freq * Msig # Define the inner part of the solution matrix Aii = A[1:-1, 1:-1] # Define the outer part of the solution matrix Aio = A[1:-1, [0, -1]] # Set the boundary conditions Ed, Eu, Hd, Hu = getEHfields(m1d, sigma, freq, m1d.vectorNx) Etot = (Ed + Eu) if sourceAmp is not None: Etot = ((Etot / Etot[-1]) * sourceAmp ) # Scale the fields to be equal to sourceAmp at the top ## Note: The analytic solution is derived with e^iwt bc = np.r_[Etot[0], Etot[-1]] # The right hand side rhs = Aio * bc # Solve the system Aii_inv = simpeg.Solver(Aii) eii = Aii_inv * rhs # Assign the boundary conditions e = np.r_[bc[0], eii, bc[1]] # Return the electrical fields return e