Skip to content
This repository was archived by the owner on Apr 3, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions OMEdit/OMEditGUI/Options/OptionsDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down Expand Up @@ -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());
Expand Down
92 changes: 84 additions & 8 deletions OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"));
Expand Down Expand Up @@ -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()) {
Expand All @@ -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) {
Expand All @@ -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) {
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -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(",")));
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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);
}
}
}

/*!
Expand Down Expand Up @@ -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));
}

/*!
Expand Down
7 changes: 7 additions & 0 deletions OMEdit/OMEditGUI/Simulation/SimulationDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -250,6 +256,7 @@ public slots:
void interactiveSimulation(bool checked);
void browseModelSetupFile();
void browseEquationSystemInitializationFile();
void browseCovarianceMatrixSxFile();
void showSimulationFlagsHelp();
void showArchivedSimulation(QTreeWidgetItem *pTreeWidgetItem);
void simulate();
Expand Down
16 changes: 16 additions & 0 deletions OMEdit/OMEditGUI/Simulation/SimulationOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class SimulationOptions
setPedantic(false);
setParmodauto(false);
setNewInstantiation(false);
setDataReconciliation(false);
setAdditionalTranslationFlags("");
// Simulation
setModelSetupFile("");
Expand All @@ -92,6 +93,9 @@ class SimulationOptions
setProfiling("none");
setCPUTime(false);
setEnableAllWarnings(true);
setReconcile(false);
setCovarianceMatrixSxFile("");
setNumberOfConvergenceIterations("");
setLogStreams(QStringList() << "LOG_STATS");
setAdditionalSimulationFlags("");
// Output
Expand Down Expand Up @@ -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;}

Expand Down Expand Up @@ -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;}
Expand Down Expand Up @@ -271,6 +283,7 @@ class SimulationOptions
bool mPedantic;
bool mParmodauto;
bool mNewInstantiation;
bool mDataReconciliation;
QString mAdditionalTranslationFlags;
// simulation flags
QString mModelSetupFile;
Expand All @@ -285,6 +298,9 @@ class SimulationOptions
QString mProfiling;
bool mCPUTime;
bool mEnableAllWarnings;
bool mReconcile;
QString mCovarianceMatrixSxFile;
QString mNumberOfConvergenceIterations;
QStringList mLogStreams;
QString mAdditionalSimulationFlags;
// output
Expand Down
Loading