simpeg.potential_fields.magnetics.Simulation3DDifferential.Jvec#

Simulation3DDifferential.Jvec(m, v, u=None)[source]#

Computing Jacobian multiplied by vector

By setting our problem as

C(m,u)=Aurhs=0

And taking derivative w.r.t m

C(m,u)=mC(m)δm+uC(u)δu=0δuδm=[uC(u)]1mC(m)

With some linear algebra we can have

uC(u)=AmC(m)=Am(m)urhs(m)m
Am(m)u=μm[\Div\diag(\DivTu)\dMfMuI]\dMfMuI=\diag(\MfMui)vec1AvF2CCT\diag(v)\diag(1μ2)rhs(m)m=μm[\Div\diag(\Mμ01fB0)\dMfMuI]\diag(v)DPoutTBsBCm

In the end,

δuδm=[A]1[Am(m)urhs(m)m]

A little tricky point here is we are not interested in potential (u), but interested in magnetic flux (B). Thus, we need sensitivity for B. Now we take derivative of B w.r.t m and have

δBδm=μm[\diag(\Mμ01fB0)\dMfMuI \diag(\DivTu)\dMfMuI](\MfMui)1\DivTδuδm

Finally we evaluate the above, but we should remember that

Note

We only want to evaluate

Jv=δPBδmv

Since forming sensitivity matrix is very expensive in that this monster is “big” and “dense” matrix!!