Автоматизация подготовки входных данных и вызова целевых программ комплекса PARALG вычисления собственных значений в обобщенной проблеме собственных значений для вещественных симметричных матриц
Эта служебная подпрограмма организует за пользователя правильный вызов
целевых программ вычисления на распределенной памяти собственных значений
в обобщенной проблеме собственных значений одного из трех видов
(1) Аx = λBx ,
(2) АBx = λx или
(3) BАx = λx
для вещественных симметричных матриц.
Она считывает из внешнего файла исходные матрицы, распределяет их части(блоки)
по параллельным процессам в соответствии с используемыми алгоритмами
и формирует правильный список фактических параметров
для выбранной пользователем целевой программы. После чего осуществляет вызов
этой программы. Полученный в результате счета массив собственных значений
записывается во внешний файл.
Литература:
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_SYGV1(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE,
NB, VL, VU, IL, IU, ABSTOL, INFILEA, INFILEB, OUTFILE)
Параметры
| IBTYPE - |
определяет вид обобщенной проблемы собственных значений: если IBTYPE = 1 - вид (1); если IBTYPE = 2 - вид (2); если IBTYPE = 3 - вид (3); (входной параметр, тип целый); |
| NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDSYGV1, PDSYGV3, PDSYGV5); (входной параметр, тип символьный); |
| UPLO - | переменная символьного типа, означающая, используется верхний или нижний треугольник матрицы и принимающая значения 'U' или 'L' соответственно (входной параметр); |
| N - | порядок исходной матрицы (входной параметр, тип целый); |
| NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц, хранятся элементы рабочих массивов, где формируются локальные части массива собственных значений (входной параметр, тип DOUBLE PRECISION); |
| MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_SYGV1 (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_SYGV1 (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| VL - | заданная нижняя граница интервала, в котором ищутся собственные значения; при NAME='PDSYGV1', VL полагается равным 0.D0 (входной параметр, тип DOUBLE PRECISION); |
| VU - | заданная верхняя граница интервала, в котором ищутся собственные значения; при NAME='PDSYGV1', VU полагается равным 0.D0 (входной параметр, тип DOUBLE PRECISION); |
| IL - |
заданная нижняя граница интервала индексов, в котором
ищутся собственные значения; предполагается, что собственные значения располагаются по возрастанию; IL ≥ 1; при NAME='PDSYGV1', IL полагается равным 0 (входной параметр, тип целый); |
| IU - | заданная верхняя граница интервала индексов, в котором ищутся собственные значения; предполагается, что собственные значения располагаются по возрастанию; min ( IL, N) ≤ IU ≤ N; при NAME='PDSYGV1', IU полагается равным 0 (входной параметр, тип целый); |
| ABSTOL - |
заданная абсолютная точность, с которой должны быть вычислены
собственные значения; заданная точность считается достигнутой, если собственное значение лежит в интервале [a, b], ширина которого не превосходит ABSTOL + EPS * MAX ( | a |, | b | ), где EPS - машинная точность; если ABSTOL ≤ 0, то ABSTOL полагается равным EPS * norm ( D ), где norm ( D ) - первая норма трехдиагональной матрицы, полученной посредством преобразования матрицы A к трехдиагональной форме; собственные значения будут вычислены с наибольшей точностью, если ABSTOL = 2 * PDLAMCH ('S'), где PDLAMCH ('S') = sfmin - минимальное вещественное число, при котором 1 / sfmin не вызывает переполнения; (входной параметр, тип DOUBLE PRECISION); |
| INFILEA - | имя файла, содержащего исходную матрицу (A) (входной параметр, тип символьный); |
| INFILEB - | имя файла, содержащего исходную матрицу (B) (входной параметр, тип символьный); |
| OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий массив собственных значений (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
|
PDSYGV1 -
PDSYGV3 PDSYGV5 |
вычисление всех собственных значений в обобщенной проблеме собственных значений
для вещественных симметричных матриц двойной точности; вычисление собственных значений, принадлежащих заданному интервалу, в обобщенной проблеме собственных значений для вещественных симметричных матриц двойной точности; вычисление собственных значений, принадлежащих заданному интервалу индексов, в обобщенной проблеме собственных значений для вещественных симметричных матриц двойной точности, соответственно |
|
PDSYEV1 -
PDSYEV3 PDSYEV5 |
вычисление всех собственных значений симметричной матрицы
для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу, для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу индексов, для вещественных данных двойной точности, соответственно |
|
PDPOTRF - PZPOTRF | Треугольное разложение симметричной (эрмитовой) положительно определенной матрицы методом Холецкого |
|
PDSYTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
|
DSTEQR2 - | вычисление всех собственных значений и, возможно, собственных векторов симметричной трехдиагональной матрицы |
|
PDSYNTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
|
PDSYNGST - | приведение обобщенной проблемы собственных значений к стандартному виду |
| PDSTEBZ - | вычисление собственных значений симметричной трехдиагональной матрицы |
Замечания по использованию
| 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 |
Необходимо вычислить собственные значения в обобщенной проблеме собственных значений
( Аx = λ Bx ) для вещественных симметричных матриц
с помощью подпрограммы PDSYGV1.
Матрицы - квадратные симметричные порядка 5.
Пусть матрицы А и B имеют вид:
| 10 2 3 1 1 |
| 0 12 1 2 1 |
| 0 0 11 1 -1 |
| 0 0 0 9 1 |
| 0 0 0 0 15 |
| 12 1 -1 2 1 |
| 0 14 1 -1 1 |
| 0 0 16 -1 1 |
| 0 0 0 12 -1 |
| 0 0 0 0 11 |
При предварительном обращении к подпрограмме PAR_SYGV1 были получены следующие значения необходимых параметров. Решетка процессов: NPROW = 2, NPCOL = 2; NB = 2 (т.е. матрица разбивается на блоки размера 2 на 2), MMIN = 5604.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_sygv1.zip)
PROGRAM TCL_SYGV1
include 'mpif.h'
INTEGER N, NPROW, NPCOL, NB, MEMSIZE, IBTYPE, IL, IU
DOUBLE PRECISION VL, VU, ABSTOL
PARAMETER ( N=5, NB=2, MEMSIZE=5604)
*
DOUBLE PRECISION AMEM( MEMSIZE )
CHARACTER*(*) NAME, UPLO
CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*)
PARAMETER ( INFILEA = 'sygvA_5.dat',
$ ( INFILEB = 'sygvB_5.dat',
$ OUTFILE = 'syev1_5.res')
*
PARAMETER ( UPLO = 'U',
$ NAME = 'PDSYGV1')
EXTERNAL CAL_SYGV1
*
IBTYPE = 1
NPROW = 2
NPCOL = 2
*
VL = 0.D0
VU = 0.D0
IL = 0
IU = 0
*
IF( NAME .NE. 'PDSYGV3' ) GOTO 1
VL = 0.5D0
VU = 1.5D0
1 IF( NAME .NE. 'PDSYGV5' ) GOTO 2
IL = 2
IU = 7
2 ABSTOL = 10.0D-10
ORFAC = 0.0D0
*
CALL CAL_SYGV1(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB,
$ VL, VU, IL, IU, ABSTOL, INFILEA, INFILEB, OUTFILE)
*
STOP
END
Содержимое файлов с исходными матрицами:
'sygvA_5.dat':
5 5
0.10000D+02
0.00000D+00
0.00000D+00
0.00000D+00
0.00000D+00
0.20000D+01
0.12000D+02
0.00000D+00
0.00000D+00
0.00000D+00
0.30000D+01
0.10000D+01
0.11000D+02
0.00000D+00
0.00000D+00
0.10000D+01
0.20000D+01
0.10000D+01
0.90000D+01
0.00000D+00
0.10000D+01
0.10000D+01
-0.10000D+01
0.10000D+01
0.15000D+02
'sygvB_5.dat':
5 5
0.12000D+02
0.00000D+00
0.00000D+00
0.00000D+00
0.00000D+00
0.10000D+01
0.14000D+02
0.00000D+00
0.00000D+00
0.00000D+00
-0.10000D+01
0.10000D+01
0.16000D+02
0.00000D+00
0.00000D+00
0.20000D+01
-0.10000D+01
-0.10000D+01
0.12000D+02
0.00000D+00
0.10000D+01
0.10000D+01
0.10000D+01
-0.10000D+01
0.11000D+02
Результаты:
Собственные значения (в файле OUTFILE):
W(1) = 0.432787211016963
W(2) = 0.663662748392315
W(3) = 0.943859004668386
W(4) = 1.10928454001752
W(5) = 1.49235323254300