Автоматизация подготовки входных данных и вызова целевых программ комплекса PARALG решения систем линейных алгебраических уравнений с невырожденными матрицами общего вида
Эта служебная подпрограмма организует за пользователя правильный вызов целевых программ решения систем линейных алгебраических уравнений на распределенной памяти с невырожденными матрицами общего вида. Она считывает из внешних файлов исходную матрицу системы и вектор (матрицу) правой части, распределяет их части(блоки) по параллельным процессам в соответствии с используемыми алгоритмами и формирует правильный список фактических параметров для выбранной пользователем целевой программы. После чего осуществляет вызов этой программы. Полученный в результате счета вектор решения задачи записывается во внешний файл.
Литература:
http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/
http://www.netlib.org/scalapack/slug/index.html
http://num_anal.srcc.msu.ru/par_prog/
CALL CAL_GESV(NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, INFILEA, INFILEB, OUTFILE)
Параметры
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDGESV, PDGESV1, PDGESV2, PDGESV3); (входной параметр, тип символьный); |
TRANS - | переменная символьного типа, означающая, следует ли решать систему с транспонированной матрицей и принимающая значения 'N' или 'T' (входной параметр); |
N - | порядок исходной матрицы системы (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_GESV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_GESV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE PRECISION); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_GESV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_GESV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
INFILEA - | имя файла, содержащего исходную матрицу системы (A) (входной параметр, тип символьный); |
INFILEB - | имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PDGESV -
PDGESV1 PDGESV2 PDGESV3 |
решение системы A X = B с матрицей общего вида методом Гаусса
с выбором ведущего элемента по столбцу для вещественных данных
двойной точности или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных данных двойной точности или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных данных двойной точности и оценка обратного числа обусловленности, или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных данных двойной точности с итерационным уточнением решения и оценкой границ ошибок соответственно |
PDGETRF - PZGETRF | LU - разложение матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу |
PDGETRS - PZGETRS | Решение системы AX = B, AT X = B или AH X = B на основе LU - разложения, полученного подпрограммой PDGETRF(PZGETRF) |
PDGECON - PZGECON | Оценка обратного числа обусловленности матрицы общего вида |
PDGERFS - PZGERFS | Выполнение итерационного уточнения решения системы A X = B, AT X = B или AH X = B, полученного подпрограммой PDGETRS (PZGETRS), и оценка границ ошибок полученного решения |
Замечания по использованию
1. | Используются подпрограммы BLACS_EXIT, BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO BLACS_GRIDINIT, BLACS_PINFO, BLACS_SETUP ( из пакета BLACS в составе MKL-библиотеки), DESCINIT, ICEIL, NUMROC, PDLAPRNT ( из пакета ScaLAPACK(TOOLS) в составе MKL-библиотеки), PDLAREAD, PDLAWRITE |
Необходимо решить систему уравнений с помощью подпрограммы PDGESV.
Матрица системы - общего вида порядка 9.
Пусть матрица А системы имеет вид:
19 | 3 | 1 | 12 | 1 | 16 | 1 | 3 | 11 | |
-19 | 3 | 1 | 12 | 1 | 16 | 1 | 3 | 11 | |
-19 | -3 | 1 | 12 | 1 | 16 | 1 | 3 | 11 | |
-19 | -3 | -1 | 12 | 1 | 16 | 1 | 3 | 11 | |
-19 | -3 | -1 | -12 | 1 | 16 | 1 | 3 | 11 | |
-19 | -3 | -1 | -12 | -1 | 16 | 1 | 3 | 11 | |
-19 | -3 | -1 | -12 | -1 | -16 | 1 | 3 | 11 | |
-19 | 3 | -1 | -12 | -1 | -16 | -1 | 3 | 11 | |
-19 | -3 | -1 | -12 | -1 | -16 | -1 | -3 | 11 |
Вектор правых частей В имеет вид:
0 0 1 0 0 0 0 0 0 |
При предварительном обращении к подпрограмме PAR_GESV были получены следующие
значения необходимых параметров.
Решетка процессов: NPROW = 2, NPCOL = 2;
NB = 4 (т.е. матрица разбивается на блоки размера 4 на 4),
MMIN = 41.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_gesv.zip)
PROGRAM TCL_GESV include 'mpif.h' INTEGER N, NPROW, NPCOL, NB, MEMSIZE PARAMETER ( N=9, NB=4, MEMSIZE=41) * DOUBLE PRECISION AMEM( MEMSIZE ) CHARACTER*(*) NAME, TRANS CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*) PARAMETER ( INFILEA = 'gesvA_9.dat', $ INFILEB = 'gesvB_9.dat', $ OUTFILE = 'gesv_9.res') * PARAMETER ( TRANS = 'N', $ NAME = 'PDGESV') EXTERNAL CAL_GESV * NPROW = 2 NPCOL = 2 * CALL CAL_GESV(NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, $ INFILEA, INFILEB, OUTFILE) * STOP END Результаты: Решение системы (в файле OUTFILE) X = ( 0.D0, - 0.16666666666667D0, 0.5D0, 0.D0, 0.D0, 0.D0, - 0.5D0, 0.16666666666667D0, 0.D0 )