Exemple #1
0
bool CSteadyStateTask::initialize(const OutputFlag & of,
                                  COutputHandler * pOutputHandler,
                                  std::ostream * pOstream)
{
  bool success = true;

  assert(mpProblem && mpMethod);

  CSteadyStateProblem* pProblem =
    dynamic_cast<CSteadyStateProblem *>(mpProblem);
  assert(pProblem);

  success &= pProblem->initialize();

  CSteadyStateMethod* pMethod =
    dynamic_cast<CSteadyStateMethod *>(mpMethod);
  assert(pMethod);

  success &= pMethod->initialize(pProblem);

  success &= pMethod->isValidProblem(mpProblem);

  success &= updateMatrices();

  mSteadyState = mpContainer->getState(true);

  success &= CCopasiTask::initialize(of, pOutputHandler, pOstream);

  return success;
}
bool CSteadyStateTask::initialize(const OutputFlag & of,
                                  COutputHandler * pOutputHandler,
                                  std::ostream * pOstream)
{
  assert(mpProblem && mpMethod);

  if (!mpMethod->isValidProblem(mpProblem)) return false;

  bool success = true;

  if (!updateMatrices())
    return false;

  success &= CCopasiTask::initialize(of, pOutputHandler, pOstream);

  pdelete(mpSteadyState);
  mpSteadyState = new CState(mpProblem->getModel()->getInitialState());

  mCalculateReducedSystem = (mpProblem->getModel()->getNumDependentReactionMetabs() != 0);

#ifdef xxxx
  // init Jacobians
  size_t sizeX = mpSteadyState->getNumIndependent();
  mJacobianX.resize(sizeX, sizeX);
  size_t size = sizeX + mpSteadyState->getNumDependent();
  mJacobian.resize(size, size);

  //jacobian annotations
  CStateTemplate & StateTemplate = mpProblem->getModel()->getStateTemplate();

  mpJacobianAnn->resize();
  CModelEntity **ppEntities = StateTemplate.getEntities();
  const size_t * pUserOrder = StateTemplate.getUserOrder().array();
  const size_t * pUserOrderEnd = pUserOrder + StateTemplate.getUserOrder().size();

  pUserOrder++; // We skip the time which is the first.

  size_t i, imax = size;

  for (i = 0; i < imax && pUserOrder != pUserOrderEnd; pUserOrder++)
    {
      const CModelEntity::Status & Status = ppEntities[*pUserOrder]->getStatus();

      if (Status == CModelEntity::ODE ||
          (Status == CModelEntity::REACTIONS && ppEntities[*pUserOrder]->isUsed()))
        {
          mpJacobianAnn->setAnnotationCN(0 , i, ppEntities[*pUserOrder]->getCN());
          mpJacobianAnn->setAnnotationCN(1 , i, ppEntities[*pUserOrder]->getCN());

          i++;
        }
    }

  mpJacobianXAnn->resize();

  ppEntities = StateTemplate.beginIndependent();
  imax = sizeX;

  for (i = 0; i < imax; ++i, ++ppEntities)
    {
      mpJacobianXAnn->setAnnotationCN(0 , i, (*ppEntities)->getCN());
      mpJacobianXAnn->setAnnotationCN(1 , i, (*ppEntities)->getCN());
    }

#endif

  CSteadyStateProblem* pProblem =
    dynamic_cast<CSteadyStateProblem *>(mpProblem);
  assert(pProblem);

  success &= pProblem->initialize();

  CSteadyStateMethod* pMethod =
    dynamic_cast<CSteadyStateMethod *>(mpMethod);
  assert(pMethod);

  success &= pMethod->initialize(pProblem);

  return success;
}