void Simulation::computeLevelsForInputAndOutput(SP::Interaction inter, bool init) { DEBUG_PRINT("Simulation::computeLevelsForInputAndOutput(SP::Interaction inter, bool init)\n"); /** \warning. We test only for the first Dynamical of the interaction. * we assume that the osi(s) are consistent for one interaction */ SP::InteractionsGraph indexSet0 = model()->nonSmoothDynamicalSystem()->topology()->indexSet(0); SP::DynamicalSystem ds = indexSet0->properties(indexSet0->descriptor(inter)).source; // Note FP : we should probably connect osi and graph before, in simulation->initialize? DSOSIConstIterator it = _osiMap.find(ds); SP::OneStepIntegrator osi = it->second; if (!osi) RuntimeException::selfThrow("Simulation::computeLevelsForInputAndOutput osi does not exists"); indexSet0->properties(indexSet0->descriptor(inter)).osi = osi; std11::shared_ptr<SetupLevels> setupLevels; setupLevels.reset(new SetupLevels(shared_from_this(), inter, ds)); osi->accept(*(setupLevels.get())); if (!init) // We are not computing the levels at the initialization { SP::Topology topo = model()->nonSmoothDynamicalSystem()->topology(); unsigned int indxSize = topo->indexSetsSize(); assert (_numberOfIndexSets >0); if ((indxSize == LEVELMAX) || (indxSize < _numberOfIndexSets )) { topo->indexSetsResize(_numberOfIndexSets); // Init if the size has changed for (unsigned int i = indxSize; i < topo->indexSetsSize(); i++) // ++i ??? topo->resetIndexSetPtr(i); } } }
void Simulation::computeLevelsForInputAndOutput() { DEBUG_PRINT("Simulation::computeLevelsForInputAndOutput()\n"); SP::Topology topo = model()->nonSmoothDynamicalSystem()->topology(); InteractionsGraph::VIterator ui, uiend; SP::InteractionsGraph indexSet0 = topo->indexSet0(); for (std11::tie(ui, uiend) = indexSet0->vertices(); ui != uiend; ++ui) { computeLevelsForInputAndOutput(indexSet0->bundle(*ui), true); } unsigned int indxSize = topo->indexSetsSize(); if ((indxSize == LEVELMAX) || (indxSize < _numberOfIndexSets )) { topo->indexSetsResize(_numberOfIndexSets ); // Init if the size has changed for (unsigned int i = indxSize; i < topo->indexSetsSize(); i++) // ++i ??? topo->resetIndexSetPtr(i); } DEBUG_PRINTF("_numberOfIndexSets =%d\n", _numberOfIndexSets); DEBUG_PRINTF("_levelMinForInput =%d\n", _levelMinForInput); DEBUG_PRINTF("_levelMaxForInput =%d\n", _levelMaxForInput); DEBUG_PRINTF("_levelMinForOutput =%d\n", _levelMinForInput); DEBUG_PRINTF("_levelMaxForOutput =%d\n", _levelMaxForInput); }