示例#1
0
    def solve_nonlinear(self, params, unknowns, resids):
        """ 
        The .exe executable is run to obtain the simulation result of the
        OpenModelica model.
        """
        etree = lmm.get_etree(self._init_xml)

        # Update the sim settings to the element tree
        lmm.change_experiment(etree,
                              startTime=params['startTime'],
                              stopTime=params['stopTime'],
                              stepSize=str(params['stepSize']),
                              tolerance=str(params['tolerance']),
                              solver=params['solver'])

        # Update the parameters to the element tree
        prm_dict = {}
        for prm_name in self._prm_attrib:
            print 'PARAMETER: ', prm_name, params[prm_name]
            prm_dict[prm_name] = params[prm_name]
        lmm.change_parameter(etree, prm_dict)

        # Rebuild _init.xml with the updated element tree
        etree.write(self._init_xml)
        subprocess.call([os.path.join(os.getcwd(), self.class_name)], shell=True)

        # Obtain the result from the result (.mat) file
        dd, desc = lmm.load_mat(self.class_name + '_res.mat')
        for var_name in self._var_attrib:
            print 'dd[' + var_name + '] = ', dd[var_name]
            unknowns[var_name] = dd[var_name]
    def execute(self):
        """ 
        The .exe executable is run to obtain the simulation result of the
        OpenModelica model.
        """
        etree = lmm.get_etree(self._init_xml)

        # Update the sim settings to the element tree
        lmm.change_experiment(etree,startTime = self.startTime,
                                    stopTime = self.stopTime,
                                    stepSize = str(self.stepSize),
                                    tolerance = str(self.tolerance),
                                    solver = self.solver)
        # Update the parameters to the element tree
        prm_dict = {}
        for prm_name in self._prm_attrib:
            prm_dict[prm_name] = eval("self."+prm_name)
        lmm.change_parameter(etree, prm_dict)

        # Rebuild _init.xml with the updated element tree
        etree.write(self._init_xml)
        subprocess.call([self.moFile+'.exe'],shell=True)

        # Obtain the result from the result (.mat) file
        dd,desc = lmm.load_mat(self.moFile+'_res.mat')
        for var_name in self._var_attrib:
            vars(self)[var_name] = dd[var_name]
示例#3
0
    def solve_nonlinear(self, params, unknowns, resids):
        """ 
        The .exe executable is run to obtain the simulation result of the
        OpenModelica model.
        """
        etree = lmm.get_etree(self._init_xml)

        # Update the sim settings to the element tree
        lmm.change_experiment(etree,
                              startTime=params['startTime'],
                              stopTime=params['stopTime'],
                              stepSize=str(params['stepSize']),
                              tolerance=str(params['tolerance']),
                              solver=params['solver'])

        # Update the parameters to the element tree
        prm_dict = {}
        for prm_name in self._prm_attrib:
            print 'PARAMETER: ', prm_name, params[prm_name]
            prm_dict[prm_name] = params[prm_name]
        lmm.change_parameter(etree, prm_dict)

        # Rebuild _init.xml with the updated element tree
        etree.write(self._init_xml)
        subprocess.call([os.path.join(os.getcwd(), self.class_name)],
                        shell=True)

        # Obtain the result from the result (.mat) file
        dd, desc = lmm.load_mat(self.class_name + '_res.mat')
        for var_name in self._var_attrib:
            print 'dd[' + var_name + '] = ', dd[var_name]
            unknowns[var_name] = dd[var_name]
示例#4
0
    def execute(self):
        """ 
        The .exe executable is run to obtain the simulation result of the
        OpenModelica model.
        """
        etree = lmm.get_etree(self._init_xml)

        # Update the sim settings to the element tree
        lmm.change_experiment(etree,
                              startTime=self.startTime,
                              stopTime=self.stopTime,
                              stepSize=str(self.stepSize),
                              tolerance=str(self.tolerance),
                              solver=self.solver)
        # Update the parameters to the element tree
        prm_dict = {}
        for prm_name in self._prm_attrib:
            prm_dict[prm_name] = eval("self." + prm_name)
        lmm.change_parameter(etree, prm_dict)

        # Rebuild _init.xml with the updated element tree
        etree.write(self._init_xml)
        subprocess.call([self.moFile + '.exe'], shell=True)

        # Obtain the result from the result (.mat) file
        dd, desc = lmm.load_mat(self.moFile + '_res.mat')
        for var_name in self._var_attrib:
            vars(self)[var_name] = dd[var_name]
    def __init__(self, moFile, pkgName=None):
        super(OMModelWrapper,self).__init__()

        self.moFile = moFile
        self._init_xml = moFile + "_init.xml"
        self._prm_attrib = []
        self._var_attrib = []
        self._wdir = os.getcwd()

        OM_build.build_modelica_model(usr_dir=self._wdir,fname=self.moFile, additionalLibs = pkgName)
        try:
            etree = lmm.get_etree(self._init_xml)
        except:
            sys.exit("FMI xml file incorrect or not exist")

        # Get the simulation settings
        sim_set = etree.find("DefaultExperiment").attrib
        self.add('startTime', Float(float(sim_set['startTime']),
                          iotype ='in',
                          desc   ='startTime',
                          units  ='s'))
        self.add('stopTime', Float(float(sim_set['stopTime']),
                          iotype ='in',
                          desc   ='stopTime',
                          units  ='s'))
        self.add('stepSize', Float(float(sim_set['stepSize']),
                          iotype ='in',
                          desc   ='stepSize',
                          units  ='s'))
        self.add('tolerance', Float(float(sim_set['tolerance']),
                          iotype ='in',
                          desc   ='tolerance'))
        self.add('solver', Str(sim_set['solver'],
                          iotype ='in',
                          desc   ='solver'))
        # Model param inputs
        varElem = etree.find("ModelVariables").getchildren()
        file_name = self.moFile+".mo"
        for var in varElem:
            if (file_name in var.attrib['fileName']) and\
               var.attrib['variability']=="parameter":
                print ' ', var.attrib['name']
                kwargs = {'iotype':'in', 'desc':var.attrib['name']}
                if var.find('Real') is not None:
                    value = float(var.find('Real').attrib['start'])
                    self.add(var.attrib['name'],Float(value,**kwargs))
                elif var.find('Integer') is not None:
                    value = int(var.find('Integer').attrib['start'])
                    self.add(var.attrib['name'],Int(value,**kwargs))
                elif var.find('Boolean') is not None:
                    if var.find('Boolean').attrib['start']=="0.0": value = 0
                    else: value = 1
                    kwargs['desc'] = kwargs['desc']+', boolean'
                    self.add(var.attrib['name'], Int(value,**kwargs))
                self._prm_attrib += [var.attrib['name']]


        # Next, outputs are found. Any variables except "parameters" in the
        # model file becomes output.
        for var in varElem:
            if (file_name in var.attrib['fileName']) and\
               var.attrib['variability'] != "parameter":
                print ' ', var.attrib['name']
                kwargs = {'iotype':'out', 'desc':var.attrib['name']}
                if var.find('Real') is not None:
                    kwargs['dtype'] = np.float
                elif var.find('Integer') is not None:
                    kwargs['dtype'] = np.int
                elif var.find('Boolean') is not None:
                    kwargs['dtype'] = np.bool
                    kwargs['desc'] = kwargs['desc']+', boolean'
                    self.add(var.attrib['name'], Int(value,**kwargs))
                self.add(var.attrib['name'],Array(np.array([]),**kwargs))
                self._var_attrib += [var.attrib['name']]
        self.time = Array(np.array([]),dtype=np.float,iotype='out',desc='time',units='s')
        self._var_attrib += ['time']
示例#6
0
    def __init__(self, fully_qualified_class_name, addl_pkg_abs_path=None):
        super(OMModelWrapper, self).__init__()

        self.class_name = fully_qualified_class_name.split('.')[-1]
        self._prm_attrib = []
        self._var_attrib = []
        self._wdir = os.getcwd()

        OM_build.build_modelica_model(usr_dir=self._wdir, fully_qualified_class_name=fully_qualified_class_name, additional_libs=addl_pkg_abs_path)
        self._init_xml = self.class_name + "_init.xml"
        try:
            etree = lmm.get_etree(self._init_xml)
        except:
            sys.exit("FMI xml file incorrect or not exist")

        # Get the simulation settings
        sim_set = etree.find("DefaultExperiment").attrib
        for param_name in ['startTime', 'stopTime', 'stepSize', 'tolerance', 'solver']:
            print (param_name, sim_set[param_name])
            self.add_param(param_name, val=sim_set[param_name])

        # Model param inputs
        model_variables = etree.find("ModelVariables").getchildren()
        file_name = self.class_name + ".mo"
        for var in model_variables:
            if (file_name in var.attrib['fileName']) and var.attrib['variability'] == "parameter":
                name = var.attrib['name']
                print ' ', name
                if var.find('Real') is not None:
                    value = float(var.find('Real').attrib['start'])
                    self.add_param(name, val=value)
                elif var.find('Integer') is not None:
                    value = int(var.find('Integer').attrib['start'])
                    self.add_param(name, val=value)
                elif var.find('Boolean') is not None:
                    if var.find('Boolean').attrib['start'] == "0.0":
                        value = 0
                    else:
                        value = 1
                    self.add_param(name, val=value)
                self._prm_attrib += [name]

        # Next, outputs are found. Any variables except "parameters" in the
        # model file becomes output.
        for var in model_variables:
            if (file_name in var.attrib['fileName']) and var.attrib['variability'] != "parameter":
                name = var.attrib['name']
                print ' ', name

                val = None
                if var.find('Real') is not None:
                    val = 0.0
                elif var.find('Integer') is not None:
                    val = 0
                elif var.find('Boolean') is not None:
                    val = 0

                try:
                    self.add_output(name, val=val, pass_by_obj=True)
                    self._var_attrib += [name]
                except:
                    pass

        self.add_output('time', val=0.0, pass_by_obj=True)
        self._var_attrib += ['time']
示例#7
0
    def __init__(self, fully_qualified_class_name, addl_pkg_abs_path=None):
        super(OMModelWrapper, self).__init__()

        self.class_name = fully_qualified_class_name.split('.')[-1]
        self._prm_attrib = []
        self._var_attrib = []
        self._wdir = os.getcwd()

        OM_build.build_modelica_model(
            usr_dir=self._wdir,
            fully_qualified_class_name=fully_qualified_class_name,
            additional_libs=addl_pkg_abs_path)
        self._init_xml = self.class_name + "_init.xml"
        try:
            etree = lmm.get_etree(self._init_xml)
        except:
            sys.exit("FMI xml file incorrect or not exist")

        # Get the simulation settings
        sim_set = etree.find("DefaultExperiment").attrib
        for param_name in [
                'startTime', 'stopTime', 'stepSize', 'tolerance', 'solver'
        ]:
            print(param_name, sim_set[param_name])
            self.add_param(param_name, val=sim_set[param_name])

        # Model param inputs
        model_variables = etree.find("ModelVariables").getchildren()
        file_name = self.class_name + ".mo"
        for var in model_variables:
            if (file_name in var.attrib['fileName']
                ) and var.attrib['variability'] == "parameter":
                name = var.attrib['name']
                print ' ', name
                if var.find('Real') is not None:
                    value = float(var.find('Real').attrib['start'])
                    self.add_param(name, val=value)
                elif var.find('Integer') is not None:
                    value = int(var.find('Integer').attrib['start'])
                    self.add_param(name, val=value)
                elif var.find('Boolean') is not None:
                    if var.find('Boolean').attrib['start'] == "0.0":
                        value = 0
                    else:
                        value = 1
                    self.add_param(name, val=value)
                self._prm_attrib += [name]

        # Next, outputs are found. Any variables except "parameters" in the
        # model file becomes output.
        for var in model_variables:
            if (file_name in var.attrib['fileName']
                ) and var.attrib['variability'] != "parameter":
                name = var.attrib['name']
                print ' ', name

                val = None
                if var.find('Real') is not None:
                    val = 0.0
                elif var.find('Integer') is not None:
                    val = 0
                elif var.find('Boolean') is not None:
                    val = 0

                try:
                    self.add_output(name, val=val, pass_by_obj=True)
                    self._var_attrib += [name]
                except:
                    pass

        self.add_output('time', val=0.0, pass_by_obj=True)
        self._var_attrib += ['time']
示例#8
0
    def __init__(self, moFile, pkgName=None):
        super(OMModelWrapper, self).__init__()

        self.moFile = moFile
        self._init_xml = moFile + "_init.xml"
        self._prm_attrib = []
        self._var_attrib = []
        self._wdir = os.getcwd()

        OM_build.build_modelica_model(usr_dir=self._wdir,
                                      fname=self.moFile,
                                      additionalLibs=pkgName)
        try:
            etree = lmm.get_etree(self._init_xml)
        except:
            sys.exit("FMI xml file incorrect or not exist")

        # Get the simulation settings
        sim_set = etree.find("DefaultExperiment").attrib
        self.add(
            'startTime',
            Float(float(sim_set['startTime']),
                  iotype='in',
                  desc='startTime',
                  units='s'))
        self.add(
            'stopTime',
            Float(float(sim_set['stopTime']),
                  iotype='in',
                  desc='stopTime',
                  units='s'))
        self.add(
            'stepSize',
            Float(float(sim_set['stepSize']),
                  iotype='in',
                  desc='stepSize',
                  units='s'))
        self.add(
            'tolerance',
            Float(float(sim_set['tolerance']), iotype='in', desc='tolerance'))
        self.add('solver', Str(sim_set['solver'], iotype='in', desc='solver'))
        # Model param inputs
        varElem = etree.find("ModelVariables").getchildren()
        file_name = self.moFile + ".mo"
        for var in varElem:
            if (file_name in var.attrib['fileName']) and\
               var.attrib['variability']=="parameter":
                print ' ', var.attrib['name']
                kwargs = {'iotype': 'in', 'desc': var.attrib['name']}
                if var.find('Real') is not None:
                    value = float(var.find('Real').attrib['start'])
                    self.add(var.attrib['name'], Float(value, **kwargs))
                elif var.find('Integer') is not None:
                    value = int(var.find('Integer').attrib['start'])
                    self.add(var.attrib['name'], Int(value, **kwargs))
                elif var.find('Boolean') is not None:
                    if var.find('Boolean').attrib['start'] == "0.0": value = 0
                    else: value = 1
                    kwargs['desc'] = kwargs['desc'] + ', boolean'
                    self.add(var.attrib['name'], Int(value, **kwargs))
                self._prm_attrib += [var.attrib['name']]

        # Next, outputs are found. Any variables except "parameters" in the
        # model file becomes output.
        for var in varElem:
            if (file_name in var.attrib['fileName']) and\
               var.attrib['variability'] != "parameter":
                print ' ', var.attrib['name']
                kwargs = {'iotype': 'out', 'desc': var.attrib['name']}
                if var.find('Real') is not None:
                    kwargs['dtype'] = np.float
                elif var.find('Integer') is not None:
                    kwargs['dtype'] = np.int
                elif var.find('Boolean') is not None:
                    kwargs['dtype'] = np.bool
                    kwargs['desc'] = kwargs['desc'] + ', boolean'
                    self.add(var.attrib['name'], Int(value, **kwargs))
                self.add(var.attrib['name'], Array(np.array([]), **kwargs))
                self._var_attrib += [var.attrib['name']]
        self.time = Array(np.array([]),
                          dtype=np.float,
                          iotype='out',
                          desc='time',
                          units='s')
        self._var_attrib += ['time']