This is the alpLab fork of openEMS, maintained for integration into Signex as the primary PCB electromagnetic field solver.
Upstream: https://github.com/thliebig/openEMS
Upstream Website: https://openEMS.de
Upstream Docs: https://docs.openEMS.de
All changes are kept minimal and upstreamable.
- Replace all
exit()calls with exception hierarchy (openEMS_SetupError,openEMS_AllocationError,openEMS_InternalError) for safe shared-library use - Replace
volatilewithstd::atomicfor proper thread safety in multi-threaded engine - Fix
setlocalerace conditions with RAIIScopedNumericLocaleguard SnapToMeshLineO(N) linear search replaced with O(log N) binary search (~14x speedup)- Fix
diff_powandm_LM_pos[n]memory leaks,size_toverflow - Merged upstream WIP: multi-threaded SAR (IEEE/IEC compliant), HDF5 improvements, arraylib
- Fully 3D Cartesian and cylindrical coordinates graded mesh
- Multi-threading, SIMD (SSE) and MPI support for high speed FDTD
- Octave/Matlab and Python interface
- Dispersive material (Drude/Lorentz/Debye type)
- Lumped RLC elements, conducting sheet model
- MSL/Stripline/CPW/Waveguide ports with S-parameter extraction
- Field dumps in time and frequency domain as VTK or HDF5 file format
- Near-to-far-field (NF2FF) transformation
- Multi-threaded SAR calculation with IEEE/IEC compliance
pacman -S mingw-w64-x86_64-{gcc,cmake,boost,hdf5,vtk,tinyxml,cgal,nlohmann-json}
mkdir -p build && cd build
cmake .. -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=../../install
mingw32-make -j$(nproc) installopenEMS is licensed under the terms of the GPLv3, see http://www.gnu.org/licenses/.