RUNTIME RECONSTRUCTION

The delivered results were generated on macOS with KiCad 10.0.6 and Python
3.12.14. Python 3.9 / pcbnew was not used. Installed runtimes and source build
trees are excluded from the repository and review ZIP.

Official source: https://github.com/thliebig/openEMS-Project
Superproject: 9f5cdd4d71cae312633ab0b2c1db64867f8c782b
openEMS:      5b1ecb1244e6bd192d83efdf2bc84e5f83c96047
CSXCAD:       bd2c133392d93251b640da1f8e2367163f00b7f5

Build prerequisites: C/C++ compiler, CMake, Boost, HDF5, CGAL, VTK, and an
available Python 3.12 interpreter. The upstream driver builds TinyXML on macOS
and installs the Python extensions in runtime/venv. Upstream documentation:
https://docs.openems.de/en/latest/install/requirements.html

Suggested reconstruction from the repository root (adjust Python/toolchain
paths for the host; this is not a one-command cross-platform installer):

  python3.12 -m venv routing-user-spec/venv
  routing-user-spec/venv/bin/python -m pip install \
    -r openems-2026-09-30/requirements-geometry.txt
  git clone --recursive https://github.com/thliebig/openEMS-Project.git \
    openems-2026-09-30/openEMS-Project
  git -C openems-2026-09-30/openEMS-Project checkout \
    9f5cdd4d71cae312633ab0b2c1db64867f8c782b
  git -C openems-2026-09-30/openEMS-Project submodule update --init --recursive

In a shell with Python 3.12 selected as python3 (for example, activate the
geometry venv), change into openems-2026-09-30/openEMS-Project and run:

  ./update_openEMS.sh --disable-GUI --python --python-venv-mode=venv \
    --njobs=4 ../runtime

The --python-venv-mode=venv option ensures the separate solver venv is created
even when the geometry venv is active. Confirm runtime/venv/bin/python reports
Python 3.12. The delivered solver environment contained:

  openEMS  0.37.0rc3.post1.dev16+g5b1ecb124
  CSXCAD   0.7.0rc3.post1.dev1+gbd2c13339
  numpy    2.5.3
  matplotlib 3.11.2

The build log is build-driver.log; the detailed compiler/install log is
build-source.log. Cython is used by the isolated build environment and is not
installed as a runtime package. Then follow REPRODUCE.txt for the 14 accepted
simulations and native KiCad checks. Rerunning FDTD can take substantial time.

Original Altium route geometry is not included. extract-stackup.py accepts a
path to a separately held PcbDoc and reads only Board6/Data. Already-extracted
source-stackup.json and altium-stack-metadata.json are sufficient to reproduce
the provided models and final width/stackup edits.
