ВУЗ:
Рубрика:
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)
Страницы
- « первая
- ‹ предыдущая
- …
- 151
- 152
- 153
- 154
- 155
- …
- следующая ›
- последняя »
