Предложен параллельный алгоритм переменного шага на основе (2,1)-метода. В предлагаемом параллельном алгоритме изменение величины шага построено на основе контроля точности численной схемы.
В настоящее время одним из основных параметром, характеризующих эффективность использования вычислительной техники в науке и технологии, являются математические модели и численные методы, применяемые при создании программ для реализации исследований и расчетов по этим моделям. Моделирование процессов во многие важных приложениях приводит к необходимости численного решения задачи Коши для умеренно жестких систем обыкновенных дифференциальных уравнений [1, 2].
Рассматривается задача Коши для автономной системы обыкновенных дифференциаль ных уравнений первого порядка
(1)
где y:[t0, tk] → RN, f:[t0, tk]×RN → RN, [t0, tk] - отрезок интегрирования. Для численного решения (1) применим схему (2,1)-метода
(2)
где коэффициенты a, p1 и p2 определяют свойства точности и устойчивости схемы (2), h - шаг интегрирования, fn′ = ∂f(yn)/∂y - матрица Якоби системы (1). Будем считать, что (1) имеет единственное решение. Пусть известны условия для контроля точности вычислений, именно p1 + p2 = 1 и ap1 + 2ap2 = 0,5, . Изменение величины шага основано на оценке локальной ошибки δn. Учитывая соотношение, , новый шаг hnew определяем по формуле hnew = qh, где значение q находится из уравнения q2||δn|| = ε. Если q < 1, то осуществляем повторное вычисление решения с шагом h = hnew. При q > 1 выполняем следующий шаг интегрирования с шагом hnew. Введем функции Par_LU_Decompos(), Par_LU_Solution(), реализующие декомпозицию матрицы Dn и нахождение векторов , . Для контроля точности численной схемы (2) введем функцию accur_control (), для выполнения которой назначим процессор proc(1). Параллельный алгоритм вычисления приближенного решения y(n+1) переменного шага формулируем следующим образом.
Алгоритм. Пусть для численного решения системы (1) используется (2.1)-метод с контролем точности, и известно решение y(n) в точке tn с шагом hn. Тогда для получения значения y(n+1) в точке tn+1 справедлив параллельный алгоритм, в котором на каждом процессоре proc(j) формируется своя j-я часть вектора решения.
Шаг 1. В каждом proc(j), 1 ≤ j ≤ p; (j-1) s + 1 ≤ sj ≤ j⋅s: выполнить recv(, h; 1,..., p), вычислить и матрицу Якоби Jj, 1 ≤ j ≤ p.
Шаг 2. Сформировать матрицу .
Шаг 3. Разложить матрицу Dn, Dn = Par_LU_Decompos().
Шаг 4. Вычислить ,
.
Шаг 5. Вычислить ,
Шаг 6. В каждом proc(j), 1 ≤ j ≤ p;
(j-1)⋅s +1 ≤ sj ≤ j⋅s:
определить
,
и выполнить .
Шаг 7. В proc(1): выполнить accur_control () и, если необходимо, вывести вектор y(n+1).
Шаг 8. В каждом proc(j), 1 ≤ j » p;
(j-1)⋅s +1 ≤ sj ≤ j⋅s:
вычислить
и выполнить .
Шаг 9. Выполнить следующий шаг интегрирования.
Как показывают теоретические и практические расчеты, выполняемые на кластере ИВМ СО РАН [3] показывают, что основные вычислительные затраты связаны с реализацией
LU-факторизации и последующем решении систем для определения шаговых коэффициентов.
Работа выполнена при финансовой поддержке РФФИ проект №11-01-00106.
Список литературы
- Новиков Е.А. Явные методы для жестких систем. - Новосибирск: Наука, 1997.
- Хайрер Э., Ваннер Г. Решение обыкновенных дифференциальных уравнений. Жесткие и дифференциально-алгебраические задачи. - М.: Мир, 1999.
- Исаев С.В., Малышев А.В., Шайдуров В.В. Развитие Красноярского центра параллельных вычислений // Вычислительные технологии. - 2006. - №11. - С. 28-33.