Derivative test MT1D is now working and passing with 2 order convergence.

This commit is contained in:
GudniRos committed 2015-06-19 12:47:31 -07:00
1 parent 8ed4d41b2d
commit 60b6c24e19
3 files changed
+437 -3

No files matched your search

+432 -1
View File
@@ -1 +1,432 @@
{"nbformat_minor": 0, "cells": [{"source": "Testing derivaties for 1D MT problem.\n\nEspecially the rx.projectFieldsDeriv", "cell_type": "markdown", "metadata": {}}, {"execution_count": 1, "cell_type": "code", "source": "import SimPEG as simpeg\nimport simpegEM as simpegem, simpegMT as simpegmt\nfrom SimPEG.Utils import meshTensor\nimport numpy as np", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"execution_count": 3, "cell_type": "code", "source": "# Setup the problem\nsigmaHalf = 1e-2\n# Frequency\nnFreq = 33\nfreqs = np.logspace(3,-3,nFreq)\n# Make the mesh\nct = 5\nair = meshTensor([(ct,25,1.3)])\n# coreT0 = meshTensor([(ct,15,1.2)])\n# coreT1 = np.kron(meshTensor([(coreT0[-1],15,1.3)]),np.ones((7,)))\ncore = np.concatenate( ( np.kron(meshTensor([(ct,15,-1.2)]),np.ones((10,))) , meshTensor([(ct,20)]) ) )\nbot = meshTensor([(core[0],10,-1.3)])\nx0 = -np.array([np.sum(np.concatenate((core,bot)))])\nm1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core,air))], x0=x0)\n# Make the model\nsigma = np.zeros(m1d.nC) + sigmaHalf\nsigma[ m1d.gridCC > 0 ] = 1e-8\n\nrxList = []\nfor rxType in ['z1dr','z1di']:\n rxList.append(simpegmt.SurveyMT.RxMT(simpeg.mkvc(np.array([0.0]),2).T,rxType))\n# Source list\nsrcList =[]\ntD = False\nif tD:\n for freq in freqs:\n srcList.append(simpegmt.SurveyMT.srcMT_polxy_1DhomotD(rxList,freq))\nelse:\n for freq in freqs:\n srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq,sigma))\n# Make the survey\nsurvey = simpegmt.SurveyMT.SurveyMT(srcList)\n\n# Set the problem\nproblem = simpegmt.ProblemMT1D.eForm_psField(m1d)\nproblem.pair(survey)\n\n# Get the fields\nfields = problem.fields(sigma)\n\n# Project the data\ndata = survey.projectFields(fields)\n", "outputs": [{"output_type": "stream", "name": "stdout", "text": "Project at freq: 1.000e+03\nProject at freq: 6.494e+02\nProject at freq: 4.217e+02\nProject at freq: 2.738e+02\nProject at freq: 1.778e+02\nProject at freq: 1.155e+02\nProject at freq: 7.499e+01\nProject at freq: 4.870e+01\nProject at freq: 3.162e+01\nProject at freq: 2.054e+01\nProject at freq: 1.334e+01\nProject at freq: 8.660e+00\nProject at freq: 5.623e+00\nProject at freq: 3.652e+00\nProject at freq: 2.371e+00\nProject at freq: 1.540e+00\nProject at freq: 1.000e+00\nProject at freq: 6.494e-01\nProject at freq: 4.217e-01\nProject at freq: 2.738e-01\nProject at freq: 1.778e-01\nProject at freq: 1.155e-01\nProject at freq: 7.499e-02\nProject at freq: 4.870e-02\nProject at freq: 3.162e-02\nProject at freq: 2.054e-02\nProject at freq: 1.334e-02\nProject at freq: 8.660e-03\nProject at freq: 5.623e-03\nProject at freq: 3.652e-03\nProject at freq: 2.371e-03\nProject at freq: 1.540e-03\nProject at freq: 1.000e-03\n"}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "We need calculate this derivative. \n\\begin{align}\n\\underbrace{\\frac{\\partial P(f(u(m)),m^{fix})}{\\partial f}}_{Rx}\n\\end{align}\n\nUse the rule\n\\begin{align}\n\\frac{d}{dx}\\left( \\frac{a(x)}{b(x)} \\right) = \\frac{\\frac{d }{dx} a(x) b(x) - a(x)\\frac{d }{dx} b(x) }{ b(x)^2 }\n\\end{align}\n\nIn the case of the 1D MT problem the data is calculated as \n\\begin{align}\nMT1Ddata = P(f(m)) &= \\frac{P_{ex} f_e(src,m)}{P_{bx} f_b(src,m) \\frac{1}{\\mu_0}} = \\frac{P_e u}{P_b f_b(u)} \\\\\n\\frac{\\partial P(f(m))}{\\partial u} v &= \\frac{P_e}{P_b \\frac{1}{mu_0} f_b(u)}v - \\frac{P_e u}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)^2} P_b \\frac{1}{mu_0} \\frac{d f_b}{du} v\n\\end{align}\nwhere u is the fields that we solve for. \n\\begin{align}\n\\frac{d f_b}{du} = - \\frac{1}{i \\omega} \\nabla \n\\end{align}\n\n", "cell_type": "markdown", "metadata": {}}, {"execution_count": 4, "cell_type": "code", "source": "# Unused code &= \\frac{ P_{ex} P_{bx} \\frac{1}{\\mu_0} \\left( f_b(src,m) - f_e(src,m) \\right) } { \\left(P_{bx}f_b(src,m) \\frac{1}{\\mu_0} \\right)^2 }", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}, {"source": "As matrices the formulas above can be written as\n\\begin{align}\n\\left[ \\frac{\\partial P(f(m))}{\\partial u} v \\right] = diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] [P_e v] - diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] \\left[ P_b \\frac{d f_b}{du}(v) \\frac{1}{mu_0} \\right]\n\\end{align}\n\n", "cell_type": "markdown", "metadata": {}}, {"source": "The adjoint problem is done simliarly\n\\begin{align}\n\\left[ \\frac{\\partial P(f(m))}{\\partial u} v \\right]^T = [P_e v]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T - \\left[ P_b \\frac{d f_b}{du}(v) \\frac{1}{mu_0} \\right]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T \n\\end{align}\n", "cell_type": "markdown", "metadata": {}}, {"execution_count": 6, "cLine truncated
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing derivaties for 1D MT problem.\n",
"\n",
"Especially the rx.projectFieldsDeriv"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import SimPEG as simpeg\n",
"import simpegEM as simpegem, simpegMT as simpegmt\n",
"from SimPEG.Utils import meshTensor\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Project at freq: 1.000e+02\n"
]
}
],
"source": [
"# Setup the problem\n",
"sigmaHalf = 1e-2\n",
"# Frequency\n",
"nFreq = 33\n",
"# freqs = np.logspace(3,-3,nFreq)\n",
"freqs = np.array([100])\n",
"# Make the mesh\n",
"ct = 5\n",
"air = meshTensor([(ct,25,1.3)])\n",
"# coreT0 = meshTensor([(ct,15,1.2)])\n",
"# coreT1 = np.kron(meshTensor([(coreT0[-1],15,1.3)]),np.ones((7,)))\n",
"core = np.concatenate( ( np.kron(meshTensor([(ct,15,-1.2)]),np.ones((10,))) , meshTensor([(ct,20)]) ) )\n",
"bot = meshTensor([(core[0],10,-1.3)])\n",
"x0 = -np.array([np.sum(np.concatenate((core,bot)))])\n",
"# Change to use no air\n",
"m1d = simpeg.Mesh.TensorMesh([np.concatenate((bot,core))], x0=x0)\n",
"# Make the model\n",
"sigma = np.zeros(m1d.nC) + sigmaHalf\n",
"sigma[ m1d.gridCC > 0 ] = 1e-8\n",
"\n",
"rxList = []\n",
"for rxType in ['z1dr','z1di']:\n",
" rxList.append(simpegmt.SurveyMT.RxMT(simpeg.mkvc(np.array([0.0]),2).T,rxType))\n",
"# Source list\n",
"srcList =[]\n",
"tD = False\n",
"if tD:\n",
" for freq in freqs:\n",
" srcList.append(simpegmt.SurveyMT.srcMT_polxy_1DhomotD(rxList,freq))\n",
"else:\n",
" for freq in freqs:\n",
" srcList.append(simpegmt.SurveyMT.srcMT_polxy_1Dprimary(rxList,freq,sigma))\n",
"# Make the survey\n",
"survey = simpegmt.SurveyMT.SurveyMT(srcList)\n",
"\n",
"# Set the problem\n",
"problem = simpegmt.ProblemMT1D.eForm_psField(m1d)\n",
"problem.pair(survey)\n",
"\n",
"# Get the fields\n",
"fields = problem.fields(sigma)\n",
"\n",
"# Project the data\n",
"data = survey.projectFields(fields)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need calculate this derivative. \n",
"\\begin{align}\n",
"\\underbrace{\\frac{\\partial P(f(u(m)),m^{fix})}{\\partial f}}_{Rx}\n",
"\\end{align}\n",
"\n",
"Use the rule\n",
"\\begin{align}\n",
"\\frac{d}{dx}\\left( \\frac{a(x)}{b(x)} \\right) = \\frac{\\frac{d }{dx} a(x) b(x) - a(x)\\frac{d }{dx} b(x) }{ b(x)^2 }\n",
"\\end{align}\n",
"\n",
"In the case of the 1D MT problem the data is calculated as \n",
"\\begin{align}\n",
"MT1Ddata = P(f(m)) &= \\frac{P_{ex} f_e(src,m)}{P_{bx} f_b(src,m) \\frac{1}{\\mu_0}} = \\frac{P_e u}{P_b f_b(u)} \\\\\n",
"\\frac{\\partial P(f(m))}{\\partial u} v &= \\frac{P_e}{P_b \\frac{1}{mu_0} f_b(u)}v - \\frac{P_e u}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)^2} P_b \\frac{1}{mu_0} \\frac{d f_b}{du} v\n",
"\\end{align}\n",
"where u is the fields that we solve for. \n",
"\\begin{align}\n",
"\\frac{d f_b}{du} = - \\frac{1}{i \\omega} \\nabla \n",
"\\end{align}\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Unused code &= \\frac{ P_{ex} P_{bx} \\frac{1}{\\mu_0} \\left( f_b(src,m) - f_e(src,m) \\right) } { \\left(P_{bx}f_b(src,m) \\frac{1}{\\mu_0} \\right)^2 }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As matrices the formulas above can be written as\n",
"\\begin{align}\n",
"\\left[ \\frac{\\partial P(f(m))}{\\partial u} v \\right] = diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] [P_e v] - diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] \\left[ P_b \\frac{d f_b}{du}(v) \\frac{1}{mu_0} \\right]\n",
"\\end{align}\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The adjoint problem is done simliarly\n",
"\\begin{align}\n",
"\\left[ \\frac{\\partial P(f(m))}{\\partial u} v \\right]^T = [P_e v]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T - \\left[ P_b \\frac{d f_b}{du}(v) \\frac{1}{mu_0} \\right]^T diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right] diag \\left[ \\frac{1}{\\left(P_b \\frac{1}{mu_0} f_b(u)\\right)} \\right]^T \n",
"\\end{align}\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# def projectFields(self, src, mesh, u):\n",
"# '''\n",
"# Project the fields and return the\n",
"# '''\n",
"\n",
"# if self.projType is 'Z1D':\n",
"# Pex = mesh.getInterpolationMat(self.locs,'Fx')\n",
"# Pbx = mesh.getInterpolationMat(self.locs,'Ex')\n",
"# ex = Pex*mkvc(u[src,'e_1d'],2)\n",
"# bx = Pbx*mkvc(u[src,'b_1d'],2)/mu_0\n",
"# f_part_complex = ex/bx\n",
"# real_or_imag = self.projComp\n",
"# f_part = getattr(f_part_complex, real_or_imag)\n",
"# return f_part"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Initate things for the derivs Test\n",
"src = survey.srcList[0]\n",
"rx = src.rxList[0]\n",
"u0 = np.random.randn(m1d.nN)+np.random.randn(m1d.nN)*1j\n",
"f0 = problem.fieldsPair(m1d,survey)\n",
"f0[src,'e_1d'] = u0\n",
"f0[src,'b_1d'] = -1/(1j*simpegem.Utils.EMUtils.omega(src.freq))*m1d.nodalGrad*u0"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.36132584-1.64741907j, -1.09543652-0.5983257j ,\n",
" -0.37399249-0.17183374j, -0.29875616+0.13386035j,\n",
" -0.13497219-1.67592883j, -0.43805630+0.79351159j,\n",
" 1.10360642-1.88408115j, -1.55655836+0.09909074j,\n",
" 1.09262762-0.26644991j, 1.00456242+1.36030358j,\n",
" 0.10649574-0.2738965j , -0.93711934-0.82724463j,\n",
" 1.86172288-1.39322063j, 0.17645120-2.38628835j,\n",
" 0.68232151-0.96482639j, -1.54748216+0.02907389j,\n",
" -0.33109688+0.19681238j, -0.70235831-1.00115598j,\n",
" -1.13598355+0.21054259j, -0.09009229-0.07819883j,\n",
" -0.01097127+0.68165894j, 0.52661676+0.27378467j,\n",
" -0.70418270-1.10247881j, -0.51995781-0.20521301j,\n",
" -0.12731995-0.33125501j, -1.59215935-2.21034752j,\n",
" -0.18124185+0.32745866j, 0.67431311+1.33705062j,\n",
" 0.92167361-0.38476494j, 0.81511489-0.31198285j,\n",
" -0.34442259+0.957995j , -0.18007675-0.11694359j,\n",
" -0.72309201+0.17539006j, 0.61922884+0.50879561j,\n",
" 0.47818118+0.81750598j, -0.37937463-0.33322861j,\n",
" -0.06936763-0.64247149j, -1.19310390+0.49472846j,\n",
" 0.95134389+0.1500819j , -0.44352264+2.10893973j,\n",
" 2.09530714-0.49663377j, -1.13328736+0.46104269j,\n",
" 0.00899419+0.98561084j, 1.79288071-0.98577358j,\n",
" -1.21189456-1.69393797j, -0.79574262+0.49529776j,\n",
" -0.58983776+0.38069564j, -2.30858124+2.30767413j,\n",
" -1.58107977-0.88577507j, -0.94772249+0.1889765j ,\n",
" -0.38215882-0.31335661j, 0.38162110-1.18276337j,\n",
" -0.15421254-0.10918159j, -0.58284090-1.41758673j,\n",
" 0.85594502-0.22857923j, 1.57628220+0.9592039j ,\n",
" 0.46253320+0.18527238j, -1.80418304-1.85163236j,\n",
" -0.40546603+1.23461379j, -0.11477894+0.22189668j,\n",
" -1.16436004-0.11841764j, 0.30911061-1.32708718j,\n",
" 0.32877677+0.80977796j, 1.67348108-0.09360135j,\n",
" 0.63761689+1.22794045j, -0.34255102-0.11160981j,\n",
" 0.59182860-0.13894497j, -2.43635154-1.21416755j,\n",
" -0.17375475-0.77779331j, 1.11791248+0.43335221j,\n",
" -0.29401484-0.45669262j, 1.39676700-1.17486543j,\n",
" 1.71647097+1.6277104j , 1.95008743+1.06926207j,\n",
" -0.67552544+0.48327768j, -0.11000128-0.82649714j,\n",
" 0.96933809-0.37167971j, 1.47494336+0.24152755j,\n",
" 0.75463706+0.97596453j, 0.27418483-1.46035469j,\n",
" -2.17773096-0.16074446j, -0.27717438-1.56310869j,\n",
" -0.28038940+0.10826212j, -0.55314635+0.54203288j,\n",
" -1.09967872-0.0837615j , -0.16844443-0.85471157j,\n",
" -0.33760983-0.07555467j, -1.10668556-0.48712673j,\n",
" 1.03395454+0.28116204j, -0.48505901+0.42626281j,\n",
" 1.24278733+0.14643982j, -0.67434494-0.44708822j,\n",
" 0.88512301+0.58888926j, 0.29114641-1.21153896j,\n",
" 2.09025380+1.32932413j, 1.10848862+0.02614621j,\n",
" -1.02811260-0.8517983j , 0.26992478+0.43162846j,\n",
" 0.41252221+0.28673221j, -0.02741592-0.91702344j,\n",
" 0.17601394-1.0670725j , -1.02325192+0.01888599j,\n",
" -1.80534626-1.4886524j , 1.19712663+1.1909822j ,\n",
" 0.68362676+1.89111425j, 0.06090091+0.13260624j,\n",
" -0.75587177+1.08278499j, 0.88939421+0.86220205j,\n",
" 0.44347443-0.80363074j, 0.56780383+0.1887053j ,\n",
" -1.66790268+1.53615809j, -0.01736428-0.06506712j,\n",
" -2.25744003+1.06202019j, 0.39400372+0.3498991j ,\n",
" -0.55776393-1.08756479j, -1.11171590+0.33655697j,\n",
" -1.09279545+1.66655595j, 0.58095680+0.53565886j,\n",
" -0.93002846+0.34343169j, 0.72921615-1.8539533j ,\n",
" -0.19275461+0.41839652j, -0.13118494-0.5427038j ,\n",
" -0.42579986-0.11640398j, -2.29461643+1.02111832j,\n",
" 0.91308216-1.38100176j, -3.32212238+0.68156176j,\n",
" 0.56641453-0.95066951j, -0.16976454+0.49554783j,\n",
" 1.50014425-0.58622796j, -0.60263781-2.15510148j,\n",
" 1.21695459+1.78261241j, -0.63597912-0.8384838j ,\n",
" -3.64982757-0.55347908j, -0.97532271+0.55805176j,\n",
" -0.00551552-0.1537918j , -0.95478088+0.73917938j,\n",
" -1.48127806+0.68079515j, 1.67421015+0.25426024j,\n",
" 1.33335078-0.12101624j, 0.29645596+0.04605261j,\n",
" -0.47334868-1.05512171j, -0.26655968-1.55359388j,\n",
" 1.29559009-0.7934454j , 0.28283852-0.18507402j,\n",
" 0.23508679+2.28747714j, -0.86893735-0.00295461j,\n",
" 0.18639473+1.1307612j , -1.90052723+0.21204624j,\n",
" -0.11999826-0.27195367j, 0.29379502+0.21711147j,\n",
" 1.31071507+0.4451999j , 0.24524378+1.64849073j,\n",
" 1.68293321+0.73050439j, 0.36039213-0.90352994j,\n",
" 0.72257192+0.87566287j, 2.11195235+0.74321181j,\n",
" 0.18958287-1.06053094j, 0.46269877+1.0830655j ,\n",
" -0.32403398-1.12584818j, 0.72269683-0.36983534j,\n",
" -0.75930979+0.36833169j, -0.08659410+0.45782596j,\n",
" 0.68410073+0.64559686j, 1.08174726+0.24836564j,\n",
" 1.16991513-1.29388377j, 0.48984416+0.3837798j ,\n",
" 0.09385395-0.46595543j, 0.39693801+0.53049104j,\n",
" 0.78547311-0.61634797j, -0.30417945+1.17182948j,\n",
" -0.16075966-0.09621673j, -0.25778022-1.53597405j,\n",
" 0.56695410+2.15202438j, -0.48969409+0.11914719j,\n",
" -0.59882416-0.57579404j, -0.15237306+0.77126722j,\n",
" -1.65801751-0.60162042j, 0.30512004-2.08686648j,\n",
" 1.47493551-0.82515753j, -0.53121616-0.2578771j ,\n",
" -0.19552096-0.33023782j])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"u0"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"#rx.projectFieldsDeriv(src,m1d,fields,v)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==================== checkDerivative ====================\n",
"iter h |ft-f0| |ft-f0-h*J0*dx| Order\n",
"---------------------------------------------------------\n",
" 0 1.00e-01 1.969e-05 8.331e-07 nan\n",
" 1 1.00e-02 2.045e-06 7.979e-09 2.019\n",
" 2 1.00e-03 2.052e-07 7.945e-11 2.002\n",
" 3 1.00e-04 2.052e-08 7.942e-13 2.000\n",
"========================= PASS! =========================\n",
"That was easy!\n",
"\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Run a test\n",
"def fun(u):\n",
" f = problem.fieldsPair(m1d,survey)\n",
" f[src,'e_1d'] = u\n",
" f[src,'b_1d'] = -(m1d.nodalGrad*u)/(1j*simpegem.Utils.EMUtils.omega(src.freq))\n",
" return rx.projectFields(src,m1d,f), lambda t: rx.projectFieldsDeriv(src,m1d,f0,t)\n",
"simpeg.Tests.checkDerivative(fun,u0,num=4,plotIt=False)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ -8.67361738e-19]\n",
"181\n",
"181\n"
]
}
],
"source": [
"print rx.projectFieldsDeriv(src,m1d,f0,u0)\n",
"print m1d.nF\n",
"print m1d.nN"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# fields._b_1dDeriv_u(src,u0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "object of type 'FieldsMT' has no len()",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-10-8b883ffdb2f4>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msurvey\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdpred\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/Utils/CounterUtils.pyc\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 81\u001b[0m \u001b[0mcounter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'counter'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 82\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcounter\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mCounter\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mcounter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcount\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'.'\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 83\u001b[1;33m \u001b[0mout\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 84\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mout\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 85\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/Utils/codeutils.pyc\u001b[0m in \u001b[0;36mrequiresVarWrapper\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 224\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvar\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 225\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mextra\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 226\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 227\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 228\u001b[0m \u001b[0mdoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrequiresVarWrapper\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/Survey.pyc\u001b[0m in \u001b[0;36mdpred\u001b[1;34m(self, m, u)\u001b[0m\n\u001b[0;32m 306\u001b[0m \u001b[0mWhere\u001b[0m \u001b[0mP\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0ma\u001b[0m \u001b[0mprojection\u001b[0m \u001b[0mof\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mfields\u001b[0m \u001b[0monto\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mdata\u001b[0m \u001b[0mspace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 307\u001b[0m \"\"\"\n\u001b[1;32m--> 308\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mu\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mu\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprob\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfields\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mm\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 309\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mUtils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmkvc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprojectFields\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mu\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 310\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpegmt/simpegMT/ProblemMT1D/Problems.pyc\u001b[0m in \u001b[0;36mfields\u001b[1;34m(self, m)\u001b[0m\n\u001b[0;32m 90\u001b[0m '''\n\u001b[0;32m 91\u001b[0m \u001b[1;31m# Set the current model\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 92\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcurModel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 93\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 94\u001b[0m \u001b[0mF\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mFieldsMT\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmesh\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msurvey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/Problem.pyc\u001b[0m in \u001b[0;36mcurModel\u001b[1;34m(self, value)\u001b[0m\n\u001b[0;32m 76\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;31m# it is the same!\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 77\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPropMap\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 78\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_curModel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmapping\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 79\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 80\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_curModel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mModels\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mModel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmapping\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/PropMaps.pyc\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, vec)\u001b[0m\n\u001b[0;32m 254\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 255\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvec\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 256\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPropModel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvec\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 257\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 258\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__contains__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/media/gudni/ExtraDrive1/Codes/python/simpeg/SimPEG/PropMaps.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, propMap, vector)\u001b[0m\n\u001b[0;32m 117\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpropMap\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpropMap\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 118\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvector\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvector\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 119\u001b[1;33m \u001b[1;32massert\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvector\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnP\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 120\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 121\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mTypeError\u001b[0m: object of type 'FieldsMT' has no len()"
]
}
],
"source": [
"survey.dpred(f0)"
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
+4 -1
View File
@@ -17,4 +17,7 @@ class FieldsMT(Problem.Fields):
"""
The derivative of b_1d wrt u
"""
return -( self.mesh.nodalGrad * v)/( 1j*omega(src.freq) )
nG = self.mesh.nodalGrad
if adjoint:
return - 1./( 1j*omega(src.freq) ) * ( nG.T * v)
return - 1./( 1j*omega(src.freq) ) * ( nG * v)
+1 -1
View File
@@ -140,7 +140,7 @@ class RxMT(Survey.BaseRx):
Pbx = mesh.getInterpolationMat(self.locs,'Ex')
# ex = Pex*mkvc(f[src,'e_1d'],2)
# bx = Pbx*mkvc(f[src,'b_1d'],2)/mu_0
deriv_complex = Utils.sdiag(1/(Pbx*mkvc(f[src,'b_1d'],2)/mu_0))*(Pex*v) - Utils.sdiag(1/(Pbx*mkvc(f[src,'b_1d'],2)/mu_0)).T*Utils.sdiag(1/(Pbx*mkvc(f[src,'b_1d'],2)/mu_0))*(Pbx*f._b_1dDeriv_u(src,v)/mu_0)
deriv_complex = Utils.sdiag(1./(Pbx*mkvc(f[src,'b_1d'],2)/mu_0))*(Pex*v) - Utils.sdiag(Pex*mkvc(f[src,'e_1d'],2))*(Utils.sdiag(1./(Pbx*mkvc(f[src,'b_1d'],2)/mu_0)).T*Utils.sdiag(1./(Pbx*mkvc(f[src,'b_1d'],2)/mu_0)))*(Pbx*f._b_1dDeriv_u(src,v)/mu_0)
# elif self.projType is 'Z2D
elif self.projType is 'Z3D':
pass