Elmer — Исходники и компиляция
Создано: 2009-06-20
Обновлено: 2010-04-24
Описание:
Elmer – свободный пакет для конечноэлементного моделирования.
На официальном сайте есть несколько хороших PDF пособий по различным аспектам этой программы, а также примеры и учебники. Часть документации доступна в специальном пакете в репозиториях
дебиана и
убунту, что
стало возможно после
изменения лицензии документации на
CC-BY-ND.
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 репозиторий пакета
Журнал изменений пакета