View Javadoc

1   /*
2    * @(#)DESSSimulator.java Aug 18, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  package nl.tudelft.simulation.dsol.simulators;
11  
12  import java.rmi.RemoteException;
13  
14  import nl.tudelft.simulation.dsol.SimRuntimeException;
15  import nl.tudelft.simulation.dsol.experiment.Replication;
16  import nl.tudelft.simulation.logger.Logger;
17  
18  /***
19   * The DESS defines the interface of the DESS simulator. DESS stands for the
20   * Differential Equation System Specification. More information on Modeling &
21   * Simulation can be found in "Theory of Modeling and Simulation" by Bernard
22   * Zeigler et. al. <br>
23   * (c) copyright 2003 <a href="http://www.simulation.tudelft.nl">Delft
24   * University of Technology </a>, the Netherlands. <br>
25   * See for project information <a
26   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
27   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
28   * License (GPL) </a>, no warranty <br>
29   * 
30   * @version 2.0 21.09.2003 <br>
31   * @author <a href="http://www.tbm.tudelft.nl/webstaf/peterja/index.htm">Peter
32   *         Jacobs </a>, <a
33   *         href="http://www.tbm.tudelft.nl/webstaf/alexandv/index.htm">Alexander
34   *         Verbraeck </a>
35   */
36  public class DESSSimulator extends Simulator implements DESSSimulatorInterface
37  {
38  
39  	/***
40  	 * timeStep represents the timestep of the DESS simulator
41  	 * 
42  	 * @uml.property name="timeStep"
43  	 */
44  	protected double timeStep = DEFAULT_TIME_STEP;
45  
46  
47  	/***
48  	 * @see nl.tudelft.simulation.dsol.simulators.SimulatorInterface
49  	 *      #initialize(nl.tudelft.simulation.dsol.experiment.Replication)
50  	 */
51  	public void initialize(final Replication replication)
52  			throws RemoteException, SimRuntimeException
53  	{
54  		super.initialize(replication);
55  		this.replication.getRunControl().getTreatment().getExperiment()
56  				.getModel().constructModel(this);
57  	}
58  
59  	/***
60  	 * @see nl.tudelft.simulation.dsol.simulators.DESSSimulatorInterface
61  	 *      #getTimeStep()
62  	 * 
63  	 * @uml.property name="timeStep"
64  	 */
65  	public double getTimeStep()
66  	{
67  		return this.timeStep;
68  	}
69  
70  
71  	/***
72  	 * @see nl.tudelft.simulation.dsol.simulators.Simulator#run()
73  	 */
74  	public void run()
75  	{
76  		while (this.simulatorTime <= this.replication.getRunControl()
77  				.getRunLength()
78  				&& isRunning())
79  		{
80  			synchronized (super.semaphore)
81  			{
82  				this.simulatorTime = this.simulatorTime + this.timeStep;
83  				if (this.simulatorTime > this.replication.getRunControl()
84  						.getRunLength())
85  				{
86  					this.simulatorTime = this.replication.getRunControl()
87  							.getRunLength();
88  					this.stop();
89  				}
90  				this.fireEvent(SimulatorInterface.TIME_CHANGED_EVENT,
91  						this.simulatorTime, this.simulatorTime);
92  			}
93  		}
94  	}
95  
96  	/***
97  	 * @see nl.tudelft.simulation.dsol.simulators.DESSSimulatorInterface
98  	 *      #setTimeStep(double)
99  	 * 
100 	 * @uml.property name="timeStep"
101 	 */
102 	public void setTimeStep(final double timeStep)
103 	{
104 		synchronized (super.semaphore)
105 		{
106 			if (timeStep < 0)
107 			{
108 				throw new IllegalArgumentException("timeStep <0 ?");
109 			}
110 			this.timeStep = timeStep;
111 			Logger
112 					.finer(this, "setTimeStep", "set the timeStep to "
113 							+ timeStep);
114 			this.fireEvent(TIME_STEP_CHANGED_EVENT, timeStep);
115 		}
116 	}
117 
118 }