예제 #1
0
    def test_vangenuchten_k(self):
        mesh = Mesh.TensorMesh([50])
        hav = Richards.Empirical._vangenuchten_k(mesh)
        m = np.random.randn(50)
        def wrapper(u):
            return hav.transform(u, m), hav.transformDerivU(u, m)
        passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
        self.assertTrue(passed,True)

        hav = Richards.Empirical._vangenuchten_k(mesh)
        u = np.random.randn(50)
        def wrapper(m):
            return hav.transform(u, m), hav.transformDerivM(u, m)
        passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
        self.assertTrue(passed,True)
예제 #2
0
    def test_vangenuchten_k(self):
        mesh = Mesh.TensorMesh([50])
        hav = Richards.Empirical._vangenuchten_k(mesh)
        m = np.random.randn(50)
        def wrapper(u):
            return hav.transform(u, m), hav.transformDerivU(u, m)
        passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
        self.assertTrue(passed,True)

        hav = Richards.Empirical._vangenuchten_k(mesh)
        u = np.random.randn(50)
        def wrapper(m):
            return hav.transform(u, m), hav.transformDerivM(u, m)
        passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
        self.assertTrue(passed,True)
예제 #3
0
 def test_Sensitivity_full(self):
     mTrue = self.Ks * np.ones(self.M.nC)
     J = self.prob.Jfull(mTrue)
     derChk = lambda m: [self.survey.dpred(m), J]
     print('2D: Testing Richards Derivative FULL')
     passed = checkDerivative(derChk, mTrue, num=4, plotIt=False)
     self.assertTrue(passed, True)
예제 #4
0
 def test_Sensitivity_full(self):
     mTrue = self.Ks * np.ones(self.M.nC)
     J = self.prob.Jfull(mTrue)
     derChk = lambda m: [self.survey.dpred(m), J]
     print "2D: Testing Richards Derivative FULL"
     passed = checkDerivative(derChk, mTrue, num=4, plotIt=False)
     self.assertTrue(passed, True)
예제 #5
0
 def test_BaseHaverkamp_Theta(self):
     mesh = Mesh.TensorMesh([50])
     hav = Richards.Empirical._haverkamp_theta(mesh)
     m = np.random.randn(50)
     def wrapper(u):
         return hav.transform(u, m), hav.transformDerivU(u, m)
     passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
     self.assertTrue(passed,True)
예제 #6
0
 def test_BaseHaverkamp_Theta(self):
     mesh = Mesh.TensorMesh([50])
     hav = Richards.Empirical._haverkamp_theta(mesh)
     m = np.random.randn(50)
     def wrapper(u):
         return hav.transform(u, m), hav.transformDerivU(u, m)
     passed = checkDerivative(wrapper, np.random.randn(50), plotIt=False)
     self.assertTrue(passed,True)
예제 #7
0
 def test_Sensitivity(self):
     mTrue = self.Ks * np.ones(self.M.nC)
     derChk = lambda m: [
         self.survey.dpred(m), lambda v: self.prob.Jvec(m, v)
     ]
     print('3D: Testing Richards Derivative')
     passed = checkDerivative(derChk, mTrue, num=4, plotIt=False)
     self.assertTrue(passed, True)
예제 #8
0
    def test_simpleFunction(self):
        def simpleFunction(x):
            return np.sin(x), lambda xi: sdiag(np.cos(x)) * xi

        passed = checkDerivative(simpleFunction,
                                 np.random.randn(5),
                                 plotIt=False)
        self.assertTrue(passed, True)
예제 #9
0
    def test_vangenuchten_k(self):
        mesh = Mesh.TensorMesh([50])
        hav = Richards.Empirical._vangenuchten_k(mesh)
        m = np.random.randn(50)
        passed = checkDerivative(
            lambda u: (hav.transform(u, m), hav.transformDerivU(u, m)),
            np.random.randn(50),
            plotIt=False)
        self.assertTrue(passed, True)

        hav = Richards.Empirical._vangenuchten_k(mesh)
        u = np.random.randn(50)
        passed = checkDerivative(
            lambda m: (hav.transform(u, m), hav.transformDerivM(u, m)),
            np.random.randn(50),
            plotIt=False)
        self.assertTrue(passed, True)
예제 #10
0
 def test_vangenuchten_theta_u(self):
     mesh = Mesh.TensorMesh([50])
     van = Richards.Empirical.Vangenuchten_theta(mesh)
     passed = checkDerivative(
         lambda u: (van(u), van.derivU(u)),
         np.random.randn(50),
         plotIt=False
     )
     self.assertTrue(passed, True)
예제 #11
0
 def test_Richards_getResidual_Newton(self):
     self.prob.doNewton = True
     m = self.Ks
     passed = checkDerivative(
         lambda hn1: self.prob.getResidual(m, self.h0, hn1, self.prob.timeSteps[0], self.prob.boundaryConditions),
         self.h0,
         plotIt=False,
     )
     self.assertTrue(passed, True)
예제 #12
0
 def test_Richards_getResidual_Newton(self):
     self.prob.doNewton = True
     m = self.Ks
     passed = checkDerivative(lambda hn1: self.prob.getResidual(
         m, self.h0, hn1, self.prob.timeSteps[0], self.prob.
         boundaryConditions),
                              self.h0,
                              plotIt=False)
     self.assertTrue(passed, True)
예제 #13
0
 def test_haverkamp_theta_u(self):
     mesh = Mesh.TensorMesh([50])
     hav = Richards.Empirical.Haverkamp_theta(mesh)
     passed = checkDerivative(
         lambda u: (hav(u), hav.derivU(u)),
         np.random.randn(50),
         plotIt=False
     )
     self.assertTrue(passed, True)
예제 #14
0
 def _dotest_sensitivity(self):
     print('Testing Richards Derivative dim={}'.format(
         self.mesh.dim
     ))
     passed = checkDerivative(
         lambda m: [self.survey.dpred(m), lambda v: self.prob.Jvec(m, v)],
         self.mtrue,
         num=4,
         plotIt=False
     )
     self.assertTrue(passed, True)
예제 #15
0
 def _dotest_sensitivity_full(self):
     print('Testing Richards Derivative FULL dim={}'.format(
         self.mesh.dim
     ))
     J = self.prob.Jfull(self.mtrue)
     passed = checkDerivative(
         lambda m: [self.survey.dpred(m), J],
         self.mtrue,
         num=4,
         plotIt=False
     )
     self.assertTrue(passed, True)
예제 #16
0
    def test_haverkamp_k_u(self):

        mesh = Mesh.TensorMesh([5])

        hav = Richards.Empirical.Haverkamp_k(mesh)
        print('Haverkamp_k test u deriv')
        passed = checkDerivative(
            lambda u: (hav(u), hav.derivU(u)),
            np.random.randn(mesh.nC),
            plotIt=False
        )
        self.assertTrue(passed, True)
예제 #17
0
    def _test_deriv(self, x=None, num=4, plotIt=False, **kwargs):
        print('Testing {0!s} Deriv'.format(self.__class__.__name__))
        if x is None:
            if self.nP == '*':
                x = np.random.randn(np.random.randint(1e2, high=1e3))
            else:
                x = np.random.randn(self.nP)

        return checkDerivative(lambda m: [self(m), self.deriv(m)],
                               x,
                               num=num,
                               plotIt=plotIt,
                               **kwargs)
예제 #18
0
    def _test_deriv2(self, x=None, num=4, plotIt=False, **kwargs):
        print('Testing {0!s} Deriv2'.format(self.__class__.__name__))
        if x is None:
            if self.nP == '*':
                x = np.random.randn(np.random.randint(1e2, high=1e3))
            else:
                x = np.random.randn(self.nP)

        v = x + 0.1 * np.random.rand(len(x))
        return checkDerivative(
            lambda m: [self.deriv(m).dot(v),
                       self.deriv2(m, v=v)],
            x,
            num=num,
            expectedOrder=1,
            plotIt=plotIt,
            **kwargs)
예제 #19
0
    def test_haverkamp_k_m(self):

        mesh = Mesh.TensorMesh([5])
        expmap = Maps.IdentityMap(nP=mesh.nC)
        wires2 = Maps.Wires(('one', mesh.nC), ('two', mesh.nC))
        wires3 = Maps.Wires(
            ('one', mesh.nC), ('two', mesh.nC), ('three', mesh.nC)
        )

        opts = [
            ('Ks',
                dict(KsMap=expmap), 1),
            ('A',
                dict(AMap=expmap), 1),
            ('gamma',
                dict(gammaMap=expmap), 1),
            ('Ks-A',
                dict(KsMap=expmap*wires2.one, AMap=expmap*wires2.two), 2),
            ('Ks-gamma',
                dict(KsMap=expmap*wires2.one, gammaMap=expmap*wires2.two), 2),
            ('A-gamma',
                dict(AMap=expmap*wires2.one, gammaMap=expmap*wires2.two), 2),
            ('Ks-A-gamma', dict(
                KsMap=expmap*wires3.one,
                AMap=expmap*wires3.two,
                gammaMap=expmap*wires3.three), 3),
        ]

        u = np.random.randn(mesh.nC)

        for name, opt, nM in opts:
            np.random.seed(2)
            hav = Richards.Empirical.Haverkamp_k(mesh, **opt)

            def fun(m):
                hav.model = m
                return hav(u), hav.derivM(u)

            print('Haverkamp_k test m deriv:  ', name)

            passed = checkDerivative(
                fun,
                np.random.randn(mesh.nC * nM),
                plotIt=False
            )
            self.assertTrue(passed, True)
예제 #20
0
    def test_vangenuchten_k_m(self):
        mesh = Mesh.TensorMesh([50])

        expmap = Maps.ExpMap(nP=mesh.nC)
        idnmap = Maps.IdentityMap(nP=mesh.nC)

        seeds = {
            'Ks': np.random.triangular(
                np.log(1e-7), np.log(1e-6), np.log(1e-5), mesh.nC
            ),
            'I': np.random.rand(mesh.nC),
            'n': np.random.rand(mesh.nC) + 1,
            'alpha': np.random.rand(mesh.nC),
        }

        opts = [
            ('Ks',
                dict(KsMap=expmap), 1),
            ('I',
                dict(IMap=idnmap), 1),
            ('n',
                dict(nMap=idnmap), 1),
            ('alpha',
                dict(alphaMap=idnmap), 1),
        ]

        u = np.random.randn(mesh.nC)

        for name, opt, nM in opts:
            van = Richards.Empirical.Vangenuchten_k(mesh, **opt)

            x0 = np.concatenate([seeds[n] for n in name.split('-')])

            def fun(m):
                van.model = m
                return van(u), van.derivM(u)

            print('Vangenuchten_k test m deriv:  ', name)

            passed = checkDerivative(
                fun,
                x0,
                plotIt=False
            )
            self.assertTrue(passed, True)
예제 #21
0
 def _dotest_getResidual(self, newton):
     print('Testing richards get residual newton={}, dim={}'.format(
         newton,
         self.mesh.dim
     ))
     self.prob.do_newton = newton
     passed = checkDerivative(
         lambda hn1: self.prob.getResidual(
             self.mtrue,
             self.h0,
             hn1,
             self.prob.timeSteps[0],
             self.prob.boundary_conditions
         ),
         self.h0,
         expectedOrder=2 if newton else 1,
         plotIt=False
     )
     self.assertTrue(passed, True)
예제 #22
0
    def test_vangenuchten_theta_m(self):
        mesh = Mesh.TensorMesh([50])
        idnmap = Maps.IdentityMap(nP=mesh.nC)

        seeds = {
            'theta_r': np.random.rand(mesh.nC),
            'theta_s': np.random.rand(mesh.nC),
            'n': np.random.rand(mesh.nC) + 1,
            'alpha': np.random.rand(mesh.nC),
        }

        opts = [
            ('theta_r',
                dict(theta_rMap=idnmap), 1),
            ('theta_s',
                dict(theta_sMap=idnmap), 1),
            ('n',
                dict(nMap=idnmap), 1),
            ('alpha',
                dict(alphaMap=idnmap), 1),
        ]

        u = np.random.randn(mesh.nC)

        for name, opt, nM in opts:
            van = Richards.Empirical.Vangenuchten_theta(mesh, **opt)

            x0 = np.concatenate([seeds[n] for n in name.split('-')])

            def fun(m):
                van.model = m
                return van(u), van.derivM(u)

            print('Vangenuchten_theta test m deriv:  ', name)

            passed = checkDerivative(
                fun,
                x0,
                plotIt=False
            )
            self.assertTrue(passed, True)
예제 #23
0
    def test_simplePass(self):
        def simplePass(x):
            return np.sin(x), sdiag(np.cos(x))

        passed = checkDerivative(simplePass, np.random.randn(5), plotIt=False)
        self.assertTrue(passed, True)
예제 #24
0
 def test_simpleFail(self):
     def simpleFail(x):
         return np.sin(x), -sdiag(np.cos(x))
     passed = checkDerivative(simpleFail, np.random.randn(5), plotIt=False)
     self.assertTrue(not passed, True)
예제 #25
0
 def test_simpleFunction(self):
     def simpleFunction(x):
         return np.sin(x), lambda xi: sdiag(np.cos(x))*xi
     passed = checkDerivative(simpleFunction, np.random.randn(5), plotIt=False)
     self.assertTrue(passed, True)
예제 #26
0
 def test_Sensitivity(self):
     mTrue = self.Ks * np.ones(self.M.nC)
     derChk = lambda m: [self.survey.dpred(m), lambda v: self.prob.Jvec(m, v)]
     print "3D: Testing Richards Derivative"
     passed = checkDerivative(derChk, mTrue, num=4, plotIt=False)
     self.assertTrue(passed, True)