Джордж, Лю - Численное решение больших разреженных систем уравнений (947498), страница 49
Текст из файла (страница 49)
Во всяком случае, всегда можно выбрать подпрограмму, наиболее подходящую для данной ситуации. Пакет позволяет смешанное использование подпрограмм при вводе структуры матрицы. БРА!!ЗРАК автоматически устраняет дублирование, так что пользователю не нужно беспокоиться по поводу возможного повторного ввода пар индексов Когда все пэры введены посредством одной подпрограммы либо комбинации нескольких, пользователь должен явно указать это пакету, вызвав посредством оператора СА1.1.
1ЛЕНР (Ь) подпрограмму 1,!ЕН(л. Назначение подпрограммы — преобразовать данные из формата, использовавшегося в фазе записи, в стандартный формат (ХАЭЛ, АШМСУ), используемый всеми подпрограммами этой книги. Пользователь никак не связан с этим входным представлением или процессом преобразования.
4 В т кратное описиние основнвгх подпрограим интерфейса Зтт В.4.2. Модули для упорядочения и распределения памяти Когда внутреннее представление структуры ненулевых элементов матрицы получено, ЯРАКЯРАК готов к переупорядочению задачи, Пользователь инициирует этот процесс, вызвав подпрограмму упорядочения, название которой имеет вид ОКРЙхй Здесь 4' — цифра от 1 до 6, указывающая метод хранения; х— буква, обозначающая стратегию упорядочения (см. рис.
В.3.1). Подпрограмма ОЕРЯх! определяет упорядочение, а затем формирует структуру данных для переупорядоченной задачи. Теперь пакет готов к вводу числовых значений. В.4.3. Модули для ввода числовых значений Модули этой группы аналогичны модулям для ввода струн- туры матрицы, Они дают средства для передачи пакету реаль- ных числовых значений коэффициентов системы. Так как струк- туры данных для разных методов хранения различны, то пакет должен иметь свою подпрограмму ввода матрицы для каждого метода, Названия этих подпрограмм различаются лишь послед- ним символом — цифрой, определяющей метод; списки парамет- ров для всех методов одинаковы.
Имеются три способа передачи числовых значений пакету. Во всех трех индексы вводимых элементов соответствуют исход- ной задаче. Пользователю не нужно беспокоиться о перестанов- ках, которые могли произойти на этапе упорядочения. а) Ввод ненулевого элемента, Для этой цели служит подпрограмма 1ИА13 1, вызываемая оператором САН. 1ХА13 4 (1, 3, ЧАШЕ, 8), где 1 и 3 — индексы элемента, ЧАШŠ— его числовое значение. Вместо присваивания подпрограмма 1!)А1Л прибавляет ЧАШЕ к текущему значению элемента ач, находящемуся в памяти. Такой образ действий учитывает ситуации (встречающиеся, например, в конечноэлементных приложениях), когда числовые значения коэффициентов получаются в результате накопления. Например, в результате выполнения операторов 1ХА1) 2 (3, 4, 9.5, $) 15)А13 2 (3, 4, — 4.0, 8) значением элемента аг4 будет число 5.5.
б) Ввод ненулевых элементов строки Для ввода числовых значений элементов строки или части строки можно воспользоваться подпрограммой 15)КОВАЧ. Опера- 318 Приложение В БРАКЯРАК Пакет длн разреженных матриц тор вызова этой подпрограммы аналогичен оператору вызова подпрограммы 1НКО% (см. раздел В.4.1): СА1Л. 1ККО%1 (1, 1чИ, И, ЧА1.БЕЗ, Я). Дополнительная переменная ЧАИ)ЕЗ вЂ” это идентификатор массива, содержащего числовые значения ненулевых элементов строки. И здесь числовые значения добавляются к тем, что в данный момент находятся в памяти, в) Ввод подматрвцы Подпрограмма ввода подматрицы называется 1НМАТь Оператор вызова для нее соответствует оператору вызова подпрограммы 1Н1Л,), за исключением дополнительного параметра ЧАШЕЗ вЂ” идентификатора массива, хранящего числовые значения ненулевых элементов: СА1Л. !ИМАТ! (ЫЗ, 11, )), ЧАШЕЗ, 3).
И снова числа из ЧА(.1)ЕЗ прибавляются к текущим значениям, хранимым пакетом. Разрешается смешанное использование подпрограмм 1НА1Л, 1Н)101Ч! и !АМАТЕ Пользователь может выбирать наиболее удобные для него подпрограммы. Те же удобства предоставляются и при вводе правых частей системы, В пакете имеется подпрограмма 11йВ1, которая вводит одну компоненту вектора Ь Оператор вызова— СЛ1.1. 1ЫВ! (!, ЧЛ11)Е, 3). Здесь 1 — индекс компоненты, ЧАИ)Š— ее числовое значение. Для ввода подвектора можно воспользоваться подпрограммой 1г1В!В1, оператор вызова которой— СА1Л. 1НВ1В! (141, П, ЧАПАЕВ, 3), где 11 и ЧЛ(.1)ЕЗ вЂ” векторы, содержащие соответственно индексы и числовые значения.
В обеих подпрограммах'> значения элементов вычисляются путем накопления. В тех случаях, когда вектор Ь известен полностью, пользователь может обратиться к подпрограмме 1НКНЗ, которая передает пакету весь этот вектор. Оператор вызова— СА1Л. 1НКНЗ (КНЗ, 3), где 1(НЗ вЂ” вектор, содержащий числовые значения. Во всех трех подпрограммах задаваемые числа прибавляются к тем, что в данный момент хранятся пакетом; использование подпрограмм может быть смешанным. При первом обращении ') 1ХВ! н 1ХВ!В!, — Прим перее. э" Вб. Средства для ваяоминания и возобновления З19 к какой-либо из них пакетом устанавливается нулевое начальное состояние массива, отведенного для хранения Ь. В.4.4 Модули для разложения и решения Вычисление решения системы иннциируется оператором СА).1 50(.ЧЕ( (Б), где Ь вЂ” рабочий массив, используемый пакетом.
Последний символ — цифра 1 — снова используется для различения подпрограмм, относящихся к различным методам хранения. Подпрограмма $0(.ЧЕ( включает в себя и этап разложения, и этап решения треугольных систем. Если разложение было произведено при предыдущем вызове ЯО(.ЧЕК то пакет автоматически опускает этап разложения и прямо переходит к решению треугольных систем. Вычисленный вектор решения размещается в первых МЕЯ)м5 позициях вектора 8. Если обращение к ЬО(.ЧЕ( происходит еще до ввода правых частей, то выполняется только разложение.
В качестве решения выдается нулввой вектор, й В.б. Средства для запоминания и возобновления ЯРАКЗРАК содержит две подпрограммы, называемые ЬАЧЕ и КЕБТКТ, которые позволяют пользователю прервать вычисления в желаемом месте, запомнить результаты (в виде последовательного файла) на внешнем накопителе, а потом, некоторое время спустя, возобновить счет с места прерывания. Для запоминания результатов, вычисленных до момента прерывания, пользователь выполняет оператор САЕК ЪАЧЕ(К, $) где К вЂ” логический номер накопителя, куда нужно записать результаты вместе с другой информацией, необходимой для возобновления вычислений. Если вычисления затем прекращаются, то в дальнейшем состояние процесса можно восстановить с по.
мощью оператора САЕК КЕЬТКТ(К, 8). Если обнаружена ошибка, препятствующая продолжению вычислений, то переменной !ЕКК присваивается положительное значение. Чтобы убедиться в правильности выполнения модуля, пользователю достаточно проверить значение 1ЕКК. Индикатор ошибки совместно со средствами запоминания/возобновления можно использовать для сохранения результатов успешно В20 Лрилоыеение В. БРАВЯРАК: Пакет длн рааренееннмх натрия завершенных этапов процесса. Это иллюстрируется следующим фрагментом программы: САЬЕ ОИОИА1(5) 1Г (1ЕИИ.ЕО.О) СО ТО 100 САЬЕ 5АЧЕ(З 5) 5ТОР 100 сомттмои другой возможный вариант использования модулей ОА)(Е и ттЕЬТ1тТ вЂ” это возврат пользователю управления рабочим массивом 8 еще до окончания разреженных матричных вычислений. После выполнения подпрограммы $АЪ'Е массив Я можно использовать для друтих целей.
й В.6. Решение многих систем с одинаковой структурой или одинаковой матрицей коэффициентов В некоторых приложениях приходится решать большое число систем с одинаковой структурой разреженности, но разными зна- Рис, И.Ф.(, Елок-схема, иллюстрируюи(аи исоольвование ЗРАРБРАК иря решении многих систем с одинаковой структурой. чениями коэффициентов. Пакет очень легко приспосабливается к этой ситуации. Нужная управляющая последовательность й В.б. Решение многих систем с одинаковоЮ структурой Зй! изображена блок-схемой рис. В.б.1. Когда после выполнения подпрограммы ВОБЛ'Е! в первый раз происходит обращение к подпрограммам ввода числовых значений (1МА!3 1, !г!В1 н т. д.), пакет замечает зто н устанавливает нулевое начальное (2) рис. П.В.2. Блок-схемы, иллюстрирующие использование БРАКБРАК при решении многих систем с одинаковой матрицей коэффициентов, но разными правыми частями.
состояние на пространстве памяти, отведенном для ~(ранения А и Ь. Отметим, что если такую совокупность систем приходится решать в течение продолжительного периода времени (т, е. в разных выходах на машину), то пользователь может после выполнения ОКРКх! обратиться к ЬАУЕ, что позволяет избежать ввода структуры А и вызова ОКРКх! при решении последующих систем. В других приложениях встречается необходимость решения ряда систем, различающихся лишь правыми частями. В таких 322 Приложение В оРАПЗРАК: Пакет длн раереженнетх матриц случаях достаточно один раз разложить матрицу А, после чего ее множители используются для вычисления вектора и для каждого очередного Ь. И к этой ситуации пакет приспосабливается очевидным образом, как показывают блок-схемы рисунка В.6.2. Когда ВРАВВРАК используется в соответствии с блок-схемой (1) на рис.