Program: 75201
Project: 75201
Buggy source:
/** 
 * Resolve the initial states with a normal ODE solver at a futhre time.  The future time is the current time puls the step size used by the  solver. Return immediately if any actor returns false in their  prefire() method. After this method is called, time advances to the  future time.
 * @exception IllegalActionException If one the actors throws itin its execution methods.
 */
protected void _resolveInitialStates() throws IllegalActionException {
  if (_debugging && _verbose) {
    _debug("String_Node_Str" + getModelTime(),"String_Node_Str" + getCurrentStepSize());
  }
  ODESolver solver=getCurrentODESolver();
  if (_debugging && _verbose) {
    _debug("String_Node_Str" + solver.getName());
  }
  prefireClear();
  prefireDynamicActors();
  while (!_stopRequested) {
    while (!_stopRequested) {
      solver.resetRoundCount();
      solver._setConverged(false);
      while (!solver.isConverged() && solver.resolveStates()) {
        _setExecutionPhase(CTExecutionPhase.FIRING_DYNAMIC_ACTORS_PHASE);
        solver.fireDynamicActors();
        _setExecutionPhase(CTExecutionPhase.UNKNOWN_PHASE);
        _setExecutionPhase(CTExecutionPhase.FIRING_STATE_TRANSITION_ACTORS_PHASE);
        solver.fireStateTransitionActors();
        _setExecutionPhase(CTExecutionPhase.UNKNOWN_PHASE);
      }
      if (solver.resolveStates()) {
        if (_debugging && _verbose)         _debug("String_Node_Str");
        if (!_isStateAccurate()) {
          setCurrentStepSize(_refinedStepWRTState());
        }
 else {
          break;
        }
      }
 else {
        if (getCurrentStepSize() < 0.5 * getMinStepSize()) {
          throw new IllegalActionException(this,"String_Node_Str" + "String_Node_Str" + getModelTime());
        }
        setCurrentStepSize(0.5 * getCurrentStepSize());
      }
      setModelTime(getIterationBeginTime());
      if (_debugging && _verbose) {
        _debug("String_Node_Str" + getModelTime() + "String_Node_Str"+ getCurrentStepSize());
      }
    }
    if (_stopRequested) {
      break;
    }
    produceOutput();
    fireEventGenerators();
    if (!_isOutputAccurate()) {
      setModelTime(getIterationBeginTime());
      setCurrentStepSize(_refinedStepWRTOutput());
      if (_debugging && _verbose) {
        _debug("String_Node_Str" + "String_Node_Str" + getCurrentStepSize());
      }
    }
 else {
      break;
    }
    CTSchedule schedule=(CTSchedule)getScheduler().getSchedule();
    Iterator actors=schedule.get(CTSchedule.STATEFUL_ACTORS).actorIterator();
    while (actors.hasNext()) {
      CTStatefulActor actor=(CTStatefulActor)actors.next();
      if (_debugging) {
        _debug("String_Node_Str" + (Nameable)actor);
      }
      actor.goToMarkedState();
    }
  }
  updateContinuousStates();
  setSuggestedNextStepSize(_predictNextStepSize());
}

Fixed version (ground truth):
/** 
 * Resolve the initial states with a normal ODE solver at a futhre time.  The future time is the current time puls the step size used by the  solver. Return immediately if any actor returns false in their  prefire() method. After this method is called, time advances to the  future time.
 * @exception IllegalActionException If one the actors throws itin its execution methods.
 */
protected void _resolveInitialStates() throws IllegalActionException {
  if (_debugging && _verbose) {
    _debug("String_Node_Str" + getModelTime(),"String_Node_Str" + getCurrentStepSize());
  }
  ODESolver solver=getCurrentODESolver();
  if (_debugging && _verbose) {
    _debug("String_Node_Str" + solver.getName());
  }
  prefireClear();
  prefireDynamicActors();
  while (!_stopRequested) {
    while (!_stopRequested) {
      CTSchedule schedule=(CTSchedule)getScheduler().getSchedule();
      Iterator actors=schedule.get(CTSchedule.STATEFUL_ACTORS).actorIterator();
      while (actors.hasNext()) {
        CTStatefulActor actor=(CTStatefulActor)actors.next();
        if (_debugging) {
          _debug("String_Node_Str" + (Nameable)actor);
        }
        actor.goToMarkedState();
      }
      solver._resetRoundCount();
      solver._setConverged(false);
      while (!solver._isConverged() && solver.resolveStates()) {
        _setExecutionPhase(CTExecutionPhase.FIRING_DYNAMIC_ACTORS_PHASE);
        solver.fireDynamicActors();
        _setExecutionPhase(CTExecutionPhase.UNKNOWN_PHASE);
        _setExecutionPhase(CTExecutionPhase.FIRING_STATE_TRANSITION_ACTORS_PHASE);
        solver.fireStateTransitionActors();
        _setExecutionPhase(CTExecutionPhase.UNKNOWN_PHASE);
      }
      if (solver.resolveStates()) {
        if (_debugging && _verbose)         _debug("String_Node_Str");
        if (!_isStateAccurate()) {
          setCurrentStepSize(_refinedStepWRTState());
        }
 else {
          break;
        }
      }
 else {
        if (getCurrentStepSize() < 0.5 * getMinStepSize()) {
          throw new IllegalActionException(this,"String_Node_Str" + "String_Node_Str" + getModelTime());
        }
        setCurrentStepSize(0.5 * getCurrentStepSize());
      }
      setModelTime(getIterationBeginTime());
      if (_debugging && _verbose) {
        _debug("String_Node_Str" + getModelTime() + "String_Node_Str"+ getCurrentStepSize());
      }
    }
    if (_stopRequested) {
      break;
    }
    produceOutput();
    fireEventGenerators();
    if (!_isOutputAccurate()) {
      setModelTime(getIterationBeginTime());
      setCurrentStepSize(_refinedStepWRTOutput());
      if (_debugging && _verbose) {
        _debug("String_Node_Str" + "String_Node_Str" + getCurrentStepSize());
      }
    }
 else {
      break;
    }
  }
  updateContinuousStates();
  setSuggestedNextStepSize(_predictNextStepSize());
}