Мне интересно, как на самом деле эффективно реализуются граничные условия Дирихле в глобальных разреженных матрицах конечных элементов. Например, допустим, что наша глобальная конечно-элементная матрица была:
Затем применить условие Дирихле к первому узлу () мы обнуляем первый ряд, ставим 1 на и вычтите первый столбец с правой стороны. Например, наша система станет:
Это все хорошо в теории, но если наша K-матрица хранится в формате сжатых строк (CRS), то перемещение столбцов в правую часть становится дорогим для больших систем (многие узлы являются дирихлетами). Альтернативой было бы не перемещать столбцы, соответствующие условию Дирихле, в правую часть, то есть наша система стала бы:
Это, однако, имеет существенный недостаток в том, что система больше не является симметричной, и поэтому мы больше не можем использовать предобусловленный сопряженный градиент (или другие симметричные решатели). Одним интересным решением, с которым я столкнулся, является «Метод больших чисел», который я нашел в книге Геннадий Никишкова «Программирование конечных элементов на Java». Этот метод использует тот факт, что двойная точность содержит только около 16 цифр точности. Вместо того, чтобы поставить 1 вПоложение мы ставим большое количество. Например, наша система становится:
Преимущества этого метода в том, что он поддерживает симметрию матрицы, а также очень эффективен для разреженных форматов хранения. Мои вопросы тогда следующие:
Как граничные условия Дирихле обычно реализуются в кодах конечных элементов для тепла / жидкости? Люди обычно используют метод больших чисел или делают что-то еще? Есть ли недостаток в методе больших чисел, который кто-то может увидеть? Я предполагаю, что, вероятно, существует какой-то стандартный эффективный метод, используемый в большинстве коммерческих и некоммерческих кодов, который решает эту проблему (очевидно, я не ожидаю, что люди будут знать все внутренние механизмы каждого коммерческого решателя конечных элементов, но эта проблема кажется базовой / фундаментальной Достаточно того, что кто-то, вероятно, работал над такими проектами и мог обеспечить руководство).