Автоматизация подготовки входных данных и вызова целевых программ комплекса 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 CAZ_BDSV(NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, BWL, BWU, INFILEA, INFILEB, OUTFILE)
Параметры
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PZDBSV, PZGBSV, PZPBSV); (входной параметр, тип символьный); |
UPLO - | переменная символьного типа, означающая, сохраняется нижняя или верхняя треугольная матрица и принимающая значения 'U'(верхняя) или 'L'(нижняя) (входной параметр); |
N - | порядок исходной матрицы системы (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_BDSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_BDSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE COMPLEX); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAZ_BDSV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAZ_BDSV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
BWL - | целая переменная, означающая число поддиагоналей исходной ленточной матрицы (входной параметр); |
BWU - | целая переменная, означающая число наддиагоналей исходной ленточной матрицы (входной параметр); |
INFILEA - | имя файла, содержащего исходную матрицу системы (A) (входной параметр, тип символьный); |
INFILEB - | имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PZDBSV - PZGBSV PZPBSV |
решение системы с ленточной комплексной матрицей общего вида методом Гаусса
без выбора ведущего элемента или решение системы с ленточной комплексной матрицей общего вида методом Гаусса с выбором ведущего элемента, или решение системы с эрмитовой положительно определенной ленточной матрицей методом Холецкого соответственно |
PZDBTRF - | LU - разложение ленточной комплексной матрицы общего вида методом Гаусса без выбора ведущего элемента |
PZDBTRS - | Решение системы AX = B, ATX = B, или AH = B с ленточной комплексной матрицей общего вида на основе LU - разложения, полученного подпрограммой PZDBTRF |
PZGBTRF - | LU - разложение ленточной комплексной матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу |
PZGBTRS - | Решение системы с ленточной комплексной матрицей общего вида на основе LU - разложения, полученного подпрограммой PZGBTRF |
PZPBTRF - | Треугольное разложение эрмитовой положительно определенной ленточной матрицы методом Холецкого |
PZPBTRS - | Решение системы линейных уравнений с эрмитовой положительно определенной ленточной матрицей, на основе разложения Холецкого, полученного подпрограммой PZPBTRF |
Замечания по использованию
1. | Используются подпрограммы BLACS_EXIT, BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO BLACS_GRIDINIT, BLACS_PINFO, BLACS_SETUP ( из пакета BLACS в составе MKL-библиотеки), DESCINIT, ICEIL, NUMROC, PZLAPRNT ( из пакета ScaLAPACK(TOOLS) в составе MKL-библиотеки), PZLAREAD, PZLAWRITE |
Необходимо решить систему уравнений с помощью подпрограммы PZDBSV.
Матрица системы - квадратная комплексная порядка 9.
Пусть матрица А системы имеет вид:
2,0 | -1,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | |
-1,0 | 2,0 | -1,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | |
0,0 | -1,0 | 2,0 | -1,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | |
0,0 | 0,0 | -1,0 | 2,0 | -1,0 | 0,0 | 0,0 | 0,0 | 0,0 | |
0,0 | 0,0 | 0,0 | -1,0 | 2,0 | -1,0 | 0,0 | 0,0 | 0,0 | |
0,0 | 0,0 | 0,0 | 0,0 | -1,0 | 2,0 | -1,0 | 0,0 | 0,0 | |
0,0 | 0,0 | 0,0 | 0,0 | 0,0 | -1,0 | 2,0 | -1,0 | 0,0 | |
0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | -1,0 | 2,0 | -1,0 | |
0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | 0,0 | -1,0 | 1,0 |
Вектор правых частей В имеет вид:
| 0,0 | | 0,0 | | 0,0 | | 0,0 | | 0,0 | | 0,0 | | 0,0 | | 0,0 | | 1,0 |
При предварительном обращении к подпрограмме PAZ_BDSV были получены следующие
значения необходимых параметров.
Решетка процессов: NPROW = 1, NPCOL = 3;
NB = 3 (т.е. матрица разбивается на блоки (по столбцам) размера 3),
MMIN = 29.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcz_bdsv.zip)
PROGRAM TCZ_BDSV include 'mpif.h' INTEGER N, NPROW, NPCOL, NB, BWL, BWU, MEMSIZE PARAMETER ( N=9, NB=3, MEMSIZE=29) * DOUBLE COMPLEX AMEM( MEMSIZE ) CHARACTER*(*) NAME, UPLO CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*) PARAMETER ( INFILEA = 'dbsvAz_9K.dat', $ INFILEB = 'bdsvBz_9K.dat', $ OUTFILE = 'bdsvz_9.res') * PARAMETER ( UPLO = 'U', $ NAME = 'PZDBSV') EXTERNAL CAZ_BDSV * NPROW = 1 NPCOL = 3 BWL = 1 BWU = 1 * CALL CAZ_BDSV(NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, $ BWL, BWU, INFILEA, INFILEB, OUTFILE) * STOP END Результаты: Решение системы (в файле OUTFILE) X = { (1.D0,0.D0), (2.D0,0.D0), (3.D0,0.D0), (4.D0,0.D0), (5.D0,0.D0), (6.D0,0.D0), (7.D0,0.D0), (8.D0,0.D0), (9.D00.D0) }