- •1 Обозначения и сокращения
- •Введение
- •3 Обзор существующих работ
- •4 Постановка задачи
- •5 Метод решения
- •5.1 Расщепление
- •5.2 Адвекция
- •5.3 Проекция
- •6 Выбор метода выполнения этапа проекции
- •7 Полный многосеточный метод
- •8 Реализация этапа проекции
- •8.1 Входные данные
- •8.2 Сглаживатель
- •8.3 Расчёт невязки
- •8.4 Расчёт нормы невязки
- •8.5 Операторы огрубления и пролонгации
- •8.6 Взаимодействие между несколькими gpu
- •8.7 Результаты тестирования и валидации
- •9 Результаты
- •10 Список литературы
8.5 Операторы огрубления и пролонгации
В данной работе используются полновзвешенный (full-weighted) 27-точечный оператор огрубления с билинейной интерполяцией (см Рисунок 5.). Для пролонгации на более точные сетки так же используется оператор билинейной интерполяции (см Рисунок 6). При этом, если узел, в который происходит пролонгация не является рабочим, т.е. является узлом заполненным воздухом или твердым телом, никакие данные в него не записываются, его значение остаётся равным нулю.
Рисунок 5: Веса узлов в операторе огрубления.
Стоит отметить, что, если такой узел находится в зоне огрубления, то при замене значения этого узла на ноль, как например сделано в работе [23], оператор огрубления будет терять часть данных за счёт использования значения того узла, который не будет обновлен при пролонгации. Поэтому в данной работе оператор огрубления был модифицирован – знаменатели дробей, обозначающих вес того или иного узла, при огрублении рассчитываются динамически по следующему алгоритму:
Числители всех весов выставляются равными нулю. Общий знаменатель всех дробей выставляется равным нулю.
Если огрубляемый узел является рабочим, то его числитель приравнивается к единице, деленой на значение коэффициента пролонгации для данного узла, а общий делитель увеличивается на это значение.
Шаг 2 выполняется для всех точек огрубляемой области.
Такой оператор хорош тем, что не меняет сумму всех узлов при последовательном огрублении и пролонгации.
При пролонгации грубого решения на более точную сетку можно заметить, что сама по себе уточненная сетка не используется нигде, кроме сложения ее с приближенным решением на точной сетке. Объединения процессов пролонгации и сложения позволяет сэкономить память на хранении промежуточных данных, а также увеличить производительность за счет использования компилятором инструкций, производящей умножение и сложение за один такт.
Следует обратить внимание на то, что в каждый узел запись производится сразу несколькими потоками. Операция сложения в CUDA по умолчанию не является атомарной, а атомарная выполняется пропорционально количеству одновременных вызовов. Данную проблему можно обойти правильной последовательностью выполнения сложений – например, сначала сложить все узлы, находящиеся в верхних половинах пролонгируемых областей, затем в левых, затем произвести синхронизацию потоков и выполнить сложения для правых, а затем и нижних частей.
Кроме того, можно заметить, что часть узлов будет обновлено сглаживателем сразу же после пролонгации, а их значения не будут использованы. В данном случае это будут все узлы, помеченные для сглаживателя, как «красные» (см Рисунок 6), соответственно для увеличения производительности при пролонгации, вообще, не следует обновлять эти узлы.
Рисунок 6: Коэффициенты оператора пролонгации. Цветами отмечена "раскраска" узлов точной сетки.
Типы ячеек при огрублении определяются следующим образом:
Если хотя бы один узел в зоне огрубления содержит граничное условия Дирихле (ячейка заполнена воздухом либо задаёт константный поток газа на границе), то полученный узел считается так же имеющим условие Дирихле.
В противном случае, если в зоне огрубления есть хотя бы один рабочий узел (узел с газом), то полученный узел так же считается рабочим.
В остальных случаях узел считается выколотым (твердое тело).
Такой подход хорош тем, что на грубых сетках процент выколотых областей будет уменьшаться, а расчётных – увеличиваться (см. Рисунок 7). Это позволяет производить вычисления вплоть до самого грубого уровня.
Рисунок 7: Внешний вид маски расчётной области на сетках 129*129*129, 65*65*65 и 33*33*33 соответственно. Синим обозначены рабочие узлы, зеленым узлы с нулевыми граничными условиями Дирихле, красным - твердый объект с условиями Неймана на границе.
