|
|
Хранение и использование разреженных матриц в конечно-элементной технологии
# 10, октябрь 2005 И. В. Станкевич, канд. техн. наук, Научно-исследовательский институт энергетического машиностроения МГТУ им. Н. Э. Баумана
Хранение и использование разреженных матриц в конечно-элементной технологии
Рассмотрено хранение и использование разреженных матриц при итерационном решении больших систем линейных алгебраических уравнений, возникающих в результате применения конечно-элементной технологии как составной части комплексной автоматизации сквозного цикла: проектирование — конструирование — изготовление.
В настоящее время в связи с бурным развитием вычислительных средств широкое распространение получили информационные технологии, имеющие разнообразную теоретическую и прикладную направленность. Среди них особое место занимают системы автоматизированного проектирования (САПР), неотъемлемую часть которых составляют подсистемы математического моделирования различных физических процессов. Одним из самых перспективных направлений развития математического моделирования как составной части комплексной автоматизации сквозного цикла: проектирование — конструирование — изготовление, является широкое использование численных методов, таких как метод конечных элементов (МКЭ), метод граничных элементов (МГЭ) и некоторых других. В процессе построения дискретных аналогов краевых задач указанными методами возникают большие системы линейных, а в общем случае нелинейных, алгебраических уравнений. Нелинейные системы уравнений решаются в два этапа: на первом этапе они линеаризуются, а затем полученная система линейных уравнений решается с помощью какого-либо метода линейной алгебры. Если сходимость не достигнута, то процесс повторяется. Таким образом, каждый раз решается система линейных алгебраических уравнений (СЛАУ):
где Матрицы A СЛАУ (1), как правило, симметричны с выраженной разреженной структурой. При соответствующей нумерации узлов конечно-элементных моделей (КЭМ) эти матрицы могут иметь ленточную структуру. В связи с этим при использовании конечно-элементной технологии возникает проблема разработки эффективных алгоритмов формирования, хранения и использования разреженных матриц. Вопросы организации, хранения и использования разреженных матриц рассмотрены во многих работах, например [1—6]. Память, используемая для хранения разреженных матриц, состоит из двух частей: основной памяти, в которой содержатся числовые значения элементов матриц, и дополнительной памяти, где хранятся указатели, индексы и другая информация, необходимая для формирования структуры матриц и обеспечивающая доступ к числовым значениям их элементов при выполнении процедур формирования и решении СЛАУ, т. е. так называемые списки связности. Способы хранения и использования данных, хранящихся в основной и дополнительной памяти, весьма разнообразны и определяются, главным образом, выбранным методом решения СЛАУ. Для структурного построения информации, хранящейся в дополнительной памяти — списков связности — широко используется теория графов [2, 4]. Особенно сложные алгоритмы работы с разреженными матрицами возникают при использовании прямых методов решения, например типа фронтальных [1—4]. В первую очередь это связано с тем, что при разложении разреженной матрицы A = LLT она обычно претерпевает некоторое заполнение, т. е. нижний треугольный множитель L имеет ненулевые элементы в тех позициях, где в исходной матрице A стояли нули (не исключено, что при этом могут появиться и новые нулевые элементы). Кроме того, прямые методы требуют специальной нумерации узлов конечно-элементной сетки, которая обеспечивает минимальную ширину ленты. Подобных проблем при использовании итерационных методов не возникает. В рамках данной работы применительно к итерационным методам решения СЛАУ (1) был разработан алгоритм хранения и использования разреженных матриц, отличающийся простотой реализации и высокой вычислительной эффективностью. При реализации итерационного решения системы уравнений (1) весьма частой
является ситуация, когда необходимо выполнить умножение матрицы системы A на какой-либо вектор, например, на вектор узловых
неизвестных
Рис. 1. Конечно-элементная модель
Рассмотрим в качестве примера конечно-элементную модель, представленную
на рис. 1. С каждым узлом сетки связано некоторое число узлов, которые могут быть
разбиты на два множества: первое множество составляют узлы, номера которых
меньше i — номера рассматриваемого узла, а
второе множество — узлы, номера которых больше i.
На рис. 2 показана структура матрицы СЛАУ, соответствующая узловым связям
конечно-элементной модели, представленной на рис. 1. Матрица A хранится в виде двух векторов (рис. 3):
Рис. 2. Структура матрицы A системы линейных алгебраических уравнений
Рассмотрим i-е уравнение СЛАУ (1). В общем случае оно имеет вид
где aij — элементы матрицы A;
fi — элемент
вектора правой части В уравнении (2) присутствуют суммы произведений двух типов. Первая сумма
состоит из произведений элементов aij - матрицы A и элементов
дивектора неизвестных
Рис.
З. Структура векторного хранения матрицы A:
Совершенно аналогично строятся еще два вектора В тех редких случаях, когда тот или иной рассматриваемый узел
конечно-элементной модели не имеет связи с узлами, номера которых меньше или
больше номера данного узла, тогда в соответствующие ячейки векторов
Рис. 4. Структура векторов-указателей
Структура вектора Теперь рассмотрим построение сумм произведений, входящих в уравнение (2). Рассмотрение начнем со второй суммы, а именно:
При фиксированном индексе i определяются
номера первой и последней ячеек вектора
Построение первой суммы из уравнения (2)
алгоритмически
выполняется сложнее. При фиксированном номере i
определяются номера первой n и последней m (n < m) ячеек вектора Рассмотрим пример. Построим сумму (5) для узла 5 конечно-элементной
модели, показанной на рис. 1. С этим узлом, как уже отмечалось выше, связаны
узлы 4, 2 и 1, Номера этих узлов хранятся в векторе
Окончательно с учетом (4) вся сумма S5 имеет следующий вид:
Из
представленного выше алгоритма видно, что вычислительные затраты на построение
сумм произведений
Сравнение данного алгоритма с алгоритмами, рассмотренными в работах
[1—6], показывает следующее. Для реализации предложенного алгоритма требуется
больше оперативной памяти, поскольку для координирования ненулевых элементов
используются не два массива (векторы номеров строк и столбцов), а четыре.
Дополнительные векторы * * * В заключение отметим, что изложенный выше алгоритм формирования сумм в уравнении (2) может быть полностью применен и для построения других аналогичных матричных произведений, необходимых для реализации итерационных процессов.
Список литературы 1. Тьюарсон Р. Разреженные матрицы / Пер. с англ. М.: Мир, 1977. 191 с. 2. Брамеллер А., Аллан Р., Хэмэм Я. Слабозаполненные матрицы / Пер. с англ. М.: Энергия, 1979. 192 с. 3. Эстербю О., Златев 3. Прямые методы для разреженных матриц / Пер. с англ. М.: Мир, 1987. 120 с. 4. Писсанецки С. Технология разреженных матриц / Пер. с англ. М.: Мир, 1988. 410 с. 5. Сабоннадьер Ж.-К., Кулон Ж.-Л. Метод конечных элементов и САПР / Пер. с англ. М.: Мир, 1989. 192 с. 6. Станкевич И. В. Численные методы линейной алгебры: Учеб. пособие. М.: МГТУ им. Н. Э. Баумана, 1991. 44 с. 7. Самарский А. А., Николаев Е. С. Методы решения сеточных уравнений. М.: Наука, 1978. 592 с. 8. Хсйгеман Л., Янг Д. Прикладные итерационные методы / Пер. с англ. М.: Мир, 1986. 448 с.
МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ, № 12, 1998
Ключевые слова: Метод конечных элементов, разреженные матрицы, СЛАУ, итерационные методы, векторы указателей, умножение матриц.
Публикации с ключевыми словами: Метод конечных элементов, разреженные матрицы, СЛАУ, итерационные методы, векторы указателей, умножение матриц Публикации со словами: Метод конечных элементов, разреженные матрицы, СЛАУ, итерационные методы, векторы указателей, умножение матриц Смотри так же: Тематические рубрики: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||