Ejemplo n.º 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 logged when turned off.
        nose.tools.assert_false(
            'residual_scaling' in solves[0].block_solves[0].iterations[0])
Ejemplo n.º 2
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. ]))
Ejemplo n.º 3
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.])))
Ejemplo n.º 4
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.])))
Ejemplo n.º 5
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.]))
Ejemplo n.º 6
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)
Ejemplo n.º 7
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 
Ejemplo n.º 8
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
Ejemplo n.º 9
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])
Ejemplo n.º 10
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)
Ejemplo n.º 11
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)
Ejemplo n.º 12
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))
Ejemplo n.º 13
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)
Ejemplo n.º 14
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 ']'
    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