ВУЗ:
Рубрика:
154
или
SUBROUTINE MatSetValues(A, m, im, n, in, values,
$ ADD_VALUES, ierr)
Здесь
m – число строк, im – их глобальные индексы;
n – число столбцов, in – их глобальные индексы.
В процедуре MatSetValues используется соглашение стандарта
языка С, в котором строки и столбцы нумеруются от нуля. Массив
values является логически двумерным и содержит вставляемые зна-
чения. По умолчанию эти значения расположены по строкам.
Хотя можно вставлять значения в матрицу вне зависимости от
того, какой процессор в настоящий момент содержит их, все же ре-
комендуется генерировать большую часть элементов на том процес-
соре, где эти данные будут храниться. Для этого используется про-
цедура
SUBROUTINE MatGetOwnershipRange(A, istart, iend, ierr)
Mat A
INTEGER istart, iend, ierr
Аргумент istart указывает на первую строку, принадлежащую
локальному процессу, а аргумент iend-1 показывает на последнюю
строку, принадлежащую локальному процессу.
После того как все элементы помещены в матрицу, она должна
быть обработана парой процедур:
SUBROUTINE MatAssemblyBegin(A,
$ MAT_FINAL_ASSEMBLY, ierr)
Mat A
INTEGER ierr
SUBROUTINEatAssemblyEnd(A,
$ MAT_FINAL_ASSEMBLY,ierr)
Mat A
INTEGER ierr
Если матрица имеет разреженную структуру, то после выполне-
ния процедур сборки матрицы сжимаются и могут быть использо-
ваны для матрично-векторного умножения или других матричных
операций. Ввод новых значений в матрицу после этого может по-
требовать перераспределения памяти и дополнительных межпро-
цессорных пересылок. Поэтому не следует устанавливать элементы
матрицы после обращения к конечным процедурам сборки.
Страницы
- « первая
- ‹ предыдущая
- …
- 152
- 153
- 154
- 155
- 156
- …
- следующая ›
- последняя »
