DAEdalus docs GitHub Open the workbench

Roadmap

Done

Language and compiler

  • Modelica frontend: classes, inheritance, modifiers, redeclarations, conditional components, arrays and for loops, functions (inlined), connections including array connects.
  • Backend: alias elimination, Pantelides with dummy derivatives, BLT, tearing, symbolic Jacobians, and a separate initialization system.

Simulation

  • Tape code generation.
  • Solvers: BDF with dense and sparse LU, Dopri5, RK4 and Euler.
  • Solver suite (solvers.md): Radau IIA (order 5) and ESDIRK4(3)6L with dense output, auto Dopri5/BDF switching with Hairer's stiffness test, exact colored state Jacobians from tape tangents (--jacobian fd for differences), __Dymola_Algorithm mapped to the closest method, and a grouped method select with a stiff-solver recommendation in the workbench.
  • Events, when, reinit and terminate.
  • Results as Dymola .mat or CSV.

Library and examples

  • Bundled library with these packages:
    • Blocks
    • Rotational mechanics, including a torque converter and clutches
    • Translational mechanics, including an elasto-gap
    • Hydraulics, including a servo valve, cylinder, accumulator and aerated oil
    • Vehicle, including an EV machine, battery, driver and drive cycles
  • Six blog-post examples with regression tests (see examples.md).

Tooling

  • CLI: check, flatten, dump, simulate, and test-library (parallel, one process per model, with a time limit).
  • linearize: exact state-space matrices A, B, C, D (forward-mode tangents of the tape, implicit differentiation of algebraic loops) at the initial point or after simulating to a time; text, JSON or an OpenModelica-style linearized_model.
  • Performance analyzer and event log (simulate --profile, --events, the workbench Performance tab): step sizes, rejected steps and the states that limit the step; time and Newton iterations per block; events with their relations, components and changed values; chattering detection; hints.
  • fmu: FMI 2.0 export, Model Exchange and Co-Simulation in one FMU (linux64), with a model-independent runtime library and the compiled model as a resource; validated with FMPy in CI.
  • mcp: a Model Context Protocol server (browse, edit, check, simulate, linearize) and an in-app Claude assistant in the workbench with the same tools.
  • structure: variable roles, BLT blocks with their equations, incidence, the dummy-derivative state sets and why each state was chosen; at a time point the exact state Jacobian with its condition number, eigenvalues, time constants, participation factors, stiffness ratio and a solver suggestion, the Jacobians of the algebraic loops, and a check of the static state choice along the trajectory. Workbench Structure view with the same.
  • State selection without editing the model: --state NAME=prefer|avoid|... (globs allowed) on every command, and pin/forbid in the Structure view, with "copy as modifier".
  • Analysis (sensitivity, montecarlo / gsa, calibrate, optimize, and the workbench's Analysis mode):
    • exact forward sensitivities (tape tangents) or central differences;
    • Monte Carlo bands, Sobol and Morris indices;
    • Levenberg–Marquardt calibration against CSV data;
    • Nelder–Mead design optimization (see the README).
  • Browser workbench:
    • package browser, with the Modelica Standard Library 4.1.0 loaded on demand;
    • icon, diagram, text, documentation and flat-model views;
    • simulation setup and variable browser;
    • plot window;
    • graphical editing: drag components from the browser, draw connections with compatible-connector highlighting and orthogonal routing, move, rotate, flip, delete, a parameter dialog, undo and redo, all written back to the text without disturbing its formatting.
  • Experiments: daedalus sweep (grid or grouped parameter sweeps on all cores, structural parameters translated again per value, summary table); in the workbench, stored runs (IndexedDB) with overlay and diff, sweeps over a pool of Web Workers with a summary table and a scalar-vs-parameter plot, and shareable links that reopen and run a model with its overrides.
    • 3-D animation of MultiBody results and of every bundled example;
    • back and forward navigation between classes.
  • export-casadi and the daedalus_casadi package: optimal control, MPC and moving horizon estimation.
  • MultiBodyVehicle: suspension corners, K&C and seven-post rigs and a full car.
  • Release binaries for Linux, macOS and Windows.
  • CI: Rust tests, a simulation of every example, a 2000-mass scalability smoke test, and the WebAssembly and workbench build.

Next

Modelica Standard Library coverage

The MSL 4.x sweep is daedalus test-library <MSL> -m Modelica: 473 of 534 example models translate and simulate (up from 441, 261 and 110 before that). Recently covered: Modelica.Media (IF97 water, R134a, ideal-gas mixtures, moist air, reference air) and most Modelica.Fluid examples, through compiled run-time functions with exact forward-mode partials, Dymola-style preferred-state selection and record constants from modifiers. The remaining failures, which are the next work items:

Failures Cause
~30 Stiff or discontinuous runs that stop with "step size too small" or reach the wall-clock limit (Spice3 transistors, digital circuits, some Fluid start-ups such as HeatingSystem)
12 External C functions (Modelica.Math.Random, Streams, FFT, Utilities)
~10 Function bodies: return under a time-varying condition, missing defaulted inputs in nested calls, vector size checks
~10 Subscripts on non-array components and non-constant subscripts in bindings
6 Friction and thyristor events that chatter (clutches, RobotR3 bearing friction)
~5 Initialization of nonlinear systems (R134a two-volume system, op-amp circuits, rolling wheel)
3 Synchronous Clock partitions

CombiTable1D/CombiTimeTable (all smoothness kinds of the C tables, with first and second derivatives and the C time-event intervals), CombiTable2D (bilinear, constant and bivariate Akima) and tables read from text, CSV and MATLAB v4/v6/v7 files are supported; tables supplied through a usertab C function and MATLAB v7.3 (HDF5) files are not.

Performance

  • Flattener allocation. At 10k components, flattening (1.4 s) is the largest translation cost. The plan:
    • intern instance names;
    • share modifier environments instead of cloning them;
    • cache instantiated class skeletons per (class, modifier) pair.
  • Parallelism.
    • Parallel instantiation of independent component subtrees.
    • Parallel Jacobian coloring and evaluation for >100k states.
  • JIT. Optionally lower the tape to Cranelift natively and to a generated WebAssembly module in the browser.
  • Solver. A sparse-Jacobian reuse heuristic across steps, and IDA-style DAE mode for very large index-1 systems without state-space conversion.

Workbench

  • Graphical editing, next steps: editing inherited components and connections, array connectors (u[1]), connector names in the diagram, align and space.

FMI

  • FMU export for other platforms (Windows, macOS: build daedalus-fmi there), fmi2GetDirectionalDerivative from the tape's forward-mode tangents, FMU state get/set, and time events for table breakpoints in Model Exchange (a jump in a time table without an event can stall an importer's integrator).
  • FMI 3.0 and FMU import.
  • Persisted experiments, and result comparison across runs.

Edit this page on GitHub