А.И. Богоявленский
8
ISSN 1812-3368. Вестник МГТУ им. Н.Э. Баумана. Сер. Естественные науки. 2017. № 2
Листинг рекурсивного алгоритма добавления строкового индекса ненулево-
го коэффициента в связный список в псевдокоде выглядит следующим образом:
insert(
L, i
)
1.
if
head[L] = NIL
then
2.
head[L] = i
3.
return
4.
else if
head[L] = i
then
5.
return
6.
else if
i < head[L]
then
7.
tmp = L
8.
head[L] = i
9.
tail[L] = tmp
10.
else
11.
insert(
tail[L],i
)
Здесь
L
— связный список;
i
— добавляемый строковый индекс ненулевого ко-
эффициента;
head[L]
— указатель на текущий элемент списка;
tail[L]
— указа-
тель на последующие элементы списка;
tmp
— вспомогательный указатель для
выполнения операции вставки.
На основе приведенного алгоритма строится алгоритм добавления во вспо-
могательную структуру номеров узлов одного конечного элемента сетки:
add_elem(S
, elem
)
1.
for
i = 1:Nn
do
2.
for
j = 1:Nn
do
3.
col = elem[i]
4.
row_ind = elem[j]
5.
insert(
S[col],row_ind
)
где
elem
— перечень узлов конечного элемента;
Nn
— число узлов, образующих
конечный элемент;
S
— формируемая вспомогательная структура, массив связ-
ных списков, каждый список соответствует столбцу матрицы в полной форме;
col,
row_ind
— индексы столбца и строки ненулевого коэффициента текущей
пары узлов.
Для формирования вспомогательной структуры приведенную выше под-
программу применяют ко всей таблице сеточной связности:
support_create(S
, elems
)
1.
for
e = 1:Nelem
do
2.
add_elem(
S, elems[e]
)
Здесь
elems
— таблица сеточной связности;
Nelem
— число элементов сетки.
После формирования вспомогательной структуры она используется, прежде
всего, для определения полного числа ненулевых коэффициентов СЛАУ МКЭ:
get_total_nonzeros(S)
1.
total = 0
2.
for
j = 1:N
do