Санкт-Петербургский Государственный Технический Университет
Физико-Механический факультет, кафедра Гидроаэродинамики

SVeT homepage

Руководитель проекта

Е.М.Смирнов

Реализация

А.Левченя

Консультации

В.В.Рис

Документация на программу "СВЕТ"

SVeT documentation

ПОСТАНОВКА ЗАДАЧИ
ПРИНЯТЫЕ СОГЛАШЕНИЯ
ВОЗМОЖНОСТИ ПРОГРАММЫ
МАТЕМАТИЧЕСКАЯ БАЗА

ИСПОЛЬЗОВАННЫЕ РАЗРАБОТКИ
АСПЕКТЫ ПРОГРАММИРОВАНИЯ

ФОРМАТЫ ФАЙЛОВ
ИЗМЕНЕНИЯ, ПРОИЗВОДИВШИЕСЯ В ПРОГРАММЕ
ПОДДЕРЖКА И РАСПРОСТРАНЕНИЕ
ЛИТЕРАТУРА

1 марта 2000 года представлена программа, исправляющая сбой в работе пакета SVET на компьютерах Pentium II (здесь можно взять файл, PENT2.RAR, 8K). Утилита PENT2.EXE запускается один раз в каталоге с программой SVET командой PENT2 SVETTV1.EXE.

В виде отдельного файла доступно подробное описание различных функций программы, скомпилированное на основе исходного текста встроенной справочной системы


Постановка задачи
В последние годы на кафедре гидроаэродинамики для компьютерного моделирования двумерных и трехмерных процессов в сплошных средах применяются: пакет программ SINF для решения уравнений переноса, пакет программ визуализации FLAG и другие программы, использующие единые форматы файлов данных и принципы их обработки. В качестве вспомогательных инструментов используются различные программы, также разработанные на кафедре сотрудниками и студентами: генератор двумерных сеток MIG, сервисная программа для работы с двумерными и трехмерными сетками GROT.

Создаваемая программа SVET (Scalar and Vector Tools - скалярно-векторный инструментарий) как часть данного набора программ предназначена для вычисления дифференциальных (градиент, дивергенция, ротор) и интегральных (суммы, средние значения, потоки) величин для полей, заданных на структурированных сетках, а также для выполнения развитого набора алгебраических операций.


Принятые соглашения
Данные задаются на структурированных трехмерных или двумерных сетках, в общем случае криволинейных и неортогональных. Структурированная (упорядоченная по индексам) сетка задается координатами узлов в декартовом пространстве или в меридиональной плоскости, если рассматривается осесимметричное поле. Трехмерная сетка делит рассматриваемую часть пространства на ячейки - восьмивершинники, а двумерная - на четырехугольники.

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

grid types


Возможности программы
Ниже описано основное pull-down меню программы:

Таблица 1

Пункт меню Содержание
file
File - Файловые операции
Просмотр файлов произвольного размера в текстовом окне, редактирование небольших текстовых файлов, смена директории и временный выход в операционную систему
domain
Domain - Расчетная область
Команды управления размерами расчетной области - считывание размеров из внешнего файла и установка ограничений по размерам расчетной подобласти
divcurlgrad
DivCurlGrad - Дифференциальные операции
Дифференциальные операции (градиент, дивергенция и ротор в декартовой и цилиндрической системах координат), переключатель способа задания данных
summ/aver
Integral - Интегральные операции
Суммирование, осреднение, вычисление потока вектора и конвективного потока скаляра
algebra
Algebra - Алгебраические операции
Набор основных линейных и произвольных алгебраических и трансцендентных операций над скалярными и векторными полями
other
Other - Другие операции
Преобразование различных форматов и типов записи сеток и полей, формирование стартовых (с нулевыми значенями функции) полей, ївырезкаї подобластей из сетки/поля
options
Options - Дополнительные возможности
Калькулятор для выполнения промежуточных вычислений, настройка параметров программы
window
Window - Управление окнами экрана
Организация интерфейса программы

Отдельная команда меню Start вызывает начальный диалог программы, где выбирается режим работы - с двумерными или трехмерными данными. Здесь же можно получить доступ к контекстнозависимой гипертекстовой справочной системе программы.

start


Математическая база
Вычислительные формулы

Дифференциальные величины: Таблица 2

differential operations

Суммирование, осреднение и вычисление потоков: Таблица 3

summaring and averaging

Здесь А может быть как скалярной, так и векторной величиной.

Реализация вычислительных формул
Вычисления производятся по следующим формулам:

formulas

где S - поверхность ячейки, - внешняя нормаль, V - объем ячейки.

Интерполяция
Приближенная функция строится в виде f=ax+by+cz+d, коэффициенты a, b, c, d находятся по значениям f в четырех точках пространства с известными координатами. Формула с четным количеством коэффициентов выбрана из соображений симметрии. Интерполяция производится в области размером 2x2x2 ячейки, для которых известны значения величин в центрах. Рассматриваемые ячейки разбиваются на две группы по 4 ячейки таким образом, чтобы в каждой группе все ячейки имели только одну общую угловую точку (на рисунке 2 ячейки одной группы выделены цветом).

interpolation

Рис.2.

Системы линейных алгебраических уравнений решаются методом Гаусса по схеме Жордано без обратного хода. Полученные значения функции f арифметически осредняются.


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

Процедуры, вычисляющие дифференциальные величины, взяты из программы SVADO.

Процедуры суммирования, осреднения и вычисления потоков (далее называемые процедурами пакета AverTool).


Аспекты программирования
Организация программы
Программа реализована в системе программирования Borland Pascal 7.0, работает в защищенном режиме процессора под управлением MS-DOS; использует для расчетов всю доступную оперативную память и, например, при RAM 4Мб позволяет производить вычисления на сетках с более чем 20,000 узлов; максимальный размер сетки ограничен лишь доступной оперативной памятью. Интерфейс программы реализован с помощью объектной библиотеки Turbo Vision 2.0.

Реализация двумерных вычислений
Вычисление дифференциальных величин, суммирование и осреднение, вычисление потоков при использовании двумерных сеток реализовано через вызов соответствующих процедур для трехмерных сеток. С помощью специальных процедур-конвертеров двумерные сетки и поля "растягиваются" в трехмерные (рис.3). Структура данных до и после преобразования показана в таблице 4. После вычислений и обратного преобразования полей в двумерные выводятся полученные результаты.

Рис. 3

Таблица 4

Исх. данныев 2d д.с.к. Преобр. данные в 3d д.с.к. Исходные данные в меридиональной плоскости цилиндрической системы координат Преобразованные данные в цилиндрической системе координат
Значение скаляра в точке u u
u
u
a a
a
a
Значение вектора в точке (u, v) (u, v, 0)
(u, v, 0)
(u, v, 0)
(az, ar) (az, ar, 0)
(az, ar, 0)
(az, ar, 0)
Координаты узла сетки (x, y) (x, y, K*)
(x, y, 0)
(x, y, -K)
(z, r) (z, r, Kr)
(z, r, 0)
(z, r, -Kr)

* Величина K выбирается такой, чтобы полученная "трехслойная" сетка была достаточно тонкой; при необходимости аналогично вышеописанному производится преобразования сетки/поля в четырехслойное.


Форматы файлов
Все данные выводятся в ASCII-файлы. Файлы сеток и полей содержат в первой строке размерности поля в стандартном порядке индексов - I, J, K (если используется). Последующие строки (их число равно произведению указанных размерностей) содержат значения скалярного поля (одно число) или компоненты векторного поля. Возможна работа с двумерными векторами, заданными на двумерной сетке и трехмерными векторами, заданными как на двумерной, так и на трехмерной сетках. Величины в файле располагаются в определенном порядке, обусловленном удобством программирования на языке Фортран: быстрее всех изменяется первый индекс, медленнее - последний (величины, соответствующие ему, располагаются правее). При задании вектора в цилиндрической системе координат роль первой компоненты выполняет высота, роль второй - радиус-вектор.

Далее приведены описания форматов из справки по программам пакета FLAG:

объемная сетка

GRID_FILE contains 3D-grid data in the following format:
the first string :<NI><NJ><NK> (grid size)
next NI*NJ*NK strings: <X><Y><Z>(Cartesian coordinates)

(Here & later I-index rises first)

VECTOR_FILE contains 3D-vector data in the following format:
the first string : :<NI><NJ><NK> (grid size)
next NI*NJ*NK strings: <Vx><Vy><Vz>(vector components)

SCALAR_FILE contains 3D-scalar data in the following format:
the first string : :<NI><NJ><NK> (grid size)
next NI*NJ*NK strings: (scalar value)

плоская сетка

GRID_FILE contains 2D-grid data in the following format:
the first string : <NI><NJ>(grid size)
next NI*NJ strings: <X><Y>(Cartesian coordinates)
(I-index rises first)

VECTOR_FILE contains 2D-vector data in the following format:
the first string : <NI><NJ>(grid size)
next NI*NJ strings: <Vx><Vy>(vector components)

SCALAR_FILE contains 2D-scalar data in the following format:
the first string :<NI><NJ>(grid size)
next NI*NJ strings: <Z>(scalar value)


Изменения, производившиеся в программе

* новая программа
+ добавленные возможности

лето 96

* программа NewSVADO: командная строка, дифференциальные и сервисные операции на трехмерных сетках, выгрузка промежуточных результатов в файлы на диске

* программа SVVT 1.0 (Scalar&Vector Volume Tools): дифференциальные операции по методу контрольного объема, линейная объемная интерполяция, расширение объема производимых сервисных операций

24.7.96

* программа SVET 1.0: работа с двумерными областями

4.8.96

* программа SVET 2.0: самодельный интерактивный интерфейс

+ работа в цилиндрической системе координат

+ расширение функций по алгебраическим преобразованиям полей

16.8.96

+ поддержка и управление файлами пределов

+ сосредоточение файлов, связанных с программой, в одном каталоге с исполняемым файлом

18.4.97

+ работа программы в защищенном режиме процессора

+ процедуры пакета AverTool: суммирование и осреднение, вычисление потоков

10.5.97

+ в текстовых файлах в качестве разделителя может использоваться запятая

+ при выводе протокола в AverTool'е расшифровывается номер поверхности и вычисляются модули векторов

+ возможно вычисление потока вектора

+ поддерживаются трехмерные вектора, заданные на плоскости

+ процедуры AverTool'а работают на двумерных областях

26.5.97

+ два формата вывода - столбчатый и экономичный, преобразование между ними

26.6.97

+ Контроль выделения памяти, корректное завершение последней операции при недостатке памяти

23.2.98

* программа SVET TV-1: интерфейс Turbo Vision - верхнее двухуровневое меню, контекстнозависимые строка состояния и интерактивная гипертекстовая справочная система, окно для вывода протокола и статусно-информационное окно

27.2.98

+ новая структура меню, стартовый диалог, переделан внешний вид программы

22.5.98

+ Вывод протокола в файл SVET.LOG с возможностью настройки: не создавать файл, дописывать данные в конец или создавать новый при запуске программы

+ В протокол при запуске программы выводится дата создания данной версии, дата и время формирования протокола

+ Запоминание установленных опций в файле SVET.CFG (запись и считывание их)

+ Временные файлы программы *.SVT автоматически удаляются из программного каталога по окончании работы с программой

25.5.98

+ возможность просмотра текстовых файлов произвольного размера

+ возможность выбора в конфигурации файла справочной системы

+ редактирование вручную файла конфигурации - он имеет текстовый формат

+ параметр /PRIVATE, по которому становятся доступны дополнительные команды меню

+ по окончании работы с программой производится переход в каталог, из которого программа была запущена

26.5.98

+ новая структура меню

+ вычисление дифференциальных величин в частных случаях двумерной области (цилиндрическая система координат и др.) вынесено в отдельные команды меню

+ контроль за типом данных при расчете дифференциальных величин (FDM и др.) осуществляется специальными командами меню

+ специальная команда включения/выключения поддержки трехмерных векторов, заданных на плоских сетках

+ возможность загрузки сетки прямо перед вычислением дифференциальных величин

+ в протокол при вычислении дифференциальных величин заносится размерность расчетной области и тип данных - FDM или нет

28.5.98

+ корректно работающие, согласованные между собой процедуры управления размерами расчетной области: считывание размеров расчетной области из заголовка файла данных, интерактивное определение пределов по части расчетной области, загрузка сетки

+ усовершенствован алгоритм вычисления координат вновь открываемого окна просмотра или редактирования файла

22.6.98

+ переработана структура меню вычисления дифференциальных операций

+ изменены наименования размерностей и использование этих наименований в статусном окне, диалоге изменения размерности и при выводе протокола вычисления дифференциальных величин

23.6.98

+ структуризация процедуры алгебраических преобразований для ее использования в новом блоке соответствующих команд

+ алгебраические процедуры: сложение скаляра с константой, умножение скаляра на константу, перемножение скалярных полей, умножение вектора на скаляр

+ процедура формирования стартового (нулевого) поля

29.6.98

+ вычисление ротора трехкомпонентного вектора, заданного на двумерной сетке

+ линейные алгебраические операции - сложение/вычитание скалярных/векторных полей

+ покомпонетное формирование поля из одного или нескольких многокомпонентных полей

+ списки предыдущих значений строк ввода интерфейсной части программы сохраняются в файле SYSTEM.CFG (сейчас и далее файл с различной системной информацией программы) перед окончанием и автоматически загружаются в начале следующего сеанса

17.7.98

+ единая процедура перезаписи поля в экономичном или столбчатом формате

20.7.98

+ локальное меню, вызываемое правой клавишей мыши или комбинацией Alt+F10

+ команда просмотра в текстовом окне последнего выводного файла

+ во многие главы справки добавлено описание сообщений об ошибках и предупреждениях, выдаваемых программой

16.9.98

+ масштабирование вектора и сложение вектора с константой (векторной)

17.9.98

+ процедура "вырезки" подобласти из сетки/поля

18.9.98

+ вычисление ротора трехкомпонентного поля в цилиндрической системе координат

23.9.98

+ настройка режима экстраполяции данных при вычислении дифференциальных величин при задании данных в центрах ячеек

+ настройка ширины поля вывода

+ загрузка и сохранение новых настроек в файле конфигурации программы

24.9.98

+ особая проверка размерности исходного поля перед выполнением дифференциальных операций при задании данных в центрах ячеек

10.10.98

+ расширена справочная информация, развита система перекрестных ссылок; в целом, как и ранее, здесь представлена подробная информация обо всех изменениях в программе

+ разработаны и принципиально протестированы (проверены все возможные варианты форматов исходных данных, проведены проверочные вычисления при задании исходными величинами полиномов до второй степени) процедуры, связанные с вычислением дифференциальных величин при задании данных в центрах ячеек:
^ "растягивание" плоского поля в четырехслойное
^ выделение памяти под вычислительные процедуры
^ пре-интерполяция: перенос значений, заданных в центрах ячеек, в середины граней ячеек
^ вычислительные процедуры: градиент, дивергенция, ротор - исходные данные заданы в серединах граней ячеек, получаются значения для центров ячеек
^ пост-экстраполяция - перенос значений вычисленных величин на граничный слой сетки одним из двух способов


Поддержка и распространение
Здесь представлен дистрибутив демонстрационной версии с ограничениями на используемую память (демоверсия обладает всеми возможностями профессиональной версии, но не использует всю доступную память ПК и периодически вылает сообщение о том, что данная версия программы не зарегистрирована). E-mail-адрес автора - levchenya@kudesniki.ru


Литература
При разработке программы использованы следующие материалы:

  1. Гольдфайн И.А. Элементы векторного исчисления. М.: ОГИЗ, 1948.
  2. Епанешников А., Епанешников В. Turbo Vision 2.0. Основы практического использования.- М.: "ДИАЛОГ-МИФИ", 1995.
  3. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0.- 3-е изд., стер.- М.: "ДИАЛОГ-МИФИ", 1995.
  4. Зуев Е. Язык программирования Turbo Pascal 6.0, 7.0.- М.: Веста, Радио и связь, 1993.
  5. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. М.: Наука, 1970.