Переходим к решению собственно систем уравнений в частных производных. Три наиболее используемых математических метода: метод конечных элементов, метод конечных объёмов и метод конечных разностей.
Именно так я и сгруппирую программные пакеты: по типу реализованного математического метода. После имени пакета указаны его основные особенности, такие как размерность задачи на которую он рассчитан или язык программирования с которым он может применяться.
- Elmer
- 1-2-3D, проект рассчитаный на решение задач из разных областей физики: теплопроводности, гидродинамики, механики твёрдого тела, акустики, электромагнетизма, квантовой механики; задачи описываются в виде легко читаемых текстовых файлов, есть неплохой графический интерфейс, поддерживает распараллеливание по MPI, лицензия GPL
- FreeFEM++
- 2D, свой язык программирования транслируемый в C++, типизированный C-подобный, со встроенными типами триангуляций и пространств конечных элементов, код получается понятен, краток и приближен к математической записи задачи в слабой форме — но поддерживаются только треугольные элементы (включая DG- и мини-элементы), хорошая документация, много примеров использования на разных задачах, кроссплатформенный инструмент, лицензия LGPL
- FreeFEM3D
- 3D вариант FreeFEM++, с другими разработчиками, но со схожей идеологией, на сегодняшний день с несколько меньшей фукнциональностью, поддерживает конструктивное описание геометрии задачи
- GetDP
- 1-2-3D, формальное описание проблемы с помощью специального языка, приближенное к математической формулировке, в некотором смысле идеологически близок FreeFEM++, может решать интегро-дифференциальные задачи, в данный момент заточен под задачи из области электромагнетизма, акустики, теплопроводности и механики, ищут добровольцев готовых применить GetDP в области гидродинамики, лицензия GPL
- Impact
- 3D, пакет для расчётов методом конечных элементов упругих и упругопластичных деформаций при ударах, написан на Java, имеет графический интерфейс, лицензия GPL, для визуализации полагается на несвободный, но бесплатный для академичекого использования, GiD
- Code_Aster
- 1-2-3D, очень большой (миллион строк кода, более 360 разных конечных элементов) пакет для расчётов задач механики сплошных сред, термо- и гидродинамики, акустики и магнетизма и других, заметна ориентация проекта на инженерные приложения, поддерживается язык программирования Python, лицензия GPL, документация преимущественно на французском языке
- Deal.II
- 1-2-3D, библиотека для C++, получила в 2007 году премию Вилкинсона, хорошая документация, локальная адаптация сеток, p- и hp- методы, встроенные средства создания сеток, автоматическое распараллеливание сборки линейной системы и других операций на многоядерных/многопроцессорных машинах (SMP), поддержка кластерного параллелизма (MPI), но выбор элементов беднее, чем в GetFEM++, лицензия QPL
- FETK
- 2D-3D, набор объектно-ориентированных библиотек Си, ориентирован на решение эллиптических уравнений, поддерживает адаптивные сетки и предлагает необычный способ распараллеливания решения (помимо MPI), можно использовать все возможности из bash-подобной оболочки (интерпретатора), есть упрощённая 2D версия для matlab, лицензия GPL
- Dolfin/FEniCS
- С++ и Python интерфейсы к системе решения задач FEniCS, хорошая поддержка в Debian и Ubuntu, код приближен к математической постановке задачи в слабой форме, но получается длиннее, чем в FreeFEM++, в силу того, что Python язык универсальный; вообще под зонтиком FEniCS объединено сразу несколько интересных проектов
- GetFEM++
- 1-2-3-…-ND, библиотека для C++, есть интерфейсы высокого уровня для Matlab и для Python (!), поддерживает большое количество типов конечных элементов, включая экзотичные, вроде X-FEM, практически любой размерности, есть возможность программирования типовых задач с помощью готовых «кирпичиков», избегая явной сборки линейной системы, отсутствуют встроенные средства создания сеток, можно пользоваться внешними, библиотека кроссплатформенна
- LibMesh
- 1-2-3D, библиотека для C++ с возможностью локальной адаптации сеток, параллельное решение линейных систем с помощью PETSc (MPI), поддерживает безматричные методы, выбор элементов шире, чем в Deal.II
- LifeV
- 2D-3D, C++, основные области применения: гидродинамика, теплопроводность, перенос массы и взаимодействие жидкость–структура в пористых средах
- Ofeli
- 2D-3D, библиотека C++, среди примеров есть задачи теплопроводости, решения уравнения Навье–Стокса для несжимаемой жидкости, теории упругости (2D и 3D), электромагнетизма, лицензия GPL
- Rheolef
- 1-2-3D, библиотека для C++, код получается краток и приближен к математической записи задачи в слабой форме, автоматическая адаптация сеток для 2D задач
- MODULEF
- довольно продвинутая библиотека для Fortran77
- FEATFLOW
- 2D-3D, библиотеки для Fortran, пакет ориентирован на решение уравнений Навье–Стокса для течения несжимаемых жидкостей, лицензия типа BSD
- OpenFEM
- довольно продвинутая библиотека для Matlab и Scilab, но версия для свободного Scilab развивается менее активно
- Mélina
- 2D-3D, библиотека для Fortran, документирована исключительно на французском языке
- FEAPpv
- библиотека для Fortran, для задач теории упругости и теплопроводности, распространяется бесплатно и в качестве приложения к книге, но лицензия неясна, является урезанной версией несвободной библиотеки FEAP
- ALBERTA-FEM
- 1D-2D-3D, библиотека для C, адаптивные сетки, контроль невязок, лицензия GPL, но на данный момент несвободнаядокументация (для старой версии — книжка на Amazon). Release candidate новой версии 3.0 можно найти здесь, там же и черновик книжки к ней (без права копирования).
Метод конечных элементов (FEM):
- FiPy
- библиотека для Python, удобная запись задачи, приближенная к математической записи в сильной форме, получается простой и краткий код, решает задачи типа реакция–диффузия–конвекция в 1-2-3D, но не работает с областями со сложной геометрией, библиотека кроссплатформенна
- Gerris
- 2D-3D, пакет ориентированный на решение задач вычислительной гидродинамики (несжимаемаемые течения, уравнения Эйлера, Стокса или Навье–Стокса), поддерживает адаптивные сетки, расчёт переноса веществ в жидкости, распараллеливание по MPI, использует метод Volume-of-Fluid для отслеживания границы между жидкостями, постановка задачи описывается в виде графа, геометрия твердых объектов может быть импортирована из приложений CAD и 3D-моделирования, лицензия GPL
- OpenFOAM
- визуальная среда + библиотека C++, огромный проект, заточен прежде всего под задачи гидродинамики, кроссплатформенный, у меня пока с ним не сложилось
- Overture
- пакет C++ библиотек для расчётов на сложных и перекрывающихся сетках методами конечных разностей и конечных объёмов, поддерживает MPI, основной упор на гидродинамику и теорию горения. Лицензия несвободная, запрещает коммерческое использование.
Метод конечных объёмов (FVM):
Метод конечных разностей (FD)
Здесь можно резко упростить себе жизнь: для этого годится любая библиотека, предоставляющая удобный интерфейс для работы с разреженными матрицами и решателями линейных систем. Заполнение матрицы обычно очевидно из используемой численной схемы. Можно порекомендовать следующие комбинации:
- Python с PySparse
- C++ с GMM++ или каким-нибудь другим из решателей линейных систем (см. выше)
- C или Fortran с любым подходящим решателем линейных систем
- Overture (см. выше)
Комментариев нет:
Отправить комментарий