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); }