Next:2.4. Хранение разреженных матриц в MSR формате
Up:2. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ ПАРАЛЛЕЛЬНЫХ ПОДПРОГРАММ Aztec
Prev:2.2. Конфигурационные параметры библиотеки Aztec

2.3. Основные подпрограммы библиотеки Aztec

В состав библиотеки Aztec входит около 50 подпрограмм (функций в языке С), однако большая их часть имеет вспомогательный характер и не требуется прямое обращение к ним. Стандартное использование библиотеки требует обращения к 5-6 подпрограммам. Рассмотрим их в соответствии с очередностью вызовов этих подпрограмм в программах, основанных на библиотеке Aztec.

Функция идентификации процессоров AZ_processor_info

Эта функция является аналогом функции whoami в PSE и функций MPI_Comm_rank, MPI_Comm_size в MPI.

call AZ_processor_info(proc_config)

Информация возвращается в массив
integer proc_config(0:AZ_PROC_SIZE)

При этом номер текущего процессора IAM и количество процессоров NPROCS заносятся в соответствующие элементы этого массива:

IAM= proc_config(AZ_node) - номер вызывающего процессора;
NPROCS= proc_config(AZ_N_procs) - общее число процессоров, доступных программе.

Функция рассылки информации по процессорам AZ_broadcast

Это аналог функции MPI_Bcast, ее реализация выполнена в стиле PVM: рассылаемая информация сначала упаковывается в системный буфер, а затем посылается одной командой. Рассылать может только 0-й процессор. Вызов функции имеет следующий вид:

call AZ_broadcast(n, 4, proc_config, AZ_PACK) -упаковываем в буфер целую переменную n;
call AZ_broadcast(d, 8, proc_config, AZ_PACK) -упаковываем в буфер переменную d типа real*8;
call AZ_broadcast(NULL, 0, proc_config, AZ_SEND) -посылаем буфер.

Функция определения параметров декомпозиции матрицы AZ_read_update

Эта функция определяет, сколько строк глобальной матрицы должно находиться в данном процессоре и номера этих строк. Вызов функции имеет следующий вид:

call AZ_read_update(N_update, update, proc_config, nz, 1, 0)

N_update- целая переменная, возвращает количество строк на процессоре;
update- массив целого типа размерности не меньше, чем N_update+1, после вызова содержит номера строк в глобальной нумерации;
nz- размерность глобальной матрицы (входной параметр).

Два последних параметра - константы.

После вызова всех рассмотренных выше функций в каждом процессоре должна быть сформирована размещенная в нем часть разреженной матрицы, представленная в виде двух массивов:

Этот этап целиком и полностью возлагается на программиста и требует от него некоторой изобретательности.
Для VBR формата требуется сохранять больше информации (в данном пособии мы его рассматривать не будем). Кроме того, должны быть сформированы векторы правых частей B и начальное приближение решения X (только расположенные в данном процессоре части).

Функция преобразования глобальной индексации в локальную AZ_transform

call AZ_transform(proc_config, external, bindx, val, update,
$     update_index, extern_index, data_org, N_update,
$     NULL, NULL, NULL, NULL, AZ_MSR_MATRIX)

Входные параметры этой процедуры proc_config, bindx, val, update, N_update рассмотрены выше. Выходные параметры - целые массивы external, update_index, extern_index, data_org размерности не меньше, чем N_update + 1 - будут передаваться процедуре решения системы уравнений AZ_solve. Параметры, имеющие значения NULL, в случае MSR формата не используются.

Перед обращением к процедуре решения системы вектор правых частей и начальное приближение должны быть переопределены в соответствии с новой индексацией.

do i = 0, N_update - 1
xn(update_index(i)) = X(i)
bn(update_index(i)) = B(i)
end do

Функция инициализации предопределенных параметров решателя AZ_defaults

call AZ_defaults(options, params)

В данной процедуре оба параметра выходные и были подробно рассмотрены выше. Установки по умолчанию могут быть переопределены:

options(AZ_solver)=AZ_cgs- выбор метода решения CGS;
options(AZ_precond)=AZ_dom_decomp- выбор переобуславливателя;
options(AZ_subdomain_solve)=AZ_ilu- неполное LU разложение;
options(AZ_output)=AZ_none- диагностику не выдавать;
options(AZ_max_iter)=1000- максимальное число итераций 1000;
params(AZ_tol)=1.d-8- критерий сходимости 10-8.

Функция решения системы линейных алгебраических уравнений AZ_solve

Эта функция является основной "рабочей лошадкой" пакета. Ее вызов имеет следующий вид:

call AZ_solve(xn, bn, options, params, NULL, bindx, NULL, NULL,
$     NULL, val, data_org, status, proc_config)

Параметры NULL не используются в случае MSR формата хранения матрицы. Выходными параметрами являются xn - распределенное по процессорам решение системы, и рассмотренный выше массив status.




Next:2.4. Хранение разреженных матриц в MSR формате
Up:2. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ ПАРАЛЛЕЛЬНЫХ ПОДПРОГРАММ Aztec
Prev:2.2. Конфигурационные параметры библиотеки Aztec