Skip to content

Commit

Permalink
Optimisation: only store gradients if we have a gradients' data store...
Browse files Browse the repository at this point in the history
  • Loading branch information
dbrnz committed Aug 4, 2017
1 parent bb7c5da commit 61e6081
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1297,7 +1297,7 @@ void SimulationExperimentViewSimulationWidget::runPauseResumeSimulation()
if (runSimulation) {
// Allocate additional memory for sensitivity analysis

runSimulation = mSimulation->data()->createGradientsStore(
runSimulation = mSimulation->results()->createGradientsDataStore(
mContentsWidget->informationWidget()->parametersWidget()->gradientIndices());
}

Expand Down
15 changes: 14 additions & 1 deletion src/plugins/support/SimulationSupport/src/simulation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,7 @@ SimulationResults::SimulationResults(Simulation *pSimulation) :
mSimulation(pSimulation),
mRuntime(pSimulation->runtime()),
mDataStore(pSimulation->data()->resultsDataStore()),
mGradientsDataStore(0),
mPointVariable(pSimulation->data()->pointVariable()),
mConstantVariables(pSimulation->data()->constantVariables()),
mRateVariables(pSimulation->data()->rateVariables()),
Expand Down Expand Up @@ -956,6 +957,17 @@ void SimulationResults::deleteDataStoreArrays()

//==============================================================================

bool SimulationResults::createGradientsDataStore(const QSet<int> &pGradientIndices)
{
bool result = mSimulation->data()->createGradientsDataStore(pGradientIndices);

mGradientsDataStore = mSimulation->data()->gradientsDataStore();

return result;
}

//==============================================================================

void SimulationResults::reload()
{
// Update ourselves by updating our runtime and deleting our data store arrays
Expand Down Expand Up @@ -990,7 +1002,8 @@ void SimulationResults::addPoint(const double &pPoint)

// Add sensitivity gradients to their data store

mSimulation->data()->gradientsDataStore()->addValues(pPoint);
if (mGradientsDataStore)
mGradientsDataStore->addValues(pPoint);
}

//==============================================================================
Expand Down
5 changes: 4 additions & 1 deletion src/plugins/support/SimulationSupport/src/simulation.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class SIMULATIONSUPPORT_EXPORT SimulationData : public QObject
DataStore::DataStoreVariables stateVariables() const;
DataStore::DataStoreVariables algebraicVariables() const;

bool createGradientsStore(const QSet<int> &pGradientIndices);
bool createGradientsDataStore(const QSet<int> &pGradientIndices);

double * gradients() const;
int gradientsCount() const;
Expand Down Expand Up @@ -241,6 +241,8 @@ class SIMULATIONSUPPORT_EXPORT SimulationResults : public QObject
double * rates(const int &pIndex) const;
double * states(const int &pIndex) const;

bool createGradientsDataStore(const QSet<int> &pGradientIndices);

public slots:
bool reset(const bool &pAllocateArrays = true);

Expand All @@ -254,6 +256,7 @@ public slots:
CellMLSupport::CellmlFileRuntime *mRuntime;

DataStore::DataStore *mDataStore;
DataStore::DataStore *mGradientsDataStore;

const DataStore::DataStoreVariable *mPointVariable;

Expand Down

0 comments on commit 61e6081

Please sign in to comment.