public class AlgebraicLoopDirector extends StaticSchedulingDirector
The errorTolerance may be given as a parameter to an individual port (just add a parameter named "errorTolerance" to the port). For any port for which there is no such parameter, the errorTolerance parameter of this director will be used. Note that if the errorTolerance of a port is changed during a run, the new value is ignored until the next run.
In all cases, the problem being solved has the form:
    > g  x where x is initially the vector of values corresponding to input ports that have a nonnull defaultValue parameter, and g is the network of actors connecting these ports.
This class solves an algebraic loop of the form x=g(x)
    > g  x where x is initially the vector of values corresponding to input ports that have a nonnull defaultValue parameter, and g is the network of actors connecting these ports.
For the SuccessiveSubstitution, we simply evaluate g repeatedly until either all signals do not change by more than the errorTolerance, or until there have been maxIterations. Note that it is possible to reach a fixed point where some or all signals are infinite.
For NewtonRaphson, we solve for g(x)=x by solving f(x)=0, where f(x) = xg(x). This is done by iterating as follows:
x_n+1 = x_n  f(x_n)/f'(x_n) = x_n  (x_n  g(x_n))/(1  g'(x_n)) .To estimate g'(x_n), we do
g'(x_n) = (g(x_n + d)  g(x_n))/dwhere d is the delta parameter.
For Homotopy, we solve f(x) = x  g(x).
The problem is reformulated as H(s, lambda, x0) = s  lambda (g(s+x0)x0),
where lambda has an initial value of 0 and is successively increased to 1,
s is a coordinate transformation defined so that x = s+x0, where
x0 is the initial iterate.
The implementation is equal to Program 3 of
Eugene L. Allgower and Kurt Georg,
Introduction to Numerical Continuation Methods,
Classics in Applied Mathematics, Vol. 45, SIAM, 2003.
However, the implementation by Allgower and Georg assumes an initial iterate of 0,
which is the reason for the above coordinate transformation.
FIXME: Questions:
Red (pwhitake) 
Yellow (eal) 
Modifier and Type  Class and Description 

(package private) class 
AlgebraicLoopDirector.AlgebraicLoopSolver
A class for solving algebraic loops.

(package private) class 
AlgebraicLoopDirector.Homotopy
Class for solving algebraic loops using a homotopy method.

(package private) class 
AlgebraicLoopDirector.NewtonRaphson
Class for solving algebraic loops using the NewtonRaphson method.

(package private) class 
AlgebraicLoopDirector.SuccessiveSubstitution
Class for solving algebraic loops using the su method.

NamedObj.ContainedObjectsIterator
Modifier and Type  Field and Description 

protected java.util.List<AlgebraicLoopReceiver> 
_breakVariables
The list of receivers for all break variables.

protected double[] 
_g_n
Current value of the loop function g(x_n).

protected int 
_nVars
Number of break variables.

(package private) AlgebraicLoopDirector.AlgebraicLoopSolver 
_solver
Algebraic loop solver.

protected double[] 
_tolerance
Tolerance for each iteration variable.

protected double[] 
_x_n
Current value of the iteration variables x_n.

Parameter 
errorTolerance
The default tolerance for determining when convergence has occurred.

Parameter 
maxIterations
The maximum number of allowed iterations before the director
will declare a failure to converge.

StringParameter 
method
The method to be used to solve algebraic loops.

_postfireReturns, _prefire
_actorsFinishedExecution, _aspectForActor, _aspectsPresent, _defaultMicrostep, _executionAspects, _finishRequested, _initializables, _nextScheduleTime, _stopRequested, _tokenSentToCommunicationAspect, _zeroTime, localClock, startTime, stopTime
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description 

AlgebraicLoopDirector(CompositeEntity container,
java.lang.String name)
Construct a director in the given container with the given name.

Modifier and Type  Method and Description 

protected void 
_clearAllDestinationReceivers(Actor actor)
Call the send(index, null) method of each output port of the specified actor.

protected void 
_evaluateLoopFunction(double[] x,
double[] g)
Evaluate the loop function for x and save the result in g.

protected void 
_fireActor(Actor actor)
Fire an actor.

java.lang.Object 
clone(Workspace workspace)
Clone the object into the specified workspace.

void 
fire()
Prefire and fire actors in the order given by the scheduler
until the iteration converges.

void 
initialize()
Initialize the director and all deeply contained actors by calling
the super.initialize() method, then identify all the break variables
(where an input port has a defaultValue set) and adjust the I/O
dependencies.

Receiver 
newReceiver()
Return a new FixedPointReceiver.

boolean 
postfire()
Postfire all contained actors.

_setScheduler, addDebugListener, getScheduler, invalidateSchedule, isScheduleValid, prefire, removeDebugListener, resumeActor, setScheduler
_actorFinished, _consultTimeRegulators, _description, _isEmbedded, _isTopLevel, _schedule, _transferInputs, _transferOutputs, addInitializable, attributeChanged, createSchedule, defaultDependency, delayDependency, finish, fireAt, fireAt, fireAt, fireAtCurrentTime, fireContainerAt, fireContainerAt, getCausalityInterface, getCurrentTime, getDeadline, getEnvironmentTime, getErrorTolerance, getExecutionAspect, getGlobalTime, getModelNextIterationTime, getModelStartTime, getModelStopTime, getModelTime, getNextIterationTime, getStartTime, getStopTime, getTimeResolution, implementsStrictActorSemantics, initialize, invalidateResolvedTypes, isEmbedded, isFireFunctional, isStopRequested, isStrict, iterate, mutexLockObject, notifyTokenSentToCommunicationAspect, preinitialize, preinitialize, removeInitializable, requestInitialization, resume, scheduleContainedActors, setContainer, setCurrentTime, setEmbedded, setModelTime, setTimeResolution, stop, stopFire, suggestedModalModelDirectors, supportMultirateFiring, suspend, terminate, transferInputs, transferOutputs, transferOutputs, wrapup
_checkContainer, _getContainedObject, _propagateExistence, getContainer, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, setName, updateContent
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _exportMoMLContents, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, _validateSettables, addChangeListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, attributeTypeChanged, clone, containedObjectsIterator, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getElementName, getFullName, getModelErrorHandler, getName, getName, getPrototypeList, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateExistence, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, uniqueName, validateSettables, workspace
public Parameter errorTolerance
public Parameter maxIterations
public StringParameter method
protected java.util.List<AlgebraicLoopReceiver> _breakVariables
protected double[] _g_n
protected int _nVars
AlgebraicLoopDirector.AlgebraicLoopSolver _solver
protected double[] _tolerance
protected double[] _x_n
public AlgebraicLoopDirector(CompositeEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
container
 Container of the director.name
 Name of this director.IllegalActionException
 If the director is not compatible
with the specified container.NameDuplicationException
 If the name collides with an
attribute in the container.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
clone
in class StaticSchedulingDirector
workspace
 The workspace for the cloned object.java.lang.CloneNotSupportedException
 Not thrown in this base classNamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class StaticSchedulingDirector
IllegalActionException
 If an actor violates the
monotonicity constraints, or the prefire() or fire() method
of the actor throws it.protected void _evaluateLoopFunction(double[] x, double[] g) throws IllegalActionException
x
 Input to the loop function.g
 Double vector of the same size as x. The result will be stored in this function.IllegalActionException
 If the prefire() method
returns false having previously returned true in the same
iteration, or if the prefire() or fire() method of the actor
throws it, or if evaluating the function yields a value that
is not a double.public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class StaticSchedulingDirector
IllegalActionException
 If the superclass throws it.public Receiver newReceiver()
newReceiver
in class Director
public boolean postfire() throws IllegalActionException
postfire
in interface Executable
postfire
in class StaticSchedulingDirector
IllegalActionException
 If the superclass throws it, or
if any of the contained actors throw it.protected void _clearAllDestinationReceivers(Actor actor) throws IllegalActionException
actor
 The actor.IllegalActionException
 If thrown while getting
the width of a port, determining if a port is known
or while sending data.protected void _fireActor(Actor actor) throws IllegalActionException
actor
 The actor to be fired.IllegalActionException
 If the prefire() method
returns false having previously returned true in the same
iteration, or if the prefire() or fire() method of the actor
throws it.