Architecture Decisions#
Last updated: 2026-05-24
This file records accepted technical decisions that should guide future migration work.
ADR-001 Single Private SDK Repository#
MuPRO SDK should converge toward one private engineering repository. The former openmupro split added build and release friction without a realistic code-contribution benefit.
Impact:
Common runtime and utility modules live in
library/.Future app code may also be folded into the primary SDK repository during app refactors.
Public/customer interaction should happen through issues, support, logs, test cases, and requirements rather than direct source contribution.
ADR-002 App Submodules Are Transitional#
The current app submodules remain in place until each app is refactored. Do not spend effort polishing their independent repository workflow unless it is needed for a near-term release.
Impact:
apps/muFerroandapps/muPREDICTlocal cleanup edits are deferred.Future app refactors should decide whether to absorb app code into the SDK repository or keep only release packaging links.
App migration should be planned separately from L0/L1 runtime migration.
ADR-003 Desktop Is Out Of Scope#
The old desktop code is not part of the SDK migration. Desktop or GUI products will be redesigned in other software.
Impact:
Do not migrate
openmupro/desktop.Do not block core SDK migration on GUI build health.
Keep SDK examples command-line and library-oriented for now.
ADR-004 Fortran First, C ABI Boundary#
Fortran remains the primary numerical/scientific implementation language. A stable C ABI should be introduced as the long-term cross-language boundary.
Impact:
Preserve existing Fortran module APIs during migration.
Add C ABI wrappers gradually after runtime ownership and error/status foundations exist.
C/C++ code may be used behind the ABI or in backend implementations when justified.
ADR-005 Platform Tiers#
Linux is the Tier 1 high-performance and official release platform. Windows is supported for oneAPI-based workflows when required. macOS is development-only and CPU-only.
Impact:
Linux/Windows defaults are oneAPI + oneMKL + MKL FFT.
macOS defaults are Homebrew
gfortran+ OpenBLAS + user-installed FFTW + OpenMPI.macOS should run small examples and smoke checks, not production HPC workloads.
ADR-006 FFTW Is Never Bundled#
FFTW is used only for macOS development builds and must not be bundled into SDK packages.
Impact:
macOS developers install FFTW themselves.
SDK package scripts should not copy FFTW artifacts.
Linux/Windows official builds use MKL FFT.
ADR-007 Reference Code Defines Scientific Baselines#
The old MUPRO snapshot under reference/ is the primary behavior reference for core scientific logic.
Impact:
Solver refactors should map current code to
reference/Libraryandreference/Main_Programs/Ferroelectricbefore changing algorithms.Unconfirmed scientific logic must be marked as
需人确认.Benchmark expected values should trace to reference code or trusted legacy outputs.