ERS Documentation
High-performance, scalable, multi-formalism simulation engine
Welcome to ERS. Use the buttons above to get started.
Why ERS
Massive Scalability
Parallel simulators and efficient ECS underpin large, complex models that stay fast.
Deterministic Simulation
Robust event scheduling with local and sync-events ensures reproducible results.
Composable Models
Entity-Component-System design lets you build reusable behaviors and data layouts.
Multi-Language Tooling
Start in C++, C#, or Python scripting and mix as your project grows.
Get started quickly
- Install the ERS Editor and SDK
- Build your first model (simulator + submodel)
- Add components and script behaviors to build model logic
- Visualize and simulate
Code sketch
// Program.cs
using Ers;
ERS.Initialize();
ModelContainer modelContainer = ModelContainer.Create();
modelContainer.Precision = 1_000_000;
Simulator sim1 = modelContainer.AddSimulator("Sim1", SimulatorType.DiscreteEvent);
sim1.EnterSubModel();
// Add components and script behaviors here
sim1.ExitSubModel();
// Simulate 60 seconds in 1-second steps
ulong endTime = 60 * modelContainer.Precision;
while (modelContainer.CurrentTime < endTime)
{
modelContainer.Update(modelContainer.Precision);
}
ERS.Uninitialize();
// main.cpp
#include <ERS/ERS.h>
#include <ERS/Model/ModelContainer.h>
int main() {
ERS::Initialize();
auto model = ERS::Model::ModelContainer::Create();
model.SetPrecision(1'000'000);
auto sim1 = model.AddSimulator("Sim1", ERS::Model::SimulatorType::DiscreteEvent);
sim1.EnterSubModel();
// Add components and script behaviors here
sim1.ExitSubModel();
// Simulate 60 seconds in 1-second steps
unsigned long long endTime = 60 * model.GetPrecision();
while (model.CurrentTime() < endTime) {
model.Update(model.GetPrecision());
}
ERS::Uninitialize();
return 0;
}
See the ERS Editor
Explore the integrated environment for building, scripting, and visualizing your simulations.