Автоматизация подготовки входных данных и вызова целевых программ комплекса 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_TRSV(NAME, N, NPROW, NPCOL, AMEM, MEMSIZE,
NB, INFILED, INFILEDL, INFILEDU, INFILEB, OUTFILE)
Параметры
| NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDDTSV, PDPTSV); (входной параметр, тип символьный); |
| N - | порядок исходной матрицы системы (входной параметр, тип целый); |
| NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_TRSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_TRSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE PRECISION); |
| MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_TRSV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NB - | размер блока матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_TRSV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| INFILED - | имя файла, содержащего главную диагональ исходной матрицы системы (D) (входной параметр, тип символьный); |
| INFILEDL - | имя файла, содержащего поддиагональ исходной матрицы системы (DL) (входной параметр, тип символьный); |
| INFILEDU - | имя файла, содержащего наддиагональ исходной матрицы системы (DU) (входной параметр, тип символьный); |
| INFILEB - | имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный); |
| OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
|
PDDTSV - PDPTSV |
решение системы с трехдиагональной матрицей общего вида методом Гаусса
без выбора ведущего элемента или решение системы с симметричной положительно определенной трехдиагональной матрицей методом Холецкого соответственно |
| PDDTTRF - | LU - разложение трехдиагональной матрицы общего вида методом Гаусса без выбора ведущего элемента |
| PDDTTRS - | Решение системы с трехдиагональной матрицей общего вида на основе LU - разложения, полученного подпрограммой PDDTTRF |
| PDPTTRF - | Треугольное разложение симметричной положительно определенной трехдиагональной матрицы методом Холецкого |
| PDPTTRS - | Решение системы с симметричной положительно определенной трехдиагональной матрицей на основе разложения Холецкого, полученного подпрограммой PDPTTRF |
Замечания по использованию
| 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 |
Необходимо решить систему уравнений с помощью подпрограммы PDDTSV.
Матрица системы - квадратная трехдиагональная порядка 9.
Пусть матрица А системы имеет вид:
| 2 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| -1 | 2 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 0 | -1 | 2 | -1 | 0 | 0 | 0 | 0 | 0 | |
| 0 | 0 | -1 | 2 | -1 | 0 | 0 | 0 | 0 | |
| 0 | 0 | 0 | -1 | 2 | -1 | 0 | 0 | 0 | |
| 0 | 0 | 0 | 0 | -1 | 2 | -1 | 0 | 0 | |
| 0 | 0 | 0 | 0 | 0 | -1 | 2 | -1 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | -1 | 2 | -1 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | 1 |
Вектор правых частей В имеет вид:
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
При предварительном обращении к подпрограмме PAR_TRSV были получены следующие
значения необходимых параметров.
Решетка процессов: NPROW = 1, NPCOL = 3;
NB = 3 (т.е. матрица разбивается на блоки (по столбцам) размера 1 на 3),
MMIN = 95.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_trsv.zip)
PROGRAM TCL_TRSV
include 'mpif.h'
INTEGER N, NPROW, NPCOL, NB, MEMSIZE
PARAMETER ( N=9, NB=3, MEMSIZE=95)
*
DOUBLE PRECISION AMEM( MEMSIZE )
CHARACTER*(*) NAME
CHARACTER INFILED*(*), INFILEDL*(*), INFILEDU*(*),
$ INFILEB*(*), OUTFILE*(*)
PARAMETER ( INFILED = 'trsvD_9K.dat',
$ INFILEDL = 'trsvDL_9K.dat',
$ INFILEDU = 'trsvDU_9K.dat',
$ INFILEB = 'trsvB_9.dat',
$ OUTFILE = 'trsv_9.res')
*
PARAMETER ( NAME = 'PDDTSV')
EXTERNAL CAL_TRSV
*
NPROW = 1
NPCOL = 3
*
CALL CAL_TRSV(NAME, N, NPROW, NPCOL, AMEM, MEMSIZE, NB,
$ INFILED, INFILEDL, INFILEDU, INFILEB, OUTFILE)
*
STOP
END
Результаты:
Решение системы (в файле OUTFILE)
X = ( 1.D0, 2.D0, 3.D0, 4.D0, 5.D0, 6.D0, 7.D0, 8.D0, 9.D0 )