Skip to content

Commit

Permalink
KINSOL solver: can now be parameterised (closes #1510).
Browse files Browse the repository at this point in the history
  • Loading branch information
agarny committed Jan 8, 2018
2 parents 883c2c4 + 61bba93 commit e4d5e54
Show file tree
Hide file tree
Showing 31 changed files with 424 additions and 139 deletions.
1 change: 1 addition & 0 deletions doc/downloads/index.js
Expand Up @@ -38,6 +38,7 @@ var jsonData = { "versions": [
],
"changes": [
{ "change": "<strong>General:</strong> improved our support for <a href=\"https://en.wikipedia.org/wiki/Differential_algebraic_equation\">DAE</a> models (see issues <a href=\"https://github.com/opencor/opencor/issues/188\">#188</a> and <a href=\"https://github.com/opencor/opencor/issues/536\">#536</a>)." },
{ "change": "<strong>Solvers:</strong> can now parameterise the <a href=\"https://computation.llnl.gov/projects/sundials/kinsol\">KINSOL</a> solver (see issue <a href=\"https://github.com/opencor/opencor/issues/1510\">#1510</a>)." },
{ "change": "<strong>Third-party libraries:</strong> upgraded the <a href=\"http://computation.llnl.gov/projects/sundials\">SUNDIALS</a> library to version 3.1.0 (see issue <a href=\"https://github.com/opencor/opencor/issues/1507\">#1507</a>)." }
]
},
Expand Down
9 changes: 7 additions & 2 deletions doc/user/whatIsNew.js
Expand Up @@ -93,12 +93,17 @@ var jsonData = { "versions": [
"entries": [
{ "type": "subCategory", "name": "<a href=\"http://computation.llnl.gov/projects/sundials/cvodes\">CVODES</a> solver (formerly known as the <a href=\"http://computation.llnl.gov/projects/sundials/cvode\">CVODE</a> solver)",
"entries": [
{ "type": "Improved", "description": "Ready for sensitivity analysis." }
{ "type": "Added", "description": "Support for sensitivity analysis." }
]
},
{ "type": "subCategory", "name": "<a href=\"http://computation.llnl.gov/projects/sundials/idas\">IDAS</a> solver (formerly known as the <a href=\"http://computation.llnl.gov/projects/sundials/ida\">IDA</a> solver)",
"entries": [
{ "type": "Improved", "description": "Ready for sensitivity analysis." }
{ "type": "Added", "description": "Support for sensitivity analysis." }
]
},
{ "type": "subCategory", "name": "<a href=\"http://computation.llnl.gov/projects/sundials/kinsol\">KINSOL</a> solver",
"entries": [
{ "type": "Added", "description": "Parametrisation of the solver." }
]
}
]
Expand Down
Expand Up @@ -358,9 +358,7 @@ void SimulationExperimentViewInformationSolversWidget::initialize(SimulationSupp

foreach (Core::Property *property, mNlaSolverData->solversProperties().value(pSimulation->data()->nlaSolverName())) {
pSimulation->data()->addNlaSolverProperty(property->id(),
(property->type() == Core::Property::Integer)?
property->integerValue():
property->doubleValue(),
property->valueAsVariant(),
false);
}
}
Expand Down
Expand Up @@ -1318,7 +1318,8 @@ void SimulationExperimentViewSimulationWidget::runPauseResumeSimulation()
}

// Finish any editing of our simulation information, and update our
// simulation and solvers properties before running/resuming it
// simulation and solvers properties (without resetting our NLA solver)
// before running/resuming it

mContentsWidget->informationWidget()->finishEditing(mSimulation->isPaused());

Expand Down Expand Up @@ -1594,8 +1595,9 @@ void SimulationExperimentViewSimulationWidget::addSedmlSimulation(libsedml::SedD

if (runtime->needNlaSolver()) {
QString nlaSolverProperties = QString();
Solver::Solver::Properties solverProperties = mSimulation->data()->nlaSolverProperties();

foreach (const QString &solverProperty, mSimulation->data()->nlaSolverProperties().keys()) {
foreach (const QString &solverProperty, solverProperties.keys()) {
nlaSolverProperties += QString("<%1 %2=\"%3\" %4=\"%5\"/>").arg(SEDMLSupport::SolverProperty,
SEDMLSupport::Id,
solverProperty,
Expand Down Expand Up @@ -2634,21 +2636,55 @@ bool SimulationExperimentViewSimulationWidget::furtherInitialize()

if ( !QString::fromStdString(nlaSolverNode.getURI()).compare(SEDMLSupport::OpencorNamespace)
&& !QString::fromStdString(nlaSolverNode.getName()).compare(SEDMLSupport::NlaSolver)) {
SimulationExperimentViewInformationSolversWidgetData *solverData = solversWidget->nlaSolverData();
Core::Properties solverProperties = Core::Properties();

mustHaveNlaSolver = true;
nlaSolverName = QString::fromStdString(nlaSolverNode.getAttrValue(nlaSolverNode.getAttrIndex(SEDMLSupport::Name.toStdString())));

foreach (SolverInterface *solverInterface, solverInterfaces) {
if (!nlaSolverName.compare(solverInterface->solverName())) {
solversWidget->nlaSolverData()->solversListProperty()->setValue(nlaSolverName);
solverProperties = solverData->solversProperties().value(solverInterface->solverName());

solverData->solversListProperty()->setValue(nlaSolverName);

hasNlaSolver = true;

break;
}
}

if (hasNlaSolver)
if (hasNlaSolver) {
for (uint j = 0, jMax = nlaSolverNode.getNumChildren(); j < jMax; ++j) {
const libsbml::XMLNode &solverPropertyNode = nlaSolverNode.getChild(j);

if ( !QString::fromStdString(solverPropertyNode.getURI()).compare(SEDMLSupport::OpencorNamespace)
&& !QString::fromStdString(solverPropertyNode.getName()).compare(SEDMLSupport::SolverProperty)) {
QString id = QString::fromStdString(solverPropertyNode.getAttrValue(solverPropertyNode.getAttrIndex(SEDMLSupport::Id.toStdString())));
QString value = QString::fromStdString(solverPropertyNode.getAttrValue(solverPropertyNode.getAttrIndex(SEDMLSupport::Value.toStdString())));
bool propertySet = false;

foreach (Core::Property *solverProperty, solverProperties) {
if (!solverProperty->id().compare(id)) {
solverProperty->setValue(value);

propertySet = true;

break;
}
}

if (!propertySet) {
simulationError(tr("the requested property (%1) could not be set").arg(id),
InvalidSimulationEnvironment);

return false;
}
}
}

break;
}
}
}

Expand Down
60 changes: 30 additions & 30 deletions src/plugins/solver/CVODESSolver/i18n/CVODESSolver_fr.ts
Expand Up @@ -4,64 +4,64 @@
<context>
<name>OpenCOR::CVODESSolver::CvodesSolver</name>
<message>
<source>the &apos;maximum step&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;pas maximum&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Maximum step&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Pas maximum&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;maximum number of steps&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;nombre maximum de pas&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Maximum number of steps&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Nombre maximum de pas&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;integration method&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;méthode d&apos;intégration&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Integration method&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Méthode d&apos;intégration&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;preconditioner&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;préconditionneur&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Preconditioner&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Préconditionneur&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;upper half-bandwidth&apos; property must have a value between 0 and %1</source>
<translation>la propriété &apos;demi largeur de bande supérieure&apos; doit avoir une valeur comprise entre 0 et %1</translation>
<source>the &quot;Upper half-bandwidth&quot; property must have a value between 0 and %1</source>
<translation>la propriété &quot;Demi largeur de bande supérieure&quot; doit avoir une valeur comprise entre 0 et %1</translation>
</message>
<message>
<source>the &apos;upper half-bandwidth&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;demi largeur de bande supérieure&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Upper half-bandwidth&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Demi largeur de bande supérieure&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;lower half-bandwidth&apos; property must have a value between 0 and %1</source>
<translation>la propriété &apos;demi largeur de bande inférieure&apos; doit avoir une valeur comprise entre 0 et %1</translation>
<source>the &quot;Lower half-bandwidth&quot; property must have a value between 0 and %1</source>
<translation>la propriété &quot;Demi largeur de bande inférieure&quot; doit avoir une valeur comprise entre 0 et %1</translation>
</message>
<message>
<source>the &apos;lower half-bandwidth&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;demi largeur de bande inférieure&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Lower half-bandwidth&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Demi largeur de bande inférieure&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;linear solver&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;solveur linéaire&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Linear solver&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Solveur linéaire&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;iteration type&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;type d&apos;itération&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Iteration type&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Type d&apos;itération&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;relative tolerance&apos; property must have a value greater than or equal to 0</source>
<translation>la propriété &apos;tolérance relative&apos; doit avoir une valeur plus grande que ou égale à 0</translation>
<source>the &quot;Relative tolerance&quot; property must have a value greater than or equal to 0</source>
<translation>la propriété &quot;Tolérance relative&quot; doit avoir une valeur plus grande que ou égale à 0</translation>
</message>
<message>
<source>the &apos;relative tolerance&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;tolérance relative&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Relative tolerance&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Tolérance relative&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;absolute tolerance&apos; property must have a value greater than or equal to 0</source>
<translation>la propriété &apos;tolérance absolue&apos; doit avoir une valeur plus grande que ou égale à 0</translation>
<source>the &quot;Absolute tolerance&quot; property must have a value greater than or equal to 0</source>
<translation>la propriété &quot;Tolérance absolue&quot; doit avoir une valeur plus grande que ou égale à 0</translation>
</message>
<message>
<source>the &apos;absolute tolerance&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;tolérance absolue&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Absolute tolerance&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Tolérance absolue&quot; n&apos;a pas pu être retrouvée</translation>
</message>
<message>
<source>the &apos;interpolate solution&apos; property value could not be retrieved</source>
<translation>la valeur de la propriété &apos;interpoler solution&apos; n&apos;a pas pu être retrouvée</translation>
<source>the &quot;Interpolate solution&quot; property value could not be retrieved</source>
<translation>la valeur de la propriété &quot;Interpoler solution&quot; n&apos;a pas pu être retrouvée</translation>
</message>
</context>
</TS>

0 comments on commit e4d5e54

Please sign in to comment.