Для использования библиотеки Aztec в текст программы должен быть включен include-файл, в котором определен набор необходимых переменных:
С:
#include <az_aztec.h>
Fortran:
include 'az_aztecf.h'
Пакет написан на языке C, поэтому все используемые при вызове подпрограмм массивы должны индексироваться от 0 (в том числе и на Фортране). Вызов различных подпрограмм решения систем линейных алгебраических уравнений выполняется через драйверную подпрограмму AZ_solve. Управление режимами работы решателя осуществляется с помощью двух массивов:
Возвращаемая информация помещается в вещественный массив с двойной точностью status(0:AZ_STATUS_SIZE).
Приведем список наиболее важных опций. Значения констант, используемых в качестве индексов элементов массивов options, params, status и в качестве значений, присваиваемых этим элементам, определены в include-файлах.
options[AZ_solver] | Специфицирует алгоритм решения. Возможные значения задаются либо в виде именованных констант, либо в виде числовых значений, которые приведены в скобках: |
AZ_cg (0) | Метод сопряженных градиентов (применяется только к симметричным, положительно определенным матрицам). |
AZ_gmres (1) | Обобщенный метод минимальных невязок. |
AZ_cgs (2) | Квадратичный метод сопряженных градиентов. |
AZ_tfqmr (3)> | Метод квазиминимальных невязок. |
AZ_bicgstab (4) | Метод бисопряженного градиента со стабилизацией. |
AZ_lu (5) | Прямой LU метод решения (только на одном процессоре). |
Значение по умолчанию: AZ_gmres | |
options[AZ_scaling] | Определяет алгоритм масштабирования. Масштабируется вся матрица (запись идет на место старой).
Кроме того, при необходимости масштабируются правая часть, начальные данные и полученное решение. Возможные значения: |
AZ_none | Без масштабирования. |
AZ_Jacobi | Точечное масштабирование Якоби. |
AZ_BJacobi | Блочное масштабирование Якоби, где размер блоков соответствует VBR блокам. Точечное масштабирование Якоби применяют, когда используется MSR формат. |
AZ_row_sum | Масштабирование каждой строки такое, что сумма ее элементов равна 1. |
AZ_sym_diag | Симметричное масштабирование такое, что диагональные элементы равны 1. |
AZ_sym_row_sum | Симметричное масштабирование с использованием суммы элементов строки. |
Значение по умолчанию: AZ_none. | |
options[AZ_precond] | Специфицирует переобуславливатель. Возможные значения: |
AZ_none | Переобуславливания нет. |
AZ_Jacobi | k шаговый метод Якоби. Число k шагов Якоби задается через options[AZ_poly_ord]. |
AZ_Neumann | Ряд полиномов Неймана, где степень полинома задается через options[AZ_poly_ord]. |
AZ_ls | Полином наименьших квадратов, где степень полинома задается через options[AZ_poly_ord]. |
AZ_lu | Метод декомпозиции областей (аддитивная процедура Шварца), использующий неполную LU факторизацию с величиной допустимого отклонения params[AZ_drop] на подматрице каждого процессора. Обработка внешних переменных в подматрице определяется с помощью options[AZ_overlap]. |
AZ_ilu | Подобно AZ_lu, но используется ilu(0) вместо LU. |
AZ_bilu | Подобно AZ_lu, но используется bilu(0) вместо LU, где каждый блок соответствует VBR блоку. |
AZ_sym_GS | k-шаговый симметричный метод Гаусса-Зейделя для неперекрывающейся декомпозиции области (аддитивная процедура Шварца). Симметричная процедура Гаусса-Зейделя декомпозиции области используется тогда, когда каждый процессор независимо выполняет один шаг симметричного метода Гаусса-Зейделя на его локальной подматрице, после чего с помощью межпроцессорных коммуникаций обновляются граничные значения, требуемые на следующем локальном шаге метода Гаусса-Зейделя. Число шагов k задается через options[AZ_poly_ord]. |
Значение по умолчанию: AZ_none. | |
options[AZ_conv] | Определяет выражение невязки, используемое для подтверждения сходимости. Итерационное
решение завершается, если соответствующее выражение невязки меньше, чем params[AZ_tol]. Возможные значения: |
AZ_r0 | |
AZ_rhs | |
AZ_Anorm | |
AZ_sol | |
AZ_weighted | |
Значение по умолчанию: AZ_r0. | |
options[AZ_output] | Специфицирует информацию, которая должна быть выведена на печать в процессе решения
(выражения невязки см. options[AZ_conv]). Возможные значения: |
AZ_all | Выводит на печать матрицу и индексирующие векторы для каждого процессора. Печатает все промежуточные значения невязок. |
AZ_none | Промежуточные результаты не печатаются. |
AZ_warnings | Печатаются только предупреждения Aztec'а. |
AZ_last | Печатается только окончательное значение невязки. |
n (n >0) | Печатается значение невязки на каждой n-ой итерации. |
Значение по умолчанию: 1. | |
options[AZ_pre_calc] | Показывает, использовать ли информацию о факторизации из предыдущего вызова AZ_solve. Возможные значения: |
AZ_calc | Не использовать информацию из предыдущих вызовов AZ_solve. |
AZ_recalc | Использовать информацию предварительной обработки из предыдущего вызова, но повторно вычислять переобуславливающие множители. |
AZ_reuse | Использовать переобуславливатель из предыдущего вызова AZ_solve. Кроме того, можно использовать масштабирующие множители из предыдущего обращения для масштабирования правой части, начальных данных и окончательного решения. |
По умолчанию: AZ_calc. | |
options[AZ_max_iter] | Максимальное число итераций. |
Значение по умолчанию: 500. | |
options[AZ_poly_ord] | Степень полинома при использовании полиномиального переобуславливателя. А также число шагов при переобуславливании Якоби или симметричном переобуславливании Гаусса-Зейделя. |
Значение по умолчанию: 3. | |
options[AZ_overlap] | Определяет подматрицы, факторизуемые алгоритмами декомпозиции области
AZ_lu, AZ_ilu, AZ_bilu. Возможные значения: |
AZ_none | Факторизовать определенную на этом процессоре локальную подматрицу, отбрасывая столбцы, которые соответствуют внешним элементам. |
AZ_diag | Факторизовать локальную подматрицу на процессоре, расширенную диагональной (блочно-диагональной для VBR формата) матрицей. Эта диагональная матрица состоит из диагональных элементов строк матрицы, связанных с внешними элементами. |
AZ_full | Факторизовать определенную на процессоре локальную подматрицу, расширенную строками, связанными с внешними переменными. Результирующая процедура - аддитивная процедура Шварца с совмещением. |
Значение по умолчанию: AZ_none. | |
options[AZ_kspace] | Размер подпространства Крылова для GMRES. |
Значение по умолчанию: 30. | |
options[AZ_orthog] | Схема ортогонализации GMRES. Возможные значения: |
AZ_classic | Классическая ортогонализация Грамм-Шмидта. |
AZ_modified | Модифицированная ортогонализация Грамм-Шмидта. |
Значение по умолчанию: AZ_classic. |
Массив params двойной точности служит для передачи в процедуры значений параметров вещественного типа. Элементы этого массива имеют следующие значения:
params[AZ_tol] | Определяет критерий сходимости. По умолчанию: 10-6 |
params[AZ_drop] | Определяет величину допустимого отклонения для LU переобуславливателей. По умолчанию: 0.0. |
params[AZ_weights] | Когда options[AZ_conv] = AZ_weighted, i-ая локальная компонента вектора веса хранится в элементе params[AZ_weights+i]. |
Вся целочисленная информация, возвращаемая из AZ_solve, переводится в вещественные значения двойной точности и помещается в массив status. Содержание элементов массива status описано ниже.
status[AZ_its] | Число итераций, выполненных итерационным методом. |
status[AZ_why] | Причина завершения программы AZ_solve. Возможные значения: |
AZ_normal | Критерий сходимости, который запросил пользователь, удовлетворен. |
AZ_param | Некорректно заданная опция. |
AZ_breakdown | Произошло численное прерывание. |
AZ_loss | Произошла потеря точности. |
AZ_ill_cond | Метод Хессенберга в GMRES некорректен. Это может быть вызвано сингулярностью матрицы. В этом случае GMRES пробует найти решение наименьшими квадратами. |
AZ_maxits | Сходимость не достигнута после выполнения максимального число итераций, заданного соответствующим параметром. |
status[AZ_r] | Истинная норма невязки, соответствующая выбору options[AZ_conv] (для вычисления нормы используется полученное решение). |
status[AZ_scaled_r] | Истинное выражение отношения невязки как определено в options[AZ_conv]. |
status[AZ_rec_r] | Норма соответствующая options[AZ_conv] конечной невязки или оценочной конечной невязки (рекурсивно вычисленной итерационным методом). |