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
    Поделиться публикацией

    Похожие публикации

    Комментарии 11

      +1
      Спасибо за наводку.
        +1
        Спасибо, статья очень интересная, и будет интересно покопаться в исходниках.

        Единственное что я бы хотел заметить, так это не то что он встраивается в Матлаб или Octave, а сам симулятор написан на Матлабе. И написан так чтобы быть совместимым с Octave.

        Это просто мелкое замечание и не в коем случае это не значит что сам пакет ненужный или плохой. Готовлюсь скачать и посмотреть внимательней :)
          0
          Собственно симулятор (вычислительное ядро FDTD и визуализатор AppCSXCAD) написаны на C++. Такой софт делать на скриптовых языках, подобных Матлабу нерационально. На Матлабе написан только конвертер результатов моделирования в структуры данных Матлаб и формирователь задания. Остальные компоненты симулятора написаны на С++.
          +1
          Вот это гениально, спасибо! А то покупать Microwave studio или HFSS для редко возникающих численных задач совсем не хочется, а тут opensource.

          Не знаете, пользовательские гран-условия можно ставить? Что-то типа гранусловий Леонтовича (это не тот, коротый композитор :) ).
            0
            Нет, такого типа граничных условий пока нет.
            +1
            Уже было обрадовался но… оказывается, нужен для этого маткад… он-то не бесплатный, на триальной версии особо не поездишь. Ну и второе — он под линукс, т.е. еще и дополнительно операционку для этого ставить. Жаль конечно…
              0
                +1
                Читайте статью внимательней! Ни одного упоминания про Маткад там нет! Симулятор встраивается в Matlab(платный) или Octave (бесплатный). Руководство по установке на Windows есть тут: openems.de/index.php/OpenEMS#Windows
                  0
                  Вот именно из-за таких мелочей…
                  Впервые слышу что Octave это бесплатный математический софт уровня Matlab.
                  Теперь всё стало на свои места.
                +1
                Спасибо за статью. Приятно было узнать, что кто-то еще интересуется данной тематикой.
                Хотелось бы добавить пару ссылок на тему бесплатного/фришного ПО для электродинамического (и не только) анализа.
                  +1
                  Для всех, кого заинтересовала данная тематика сегодня вышло продолжение статьи: habrahabr.ru/post/258489

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое