Использование форматов хранения разреженных матриц…
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]). Существенно, что можно вычислять и использовать порт-
рет матрицы коэффициентов до этапа ее сборки, исключая этап инициализации
матрицы коэффициентов в полной форме. Последнее на порядок снижает по-
требность выделения памяти при решении задач МКЭ, и тем в большей степени,
чем больше размерность сетки.