From openEMS

Jump to: navigation, search

OpenEMS is a free and open source EC-FDTD solver. The development was started in February 2010 and is written in C++. An extensive Matlab (or Octave) interface is used to define the FDTD options. The geometry used for the FDTD simulations is handled by the CSXCAD library which is part of the openEMS project.



  • Efficient EC-FDTD method in full 3D cartesian coordinates (x,y,z)
  • Efficient EC-FDTD method in full 3D cylindrical coordinates (ρ, φ, z)
  • Fully graded mesh
  • Multi-threading, SIMD (SSE) and MPI support for high speed parallel FDTD
  • Simple engine extensions API to easily introduce new features to the FDTD algorithm
  • Matlab-Interface
  • Absorbing boundary conditions (MUR, PML)
  • Coordinate dependent material definitions
  • Coordinate dependent excitation definitions (e.g. mode-profiles)
  • Dispersive material (Drude/Lorentz/Debye type)
  • Field dumps in time and frequency domain as vtk or hdf5 file format
  • Flexible post-processing routines (mostly in Matlab)
  • Subgrids to reduce simulation time in cylindrical coordinates
  • Remote simulations using SSH (Linux only)


  • OpenEMS - A free and open source EC-FDTD solver.
  • CSXCAD - A C++ library to describe geometrical objects and their physical or non-physical properties.
  • AppCSXCAD - A visualization program, capable of showing the structure defined inside a CSXCAD xml-file.
  • QCSXCAD - The visualisation library used by AppCSXCAD.


Libraries used by openEMS:


Instructions in Portuguese here


  • Download the latest 64bit openEMS. (Old versions can be found here: win32, win64)
  • Unzip to a folder of your choice e.g. "D:/" (zip contains an openEMS folder)
  • Add the openEMS path to matlab (maybe in a "startup.m" in your Matlab startup folder):

That's it! Check your installation in the First Steps Tutorial


The recommended way is to install openEMS from source.

For some Linux distributions we have binary repositories. Follow the instructions here.


Experimental support using brew: brew file

Octave Support

As of version v0.0.26 Octave support should be nearly complete. After installing a new openEMS version or a new Octave version (recommended and tested is Octave >3.4.3) add the command


to the file c:\Octave\Octave-4.0.0\share\octave\site\m\startup\octaverc and to the file c:\Octave\Octave-4.0.0\share\octave\4.0.0\m\startup\octaverc

(Assuming that openEMS has been installed in c:\openEMS and Octave 4.0.0 has been installed in c:\Octave.) This will automatically add a path to the openEMS matlab files directory every time Octave is executed.

    Then execute:

Additional Software

Additional Software that you may find useful:


"Paraview is an open-source, multi-platform data analysis and visualization application." Paraview Homepage

Paraview can be used to visualize vtk files containing field dumps generated by openEMS. Use your package-manager to install (Linux) or download at:


We kindly ask you to reference openEMS in any publication that you were using openEMS for:


  author = {Thorsten Liebig},
  title = {openEMS - Open Electromagnetic Field Solver},
  organization = {General and Theoretical Electrical Engineering (ATE), University of Duisburg-Essen},
  url = {}

Release Notes


Date: 13.06.2012

Have a look at the release notes in the Forum-News


Date: 01.03.2012

  • Near-field to far-field transformation completely rewritten in C++ with multi-threading --> speedup of 5 (single core) to 20+ (on my Quad-Core + HT)
  • New Tutorial: Helical Antenna
  • PML allowed in all directions for a cylindrical FDTD
  • HDF5, read/write cleanup
  • smaller fixes


Date: 19.01.2012

  • update and test of all tutorials
  • many minor fixes and enhancements
  • removed misleading percentage progress in openEMS output, replaced by warnings concerning low max. number of timesteps
  • CSXCAD: Octave support improved
  • Octave support: fixes in calculating nf2ff
  • Octave support: now full hdf5 read support (needs execution of setup.m)
  • Matlab/Octave: Convert hdf5 dump to vtk
  • Fixes and Updates to Queue framework (see help on InitQueue)


Date: 01.12.2011

  • CSXCAD: new transformation scheme: apply a transformation (e.g. rotation, translation, scaling) to any primitive object
  • CSXCAD: new rotational polygon primitive
  • CSXCAD: arbitrary transformation (e.g. rotation, translation, scaling) of discrete material (e.g. human body model) properties
  • QCSXCAD: 3D view mode as default, material is transparent
  • Queue interface for parallel matlab execution (currently Linux only)
  • Find a free ssh host (Linux only)
  • Dump far-field pattern to vtk
  • Advanced timestep in cylindrical coordinates
  • console output reduced & simplified


Data: 20.9.2011

  • Maltab: added a lot of new tutorials
  • Matlab: revision of AddMSLPort & calcPort
  • allow multiple boxes for a single Probe or Dump Property
  • fix in lumped elements mesh snapping
  • fix in cylindrical multigrid timestep resetting


Date: 22.7.2011

  • matlab field interpolation fix and matlab vtk dump fix
  • internal fixes handling dump and probe boxes
  • fix in material debug for cylindrical coordinates
  • bug fixes in the lumped elements and lumped port
  • find free ssh host (linux only)
  • fix in dumps using "OptResolution"
  • critical bug fix in default pml grading function
  • some updates to dft and fft, including a new resonance estimation


Date: 4.5.2011

  • some fixes in field dumps for handling special cases in cylindrical coordinates
  • new vtk file I/O, now using compressed vtk files
  • new lumped elements support
  • several bug fixes


Date: 28.3.2011

Personal tools
MediaWiki Appliance - Powered by TurnKey Linux