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

Назначение

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

Параметры

NAME - имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDDBSV, PDGBSV, PDPBSV); (входной параметр, тип символьный);
UPLO - переменная символьного типа, означающая, сохраняется нижняя или верхняя треугольная матрица и принимающая значения 'U'(верхняя) или 'L'(нижняя) (входной параметр);
N - порядок исходной матрицы системы (входной параметр, тип целый);
NPROW - число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_BDSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NPCOL - число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_BDSV(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
AMEM - массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы (входной параметр, тип DOUBLE PRECISION);
MEMSIZE - задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_BDSV (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
NB - размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_BDSV (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый);
BWL - целая переменная, означающая число поддиагоналей исходной ленточной матрицы (входной параметр);
BWU - целая переменная, означающая число наддиагоналей исходной ленточной матрицы (входной параметр);
INFILEA - имя файла, содержащего исходную матрицу системы (A) (входной параметр, тип символьный);
INFILEB - имя файла, содержащего исходный вектор правой части системы (B) (входной параметр, тип символьный);
OUTFILE - имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный).

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

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

PDDBSV -
PDGBSV   
PDPBSV   
    
решение системы с ленточной матрицей общего вида методом Гаусса без выбора ведущего элемента или
решение системы с ленточной матрицей общего вида методом Гаусса с выбором ведущего элемента, или
решение системы с симметричной (эрмитовой) положительно определенной ленточной матрицей методом Холецкого соответственно
PDDBTRF - PZDBTRF    LU - разложение ленточной матрицы общего вида методом Гаусса без выбора ведущего элемента
PDDBTRS - PZDBTRS    Решение системы AX = B, ATX = B, или AH = B с ленточной матрицей общего вида на основе LU - разложения, полученного подпрограммой PDDBTRF(PZDBTRF)
PDGBTRF - PZGBTRF    LU - разложение ленточной матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу
PDGBTRS - PZGBTRS    Решение системы с ленточной матрицей общего вида на основе LU - разложения, полученного подпрограммой PDGBTRF(PZGBTRF)
PDPBTRF - PZPBTRF    Треугольное разложение симметричной (эрмитовой) положительно определенной ленточной матрицы методом Холецкого
PDPBTRS - PZPBTRS    Решение системы линейных уравнений с симметричной (эрмитовой) положительно определенной ленточной матрицей, на основе разложения Холецкого, полученного подпрограммой PDPBTRF(PZPBTRF)

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

  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

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

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

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

      PROGRAM TCL_BDSV
      include 'mpif.h'
      INTEGER                 N, NPROW, NPCOL, NB, BWL, BWU, MEMSIZE
      PARAMETER          ( N=9, NB=3, MEMSIZE=29)
*
      DOUBLE PRECISION   AMEM( MEMSIZE )
      CHARACTER*(*)           NAME, UPLO
      CHARACTER          INFILEA*(*), INFILEB*(*), OUTFILE*(*)
      PARAMETER         ( INFILEA = 'dbsvA_9K.dat',
     $                                INFILEB = 'bdsvB_9K.dat',
     $                                OUTFILE = 'bdsv_9.res')
*
      PARAMETER         ( UPLO = 'U',
     $                                NAME = 'PDDBSV')
      EXTERNAL CAL_BDSV
*
      NPROW = 1
      NPCOL = 3
      BWL = 1
      BWU = 1
*
      CALL CAL_BDSV(NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB,
     $                               BWL, BWU, INFILEA, INFILEB, OUTFILE)
*
      STOP
      END

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

  X = ( 1.D0, 2.D0, 3.D0, 4.D0, 5.D0, 6.D0, 7.D0, 8.D0, 9.D0 )