void NetworkConstantModel::updateActionsState(double /*now*/, double delta) { NetworkConstantActionPtr action = NULL; ActionListPtr actionSet = getRunningActionSet(); for(ActionList::iterator it(actionSet->begin()), itNext=it, itend(actionSet->end()) ; it != itend ; it=itNext) { ++itNext; action = static_cast<NetworkConstantActionPtr>(&*it); if (action->m_latency > 0) { if (action->m_latency > delta) { double_update(&(action->m_latency), delta, sg_surf_precision); } else { action->m_latency = 0.0; } } action->updateRemains(action->getCost() * delta / action->m_latInit); if (action->getMaxDuration() != NO_MAX_DURATION) action->updateMaxDuration(delta); if (action->getRemainsNoUpdate() <= 0) { action->finish(); action->setState(SURF_ACTION_DONE); } else if ((action->getMaxDuration() != NO_MAX_DURATION) && (action->getMaxDuration() <= 0)) { action->finish(); action->setState(SURF_ACTION_DONE); } } }
double NetworkConstantModel::shareResources(double /*now*/) { NetworkConstantActionPtr action = NULL; double min = -1.0; ActionListPtr actionSet = getRunningActionSet(); for(ActionList::iterator it(actionSet->begin()), itend(actionSet->end()) ; it != itend ; ++it) { action = static_cast<NetworkConstantActionPtr>(&*it); if (action->m_latency > 0 && (min < 0 || action->m_latency < min)) min = action->m_latency; } return min; }
void WorkstationL07Model::updateActionsState(double /*now*/, double delta) { double deltap = 0.0; WorkstationL07ActionPtr action; ActionListPtr actionSet = getRunningActionSet(); for(ActionList::iterator it(actionSet->begin()), itNext = it, itend(actionSet->end()) ; it != itend ; it=itNext) { ++itNext; action = static_cast<WorkstationL07ActionPtr>(&*it); deltap = delta; if (action->m_latency > 0) { if (action->m_latency > deltap) { double_update(&(action->m_latency), deltap, sg_surf_precision); deltap = 0.0; } else { double_update(&(deltap), action->m_latency, sg_surf_precision); action->m_latency = 0.0; } if ((action->m_latency == 0.0) && (action->isSuspended() == 0)) { action->updateBound(); lmm_update_variable_weight(ptask_maxmin_system, action->getVariable(), 1.0); } } XBT_DEBUG("Action (%p) : remains (%g) updated by %g.", action, action->getRemains(), lmm_variable_getvalue(action->getVariable()) * delta); action->updateRemains(lmm_variable_getvalue(action->getVariable()) * delta); if (action->getMaxDuration() != NO_MAX_DURATION) action->updateMaxDuration(delta); XBT_DEBUG("Action (%p) : remains (%g).", action, action->getRemains()); if ((action->getRemains() <= 0) && (lmm_get_variable_weight(action->getVariable()) > 0)) { action->finish(); action->setState(SURF_ACTION_DONE); } else if ((action->getMaxDuration() != NO_MAX_DURATION) && (action->getMaxDuration() <= 0)) { action->finish(); action->setState(SURF_ACTION_DONE); } else { /* Need to check that none of the model has failed */ lmm_constraint_t cnst = NULL; int i = 0; void *constraint_id = NULL; while ((cnst = lmm_get_cnst_from_var(ptask_maxmin_system, action->getVariable(), i++))) { constraint_id = lmm_constraint_id(cnst); if (static_cast<WorkstationPtr>(constraint_id)->getState() == SURF_RESOURCE_OFF) { XBT_DEBUG("Action (%p) Failed!!", action); action->finish(); action->setState(SURF_ACTION_FAILED); break; } } } } return; }