コード例 #1
0
void CellDiameterExprEvaluator::internalEval(const EvalManager& mgr,
        Array<double>& constantResults,
        Array<RCP<EvalVector> >& vectorResults) const
{
    Tabs tabs(0);

    SUNDANCE_MSG2(mgr.verb(), tabs << "CellDiameterExprEvaluator::eval() expr="
                  << expr()->toString());

    if (mgr.verb() > 2)
    {
        Out::os() << tabs << "sparsity = "
                  << std::endl << tabs << *(this->sparsity)() << std::endl;
    }

    if (this->sparsity()->numDerivs() > 0)
    {
        vectorResults.resize(1);
        vectorResults[0] = mgr.popVector();
        SUNDANCE_MSG3(mgr.verb(), tabs << "forwarding to evaluation manager");
        mgr.evalCellDiameterExpr(expr(), vectorResults[0]);
        mgr.stack().setVecSize(vectorResults[0]->length());
        if (EvalVector::shadowOps()) vectorResults[0]->setString(stringRep_);
    }
    else
    {
        SUNDANCE_MSG4(mgr.verb(), tabs << "no results requested");
    }

    if (mgr.verb() > 1)
    {
        Out::os() << tabs << "results " << std::endl;
        mgr.showResults(Out::os(), this->sparsity(), vectorResults,
                        constantResults);
    }
}