Slot Values
Slot timesteps and cells which do not have a value appear as “NaN,” or “Not a Number.” When a slot receives a value, it can occur via one of the following mechanisms:
• Direct user input
• A value propagated across a link from another object
• A value set by the object’s user or dispatch methods
Set Value
When one of the three mechanisms attempts to set a value on a slot, the following steps are taken in order:
1. Convergence. If a value already exists in the slot, check for convergence. If the difference between the old value and the new value is within the slot’s convergence criterion, do not set it. See
Configure Slot Dialog in User Interface for details on how to set convergence for a series slot.
2. Maximum Slot Resets per Timestep. If a value already exists in the slot, check max slot resets. If the value has already been set as many times as the max criterion, do not set it again. In this case, the run aborts and an error message is posted to diagnostics. The max resets setting is available in the Run Control dialog by selecting
View, then
Simulation Run Parameters from the workspace; see
Run Parameters in User Interface for details.
3. Overdetermination. Check for over overdetermination. Overdetermination is detected by examining how the previous slot value was set. If the slot has a previous value, and this previous value was set from a different source, the object is overdetermined. In this case, post an overdetermination error and abort the run.
4. Set Value. If the previous checks succeed, set the (new) value in the slot.
5. Propagation. If the slot is linked, propagate the value across the link(s).
Object’s Response to Setting a Slot Value
When a slot is set on an object, the following occurs:
1. Dispatch Slot. Check if the slot which was set is a dispatch slot. Dispatch slots are the subset of SeriesSlots which may be Dispatch Conditions and may be linked to other objects. Only dispatch slots cause objects to redispatch when they are set. If the slot is not a dispatch slot, nothing else is done.
2. Dispatch Conditions. If the object has not yet dispatched this timestep, check the dispatch conditions of each Method on the method table. If a Method’s conditions are satisfied, this Method is used for the dispatch. If no Method’s conditions are satisfied, the object must wait for more information; nothing else is done. If the object has already dispatched this timestep, redispatch with the same Method.
3. Notify Controller. If a valid Dispatch Method was found in the previous step, notify the controller of the Method to be dispatched. The controller then puts the object on the dispatch queue.
Iteration
After an object has dispatched during a timestep, it will dispatch again if any dispatch slot is reset. When a dispatch slot’s value changes, there is a high probability that the previous solution for this object at this timestep is now invalid. Since all values are known, the object cannot match any of its Dispatch Methods’ Dispatch Conditions (remember that Dispatch Conditions include required unknowns as well as required knowns). The object redispatches using the same Dispatch Method that was invoked previously.