Elmer — Исходники и компиляция

Создано: 2009-06-20

Обновлено: 2010-04-24

Описание:

Elmer – свободный пакет для конечноэлементного моделирования.

На официальном сайте есть несколько хороших PDF пособий по различным аспектам этой программы, а также примеры и учебники. Часть документации доступна в специальном пакете в репозиториях дебиана и убунту, что стало возможно после изменения лицензии документации на CC-BY-ND.

Elmer_on_Debian_Sid.png
Elmer в Debian GNU/Linux (Sid), графическая среда — KDE-4.2.4

На скриншоте показаны: сетка в препроцессоре, блокнот с инструкциями для решателя, новый постпроцессор, который сейчас активно допиливают. Представлено решение простейшей задачи о естественной конвекции от нагретой пластины.

Установочные файлы под винду из trunk-ветки генерируются разработчиками ежедневно. deb-пакеты с бинарниками есть в Debian >= 6.0 (Squeeze) и Ubuntu >= 9.10 (Karmic Koala), про пакеты для других дистрибутивов мне не известно.

На официальном сайте есть вся необходимая информация по сборке и использованию программы. Но кому-то может не хватить знания английского и/или умения компилировать программы самостоятельно, поэтому ниже будут приведены простые и краткие инструкции по сборке этой программы (а также созданию пакетов с ней, если необходимо) в нестабильной ветке дебиана (должны подойти и для пользователей убунты). Надеюсь, кому-то это будет полезно.

Исходники и компиляция

Если у вас еще не установлена система управления версиями Subversion, то ее просто установить:
sudo apt-get install subversion
А затем получить исходный код:
svn export https://elmerfem.svn.sourceforge.net/svnroot/elmerfem/trunk elmerfem/trunk
Или можно скопировать исходники одним архивом:
wget 'http://elmerfem.svn.sourceforge.net/viewvc/elmerfem/trunk.tar.gz?view=tar'
tar xzf 'trunk.tar.gz?view=tar'
rm trunk.tar.gz*
Для компиляции программы необходимо установить следующие пакеты:
sudo apt-get install automake gcc g++ \
 gfortran libblas-dev liblapack-dev mpi-default-dev mpi-default-bin \
 libhypre-dev libsuitesparse-dev libarpack2-dev libreadline-dev \
 libncurses5-dev libx11-dev tk8.4-dev tcl8.4-dev libfreetype6-dev \
 libftgl-dev libgl1-mesa-dev libglu1-mesa-dev \
 libopencascade-modeling-dev libqt4-dev qt4-qmake libqt4-opengl-dev \
 libqwt5-qt4-dev libvtk5-qt4-dev python-qt4-dev libscotchmetis-dev \
 r-base-core
Теперь нужно отредактировать файл trunk/ElmerGUI/ElmerGUI.pri любым текстовым редактором. У меня он выглядит так: ElmerGUI.pri. Рекомендую проверить строки:
...
DEFINES += EG_PYTHONQT # Use PythonQt for scripting in post processor?
...
BITS = 32
...
   VTK_INCLUDEPATH = /usr/include/vtk-5.2
   VTK_LIBPATH += /usr/lib/vtk-5.2 /usr/lib
...
   OCC_INCLUDEPATH = /usr/include/opencascade
   OCC_LIBPATH += /usr/lib /usr/lib/opencas
...
Упростит компиляцию вот такой скрипт:
#!/bin/sh -f
# Compile Elmer modules and install it

export ELMER_HOME=/mnt/other/elmer

# replace these with your compilers:
export CC=gcc
export CXX=g++
export FC=gfortran
export F77=gfortran


export ELMERGUI_HOME=$ELMER_HOME/bin
modules="matc umfpack mathlibs elmergrid meshgen2d eio hutiter fem post elmerparam front"

for m in $modules; do
  cd $m
  chmod uog=rwx ./configure
  ./configure --prefix="$ELMER_HOME"
  make
  make install
  cd ..
done

cd ElmerGUI
qmake
make
make install
cp Application/edf-extra/* $ELMER_HOME/bin/edf/
cd ..

cd ElmerGUIlogger
qmake -project
qmake
make
make install
cp ./ElmerGUIlogger $ELMERGUI_HOME
cd ..
Этот скрипт необходимо поместить в каталог trunk и отредактировать перед выполнением. Переменная ELMER_HOME задает каталог, в который будут установлены все необходимые файлы после сборки. Если вам наплевать на мусор в системе, то можно задать ELMER_HOME=/. Если у вашего пользователя нет прав на запись в каталог ELMER_HOME, то нужно изменить в скрипте make install на sudo make install и cp на sudo cp.

В процессе компиляции иногда бывает необходимо приостановить этот процесс. Например, если кулер на ноутбуке не справляется с охлаждением процессора. Сделать это можно командой:
pkill -STOP make
Для продолжения процесса нужно выполнить:
pkill -CONT make

После выполнения скрипта все компоненты программы будут установлены в соответствующие каталоги. Теперь, например, для запуска графического препроцессора ElmerGUI можно воспользоваться простым скриптом, подобным этому:
#!/bin/sh

export ELMER_HOME=/mnt/other/elmer

case "$1" in
    "-h"|"-help"|"--help")
        echo "This is a simple script for setting environment variables and launching ElmerGUIlogger."
        echo "ELMER_HOME now is set to: $ELMER_HOME"
        ;;
    *)
        export ELMERGUI_HOME=$ELMER_HOME/bin
        export ELMER_POST_HOME=$ELMERGUI_HOME
        export ELMER_LIB="$ELMER_HOME/lib:$ELMER_HOME/share/elmersolver/lib:$ELMER_HOME/share/elmerpost/lib:$ELMER_HOME/share/elmerfront/lib"
        export PATH=$ELMER_HOME/bin:$ELMER_HOME/lib:$ELMER_HOME/share/elmersolver/lib:$PATH
        export LD_LIBRARY_PATH="${ELMER_LIB}:${LD_LIBRARY_PATH}"
        unset  ELMER_LIB

        # nohup $ELMERGUI_HOME/ElmerGUIlogger
        $ELMERGUI_HOME/ElmerGUIlogger &
        ;;
esac

exit 0


Сборка deb-пакетов

Есть несколько способов создать deb-пакет с нуля. Например: простой и правильный способы. Есть и другие... Но здесь я напишу о простом способе обновления уже имеющегося в репозитории пакета, используя полученные из SVN исходники, и с дополнительным предположением, что версия пакета не сильно отличается от версии исходников в SVN и все дополнительные патчи будут успешно применены.

Сразу же установим необходимые для сборки пакетов утилиты:
sudo apt-get install dh-make debhelper autotools-dev fakeroot
Информацию о них можно найти в документации, здесь же я ничего писать не буду.

Первый шаг (получение исходников) описан выше, будем считать, что у вас они уже есть. Переименуем каталог trunk и упакуем его в архив, например так:
export ELMER_VERSION=5.5.0.svn.4453.mybuild
mv trunk "elmerfem-$ELMER_VERSION"
tar -czf "elmerfem_$ELMER_VERSION.orig.tar.gz" "elmerfem-$ELMER_VERSION"
Далее, необходимо скачать из репозитория дебиана патчи от мейнтейнера пакета. Например:
export ELMER_OLD_VERSION=5.5.0.svn.4388.dfsg
export POSTFIX=-1
wget "http://ftp.de.debian.org/debian/pool/main/e/elmerfem/elmerfem_$ELMER_OLD_VERSION$POSTFIX.debian.tar.gz"
Посмотрите здесь и здесь, возможно там есть более новая версия патчей.

Теперь распакуем и переместим каталог debian с описанием пакета:
tar xzf elmerfem_$ELMER_OLD_VERSION$POSTFIX.debian.tar.gz
mv debian "elmerfem-$ELMER_VERSION/"
Дальше нам нужно изменить версию собираемых пакетов в файле debian/changelog. Это можно сделать с помощью любого блокнота или специальной утилитой dch:
cd "elmerfem-$ELMER_VERSION"
export DEBEMAIL="Vasya Pupkin <vasya@example.com>"
dch -v "$ELMER_VERSION-1" "Non-maintainer upload."
dch -a "Updating elmerfem packages."
Теперь нам надо разобраться с зависимостями. Т.е. с пакетами, необходимыми для сборки и установки пакетов с этой программой. Вся необходимая информация об этом содержится в текстовом файле debian/control. Секция Build-Depends содержит список пакетов (и их версии), необходимых для сборки пакетов*, указанных в секциях Package, а секции Depends содержат список пакетов, необходимых для их* установки. Например, если Build-Depends выглядит так:
Build-Depends: debhelper (>= 5), po-debconf, autoconf, automake,
 gfortran, libblas-dev | libblas-3gf.so, liblapack-dev | liblapack-3gf.so,
 mpi-default-dev, mpi-default-bin,
 libhypre-dev, libsuitesparse-dev, libarpack2-dev, libreadline-dev,
 libncurses5-dev, libx11-dev, tk8.4-dev, tcl8.4-dev, libfreetype6-dev,
 libftgl-dev, libgl1-mesa-dev | libgl-dev, libglu1-mesa-dev | libglu-dev,
 libopencascade-modeling-dev, libqt4-dev, qt4-qmake, libqt4-opengl-dev,
 libqwt5-qt4-dev, libvtk5-qt4-dev, python-qt4-dev, libscotchmetis-dev,
 r-base-core
Установим:
sudo apt-get install debhelper po-debconf autoconf automake \
 gfortran libblas-dev liblapack-dev mpi-default-dev mpi-default-bin \
 libhypre-dev libsuitesparse-dev libarpack2-dev libreadline-dev \
 libncurses5-dev libx11-dev tk8.4-dev tcl8.4-dev libfreetype6-dev \
 libftgl-dev libgl1-mesa-dev libglu1-mesa-dev \
 libopencascade-modeling-dev libqt4-dev qt4-qmake libqt4-opengl-dev \
 libqwt5-qt4-dev libvtk5-qt4-dev python-qt4-dev libscotchmetis-dev \
 r-base-core
Теперь можно выполнить какие-нибудь изменения в исходниках, если необходимо.

Наконец-то выполним команду для сборки пакетов c Elmer:
dpkg-buildpackage -rfakeroot
В конце сборки может быть выведено предупреждение:
dpkg-buildpackage: предупреждение: Отказ при подписывании файлов .dsc и .changes
Это нормально, если у вас не настроен GnuPG. На работоспособность пакетов это никак не повлияет.

Если сборка пакетов прошла удачно, то должны появиться 4 deb-файла и другие сопутствующие сборке файлы. В данном примере список файлов (и один каталог):
$ cd ..
$ ls -p
elmer_5.5.0.svn.4453.mybuild-1_i386.deb
elmer-common_5.5.0.svn.4453.mybuild-1_all.deb
elmerfem_5.5.0.svn.4388.dfsg-1.diff
elmerfem-5.5.0.svn.4453.mybuild/
elmerfem_5.5.0.svn.4453.mybuild-1.diff.gz
elmerfem_5.5.0.svn.4453.mybuild-1.dsc
elmerfem_5.5.0.svn.4453.mybuild-1_i386.changes
elmerfem_5.5.0.svn.4453.mybuild.orig.tar.gz
libelmer-dev_5.5.0.svn.4453.mybuild-1_i386.deb
libelmersolver-5.5.0_5.5.0.svn.4453.mybuild-1_i386.deb
Установим свежесобранные пакеты и их зависимости:
sudo dpkg -i *elmer*.deb
sudo apt-get -f install
Ярлык для запуска программы: /usr/share/applications/ElmerGUIlogger.desktop
Чтобы запустить из консоли:
sh -c 'ELMER_HOME=/usr ELMERGUI_HOME=/usr/share/ElmerGUI ELMER_POST_HOME=/usr/share/elmerpost ElmerGUIlogger' &

Желаю приятной и успешной работы.

PS: пользователям Windows версии программы рекомендую после установки переместить все *.xml файлы из каталога %ELMER_HOME%\bin\edf-extra\ в %ELMER_HOME%\bin\edf\. Если вы собрали deb-пакет по инструкциям выше, то ничего перемещать не надо.

PPS: проект открыт и активно развивается. Даже я успел уже внести свой скромный вклад: r4220, r5861. Весь список изменений в trunk-ветке SVN можно посмотреть здесь.

Мой старый скрипт для обновления: automatic_update_elmer.sh. Новый скрипт для неофициального PPA с ежедневными сборками: automatic_update_elmerfem. Ссылки с этого сайта:
Elmer — пакеты для Debian GNU/Linux и Ubuntu

Ссылки на документацию:
ElmerDocumentation.tar.gz
Elmer documentation
Elmer presentations
Elmer interfaces
Elmer examples
Elmer forum
Elmer wiki
Elmer FEM

Elmer в Debian и Ubuntu:
Описание пакета в Debian Sid
Debian PTS, страница на Launchpad
Ошибки в Debian, ошибки в Ubuntu
Git репозиторий пакета
Журнал изменений пакета

Tehnick © 2009-2016