Разработка программного средства визуализации и анимации сеточных данных нестационарных многомерных расчетов ClcView

М.В.Абакумов

Обтекание цилиндра дозвуковым потоком вязкого газа - пример анимации

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

Итак, отправной точкой при проектировании и реализации программы визуализации является необходимость осуществлять постобработку результатов трехмерного (или двумерного) нестационарного расчета на неравномерной ортогональной сетке в декартовой, цилиндрической или сферической геометрии. Результатом такого расчета в общем случае является набор сеточных функций, полученный на некоторые последовательные моменты времени. Эти трехмерные сеточные функции (скалярные или векторные) собственно и подлежат визуализации. А поскольку сформировавшиеся стандарты построения изображения трехмерных функций по-прежнему отсутствуют, автором рассматривается лишь задача построения изображений их сечений при фиксированном индексе по одной из переменных, то есть двумерных сеточных функции в полярной или декартовой геометрии. В этом случае общепринятыми методами изображении являются построение линий уровня и цветовая «заливка». Векторное поле обычно отображается совместно с линиями уровня в виде направленных стрелок, длина которых соответствует модулю вектора. Несмотря на то, что методы отображения функции и векторного поля на плоскости достаточно хорошо разработаны, задача эффективной реализации таких методов c учетом новых возможностей, предоставляемых операционными системами семейства Win32, не перестает быть актуальной.

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

1. Реализовать эффективный метод построения линий уровня совместно с картиной векторного поля по двумерным сеточным данным, а также «быстрой» цветовой заливки.

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

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

4. Обеспечить пакетную обработку данных нестационарного расчета на последовательные моменты времени, в том числе путем генерации видео формата MPEG4.

В ходе данной работы автором была разработана и реализована программа визуализации (ClcView), удовлетворяющая всем сформулированным в постановке задачи требованиям. Программа универсальна в том смысле, что позволяет осуществить настройку на файлы данных конкретного расчета. После настройки программа позволяет выбирать из файлов данные, необходимые для ее работы, и строить картину линий уровня (совместно с картиной векторного поля) заданных сечений трехмерных сеточных функций в декартовой или полярной геометрии. За основу метод построения линий уровня был взят известный алгоритм «квадродеревьев», отличающийся высокой надежности. Однако этот алгоритм был модифицирован. В ходе модификации было минимизировано число обращений к вычислению значений сеточной функции, что существенно уменьшило временные затраты на работу алгоритма. Кроме того, была решена задача идентификации линий уровня (постановки меток уровня на каждой связной части линии), которая в базовом алгоритме даже не рассматривалось. Для этого был предложен метод «сборки» связных кривых (ломаных) из неупорядоченного набора отрезков линии уровня, полученного в ходе работы базового алгоритма. Это, помимо прочего, позволило существенно (в 10-50 раз в зависимости от конкретного случая) повысить скорость прорисовки линий уровня за счет использования стандартной процедуры Win32, осуществляющей рисование ломаной целиком, что гораздо быстрее, чем рисование ломаной по отдельным отрезкам, ее составляющим.

Эффективность построения линий уровня и цветовой «заливки» (о ней речь пойдет далее) напрямую зависят от эффективности вычисления значений функции двух непрерывных аргументов, построенной на основе интерполяции двумерной сеточной функции. Было показано, что использование билинейной интерполяции после некоторой оптимизации, позволяет затрачивать на вычисление такой функции всего 5 умножений (причем показатель не улучшаемый), если не брать в расчет затраты на поиск индексов ячейки двумерной сетки в которую попадают значения непрерывных аргументов. Однако, как показало тестирование, простейший переборный алгоритм поиска индекса уже на сетках порядка 100x100 занимает больше времени, нежели вычисления. Поэтому, для поиска индекса был предложен дискретный вариант метода половинного деления, что позволило уменьшить общее время на вычисление функции на порядок уже на сетках 200x200. Для более подробных сеток этот показатель выглядит еще более впечатляюще, что не удивительно, поскольку метод половинного деления обладает «степенной скоростью сходимости».

Существенные усилия также были также предприняты в ходе разработки методики цветовой «заливки». Несмотря на кажущуюся простоту этого способа визуализации функции и тривиальность алгоритма его реализации, оказывается, что осуществлять процесс «заливки», не такая уж простая задача. Цветовую заливку можно разделить на два процесса: вычисление цвета пикселя и прорисовку, то есть окрашивание пикселя устройства в определенный цвет. Вычисления сводятся к пересчету целочисленных координат пикселя в «физические» (2 умножения), вычислению значение функции в точке с полученными «физическими координатами (5 умножений и поиск индекса) и выбор цвета в палитре заливке по значению функции (1 умножение). Эти показатели улучшить не представляется возможным. Прорисовка же при использовании простейшего ее варианта (использование стандартной процедуры Win32 окрашивания пикселя), как показало тестирование, занимает 80% времени необходимого на заливку в целом. Это обстоятельство потребовало поиска более эффективных вариантов прорисовки. Соответствующая методика была разработана на основе использования аппаратно независимых растров Win32 (DIB) и прямого доступа к битам данных, представляющих пиксели. Изображение изначально генерировалось в растре, расположенном в оперативной памяти, после чего готовое изображение копировалось на устройство, используя соответствующие функции Win32, обладающие высокой скоростью работы. Такой подход позволил снизить временные затраты на прорисовку в 200 раз и увеличить скорость заливки в целом в 5 раз. При этом следует отметить, что итоговая эффективность определяется исключительно вычислениями, об оптимизации которых говорилось выше, и вряд ли может быть улучшена.

Для обеспечения операций над изображением в ходе работы был предложен общий метод «сдвоенного окна» изображения данных, заданных своими «физическими» координатами на плоскости. Этот метод основан на возможности Win32 блокировать вывод за рамками заданной прямоугольной области на устройстве (clipping). При этом указанная блокировка поддерживается аппаратно, и фактически не требует дополнительных временных затрат. Разработанный метод позволил формализовать и эффективно реализовать все необходимые операции, а именно масштабирования, прокрутку (скроллинг), копирования видимой части изображения с одного устройства в окно на другом с полным использованием разрешающей способности последнего. К операции копирования, в частности, сводится печать изображения на принтер или сохранение его в графический файл (программа поддерживает форматы BMP, WMF, PCX и JPEG).

Как уже отмечалось, формат файла данных подлежащий обработке должен быть достаточно универсален и подходить для хранения данных временного слоя произвольного трехмерного расчета. Это позволит при проведении вычислений избежать двойного сохранения данных, то есть сохранения данных отдельно для вычислительных нужд и нужд программы визуализации. Кроме того, структура этого файла должна быть максимально простой для обеспечения быстрого доступа к хранящимся в нем данным. Такая структура файла данных была предложена и опробована на примерах расчетов задач об аккреционном диске двойной звездной системы в двумерной и трехмерной постановке, задаче о развитии неустойчивости в аккреционном диске и ряда других. Простота предложенного формата позволила, в частности, организовать быстрое считывание данных, используя буферизацию. Тестирование показало, что использование функции доступа к файловым данным Win32 с промежуточной буферизацией, хотя и требует дополнительных усилий в реализации чтения, дает прирост скорости в 50 раз по сравнению с вариантом, когда буферизация не производится. Это в итоге позволяет существенно повысит общее быстродействие пакетной обработки данных, о которой речь пойдет далее.

В ходе потоковой обработки задается набор файлов данных результатов расчета, соответствующий последовательным моментам времени, после чего без дальнейшего вмешательства пользователя либо строится последовательность изображений заданных сечений сеточных функций сохраняемая в графические файлы, либо генерируется видео в формате MPEG4, сохраняемое в файл AVI. При этом усилия по повышению эффективности обработки данных на отдельных этапах позволили при генерации полноформатного видео (720x576 – формат PAL) по данным расчета на подробных сетках получить итоговую производительность 3-6fps (frame per second) на процессоре P4-2800. Этот показатель в некотором смысле является сравнимым с генерацией видео «в реальном времени», если за таковое принять значение частоту 25fps воспроизведения видео в формате PAL. Здесь надо учесть, что программы видеосжатия или кодеки (сокращение от coder-decoder), используемые при генерации видео в формате MPEG4, сами зачастую работают медленнее этого значения, а временные затраты на их выполнения также входят в итоговое время генерации видео.