Previous Page  5 / 8 Next Page
Information
Show Menu
Previous Page 5 / 8 Next Page
Page Background

А.И. Богоявленский

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