コード例 #1
0
 def test_equation_scaling(self):
     """
     test if user can set variable scaling.
     """
     self.model.set('_residual_equation_scaling',1)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_false(N.array_equal(solves[0].block_solves[0].iterations[0].residual_scaling,
                                          N.array([1., 1.])))
     
     self.setUp()
     self.model.set('_residual_equation_scaling',2)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_true(N.array_equal(solves[0].block_solves[0].iterations[0].residual_scaling, 
                            N.array([1., 3.])))
                            
     self.setUp()
     self.model.set('_residual_equation_scaling',0)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     #residual scaling is not loged when turned off.
     nose.tools.assert_false('residual_scaling' in solves[0].block_solves[0].iterations[0])
コード例 #2
0
    def test_equation_scaling(self):
        """
        test if user can set variable scaling.
        """
        self.setUp()
        self.model.set('_residual_equation_scaling',1)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        result = solves[0].block_solves[0].iterations[0].residual_scaling
        expected = N.array([1., 1.])
        err_msg = "Arrays are supposed to be different but are actually equal. Result={}\nExpected={}".format(result, expected)
        assert not N.allclose(result, expected), err_msg
        
#        self.setUp()
#        self.model.set('_residual_equation_scaling',2)
#        self.model.initialize()
#        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
#        log = parse_jmi_log(self.log_file_name)
#        solves = gather_solves(log)
#        nose.tools.assert_true(N.array_equal(solves[0].block_solves[0].iterations[0].residual_scaling, 
#                               N.array([1., 3.])))
                               
        self.setUp('test_KINsolver_options_log_res0.txt')
        self.model.set('_residual_equation_scaling',0)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        #residual scaling is not logged when turned off.
        condition = 'residual_scaling' in solves[0].block_solves[0].iterations[0]
        assert not condition, "Test failed because string residual_scaling was found in {}".format(solves[0].block_solves[0].iterations[0])
コード例 #3
0
    def test_equation_scaling(self):
        """
        test if user can set variable scaling.
        """
        self.model.set('_residual_equation_scaling', 1)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_false(
            N.array_equal(
                solves[0].block_solves[0].iterations[0].residual_scaling,
                N.array([1., 1.])))

        #        self.setUp()
        #        self.model.set('_residual_equation_scaling',2)
        #        self.model.initialize()
        #        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        #        log = parse_jmi_log(self.log_file_name)
        #        solves = gather_solves(log)
        #        nose.tools.assert_true(N.array_equal(solves[0].block_solves[0].iterations[0].residual_scaling,
        #                               N.array([1., 3.])))

        self.setUp()
        self.model.set('_residual_equation_scaling', 0)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        #residual scaling is not logged when turned off.
        nose.tools.assert_false(
            'residual_scaling' in solves[0].block_solves[0].iterations[0])
コード例 #4
0
ファイル: test_fmi.py プロジェクト: dotChris90/jmodelica
    def test_log_file(self):
        """
        Test that the log file is parsable
        """

        self.m.set('u1', 3)

        self.m.get('u1')
        self.m.set('y1', 0.)
        self.m.initialize()
        self.m.get('u1')
        self.m.set('u1', 4)
        self.m.get('u1')
        self.m.get_derivatives()
        self.m.set('y1', 0.5)
        self.m.get('x1')
        self.m.set('p', 0.5)
        self.m.get('x1')

        d = gather_solves(parse_jmi_log('LoggerTest_log.txt'))

        assert len(d) == 7, "Unexpected number of solver invocations"
        assert len(
            d[0]['block_solves']
        ) == 4, "Unexpected number of block solves in first iteration"
コード例 #5
0
ファイル: test_fmi.py プロジェクト: dotChris90/jmodelica
    def test_parse_log_file(self):
        """
        Test that a pregenerated log file is parsable
        """

        log = parse_jmi_log(
            os.path.join(path_to_fmu_logs, 'LoggerTest_log.txt'))

        assert log.find("EquationSolve")[0].t == 0.0

        d = gather_solves(log)

        assert len(d) == 8, "Unexpected number of solver invocations"
        assert d[0].t == 0.0
        assert len(
            d[0].block_solves
        ) == 4, "Unexpected number of block solves in first iteration"

        vars = d[0].block_solves[0].variables
        assert len(vars) == 3
        assert all(vars == N.asarray(['x1', 'z1', 'y1']))

        assert N.array_equiv(
            d[0].block_solves[0].min,
            N.asarray([
                -1.7976931348623157E+308, -1.7976931348623157E+308,
                -1.7976931348623157E+308
            ]))
        assert N.array_equiv(
            d[0].block_solves[0].max,
            N.asarray([
                1.7976931348623157E+308, 1.7976931348623157E+308,
                1.7976931348623157E+308
            ]))
        assert N.array_equiv(d[0].block_solves[0].initial_residual_scaling,
                             N.asarray([4.0, 1.0, 1.0]))
        assert len(d[0].block_solves[0].iterations) == 12

        assert N.array_equiv(d[0].block_solves[0].iterations[0].ivs,
                             N.asarray([0.0, 0.0, 1.4901161193847656E-08]))
        assert N.array_equiv(
            d[0].block_solves[0].iterations[0].residuals,
            N.asarray([-1.25, 1.1999999985098839E+01, 2.9999999850988388E+00]))

        assert N.array_equiv(
            d[0].block_solves[0].iterations[0].jacobian,
            N.asarray([[-1.0, 4.0, 0.0], [-1.0, -1.0, -1.0], [-1.0, 1.0,
                                                              -1.0]]))

        assert d[0].block_solves[0].iterations[0].jacobian_updated == True
        assert N.array_equiv(
            d[0].block_solves[0].iterations[0].residual_scaling,
            N.asarray([4.0, 1.0, 1.0]))
        assert d[0].block_solves[0].iterations[
            0].residual_scaling_updated == False
        nose.tools.assert_almost_equal(
            d[0].block_solves[0].iterations[0].scaled_residual_norm,
            1.2432316741177614E+01)
コード例 #6
0
 def test_debbug_solution(self):
     """
     That the correct solution is stored in the debug file.
     """
     
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     N.testing.assert_array_almost_equal(solves[0].block_solves[0].iterations[-1].ivs, N.array([N.sqrt(11), 5. ]))
コード例 #7
0
 def test_variable_scaling(self):
     """
     test if user can set variable scaling.
     """
     self.model.set('_iteration_variable_scaling', 0)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_true(N.array_equal(solves[0].block_solves[0].nominal,
                                          N.array([1.,1.])))
コード例 #8
0
    def test_debug_solution(self):
        """
        That the correct solution is stored in the debug file.
        """

        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        N.testing.assert_array_almost_equal(
            solves[0].block_solves[0].iterations[-1].ivs,
            N.array([N.sqrt(11), 5.]))
コード例 #9
0
 def test_variable_scaling(self):
     """
     test if user can set variable scaling.
     """
     self.model.set('_iteration_variable_scaling', 0)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_true(
         N.array_equal(solves[0].block_solves[0].nominal, N.array([1.,
                                                                   1.])))
コード例 #10
0
 def test_debug_solution(self):
     """
     That the correct solution is stored in the debug file.
     """
     self.setUp()
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     result = solves[0].block_solves[0].iterations[-1].ivs
     expected = N.array([N.sqrt(11), 5. ])
     err_msg = "Arrays are not almost equal:\nEXPECTED: {}\nACTUAL: {}".format(expected, result)
     N.testing.assert_array_almost_equal(result, expected, err_msg=err_msg)
コード例 #11
0
 def test_debug_solution(self):
     """
     That the correct solution is stored in the debug file.
     """
     self.setUp()
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     result = solves[0].block_solves[0].iterations[-1].ivs
     expected = N.array([N.sqrt(11), 5. ])
     err_msg = "Arrays not equal, expected {} but got {}".format(expected, result)
     assert N.allclose(result, expected), err_msg 
コード例 #12
0
 def test_variable_scaling(self):
     """
     test if user can set variable scaling.
     """
     self.setUp()
     self.model.set('_iteration_variable_scaling', 0)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     result = solves[0].block_solves[0].nominal
     expected = N.array([1.,1.])
     err_msg = "Arrays not equal, expected {} but got {}".format(expected, result)
     assert N.allclose(result, expected), err_msg
コード例 #13
0
 def test_debug_file(self):
     """
     That the correct amount of debug info is created.
     """
     self.setUp()
     self.model.set_debug_logging(True)
     self.model.set('_log_level',1)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert not solves, "Failed in assert (1/6) because list is not empty, got solves={}".format(solves)
     
     self.setUp()
     self.model.set('_log_level',2)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert not solves, "Failed in assert (2/6) because list is not empty, got solves={}".format(solves)
     
     self.setUp()
     self.model.set('_log_level',3)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert not solves, "Failed in assert (3/6) because list is not empty, got solves={}".format(solves)
     
     self.setUp()
     self.model.set('_log_level',4)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert not solves, "Failed in assert (4/6) because list is not empty, got solves={}".format(solves)
     
     self.setUp()
     self.model.set('_log_level',5)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert len(solves) == 4, "Failed in assert (5/6) because result is not of length 4, got solves={}, with length {}".format(solves, len(solves))
     
     self.setUp()
     self.model.set('_log_level',6)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     assert len(solves) == 4, "Failed in assert (6/6) because result is not of length 4, got solves={}, with length {}".format(solves, len(solves))
コード例 #14
0
 def test_debbug_file(self):
     """
     That the correct amount of debug info is created.
     """
     self.model.set_debug_logging(True)
     self.model.set('_log_level',1)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(solves, [])
     
     self.setUp()
     self.model.set('_log_level',2)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(solves, [])
     
     self.setUp()
     self.model.set('_log_level',3)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(solves, [])
     
     self.setUp()
     self.model.set('_log_level',4)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(solves, [])
     
     self.setUp()
     self.model.set('_log_level',5)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(len(solves), 3)
     
     self.setUp()
     self.model.set('_log_level',6)
     self.model.initialize()
     extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
     log = parse_jmi_log(self.log_file_name)
     solves = gather_solves(log)
     nose.tools.assert_equals(len(solves), 3)
コード例 #15
0
    def test_debbug_file(self):
        """
        That the correct amount of debug info is created.
        """
        self.model.set_debug_logging(True)
        self.model.set('_log_level', 1)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp()
        self.model.set('_log_level', 2)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp()
        self.model.set('_log_level', 3)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp()
        self.model.set('_log_level', 4)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp()
        self.model.set('_log_level', 5)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(len(solves), 4)

        self.setUp()
        self.model.set('_log_level', 6)
        self.model.initialize()
        extract_jmi_log('test_KINsolver_log.xml', self.log_file_name)
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(len(solves), 4)
コード例 #16
0
ファイル: test_fmi.py プロジェクト: jnorthrup/jmodelica
    def test_parse_log_file(self):
        """
        Test that a pregenerated log file is parsable
        """

        log = parse_jmi_log(os.path.join(path_to_fmu_logs, 'LoggerTest_log.txt'))

        assert log.find("EquationSolve")[0].t == 0.0
        
        d = gather_solves(log)

        assert len(d)==8, "Unexpected number of solver invocations"
        assert d[0].t==0.0
        assert len(d[0].block_solves)==4, "Unexpected number of block solves in first iteration"

        vars = d[0].block_solves[0].variables
        assert len(vars)==3
        assert all(vars==N.asarray(['x1', 'z1', 'y1']))
        
        assert N.array_equiv( d[0].block_solves[0].min,
                              N.asarray([-1.7976931348623157E+308, -1.7976931348623157E+308, -1.7976931348623157E+308]) )
        assert N.array_equiv( d[0].block_solves[0].max,
                              N.asarray([ 1.7976931348623157E+308,  1.7976931348623157E+308,  1.7976931348623157E+308]) )
        assert N.array_equiv( d[0].block_solves[0].initial_residual_scaling,
                              N.asarray([4.0, 1.0, 1.0]) )
        assert len(d[0].block_solves[0].iterations)==12

        assert N.array_equiv( d[0].block_solves[0].iterations[0].ivs,
                              N.asarray([0.0,  0.0,  1.4901161193847656E-08]) )
        assert N.array_equiv( d[0].block_solves[0].iterations[0].residuals,
                              N.asarray([-1.25, 1.1999999985098839E+01, 2.9999999850988388E+00]) )
        
        assert N.array_equiv( d[0].block_solves[0].iterations[0].jacobian,
                              N.asarray([[-1.0,  4.0,  0.0],
                                         [-1.0, -1.0, -1.0],
                                         [-1.0,  1.0, -1.0]]) )

        assert d[0].block_solves[0].iterations[0].jacobian_updated==True
        assert N.array_equiv( d[0].block_solves[0].iterations[0].residual_scaling,
                              N.asarray([ 4.0,  1.0,  1.0]) )
        assert d[0].block_solves[0].iterations[0].residual_scaling_updated==False
        nose.tools.assert_almost_equal( d[0].block_solves[0].iterations[0].scaled_residual_norm,
                                        1.2432316741177614E+01 )
コード例 #17
0
    def test_debug_file(self):
        """
        That the correct amount of debug info is created.
        """
        self.model.set_debug_logging(True)
        self.model.set('_log_level', 1)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp('test_KINsolver_options_log_ll2.txt')
        self.model.set('_log_level', 2)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp('test_KINsolver_options_log_ll3.txt')
        self.model.set('_log_level', 3)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp('test_KINsolver_options_log_ll4.txt')
        self.model.set('_log_level', 4)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(solves, [])

        self.setUp('test_KINsolver_options_log_ll5.txt')
        self.model.set('_log_level', 5)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        nose.tools.assert_equals(len(solves), 2)

        self.setUp('test_KINsolver_options_log_ll6.txt')
        self.model.set('_log_level', 6)
        self.model.initialize()
        log = parse_jmi_log(self.log_file_name)
        solves = gather_solves(log)
        print solves
        nose.tools.assert_equals(len(solves), 2)
コード例 #18
0
ファイル: test_fmi.py プロジェクト: jnorthrup/jmodelica
    def test_log_file(self):
        """
        Test that the log file is parsable
        """

        self.m.set('u1',3)

        self.m.get('u1')
        self.m.set('y1',0.)
        self.m.initialize()
        self.m.get('u1')
        self.m.set('u1',4)
        self.m.get('u1')
        self.m.get_derivatives()
        self.m.set('y1',0.5)
        self.m.get('x1')
        self.m.set('p',0.5)
        self.m.get('x1')

        d = gather_solves(parse_jmi_log('LoggerTest_log.txt'))

        assert len(d)==7, "Unexpected number of solver invocations"
        assert len(d[0]['block_solves'])==4, "Unexpected number of block solves in first iteration"
コード例 #19
0
ファイル: logger_example.py プロジェクト: jnorthrup/jmodelica
def run_demo():
    """
    Demonstrate how to parse a log file from a JModelica FMU.
    """

    curr_dir = os.path.dirname(os.path.abspath(__file__));
    file_name = os.path.join(curr_dir, 'files', 'LoggerTest.mo')
    
    fmu_name = compile_fmu('LoggerTest', file_name, compiler_log_level='i',
        compiler_options={'generate_only_initial_system':True})
    log_file_name='LoggerTest_log.txt'
    m = load_fmu(fmu_name, log_file_name=log_file_name)

    m.set_debug_logging(True)
    m.set('_log_level', 6)
    m.set_fmil_log_level(5)

    # Play around with the model
    
    m.set('u1',3)

    print 'u1' + str(m.get('u1'))
    print 'x1' + str(m.get('x1'))
    print 'y1' + str(m.get('y1'))
    print 'z1' + str(m.get('z1'))

    m.set('y1',0.)

    m.initialize()

    print "model initialized"

    print 'u1' + str(m.get('u1'))
    print 'x1' + str(m.get('x1'))
    print 'y1' + str(m.get('y1'))
    print 'z1' + str(m.get('z1'))

    m.set('u1',4)

    print "Input set"

    print 'u1' + str(m.get('u1'))
    print 'x1' + str(m.get('x1'))
    print 'y1' + str(m.get('y1'))
    print 'z1' + str(m.get('z1'))

    m.get_derivatives()

    m.set('y1',0.5)

    print "Set initial value of y1"

    print 'x1' + str(m.get('x1'))
    print 'y1' + str(m.get('y1'))
    print 'z1' + str(m.get('z1'))

    m.set('p',0.5)

    print "Set initial value of p"

    print 'x1' + str(m.get('x1'))
    print 'y1' + str(m.get('y1'))
    print 'z1' + str(m.get('z1'))

    # Parse the log file and print some of its contents

    # Extract the log file XML contents into a pure XML file
    dest_xml_file_name = 'LoggerTest_log.xml'
    extract_jmi_log(dest_xml_file_name, log_file_name)

    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)

    print
    print 'Top log node:        log =', log
    print 'Unnamed sub nodes:   log.nodes = ['
    for node in log.nodes:
        print '   ', node, ','
    print ']'
    print 'Time of first solve: log.nodes[0].t =', log.nodes[0].t

    # Gather information pertaining to equation solves
    solves = gather_solves(log)

    print
    print 'Number of solver invocations:',                      len(solves)
    print 'Time of first solve:',                               solves[0].t
    print 'Number of block solves in first solver invocation:', len(solves[0].block_solves)
    print 'Names of iteration variables in first block solve:', solves[0].block_solves[0].variables
    print 'Min bounds in first block solve:',                   solves[0].block_solves[0].min
    print 'Max bounds in first block solve:',                   solves[0].block_solves[0].max
    print 'Initial residual scaling in first block solve:',     solves[0].block_solves[0].initial_residual_scaling
    print 'Number of iterations in first block solve:',         len(solves[0].block_solves[0].iterations)
    print
    print 'First iteration in first block solve: '
    print '  Iteration variables:',              solves[0].block_solves[0].iterations[0].ivs
    print '  Scaled residuals:',                 solves[0].block_solves[0].iterations[0].residuals
    print '  Jacobian:\n',                       solves[0].block_solves[0].iterations[0].jacobian
    print '  Jacobian updated in iteration:',    solves[0].block_solves[0].iterations[0].jacobian_updated
    print '  Residual scaling factors:',         solves[0].block_solves[0].iterations[0].residual_scaling
    print '  Residual scaling factors_updated:', solves[0].block_solves[0].iterations[0].residual_scaling_updated
    print '  Scaled residual norm:',             solves[0].block_solves[0].iterations[0].scaled_residual_norm
コード例 #20
0
def run_demo():
    """
    Demonstrate how to parse a log file from a JModelica FMU.
    """

    curr_dir = os.path.dirname(os.path.abspath(__file__))
    file_name = os.path.join(curr_dir, 'files', 'LoggerTest.mo')

    fmu_name = compile_fmu(
        'LoggerTest',
        file_name,
        compiler_log_level='i',
        compiler_options={'generate_only_initial_system': True})
    log_file_name = 'LoggerTest_log.txt'
    m = load_fmu(fmu_name, log_file_name=log_file_name)

    m.set_debug_logging(True)
    m.set('_log_level', 6)
    m.set_fmil_log_level(5)

    # Play around with the model

    m.set('u1', 3)

    print('u1' + str(m.get('u1')))
    print('x1' + str(m.get('x1')))
    print('y1' + str(m.get('y1')))
    print('z1' + str(m.get('z1')))

    m.set('y1', 0.)

    m.initialize()

    print("model initialized")

    print('u1' + str(m.get('u1')))
    print('x1' + str(m.get('x1')))
    print('y1' + str(m.get('y1')))
    print('z1' + str(m.get('z1')))

    m.set('u1', 4)

    print("Input set")

    print('u1' + str(m.get('u1')))
    print('x1' + str(m.get('x1')))
    print('y1' + str(m.get('y1')))
    print('z1' + str(m.get('z1')))

    m.get_derivatives()

    m.set('y1', 0.5)

    print("Set initial value of y1")

    print('x1' + str(m.get('x1')))
    print('y1' + str(m.get('y1')))
    print('z1' + str(m.get('z1')))

    m.set('p', 0.5)

    print("Set initial value of p")

    print('x1' + str(m.get('x1')))
    print('y1' + str(m.get('y1')))
    print('z1' + str(m.get('z1')))

    # Parse the log file and print some of its contents

    # Extract the log file XML contents into a pure XML file
    dest_xml_file_name = 'LoggerTest_log.xml'
    extract_jmi_log(dest_xml_file_name, log_file_name)

    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)

    print()
    print('Top log node:        log =', log)
    print('Unnamed sub nodes:   log.nodes = [')
    for node in log.nodes:
        print('   ', node, ',')
    print(']')

    # Gather information pertaining to equation solves
    solves = gather_solves(log)

    print()
    print('Number of solver invocations:', len(solves))
    print('Time of first solve:', solves[0].t)
    print('Number of block solves in first solver invocation:',
          len(solves[0].block_solves))
    print('Names of iteration variables in first block solve:',
          solves[0].block_solves[0].variables)
    print('Min bounds in first block solve:', solves[0].block_solves[0].min)
    print('Max bounds in first block solve:', solves[0].block_solves[0].max)
    print('Initial residual scaling in first block solve:',
          solves[0].block_solves[0].initial_residual_scaling)
    print('Number of iterations in first block solve:',
          len(solves[0].block_solves[0].iterations))
    print()
    print('First iteration in first block solve: ')
    print('  Iteration variables:',
          solves[0].block_solves[0].iterations[0].ivs)
    print('  Scaled residuals:',
          solves[0].block_solves[0].iterations[0].scaled_residuals)
    print('  Jacobian:\n', solves[0].block_solves[0].iterations[0].jacobian)
    print('  Jacobian updated in iteration:',
          solves[0].block_solves[0].iterations[0].jacobian_updated)
    print('  Residual scaling factors:',
          solves[0].block_solves[0].iterations[0].residual_scaling)
    print('  Residual scaling factors_updated:',
          solves[0].block_solves[0].iterations[0].residual_scaling_updated)
    print('  Scaled residual norm:',
          solves[0].block_solves[0].iterations[0].scaled_residual_norm)
コード例 #21
0
ファイル: bounds_kinsol.py プロジェクト: jnorthrup/jmodelica
def run_demo(with_plots=True):
    """
    This example demonstrates how to initialize with and without active
    boundaries. The iterations are displaied graphically together with
    the boundaries.
    """
    curr_dir = os.path.dirname(os.path.abspath(__file__));
    fpath = os.path.join(curr_dir, 'files', 'BoundsDemo.mo')
    print(fpath)
    compile_fmu('BoundsDemo', fpath)
    
    log_file_name='files/bounds_kinsol.txt'
    m = load_fmu('BoundsDemo.fmu', log_file_name=log_file_name)
    
    m.set_debug_logging(True)
    m.set_fmil_log_level(5)
    m.set('_log_level',5)
    m.set('_nle_solver_log_level',3)
    
    m.set('_enforce_bounds',False)
    
    try:
        m.initialize()
        print 'Initialized OK'
    except:
        print 'Error in initialize'
    
    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)
    
    # Gather information pertaining to equation solves
    solves = gather_solves(log)
    
    print 'Number of iterations in solver without bounds:',\
            len(solves[0].block_solves[0].iterations), '+', len(solves[0].block_solves[1].iterations)
    
    print 'Solution: x_1=', m.get('x_1'),' x_2=', m.get('x_2') 
    
    nbr_iterations = len(solves[0].block_solves[0].iterations)
    iteration_points = numpy.zeros(shape=(nbr_iterations,2))
    
    for i in xrange(nbr_iterations):
        iteration_points[i] = solves[0].block_solves[0].iterations[i].ivs
    
    if with_plots:
        #Plot the iterations
        iteration_points_dx = diff(iteration_points[:, 0])
        iteration_points_dy = diff(iteration_points[:, 1])
        Q = quiver(iteration_points[0:-1,0], iteration_points[0:-1,1], 
               iteration_points_dx, iteration_points_dy,scale_units='xy', 
               angles='xy', scale=1, width=0.005, color='k')
        
        quiverkey(Q,4,8,1,"Iteration without active bounds",coordinates='data',color='k')
    
    m = load_fmu('BoundsDemo.fmu', log_file_name=log_file_name)
    m.set_debug_logging(True)
    m.set_fmil_log_level(5)
    m.set('_log_level',5)
    m.set('_nle_solver_log_level',3)
    
    m.set('_enforce_bounds',True)
    
    try:
        m.initialize()
        print 'Initialized OK'
    except:
        print 'Error in initialize'
    
    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)
    
    # Gather information pertaining to equation solves
    solves = gather_solves(log)
    
    print 'Number of iterations in solver with bounds:',\
            len(solves[0].block_solves[0].iterations), '+', len(solves[0].block_solves[1].iterations)
    
    print 'Solution: x_1=', m.get('x_1'),' x_2=', m.get('x_2') 
    
    nbr_iterations = len(solves[0].block_solves[0].iterations)
    iteration_points = numpy.zeros(shape=(nbr_iterations,2))
    
    for i in xrange(nbr_iterations):
        iteration_points[i] = solves[0].block_solves[0].iterations[i].ivs
    
    if with_plots:
        #Plot the iterations
        iteration_points_dx = diff(iteration_points[:, 0])
        iteration_points_dy = diff(iteration_points[:, 1])
        Q = quiver(iteration_points[0:-1,0], iteration_points[0:-1,1], 
               iteration_points_dx, iteration_points_dy,scale_units='xy', 
               angles='xy', scale=1, width=0.005, color='red', label='test')
        quiverkey(Q,4,7,1,"Iteration with active bounds",coordinates='data',color='r')
        
        #Plot the boundaries
        plot([-4, 4, 4, -4, -4], [-6, -6, 6, 6, -6], color='k')
        xlim([-5,7])
        ylim([-7,9])
        
        #Plot the contours
        x = arange(-5,7,0.1)
        y = arange(-7,9,0.1)
        X,Y = meshgrid(x, y)
        Z = (X**2 + Y**2 - 25)**2 + ((X - 5)**2 + (Y - 2)**2 - 4)**2
        contour_levels = [4**n for n in xrange(1,6)] 
        contour(X,Y,Z, contour_levels, colors='b')
        show() 
コード例 #22
0
def run_demo(with_plots=True):
    """
    This example demonstrates how to initialize with and without active
    boundaries. The iterations are displaied graphically together with
    the boundaries.
    """
    curr_dir = os.path.dirname(os.path.abspath(__file__))
    fpath = os.path.join(curr_dir, 'files', 'BoundsDemo.mo')
    print(fpath)
    compile_fmu('BoundsDemo', fpath)

    log_file_name = 'files/bounds_kinsol.txt'
    m = load_fmu('BoundsDemo.fmu', log_file_name=log_file_name)

    m.set_debug_logging(True)
    m.set_fmil_log_level(5)
    m.set('_log_level', 5)
    m.set('_nle_solver_log_level', 3)

    m.set('_enforce_bounds', False)

    try:
        m.initialize()
        print 'Initialized OK'
    except:
        print 'Error in initialize'

    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)

    # Gather information pertaining to equation solves
    solves = gather_solves(log)

    print 'Number of iterations in solver without bounds:',\
            len(solves[0].block_solves[0].iterations), '+', len(solves[0].block_solves[1].iterations)

    print 'Solution: x_1=', m.get('x_1'), ' x_2=', m.get('x_2')

    nbr_iterations = len(solves[0].block_solves[0].iterations)
    iteration_points = numpy.zeros(shape=(nbr_iterations, 2))

    for i in xrange(nbr_iterations):
        iteration_points[i] = solves[0].block_solves[0].iterations[i].ivs

    if with_plots:
        #Plot the iterations
        iteration_points_dx = diff(iteration_points[:, 0])
        iteration_points_dy = diff(iteration_points[:, 1])
        Q = quiver(iteration_points[0:-1, 0],
                   iteration_points[0:-1, 1],
                   iteration_points_dx,
                   iteration_points_dy,
                   scale_units='xy',
                   angles='xy',
                   scale=1,
                   width=0.005,
                   color='k')

        quiverkey(Q,
                  4,
                  8,
                  1,
                  "Iteration without active bounds",
                  coordinates='data',
                  color='k')

    m = load_fmu('BoundsDemo.fmu', log_file_name=log_file_name)
    m.set_debug_logging(True)
    m.set_fmil_log_level(5)
    m.set('_log_level', 5)
    m.set('_nle_solver_log_level', 3)

    m.set('_enforce_bounds', True)

    try:
        m.initialize()
        print 'Initialized OK'
    except:
        print 'Error in initialize'

    # Parse the entire XML log
    log = parse_jmi_log(log_file_name)

    # Gather information pertaining to equation solves
    solves = gather_solves(log)

    print 'Number of iterations in solver with bounds:',\
            len(solves[0].block_solves[0].iterations), '+', len(solves[0].block_solves[1].iterations)

    print 'Solution: x_1=', m.get('x_1'), ' x_2=', m.get('x_2')

    nbr_iterations = len(solves[0].block_solves[0].iterations)
    iteration_points = numpy.zeros(shape=(nbr_iterations, 2))

    for i in xrange(nbr_iterations):
        iteration_points[i] = solves[0].block_solves[0].iterations[i].ivs

    if with_plots:
        #Plot the iterations
        iteration_points_dx = diff(iteration_points[:, 0])
        iteration_points_dy = diff(iteration_points[:, 1])
        Q = quiver(iteration_points[0:-1, 0],
                   iteration_points[0:-1, 1],
                   iteration_points_dx,
                   iteration_points_dy,
                   scale_units='xy',
                   angles='xy',
                   scale=1,
                   width=0.005,
                   color='red',
                   label='test')
        quiverkey(Q,
                  4,
                  7,
                  1,
                  "Iteration with active bounds",
                  coordinates='data',
                  color='r')

        #Plot the boundaries
        plot([-4, 4, 4, -4, -4], [-6, -6, 6, 6, -6], color='k')
        xlim([-5, 7])
        ylim([-7, 9])

        #Plot the contours
        x = arange(-5, 7, 0.1)
        y = arange(-7, 9, 0.1)
        X, Y = meshgrid(x, y)
        Z = (X**2 + Y**2 - 25)**2 + ((X - 5)**2 + (Y - 2)**2 - 4)**2
        contour_levels = [4**n for n in xrange(1, 6)]
        contour(X, Y, Z, contour_levels, colors='b')
        show()