diff --git a/src/OMSimulatorLib/System.cpp b/src/OMSimulatorLib/System.cpp index 92274d121..0c0c28758 100644 --- a/src/OMSimulatorLib/System.cpp +++ b/src/OMSimulatorLib/System.cpp @@ -528,8 +528,21 @@ oms_status_enu_t oms::System::importFromSSD(const pugi::xml_node& node, const st } else { - // store the ssv files and process it later while handling the connection, so all the components are loaded - ssvFileSources.push_back(ssvFileSource); + // store the ssv and ssm files and process it later while handling the connection, so all the components are loaded + pugi::xml_node parameterMapping = parameterBindingNode.child(oms::ssp::Version1_0::ssd::parameter_mapping); + + // check for parameterMapping (e.g) + if (parameterMapping) + { + // parameterMapping provided + std::string ssmFileSource = parameterMapping.attribute("source").as_string(); + startValuesFileSources[ssvFileSource] = ssmFileSource; + } + else + { + // no parameterMapping + startValuesFileSources[ssvFileSource] = ""; + } } } } @@ -718,8 +731,8 @@ oms_status_enu_t oms::System::importFromSSD(const pugi::xml_node& node, const st return logError("wrong xml schema detected: " + name); } - // check for ssvFileSource exist and set the values before the connections - if (!ssvFileSources.empty()) + // check for ssv FileSource exist and set the values before the connections + if (!startValuesFileSources.empty()) { importStartValuesFromSSV(); } @@ -2343,57 +2356,157 @@ oms_status_enu_t oms::System::importBusConnectorGeometry(const pugi::xml_node& n oms_status_enu_t oms::System::importStartValuesFromSSV() { - for (const auto& ssvFileSource : ssvFileSources) + for (const auto& file : startValuesFileSources) { - std::string tempdir = getModel()->getTempDirectory(); - filesystem::path temp_root(tempdir); - pugi::xml_document ssvdoc; - pugi::xml_parse_result result = ssvdoc.load_file((temp_root / ssvFileSource).string().c_str()); - pugi::xml_node parameterSet, parameters; + // mapping between a parameter in the source and a parameter of the system or component being parametrized + std::multimap mappedEntry; - if (result) // check from ssv file - { - parameterSet = ssvdoc.document_element(); // ssv:ParameterSet - parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); - } - else if (getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file)) // check in memory oms:ssv_file + // check for parameter mapping file ".ssm file" + if (!file.second.empty()) { - parameterSet = getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file).child(oms::ssp::Version1_0::ssv::parameter_set); // ssv:ParameterSet - parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); + importParamterMappingFromSSM(file.second, mappedEntry); + importStartValuesFromSSVHelper(file.first, mappedEntry); } else { - return logError("loading \"" + std::string(ssvFileSource) + "\" failed (" + std::string(result.description()) + ")"); + // no mapping file provided, apply the values from ssv file + importStartValuesFromSSVHelper(file.first, mappedEntry); } + } - if (parameters) + return oms_status_ok; +} + +oms_status_enu_t oms::System::importStartValuesFromSSVHelper(std::string fileName, std::multimap &mappedEntry) +{ + std::string tempdir = getModel()->getTempDirectory(); + filesystem::path temp_root(tempdir); + pugi::xml_document ssvdoc; + pugi::xml_parse_result result = ssvdoc.load_file((temp_root / fileName).string().c_str()); + pugi::xml_node parameterSet, parameters; + + if (result) // check from ssv file + { + parameterSet = ssvdoc.document_element(); // ssv:ParameterSet + parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); + } + else if (getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file)) // check in memory oms:ssv_file + { + parameterSet = getModel()->getSnapshot().child(oms::ssp::Version1_0::ssv_file).child(oms::ssp::Version1_0::ssv::parameter_set); // ssv:ParameterSet + parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); + } + else + { + return logError("loading \"" + std::string(fileName) + "\" failed (" + std::string(result.description()) + ")"); + } + + if (parameters) + { + for (pugi::xml_node_iterator itparameters = parameters.begin(); itparameters != parameters.end(); ++itparameters) { - for(pugi::xml_node_iterator itparameters = parameters.begin(); itparameters != parameters.end(); ++itparameters) + std::string name = itparameters->name(); + std::vector mappedcrefs; + if (name == oms::ssp::Version1_0::ssv::parameter) { - std::string name = itparameters->name(); - if (name == oms::ssp::Version1_0::ssv::parameter) + ComRef cref = ComRef(itparameters->attribute("name").as_string()); + // check cref has any mapping entry + if (!mappedEntry.empty()) { - ComRef cref = ComRef(itparameters->attribute("name").as_string()); - if (itparameters->child(oms::ssp::Version1_0::ssv::real_type)) + auto mapfind = mappedEntry.equal_range(cref); + for (auto it = mapfind.first; it != mapfind.second; ++it) { - double value = itparameters->child(oms::ssp::Version1_0::ssv::real_type).attribute("value").as_double(); + mappedcrefs.push_back(it->second); + } + } + + if (itparameters->child(oms::ssp::Version1_0::ssv::real_type)) + { + double value = itparameters->child(oms::ssp::Version1_0::ssv::real_type).attribute("value").as_double(); + if (!mappedcrefs.empty()) + { + for (const auto &mappedcref : mappedcrefs) + { + setReal(mappedcref, value); + } + } + else + { + // no mapping entry found, apply the default cref found in ssv file setReal(cref, value); } - else if(itparameters->child(oms::ssp::Version1_0::ssv::integer_type)) + } + else if (itparameters->child(oms::ssp::Version1_0::ssv::integer_type)) + { + int value = itparameters->child(oms::ssp::Version1_0::ssv::integer_type).attribute("value").as_int(); + if (!mappedcrefs.empty()) { - int value = itparameters->child(oms::ssp::Version1_0::ssv::integer_type).attribute("value").as_int(); + for (const auto &mappedcref : mappedcrefs) + { + setInteger(mappedcref, value); + } + } + else + { + // no mapping entry found, apply the default cref found in ssv file setInteger(cref, value); } - else if(itparameters->child(oms::ssp::Version1_0::ssv::boolean_type)) + } + else if (itparameters->child(oms::ssp::Version1_0::ssv::boolean_type)) + { + bool value = itparameters->child(oms::ssp::Version1_0::ssv::boolean_type).attribute("value").as_bool(); + if (!mappedcrefs.empty()) { - bool value = itparameters->child(oms::ssp::Version1_0::ssv::boolean_type).attribute("value").as_bool(); - setBoolean(cref, value); + for (const auto &mappedcref : mappedcrefs) + { + setBoolean(mappedcref, value); + } } else { - logError("Failed to import " + std::string(oms::ssp::Version1_0::ssv::parameter) + ":Unknown ParameterBinding-type"); + // no mapping entry found, apply the default cref found in ssv file + setBoolean(cref, value); } } + else + { + logError("Failed to import " + std::string(oms::ssp::Version1_0::ssv::parameter) + ":Unknown ParameterBinding-type"); + } + } + } + } + + return oms_status_ok; +} + +oms_status_enu_t oms::System::importParamterMappingFromSSM(std::string fileName, std::multimap &mappedEntry) +{ + std::string tempdir = getModel()->getTempDirectory(); + filesystem::path temp_root(tempdir); + pugi::xml_document ssmdoc; + pugi::xml_parse_result result = ssmdoc.load_file((temp_root / fileName).string().c_str()); + pugi::xml_node parameterMapping; + + if (result) // check from ssm file + { + parameterMapping = ssmdoc.document_element(); // ssm:ParameterMapping + } + + if (parameterMapping) + { + for (pugi::xml_node_iterator itparametermapping = parameterMapping.begin(); itparametermapping != parameterMapping.end(); ++itparametermapping) + { + std::string name = itparametermapping->name(); + if (name == oms::ssp::Version1_0::ssm::parameter_mapping_entry) + { + ComRef source = itparametermapping->attribute("source").as_string(); + if (!source.isEmpty()) + { + mappedEntry.insert(std::make_pair(source, itparametermapping->attribute("target").as_string())); + } + else + { + // default value will be applied + } } } } diff --git a/src/OMSimulatorLib/System.h b/src/OMSimulatorLib/System.h index a906036da..5e588c55c 100644 --- a/src/OMSimulatorLib/System.h +++ b/src/OMSimulatorLib/System.h @@ -164,7 +164,7 @@ namespace oms ctpl::thread_pool& getThreadPool(); std::string getUniqueID() const; - std::vector ssvFileSources; + std::map startValuesFileSources; ///< ssvFileSource mapped with ssmFilesource if mapping is provided, otherwise only ssvFilesource entry is made protected: System(const ComRef& cref, oms_system_enu_t type, Model* parentModel, System* parentSystem, oms_solver_enu_t solverMethod); @@ -215,6 +215,8 @@ namespace oms oms_status_enu_t importBusConnectorSignals(const pugi::xml_node& node); oms_status_enu_t importBusConnectorGeometry(const pugi::xml_node& node); oms_status_enu_t importStartValuesFromSSV(); + oms_status_enu_t importStartValuesFromSSVHelper(std::string fileName, std::multimap &mappedEntry); + oms_status_enu_t importParamterMappingFromSSM(std::string fileName, std::multimap &mappedEntry); }; } diff --git a/src/OMSimulatorLib/Values.cpp b/src/OMSimulatorLib/Values.cpp index 32b03ae92..dbe660100 100644 --- a/src/OMSimulatorLib/Values.cpp +++ b/src/OMSimulatorLib/Values.cpp @@ -120,6 +120,7 @@ oms_status_enu_t oms::Values::exportToSSD(pugi::xml_node& node) const pugi::xml_node node_parameters = node_parameterset.append_child(oms::ssp::Version1_0::ssv::parameters); exportStartValuesHelper(node_parameters); + exportParameterMappingInline(node_parameter_binding); return oms_status_ok; } @@ -128,32 +129,29 @@ oms_status_enu_t oms::Values::importFromSSD(const pugi::xml_node& node, const st { for (pugi::xml_node parameterBindingNode = node.child(oms::ssp::Version1_0::ssd::parameter_binding); parameterBindingNode; parameterBindingNode = parameterBindingNode.next_sibling(oms::ssp::Version1_0::ssd::parameter_binding)) { - std::string ssvFile = parameterBindingNode.attribute("source").as_string() ; - if (!ssvFile.empty()) + /* parameter bindings from ssv files are handled at system level (System.h) importStartValuesFromSSV() + (e.g) parameterBindingNode.attribute("source").as_string(); */ + + // inline ParameterBindings + if (parameterBindingNode.child(oms::ssp::Version1_0::ssv::parameter_set)) { - filesystem::path temp_root(tempdir); - pugi::xml_document ssvdoc; - pugi::xml_parse_result result = ssvdoc.load_file((temp_root / ssvFile).string().c_str()); - if (!result) - return logError("loading \"" + std::string(ssvFile) + "\" failed (" + std::string(result.description()) + ")"); - - pugi::xml_node parameterSet = ssvdoc.document_element(); // ssd:SystemStructureDescription - pugi::xml_node parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); - importStartValuesHelper(parameters); + logWarning_deprecated; } - else + pugi::xml_node parameterValues = parameterBindingNode.child(oms::ssp::Version1_0::ssd::parameter_values); + pugi::xml_node parameterSet = parameterValues.child(oms::ssp::Version1_0::ssv::parameter_set); + std::string paramsetVersion = parameterSet.attribute("version").as_string(); + pugi::xml_node parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); + + // check for parameterMapping (e.g) + pugi::xml_node ssd_parameterMapping = parameterBindingNode.child(oms::ssp::Version1_0::ssd::parameter_mapping); + pugi::xml_node ssm_parameterMapping = ssd_parameterMapping.child(oms::ssp::Version1_0::ssm::parameter_mapping); + + if (ssm_parameterMapping) { - // inline ParameterBindings - if (parameterBindingNode.child(oms::ssp::Version1_0::ssv::parameter_set)) - { - logWarning_deprecated; - } - pugi::xml_node parameterValues = parameterBindingNode.child(oms::ssp::Version1_0::ssd::parameter_values); - pugi::xml_node parameterSet = parameterValues.child(oms::ssp::Version1_0::ssv::parameter_set); - std::string paramsetVersion = parameterSet.attribute("version").as_string(); - pugi::xml_node parameters = parameterSet.child(oms::ssp::Version1_0::ssv::parameters); - importStartValuesHelper(parameters); + importParameterMappingInline(ssm_parameterMapping); } + + importStartValuesHelper(parameters); } return oms_status_ok; @@ -174,31 +172,109 @@ oms_status_enu_t oms::Values::exportToSSV(pugi::xml_node& node) const oms_status_enu_t oms::Values::exportStartValuesHelper(pugi::xml_node& node) const { // realStartValues - for (const auto& r : realStartValues) + std::vector realEntry; // list of exported cref entry + for (const auto &r : realStartValues) { - //std::cout << "\n Start Values : " << std::string(r.first) << " = " << r.second ; - pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); - node_parameter.append_attribute("name") = r.first.c_str(); - pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::real_type); - node_parameter_type.append_attribute("value") = r.second; + // check cref has entry associated with parameter mapping + ComRef cref = getMappedCrefEntry(r.first); + + // export cref if entry does not exist, as cref associated with parameter mapping can have multiple entries with same value + if (std::find(realEntry.begin(), realEntry.end(), cref) == realEntry.end()) + { + pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); + node_parameter.append_attribute("name") = cref.c_str(); + pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::real_type); + node_parameter_type.append_attribute("value") = r.second; + realEntry.push_back(cref); + } } // integerStartValues - for (const auto& i : integerStartValues) + std::vector integerEntry; // list of exported cref entry + for (const auto &i : integerStartValues) { - pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); - node_parameter.append_attribute("name") = i.first.c_str(); - pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::integer_type); - node_parameter_type.append_attribute("value") = i.second; + // check cref has entry associated with parameter mapping + ComRef cref = getMappedCrefEntry(i.first); + + // export cref if entry does not exist, as cref associated with parameter mapping can have multiple entries with same value + if (std::find(integerEntry.begin(), integerEntry.end(), cref) == integerEntry.end()) + { + pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); + node_parameter.append_attribute("name") = i.first.c_str(); + pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::integer_type); + node_parameter_type.append_attribute("value") = i.second; + integerEntry.push_back(cref); + } } // boolStartValues - for (const auto& b : booleanStartValues) + std::vector booleanEntry; // list of exported cref entry + for (const auto &b : booleanStartValues) { - pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); - node_parameter.append_attribute("name") = b.first.c_str(); - pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::boolean_type); - node_parameter_type.append_attribute("value") = b.second; + // check cref has entry associated with parameter mapping + ComRef cref = getMappedCrefEntry(b.first); + + // export cref if entry does not exist, as cref associated with parameter mapping can have multiple entries with same value + if (std::find(booleanEntry.begin(), booleanEntry.end(), cref) == booleanEntry.end()) + { + pugi::xml_node node_parameter = node.append_child(oms::ssp::Version1_0::ssv::parameter); + node_parameter.append_attribute("name") = b.first.c_str(); + pugi::xml_node node_parameter_type = node_parameter.append_child(oms::ssp::Version1_0::ssv::boolean_type); + node_parameter_type.append_attribute("value") = b.second; + booleanEntry.push_back(cref); + } + } + + return oms_status_ok; +} + +/* + * returns mapped cref if entry found associated with parameter mapping, + * otherwise return the default cref + */ +oms::ComRef oms::Values::getMappedCrefEntry(ComRef cref) const +{ + if (mappedEntry.empty()) + { + return cref; + } + + ComRef mappedCref = cref; + for (const auto &it : mappedEntry) + { + if (it.second == cref) + { + mappedCref = it.first; + break; + } + } + + return mappedCref; +} + +/* + * export parameter mapping inline associated with parameterbinding + * + * + * + * + * + */ +oms_status_enu_t oms::Values::exportParameterMappingInline(pugi::xml_node& node) const +{ + if (mappedEntry.empty()) + { + return oms_status_ok; + } + + pugi::xml_node ssd_parameter_mapping = node.append_child(oms::ssp::Version1_0::ssd::parameter_mapping); + pugi::xml_node ssm_parameter_mapping = ssd_parameter_mapping.append_child(oms::ssp::Version1_0::ssm::parameter_mapping); + + for (const auto& it : mappedEntry) + { + pugi::xml_node ssm_mapping_entry = ssm_parameter_mapping.append_child(oms::ssp::Version1_0::ssm::parameter_mapping_entry); + ssm_mapping_entry.append_attribute("source") = it.first.c_str(); + ssm_mapping_entry.append_attribute("target") = it.second.c_str(); } return oms_status_ok; @@ -289,23 +365,67 @@ oms_status_enu_t oms::Values::importStartValuesHelper(pugi::xml_node& parameters for(pugi::xml_node_iterator itparameters = parameters.begin(); itparameters != parameters.end(); ++itparameters) { std::string name = itparameters->name(); + std::vector mappedcrefs; if (name == oms::ssp::Version1_0::ssv::parameter) { ComRef cref = ComRef(itparameters->attribute("name").as_string()); + // check cref has any mapping entry + if (!mappedEntry.empty()) + { + auto mapfind = mappedEntry.equal_range(cref); + for (auto it = mapfind.first; it != mapfind.second; ++it) + { + mappedcrefs.push_back(it->second); + } + } + if (itparameters->child(oms::ssp::Version1_0::ssv::real_type)) { double value = itparameters->child(oms::ssp::Version1_0::ssv::real_type).attribute("value").as_double(); - setReal(cref, value); + if (!mappedcrefs.empty()) + { + for (const auto &mappedcref : mappedcrefs) + { + setReal(mappedcref, value); + } + } + else + { + // no mapping entry found, apply the default cref found in ssv file + setReal(cref, value); + } } - else if(itparameters->child(oms::ssp::Version1_0::ssv::integer_type)) + else if (itparameters->child(oms::ssp::Version1_0::ssv::integer_type)) { int value = itparameters->child(oms::ssp::Version1_0::ssv::integer_type).attribute("value").as_int(); - setInteger(cref, value); + if (!mappedcrefs.empty()) + { + for (const auto &mappedcref : mappedcrefs) + { + setInteger(mappedcref, value); + } + } + else + { + // no mapping entry found, apply the default cref found in ssv file + setInteger(cref, value); + } } else if(itparameters->child(oms::ssp::Version1_0::ssv::boolean_type)) { bool value = itparameters->child(oms::ssp::Version1_0::ssv::boolean_type).attribute("value").as_bool(); - setBoolean(cref, value); + if (!mappedcrefs.empty()) + { + for (const auto &mappedcref : mappedcrefs) + { + setBoolean(mappedcref, value); + } + } + else + { + // no mapping entry found, apply the default cref found in ssv file + setBoolean(cref, value); + } } else { @@ -363,3 +483,27 @@ oms_status_enu_t oms::Values::parseModelDescription(const char *filename) return oms_status_ok; } +oms_status_enu_t oms::Values::importParameterMappingInline(pugi::xml_node& parameterMapping) +{ + if (parameterMapping) + { + for (pugi::xml_node_iterator itparametermapping = parameterMapping.begin(); itparametermapping != parameterMapping.end(); ++itparametermapping) + { + std::string name = itparametermapping->name(); + if (name == oms::ssp::Version1_0::ssm::parameter_mapping_entry) + { + ComRef source = itparametermapping->attribute("source").as_string(); + if (!source.isEmpty()) + { + mappedEntry.insert(std::make_pair(source, itparametermapping->attribute("target").as_string())); + } + else + { + // default value will be applied + } + } + } + } + + return oms_status_ok; +} diff --git a/src/OMSimulatorLib/Values.h b/src/OMSimulatorLib/Values.h index b0a5697da..cdbd1cda9 100644 --- a/src/OMSimulatorLib/Values.h +++ b/src/OMSimulatorLib/Values.h @@ -57,9 +57,13 @@ namespace oms oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode, const ComRef& cref); ///< start values read from modelDescription.xml and creates a ssv template oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode, const ComRef& cref); ///< start values read from modelDescription.xml and creates a ssm template oms_status_enu_t exportStartValuesHelper(pugi::xml_node& node) const; + oms_status_enu_t exportParameterMappingInline(pugi::xml_node& node) const; oms_status_enu_t importStartValuesHelper(pugi::xml_node& parameters); + oms_status_enu_t importParameterMappingInline(pugi::xml_node& parameterMapping); oms_status_enu_t parseModelDescription(const char *filename); + oms::ComRef getMappedCrefEntry(ComRef cref) const; + std::map realStartValues; ///< parameters and start values defined before instantiating the FMU std::map integerStartValues; ///< parameters and start values defined before instantiating the FMU std::map booleanStartValues; ///< parameters and start values defined before instantiating the FMU @@ -72,6 +76,8 @@ namespace oms std::map modelDescriptionIntegerStartValues; ///< integer start values read from modelDescription.xml std::map modelDescriptionBooleanStartValues; ///< boolean start values read from modelDescription.xml + std::multimap mappedEntry; ///< parameter names and values provided in the parameter source are to be mapped to the parameters of the component or system + }; } diff --git a/src/OMSimulatorLib/ssd/Tags.cpp b/src/OMSimulatorLib/ssd/Tags.cpp index 89cd99077..37e976405 100644 --- a/src/OMSimulatorLib/ssd/Tags.cpp +++ b/src/OMSimulatorLib/ssd/Tags.cpp @@ -73,6 +73,7 @@ const char* oms::ssp::Version1_0::ssm_file = "oms:ss const char* oms::ssp::Version1_0::ssd::parameter_bindings = "ssd:ParameterBindings"; const char* oms::ssp::Version1_0::ssd::parameter_binding = "ssd:ParameterBinding"; const char* oms::ssp::Version1_0::ssd::parameter_values = "ssd:ParameterValues"; +const char* oms::ssp::Version1_0::ssd::parameter_mapping = "ssd:ParameterMapping"; const char* oms::ssp::Version1_0::ssv::parameter_set = "ssv:ParameterSet"; const char* oms::ssp::Version1_0::ssv::parameters = "ssv:Parameters"; diff --git a/src/OMSimulatorLib/ssd/Tags.h b/src/OMSimulatorLib/ssd/Tags.h index c479ed8e4..2d093c997 100644 --- a/src/OMSimulatorLib/ssd/Tags.h +++ b/src/OMSimulatorLib/ssd/Tags.h @@ -53,6 +53,7 @@ namespace oms extern const char* parameter_bindings; extern const char* parameter_binding; extern const char* parameter_values; + extern const char* parameter_mapping; } namespace ssm diff --git a/testsuite/OMSimulator/Makefile b/testsuite/OMSimulator/Makefile index 315b3afc6..cb5c80f43 100644 --- a/testsuite/OMSimulator/Makefile +++ b/testsuite/OMSimulator/Makefile @@ -15,6 +15,8 @@ import_export_parameters_to_ssv.lua \ import_export_snapshot.lua \ import_export.lua \ import_export.py \ +import_parameter_mapping_from_ssm.lua \ +import_parameter_mapping_inline.lua \ importStartValues.lua \ PI_Controller.lua \ QuarterCarModel.DisplacementDisplacement.lua \ diff --git a/testsuite/OMSimulator/import_parameter_mapping_from_ssm.lua b/testsuite/OMSimulator/import_parameter_mapping_from_ssm.lua new file mode 100644 index 000000000..be8b0a01c --- /dev/null +++ b/testsuite/OMSimulator/import_parameter_mapping_from_ssm.lua @@ -0,0 +1,115 @@ +-- status: correct +-- linux: yes +-- mingw: yes +-- win: no +-- mac: no + +oms_setCommandLineOption("--suppressPath=true") +oms_setTempDirectory("./import_parameter_mapping_ssm_lua/") + +oms_importFile("../resources/importParameterMapping.ssp"); + +oms_instantiate("import_parameter_mapping") + +print("info: Instantiation ") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + + +oms_initialize("import_parameter_mapping") +print("info: Initialization") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + + +oms_simulate("import_parameter_mapping") +print("info: Simulation") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + +-- Result: +-- info: model doesn't contain any continuous state +-- info: model doesn't contain any continuous state +-- info: Instantiation +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : 0.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 0.0 +-- info: Result file: import_parameter_mapping_res.mat (bufferSize=10) +-- info: Initialization +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : 0.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 0.0 +-- info: Simulation +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : 0.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 0.0 +-- endResult diff --git a/testsuite/OMSimulator/import_parameter_mapping_inline.lua b/testsuite/OMSimulator/import_parameter_mapping_inline.lua new file mode 100644 index 000000000..694827749 --- /dev/null +++ b/testsuite/OMSimulator/import_parameter_mapping_inline.lua @@ -0,0 +1,294 @@ +-- status: correct +-- linux: yes +-- mingw: yes +-- win: no +-- mac: no + +oms_setCommandLineOption("--suppressPath=true") +oms_setTempDirectory("./import_parameter_mapping_inline_lua/") + +oms_importFile("../resources/importParameterMappingInline.ssp"); + +src, status = oms_list("import_parameter_mapping") +print(src) + +oms_instantiate("import_parameter_mapping") + +print("info: Instantiation") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + + +oms_initialize("import_parameter_mapping") +print("info: Initialization") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + + +oms_simulate("import_parameter_mapping") +print("info: Simulation") +print("info: import_parameter_mapping.co_sim.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_1")) +print("info: import_parameter_mapping.co_sim.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_2")) +print("info: import_parameter_mapping.co_sim.Input_3 : " .. oms_getReal("import_parameter_mapping.co_sim.Input_3")) +print("info: import_parameter_mapping.co_sim.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_1")) +print("info: import_parameter_mapping.co_sim.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System1.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_1")) +print("info: import_parameter_mapping.co_sim.System1.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.Input_2")) +print("info: import_parameter_mapping.co_sim.System1.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_1")) +print("info: import_parameter_mapping.co_sim.System1.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System1.parameter_2")) + +print("info: import_parameter_mapping.co_sim.System2.Input_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_1")) +print("info: import_parameter_mapping.co_sim.System2.Input_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.Input_2")) +print("info: import_parameter_mapping.co_sim.System2.parameter_1 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_1")) +print("info: import_parameter_mapping.co_sim.System2.parameter_2 : " .. oms_getReal("import_parameter_mapping.co_sim.System2.parameter_2")) + +-- Result: +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- +-- info: model doesn't contain any continuous state +-- info: model doesn't contain any continuous state +-- info: Instantiation +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -50.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : -50.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 70.0 +-- info: Result file: import_parameter_mapping_res.mat (bufferSize=10) +-- info: Initialization +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -50.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : -50.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 70.0 +-- info: Simulation +-- info: import_parameter_mapping.co_sim.Input_1 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_2 : 20.0 +-- info: import_parameter_mapping.co_sim.Input_3 : 50.0 +-- info: import_parameter_mapping.co_sim.parameter_1 : -30.0 +-- info: import_parameter_mapping.co_sim.parameter_2 : -40.0 +-- info: import_parameter_mapping.co_sim.System1.Input_1 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.Input_2 : -100.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_1 : -50.0 +-- info: import_parameter_mapping.co_sim.System1.parameter_2 : -50.0 +-- info: import_parameter_mapping.co_sim.System2.Input_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.Input_2 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_1 : 70.0 +-- info: import_parameter_mapping.co_sim.System2.parameter_2 : 70.0 +-- endResult diff --git a/testsuite/resources/Makefile b/testsuite/resources/Makefile index d01b5f894..1dc3b341a 100644 --- a/testsuite/resources/Makefile +++ b/testsuite/resources/Makefile @@ -48,6 +48,8 @@ tlm.UpperPendulumFG \ SSPs = \ importStartValues \ +importParameterMapping \ +importParameterMappingInline \ MOSs = \ diff --git a/testsuite/resources/importParameterMapping/SystemStructure.ssd b/testsuite/resources/importParameterMapping/SystemStructure.ssd new file mode 100644 index 000000000..298adf3af --- /dev/null +++ b/testsuite/resources/importParameterMapping/SystemStructure.ssd @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssm b/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssm new file mode 100644 index 000000000..6b669150a --- /dev/null +++ b/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssm @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssv b/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssv new file mode 100644 index 000000000..f02cf39e8 --- /dev/null +++ b/testsuite/resources/importParameterMapping/resources/import_parameter_mapping.ssv @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/testsuite/resources/importParameterMappingInline/SystemStructure.ssd b/testsuite/resources/importParameterMappingInline/SystemStructure.ssd new file mode 100644 index 000000000..3ebbf7415 --- /dev/null +++ b/testsuite/resources/importParameterMappingInline/SystemStructure.ssd @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +