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

Назначение

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

Параметры

NAME - имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PZDTSV, PZPTSV); (входной параметр, тип символьный);
N - порядок исходной матрицы системы (входной параметр, тип целый);
NPROW - число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_TRSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NPCOL - число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAZ_TRSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
AMEM - массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE COPLEX);
MEMSIZE - задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAZ_TRSV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NB - размер блока матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAZ_TRSV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
INFILED - имя файла, содержащего главную диагональ исходной матрицы системы (D) (входной параметр, тип символьный);
INFILEDL - имя файла, содержащего поддиагональ исходной матрицы системы (DL) (входной параметр, тип символьный);
INFILEDU - имя файла, содержащего наддиагональ исходной матрицы системы (DU) (входной параметр, тип символьный);
INFILEB - имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный);
OUTFILE - имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный).

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

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

PZDTSV -
PZPTSV   
решение системы с комплексной трехдиагональной матрицей общего вида методом Гаусса без выбора ведущего элемента или
решение системы с эрмитовой положительно определенной трехдиагональной матрицей методом Холецкого
соответственно
PZDTTRF - LU - разложение комплексной трехдиагональной матрицы общего вида методом Гаусса без выбора ведущего элемента
PZDTTRS - Решение системы с комплексной трехдиагональной матрицей общего вида на основе LU - разложения, полученного подпрограммой PZDTTRF
PZPTTRF - Треугольное разложение эрмитовой положительно определенной трехдиагональной матрицы методом Холецкого
PZPTTRS - Решение системы с эрмитовой положительно определенной трехдиагональной матрицей на основе разложения Холецкого, полученного подпрограммой PDPTTRF

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

  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

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

Необходимо решить систему уравнений с помощью подпрограммы PDDTSV.
Матрица системы - квадратная комплексная трехдиагональная порядка 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_TRSV были получены следующие значения необходимых параметров.
Решетка процессов: NPROW = 1, NPCOL = 3; NB = 3 (т.е. матрица разбивается на блоки (по столбцам) размера 1 на 3), MMIN = 95.

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

      PROGRAM TCZ_TRSV
      include 'mpif.h'
      INTEGER                 N, NPROW, NPCOL, NB, MEMSIZE
      PARAMETER          ( N=9, NB=3, MEMSIZE=95)
*
      DOUBLE COMPLEX     AMEM( MEMSIZE )
      CHARACTER*(*)           NAME
      CHARACTER          INFILED*(*), INFILEDL*(*), INFILEDU*(*),
     $                                INFILEB*(*), OUTFILE*(*)
      PARAMETER         ( INFILED = 'trsvDz_9K.dat',
     $                                INFILEDL = 'trsvDLz_9K.dat',
     $                                INFILEDU = 'trsvDUz_9K.dat',
     $                                INFILEB = 'trsvBz_9.dat',
     $                                OUTFILE = 'trsvz_9.res')
*
      PARAMETER         ( NAME = 'PZDTSV')
      EXTERNAL CAZ_TRSV
*
      NPROW = 1
      NPCOL = 3
*
      CALL CAZ_TRSV(NAME, N, NPROW, NPCOL, AMEM, MEMSIZE, NB,
     $                               INFILED, INFILEDL, INFILEDU, 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.D0,0.D0)   }