Какие новые структуры данных используются в адаптивном FEM?

9

Многие адаптивные библиотеки FEM используют более сложные структуры данных ячеек для обработки добавления / удаления узлов, ребер, треугольников, тетраэдров и т. Д. Например, библиотека p4est использует структуры данных октодерева для адаптивного уточнения сетки; Вы не часто находите октреи, используемые для вычислений на статической сетке.

Какие изменения на стороне линейной алгебры для адаптивного FEM?

Самый грубый способ, который я могу придумать, - это полностью перестроить все системные матрицы всякий раз, когда сетка очищается или огрубляется. Если адаптация сетки является достаточно редкой операцией, то затраты на это в конечном итоге амортизируются в течение остальной части вычисления. При таком подходе можно легко использовать существующее программное обеспечение разреженной линейной алгебры (PETSc, Trilinos и т. Д.).

Является ли этот тупой метод наиболее распространенным, или есть библиотеки, которым удается повторно использовать или модифицировать старую матрицу во время уточнения? В конце концов, большая часть сетки и соответствующие матрицы остаются неизменными во время адаптации сетки.

Даниэль Шаперо
источник

Ответы:

6

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

Джед браун
источник
3

Как уже сказал Джед, повторное использование компонентов линейной алгебры, таких как матрицы и векторы, обычно не делается. В этом также нет необходимости: установка этих компонентов сравнительно очень дешева по сравнению со стоимостью решения линейных систем.

Если вы ищете вещи, которые меняются при переходе от статических к адаптивно улучшенным сеткам, то самым большим препятствием является работа с висящими узлами. В deal.II это обрабатывается классом ConstraintMatrix , который занимает несколько тысяч строк кода. Вы можете найти описание того, чем занимается этот класс, в статье, написанной мной и Оливером Кейзер-Херольдом (ссылка на которую опубликована на моей странице публикаций ). Никакой другой компонент (кроме обработки сетки, конечно) не требует такой большой адаптации при переходе от фиксированных к адаптивным сеткам.

Вольфганг Бангерт
источник