Open source
CAD/CAM
21 May 2015

openEMS — электромагнитный симулятор с открытым исходным кодом

Этот пост рассказывает об электромагнитном симуляторе с открытым исходным кодом openEMS. Автор проекта — Thorsten Liebig (Германия, университет Дуйсбург-Эссен). Сайт проекта — openems.de. Репозиторий на Гитхабе: github.com/thliebig/openEMS-Project. Симулятор является кроссплатформенным и работает под Linux и Windows.

Когда я впервые увидел этот проект, то не поверил, что такое может быть создано. Создание электромагнитного симулятора представляет собой достаточно-трудоемкую задачу, и раньше я думал, что такое не под силу open-source сообществу. Тем не менее openEMS опровергает это представление. Это полноценный электромагнитный симулятор. Конечно, он не дотягивает до уровня HFSS, но это уже весьма достойный результат.

Здесь изображен пример использования симулятора. Это диаграмма направленности рупорной антенны на частоту 15 ГГц, полученная при помощи openEMS.



Ключевые возможности


Отличительной особенностью данного симулятора является то, что он не имеет своего графического интерфейса, а встраивается в Octave или Matlab. Задание на моделирование является скриптом Octave или Matlab, а для просмотра результатов служит программа Paraview. Например, рупорную антенну моделирует вот такой скрипт.

Электромагнитный симулятор предназначен для расчёта распределения электромагнитного поля в различных системах, возбуждаемых как от источника переменного напряжения, так и внешним электромагнитным полем.

1. Расчёт электромагнитного поля (электродинамика) методом FDTD (метод конечных разностей во временной области)

2. Расчёт S-параметров электромагнитных систем

3. Расчёт электромагнитного поля в ближней и дальней зоне

4. Расчёт диаграмм направленности антенн

5. Визуализация результатов

Преимуществом openEMS является то, что он встраивается в Matlab/Octave, и следовательно мы имеем неограниченные возможности по параметризации моделей. Для постобработки результатов тоже можно использовать всю мощь этих систем численной математики. При этом не требуется возня с экспортом результатов и их запихиванием в математическую систему, а можно сразу же получить графики и вставлять их в статьи.

Недостатком openEMS является повышенный порог вхождения. Симулятор интуитивно не понятен. Чтобы понять что с ним делать, нужно обязательно читать мануалы. Без знания Matlab/Octave работать с ним вообще невозможно.

Установка


Инструкция по установке есть здесь www.openems.de/index.php/OpenEMS#Installation

Для установки под Linux можно воспользоваться готовыми пакетами для своего дистрибутива, подключив сторонний репозиторий openEMS. Например для Debian 7 установка выполняется в два этапа. Сначала добавляем репозиторий:

wget -O- 'http://download.opensuse.org/repositories/home:/sibbi77:/openEMS/Debian_7.0/Release.key' 2>/dev/null | apt-key add -
echo 'deb http://download.opensuse.org/repositories/home:/sibbi77:/openEMS/Debian_7.0/ /' > /etc/apt/sources.list.d/openems.list

А потом устанавливаем пакеты:
apt-get update
apt-get install openems appcsxcad

Для Slackware14.1 есть SlackBuild от меня: github.com/ra3xdh/openEMS.SlackBuild

Если под ваш дистрибутив готовых пакетов нет, то придётся собирать openEMS из исходников. Инструкция по сборке находится здесь: www.openems.de/index.php/Compile_from_Source

Для сборки понадобятся следующие библиотеки:
  • CGAL
  • boost
  • tinyxml
  • hdf5
  • Qt4
  • VTK5


При этом нужно учесть, что openEMS требует библиотеки VTK5, которая несовместима с VTK6. Так что если у вас в дистрибутиве VTK6, то нужно собрать и установить сначала VTK5. Взять VTK5 можно здесь www.vtk.org/download.
Ещё для просмотра результатов моделирования нужно установить Paraview. Он обычно есть в вашем дистрибутиве и ставится при помощи пакетного менеджера.

Настройка после установки


Теперь нужно прописать пути к пакету openEMS в конфигурационном файле Octave или Matlab. Предположим, что openEMS установлен в /opt/openEMS. Тогда в файл $HOME/.octaverc нужно дописать:

addpath('/opt/openEMS/share/openEMS/matlab');
addpath('/opt/openEMS/share/CSXCAD/matlab');

Для Matlab то же самое нужно дописать в файл startup.m

Теперь можно приступать к работе.

Пробный запуск


Сначала проверяем, что запускается само ядро openEMS. Для этого в консоли переходим в каталог, где установлен openEMS, а потом запускаем openEMS. Например для случая установки в /opt/openEMS:

cd /opt/openEMS/bin/
./openEMS

Должен получиться примерно такой вывод в консоль:

 ---------------------------------------------------------------------- 
 | openEMS 64bit -- version v0.0.32-14-g63adb58
 | (C) 2010-2013 Thorsten Liebig <thorsten.liebig@gmx.de>  GPL license
 ---------------------------------------------------------------------- 
        Used external libraries:
                CSXCAD -- Version: v0.5.2-15-gcb5b3cf
                hdf5   -- Version: 1.8.13
                          compiled against: HDF5 library version: 1.8.13
                tinyxml -- compiled against: 2.6.2
                fparser
                boost  -- compiled against: 1_54
                vtk -- Version: 5.10.1
                       compiled against: 5.10.1


Если получилось, то можно продолжать. В противном случае что-то установилось не
так.

Теперь проверяем интерфейс с Octave. запускаем Octave или Matlab и проверяем, что всё функционирует. Сначала проверяем, что есть взаимодействие с CSXCAD — программой для предпросмотра 3D-модели. Нужно ввести команду InitCSX() и система должна дать примерно такой ответ:

octave:1> InitCSX()
ans =

  scalar structure containing the fields:

    Properties = [](0x0)
    ATTRIBUTE =

      scalar structure containing the fields:

        CoordSystem = 0


Теперь нужно проверить интерфейс для создания пространства конечной разности во временной области:

octave:2> InitFDTD(0,0)

ans =
  scalar structure containing the fields:
    ATTRIBUTE =
      scalar structure containing the fields:
        NumberOfTimesteps = 0
        endCriteria = 0

Теперь пробуем запустить openEMS из Matlab/Octave с несуществующим заданием:

octave:4> RunOpenEMS('.','nonexistent.xml','.')
 ---------------------------------------------------------------------- 
 | openEMS 64bit -- version v0.0.32-14-g63adb58
 | (C) 2010-2013 Thorsten Liebig <thorsten.liebig@gmx.de>  GPL license
 ---------------------------------------------------------------------- 

 [....]

openEMS - unknown argument: .
openEMS: Error File-Loading failed!!! File: nonexistent.xml

Теперь пробуем запустить просмотрщик геометрии CSXCAD. Для этого внутри Octave набираем команду (она запускает CSXCAD с некоторым пустым файлом):

CSXGeomPlot('nonexistant.xml')

В ответ должны получить сообщение об ошибке, в котором нажимаем ОК и затем должно открыться окно CSXCAD. Оно выглядит так:



Если все эти шаги выполнились, то можно приступать к освоению симулятора. В следующей части будет рассказано, как смоделировать распространение электромагнитной волны в пространстве между двумя параллельными пластинами.

Реcурсы по openEMS


  1. Сай проекта: openems.de
  2. Гитхаб: github.com/thliebig/openEMS-Project
  3. Вики: openems.de/index.php/Main_Page
  4. Список функций: openems.de/index.php/List_of_Functions

+34
24.5k 187
Comments 11
Top of the day