Skip to content

Commit 36b6ca9

Browse files
authored
Merge pull request #1893 from ghutchis/add-optimize-progress
Add progress bar for optimizations, including cancel
2 parents b6365a9 + af1f89a commit 36b6ca9

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

avogadro/qtplugins/forcefield/forcefield.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -297,17 +297,30 @@ void Forcefield::optimize()
297297
qDebug() << " maxSteps" << m_maxSteps << " steps "
298298
<< m_maxSteps / crit.iterations;
299299

300+
QProgressDialog progress(tr("Optimize Geometry"), "Cancel", 0,
301+
m_maxSteps / crit.iterations);
302+
progress.setWindowModality(Qt::WindowModal);
303+
progress.setMinimumDuration(0);
304+
progress.setAutoClose(true);
305+
progress.show();
306+
300307
Real currentEnergy = 0.0;
301308
for (unsigned int i = 0; i < m_maxSteps / crit.iterations; ++i) {
302309
solver.minimize(*m_method, positions);
310+
// update the progress dialog
311+
progress.setValue(i);
303312

304313
qApp->processEvents(QEventLoop::AllEvents, 500);
305314

306315
currentEnergy = m_method->value(positions);
316+
progress.setLabelText(
317+
tr("Energy: %L1", "force field energy").arg(currentEnergy, 0, 'f', 3));
307318
// get the current gradient for force visualization
308319
m_method->gradient(positions, gradient);
320+
#ifndef NDEBUG
309321
qDebug() << " optimize " << i << currentEnergy
310322
<< " gradNorm: " << gradient.norm();
323+
#endif
311324

312325
// update coordinates
313326
bool isFinite = std::isfinite(currentEnergy);
@@ -352,6 +365,9 @@ void Forcefield::optimize()
352365

353366
energy = currentEnergy;
354367
}
368+
369+
if (progress.wasCanceled())
370+
break;
355371
}
356372

357373
m_molecule->undoMolecule()->setInteractive(isInteractive);

0 commit comments

Comments
 (0)