mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-29 01:43:55 +08:00
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import numpy as np
|
|
import unittest
|
|
from OrderTest import OrderTest
|
|
import sys
|
|
sys.path.append('../')
|
|
from getEdgeInnerProducts import *
|
|
|
|
|
|
class TestEdgeInnerProduct(OrderTest):
|
|
"""Integrate an edge function over a unit cube domain using edgeInnerProducts."""
|
|
|
|
name = "Edge Inner Product"
|
|
|
|
def getError(self):
|
|
|
|
call = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2])
|
|
|
|
ex = lambda x, y, z: x**2+y*z
|
|
ey = lambda x, y, z: (z**2)*x+y*z
|
|
ez = lambda x, y, z: y**2+x*z
|
|
|
|
sigma1 = lambda x, y, z: x*y+1
|
|
sigma2 = lambda x, y, z: x*z+2
|
|
sigma3 = lambda x, y, z: 3+z*y
|
|
sigma4 = lambda x, y, z: 0.1*x*y*z
|
|
sigma5 = lambda x, y, z: 0.2*x*y
|
|
sigma6 = lambda x, y, z: 0.1*z
|
|
|
|
Ex = call(ex, self.M.gridEx)
|
|
Ey = call(ey, self.M.gridEy)
|
|
Ez = call(ez, self.M.gridEz)
|
|
|
|
E = np.matrix(np.r_[Ex, Ey, Ez]).T
|
|
Gc = self.M.gridCC
|
|
sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc),
|
|
call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)]
|
|
|
|
A = getEdgeInnerProduct(self.M, sigma)
|
|
numeric = E.T*A*E
|
|
analytic = 69881./21600 # Found using matlab symbolic toolbox.
|
|
err = np.abs(numeric - analytic)
|
|
return err
|
|
|
|
def test_order(self):
|
|
self.orderTest()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|