diff --git a/src/SolverControl/SolverControlerBase.cpp b/src/SolverControl/SolverControlerBase.cpp index 39f15c8..a956d0c 100644 --- a/src/SolverControl/SolverControlerBase.cpp +++ b/src/SolverControl/SolverControlerBase.cpp @@ -37,23 +37,31 @@ #include #include "PythonModule/PyAgent.h" -namespace SolverControl -{ +namespace SolverControl { - SolverControlBase::SolverControlBase(GUI::MainWindow *mainwindow, ConfigOption::SolverInfo *solver, ModelData::ModelDataBase *m, bool sonly) - : _mainWindow(mainwindow), _solver(solver), _model(m), _solveOnly(sonly) + SolverControlBase::SolverControlBase(GUI::MainWindow* mainwindow, + ConfigOption::SolverInfo* solver, + ModelData::ModelDataBase* m, bool sonly) + : _mainWindow(mainwindow) + , _solver(solver) + , _model(m) + , _solveOnly(sonly) { connect(&_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readSolverOutput())); - connect(this, SIGNAL(sendMessage(QString)), _mainWindow, SIGNAL(printMessageToMessageWindow(QString))); - connect(this, SIGNAL(solverStarted(QWidget *)), _mainWindow, SIGNAL(addProcessBarSig(QWidget *))); - connect(_mainWindow, SIGNAL(stopSolve(QWidget *)), this, SLOT(stopSolver(QWidget *))); - connect(&_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus))); + connect(this, SIGNAL(sendMessage(QString)), _mainWindow, + SIGNAL(printMessageToMessageWindow(QString))); + connect(this, SIGNAL(solverStarted(QWidget*)), _mainWindow, + SIGNAL(addProcessBarSig(QWidget*))); + connect(_mainWindow, SIGNAL(stopSolve(QWidget*)), this, SLOT(stopSolver(QWidget*))); + connect(&_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, + SLOT(processFinished(int, QProcess::ExitStatus))); connect(this, SIGNAL(processFinish(int)), _mainWindow, SIGNAL(processFinished(int))); - connect(this, SIGNAL(openRealTime(Post::RealTimeWindowBase *, int)), _mainWindow, SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase *, int))); + connect(this, SIGNAL(openRealTime(Post::RealTimeWindowBase*, int)), _mainWindow, + SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase*, int))); } SolverControlBase::~SolverControlBase() { - if (_processBar != nullptr) + if(_processBar != nullptr) delete _processBar; } @@ -67,48 +75,44 @@ namespace SolverControl QString solverPath = _solver->getExePath(); qDebug() << solverPath; QFileInfo info(solverPath); - int id = _model->getID(); + int id = _model->getID(); - if ((!info.exists()) || (!info.isFile())) - { - QMessageBox::warning(nullptr, tr("Warning"), tr("Solver Path Error! Solve Path : %1").arg(solverPath)); + if((!info.exists()) || (!info.isFile())) { + QMessageBox::warning(nullptr, tr("Warning"), + tr("Solver Path Error! Solve Path : %1").arg(solverPath)); emit processFinish(id); return; } bool ok = preProcess(); - if (!ok) - { + if(!ok) { QMessageBox::warning(nullptr, tr("Warning"), tr("Input file write failed !")); emit processFinish(id); return; } - QString oldDir = ""; + QString oldDir = ""; QString startPath = _model->getPath(); - if (_solver->getType() == ConfigOption::SelfDevelop) - { + if(_solver->getType() == ConfigOption::SelfDevelop) { QDir dir(startPath); - if (dir.exists() && (!startPath.isEmpty())) - { + if(dir.exists() && (!startPath.isEmpty())) { oldDir = QDir::currentPath(); QDir::setCurrent(startPath); } } - _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); + _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); QString args = _solver->getParameter(); QRegExp regExp("%.*%"); regExp.setMinimal(true); // int pos = regExp.indexIn(args); QStringList variables = regExp.capturedTexts(); - for (int i = 0; i < variables.size(); ++i) - { + for(int i = 0; i < variables.size(); ++i) { QString variable = variables.at(i); - QString va = variable.remove("%"); - if (va.toLower() == "modelpath") + QString va = variable.remove("%"); + if(va.toLower() == "modelpath") args.replace(variables.at(i), startPath); // qDebug() << args; } @@ -122,53 +126,49 @@ namespace SolverControl // startProcess = startProcess + " " + _args; // qDebug() << startProcess; - _process.start(solverPath, QStringList(args)); + _process.start(solverPath, args.split(" ", QString::SkipEmptyParts)); - emit solverStarted(_processBar); + emit solverStarted(_processBar); - ModelData::ModelDataBaseExtend *extend = dynamic_cast(_model); - if (extend != nullptr && !_solveOnly) - { - QList curves = extend->getMonitorCurves(); - if (curves.size() > 0) - { - int id = _model->getID(); - Post::RealTimeWindowBase *w = new Post::RealTimeWindowBase(_mainWindow, id); - emit openRealTime(w, id); + ModelData::ModelDataBaseExtend* extend = + dynamic_cast(_model); + if(extend != nullptr && !_solveOnly) { + QList curves = extend->getMonitorCurves(); + if(curves.size() > 0) { + int id = _model->getID(); + Post::RealTimeWindowBase* w = new Post::RealTimeWindowBase(_mainWindow, id); + emit openRealTime(w, id); } } - if (_solver->getType() == ConfigOption::SelfDevelop) - { - if (!oldDir.isEmpty()) + if(_solver->getType() == ConfigOption::SelfDevelop) { + if(!oldDir.isEmpty()) QDir::setCurrent(oldDir); } } void SolverControlBase::readSolverOutput() { - _outputBuffer = QString::fromLocal8Bit(_process.readAll()); + _outputBuffer = QString::fromLocal8Bit(_process.readAll()); QString process = _solver->getProcessKeyWord() + "(\\d+)(?:\\s*)"; // qDebug() << process; QRegExp rx(process); - int pos = _outputBuffer.indexOf(rx); - if (pos > -1 && _processBar != nullptr) - { + int pos = _outputBuffer.indexOf(rx); + if(pos > -1 && _processBar != nullptr) { QString s = rx.cap(1); _processBar->setProcess(s.toInt()); } emit sendMessage(_outputBuffer); } - void SolverControlBase::stopSolver(QWidget *w) + void SolverControlBase::stopSolver(QWidget* w) { - if (w != _processBar) + if(w != _processBar) return; int id = -1; - if (_model != nullptr) + if(_model != nullptr) id = _model->getID(); emit removeSolver(id); - if (!_processFinished) - { + if(!_processFinished) { _process.kill(); } _processBar = nullptr; @@ -177,54 +177,49 @@ namespace SolverControl void SolverControlBase::stopSolver() { - if (!_processFinished) - { + if(!_processFinished) { _process.kill(); } } void SolverControlBase::startMPI(int nprocess) { - QString solverPath = _solver->getExePath(); + QString solverPath = _solver->getExePath(); QFileInfo info(solverPath); - if ((!info.exists()) || (!info.isFile())) - { - QMessageBox::warning(nullptr, tr("Warning"), tr("Solver Path Error! Solve Path : %1").arg(solverPath)); + if((!info.exists()) || (!info.isFile())) { + QMessageBox::warning(nullptr, tr("Warning"), + tr("Solver Path Error! Solve Path : %1").arg(solverPath)); return; } bool ok = preProcess(); - if (!ok) - { + if(!ok) { QMessageBox::warning(nullptr, tr("Warning"), tr("Input file write failed !")); return; } - QString oldDir = ""; + QString oldDir = ""; QString startPath = _model->getPath(); - if (_solver->getType() == ConfigOption::SelfDevelop) - { + if(_solver->getType() == ConfigOption::SelfDevelop) { QDir dir(startPath); - if (dir.exists() && (!startPath.isEmpty())) - { + if(dir.exists() && (!startPath.isEmpty())) { oldDir = QDir::currentPath(); QDir::setCurrent(startPath); } } - _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); + _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); QString args = _solver->getParameter(); QRegExp regExp("%.*%"); regExp.setMinimal(true); // int pos = regExp.indexIn(args); QStringList variables = regExp.capturedTexts(); - for (int i = 0; i < variables.size(); ++i) - { + for(int i = 0; i < variables.size(); ++i) { QString variable = variables.at(i); - QString va = variable.remove("%"); - if (va.toLower() == "modelpath") + QString va = variable.remove("%"); + if(va.toLower() == "modelpath") args.replace(variables.at(i), startPath); // qDebug() << args; } @@ -242,22 +237,20 @@ namespace SolverControl _process.start(c); - emit solverStarted(_processBar); + emit solverStarted(_processBar); - ModelData::ModelDataBaseExtend *extend = dynamic_cast(_model); - if (extend != nullptr && !_solveOnly) - { - QList curves = extend->getMonitorCurves(); - if (curves.size() > 0) - { - int id = _model->getID(); - Post::RealTimeWindowBase *w = new Post::RealTimeWindowBase(_mainWindow, id); - emit openRealTime(w, id); + ModelData::ModelDataBaseExtend* extend = + dynamic_cast(_model); + if(extend != nullptr && !_solveOnly) { + QList curves = extend->getMonitorCurves(); + if(curves.size() > 0) { + int id = _model->getID(); + Post::RealTimeWindowBase* w = new Post::RealTimeWindowBase(_mainWindow, id); + emit openRealTime(w, id); } } - if (_solver->getType() == ConfigOption::SelfDevelop) - { - if (!oldDir.isEmpty()) + if(_solver->getType() == ConfigOption::SelfDevelop) { + if(!oldDir.isEmpty()) QDir::setCurrent(oldDir); } } @@ -269,8 +262,8 @@ namespace SolverControl void SolverControlBase::startSolverClear() { - _solveOnly = true; - _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); + _solveOnly = true; + _processBar = new ModuleBase::ProcessBar(_mainWindow, _description, false); QString solverPath = _solver->getExePath(); _process.start(solverPath, QStringList(_args)); @@ -284,33 +277,31 @@ namespace SolverControl _processFinished = true; - int id = -1; - if (_model != nullptr) + int id = -1; + if(_model != nullptr) id = _model->getID(); emit processFinish(id); - switch (exitStatus) - { - case QProcess::NormalExit: - emit sendMessage("************************************"); - emit sendMessage("***** Solving process finished *****"); - emit sendMessage("************************************"); + switch(exitStatus) { + case QProcess::NormalExit: + emit sendMessage("************************************"); + emit sendMessage("***** Solving process finished *****"); + emit sendMessage("************************************"); - break; - case QProcess::CrashExit: - emit sendMessage("************************************"); - emit sendMessage("***** Solving process Crashed ******"); - emit sendMessage("************************************"); - break; - default: - emit sendMessage("***********************************"); - emit sendMessage("***** Solving process Stopped *****"); - emit sendMessage("***********************************"); - break; + break; + case QProcess::CrashExit: + emit sendMessage("************************************"); + emit sendMessage("***** Solving process Crashed ******"); + emit sendMessage("************************************"); + break; + default: + emit sendMessage("***********************************"); + emit sendMessage("***** Solving process Stopped *****"); + emit sendMessage("***********************************"); + break; } - if (_processBar != nullptr) - { - if (_processBar->isBusy()) + if(_processBar != nullptr) { + if(_processBar->isBusy()) _processBar->setProcessRange(0, 100); _processBar->setProcess(100); } @@ -320,17 +311,14 @@ namespace SolverControl bool SolverControlBase::preProcess() { - if (_solveOnly) + if(_solveOnly) return true; bool istemp = _solver->isWriteTemplate(); - if (istemp) - { - QString te = _solver->getTemplate(); + if(istemp) { + QString te = _solver->getTemplate(); QString path = _model->getPath(); return IO::SolverIO::replaceTemplate(te, path, _model); - } - else - { + } else { QString format = _solver->getInputFormat(); return IO::SolverIO::writeInpFile(format, _model); } @@ -339,11 +327,11 @@ namespace SolverControl bool SolverControlBase::postPorocess() { - if (_solveOnly) + if(_solveOnly) return true; QString trans = _solver->getTransfer(); - QString path = _model->getPath(); + QString path = _model->getPath(); return IO::SolverIO::transformFile(trans, path); } -} +} // namespace SolverControl