Exemplo n.º 1
0
void CHybridMethod::start()
{
  mFirstMetabIndex = mpContainer->getCountFixedEventTargets() + 1 + mpContainer->getCountODEs();
  mpFirstMetabValue = mpContainer->getState(false).array() + mFirstMetabIndex;

  // call init of the simulation method, can be overloaded in derived classes
  mReactions.initialize(mpContainer->getReactions());
  mAmu.clear();
  mAmu.resize(mReactions.size());
  mAmuOld.clear();
  mAmuOld.resize(mReactions.size());
  mNumVariableMetabs = mpContainer->getCountIndependentSpecies() + mpContainer->getCountDependentSpecies();
  mUpdateSequences.resize(mReactions.size());

  mSpeciesRates.initialize(mNumVariableMetabs, const_cast< C_FLOAT64 * >(mpContainer->getRate(false).array()) + mFirstMetabIndex);
  mRateOffset = mpContainer->getRate(false).array() - mpContainer->getState(false).array();

  mCurrentState.initialize(mNumVariableMetabs, const_cast< C_FLOAT64 * >(mpContainer->getState(false).array()) + mFirstMetabIndex);

  mMetab2React.resize(mNumVariableMetabs);

  /* get configuration data */
  mMaxSteps = getValue< C_INT32 >("Max Internal Steps");
  mLowerStochLimit = getValue< C_FLOAT64 >("Lower Limit");
  mUpperStochLimit = getValue< C_FLOAT64 >("Upper Limit");
  mPartitioningInterval = getValue< unsigned C_INT32 >("Partitioning Interval");
  mUseRandomSeed = getValue< bool >("Use Random Seed");
  mRandomSeed = getValue< unsigned C_INT32 >("Random Seed");

  mpRandomGenerator = &mpContainer->getRandomGenerator();

  if (mUseRandomSeed)
    {
      mpRandomGenerator->initialize(mRandomSeed);
    }

  mStepsAfterPartitionSystem = 0;

  setupDependencyGraph(); // initialize mDG
  setupMetab2React(); // initialize mMetab2React
  setupPartition(); // initialize mReactionFlags
  setupPriorityQueue(); // initialize mPQ

  mMaxStepsReached = false;

  return;
}
void CStochNextReactionMethod::initMethod(C_FLOAT64 start_time)
{
  setupPriorityQueue(start_time);
}