예제 #1
0
    def test_correct_vals_in_jac(self):

        #params_dict = OrderedDict()
        #params_dict['x'] = { 'val': np.ones((2)),
        #'pathname' : 'x',
        #'shape': 2, 'size' : 2 }

        #unknowns_dict = OrderedDict()
        #unknowns_dict['y'] = { 'val': np.zeros((2)),
        #'pathname' : 'y',
        #'shape': 2, 'size' : 2 }

        #resids_dict = OrderedDict()
        #resids_dict['y'] = { 'val': np.zeros((2)),
        #'pathname' : 'y',
        #'shape': 2, 'size' : 2 }

        #params = SrcVecWrapper()
        #params.setup(params_dict, store_byobjs=True)

        #unknowns = SrcVecWrapper()
        #unknowns.setup(unknowns_dict, store_byobjs=True)

        #resids = SrcVecWrapper()
        #resids.setup(resids_dict, store_byobjs=True)

        params = self.p.root.c1.params
        unknowns = self.p.root.c1.unknowns
        resids = self.p.root.c1.resids
        self.p.root.c1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.c1.fd_jacobian(params, unknowns, resids)

        expected_jac = {('y', 'x'): np.array([[2., 7.], [5., -3.]])}

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        #Got lucky that the way this comp was written, it would accept any square
        # matrix. But provided jacobian would be really wrong!

        params = self.p.root.junk.params
        unknowns = self.p.root.junk.unknowns
        resids = self.p.root.junk.resids

        params['x'] = np.ones((2, 2))
        unknowns['y'] = np.zeros((2, 2))
        resids['y'] = np.zeros((2, 2))

        self.p.root.c1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.c1.fd_jacobian(params, unknowns, resids)

        expected_jac = {
            ('y', 'x'):
            np.array([[2, 0, 7, 0], [0, 2, 0, 7], [5, 0, -3, 0], [0, 5, 0,
                                                                  -3]])
        }

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)
예제 #2
0
    def test_correct_vals_in_jac(self):

        #params_dict = OrderedDict()
        #params_dict['x'] = { 'val': np.ones((2)),
                             #'pathname' : 'x',
                             #'shape': 2, 'size' : 2 }

        #unknowns_dict = OrderedDict()
        #unknowns_dict['y'] = { 'val': np.zeros((2)),
                               #'pathname' : 'y',
                             #'shape': 2, 'size' : 2 }

        #resids_dict = OrderedDict()
        #resids_dict['y'] = { 'val': np.zeros((2)),
                             #'pathname' : 'y',
                             #'shape': 2, 'size' : 2 }

        #params = SrcVecWrapper()
        #params.setup(params_dict, store_byobjs=True)

        #unknowns = SrcVecWrapper()
        #unknowns.setup(unknowns_dict, store_byobjs=True)

        #resids = SrcVecWrapper()
        #resids.setup(resids_dict, store_byobjs=True)

        params = self.p.root.c1.params
        unknowns = self.p.root.c1.unknowns
        resids = self.p.root.c1.resids
        self.p.root.c1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.c1.fd_jacobian(params, unknowns, resids)

        expected_jac = {('y', 'x'): np.array([[ 2.,  7.],[ 5., -3.]])}

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        #Got lucky that the way this comp was written, it would accept any square
        # matrix. But provided jacobian would be really wrong!

        params = self.p.root.junk.params
        unknowns = self.p.root.junk.unknowns
        resids = self.p.root.junk.resids

        params['x'] = np.ones((2,2))
        unknowns['y'] = np.zeros((2,2))
        resids['y'] = np.zeros((2,2))

        self.p.root.c1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.c1.fd_jacobian(params, unknowns, resids)

        expected_jac = {('y', 'x'): np.array([[ 2,  0,  7,  0],
                                              [ 0,  2,  0,  7],
                                              [ 5,  0, -3,  0],
                                              [ 0,  5,  0, -3]
                                             ])}

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)
예제 #3
0
    def test_correct_vals_in_jac_implicit(self):

        # Partials

        params = self.p.root.ci1.params
        unknowns = self.p.root.ci1.unknowns
        resids = self.p.root.ci1.resids

        params['x'] = np.array([0.5])
        unknowns['y'] = np.array([0.0])
        unknowns['z'] = np.array([0.0])
        resids['y'] = np.array([0.0])
        resids['z'] = np.array([0.0])

        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids)
        expected_jac = {}
        # Output equation
        expected_jac[('y', 'x')] = 1.
        expected_jac[('y', 'z')] = 2.0
        # State equation
        expected_jac[('z', 'z')] = params['x'] + 1
        expected_jac[('z', 'x')] = unknowns['z']

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        # Totals

        # Really tighten this up
        self.p.root.ci1.atol = 1e-14
        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params,
                                          unknowns,
                                          resids,
                                          total_derivs=True)
        expected_jac = {}
        expected_jac[('y', 'x')] = -2.5555555555555554
        expected_jac[('z', 'x')] = -1.7777777777777777

        assert_equal_jacobian(self, jac, expected_jac, 1e-5)
예제 #4
0
    def test_correct_vals_in_jac_implicit(self):

        # Partials

        params = self.p.root.ci1.params
        unknowns = self.p.root.ci1.unknowns
        resids = self.p.root.ci1.resids

        params['x'] = np.array([0.5])
        unknowns['y'] = np.array([0.0])
        unknowns['z'] = np.array([0.0])
        resids['y'] = np.array([0.0])
        resids['z'] = np.array([0.0])

        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids)
        expected_jac = {}
        # Output equation
        expected_jac[('y', 'x')] = 1.
        expected_jac[('y', 'z')] = 2.0
        # State equation
        expected_jac[('z', 'z')] = params['x'] + 1
        expected_jac[('z', 'x')] = unknowns['z']

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        # Totals

        # Really tighten this up
        self.p.root.ci1.atol = 1e-14
        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids, total_derivs=True)
        expected_jac = {}
        expected_jac[('y', 'x')] = -2.5555555555555554
        expected_jac[('z', 'x')] = -1.7777777777777777

        assert_equal_jacobian(self, jac, expected_jac, 1e-5)
    def test_correct_vals_in_jac_implicit(self):

        params_dict = OrderedDict()
        params_dict['x'] = {
            'val': np.array([0.5]),
            'pathname': 'x',
            'promoted_name': 'x',
            'shape': (1, ),
            'size': 1
        }

        unknowns_dict = OrderedDict()
        unknowns_dict['y'] = {
            'val': np.array([0.0]),
            'pathname': 'y',
            'promoted_name': 'y',
            'shape': (1, ),
            'size': 1
        }
        unknowns_dict['z'] = {
            'val': np.array([0.0]),
            'pathname': 'z',
            'promoted_name': 'z',
            'shape': (1, ),
            'size': 1
        }

        resids_dict = OrderedDict()
        resids_dict['y'] = {
            'val': np.array([0.0]),
            'pathname': 'y',
            'promoted_name': 'y',
            'shape': (1, ),
            'size': 1
        }
        resids_dict['z'] = {
            'val': np.array([0.0]),
            'pathname': 'z',
            'promoted_name': 'z',
            'shape': (1, ),
            'size': 1
        }

        params = SrcVecWrapper()
        params.setup(params_dict, store_byobjs=True)

        unknowns = SrcVecWrapper()
        unknowns.setup(unknowns_dict, store_byobjs=True)

        resids = SrcVecWrapper()
        resids.setup(resids_dict, store_byobjs=True)

        # Partials

        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids)
        expected_jac = {}
        # Output equation
        expected_jac[('y', 'x')] = 1.
        expected_jac[('y', 'z')] = 2.0
        # State equation
        expected_jac[('z', 'z')] = params['x'] + 1
        expected_jac[('z', 'x')] = unknowns['z']

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        # Totals

        # Really tighten this up
        self.p.root.ci1.atol = 1e-14
        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params,
                                          unknowns,
                                          resids,
                                          total_derivs=True)
        expected_jac = {}
        expected_jac[('y', 'x')] = -2.5555555555555554
        expected_jac[('z', 'x')] = -1.7777777777777777

        assert_equal_jacobian(self, jac, expected_jac, 1e-5)
    def test_correct_vals_in_jac_implicit(self):

        params_dict = OrderedDict()
        params_dict['x'] = { 'val': np.array([0.5]),
                             'pathname' : 'x',
                             'promoted_name' : 'x',
                             'shape': (1,), 'size' : 1 }

        unknowns_dict = OrderedDict()
        unknowns_dict['y'] = { 'val': np.array([0.0]),
                               'pathname' : 'y',
                               'promoted_name' : 'y',
                             'shape': (1,), 'size' : 1 }
        unknowns_dict['z'] = { 'val': np.array([0.0]),
                               'pathname' : 'z',
                               'promoted_name' : 'z',
                             'shape': (1,), 'size' : 1 }

        resids_dict = OrderedDict()
        resids_dict['y'] = { 'val': np.array([0.0]),
                             'pathname' : 'y',
                             'promoted_name' : 'y',
                             'shape': (1,), 'size' : 1 }
        resids_dict['z'] = { 'val': np.array([0.0]),
                             'pathname' : 'z',
                             'promoted_name' : 'z',
                             'shape': (1,), 'size' : 1 }

        params = SrcVecWrapper()
        params.setup(params_dict, store_byobjs=True)

        unknowns = SrcVecWrapper()
        unknowns.setup(unknowns_dict, store_byobjs=True)

        resids = SrcVecWrapper()
        resids.setup(resids_dict, store_byobjs=True)

        # Partials

        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids)
        expected_jac = {}
        # Output equation
        expected_jac[('y', 'x')] = 1.
        expected_jac[('y', 'z')] = 2.0
        # State equation
        expected_jac[('z', 'z')] = params['x'] + 1
        expected_jac[('z', 'x')] = unknowns['z']

        assert_equal_jacobian(self, jac, expected_jac, 1e-8)

        # Totals

        # Really tighten this up
        self.p.root.ci1.atol = 1e-14
        self.p.root.ci1.solve_nonlinear(params, unknowns, resids)

        jac = self.p.root.ci1.fd_jacobian(params, unknowns, resids, total_derivs=True)
        expected_jac = {}
        expected_jac[('y', 'x')] = -2.5555555555555554
        expected_jac[('z', 'x')] = -1.7777777777777777

        assert_equal_jacobian(self, jac, expected_jac, 1e-5)