Class DessSimulator<T extends Number & Comparable<T>>
java.lang.Object
org.djutils.event.LocalEventProducer
nl.tudelft.simulation.dsol.simulators.Simulator<T>
nl.tudelft.simulation.dsol.simulators.DessSimulator<T>
- Type Parameters:
T
- the time type
- All Implemented Interfaces:
Serializable
,Runnable
,Remote
,DessSimulatorInterface<T>
,SimulatorInterface<T>
,EventProducer
public class DessSimulator<T extends Number & Comparable<T>>
extends Simulator<T>
implements DessSimulatorInterface<T>
The DESS defines the interface of the DESS simulator. DESS stands for the Differential Equation System Specification. More
information on Modeling and Simulation can be found in "Theory of Modeling and Simulation" by Bernard Zeigler et.al.
Copyright (c) 2002-2024 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See for project information https://simulation.tudelft.nl. The DSOL project is distributed under a three-clause BSD-style license, which can be found at https://https://simulation.tudelft.nl/dsol/docs/latest/license.html.
- Author:
- Peter Jacobs , Alexander Verbraeck
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class nl.tudelft.simulation.dsol.simulators.Simulator
Simulator.SimulatorWorkerThread
-
Field Summary
Modifier and TypeFieldDescriptionprotected T
timeStep represents the timestep of the DESS simulator.Fields inherited from class nl.tudelft.simulation.dsol.simulators.Simulator
model, replication, replicationState, runflag, runState, runUntilIncluding, runUntilTime, semaphore, simulatorTime, worker
Fields inherited from interface nl.tudelft.simulation.dsol.simulators.DessSimulatorInterface
TIME_STEP_CHANGED_EVENT
Fields inherited from interface org.djutils.event.EventProducer
FIRST_POSITION, LAST_POSITION
Fields inherited from interface nl.tudelft.simulation.dsol.simulators.SimulatorInterface
START_EVENT, STARTING_EVENT, STOP_EVENT, STOPPING_EVENT, TIME_CHANGED_EVENT
-
Constructor Summary
ConstructorDescriptionDessSimulator
(Serializable id, T initialTimeStep) Construct a DessSimulator with an initial time step for the integration process. -
Method Summary
Modifier and TypeMethodDescriptionreturns the time step of the DESS simulator.void
run()
The run method defines the actual time step mechanism of the simulator.void
setTimeStep
(T timeStep) Method setTimeStep sets the time step of the simulator.protected void
stepImpl()
The implementation body of the step() method.Methods inherited from class nl.tudelft.simulation.dsol.simulators.Simulator
addScheduledMethodOnInitialize, cleanUp, endReplication, fireTimedEvent, getErrorLogLevel, getErrorStrategy, getLogger, getModel, getReplication, getReplicationState, getRunState, getSimulatorTime, handleSimulationException, initialize, runUpTo, runUpToAndIncluding, setErrorLogLevel, setErrorStrategy, setErrorStrategy, start, startImpl, step, stop, stopImpl, warmup
Methods inherited from class org.djutils.event.LocalEventProducer
addListener, addListener, addListener, addListener, fireEvent, fireEvent, fireEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireUnverifiedEvent, fireUnverifiedEvent, fireUnverifiedTimedEvent, fireUnverifiedTimedEvent, getEventListenerMap, getEventTypesWithListeners, getListenerReferences, hasListeners, numberOfListeners, removeAllListeners, removeAllListeners, removeListener
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.djutils.event.EventProducer
addListener, addListener, addListener, addListener, fireEvent, fireEvent, fireEvent, fireTimedEvent, fireTimedEvent, fireTimedEvent, fireUnverifiedEvent, fireUnverifiedEvent, fireUnverifiedTimedEvent, fireUnverifiedTimedEvent, getEventListenerMap, getEventTypesWithListeners, getListenerReferences, hasListeners, numberOfListeners, removeAllListeners, removeAllListeners, removeListener
Methods inherited from interface nl.tudelft.simulation.dsol.simulators.SimulatorInterface
addScheduledMethodOnInitialize, addScheduledMethodOnInitialize, cleanUp, endReplication, getErrorLogLevel, getErrorStrategy, getLogger, getModel, getReplication, getReplicationState, getRunState, getSimulatorTime, initialize, isInitialized, isStartingOrRunning, isStoppingOrStopped, runUpTo, runUpToAndIncluding, setErrorLogLevel, setErrorStrategy, setErrorStrategy, start, step, stop
-
Field Details
-
timeStep
timeStep represents the timestep of the DESS simulator.
-
-
Constructor Details
-
DessSimulator
Construct a DessSimulator with an initial time step for the integration process.- Parameters:
initialTimeStep
- T; the initial time step to use in the integration.id
- the id of the simulator, used in logging and firing of events.- Throws:
SimRuntimeException
- when initialTimeStep <=0, NaN, or Infinity
-
-
Method Details
-
getTimeStep
returns the time step of the DESS simulator.- Specified by:
getTimeStep
in interfaceDessSimulatorInterface<T extends Number & Comparable<T>>
- Returns:
- the timeStep
-
setTimeStep
Method setTimeStep sets the time step of the simulator.- Specified by:
setTimeStep
in interfaceDessSimulatorInterface<T extends Number & Comparable<T>>
- Parameters:
timeStep
- T; the new timeStep. Its value should be > 0.0- Throws:
SimRuntimeException
- when timestep <= 0, NaN, or Infinity
-
stepImpl
protected void stepImpl()The implementation body of the step() method. The stepImpl() method should fire the TIME_CHANGED_EVENT before the execution of the simulation event, or before executing the integration of the differential equation for the next timestep. So the time is changed first to match the logic carried out for that time, and then the action for that time is carried out. This is INDEPENDENT of the fact whether the time changes or not. The TIME_CHANGED_EVENT is always fired. -
run
public void run()The run method defines the actual time step mechanism of the simulator. The implementation of this method depends on the formalism. Where discrete event formalisms loop over an event list, continuous simulators take predefined time steps. Make sure that:
- SimulatorInterface.TIME_CHANGED_EVENT is fired when the time of the simulator changes
- the warmup() method is called when the warmup period has expired (through an event or based on simulation time)
- the endReplication() method is called when the replication has ended
- the simulator runs until the runUntil time, which is also set by the start() method.
-