По сути, FEM кажется проблемой, которая в значительной степени «решена». Существует множество мощных сред, таких как Trilinos, PETSc, FEniCS, Libmesh или MOOSE.
У них есть одна общая черта: они чрезвычайно «тяжелые». Во-первых, установка обычно очень болезненная. Во-вторых, их интерфейс / API толстый и тяжелый - вы должны перевести всю свою идею в мышление соответствующей библиотеки. Это также означает, что функциональная совместимость и расширяемость для особых требований или существующего кода являются сложными.
Другие проекты, такие как (случайные примеры) Boost, LibIGL, Aztec (linear solver), Eigen или CGAL, демонстрируют, что абсолютно возможно создавать мощные библиотеки, которые легко интегрируются в код C ++ или Python, с очень простым и чистым интерфейсом, без необходимости установки. супер тяжелого каркаса.
Есть ли действительно легкий пакет для FEM? Я не ищу простой, автоматизированный решатель - я ищу библиотеку, которая предлагает мощные функции, поддерживая простой интерфейс, совместимость с общими структурами данных (например, C ++ STL) и облегченную установку (например, только заголовок).
Ответы:
Я разрабатывал облегченную библиотеку конечных элементов в Python 2.7, используя мощь массивов NumPy и разреженных матриц SciPy. Общая идея заключается в том, что при наличии сетки и конечного элемента вы имеете более или менее однозначное соответствие между билинейной формой и (разреженной) матрицей. Затем пользователь может использовать полученную матрицу по своему усмотрению.
Позвольте мне привести канонический пример, где мы решаем уравнение Пуассона в единичном квадрате с единичной нагрузкой.
Другие комментарии:
Вы можете найти проект в GitHub .
Версию кода на Python 3 можно найти здесь .
источник
Я думаю, у вас есть некоторая путаница. PETSc не относится к той же категории, что и Fenics, Libmesh, Moose и т. Д. Фактически, все эти (тяжеловесные) пакеты используют PETSc для линейной алгебры.
ИМХО PETSc настолько легок, насколько вы можете получить. Это просто требует компиляторов C / Fortran и Python (используется только для конфигурации), и вы можете собрать библиотеку менее чем за 5 минут на своем ноутбуке. Кроме того, наиболее сложной частью кода FE является параллельная сборка и решение, и PETSc заботится об обоих. Остальное (например, расчеты на уровне элементов) довольно просто.
Trillinos, OTOH - это гораздо больше, чем просто линейная алгебраическая структура, например, Aztec (линейный решатель), который вы упоминаете, является ее частью. В некотором смысле Aztec в Триллино можно сравнить с PETSc.
источник
Я могу порекомендовать nutils .
Nutils отвечает как минимум нескольким вашим «легким» требованиям.
источник