Adding notebooks on the MT1D problem

This commit is contained in:
Gudni Karl Rosenkjaer committed 2015-03-02 21:08:32 -08:00
1 parent 52618bac35
commit 63ef5ef380
3 files changed
+1379

No files matched your search

+741
View File
@@ -0,0 +1,741 @@
{
"metadata": {
"name": "",
"signature": "sha256:653b143c4d16cc4ab9cf69a5c5a6b35ab1752aa01ac028f281eaf261a1490775"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import SimPEG as simpeg\n",
"from scipy.constants import mu_0\n",
"def omega(freq):\n",
" \"\"\"Change frequency to angular frequency, omega\"\"\"\n",
" return 2.*np.pi*freq"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Efficiency Warning: Interpolation will be slow, use setup.py!\n",
"\n",
" python setup.py build_ext --inplace\n",
" \n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# M = Mesh.TensorMesh([[(100.,32)],[(100.,34)],[(100.,18)]], x0='CCC')\n",
"M = simpeg.Mesh.TensorMesh([[(100,5,-1.5),(100.,5),(100,5,1.5)],[(100,5,-1.5),(100.,5),(100,5,1.5)],[(100,10,-1.5),(100.,10),(100,10,1.5)]], x0=['C','C','C'])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print M.vectorNz"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[-17499.51171875 -11733.0078125 -7888.671875 -5325.78125 -3617.1875\n",
" -2478.125 -1718.75 -1212.5 -875. -650.\n",
" -500. -400. -300. -200. -100.\n",
" 0. 100. 200. 300. 400.\n",
" 500. 650. 875. 1212.5 1718.75\n",
" 2478.125 3617.1875 5325.78125 7888.671875\n",
" 11733.0078125 17499.51171875]\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Set parameters\n",
"freq = 10\n",
"conds = [0.01]\n",
"elev = 300\n",
"# Setup the models\n",
"sig = np.zeros(M.nC) + 1e-8\n",
"sig[M.gridCC[:,2]<=elev] = conds[0]\n",
"# sig[M.gridCC[:,2]<-600] = 1e-1\n",
"sigBG = np.zeros(M.nC) + 1e-8\n",
"sigBG[M.gridCC[:,2]<=elev] = conds[0]\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Plot the models\n",
"colorbar(M.plotImage(log10(sig)))\n",
"colorbar(M.plotImage(log10(sigBG)))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"<matplotlib.colorbar.Colorbar instance at 0x7f12d2e2d128>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f12dd0b9a10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f12dd0b9c50>"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Get the mass matrix \n",
"# The model\n",
"Msig = M.getEdgeInnerProduct(sig)\n",
"MsigBG = M.getEdgeInnerProduct(sigBG)\n",
"Mmu = M.getFaceInnerProduct(mu_0, invProp=True)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Form the A matrices\n",
"C = M.edgeCurl\n",
"A = C.T*Mmu*C - 1j*omega(freq)*Msig\n",
"ABG = C.T*Mmu*C - 1j*omega(freq)*MsigBG"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are using splu in scipy package. This is bit slow, but on the cluster you can use mumps, which might a lot faster. We can think about having better iterative solver. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"# Solve the systems for each polarization\n",
"Ainv = simpeg.SolverLU(A)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 34.7 s, sys: 420 ms, total: 35.2 s\n",
"Wall time: 35.5 s\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Need to solve x and y polarizations of the source.\n",
"from simpegMT.Utils import get1DEfields\n",
"# Get a 1d solution for a halfspace background\n",
"mesh1d = simpeg.Mesh.TensorMesh([M.hz],np.array([M.x0[2]]))\n",
"e0_1d = get1DEfields(mesh1d,M.r(sigBG,'CC','CC','M')[0,0,:],freq,sourceAmp=1).conj() # conjugate to comply with phase behavior\n",
"# Setup x (east) polarization (_x)\n",
"ex_x = np.zeros(M.vnEx,dtype=complex)\n",
"ey_x = np.zeros((M.nEy,1),dtype=complex)\n",
"ez_x = np.zeros((M.nEz,1),dtype=complex)\n",
"# Assign the source to ex_x\n",
"for i in arange(M.vnEx[0]):\n",
" for j in arange(M.vnEx[1]):\n",
" ex_x[i,j,:] = -e0_1d #Negative to comply with phase orientation.\n",
"\n",
"eBG_x = np.vstack((simpeg.Utils.mkvc(ex_x,2),ey_x,ez_x))\n",
"# Note 100% sure why this has to be negative.\n",
"rhs_x = -ABG*eBG_x"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Setup y (north) polarization (_y)\n",
"ex_y = np.zeros(M.nEx, dtype='complex128')\n",
"ey_y = np.zeros((M.vnEy), dtype='complex128')\n",
"ez_y = np.zeros(M.nEz, dtype='complex128')\n",
"# Assign the source to ex_x\n",
"for i in arange(M.vnEy[0]):\n",
" for j in arange(M.vnEy[1]):\n",
" ey_y[i,j,:] = e0_1d \n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eBG_y = np.r_[ex_y,simpeg.Utils.mkvc(ey_y),ez_y]\n",
"# Note 100% sure why this has to be negative.\n",
"rhs_y = -ABG*eBG_y"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"# Solve each polarization\n",
"e_x = Ainv*rhs_x\n",
"e_y = Ainv*rhs_y"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 346 ms, sys: 1 ms, total: 347 ms\n",
"Wall time: 480 ms\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I want to visualize electrical field, which is a vector, so I average them on to cell center. Also I want to see current density ($\\vec{j} = \\sigma \\vec{e}$)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"Meinv = M.getEdgeInnerProduct(np.ones_like(sig), invMat=True)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"j_x = Meinv*Msig*e_x\n",
"j_y = Meinv*Msig*e_y"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"e_x_CC = M.aveE2CCV*e_x\n",
"e_y_CC = M.aveE2CCV*e_y\n",
"j_x_CC = M.aveE2CCV*j_x\n",
"j_y_CC = M.aveE2CCV*j_y\n",
"# j_x_CC = Utils.sdiag(np.r_[sig, sig, sig])*e_x_CC"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"e_x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": [
"array([ 6.95763292e-07 -5.19497296e-07j,\n",
" 6.95763292e-07 -5.19497296e-07j,\n",
" 6.95763292e-07 -5.19497296e-07j, ...,\n",
" -9.19690759e-13 +1.90393072e-10j,\n",
" -9.42272240e-13 +1.17287969e-10j, -2.84432632e-12 -1.10938670e-10j])"
]
}
],
"prompt_number": 31
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then use \"plotSlice\" function, to visualize 2D sections"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig, ax = plt.subplots(1,2, figsize = (12, 5))\n",
"dat0 = M.plotSlice(abs(e_y_CC), vType='CCv', view='vec', streamOpts={'color': 'k'}, normal='X', ax = ax[0])\n",
"cb0 = plt.colorbar(dat0[0], ax = ax[0])\n",
"dat1 = M.plotSlice(abs(j_y_CC), vType='CCv', view='vec', streamOpts={'color': 'k'}, normal='X', ax = ax[1])\n",
"cb1 = plt.colorbar(dat1[0], ax = ax[1])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f12d2758a50>"
]
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Is it reasonable?: Based on that you put resistive target that makes sense to me; current does not want to flow on resistive target so they just do roundabout:). And see air interface. It is continuous on current but not on electric field, which looks reasonable. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Calculate the data\n",
"rx_x, rx_y = np.meshgrid(np.arange(-250,251,50),np.arange(-250,251,50))\n",
"rx_loc = np.hstack((simpeg.Utils.mkvc(rx_x,2),simpeg.Utils.mkvc(rx_y,2),elev+np.zeros((np.prod(rx_x.shape),1))))\n",
"# Get the projection matrices\n",
"Qex = M.getInterpolationMat(rx_loc,'Ex')\n",
"Qey = M.getInterpolationMat(rx_loc,'Ey')\n",
"Qez = M.getInterpolationMat(rx_loc,'Ez')\n",
"Qfx = M.getInterpolationMat(rx_loc,'Fx')\n",
"Qfy = M.getInterpolationMat(rx_loc,'Fy')\n",
"Qfz = M.getInterpolationMat(rx_loc,'Fz')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"e_x_loc = np.hstack([simpeg.Utils.mkvc(Qex*e_x,2),simpeg.Utils.mkvc(Qey*e_x,2),simpeg.Utils.mkvc(Qez*e_x,2)])\n",
"e_y_loc = np.hstack([simpeg.Utils.mkvc(Qex*e_y,2),simpeg.Utils.mkvc(Qey*e_y,2),simpeg.Utils.mkvc(Qez*e_y,2)])\n",
"Ciw = -C/(1j*omega(freq))\n",
"b_x_loc = np.hstack([simpeg.Utils.mkvc(Qfx*Ciw*e_x,2),simpeg.Utils.mkvc(Qfy*Ciw*e_x,2),simpeg.Utils.mkvc(Qfz*Ciw*e_x,2)])\n",
"b_y_loc = np.hstack([simpeg.Utils.mkvc(Qfx*Ciw*e_y,2),simpeg.Utils.mkvc(Qfy*Ciw*e_y,2),simpeg.Utils.mkvc(Qfz*Ciw*e_y,2)])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy.constants import mu_0\n",
"# Make a combined matrix\n",
"dt = np.dtype([('ex1',complex),('ey1',complex),('ez1',complex),('hx1',complex),('hy1',complex),('hz1',complex),('ex2',complex),('ey2',complex),('ez2',complex),('hx2',complex),('hy2',complex),('hz2',complex)])\n",
"combMat = np.empty((len(e_x_loc)),dtype=dt)\n",
"combMat['ex1'] = e_x_loc[:,0]\n",
"combMat['ey1'] = e_x_loc[:,1]\n",
"combMat['ez1'] = e_x_loc[:,2]\n",
"combMat['ex2'] = e_y_loc[:,0]\n",
"combMat['ey2'] = e_y_loc[:,1]\n",
"combMat['ez2'] = e_y_loc[:,2]\n",
"combMat['hx1'] = b_x_loc[:,0]/mu_0\n",
"combMat['hy1'] = b_x_loc[:,1]/mu_0\n",
"combMat['hz1'] = b_x_loc[:,2]/mu_0\n",
"combMat['hx2'] = b_y_loc[:,0]/mu_0\n",
"combMat['hy2'] = b_y_loc[:,1]/mu_0\n",
"combMat['hz2'] = b_y_loc[:,2]/mu_0\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calculateImpedance(fieldsData):\n",
" ''' \n",
" Function that calculates MT impedance data from a rec array with E and H field data from both polarizations\n",
" '''\n",
" zxx = (fieldsData['ex1']*fieldsData['hy2'] - fieldsData['ex2']*fieldsData['hy1'])/(fieldsData['hx1']*fieldsData['hy2'] - fieldsData['hx2']*fieldsData['hy1'])\n",
" zxy = (-fieldsData['ex1']*fieldsData['hx2'] + fieldsData['ex2']*fieldsData['hx1'])/(fieldsData['hx1']*fieldsData['hy2'] - fieldsData['hx2']*fieldsData['hy1'])\n",
" zyx = (fieldsData['ey1']*fieldsData['hy2'] - fieldsData['ey2']*fieldsData['hy1'])/(fieldsData['hx1']*fieldsData['hy2'] - fieldsData['hx2']*fieldsData['hy1'])\n",
" zyy = (-fieldsData['ey1']*fieldsData['hx2'] + fieldsData['ey2']*fieldsData['hx1'])/(fieldsData['hx1']*fieldsData['hy2'] - fieldsData['hx2']*fieldsData['hy1'])\n",
" return zxx, zxy, zyx, zyy\n",
"\n",
"zxx, zxy, zyx, zyy = calculateImpedance(combMat)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"zxy"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"array([-0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j, -0.06237698-0.06472069j,\n",
" -0.06237698-0.06472069j])"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ind = np.where(np.sum(np.power(rx_loc - np.array([0,0,elev]),2),axis=1)< 5)\n",
"def appResPhs(freq,z):\n",
" app_res = ((1./(8e-7*np.pi**2))/freq)*np.abs(z)**2\n",
" app_phs = np.arctan2(z.imag,z.real)*(180/np.pi)\n",
" return app_res, app_phs\n",
"\n",
"print appResPhs(freq,zxy[ind])\n",
"print appResPhs(freq,zyx[ind])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"(array([ 102.33002434]), array([-133.94357304]))\n",
"(array([ 102.33002434]), array([ 46.05642696]))\n"
]
}
],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"e0_1d\n",
"h0_1dC = -(mesh1d.nodalGrad*e0_1d)/(1j*omega(freq)*mu_0)\n",
"h0_1d = mesh1d.getInterpolationMat(mesh1d.vectorNx,'CC')*h0_1dC\n",
"\n",
"print e0_1d, h0_1d, appResPhs(freq,e0_1d/h0_1d)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 6.95763292e-07 -5.19497296e-07j 9.74760218e-06 -1.09092785e-05j\n",
" 1.74907169e-04 +1.24344756e-04j -5.21083562e-04 +1.34839517e-03j\n",
" -4.87010903e-03 +6.63069113e-04j -8.61854919e-03 -6.03020882e-03j\n",
" -7.68552978e-03 -1.53974787e-02j -3.16876824e-03 -2.35863583e-02j\n",
" 2.49400722e-03 -2.94018473e-02j 7.73825040e-03 -3.31542272e-02j\n",
" 1.19706555e-02 -3.54839735e-02j 1.51424717e-02 -3.69189921e-02j\n",
" 1.86057886e-02 -3.82344505e-02j 2.23709926e-02 -3.94030035e-02j\n",
" 2.64473102e-02 -4.03949222e-02j 3.08425733e-02 -4.11780213e-02j\n",
" 3.55629651e-02 -4.17175972e-02j 4.06127458e-02 -4.19763792e-02j\n",
" 4.59939588e-02 -4.19144958e-02j 5.15406437e-02 -4.16710354e-02j\n",
" 5.70873289e-02 -4.14275746e-02j 6.54073573e-02 -4.10623825e-02j\n",
" 7.78874014e-02 -4.05145921e-02j 9.66074704e-02 -3.96929008e-02j\n",
" 1.24687581e-01 -3.84603474e-02j 1.66807761e-01 -3.66114701e-02j\n",
" 2.29988062e-01 -3.38380118e-02j 3.24758579e-01 -2.96773825e-02j\n",
" 4.66914483e-01 -2.34350351e-02j 6.80148567e-01 -1.40669735e-02j\n",
" 1.00000000e+00 -0.00000000e+00j] [ 2.28193925e-05 +1.98808291e-05j -2.58228538e-04 +3.34422815e-04j\n",
" -3.80760340e-03 -1.84599759e-03j 6.28457755e-04 -2.07183543e-02j\n",
" 4.66852476e-02 -3.79022309e-02j 1.23507371e-01 -7.33469297e-03j\n",
" 1.85411921e-01 +7.40235581e-02j 2.12886863e-01 +1.72701395e-01j\n",
" 2.14025522e-01 +2.62118992e-01j 2.02514232e-01 +3.32494576e-01j\n",
" 1.87732553e-01 +3.83973226e-01j 1.74175989e-01 +4.20174709e-01j\n",
" 1.57301859e-01 +4.57751431e-01j 1.36813469e-01 +4.96570158e-01j\n",
" 1.12404317e-01 +5.36469120e-01j 8.37593755e-02 +5.77255592e-01j\n",
" 5.05566063e-02 +6.18703401e-01j 1.24687508e-02 +6.60550390e-01j\n",
" -1.93361233e-02 +6.92017214e-01j -3.08346503e-02 +7.02495869e-01j\n",
" -3.08347046e-02 +7.02495910e-01j -3.08347965e-02 +7.02495972e-01j\n",
" -3.08349577e-02 +7.02496064e-01j -3.08352521e-02 +7.02496199e-01j\n",
" -3.08358123e-02 +7.02496397e-01j -3.08369191e-02 +7.02496682e-01j\n",
" -3.08391789e-02 +7.02497084e-01j -3.08439181e-02 +7.02497626e-01j\n",
" -3.08540630e-02 +7.02498307e-01j -3.08761114e-02 +7.02499028e-01j\n",
" -3.08957218e-02 +7.02499433e-01j] (array([ 1.04250623e+01, 1.51842290e+01, 3.25755099e+01,\n",
" 6.16004358e+01, 8.46106546e+01, 9.15416501e+01,\n",
" 9.41057689e+01, 9.54534366e+01, 9.62980028e+01,\n",
" 9.68560992e+01, 9.72291393e+01, 9.74787343e+01,\n",
" 9.77427801e+01, 9.80109244e+01, 9.82749421e+01,\n",
" 9.85284962e+01, 9.87669033e+01, 9.89869077e+01,\n",
" 1.02330024e+02, 1.12522515e+02, 1.27437698e+02,\n",
" 1.52771347e+02, 1.97433785e+02, 2.79416850e+02,\n",
" 4.36117589e+02, 7.47052417e+02, 1.38419269e+03,\n",
" 2.72406252e+03, 5.59822214e+03, 1.18542471e+04,\n",
" 2.56141002e+04]), array([ -77.81035558, -175.89268984, -170.45525015, -160.60855616,\n",
" -148.68117232, -141.62175107, -138.28949602, -136.70192166,\n",
" -135.91915906, -135.51770546, -135.30300073, -135.18323205,\n",
" -135.08656033, -135.01054362, -134.95270735, -134.91062064,\n",
" -134.88195438, -134.86452348, -133.94357304, -131.46909534,\n",
" -128.48120651, -124.63366007, -119.99533648, -114.8495013 ,\n",
" -109.65593591, -104.892614 , -100.88348042, -97.73537134,\n",
" -95.3881792 , -93.70146842, -92.51822905]))\n"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Get the analytic solution for the halfspace.\n",
"import simpegMT as simpegmt\n",
"sig1DBG = M.r(sigBG,'CC','CC','M')[0,0,:]\n",
"anaEd, anaEu, anaHd, anaHu = simpegmt.Utils.MT1Danalytic.getEHfields(mesh1d,sig1DBG,freq,mesh1d.vectorNx)\n",
"anaEtemp = anaEd+anaEu\n",
"anaHtemp = anaHd+anaHu\n",
"# Scale the solution\n",
"anaE = (anaEtemp/anaEtemp[-1])#.conj()\n",
"anaH = (anaHtemp/anaEtemp[-1])#.conj()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"anaZ = anaE/anaH\n",
"print anaZ, appResPhs(freq,anaZ)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283185+0.06283185j 0.06283185+0.06283185j\n",
" 0.06283185+0.06283185j 0.06283186+0.07072753j 0.06283186+0.0786232j\n",
" 0.06283186+0.09046671j 0.06283188+0.10823197j 0.06283192+0.13487985j\n",
" 0.06283203+0.17485166j 0.06283233+0.23480933j 0.06283320+0.32474574j\n",
" 0.06283584+0.4596502j 0.06284399+0.66200657j 0.06286981+0.96554066j\n",
" 0.06295315+1.42084151j] (array([ 100. , 100. , 100. , 100. ,\n",
" 100. , 100. , 100. , 100. ,\n",
" 100. , 100. , 100. , 100. ,\n",
" 100. , 100. , 100. , 100. ,\n",
" 100. , 100. , 100. , 113.3559252 ,\n",
" 128.29098377, 153.65444595, 198.36160419, 280.41175545,\n",
" 437.21314017, 748.29899993, 1385.66608888, 2725.87734814,\n",
" 5600.55464041, 11857.38236111, 25618.47494334]), array([ 44.99999841, 44.99999841, 44.99999841, 44.99999841,\n",
" 44.99999841, 44.99999841, 44.99999841, 44.99999841,\n",
" 44.99999841, 44.99999841, 44.99999841, 44.99999841,\n",
" 44.99999841, 44.99999841, 44.99999841, 44.99999841,\n",
" 44.99999841, 44.99999841, 44.99999841, 48.38323441,\n",
" 51.36984352, 55.21885339, 59.86356014, 65.02219199,\n",
" 70.23436618, 75.01927161, 79.04947649, 82.2157119 ,\n",
" 84.57718798, 86.27452602, 87.46305803]))\n"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
}
],
"metadata": {}
}
]
}
+447
View File
@@ -0,0 +1,447 @@
{
"metadata": {
"name": "",
"signature": "sha256:74ba4ac0804b189d65dce7f7af6f88a605b83052cf38c5acb492600297a13398"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Simple notebook on performing a 1D MT problem.\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#from IPython.display import Latex"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Maxwell's equations in 1D are as follows\n",
"\n",
"\n",
"$i \\omega b = - \\partial_z e $ \n",
"\n",
"$ s = \\partial_z(\\mu^{-1} b) - \\sigma(z) e$\n",
"\n",
"$b(0) = 1 \\hspace{1cm} ;\\hspace{1cm} b(-\\infty) = 0$\n",
"\n",
"\n",
"\n",
"where $e = \\widehat{\\overrightarrow{E}}_x $ and $b = \\widehat{\\overrightarrow{B}}_y$\n",
"\n",
"In weak form the equations become\n",
"\n",
"$i \\omega(b,f) = - (\\partial_ze,f)$ \n",
"\n",
"$(s,w) = -(\\mu^{-1} b, \\partial_z w) - (\\sigma(z) e, w)$\n",
"\n",
"\n",
"where f and w are abritrary functions living in same discritizational space as b and e, respectivily.\n",
"\n",
"We consider e on nodes and b on cell centers. This way the derivative of any nodal function becomes\n",
"\n",
"$ (\\partial_z u)_k \\approx $\n",
"\n",
"$h_{k}^{-1} ( u_{k+\\frac{1}{2}} - u_{k-\\frac{1}{2}}) + O(h^2) $\n",
"\n",
"Matrix form\n",
"\n",
"$ e_z \\approx \\textbf{L}^{-1} \\textbf{G} e = \\begin{bmatrix} h_1^{-1} & & & \\\\\\\\ & h_2^{-1} & & \\\\\\\\ & & \\ddots & \\\\\\\\ & & & h_n^{-1} \\end{bmatrix}^{(n,n)}\n",
"\\begin{bmatrix} -1 & 1 & & & & \\\\\\\\ & -1 & 1 & & & \\\\\\\\ & & \\ddots & \\ddots & \\\\\\\\ & & & -1 & 1 \\end{bmatrix}^{(n,n+1)} \n",
"\\begin{bmatrix} e_1 \\\\\\\\ \\\\\\\\ \\vdots \\\\\\\\ \\\\\\\\ e_{n+1} \\end{bmatrix}^{(n+1,1)} $\n",
"\n",
"where $ \\textbf{L} = diag(h) $ is the cell size and $ \\textbf{G}$ is the gradient operator with -1,1 representing the topology of the mesh, taking the difference between adjoint cells.\n",
"\n",
"We need to compute 2 inner products, on cell centers and from nodes to cell centers.\n",
"\n",
"Cell centers inner product is\n",
"\n",
"$ (b,f) \\approx \\sum\\limits_k h_k \\textbf{b}_k \\textbf{f}_k + O(h^2) $\n",
"\n",
"and in matrix from\n",
"\n",
"$ (b,) \\approx \\textbf{b}^T \\textbf{M}^f \\textbf{f}$ and $ (\\mu^{-1} b,f) \\approx \\textbf{b}^T \\textbf{M}_{\\mu}^f \\textbf{f}$ \n",
"\n",
"where $ \\textbf{M}_{\\mu}^f = diag(\\textbf{h} \\odot \\mu^{-1}) $ and $ \\textbf{M}^f = diag(\\textbf{h}) $ are the matrices.\n",
"Nodes to cell centers inner product is\n",
"\n",
"$ (\\sigma e, w) \\approx \\sum\\limits_k \\frac{h_k \\sigma_k}{4} ( e_{k+\\frac{1}{2}} w_{k+\\frac{1}{2}} + e_{k+\\frac{1}{2}} w_{k+\\frac{1}{2}} )$\n",
"\n",
"and in matrix from\n",
"\n",
"$ (\\sigma e, w ) \\approx (\\textbf{h} \\odot \\sigma )^T ( \\textbf{A}_v (\\textbf{e} \\odot \\textbf{w} = \\textbf{w}^T diag(\\textbf{A}_v^T (\\textbf{h} \\odot \\sigma)) \\textbf{e} $\n",
"\n",
"Here $\\odot$ is a point wise Hadamard product and $\\textbf{A}_v$ is the averaging operator/matrix from nodes to cell centers\n",
"\n",
"$ \\textbf{A}_v = \\begin{bmatrix} \\frac{1}{2} & \\frac{1}{2} & & \\\\\\\\ & \\ddots & \\ddots & \\\\\\\\ & & \\frac{1}{2} & \\frac{1}{2} \\end{bmatrix} ^{(n+1 , n)} $\n",
"\n",
"The sigma mass matrix is defined as \n",
"\n",
"$ \\textbf{M}_{\\sigma}^{e} = diag(\\textbf{A}_v^T (\\textbf{h} \\odot \\sigma)) $\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the MT problem there is no source in the domain, so $ s = 0 $. How ever the boundary conditions provide the right hand side where \n",
"\n",
"$ (\\partial_z \\mu^{-1} b, w ) = - (\\mu^{-1} b, \\partial_z w ) + (\\mu^{-1} b w )|_0^{end} $\n",
"\n",
"where \n",
"\n",
"$ (\\mu^{-1} b w )|_0^{end} = \\textbf{bc}^T (\\textbf{BC w}) $\n",
"\n",
"here $\\textbf{BC}$ is an matrix operator that extracts the boundary elements from $ \\textbf{w}$ and $\\textbf{bc} $ are the known boundary condintions. For the 1D case with homogenous boundary conditions we have \n",
"\n",
"$ \\textbf{B} = \\begin{bmatrix} -1 & 0 \\\\\\\\ \\vdots & \\vdots \\\\\\\\ 0 & 1 \\end{bmatrix} $ \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The weak form is \n",
"\n",
"$ (\\mu^{-1} b, \\partial_z w) + (\\sigma e, w) = (\\mu^{-1} b w )|_0^{end} $\n",
"\n",
"$ (i \\omega b,f) + (\\partial_z e , f) = 0 $\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using the above matrix represntation we get the Maxwells equations in following form\n",
"\n",
"$ i \\omega \\textbf{f}^T \\textbf{M}^f \\textbf{b} + \\textbf{f}^T \\textbf{M}^f \\textbf{L}^{-1} \\textbf{G} \\textbf{e} = 0 $ \n",
"\n",
"$ \\textbf{w}^T \\textbf{G}^T \\textbf{L}^{-1} \\textbf{M}^f_{\\mu} \\textbf{b} + \\textbf{w}^T \\textbf{M}_{\\sigma}^e \\textbf{e} = \\textbf{w}^T \\textbf{bc}^T \\textbf{BC} $ \n",
"\n",
"Here we use that \n",
"\n",
"$ (\\textbf{b},\\textbf{f}) \\approx \\textbf{b}^T \\textbf{M}^f \\textbf{f} = \\textbf{f}^T \\textbf{M}^f \\textbf{b} $ \n",
"\n",
"since $\\textbf{M}^f$ is a symmetric diaoganal matrix of size n by n and $\\textbf{b}$ and $\\textbf{f}$ are vectors of length n."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We eliminate testing vectors and get system of equations to solve\n",
"\n",
"$ i \\omega \\textbf{b} + \\textbf{L}^{-1} \\textbf{G} \\textbf{e} = 0 $ \n",
"\n",
"$ \\textbf{G}^T \\textbf{L}^{-1} \\textbf{M}^f_{\\mu} \\textbf{b} + \\textbf{M}_{\\sigma}^e \\textbf{e} = \\textbf{bc}^T \\textbf{BC} $ \n",
"\n",
"and as $ \\textbf{A} \\textbf{x} = \\textbf{bc} $ system that we will solve, where \n",
"\n",
"$ \\textbf{A} = \\begin{bmatrix} \\textbf{G}^T \\textbf{L}^{-1} \\textbf{M}^f_{\\mu} & \\textbf{M}_{\\sigma}^e \\\\\\\\ i \\omega & \\textbf{L}^{-1} \\textbf{G} \\end{bmatrix} $\n",
"\n",
"$ \\textbf{x} = \\begin{bmatrix} \\textbf{b} \\\\\\\\ \\textbf{e} \\end{bmatrix} $\n",
"\n",
"$ \\textbf{bc} = \\begin{bmatrix} \\textbf{bc}^T \\textbf{BC} \\\\\\\\ \\textbf{0} \\end{bmatrix} $ "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sys\n",
"sys.path.append('C:/GudniWork/Codes/python/simpeg')\n",
"import SimPEG as simpeg, numpy as np, scipy, scipy.sparse as sp"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Efficiency Warning: Interpolation will be slow, use setup.py!\n",
"\n",
" python setup.py build_ext --inplace\n",
" \n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have\n",
"\n",
"$ i \\omega b = - \\partial_z e \\hspace{1cm} ; \\hspace{1cm} \\partial_z(\\mu^{-1} b) - \\sigma(z) e \\hspace{1cm} ;\\hspace{1cm} b(0) = 1 \\hspace{1cm} ;\\hspace{1cm} b(-\\infty) = 0 $\n",
"\n",
" \n",
"To deal with boundary: we assume that below depth L both $ \\sigma $ and $ \\mu $ are constants ($ z < - L $). At the boundary we have that \n",
"\n",
"$ e = c \\exp(ikz) \\hspace{0.2cm} where \\hspace{0.2cm} k = \\sqrt{i\\omega\\mu\\sigma} $. \n",
"\n",
"Therefore for $ z < - L $ we have that\n",
"\n",
"$\\omega b - k e = 0 $.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We discretize the e field on the nodes and b field at the cell centers. The system we want to solve is \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$\\begin{bmatrix} i \\omega & \\frac{\\partial}{\\partial z} \\\\\\\\ \\frac{1}{\\mu} \\frac{\\partial}{\\partial z} & -\\sigma \\end{bmatrix} \n",
"\\begin{bmatrix} b \\\\\\\\ e \\end{bmatrix} = \\begin{bmatrix} s1 \\\\\\\\ s2 \\end{bmatrix}$\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" # Set up the problem\n",
"mu = 4*np.pi*1e-7\n",
"eps0 = 8.85e-12\n",
"# Frequency\n",
"fr = np.array([1e1]) #np.logspace(0,5,200) #np.array([2000]) #np.logspace(-4,5,82)\n",
"omega = 2*np.pi*fr\n",
"# Mesh\n",
"sig0 = 1e-2\n",
"#L = 3*np.sqrt(2/(mu*omega[0]*sig0))\n",
"#nn=np.ceil(np.log(0.3*L + 1)/np.log(1.3))\n",
"#h = 5*(1.3**(np.arange(nn+1)))\n",
"\n",
"h = np.ones(18)\n",
"x0 = np.array([0])\n",
"#sig = sig0*np.ones((len(h),1)) \n",
"#sig[0:50] = 0.1\n",
"#sig[50:100] = 1\n",
"# Make the mesh\n",
"mesh = simpeg.Mesh.TensorMesh([h],x0)\n",
"sig = np.zeros(mesh.nC) + 1e-8\n",
"sig[mesh.vectorCCx<=0] = 1e-2"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fr,omega"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"(array([ 10.]), array([ 62.83185307]))"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Make the operators\n",
"G = mesh.nodalGrad\n",
"Av = mesh.aveN2CC\n",
"Li = scipy.sparse.spdiags(1/mesh.hx,0,mesh.nNx,mesh.nNx)\n",
"Mmu = scipy.sparse.spdiags(mesh.hx/mu,0,mesh.nCx,mesh.nCx)\n",
"Msig = scipy.sparse.spdiags(Av.T.dot(mesh.hx*sig.ravel()),0,mesh.nNx,mesh.nNx)\n",
"# The boundaries\n",
"bc_b = np.zeros((mesh.nCx,1))\n",
"bc_b[0] = -1 # Set the top b field to 1\n",
"bc_e = np.zeros((mesh.nNx,1))\n",
"# Make the sparse matrix\n",
"bc = sp.vstack((bc_b,bc_e))\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"b = np.empty((mesh.nCx,len(omega)),dtype=np.complex64)\n",
"e = np.empty((mesh.nNx,len(omega)),dtype=np.complex64)\n",
"# Loop all the frequencies\n",
"for nrOm, om in enumerate(omega):\n",
" # Left hand side\n",
" A = sp.vstack((sp.hstack(( -G.conj().T.dot(Mmu), - Msig)), sp.hstack((1j*om*scipy.sparse.identity(mesh.nCx) , G))))\n",
" #A = A.tocsr\n",
" # Solve the system\n",
" bef = scipy.sparse.linalg.spsolve(A,bc)\n",
" # Sort the output\n",
" b[:,nrOm] = bef[0:mesh.nCx]\n",
" e[:,nrOm] = bef[mesh.nCx::]\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/home/Gudni/anaconda/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py:90: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n",
" SparseEfficiencyWarning)\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import matplotlib.pyplot as plt\n",
"# Plot the solution\n",
"z=e[0,:]/(b[0,:]/mu)\n",
"app_res = ((1./(8e-7*np.pi**2))/fr)*np.abs(z)**2\n",
"app_phs = np.arctan(z.imag/z.real)*(180/np.pi)\n",
"ax_res = plt.subplot(2,1,1)\n",
"ax_res.loglog(fr,app_res)\n",
"ax_phs = plt.subplot(2,1,2)\n",
"ax_phs.semilogx(fr,app_phs)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"[<matplotlib.lines.Line2D at 0x7fa8671e1fd0>]"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Calculate the impedance\n",
"z = e[0,:]/(b[0,:]/mu)\n",
"z"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"array([-5714285.5+0.00050081j], dtype=complex64)"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"app_res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": [
"array([ 4.13555827e+17])"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
}
],
"metadata": {}
}
]
}
+191
View File
@@ -0,0 +1,191 @@
{
"metadata": {
"name": "",
"signature": "sha256:4f51688cd2ee8a11dad3df1928925d3c9cad0da43a3f6a3c3c840024caae5fe1"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Issues with padding cells and high frequencies in the analytic MT layered earth."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import SimPEG as simpeg\n",
"elev = 300\n",
"# 3D mesh and model\n",
"M = simpeg.Mesh.TensorMesh([[(100,5,-1.5),(100.,5),(100,5,1.5)],[(100,5,-1.5),(100.,5),(100,5,1.5)],[(100,10,-1.5),(100.,10),(100,10,1.5)]], x0=['C','C','C'])\n",
"conds = [1,1e-2]\n",
"sig = simpeg.Utils.ModelBuilder.defineBlock(M.gridCC,[-10000,-10000,-200],[10000,10000,0],conds)\n",
"sig[M.gridCC[:,2]>elev] = 1e-8\n",
"sig[M.gridCC[:,2]<-600] = 1e-1\n",
"# Make the 1D mesh and model\n",
"mesh1d = simpeg.Mesh.TensorMesh([M.hz],np.array([M.x0[2]]))\n",
"sig1D = M.r(sig,'CC','CC','M')[0,0,:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Efficiency Warning: Interpolation will be slow, use setup.py!\n",
"\n",
" python setup.py build_ext --inplace\n",
" \n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Run for high frequency\n",
"freq = 1e4"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Run the analytic problem\n",
"import simpegMT as simpegmt\n",
"anaEd, anaEu, anaHd, anaHu = simpegmt.Utils.MT1Danalytic.getEHfields(mesh1d,sig1D,freq,np.array([300]))\n",
"anaE = anaEd+anaEu\n",
"anaH = anaHd+anaHu\n",
"anaZ = anaE/anaH\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"anaZ"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"array([ nan+nanj])"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Returns nan because in the analytic solution the propagation of the fields in the layer \"blows\" up."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sig = 10\n",
"sig0 = 20\n",
"mu = 4*np.pi*1e-7\n",
"eps = 8.85*1e-12\n",
"for h in [10000,5000,1000,500,100,50,10]:\n",
" w = 2*np.pi*freq\n",
" k0 = np.sqrt(eps*mu*w**2-1j*mu*sig0*w)\n",
" k = np.sqrt(eps*mu*w**2-1j*mu*sig*w)\n",
" zp = (w*mu)/k\n",
" yp1 = k0/(w*mu)\n",
" # Convert fields to down/up going components in layer below current layer\n",
" Pj1 = np.array([[1,1],[yp1,-yp1]])\n",
" # Convert fields to down/up going components in current layer\n",
" Pjinv = 1./2*np.array([[1,zp],[1,-zp]])\n",
" # Propagate down and up components through the current layer\n",
" elamh = np.array([[np.exp(-1j*k*h),0],[0,np.exp(1j*k*h)]])\n",
" UD = elamh.dot(Pjinv.dot(Pj1)).dot([1,0])\n",
" print h, w, k \n",
" print elamh\n",
" #print Pj1, Pjinv, elamh\n",
" print UD"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10000 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 0. -0.j 0. +0.j]\n",
" [ 0. +0.j inf+infj]]\n",
"[ 0. +0.j nan+nanj]\n",
"5000 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 0. -0.j 0. +0.j]\n",
" [ 0. +0.j inf+infj]]\n",
"[ 0. +0.j nan+nanj]\n",
"1000 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 1.33271357e-273 -2.32814399e-278j 0.00000000e+000 +0.00000000e+000j]\n",
" [ 0.00000000e+000 +0.00000000e+000j 7.50348781e+272 +1.31079930e+268j]]\n",
"[ 1.60872758e-273 -2.81162844e-278j -1.55402321e+272 -2.70737840e+267j]\n",
"500 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 3.65063497e-137 -3.18868363e-142j 0.00000000e+000 +0.00000000e+000j]\n",
" [ 0.00000000e+000 +0.00000000e+000j 2.73924950e+136 +2.39262488e+131j]]\n",
"[ 4.40670622e-137 -3.85267017e-142j -5.67317146e+135 -4.92836188e+130j]\n",
"100 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 5.15790907e-28 -9.01045454e-34j 0.00000000e+00 +0.00000000e+00j]\n",
" [ 0.00000000e+00 +0.00000000e+00j 1.93877012e+27 +3.38687631e+21j]]\n",
"[ 6.22614702e-28 -1.09272824e-33j -4.01532439e+26 -6.82387175e+20j]\n",
"50 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 2.27110305e-14 -1.98371768e-20j 0.00000000e+00 +0.00000000e+00j]\n",
" [ 0.00000000e+00 +0.00000000e+00j 4.40314674e+13 +3.84597256e+07j]]\n",
"[ 2.74146389e-14 -2.41688373e-20j -9.11921548e+12 -7.53244599e+06j]\n",
"10 62831.8530718 (0.628318548187-0.628318513249j)\n",
"[[ 1.86744306e-03 -3.26227365e-10j 0.00000000e+00 +0.00000000e+00j]\n",
" [ 0.00000000e+00 +0.00000000e+00j 5.35491562e+02 +9.35460925e-05j]]\n",
"[ 2.25420318e-03 -4.12148003e-10j -1.10903934e+02 -1.41102131e-05j]\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Is there a smart way to \"fix\" this so that the 1D layering can be used for the analytic solution?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}