Как уже описывалось в разделе документации "Схема размещения в локальной памяти и блочно - циклическое отображение плотных матриц", перед обращением к подпрограммам для решения систем линейных алгебраических уравнений исходная глобальная матрица системы уравнений A, а также исходный глобальный вектор (матрица) правых частей B должны быть распределены по решетке параллельных процессов блочным или блочно - циклическим образом.
После того как пользователь проделал работу по распределению матриц, он может обратиться к одной из подпрограмм комплекса для выполнения необходимых операций над этими матрицами.
Одна из особенностей подпрограмм комплекса состоит в том, что они допускают возможность обработки не только всей распределенной матрицы, но и некоторой ее части, называемой подматрицей (т.е. решение линейной системы с матрицей, являющейся подматрицей матрицы A). Для этого в подпрограммах введены дополнительные параметры (см. ниже).
Для наглядности представим на рисунке исходную глобальную матрицу A и выделенную пользователем подматрицу sub (A), которая предназначена для обработки подпрограммой комплекса.
В документации к программному комплексу (в том числе и в описаниях подпрограмм) указанная на рисунке подматрица распределенной матрицы A ( M_A, N_A) обозначается либо как sub (A), либо как A ( IA : IA + M - 1, JA : JA + N - 1), т.е. с явным указанием положения этой подматрицы внутри исходной матрицы и ее размеров.
Для работы с подматрицами исходных матриц необходимо задать их характеристики в списках параметров подпрограмм комплекса.
Для случая плотных матриц таких параметров шесть:
Имена индексов строки и столбца глобального массива имеют форму I<имя_массива> и J<имя_массива> соответственно. Дескриптор массива имеет имя в форме DESC<имя_массива>. Длина дескрипторного массива определяется переменной DLEN_ и изменяется в зависимости от типа дескриптора DTYPE_ (подробное описание дескрипторов исходных распределенных матриц см. в разделе документации "Дескрипторы глобальных массивов").
Правила описания параметров плотных матриц иллюстрируются ниже.
Для лучшей читабельности исходного текста подпрограмм (см. раздел документации "Дескрипторы глобальных массивов") элементы дескриптора обозначены символическими именами. Например, М_ означает число строк некоторого глобального массива (в частности, М_А обозначает число строк глобальной матрицы А).
M - |
число строк матрицы А ( IA : IA + M - 1,
JA : JA + N - 1), которая должна быть обработана; M ≥ 0 и IA + M - 1 ≤ M_A (глобальный входной параметр, тип целый); |
N - |
число столбцов матрицы А ( IA : IA + M - 1,
JA : JA + N - 1), которая должна быть обработана; N ≥ 0 и JA + N - 1 ≤ N_A (глобальный входной параметр, тип целый); |
NRHS - |
число векторов правых частей, т.е. число столбцов матрицы B ( IB : IB + N - 1, JB : JB + NRHS - 1); NRHS ≥ 0 (глобальный входной параметр, тип целый); |
A - |
указатель на локальную память для вещественного массива с локальной размерностью ( LLD_A, LOCc ( JA + N - 1)) (локальный входной и локальный выходной параметр, тип вещественный); |
IA - |
номер строки в глобальной массиве А, указывающий на первую строку подматрицы A ( IA : IA + M - 1, JA : JA + N - 1) (глобальный входной параметр, тип целый); |
JA - |
номер столбца в глобальном массиве А, указывающий на первый столбец подматрицы A ( IA : IA + M - 1, JA : JA + N - 1) (глобальный входной параметр, тип целый); |
DESCA - | дескриптор для глобальной матрицы А (т.е. одномерный дескрипторный массив длиной DLEN_ ); см. в разделе документации "Дескрипторы глобальных массивов" (глобальный и локальный входной параметр, тип целый); |
B - |
указатель на локальную память для вещественного массива с локальной размерностью ( LLD_B, LOCc ( JB + NRHS - 1)) (локальный входной и локальный выходной параметр, тип вещественный); |
IB - |
номер строки в глобальном массиве В, указывающий на первую строку подмассива B ( IB : IB + N - 1, JB : JB + NRHS - 1) (глобальный входной параметр, тип целый); |
JB - |
номер столбца в глобальном массиве В, указывающий на первый столбец подмассива B ( IB : IB + N - 1, JB : JB + NRHS - 1) (глобальный входной параметр, тип целый); |
DESCB - | дескриптор для глобальной матрицы (вектора) B (т.е. одномерный дескрипторный массив длиной DLEN_ ); см. в разделе документации "Дескрипторы глобальных массивов" (глобальный и локальный входной параметр, тип целый). |
Описание каждого параметра содержит следующую информацию:
В отличие от плотных матриц ленточные матрицы распределяются по одномерной решетке процессов (1 * P) блочно - столбцовым способом. В подпрограммы обработки ленточных матриц можно также передать не всю исходную глобальную матрицу, а ее подматрицу sub (A), которая должна быть квадратной (N * N). При этом предполагается, что первый элемент sub (A) имеет в исходной матрице координаты (1, JA). Таким образом, параметры, передаваемые в подпрограммы обработки ленточных матриц, имеют следующий вид.
Для подматрицы sub (A):
Для подматрицы sub (B):
Трехдиагональные матрицы, как и ленточные, распределяются по одномерной решетке процессов (1 * P). Локальные части таких матриц представляются не в виде единого двумерного массива, а в виде трех (для несимметричных матриц) или двух (для симметричных матриц) векторов, которые являются локальными частями трех (или двух) глобальных векторов, содержащих соответственно элементы трех (или двух) диагоналей исходной трехдиагональной матрицы. Таким образом, параметры, передаваемые в подпрограммы обработки трехдиагональных матриц, имеют следующий вид.
Для подматрицы sub (A):
Для подматрицы sub (B) параметры аналогичны параметрам, указанным для sub (B) в случае ленточных матриц (см. выше).
Правила описания параметров ленточных и трехдиагональных матриц аналогичны приведенным выше правилам описания параметров плотных матриц.