Подпрограмма:  CAZ_GESV

Назначение

Автоматизация подготовки входных данных и вызова целевых программ комплекса 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_GESV(NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE,
                                         NB, INFILEA, INFILEB, OUTFILE)

Параметры

NAME - имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PZGESV, PZGESV1, PZGESV2, PZGESV3); (входной параметр, тип символьный);
TRANS - переменная символьного типа, означающая, следует ли решать систему с транспонированной матрицей и принимающая значения 'N' или 'T' (входной параметр);
N - порядок исходной матрицы системы (входной параметр, тип целый);
NPROW - число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_GESV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NPCOL - число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_GESV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
AMEM - массив локальной рабочей памяти, в которую распределяются локальные части исходных комплексных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE COMPLEX);
MEMSIZE - задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAZ_GESV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NB - размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAZ_GESV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
INFILEA - имя файла, содержащего исходную матрицу системы (A) (входной параметр, тип символьный);
INFILEB - имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный);
OUTFILE - имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный).

Вызываемые подпрограммы

Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.

PZGESV -
PZGESV1   
PZGESV2   
PZGESV3   
решение системы A X = B с комплексной матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для комплексных данных двойной точности или
решение системы A X = B или AT X = B с комплексной матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для комплексных данных двойной точности или
решение системы A X = B или AT X = B с комплексной матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для комплексных данных двойной точности и оценка обратного числа обусловленности, или
решение системы A X = B или AT X = B с комплексной матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для комплексных данных двойной точности с итерационным уточнением решения и оценкой границ ошибок
соответственно
PZGETRF - LU - разложение комплексной матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу
PZGETRS - Решение системы AX = B, AT X = B или AH X = B на основе LU - разложения, полученного подпрограммой PZGETRF
PZGECON - Оценка обратного числа обусловленности комплексной матрицы общего вида

PZGERFS - Выполнение итерационного уточнения решения системы A X = B, AT X = B или AH X = B, полученного подпрограммой PZGETRS, и оценка границ ошибок полученного решения

Замечания по использованию

  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

Пример использования

Необходимо решить систему уравнений с помощью подпрограммы PZGESV.
Матрица системы - комплексная общего вида порядка 9.
Пусть матрица А системы имеет вид:

 19,0  3,0  1,0  12,0  1,0  16,0  1,0  3,0 11,0
-19,0  3,0  1,0  12,0  1,0  16,0  1,0  3,0 11,0
-19,0 -3,0  1,0  12,0  1,0  16,0  1,0  3,0 11,0
-19,0 -3,0 -1,0  12,0  1,0  16,0  1,0  3,0 11,0
-19,0 -3,0 -1,0 -12,0  1,0  16,0  1,0  3,0 11,0
-19,0 -3,0 -1,0 -12,0 -1,0  16,0  1,0  3,0 11,0
-19,0 -3,0 -1,0 -12,0 -1,0 -16,0  1,0  3,0 11,0
-19,0  3,0 -1,0 -12,0 -1,0 -16,0 -1,0  3,0 11,0
-19,0 -3,0 -1,0 -12,0 -1,0 -16,0 -1,0 -3,0 11,0

Вектор правых частей В имеет вид:

 0,0
 0,0
 1,0
 0,0
 0,0
 0,0
 0,0
 0,0
 0,0

При предварительном обращении к подпрограмме PAZ_GESV были получены следующие значения необходимых параметров.
Решетка процессов: NPROW = 2, NPCOL = 2; NB = 4 (т.е. матрица разбивается на блоки размера 4 на 4), MMIN = 41.

Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в tcz_gesv.zip)

      PROGRAM TCZ_GESV
      include 'mpif.h'
      INTEGER                 N, NPROW, NPCOL, NB, MEMSIZE
      PARAMETER          ( N=9, NB=4, MEMSIZE=41)
*
      DOUBLE COMPLEX     AMEM( MEMSIZE )
      CHARACTER*(*)           NAME, TRANS
      CHARACTER          INFILEA*(*), INFILEB*(*), OUTFILE*(*)
      PARAMETER         ( INFILEA = 'gesvAz_9.dat',
     $                                INFILEB = 'gesvBz_9.dat',
     $                                OUTFILE = 'gesvz_9.res')
*
      PARAMETER         ( TRANS = 'N',
     $                                NAME = 'PZGESV')
      EXTERNAL CAZ_GESV
*
      NPROW = 2
      NPCOL = 2
*
      CALL CAZ_GESV(NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE, NB,
     $                               INFILEA, INFILEB, OUTFILE)
*
      STOP
      END

Результаты:
 Решение системы (в файле OUTFILE)

 X = {   (0.D0,0.D0), (- 0.16666666666667D0,0.D0), (0.5D0,0.D0), (0.D0,0.D0), (0.D0,0.D0),
             (0.D0,0.D0), (- 0.5D0,0.D0), (0.16666666666667D0,0.D0), (0.D0,0.D0)   }