diff --git a/OMEdit/OMEditGUI/Options/OptionsDialog.cpp b/OMEdit/OMEditGUI/Options/OptionsDialog.cpp index f1195c138..3007985cc 100644 --- a/OMEdit/OMEditGUI/Options/OptionsDialog.cpp +++ b/OMEdit/OMEditGUI/Options/OptionsDialog.cpp @@ -572,6 +572,9 @@ void OptionsDialog::readSimulationSettings() if (mpSettings->contains("simulation/newInst")) { mpSimulationPage->getTranslationFlagsWidget()->getNewInstantiationCheckBox()->setChecked(mpSettings->value("simulation/newInst").toBool()); } + if (mpSettings->contains("simulation/dataReconciliation")) { + mpSimulationPage->getTranslationFlagsWidget()->getDataReconciliationCheckBox()->setChecked(mpSettings->value("simulation/dataReconciliation").toBool()); + } if (mpSettings->contains("simulation/OMCFlags")) { mpSimulationPage->getTranslationFlagsWidget()->getAdditionalTranslationFlagsTextBox()->setText(mpSettings->value("simulation/OMCFlags").toString()); } @@ -1179,6 +1182,8 @@ void OptionsDialog::saveSimulationSettings() mpSettings->setValue("simulation/parmodauto", mpSimulationPage->getTranslationFlagsWidget()->getParmodautoCheckBox()->isChecked()); // save new instantiation mpSettings->setValue("simulation/newInst", mpSimulationPage->getTranslationFlagsWidget()->getNewInstantiationCheckBox()->isChecked()); + // save dataReconciliation + mpSettings->setValue("simulation/dataReconciliation", mpSimulationPage->getTranslationFlagsWidget()->getDataReconciliationCheckBox()->isChecked()); // save command line options if (mpSimulationPage->getTranslationFlagsWidget()->applyFlags()) { mpSettings->setValue("simulation/OMCFlags", mpSimulationPage->getTranslationFlagsWidget()->getAdditionalTranslationFlagsTextBox()->text()); diff --git a/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp b/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp index ef0442f1e..02aa8f0e2 100644 --- a/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp +++ b/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp @@ -453,6 +453,25 @@ void SimulationDialog::setUpForm() mpCPUTimeCheckBox = new QCheckBox(tr("CPU Time")); // enable all warnings mpEnableAllWarningsCheckBox = new QCheckBox(tr("Enable All Warnings")); + // Data reconciliation + mpReconcileGroupBox = new QGroupBox(tr("Data Reconciliation Algorithm for Constrained Equation")); + mpReconcileGroupBox->setCheckable(true); + mpCovarianceMatrixSxLabel = new Label(tr("Covariance Matrix Sx")); + mpCovarianceMatrixSxTextBox = new QLineEdit; + mpCovarianceMatrixSxBrowseButton = new QPushButton(Helper::browse); + connect(mpCovarianceMatrixSxBrowseButton, SIGNAL(clicked()), SLOT(browseCovarianceMatrixSxFile())); + mpCovarianceMatrixSxBrowseButton->setAutoDefault(false); + mpNumberOfConvergenceIterationsLabel = new Label(tr("Number of Convergence Iterations")); + mpNumberOfConvergenceIterationsTextBox = new QLineEdit; + // set the reconcile groupbox layout + QGridLayout *pReconcileGridLayout = new QGridLayout; + pReconcileGridLayout->setAlignment(Qt::AlignTop); + pReconcileGridLayout->addWidget(mpCovarianceMatrixSxLabel, 0, 0); + pReconcileGridLayout->addWidget(mpCovarianceMatrixSxTextBox, 0, 1); + pReconcileGridLayout->addWidget(mpCovarianceMatrixSxBrowseButton, 0, 2); + pReconcileGridLayout->addWidget(mpNumberOfConvergenceIterationsLabel, 1, 0); + pReconcileGridLayout->addWidget(mpNumberOfConvergenceIterationsTextBox, 1, 1, 1, 2); + mpReconcileGroupBox->setLayout(pReconcileGridLayout); // Logging mpLoggingGroupBox = new QGroupBox(tr("Logging (Optional)")); // fetch the logging flags information @@ -514,11 +533,12 @@ void SimulationDialog::setUpForm() pSimulationFlagsTabLayout->addWidget(mpOutputVariablesTextBox, 8, 1, 1, 2); pSimulationFlagsTabLayout->addWidget(mpProfilingLabel, 9, 0); pSimulationFlagsTabLayout->addWidget(mpProfilingComboBox, 9, 1, 1, 2); - pSimulationFlagsTabLayout->addWidget(mpCPUTimeCheckBox, 10, 0); - pSimulationFlagsTabLayout->addWidget(mpEnableAllWarningsCheckBox, 11, 0); - pSimulationFlagsTabLayout->addWidget(mpLoggingGroupBox, 12, 0, 1, 3); - pSimulationFlagsTabLayout->addWidget(mpAdditionalSimulationFlagsLabel, 13, 0); - pSimulationFlagsTabLayout->addLayout(pAdditionalSimulationFlagsTabLayout, 13, 1, 1, 2); + pSimulationFlagsTabLayout->addWidget(mpCPUTimeCheckBox, 10, 0, 1, 3); + pSimulationFlagsTabLayout->addWidget(mpEnableAllWarningsCheckBox, 11, 0, 1, 3); + pSimulationFlagsTabLayout->addWidget(mpReconcileGroupBox, 12, 0, 1, 3); + pSimulationFlagsTabLayout->addWidget(mpLoggingGroupBox, 13, 0, 1, 3); + pSimulationFlagsTabLayout->addWidget(mpAdditionalSimulationFlagsLabel, 14, 0); + pSimulationFlagsTabLayout->addLayout(pAdditionalSimulationFlagsTabLayout, 14, 1, 1, 2); mpSimulationFlagsTab->setLayout(pSimulationFlagsTabLayout); // add Output Tab to Simulation TabWidget mpSimulationTabWidget->addTab(mpSimulationFlagsTabScrollArea, tr("Simulation Flags")); @@ -690,6 +710,7 @@ void SimulationDialog::initializeFields(bool isReSimulate, SimulationOptions sim mpTranslationFlagsWidget->getPedanticCheckBox()->setChecked(pGlobalTranslationFlagsWidget->getPedanticCheckBox()->isChecked()); mpTranslationFlagsWidget->getParmodautoCheckBox()->setChecked(pGlobalTranslationFlagsWidget->getParmodautoCheckBox()->isChecked()); mpTranslationFlagsWidget->getNewInstantiationCheckBox()->setChecked(pGlobalTranslationFlagsWidget->getNewInstantiationCheckBox()->isChecked()); + mpTranslationFlagsWidget->getDataReconciliationCheckBox()->setChecked(pGlobalTranslationFlagsWidget->getDataReconciliationCheckBox()->isChecked()); mpTranslationFlagsWidget->getAdditionalTranslationFlagsTextBox()->setText(pGlobalTranslationFlagsWidget->getAdditionalTranslationFlagsTextBox()->text()); // if ignoreCommandLineOptionsAnnotation flag is not set then read the __OpenModelica_commandLineOptions annotation if (!OptionsDialog::instance()->getSimulationPage()->getIgnoreCommandLineOptionsAnnotationCheckBox()->isChecked()) { @@ -707,7 +728,6 @@ void SimulationDialog::initializeFields(bool isReSimulate, SimulationOptions sim commandLineOptionValues = ""; } QString commandLineOptionKeyFiltered = QString(commandLineOptionKey).remove(QRegExp("\\-|\\--|\\+")); - QStringList additionalDebugFlagsList; if (commandLineOptionKeyFiltered.compare("matchingAlgorithm") == 0) { int currentIndex = mpTranslationFlagsWidget->getMatchingAlgorithmComboBox()->findText(commandLineOptionValues); if (currentIndex > -1) { @@ -720,6 +740,7 @@ void SimulationDialog::initializeFields(bool isReSimulate, SimulationOptions sim } } else if (commandLineOptionKeyFiltered.compare("d") == 0) { // check debug flags i.e., -d=evaluateAllParameters,initialization etc. QStringList commandLineOptionValuesList = commandLineOptionValues.split(","); + QStringList additionalDebugFlagsList; foreach (QString commandLineOptionValue, commandLineOptionValuesList) { commandLineOptionValue = commandLineOptionValue.trimmed(); if (commandLineOptionValue.compare("initialization") == 0) { @@ -741,6 +762,20 @@ void SimulationDialog::initializeFields(bool isReSimulate, SimulationOptions sim if (!additionalDebugFlagsList.isEmpty()) { additionalTranslationFlagsList.append(QString("-d=%1").arg(additionalDebugFlagsList.join(","))); } + } else if (commandLineOptionKeyFiltered.compare("d") == 0) { // check preOptModules i.e., --preOptModules+=dataReconciliation etc. + QStringList commandLineOptionValuesList = commandLineOptionValues.split(","); + QStringList additionalPreOptModulesList; + foreach (QString commandLineOptionValue, commandLineOptionValuesList) { + commandLineOptionValue = commandLineOptionValue.trimmed(); + if (commandLineOptionValue.compare("dataReconciliation") == 0) { + mpTranslationFlagsWidget->getDataReconciliationCheckBox()->setChecked(true); + } else { + additionalPreOptModulesList.append(commandLineOptionValue); + } + } + if (!additionalPreOptModulesList.isEmpty()) { + additionalTranslationFlagsList.append(QString("--preOptModules+=%1").arg(additionalPreOptModulesList.join(","))); + } } else { if (commandLineOptionValues.isEmpty()) { additionalTranslationFlagsList.append(commandLineOptionKey); @@ -971,6 +1006,10 @@ void SimulationDialog::applySimulationOptions(SimulationOptions simulationOption mpCPUTimeCheckBox->setChecked(simulationOptions.getCPUTime()); // enable all warnings mpEnableAllWarningsCheckBox->setChecked(simulationOptions.getEnableAllWarnings()); + // enable reconcile + mpReconcileGroupBox->setChecked(simulationOptions.getReconcile()); + mpCovarianceMatrixSxTextBox->setText(simulationOptions.getCovarianceMatrixSxFile()); + mpNumberOfConvergenceIterationsTextBox->setText(simulationOptions.getNumberOfConvergenceIterations()); // Logging QStringList logStreams = simulationOptions.getLogStreams(); int i = 0; @@ -1122,6 +1161,9 @@ SimulationOptions SimulationDialog::createSimulationOptions() simulationOptions.setProfiling(mpProfilingComboBox->currentText()); simulationOptions.setCPUTime(mpCPUTimeCheckBox->isChecked()); simulationOptions.setEnableAllWarnings(mpEnableAllWarningsCheckBox->isChecked()); + simulationOptions.setReconcile(mpReconcileGroupBox->isChecked()); + simulationOptions.setCovarianceMatrixSxFile(mpCovarianceMatrixSxTextBox->text()); + simulationOptions.setNumberOfConvergenceIterations(mpNumberOfConvergenceIterationsTextBox->text()); QStringList logStreams; int i = 0; while (QLayoutItem* pLayoutItem = mpLoggingGroupLayout->itemAt(i)) { @@ -1267,6 +1309,16 @@ SimulationOptions SimulationDialog::createSimulationOptions() if (mpEnableAllWarningsCheckBox->isChecked()) { simulationFlags.append("-w"); } + // setup data reconciliation + if (mpReconcileGroupBox->isChecked()) { + simulationFlags.append("-reconcile"); + if (!mpCovarianceMatrixSxTextBox->text().isEmpty()) { + simulationFlags.append(QString("-sx=").append(mpCovarianceMatrixSxTextBox->text())); + } + if (!mpNumberOfConvergenceIterationsTextBox->text().isEmpty()) { + simulationFlags.append(QString("-eps=").append(mpNumberOfConvergenceIterationsTextBox->text())); + } + } // setup Logging flags if (logStreams.size() > 0) { simulationFlags.append(QString("-lv=").append(logStreams.join(","))); @@ -1865,7 +1917,7 @@ void SimulationDialog::simulationProcessFinished(SimulationOptions simulationOpt */ bool resultFileNonZeroSize = MainWindow::instance()->getOMCProxy()->readSimulationResultSize(resultFileInfo.absoluteFilePath()) > 0; - if (resultFileKnown && resultFileExists && resultFileNewer && resultFileNonZeroSize) { + if (resultFileKnown && resultFileExists && resultFileNewer && resultFileNonZeroSize) { VariablesWidget *pVariablesWidget = MainWindow::instance()->getVariablesWidget(); OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy(); QStringList list = pOMCProxy->readSimulationResultVars(resultFileInfo.absoluteFilePath()); @@ -1918,6 +1970,20 @@ void SimulationDialog::simulationProcessFinished(SimulationOptions simulationOpt simulationOptions.getLaunchTransformationalDebugger() || simulationOptions.getProfiling() != "none") { MainWindow::instance()->showTransformationsWidget(simulationOptions.getWorkingDirectory() + "/" + simulationOptions.getOutputFileName() + "_info.json"); } + // Show the data reconciliation report + if (simulationOptions.getReconcile()) { + // read the report file + QFileInfo reportFileInfo(QString("%1/%2.html").arg(workingDirectory, simulationOptions.getClassName())); + reportFileInfo.setCaching(false); + QDateTime reportFileModificationTime = reportFileInfo.lastModified(); + bool reportFileExists = reportFileInfo.exists(); + // use secsTo as lastModified returns to second not to mili/nanoseconds, see #5251 + bool reportFileNewer = resultFileLastModifiedDateTime.secsTo(reportFileModificationTime) >= 0; + if (reportFileExists && reportFileNewer) { + QUrl url (QString("file:///%1/%2.html").arg(simulationOptions.getWorkingDirectory(), simulationOptions.getClassName())); + QDesktopServices::openUrl(url); + } + } } /*! @@ -2058,7 +2124,17 @@ void SimulationDialog::browseModelSetupFile() */ void SimulationDialog::browseEquationSystemInitializationFile() { - mpEquationSystemInitializationFileTextBox->setText(StringHandler::getOpenFileName(this, QString(Helper::applicationName).append(" - ").append(Helper::chooseFile), NULL, Helper::matFileTypes, NULL)); + mpEquationSystemInitializationFileTextBox->setText(StringHandler::getOpenFileName(this, QString("%1 - %2").arg(Helper::applicationName, Helper::chooseFile), NULL, Helper::matFileTypes, NULL)); +} + +/*! + * \brief SimulationDialog::browseCovarianceMatrixSxFile + * Slot activated when mpCovarianceMatrixSxBrowseButton clicked signal is raised.\n + * Allows user to select covariance matrix file. + */ +void SimulationDialog::browseCovarianceMatrixSxFile() +{ + mpCovarianceMatrixSxTextBox->setText(StringHandler::getOpenFileName(this, QString("%1 - %2").arg(Helper::applicationName, Helper::chooseFile), NULL, Helper::csvFileTypes, NULL)); } /*! diff --git a/OMEdit/OMEditGUI/Simulation/SimulationDialog.h b/OMEdit/OMEditGUI/Simulation/SimulationDialog.h index 355c07038..7426ac5bd 100644 --- a/OMEdit/OMEditGUI/Simulation/SimulationDialog.h +++ b/OMEdit/OMEditGUI/Simulation/SimulationDialog.h @@ -172,6 +172,12 @@ class SimulationDialog : public QDialog QComboBox *mpProfilingComboBox; QCheckBox *mpCPUTimeCheckBox; QCheckBox *mpEnableAllWarningsCheckBox; + QGroupBox *mpReconcileGroupBox; + Label *mpCovarianceMatrixSxLabel; + QLineEdit *mpCovarianceMatrixSxTextBox; + QPushButton *mpCovarianceMatrixSxBrowseButton; + Label *mpNumberOfConvergenceIterationsLabel; + QLineEdit *mpNumberOfConvergenceIterationsTextBox; QGroupBox *mpLoggingGroupBox; QGridLayout *mpLoggingGroupLayout; Label *mpAdditionalSimulationFlagsLabel; @@ -250,6 +256,7 @@ public slots: void interactiveSimulation(bool checked); void browseModelSetupFile(); void browseEquationSystemInitializationFile(); + void browseCovarianceMatrixSxFile(); void showSimulationFlagsHelp(); void showArchivedSimulation(QTreeWidgetItem *pTreeWidgetItem); void simulate(); diff --git a/OMEdit/OMEditGUI/Simulation/SimulationOptions.h b/OMEdit/OMEditGUI/Simulation/SimulationOptions.h index 76667a1d1..3ffcf7493 100644 --- a/OMEdit/OMEditGUI/Simulation/SimulationOptions.h +++ b/OMEdit/OMEditGUI/Simulation/SimulationOptions.h @@ -78,6 +78,7 @@ class SimulationOptions setPedantic(false); setParmodauto(false); setNewInstantiation(false); + setDataReconciliation(false); setAdditionalTranslationFlags(""); // Simulation setModelSetupFile(""); @@ -92,6 +93,9 @@ class SimulationOptions setProfiling("none"); setCPUTime(false); setEnableAllWarnings(true); + setReconcile(false); + setCovarianceMatrixSxFile(""); + setNumberOfConvergenceIterations(""); setLogStreams(QStringList() << "LOG_STATS"); setAdditionalSimulationFlags(""); // Output @@ -174,6 +178,8 @@ class SimulationOptions bool getParmodauto() const {return mParmodauto;} void setNewInstantiation(bool newInstantiation) {mNewInstantiation = newInstantiation;} bool getNewInstantiation() const {return mNewInstantiation;} + void setDataReconciliation(bool dataReconciliation) {mDataReconciliation = dataReconciliation;} + bool getDataReconciliation() const {return mDataReconciliation;} void setAdditionalTranslationFlags(QString additionalTranslationFlags) {mAdditionalTranslationFlags = additionalTranslationFlags;} QString getAdditionalTranslationFlags() const {return mAdditionalTranslationFlags;} @@ -201,6 +207,12 @@ class SimulationOptions bool getCPUTime() {return mCPUTime;} void setEnableAllWarnings(bool enableAllWarnings) {mEnableAllWarnings = enableAllWarnings;} bool getEnableAllWarnings() {return mEnableAllWarnings;} + void setReconcile(bool reconcile) {mReconcile = reconcile;} + bool getReconcile() {return mReconcile;} + void setCovarianceMatrixSxFile(QString covarianceMatrixSxFile) {mCovarianceMatrixSxFile = covarianceMatrixSxFile;} + QString getCovarianceMatrixSxFile() {return mCovarianceMatrixSxFile;} + void setNumberOfConvergenceIterations(QString numberOfConvergenceIterations) {mNumberOfConvergenceIterations = numberOfConvergenceIterations;} + QString getNumberOfConvergenceIterations() {return mNumberOfConvergenceIterations;} void setLogStreams(QStringList logStreams) {mLogStreams = logStreams;} QStringList getLogStreams() {return mLogStreams;} void setAdditionalSimulationFlags(QString additionalSimulationFlags) {mAdditionalSimulationFlags = additionalSimulationFlags;} @@ -271,6 +283,7 @@ class SimulationOptions bool mPedantic; bool mParmodauto; bool mNewInstantiation; + bool mDataReconciliation; QString mAdditionalTranslationFlags; // simulation flags QString mModelSetupFile; @@ -285,6 +298,9 @@ class SimulationOptions QString mProfiling; bool mCPUTime; bool mEnableAllWarnings; + bool mReconcile; + QString mCovarianceMatrixSxFile; + QString mNumberOfConvergenceIterations; QStringList mLogStreams; QString mAdditionalSimulationFlags; // output diff --git a/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.cpp b/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.cpp index abdcc5333..e9e166012 100644 --- a/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.cpp +++ b/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.cpp @@ -78,6 +78,7 @@ TranslationFlagsWidget::TranslationFlagsWidget(QWidget *pParent) mpPedanticCheckBox = new QCheckBox(tr("Enable pedantic debug-mode, to get much more feedback")); mpParmodautoCheckBox = new QCheckBox(tr("Enable parallelization of independent systems of equations (Experimental)")); mpNewInstantiationCheckBox = new QCheckBox(tr("Enable experimental new instantiation phase")); + mpDataReconciliationCheckBox = new QCheckBox(tr("Enable data reconciliation")); mpAdditionalTranslationFlagsLabel = new Label(tr("Additional Translation Flags:")); mpAdditionalTranslationFlagsLabel->setToolTip(Helper::translationFlagsTip); mpAdditionalTranslationFlagsTextBox = new QLineEdit; @@ -101,6 +102,7 @@ TranslationFlagsWidget::TranslationFlagsWidget(QWidget *pParent) pMainLayout->addWidget(mpPedanticCheckBox, row++, 0, 1, 3); pMainLayout->addWidget(mpParmodautoCheckBox, row++, 0, 1, 3); pMainLayout->addWidget(mpNewInstantiationCheckBox, row++, 0, 1, 3); + pMainLayout->addWidget(mpDataReconciliationCheckBox, row++, 0, 1, 3); pMainLayout->addWidget(mpAdditionalTranslationFlagsLabel, row, 0); pMainLayout->addWidget(mpAdditionalTranslationFlagsTextBox, row, 1); pMainLayout->addWidget(mpTranslationFlagsHelpButton, row++, 2); @@ -128,6 +130,7 @@ void TranslationFlagsWidget::applySimulationOptions(const SimulationOptions &sim mpPedanticCheckBox->setChecked(simulationOptions.getPedantic()); mpParmodautoCheckBox->setChecked(simulationOptions.getParmodauto()); mpNewInstantiationCheckBox->setChecked(simulationOptions.getNewInstantiation()); + mpDataReconciliationCheckBox->setChecked(simulationOptions.getDataReconciliation()); mpAdditionalTranslationFlagsTextBox->setText(simulationOptions.getAdditionalTranslationFlags()); } @@ -146,6 +149,7 @@ void TranslationFlagsWidget::createSimulationOptions(SimulationOptions *pSimulat pSimulationOptions->setPedantic(mpPedanticCheckBox->isChecked()); pSimulationOptions->setParmodauto(mpParmodautoCheckBox->isChecked()); pSimulationOptions->setNewInstantiation(mpNewInstantiationCheckBox->isChecked()); + pSimulationOptions->setDataReconciliation(mpDataReconciliationCheckBox->isChecked()); pSimulationOptions->setAdditionalTranslationFlags(mpAdditionalTranslationFlagsTextBox->text()); } @@ -157,35 +161,40 @@ void TranslationFlagsWidget::createSimulationOptions(SimulationOptions *pSimulat bool TranslationFlagsWidget::applyFlags() { // set matching algorithm - MainWindow::instance()->getOMCProxy()->setMatchingAlgorithm(mpMatchingAlgorithmComboBox->currentText()); - // set index reduction - MainWindow::instance()->getOMCProxy()->setIndexReductionMethod(mpIndexReductionMethodComboBox->currentText()); - // set initialization - if (mpInitializationCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=initialization"); - } - // set evaluate all parameters - if (mpEvaluateAllParametersCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=evaluateAllParameters"); - } - // set NLS analytic jacobian - if (mpNLSanalyticJacobianCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=NLSanalyticJacobian"); - } - // set pedantic mode - if (mpPedanticCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=pedantic"); - } - // set parmodauto - if (mpParmodautoCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=parmodauto"); - } - // set new instantiation - if (mpNewInstantiationCheckBox->isChecked()) { - MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=newInst"); - } - // set command line options set manually by user. This can override above options. - if (!MainWindow::instance()->getOMCProxy()->setCommandLineOptions(mpAdditionalTranslationFlagsTextBox->text())) { +// MainWindow::instance()->getOMCProxy()->setMatchingAlgorithm(mpMatchingAlgorithmComboBox->currentText()); +// // set index reduction +// MainWindow::instance()->getOMCProxy()->setIndexReductionMethod(mpIndexReductionMethodComboBox->currentText()); +// // set initialization +// if (mpInitializationCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=initialization"); +// } +// // set evaluate all parameters +// if (mpEvaluateAllParametersCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=evaluateAllParameters"); +// } +// // set NLS analytic jacobian +// if (mpNLSanalyticJacobianCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=NLSanalyticJacobian"); +// } +// // set pedantic mode +// if (mpPedanticCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=pedantic"); +// } +// // set parmodauto +// if (mpParmodautoCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=parmodauto"); +// } +// // set new instantiation +// if (mpNewInstantiationCheckBox->isChecked()) { +// MainWindow::instance()->getOMCProxy()->setCommandLineOptions("-d=newInst"); +// } +// // set command line options set manually by user. This can override above options. +// if (!MainWindow::instance()->getOMCProxy()->setCommandLineOptions(mpAdditionalTranslationFlagsTextBox->text())) { +// return false; +// } +// return true; + + if (!MainWindow::instance()->getOMCProxy()->setCommandLineOptions(commandLineOptions())) { return false; } return true; @@ -230,11 +239,21 @@ QString TranslationFlagsWidget::commandLineOptions() debugFlags.append("newInst"); } + QStringList preOptModules; + // data reconciliation + if (mpDataReconciliationCheckBox->isChecked()) { + preOptModules.append("dataReconciliation"); + } + QStringList commandLineOptions; commandLineOptions.append(configFlags); if (!debugFlags.isEmpty()) { commandLineOptions.append(QString("-d=%1").arg(debugFlags.join(","))); } + if (!preOptModules.isEmpty()) { + commandLineOptions.append(QString("--preOptModules+=%1").arg(preOptModules.join(","))); + } + // set command line options set manually by user. This can override above options. if (!mpAdditionalTranslationFlagsTextBox->text().isEmpty()) { commandLineOptions.append(mpAdditionalTranslationFlagsTextBox->text()); } diff --git a/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.h b/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.h index 1b61ef81a..40201eed3 100644 --- a/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.h +++ b/OMEdit/OMEditGUI/Simulation/TranslationFlagsWidget.h @@ -55,6 +55,7 @@ class TranslationFlagsWidget : public QWidget QCheckBox *getPedanticCheckBox() const {return mpPedanticCheckBox;} QCheckBox *getParmodautoCheckBox() const {return mpParmodautoCheckBox;} QCheckBox *getNewInstantiationCheckBox() const {return mpNewInstantiationCheckBox;} + QCheckBox *getDataReconciliationCheckBox() const {return mpDataReconciliationCheckBox;} QLineEdit *getAdditionalTranslationFlagsTextBox() const {return mpAdditionalTranslationFlagsTextBox;} void applySimulationOptions(const SimulationOptions &simulationOptions); @@ -72,6 +73,7 @@ class TranslationFlagsWidget : public QWidget QCheckBox *mpPedanticCheckBox; QCheckBox *mpParmodautoCheckBox; QCheckBox *mpNewInstantiationCheckBox; + QCheckBox *mpDataReconciliationCheckBox; Label *mpAdditionalTranslationFlagsLabel; QLineEdit *mpAdditionalTranslationFlagsTextBox; QToolButton *mpTranslationFlagsHelpButton; diff --git a/OMEdit/OMEditGUI/Util/Helper.cpp b/OMEdit/OMEditGUI/Util/Helper.cpp index 7dafb2c2c..ae9ff3626 100644 --- a/OMEdit/OMEditGUI/Util/Helper.cpp +++ b/OMEdit/OMEditGUI/Util/Helper.cpp @@ -55,6 +55,7 @@ QString Helper::fmuFileTypes = "FMU Files (*.fmu)"; QString Helper::xmlFileTypes = "XML Files (*.xml)"; QString Helper::infoXmlFileTypes = "OM Info Files (*_info.json)"; QString Helper::matFileTypes = "MAT Files (*.mat)"; +QString Helper::csvFileTypes = "CSV Files (*.csv)"; QString Helper::omResultFileTypes = "OpenModelica Result Files (*.mat *.plt *.csv)"; #ifdef WIN32 QString Helper::exeFileTypes = "EXE Files (*.exe)"; diff --git a/OMEdit/OMEditGUI/Util/Helper.h b/OMEdit/OMEditGUI/Util/Helper.h index d5a6f8a19..0992c9aea 100644 --- a/OMEdit/OMEditGUI/Util/Helper.h +++ b/OMEdit/OMEditGUI/Util/Helper.h @@ -65,6 +65,7 @@ class Helper : public QObject static QString xmlFileTypes; static QString infoXmlFileTypes; static QString matFileTypes; + static QString csvFileTypes; static QString omResultFileTypes; static QString exeFileTypes; static QString txtFileTypes;