Created
March 3, 2015 20:02
-
-
Save sgkang/96f9140785ebcc8e165c to your computer and use it in GitHub Desktop.
DCSenseTest
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "metadata": { | |
| "language": "Julia", | |
| "name": "", | |
| "signature": "sha256:aefd00f6dc6e17fe33ad06592c57164c36e31178df25943802eb2c115cf1f1ca" | |
| }, | |
| "nbformat": 3, | |
| "nbformat_minor": 0, | |
| "worksheets": [ | |
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "using DCIP\n", | |
| "using Mesh\n", | |
| "using Base.Test\n", | |
| "using Utils\n", | |
| "using LinearSolvers\n", | |
| "using MUMPS" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 1 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "# using PyPlot" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 2 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "cs, npad, rate = 200., 2, 1.3\n", | |
| "ncx, ncy, ncz = 15, 15, 10\n", | |
| "hpad = cs*(1:npad).^rate;" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 3 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "hx = [hpad, cs*ones(ncx), hpad[end:-1:1]]; \n", | |
| "hy = [hpad, cs*ones(ncy), hpad[end:-1:1]]; \n", | |
| "hz = [hpad, cs*ones(ncz)]; \n", | |
| "x0 = [-sum(hx)/2., -sum(hy)/2., -sum(hz)];\n", | |
| "M = getTensorMesh3D(hx, hy, hz, x0);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 4 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "xn, yn, zn = getNodalAxes(M);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 5 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "XYZN = getNodalGrid(M)\n", | |
| "xc1_p, yc1_p, zc1_p = -1500., 0., 0.; \n", | |
| "xc1_n, yc1_n, zc1_n = 1500., 0., 0.; \n", | |
| "xc2_p, yc2_p, zc2_p = 0., -1500., 0.; \n", | |
| "xc2_n, yc2_n, zc2_n = 0., 1500., 0.; \n", | |
| "(dum, indp1) = findmin(abs(XYZN[:,1]-xc1_p)+abs(XYZN[:,2]-yc1_p)+abs(XYZN[:,3]-zc1_p));\n", | |
| "(dum, indn1) = findmin(abs(XYZN[:,1]-xc1_n)+abs(XYZN[:,2]-yc1_n)+abs(XYZN[:,3]-zc1_n));\n", | |
| "(dum, indp2) = findmin(abs(XYZN[:,1]-xc2_p)+abs(XYZN[:,2]-yc2_p)+abs(XYZN[:,3]-zc2_p));\n", | |
| "(dum, indn2) = findmin(abs(XYZN[:,1]-xc2_n)+abs(XYZN[:,2]-yc2_n)+abs(XYZN[:,3]-zc2_n));" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 6 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "Sources = zeros(Float64, M.nn, 2);\n", | |
| "Sources[indp1,1] = 1./3;\n", | |
| "Sources[indn1,1] = -1./3;\n", | |
| "Sources[indp2,2] = 1./3;\n", | |
| "Sources[indn2,2] = -1./3;" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 7 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "xr = linspace(-1000., 1000., 11);\n", | |
| "(XrP, YrP, ZrP) = ndgrid(xr, xr, -1e-4*ones(1));\n", | |
| "(XrN, YrN, ZrN) = ndgrid(xr+100., xr, -1e0*ones(1));\n", | |
| "xyzrP = [XrP[:] YrP[:] ZrP[:]];\n", | |
| "xyzrN = [XrN[:] YrN[:] ZrN[:]];\n", | |
| "QP = getNodalInterpolationMatrix(M, xyzrP);\n", | |
| "QN = getNodalInterpolationMatrix(M, xyzrN);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 8 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "Q = blkdiag(QP-QN, QP-QN);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 9 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "mumps = getMUMPSsolver([],1);\n", | |
| "param = getDCIPParam(M, Sources, Q', [], mumps);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 10 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "sigma = ones(M.nc);\n", | |
| "dm = sigma*10;\n", | |
| "sigma0 = sigma+dm\n", | |
| "dobs, param = DCIPfwd(sigma, param);\n", | |
| "dini, param = DCIPfwd(sigma0, param);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "elapsed time: 0." | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "044402391 seconds\n", | |
| "elapsed time: 0.064166271 seconds\n" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 19 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "dr = dini-dobs\n", | |
| "Jtdr = DCIPSensTMatVec(dr, sigma0, param);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 31 | |
| }, | |
| { | |
| "cell_type": "heading", | |
| "level": 2, | |
| "metadata": {}, | |
| "source": [ | |
| "Step1: Test Jtv" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "function testDCJtv(x, v, Jtdr, dobs, param) \n", | |
| " pred, param = DCIPfwd(x, param)\n", | |
| " misfit = norm(pred-dobs)^2*0.5\n", | |
| " dmisfit = dot(Jtdr, v)\n", | |
| " return misfit, dmisfit\n", | |
| "end" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 32, | |
| "text": [ | |
| "testDCJtv (generic function with 1 method)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 32 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "testDCJtvfun(x, v=zeros(size(x))) = testDCJtv(x, v, Jtdr, dobs, param)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 33, | |
| "text": [ | |
| "testDCJtvfun (generic function with 2 methods)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 33 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "pass, err, order = checkDerivative(testDCJtvfun, sigma0)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| " h\t E0\t E1\t O1\t O2\t OK?\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "elapsed time: 0.058913509 seconds\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.060815606 seconds\n", | |
| "1.000e-01\t2.863e-04\t2.526e-06\t0.000e+00\t0.000e+00\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.048162417 seconds\n", | |
| "1.000e-02\t2.841e-05\t2.519e-08\t1.003e+00\t2.001e+00\t 1\n", | |
| "elapsed time: 0.045833286 seconds\n", | |
| "1.000e-03\t2.838e-06\t2.519e-10\t1.000e+00\t2.000e+00\t 1\n", | |
| "elapsed time: 0.030228583 seconds\n", | |
| "1.000e-04\t2.838e-07\t2.517e-12\t1.000e+00\t2.000e+00\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.031033603 seconds\n", | |
| "1.000e-05\t2.838e-08\t2.451e-14\t1.000e+00\t2.012e+00\t 1\n", | |
| "elapsed time: 0.044765998 seconds\n", | |
| "1.000e-06\t2.838e-09\t3.860e-16\t1.000e+00\t1.803e+00\t 1\n", | |
| "elapsed time: 0.030751767 seconds\n", | |
| "1.000e-07\t2.838e-10\t5.789e-16\t1.000e+00\t-1.761e-01\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.032226345 seconds\n", | |
| "1.000e-08\t2.838e-11\t9.649e-16\t1.000e+00\t-2.218e-01\t 1\n", | |
| "elapsed time: 0.042841435 seconds\n", | |
| "1.000e-09\t2.838e-12\t5.789e-16\t1.000e+00\t2.218e-01\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.031701324 seconds\n", | |
| "1.000e-10\t2.831e-13\t7.719e-16\t1.001e+00\t-1.249e-01\t 1\n" | |
| ] | |
| }, | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 34, | |
| "text": [ | |
| "(true,\n", | |
| "10x2 Array{Float64,2}:\n", | |
| " 0.000286347 2.52603e-6 \n", | |
| " 2.84073e-5 2.51931e-8 \n", | |
| " 2.83846e-6 2.51864e-10\n", | |
| " 2.83824e-7 2.51742e-12\n", | |
| " 2.83821e-8 2.45085e-14\n", | |
| " 2.83821e-9 3.8596e-16 \n", | |
| " 2.8382e-10 5.7894e-16 \n", | |
| " 2.83812e-11 9.649e-16 \n", | |
| " 2.83758e-12 5.7894e-16 \n", | |
| " 2.83102e-13 7.7192e-16 ,\n", | |
| "\n", | |
| "10x2 Array{Float64,2}:\n", | |
| " 0.0 0.0 \n", | |
| " 1.00346 2.00116 \n", | |
| " 1.00035 2.00012 \n", | |
| " 1.00003 2.00021 \n", | |
| " 1.0 2.01164 \n", | |
| " 1.0 1.80277 \n", | |
| " 1.0 -0.176091\n", | |
| " 1.00001 -0.221849\n", | |
| " 1.00008 0.221849\n", | |
| " 1.00101 -0.124939)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 34 | |
| }, | |
| { | |
| "cell_type": "heading", | |
| "level": 2, | |
| "metadata": {}, | |
| "source": [ | |
| "Step2: Test Jvec" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "sigma = ones(M.nc);\n", | |
| "dm = sigma*10;\n", | |
| "sigma0 = sigma+dm\n", | |
| "dobs, param = DCIPfwd(sigma, param);\n", | |
| "dini, param = DCIPfwd(sigma0, param);" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "elapsed time: 0." | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "074214266 seconds\n", | |
| "elapsed time: 0.072871131 seconds\n" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 35 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "function testDCJv(x, v, param) \n", | |
| " pred, param = DCIPfwd(x, param)\n", | |
| " Jdm = DCIPSensMatVec(v, x, param);\n", | |
| " return pred, Jdm\n", | |
| "end" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 46, | |
| "text": [ | |
| "testDCJv (generic function with 2 methods)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 46 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "testDCJvfun(x, v=zeros(size(x))) = testDCJv(x, v, param)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 47, | |
| "text": [ | |
| "testDCJvfun (generic function with 2 methods)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 47 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "pass, err, order = checkDerivative(testDCJvfun, sigma0)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| " h\t E0\t E1\t O1\t O2\t OK?\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "elapsed time: 0.037673534 seconds\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.036428875 seconds\n", | |
| "1.000e-01\t2.902e-03\t1.790e-05\t0.000e+00\t0.000e+00\t 1" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "\n", | |
| "elapsed time: 0.043053445 seconds\n", | |
| "1.000e-02\t2.900e-04\t1.788e-07\t1.000e+00\t2.001e+00\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.032310843 seconds\n", | |
| "1.000e-03\t2.900e-05\t1.788e-09\t1.000e+00\t2.000e+00\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.031032602 seconds\n", | |
| "1.000e-04\t2.900e-06\t1.788e-11\t1.000e+00\t2.000e+00\t 1\n", | |
| "elapsed time: 0.031137021 seconds\n", | |
| "1.000e-05\t2.900e-07\t1.759e-13\t1.000e+00\t2.007e+00\t 1" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "\n", | |
| "elapsed time: 0.042587977 seconds\n", | |
| "1.000e-06\t2.900e-08\t6.131e-15\t1.000e+00\t1.458e+00\t 1\n", | |
| "elapsed time: " | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.031519125 seconds\n", | |
| "1.000e-07\t2.900e-09\t7.374e-15\t1.000e+00\t-8.014e-02\t 1\n", | |
| "elapsed time: 0." | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "030675628 seconds\n", | |
| "1.000e-08\t2.900e-10\t6.150e-15\t1.000e+00\t7.882e-02\t 1\n", | |
| "elapsed time: 0.031992284 seconds\n", | |
| "1.000e-09\t2.899e-11\t6.475e-15\t1.000e+00\t-2.238e-02\t 1" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "\n", | |
| "elapsed time: 0.039846114 seconds\n", | |
| "1.000e-10\t2.899e-12\t6.173e-15\t1.000e+00\t2.078e-02\t 1\n" | |
| ] | |
| }, | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 48, | |
| "text": [ | |
| "(true,\n", | |
| "10x2 Array{Float64,2}:\n", | |
| " 0.0029019 1.79028e-5 \n", | |
| " 0.000289973 1.78815e-7 \n", | |
| " 2.89953e-5 1.78795e-9 \n", | |
| " 2.89951e-6 1.78765e-11\n", | |
| " 2.89951e-7 1.75874e-13\n", | |
| " 2.89951e-8 6.13141e-15\n", | |
| " 2.8995e-9 7.37395e-15\n", | |
| " 2.8995e-10 6.15009e-15\n", | |
| " 2.89946e-11 6.47525e-15\n", | |
| " 2.8992e-12 6.17268e-15,\n", | |
| "\n", | |
| "10x2 Array{Float64,2}:\n", | |
| " 0.0 0.0 \n", | |
| " 1.00032 2.00052 \n", | |
| " 1.00003 2.00005 \n", | |
| " 1.0 2.00007 \n", | |
| " 1.0 2.00708 \n", | |
| " 1.0 1.45764 \n", | |
| " 1.0 -0.0801397\n", | |
| " 1.0 0.0788191\n", | |
| " 1.00001 -0.0223753\n", | |
| " 1.00004 0.0207826)" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 48 | |
| }, | |
| { | |
| "cell_type": "heading", | |
| "level": 2, | |
| "metadata": {}, | |
| "source": [ | |
| "Step3: Adjoint test" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "#vtJtJv\n", | |
| "v = randn(size(sigma0))\n", | |
| "Jv = DCIPSensMatVec(v, sigma0, param);\n", | |
| "JtJv = DCIPSensTMatVec(Jv, sigma0, param);\n", | |
| "vtJtJv = dot(v, JtJv)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 51, | |
| "text": [ | |
| "9.439497936091597e-13" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 51 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "#vJJtv\n", | |
| "v = randn(size(dobs))\n", | |
| "Jtv = DCIPSensTMatVec(v, sigma0, param);\n", | |
| "JJtv = DCIPSensMatVec(Jtv, sigma0, param);\n", | |
| "vtJJtv = dot(v, JJtv)" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 58, | |
| "text": [ | |
| "9.476487711215165e-13" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 58 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "println(norm(vtJtJv-vtJJtv)/norm(vtJJtv))" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "0.0" | |
| ] | |
| }, | |
| { | |
| "output_type": "stream", | |
| "stream": "stdout", | |
| "text": [ | |
| "03903321172441546\n" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 60 | |
| } | |
| ], | |
| "metadata": {} | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment