예제 #1
0
def write_resdata(problem, file_name='', format='txt'):
    """
    Function that prints out results from a solved problem.
    
    Parameters::
        
        problem--
            Instance of JMUAlgebraic, must be solved.
        
        file_name --
            Name of the result file.
            Default: ''
        
        format --
            A string equal either to 'txt' for output to Dymola textual format 
            or 'mat' for output to Dymola binary Matlab format.
            Default: 'txt'

        Limitations::
        
            Only format='txt' is currently supported.
    """
    if not isinstance(problem, JMUAlgebraic):
        raise JMUAlgebraic_Exception(
            "Problem sent to write_resdata is not an instance of JMUAlgebraic")
    
    model = problem._model
    dx_s = problem._dx_size
    x_s = problem._x_size
    w_s = problem._w_size
    u_s = problem._u_size
    
    # Create data matrix
    data = N.zeros((1,1+dx_s+ \
                    x_s + \
                    u_s + \
                    w_s))
    data[0,:] = model.t
    data[0,1:1+dx_s] = model.real_dx
    data[0,1+dx_s:1+dx_s + x_s] = model.real_x
    data[0,1+dx_s + x_s:1+dx_s + x_s + u_s] = model.real_u
    data[0,1+dx_s + x_s + u_s: \
             1+dx_s + x_s + \
             u_s + w_s] = model.real_w
                        
    # Write result
    export_result_dymola(model,data, file_name=file_name, format=format)
예제 #2
0
def write_resdata(problem, file_name='', format='txt'):
    """
    Function that prints out results from a solved problem.
    
    Parameters::
        
        problem--
            Instance of JMUAlgebraic, must be solved.
        
        file_name --
            Name of the result file.
            Default: ''
        
        format --
            A string equal either to 'txt' for output to Dymola textual format 
            or 'mat' for output to Dymola binary Matlab format.
            Default: 'txt'

        Limitations::
        
            Only format='txt' is currently supported.
    """
    if not isinstance(problem, JMUAlgebraic):
        raise JMUAlgebraic_Exception(
            "Problem sent to write_resdata is not an instance of JMUAlgebraic")

    model = problem._model
    dx_s = problem._dx_size
    x_s = problem._x_size
    w_s = problem._w_size
    u_s = problem._u_size

    # Create data matrix
    data = N.zeros((1,1+dx_s+ \
                    x_s + \
                    u_s + \
                    w_s))
    data[0, :] = model.t
    data[0, 1:1 + dx_s] = model.real_dx
    data[0, 1 + dx_s:1 + dx_s + x_s] = model.real_x
    data[0, 1 + dx_s + x_s:1 + dx_s + x_s + u_s] = model.real_u
    data[0,1+dx_s + x_s + u_s: \
             1+dx_s + x_s + \
             u_s + w_s] = model.real_w

    # Write result
    export_result_dymola(model, data, file_name=file_name, format=format)
예제 #3
0
def write_data(simulator,write_scaled_result=False, result_file_name=''):
    """
    Writes simulation data to a file. Takes as input a simulated model.
    """
    #Determine the result file name
    if result_file_name == '':
        result_file_name=simulator.problem._model.get_name()+'_result.txt'
    
    if isinstance(simulator.problem, JMIDAE):
        
        model = simulator.problem._model
        problem = simulator.problem
        
        t = N.array(simulator.t_sol)
        y = N.array(simulator.y_sol)
        yd = N.array(simulator.yd_sol)
        if simulator.problem.input:
            u_name = [k[1] for k in sorted(model.get_u_variable_names())]
            #u = N.zeros((len(t), len(u_name)))
            u = N.ones((len(t), len(u_name)))*model.real_u
            u_mat = simulator.problem.input[1].eval(t)

            if not isinstance(simulator.problem.input[0],list):
                u_input_name = [simulator.problem.input[0]]
            else:
                u_input_name = simulator.problem.input[0]

            for i,n in enumerate(u_input_name):
                u[:,u_name.index(n)] = u_mat[:,i]/problem._input_nominal[i]
        else:
            u = N.ones((len(t),len(model.real_u)))*model.real_u
        
        # extends the time array with the states columnwise
        data = N.c_[t,yd[:,0:len(model.real_dx)]]
        data = N.c_[data, y[:,0:len(model.real_x)]]
        data = N.c_[data, u]
        data = N.c_[data, y[
            :,len(model.real_x):len(model.real_x)+len(model.real_w)]]

        export_result_dymola(model,data,scaled=write_scaled_result, \
                                file_name=result_file_name)
    elif isinstance(simulator.problem, JMIDAESens):
        
        model = simulator.problem._model
        problem = simulator.problem
        
        t = N.array(simulator.t_sol)
        y = N.array(simulator.y_sol)
        yd = N.array(simulator.yd_sol)
        if simulator.problem.input:
            u_name = [k[1] for k in sorted(model.get_u_variable_names())]
            #u = N.zeros((len(t), len(u_name)))
            u = N.ones((len(t), len(u_name)))*model.real_u
            u_mat = simulator.problem.input[1].eval(t)
            
            if not isinstance(simulator.problem.input[0],list):
                u_input_name = [simulator.problem.input[0]]
            else:
                u_input_name = simulator.problem.input[0]
            
            for i,n in enumerate(u_input_name):
                u[:,u_name.index(n)] = u_mat[:,i]/problem._input_nominal[i]
        else:
            u = N.ones((len(t),len(model.real_u)))*model.real_u
        
        p_names , p_data = simulator.problem.get_sens_result()
        
        # extends the time array with the states columnwise
        data = N.c_[t,yd[:,0:len(model.real_dx)]]
        data = N.c_[data, y[:,0:len(model.real_x)]]
        data = N.c_[data, u]
        data = N.c_[data, y[
            :,len(model.real_x):len(model.real_x)+len(model.real_w)]]

        for i in range(len(p_data)):
            data = N.c_[data, p_data[i]]

        export = ResultWriterDymolaSensitivity(model)
        export.write_header(scaled=write_scaled_result, \
                            file_name=result_file_name)
        map(export.write_point,(row for row in data))
        export.write_finalize()
        
    else:
        raise NotImplementedError