Для стационарных и нестационарных задач со свободными границами характерен однотипный алгоритм расчета, блок-схема для которого приведена на рис. 64. В начальный момент времени известна геометрия границы расчетной области, на части которой задан потенциал, а на другой части – функция тока. Далее на каждом временном шаге (в случае нестационарной задачи) или на каждой итерации (в случае стационарной задачи) производится вычисление интегралов, подстановка граничных условий (построение СЛАУ), решение СЛАУ (методом Гаусса с выбором ведущего элемента или методом Якоби), вычисление компонент вектора скорости, интегральных характеристик (энергии, массы и т.п.), значений искомой функции во внутренних узлах области (при необходимости). В случае нестационарной задачи производится выбор шага по времени. Далее находится новое положение свободной границы и распределение потенциала на ней. Остановка процесса расчета производится по какому-либо заранее заданному условию. Это может быть, например, превышение максимального момента времени (для нестационарных задач) либо достижение заданной точности расчета (для стационарных задач).
В ходе вычислений через заданное число временных шагов результаты записываются в файл для обеспечения возможности их дальнейшей обработки или возобновления расчета после прерывания.
Ввод исходных данных
Для выполнения расчета необходимы следующие граничные и начальные данные:
- узловые координаты точек
границы области жидкости;
- тип граничного условия в
-м узле границы, если
, то в узле задан потенциал, если
- функция тока;
- заданное значение потенциала или функции тока в
-м узле границы.
Файл данных создается с помощью препроцессора ”Akord” (описание препроцессора ”Akord” и форматов файлов данных подробно приведено в [4- 6]) и имеет блочную структуру: в блоке [MAIN] содержится информация о связности расчетной области и количестве граничных точек; [TIME] – максимальный и минимальный шаг по времени (эти параметры используются для решения нестационарной задачи); [PHISICAL] – точность вычислений (используется при решении стационарной задачи); [NODES] – номер граничной точки по порядку, узловые координаты точки, тип граничного условия, значение задаваемой в данной точке функции; [SPECIAL] – порядковые номера точек, необходимые для проведения расчета; [SERG] – пользовательский блок для задания непредусмотренных параметров (при решении стационарной задачи используется для задания безразмерного параметра V). На рис. 63 приведен пример файла данных с сокращениями в блоке [NODES].
Распараллеливание этого блока не требуется, так как ввод всех необходимых начальных и граничных данных происходит во время расчета лишь один раз. Для избежания межпроцессорных пересылок считывание данных целесообразно осуществить на каждом процессоре вычислительного комплекса.
Вычисление интегралов
На этом шаге алгоритма формируется СЛАУ, то есть матрица
размерностью
и вектор правой части
. Следует привести некоторые соображения: каждая строка
результирующей матрицы
строится независимо от других, следовательно, степень
параллелизма данного блока алгоритма максимальна и равна
. На этом этапе использовалось блочное распределение строк матрицы
по процессорам для ее дальнейшего решения.
Решение СЛАУ
Для решения СЛАУ применяется метод Якоби.
[MAIN]
1 ; Problem Size
499 ; Total node number
1 ; Regions number
0 ; Internal node numbers
[TIME] PARAMETERS
0.001000 ; Max Time Step
0.001000 ; Min Time Step
[PHISICAL] PARAMETERS
0.000001 ; Estimate
[NODES] POINTS
1 -1.3000000000e+01 +0.0000000000e+00 1 +0.000000
2 -1.2825503356e+01 +0.0000000000e+00 1 +0.000000
…
149 +1.2825503356e+01 +0.0000000000e+00 1 +0.000000
150 +1.3000000000e+01 +0.0000000000e+00 1 +0.000000
151 +1.3000000000e+01 +5.0000000000e-02 1 +0.050000
…
169 +1.3000000000e+01 +9.5000000000e-01 1 +0.950000
170 +1.3000000000e+01 +1.0000000000e+00 0 +1.000000
171 +1.2916129032e+01 +1.0000000000e+00 0 +1.000000
…
324 +8.3870967742e-02 +1.0000000000e+00 0 +1.000000
325 -9.2981178312e-16 +1.0000100000e+00 0 +1.000000
326 -8.3870967742e-02 +1.0000000000e+00 0 +1.000000
…
479 -1.2916129032e+01 +1.0000000000e+00 0 +1.000000
480 -1.3000000000e+01 +1.0000000000e+00 1 +1.000000
481 -1.3000000000e+01 +9.5000000000e-01 1 +0.950000
…
499 -1.3000000000e+01 +5.0000000000e-02 1 +0.050000
[SPECIAL] POINTS
1 150 NN
1 170 NR
1 480 NL
[SERG]
0.9
Рис. 63. Пример структурированного файла данных
Построение результирующей функции
Результат решения СЛАУ в результате применения метода Якоби для ее решения распределен по процессорам, построение результирующей функции осуществляется одновременно на всех процессорах.
Обозначим вектор решения через
,
- действительная и мнимая части результирующей функции,
соответственно. Суть построения результирующей функции заключается в следующем:
a) если в
-м узле задан потенциал, то есть
, то вещественная часть результирующей функции равна заданному
граничному условию, то есть
, а мнимая часть равна компоненте вектора решения -
b) если в
-м узле задана функция тока, то есть
, то мнимая часть результирующей функции равна заданному
граничному условию, то есть
, а вещественная часть равна компоненте вектора решения -
Этот блок алгоритма занимает ничтожную по времени часть всего алгоритма, поэтому специально заботиться о его распараллеливании не имеет смысла.
Вычисление скоростей (для нестационарной задачи)
На этом шаге алгоритма по известным узловым координатам
и найденным действительным и мнимым частям функции
комплексного потенциала
вычисляются узловые компоненты вектора скорости
.
Степень параллелизма этого блока тоже максимальна и равна
.
При распараллеливании следует учесть, что массивы
уже имеются на каждом процессоре, дополнительно следует
разослать лишь
,
если было произведено распараллеливание предыдущего блока.
Выбор шага по времени (для нестационарной задачи)
В случае решения нестационарной задачи требуется
осуществлять выбор шага по времени. Для его определения необходимы следующие
величины:
-
длина максимального граничного элемента свободной границы,
-
длина минимального элемента,
-
модуль максимальной скорости частиц. Данный блок можно было
бы распараллелить, используя алгоритм сдваивания, но так как по времени он
занимает малую долю всего расчета, то его распараллеливания не производилось.
Рис. 64. Блок-схема алгоритма расчета
Перестройка свободной границы
В случае нестационарной задачи новое положение свободной
границы и распределение потенциала на ней находится по схеме Эйлера. Для
реализации этого блока алгоритма необходимы следующие данные:
.
Если в результате предыдущих пунктов алгоритма все
массивы целиком хранятся на каждом процессоре, то распараллеливание этого блока
можно не проводить (реализация этого пункта не занимает много расчетного
времени). Если же распараллеливание предыдущих пунктов производилось, то
распараллеливание данного блока обусловлено хранением
на процессорах. Степень параллелизма этого блока тоже
максимальна и равна
.
В случае стационарной задачи перестройка свободной границы
осуществляется из условия того, что искомая граница является линией тока,
распределение потенциала на новой границе определяется из интеграла Бернулли.
Рассуждения по необходимым данным для выполнения итерации аналогичны случаю
нестационарной задачи.
Если было произведено распараллеливание этого блока, то для
перехода на новую итерацию необходимо разослать на все процессоры следующие
данные:
-
новое положение свободной границы и распределение
потенциала на ней.
Печать результатов
Так как при реализации предыдущих пунктов все необходимые данные хранятся на каждом процессоре, то печать промежуточных результатов можно осуществить на любом процессоре.
Проверка условия останова
В случае нестационарной задачи условием останова итерационного процесса может служить ограничение по времени, проверка которого может быть проведена на любом процессоре. В случае стационарной задачи критерием останова итерационного процесса является:
,
где
обозначает номер итерации. Для поиска максимума отклонения
свободной границы от ее положения с предыдущей итерации необходимо позаботиться
о сохранении ординат свободной границы с предыдущего шага итерации.
Рис. 65. Листинг управляющего блока фортран-программы для реализации алгоритма решения стационарной задачи
Рис. 66. Листинг управляющего блока фортран-программы для реализации алгоритма решения нестационарной задачи
Рис. 67. Листинг подпрограммы для реализации алгоритма формирования СЛАУ (общий для стационарной и нестационарной задачи)
Рис. 68. Листинг подпрограммы для реализации алгоритма решения СЛАУ методом простой итерации (общий для стационарной и нестационарной задачи)
Рис. 69. Листинг подпрограммы для реализации алгоритма вычисления скоростей (используется при решении нестационарной задачи)
Рис. 70. Листинг подпрограммы для реализации алгоритма вычисления интегральных характеристик (используется при решении нестационарной задачи)