Пам'ять, використовувана для зберігання розріджених матриць, складається з двох частин: основної пам'яті, у якій утримуються числові значення елементів матриць, і додаткової пам'яті, де зберігаються вказівники, індекси і інша інформація, необхідна для формування структури матриць і яка забезпечує доступ до числових значень їх елементів при виконанні процедур формування і розв’язку СЛАР, тобто так звані списки зв'язності. Способи зберігання і використання даних, що зберігаються в основній і додатковій пам'яті, досить різноманітні і визначаються, головним чином, обраним методом розв’язку СЛАР. Для структурної побудови інформації, що зберігається в додатковій пам'яті – списків зв'язності – широко використовується теорія графів.
Особливо складні алгоритми роботи з розрідженими матрицями виникають при використанні прямих методів розв’язку. У першу чергу це пов'язане з тим, що при розкладанні розрідженої матриці A=LLT вона звичайно зазнає деякого заповнення, тобто нижній трикутний множник L має ненульові елементи в тих позиціях, де у вихідній матриці A стояли нулі (не виключено, що при цьому можуть з'явитися і нові нульові елементи). Крім того, прямі методи вимагають спеціальної нумерації вузлів кінцево-елементної сітки, яка забезпечує мінімальну ширину стрічки. Подібних проблем при використанні ітераційних методів не виникає [10,11].
У рамках даної роботи стосовно ітераційних методів розв’язку СЛАР викладені 2 алгоритми зберігання і використання розріджених матриць, які відрізняються простотою реалізації і високою обчислювальною ефективністю.
Матриця жорсткості, що виходить при застосуванні МСЕ, має симетричну структуру, що дозволяє в загальному випадку зберігати тільки верхню трикутну частину матриці. Однак для задач із великою кількістю невідомих це також приводить до проблеми нестачі пам'яті. Викладений у даній роботі метод дозволяє зберігати тільки ненульові члени матриці жорсткості. Суть його полягає в наступному.
Спочатку, з метою виявлення зв'язків кожного вузла з іншими, проводиться аналіз структури дискретизації області на КЕ. Наприклад, для КЕ-сітки, зображеної на рис. 2.1, відповідна структура зв'язків буде мати вигляд, зображений у табл. 2.1.
Таблиця 2.1 – Структура зв'язків КЕ-сітки
№ вузла | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Зв'язки | 1,2,5,6,7 | 1,2,3,6 | 2,3,4,6 | 3,4,5,6,7 | 1,4,5,7 | 1,2,3,4,6,7 | 1,4,5,6,7 |
Тоді для зберігання матриці жорсткості необхідно построчно запам'ятовувати інформацію про коефіцієнти, відповідні до вузлів, з якими зв'язаний даний вузол. На рис. 2.2 наведені матриця жорсткості і її компактний вигляд для сітки, зображеної на рис. 2.1 [9].
Текст програми, що реалізує викладений алгоритм аналізу структури КЕ-розбивки тіла, наведений у додатку А [12,13].
Нехай aij – елемент первісної квадратної матриці розмірністю n×n, а
– її компактний вигляд. Тоді для зворотнього перетворення будуть слушні наступні співвідношення:1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
1 | a11 | a12 | a13 | 0 | a15 | a16 | 0 | 0 | 0 |
2 | a21 | a22 | a23 | 0 | a25 | a26 | 0 | 0 | 0 |
3 | a31 | a32 | a33 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | a44 | a45 | a46 | a47 | a48 | a49 |
5 | a51 | a52 | 0 | a54 | a55 | a56 | 0 | 0 | a59 |
6 | a61 | a62 | 0 | a64 | a65 | a66 | 0 | 0 | a69 |
7 | 0 | 0 | 0 | a74 | 0 | 0 | a77 | a78 | a79 |
8 | 0 | 0 | 0 | a84 | 0 | 0 | a87 | a88 | a89 |
9 | 0 | 0 | 0 | a94 | a95 | a96 | a97 | a98 | a99 |
Матриця A зберігається у вигляді двох векторів (рис. 2.4):
– члени головної діагоналі, – ненульові елементи, розташовані над головною діагоналлю. Для формування і використання елементів вектора створюються додаткові чотири вектори, що містять інформацію про зв'язки вузлів кінцево-елементної моделі.1 | a11 | 1 | a15 |
2 | a22 | 2 | a16 |
3 | a33 | 3 | a12 |
4 | a44 | 4 | a13 |
5 | a55 | 5 | a25 |
6 | a66 | 6 | a26 |
7 | a77 | 7 | a23 |
8 | a88 | 8 | a47 |
9 | a99 | 9 | a48 |
10 | a49 | ||
11 | a46 | ||
12 | a45 | ||
13 | a59 | ||
14 | a56 | ||
15 | a69 | ||
16 | a78 | ||
17 | a79 | ||
18 | a89 |
Рисунок 2.4 – Структура векторного зберігання матриці A
Розглянемо i-е рівняння СЛАР
. У загальному випадку воно має вигляд: