Мені цікаво, наскільки фактично граничні умови Діріхле в глобальних малих матрицях кінцевих елементів реалізуються ефективно. Наприклад, скажемо, що наша глобальна кінцева матриця елементів:
Потім застосувати умову Діріхле на перший вузол () ми би нуль першого ряду, поставив 1 at , і відніміть перший стовпець з правого боку. Наприклад, наша система стала б:
Це теоретично все добре і добре, але якщо наша матриця K зберігається у форматі стислих рядків (CRS), то переміщення стовпців у праву частину стає дорогим для великих систем (багато вузлів є диріхлетом). Альтернативою було б не переміщувати стовпці, що відповідають умові Діріхле, в праву частину, тобто наша система стала б:
Це, однак, суттєво відзначається тим, що система вже не симетрична, і тому ми більше не можемо використовувати попередньо обумовлений градієнт кон'югату (або інші симетричні розв'язувачі). Одне цікаве рішення, на яке я натрапив, - це «Метод великих чисел», який я знайшов у книзі «Програмування кінцевих елементів на Яві» Геннадія Нікішкова. Цей метод використовує той факт, що подвійна точність містить лише близько 16 цифр точності. Замість того, щоб ставити 1 впозицію ми розміщуємо велику кількість. Наприклад, наша система стає:
Переваги цього методу полягають у тому, що він підтримує симетричність матриці, при цьому є дуже ефективним для розріджених форматів зберігання. Мої запитання тоді такі:
Як зазвичай граничні умови Діріхле реалізуються в кінцевих кодах елементів для тепла / рідин? Люди зазвичай використовують метод великої кількості чи роблять щось інше? Чи є недолік методу великих чисел, який хтось може побачити? Я припускаю, що, мабуть, існує якийсь стандартний ефективний метод, застосовуваний у більшості комерційних та некомерційних кодів, який вирішує цю проблему (очевидно, я не сподіваюся, що люди будуть знати всі внутрішні дії кожного комерційного вирішеного кінцевого елемента, але ця проблема здається базовою / фундаментальною достатньо, щоб хтось, ймовірно, працював над такими проектами і міг дати керівництво).