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

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

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

Ключевые возможностиОтличительной особенностью данного симулятора является то, что он не имеет своего графического интерфейса, а встраивается в 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 | © 2010–2013 Thorsten Liebig 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 = [](0×0) 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 | © 2010–2013 Thorsten Liebig GPL license ----------------------------------------------------------------------

[…]

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

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

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

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

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

© Habrahabr.ru