Автоматизация подготовки входных данных и вызова целевых программ комплекса 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_SYGVZ(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, VL, VU, IL, IU, ABSTOL, ORFAC, INFILEA, INFILEB, OUTFILE)
Параметры
IBTYPE - |
определяет вид обобщенной проблемы собственных значений: если IBTYPE = 1 - вид (1); если IBTYPE = 2 - вид (2); если IBTYPE = 3 - вид (3); (входной параметр, тип целый); |
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDSYGV2, PDSYGV4, PDSYGV6); (входной параметр, тип символьный); |
UPLO - | переменная символьного типа, означающая, используется верхний или нижний треугольник матрицы и принимающая значения 'U' или 'L' соответственно (входной параметр); |
N - | порядок исходных матриц (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGVZ(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGVZ(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц, хранятся элементы рабочих массивов, где формируются локальные части массивов собственных значений и собственных векторов (входной параметр, тип DOUBLE PRECISION); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_SYGVZ (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_SYGVZ (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
VL - | заданная нижняя граница интервала, в котором ищутся собственные значения и соответствующие собственные векторы; при NAME='PDSYGV2', VL полагается равным 0.D0 (входной параметр, тип DOUBLE PRECISION); |
VU - | заданная верхняя граница интервала, в котором ищутся собственные значения и соответствующие собственные векторы; при NAME='PDSYGV2', VU полагается равным 0.D0 (входной параметр, тип DOUBLE PRECISION); |
IL - |
заданная нижняя граница интервала индексов, в котором
ищутся собственные значения и соответствующие собственные векторы; предполагается, что собственные значения располагаются по возрастанию; IL ≥ 1; при NAME='PDSYGV2', IL полагается равным 0 (входной параметр, тип целый); |
IU - | заданная верхняя граница интервала индексов, в котором ищутся собственные значения и соответствующие собственные векторы; предполагается, что собственные значения располагаются по возрастанию; min ( IL, N) ≤ IU ≤ N; при NAME='PDSYGV2', 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); |
ORFAC - |
определяет, какие собственные векторы должны быть подвергнуты
процессу переортогонализации [1]; собственные векторы, которые
соответствуют собственным значениям, находящимся на
расстоянии tol = ORFAC * norm (A)
друг от друга, должны быть переортогонализованы; однако если рабочего
пространства недостаточно, tol может быть
уменьшено, чтобы все собственные векторы, которые должны
быть переортогонализованы, могли быть заданы в одном
процессе; если ORFAC = 0, переортогонализация не выполняется;
если ORFAC задан отрицательным (< 0), то он полагается равным
10 - 3 (входной параметр, тип DOUBLE PRECISION); |
INFILEA - | имя файла, содержащего исходную матрицу (A) (входной параметр, тип символьный); |
INFILEB - | имя файла, содержащего исходную матрицу (B) (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будут записаны результирующие массивы собственных значений и соответствующих собственных векторов (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PDSYGV2 - PDSYGV4 PDSYGV6 |
вычисление всех собственных значений и собственных векторов в обобщенной проблеме
собственных значений для вещественных симметричных матриц двойной точности; вычисление собственных значений и собственных векторов, принадлежащих заданному интервалу, в обобщенной проблеме собственных значений для вещественных симметричных матриц двойной точности; вычисление собственных значений и собственных векторов, принадлежащих заданному интервалу индексов, в обобщенной проблеме собственных значений для вещественных симметричных матриц двойной точности, соответственно |
PDSYEV2 - PDSYEV4 PDSYEV6 |
вычисление всех собственных значений и собственных векторов симметричной матрицы
для вещественных данных двойной точности; вычисление собственных значений и собственных векторов симметричной матрицы, принадлежащих заданному интервалу, для вещественных данных двойной точности; вычисление собственных значений и собственных векторов симметричной матрицы, принадлежащих заданному интервалу индексов, для вещественных данных двойной точности, соответственно |
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 ) для вещественных
симметричных матриц с помощью подпрограммы PDSYGV2.
Матрицы - квадратные симметричные порядка 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_SYGVZ были получены следующие
значения необходимых параметров.
Решетка процессов: NPROW = 2, NPCOL = 2;
NB = 2 (т.е. матрицы разбиваются на блоки размера 2 на 2),
MMIN = 5613.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_sygvz.zip)
PROGRAM TCL_SYGVZ include 'mpif.h' INTEGER N, NPROW, NPCOL, NB, MEMSIZE, IBTYPE, IL, IU DOUBLE PRECISION VL, VU, ABSTOL, ORFAC PARAMETER ( N=5, NB=2, MEMSIZE=5613) * DOUBLE PRECISION AMEM( MEMSIZE ) CHARACTER*(*) NAME, UPLO CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*) PARAMETER ( INFILEA = 'sygvA_5.dat', $ INFILEB = 'sygvB_5.dat', $ OUTFILE = 'syevz_5.res') * PARAMETER ( UPLO = 'U', $ NAME = 'PDSYGV2') EXTERNAL CAL_SYGVZ * IBTYPE = 1 NPROW = 2 NPCOL = 2 * VL = 0.D0 VU = 0.D0 IL = 0 IU = 0 * IF( NAME .NE. 'PDSYGV4' ) GOTO 1 VL = 0.5D0 VU = 1.5D0 1 IF( NAME .NE. 'PDSYGV6' ) GOTO 2 IL = 2 IU = 7 2 ABSTOL = 10.0D-10 ORFAC = 0.0D0 * CALL CAL_SYGVZ(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, $ VL, VU, IL, IU, ABSTOL, ORFAC, 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 Собственные векторы: Z(1, 1) = 0.134590573961348964D+00 Z(2, 1) = -0.612947224715858080D-01 Z(3, 1) = -0.157902562211254954D+00 Z(4, 1) = 0.109465787723999147D+00 Z(5, 1) = -0.414730117966489037D-01 Z(1, 2) = 0.829198064861523532D-01 Z(2, 2) = 0.153148395665945264D+00 Z(3, 2) = -0.118603667911389210D+00 Z(4, 2) = -0.182813041785799935D+00 Z(5, 2) = 0.356172036818147315D-02 Z(1, 3) = 0.191710031573882250D+00 Z(2, 3) = -0.158991211513700409D+00 Z(3, 3) = 0.748390709386720365D-01 Z(4, 3) = -0.137468929466840417D+00 Z(5, 3) = 0.889778923495063573D-01 Z(1, 4) = 0.142011959884590616D+00 Z(2, 4) = 0.142419950546665203D+00 Z(3, 4) = 0.120997623004495347D+00 Z(4, 4) = 0.125531015188065975D+00 Z(5, 4) = 0.769220728307276440D-02 Z(1, 5) = -0.763867178777808409D-01 Z(2, 5) = 0.170980018713419862D-01 Z(3, 5) = -0.666645336709070502D-01 Z(4, 5) = 0.860480093056616990D-01 Z(5, 5) = 0.289433414168931813D+00