Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Новиков. Магистерская диссертация.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
523.12 Кб
Скачать

8.5 Операторы огрубления и пролонгации

В данной работе используются полновзвешенный (full-weighted) 27-точечный оператор огрубления с билинейной интерполяцией (см Рисунок 5.). Для пролонгации на более точные сетки так же используется оператор билинейной интерполяции (см Рисунок 6). При этом, если узел, в который происходит пролонгация не является рабочим, т.е. является узлом заполненным воздухом или твердым телом, никакие данные в него не записываются, его значение остаётся равным нулю.

Рисунок 5: Веса узлов в операторе огрубления.

Стоит отметить, что, если такой узел находится в зоне огрубления, то при замене значения этого узла на ноль, как например сделано в работе [23], оператор огрубления будет терять часть данных за счёт использования значения того узла, который не будет обновлен при пролонгации. Поэтому в данной работе оператор огрубления был модифицирован – знаменатели дробей, обозначающих вес того или иного узла, при огрублении рассчитываются динамически по следующему алгоритму:

  1. Числители всех весов выставляются равными нулю. Общий знаменатель всех дробей выставляется равным нулю.

  2. Если огрубляемый узел является рабочим, то его числитель приравнивается к единице, деленой на значение коэффициента пролонгации для данного узла, а общий делитель увеличивается на это значение.

  3. Шаг 2 выполняется для всех точек огрубляемой области.

Такой оператор хорош тем, что не меняет сумму всех узлов при последовательном огрублении и пролонгации.

При пролонгации грубого решения на более точную сетку можно заметить, что сама по себе уточненная сетка не используется нигде, кроме сложения ее с приближенным решением на точной сетке. Объединения процессов пролонгации и сложения позволяет сэкономить память на хранении промежуточных данных, а также увеличить производительность за счет использования компилятором инструкций, производящей умножение и сложение за один такт.

Следует обратить внимание на то, что в каждый узел запись производится сразу несколькими потоками. Операция сложения в CUDA по умолчанию не является атомарной, а атомарная выполняется пропорционально количеству одновременных вызовов. Данную проблему можно обойти правильной последовательностью выполнения сложений – например, сначала сложить все узлы, находящиеся в верхних половинах пролонгируемых областей, затем в левых, затем произвести синхронизацию потоков и выполнить сложения для правых, а затем и нижних частей.

Кроме того, можно заметить, что часть узлов будет обновлено сглаживателем сразу же после пролонгации, а их значения не будут использованы. В данном случае это будут все узлы, помеченные для сглаживателя, как «красные» (см Рисунок 6), соответственно для увеличения производительности при пролонгации, вообще, не следует обновлять эти узлы.

Рисунок 6: Коэффициенты оператора пролонгации. Цветами отмечена "раскраска" узлов точной сетки.

Типы ячеек при огрублении определяются следующим образом:

  1. Если хотя бы один узел в зоне огрубления содержит граничное условия Дирихле (ячейка заполнена воздухом либо задаёт константный поток газа на границе), то полученный узел считается так же имеющим условие Дирихле.

  2. В противном случае, если в зоне огрубления есть хотя бы один рабочий узел (узел с газом), то полученный узел так же считается рабочим.

  3. В остальных случаях узел считается выколотым (твердое тело).

Такой подход хорош тем, что на грубых сетках процент выколотых областей будет уменьшаться, а расчётных – увеличиваться (см. Рисунок 7). Это позволяет производить вычисления вплоть до самого грубого уровня.

Рисунок 7: Внешний вид маски расчётной области на сетках 129*129*129, 65*65*65 и 33*33*33 соответственно. Синим обозначены рабочие узлы, зеленым узлы с нулевыми граничными условиями Дирихле, красным - твердый объект с условиями Неймана на границе.