IKR Simulation Library (IKR SimLib)
The IKR Simulation Library is a tool, which is mainly used for event-driven simulation of
complex systems in the area of communications engineering. Originally, Hartmut Kocher
designed an object-oriented version of the IKR SimLib in 1993 during his dissertation  and
implemented it in C++. Since this original design, we enhanced and improved the IKR SimLib
In 2008, we ported the IKR SimLib to Java while keeping all concepts and mechanisms of the
existing C++ class library. Today, two editions of the IKR SimLib are available: The C++ Edition
and the Java Edition. Each edition comes as a separate class library. The IKR SimLib is
publicly available under the GNU Lesser General Public License (LGPL) and thus allows
changes within the libraries itself as well as proprietary programs to use it.
In the last years, we have successfully used the IKR SimLib for performance evaluation in various
projects from different areas in communication network research, e.g. IP, ATM, photonic,
mobile, and signaling networks.
1.2 Conceptual Structure
We structure the IKR Simulation Library into three main parts (Fig. 1). Basic concepts
include simulation support mechanisms like event handling (see
), simulation IKR control
), distribution-oriented random number generation (See
) and tools to statistically
evaluate measured values (See
) as well as reading parameters (See
printing simulation results are provided.
Beyond that, the IKR Simulation Library contains concepts for constructing hierarchical models
from individual components (See
) that communicate with each other by exchanging
). This message exchange occurs using so-called ports (See
which are used to define an external interface of a model component. Then, we can connect
this interface to meters (See
), which allow a simple determination of measurement values.
Structure of the IKR Simulation Library
1.3 Naming Conventions
In order to ensure that the source code of the IKR SimLib is easy to read and maintain, we follow
Sun's Code Conventions for the Java Programming Language (see http://java.sun.com/
docs/codeconv/html/CodeConvTOC.doc.html). Depending on the type, the first letter of a
camel case compound may or may not be capitalized. For example class names use a capitalized
letter (e.g., Queue), and variables and attributes a lowercase letter (e.g., name).
The identifier of an element should be self-explanatory (e.g., maxLength, routingManager).
If the element's name consists of several individual words, these are preferably written
together, where each new part of the word begins with a capitalized letter.
 H. KOCHER: Entwurf und Implementierung einer Simulationsbibliothek unter Anwendung
objektorientierter Methoden, Dissertation, Institute of Communication Networks
and Computer Engineering, University of Stuttgart, 1993.