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

Использование форматов хранения разреженных матриц…

ISSN 1812-3368. Вестник МГТУ им. Н.Э. Баумана. Сер. Естественные науки. 2017. № 2

9

3.

total = total + length[S[j]]

4.

return

total

Здесь

total

— возвращаемая переменная-счетчик, полное число ненулевых ко-

эффициентов;

length[]

— возвращает полное число ненулевых коэффициентов в

данном столбце.

Формат

CCS

инициализируется заданием для ее массивов размерностей

vals(total)

row_inds(total)

col_ptrs(N)

после чего заполняются массивы

row_inds()

и

col_ptr()

:

insert_row_inds(row_inds, S)

1.

k = 0

2.

for

j = 1:N

do

3.

for

i = 1:length[S[j]]

do

4.

row_ind = S[j][i]

5.

k = k + 1

6.

row_inds[k] = row_ind

insert_col_ptr(col_ptr, S)

1.

col_ptr[1] = length(S[j])

2.

for

j = 2:N

do

3.

n

rows = length(S[j])

4.

col_ptr[j] = col_ptr[j-1]+nrows

Из сохраненной во вспомогательной структуре информации для любой па-

ры индексов ненулевых элементов (

i, j

) вычисляют индекс

k

его размещения в

массиве

vals()

:

map_i_j_to_k(

S, col_ptrs, i, j

)

1.

k = col_ptrs[j]

2.

for

r = 1:length[S[j]]

do

3.

if

S[j][r] ≠ i

then

4.

k = k + 1

5.

return

k

Представленные выше вспомогательная структура и алгоритмы позволяют

собрать матрицу

K

непосредственно в формате

CCS

.

Заключение.

Изложенный подход к формированию матрицы коэффициен-

тов СЛАУ МКЭ рассмотрен на примере одного из форматов эффективного хра-

нения разреженных матриц —

CCS

. Возможно применение других форматов

(координатный (

coordinate

,

COO

), сжатый диагональный (

compressed diagonal

,

CDS

) или

skyline

[6]). Существенно, что можно вычислять и использовать порт-

рет матрицы коэффициентов до этапа ее сборки, исключая этап инициализации

матрицы коэффициентов в полной форме. Последнее на порядок снижает по-

требность выделения памяти при решении задач МКЭ, и тем в большей степени,

чем больше размерность сетки.