Высокопроизводительные вычисления на кластерах. Беликов Д.А - 153 стр.

UptoLike

153
Матрица будет распределена по всем процессам в коммуникато-
ре comm, где m1 указывает число локальных строк ожет быть
вычислено автоматически, если указано число m c помощью дирек-
тивы PETSC_DECIDE); n1 это значение, совпадающее с локаль-
ным размером, используемым при создании вектора x. Оно может
быть автоматически вычислено с помощью PETSC_DECIDE, если
задано число n. d_nz число ненулевых элементов в строке диаго-
нальной части локальной подматрицы; d_nnz массив, содержащий
количество ненулевых элементов в строках диагональной части ло-
кальной подматрицы; o_nz число ненулевых элементов в строке
недиагональной части локальной подматрицы; o_nnz массив, со-
держащий количество ненулевых элементов в строках недиагональ-
ной части локальной подматрицы. Пользователю необходимо уста-
новить аргументы d_nz=0, o_nz=0, d_nnz=PETSC_NULL и
o_nnz=PETSC_NULL для PETSc, чтобы динамически разместить
элементы в памяти.
Номер в коммуникаторе MPI определяет абсолютное упорядочи-
вание блоков. Это означает, что процесс с номером 0 в коммуника-
торе, определенном для MatCreateMPIAIJ, содержит верхний блок
строк матрицы; i-й процесс в коммуникаторе содержит i-й блок
строк матрицы.
Наиболее просто задать матрицу можно с использованием ко-
мандной строки:
Call MatCreate(comm, А, ierr)
Call MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, m, n,
$ ierr)
Call MatSetFromOptions(A, ierr)
Соответственно программа в таком случае должна быть запуще-
на с указанием типа матрицы опцией -mat_type seqaij (последова-
тельная программа) или -mat_type mpiaij (параллельная программа).
Или достаточно просто указать тип матрицы вызовом процедуры
Call MatSetType(A, MATMPIAIJ, ierr)для параллельной мат-
рицы и
Call MatSetType(A, MATMPISEQ, ierr) – для последователь-
ной.
Значения матрицы затем могут быть установлены процедурой
SUBROUTINE MatSetValues(A, m, im, n, in, values,
INSERT_VALUES, ierr)