Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Государственный комитет РФ по высшему образованию.
Московский Государственный Институт Электронной Техники (Технический Университет).
Факультет ЭКТ.
Кафедра ПКИМС.
на тему
«Визуализация инженерных и научных расчетов»
Москва 2002г.
Оглавление
Введение
Раздел 1. Специальный раздел. Создание средств визуализации научных и инженерных расчетов.
Введение
Заключение
Раздел 2. Технологический раздел. Технология создания программного обеспечения для визуализации.
Введение.
.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.
.2 Постановка задачи.
.3 Создание структуры данных и интерфейса с расчетной программой.
.4 Построение математической модели отображаемой информации.
.4.1 Использование готовых библиотек.
.4.2 Построение собственных математических моделей.
.5. Создание интерфейса пользователя.
Заключение.
Раздел 3. Организационно-экономический раздел. Оценка целесообразности создания ПО с применением методики оценки конкурентоспособности.
Введение
.1 Понятие конкурентоспособности.
.2 Оценка конкурентоспособности.
Заключение.
Раздел 4. Производственно-экологическая безопасность и охрана труда. Анализ нормативных документов при работе с ПК.
Введение
.1 Требования к производственному освещению
.2 Защита от излучений
.3 Электробезопасность
.4 Пожарная безопасность
.5 Защита от шума и вибраций.
.6 Психофизические опасные и вредные производственные факторы.
.7 Расчет воздухообмена.
Заключение
Литература ПЭБ
Выводы по дипломному проекту.
Используемая литература.
Приложение 1. Листинг программы console.
Введение
Язык Фортран является одним из первых языков высокого уровня. Изначально он предназначался для инженерных и научных прикладных задач. С его помощью написано множество программ расчетов, решений уравнений и матричных преобразований. Этот язык предоставляет мощные математические средства не только при работе с действительными числами, но при работе с комплексными числами. По этой причине многие инженеры и ученые имеют свои библиотеки программ и подпрограмм на Фортране для решения своих задач. Помимо этого Фортран не стоял все эти годы на месте, а развивался (первая версия языка Фортран-56, далее Фортран-77 и последняя Фортран-90 разработанная в 1993 году). Однако не смотря на развитие язык остается достаточно бедным в планах графического вывода и организации интерфейса пользователя. Для решения таких вопросов компании выпускающие компиляторы Фортрана создают для него свои графические библиотеки и визуализаторы. Наиболее современной версией Фортрана является Compaq Visual Fortran v.6.6. А визуализатором этой среды программирования является отдельный пакет Compaq Array Visualizer v1.5.
На производственной и преддипломной практике мне была поставлена задача изучить язык программирования Фортран и возможности визуализатора Compaq Array Visualizer и написать расширение возможностей этого пакета, для его настройки под специфические нужды разработчиков инженерных программ для моделирования работы полупроводниковых приборов. Изначально такое расширение проектировалось как библиотека подпрограмм Фортрана, но в последствии я пришел к выводу, что выгоднее и удобнее седлать отдельную программу. К тому же отдельная программа проектировалась как способная воспринимать не только результаты Фортран-программ, но и результаты C++, Pascal программ.
Второй задачей на дипломный проект было изучение и составление технологии создания визуализаторов. В Разделе 2 представлены этапы разработки программ и их подробное описание.
В организационно-экономическом разделе будет рассмотрена методика оценки конкурентоспосбоности и ее применение к системам и программам визуализации включая созданное программное обеспечение.
В производственно-экологическом разделе рассмотрены нормативы и нормативные документы при работе с персональными компьютерами. Рассмотрены вопросы освещения, защиты от излучений, электро- и пожаробезопасности, защиты от шума и вибрации, психофизические опасные и вредные факторы. Произведен расчет воздухообмена производственного помещения.
В приложении приведен листинг разработанной программы. Комментарии к нему и описание работы с программой приведены в специальном разделе.
Раздел 1. Специальный раздел. Создание средств визуализации научных и инженерных расчетов.
Введение
В наше время невозможно представить себе процесс проектирования без вывода результатов расчетов в графическом виде. Такой вид отображения гораздо более нагляден и удобен чем алфавитно-цифровой. Последние версии всех САПР имеют такую возможность. Но если прибор моделируется не в рамках какой-либо САПР, а собственной программой инженера, то вывод приходится организовывать самому. Работа с графикой, к тому же трехмерной очень сложна и требует специальных навыков, а так же времени создания таких подпрограмм и их тестирования и отладки.
Разрешить эту проблему помогают различные пакеты для графического отображения данных. Одним из таких пакетов является Compaq Array Visualizer v1.5.(далее AV) Этот пакет удобен в использовании. К тому же имеет ряд преимуществ по быстродействию на слабых машинах (тестирование производилось на P166 с 32Mb ОЗУ) и, в тоже время может работать и с последними технологиями в графических системах, такими как OpenGL.
Однако AV имеет достаточно сложный и развитый API для передачи данных из программы. Это опять же приводит к задаче изучения дополнительных функций. Целью данной дипломной работы является создание программы, использующей AV и данные программы инженера, позволяющее более просто, без дополнительного обучения, просматривать результаты в AV, т.е. организация более простого интерфейса между рассчитывающей программой и графическим пакетом.
К тому же моделирование может иметь много шагов и требовать просмотра полученных данных в разных представлениях. Таким образом созданная программа должна уметь запоминать все шаги и представлять графической оболочке те данные, которые в данный момент необходимы инженеру.
1.1 Обзор средств визуализации инженерных и научных расчетов
Использование вычислительной техники для визуализации и анализа научных данных стало уже традиционным. Это вполне естественно, ведь с задачей наглядного представления и анализа больших массивов числовой информации сталкиваются во многих областях. Это моделирование, обработка результатов экспериментов, анализ данных дистанционного зондирования, решении различных инженерных задач. Многим ученым, студентам и инженерам часто приходится иметь дело с двумерными наборами чисел. Такими наборами могут являться как результаты численного моделирования, так и данные, полученные с различных приборов. Отдельным практически важным примером таких данных являются цифровые изображения. Для получения, обработки и визуализации этих данных на компьютере требуется специальное программное обеспечение.
На сегодняшний день существует довольно большое количество средств обработки и визуализации научных данных, предназначенных для работы под операционными системами семейства UNIX, однако в своем абсолютном большинстве такие программы имеют весьма недружелюбный интерфейс. Несмотря на то, что работа с UNIX системами очень распространена в научном сообществе, стремление современных пользователей переходить на дружелюбный и интуитивный интерфейс Windows очевидно. Быстрые темпы развития персональных компьютеров обуславливают переход все большего числа ученых и студентов именно на эти системы.
Задача обработки двумерных данных несомненно шире задачи обработки изображений. Трактуя данные в зависимости от их природы различным способом, например как алгебраические матрицы или z=F(x,y), мы можем применять к ним ряд методов алгебры, анализа, математической статистики, решать дифференциальные и интегральные уравнения. Для этих целей можно использовать системы инженерных вычислений. Наиболее мощной из распространенных систем такого рода можно назвать MatLab (http://www.mathworks.com/). У указанных систем есть два ограничения: это низкая скорость, с которой подобные системы ведут свои вычисления, и необходимость писать программу на специализированном внутреннем языке. Написание программы в свою очередь требует не только специальной подготовки, но и довольно большого времени на ее разработку и отладку. Когда же необходимо просто проверить возникшую идею, подготовить промежуточный результат или быстро оформить какую либо несложную работу, желательно иметь более специализированные и мобильные средства.
Более мобильным, но менее функциональным средством является популярный пакет MathCad (http://www.mathsoft.com/).
Он позволяет пользователю проводить достаточно сложные математические расчеты, обрабатывать и визуализировать различные числовые данные и даже писать простые программы на встроенном алгоритмическом языке. Слабость MatCad, в применении к работе с двумерными данными состоит в недостаточно удобных средствах визуализации, низкой скорости, а соответственно в плохой приспособленности к работе с большими объемами информации.
Визуализация двумерных экспериментальных данных часто рассматривается как отдельная задача. Такие данные обычно представляют в виде изображений или поверхностей в перспективной проекции. Описанные выше программы позволяют с определенными ограничениями производить такую визуализацию. Однако для ряда приложений более полезными и удобными оказываются другие системы. Например, во многих науках о Земле возникает задача построения цифровой модели той или иной поверхности, заданной лишь в нескольких точках. При помощи методов интерполяции такие данные переводятся в двумерные наборы чисел - строится так называемая цифровая модель поверхности. Визуально такую поверхность часто представляют либо в виде трехмерного изображения, либо в виде линий уровней. Для решения подобных задач наибольшее распространение получил пакет Surfer (http://www.goldensoftware.com/), который благодаря своей компактности и удобству завоевал симпатии многих исследователей. Основным назначением Surfer является обработка и визуализация двухмерных наборов данных, описываемых функцией типа z=F(x,y) Пакет позволяет строить цифровую модель поверхности, выполнять ряд вспомогательных операций с этой моделью и визуализировать данные различными способами.
Российская программа 3DField (field.hypermart.net) имеет аналогичное предназначение, однако меньший набор доступных средств и при этом обладает более приятным интерфейсом. Другая система научной графики TecPlot (http://www.amtec.com/) , имеет широкие возможности визуализации различных (не только двумерных) данных. В частности, система позволяет строить поверхности, векторные поля, визуализировать объекты, заданные в виде конечных элементов. К сожалению, при всех своих достоинствах она имеет явно перегруженный интерфейс. При всей красоте этих систем, следует заметить, что они более полезны для подготовки к печати статьи или отчета, нежели для повседневной работы исследователя. Но работу по представлению данных в виде, готовом для печати, эти системы выполняют на высоком уровне. К сожалению, такие программы рассчитаны на сравнительно небольшие объемы данных, что ограничивает область их применения.
Стоит также упомянуть о такой программе как Origin она используется для визуализации различных инженерных расчетов, в том числе и расчетов в микроэлектронике.
Хотя в области микроэлектронных технологий большую популярность имеют визуализаторы, интегрированные в САПР для ИМС, такие как Cadence, ISE, но все-таки инженеры часто используют свои программы для моделирования приборов и возникает необходимость в визуализаторах их расчетов. В этом случае можно помимо вышеназванного Origin упомянуть о пакете фирмы Compaq Array Visualizer. Этот пакет хорош тем, что может быть как интегрированным в среду разработки программ Visual Studio и работать с такими языками как Visual Basic, Visual C++, Compaq Visual Fortran (CVF), так и быть отдельной программой. Помимо этого он включает ActiveX-компоненты, которые могут быть использованы для WIN32 приложений.
Помимо этих WINDOWS-пакетов, есть еще DOS-пакеты, например Mapple. Так как он является приложением DOS, то имеет недружелюбный интерфейс, однако является достаточно мощным.
Кроме вышеназванных пакетов и программ есть еще множество других средств для визуализации инженерных и научных расчетов от сложных и универсальных, до простых, узкоспециальных. Но для своих специфических применений разработчики отдельных подсистем САПР разрабатывают свои пакеты или покупают и настраивают уже существующие стандартные пакеты.
1.2 Описание визуализатора Compaq Array Visulizer.
Array Visualizer (AV) фирмы Compaq позволяет наблюдать как данные числовых массивов, так и их графическое представление. AV содержит в качестве ядра графическую библиотеку OpenGL процедуры которой обеспечивают графический вывод. Дополнительно AV позволяет манипулировать графическими данными, предоставляя возможности для перемещения, поворота и масштабирования изображения, а также для изменения способа его представления на экране. AV содержит:
Массив, переданный AV, отображается в двух видах:
Процедуры библиотеки Aview позволяют приложениям CVF или Visual C++ отображать (посредством OLE-автоматизации) данные массива, применяя AV. Также данные массива можно сохранить в виде файла, который загружается в AV в процессе его автономного использования.
ActiveX-процедуры (OCX) библиотек Avis2D и AvisGrid могут быть использованы любой поддерживающей автоматизацию средой, например Visual C++, Visual Basic или CVF, для отображения массивов в разнообразных графических видах. Процедуры Avis2D обеспечивают при выполнении графического вывода более 100 свойств, методов и событий; процедуры AvisGrid применяются для создания представляющих массивы таблиц и предоставляют около 30 свойств, методов и событий.
Возможны несколько вариантов употребления AV. Они, а также присущие им преимущества и недостатки перечислены в следующей таблице:
Вариант |
Преимущества |
Недостатки |
Загрузка agl-файла, созданного ранее выполненным приложением |
Не требует написания специального кода для вызова AV |
Нет возможности автоматизировать изменение отображаемых данных |
Использование отладчика CVF |
Не требует написания специального кода, работает с проектом любого типа |
Требует ручного задания свойств массива и настройки AV; не может быть использован в Visual C++ или Visual Basic, а также в Release-режиме CVF. |
Использование fagl-подпрограмм или в случае С agl-функций |
Небольшое число процедур и , следовательно небольшие затраты на программирование, процедуры работают с проектами любого типа и в Debug-, и в Release-режиме. |
Требует ручного задания свойств массива и настройки AV |
Использование fagl- и fav- подпрограмм или в случае C++ - agl-функций и функций класса CAViewer. |
Можно программно задавать свойства массива и выполнять настройки AV; процедуры работают с проектами любого типа; последовательно в одном экземпляре AV можно отображать несколько массивов. |
Потребуется освоить большое число процедур (более 100); функции класса CAViewer нельзя применять в C (необходим C++). |
Использование ActiveX-процедур библиотек Avis2D и/или AvisGrid |
Дает возможность выводить создаваемые AV графические образы и таблицы данных без вызова AV; обеспечивает более быстрое |
Употребляется только в Windows-приложениях Фортрана или MFC в случае Visual C++. Заметим, что в Visual Basic большинство |
Воспроизведение образов и больше возможностей для настройки параметров |
EXE-проектов могут использовать процедуры библиотек Avis2D и AvisGrid; потребуется освоить большое число Avis2D/AvisGrid-процедур; Avis2D и AvisGrid процедуры не могут отображать HDF и текстовые файлы. |
Отображение массивов.
Массивы отображаются в следующих видах:
1) 3-D вид или Height Plot (рис 1):
рис 1.
рис 2.
Векторный граф, или Vector Graph. (В данной работе не используется).
рис. 3
Перечисленные режимы могут быть заданы как в AV непосредственно, так и в программе, из которой AV запускается. В AV переключение режима выполняется либо из меню, либо в результате выбора соответствующей иконки.
Для вращения изображения достаточно разместить мышь на поле графического вывода, нажать левую кнопку мыши и затем, оставаясь на поле вывода, перемещать мышь в произвольном направлении.
1.3 Описание библиотеки функций Array Visualizer.
Ввиду сложности создания Windows-приложений, а также того, что ActiveX-компонента Avis2D не корректно отображает одномерные массивы было решено использовать непосредственно оболочку Array Viewer в совокупности с программой, расширяющей его возможности, а так же служащей более простым интерфейсом между программой инженера и AV. Для создания программы был применен подход с использованием fagl- и fav- процедур. Программа писалась на языке CVF v6.5.
Опишем процедуры API AV, встраивание которых в приложение позволяет запускать AV, передавать ему массив, управлять изображением.
FAGL - подпрограммы.
Синтаксис подпрограммы |
Описание |
faglClose(array,status) |
Закрывает экземпляр AV. Если затем возникает потребность отобразить массив array снова, то достаточно вызвать лишь faglShow; вызова faglStartWatch выполнять не нужно |
faglEndWatch (array, status) |
Удаляет массив array из списка отображаемых массивов и освобождает ресурсы, связанные с array и используемые подпрограммами библиотеки. |
faglGetShareName (array, filename, status) |
Строка filename, возвращаемая этой подпрограммой, может быть передана процедурам Avis2D и AvisGrid как свойство FileName. |
faglHide(array, status) |
Делает экземпляр AV невидимым. Экземпляр AV станет видимым, если затем вызвать faglShow. Однако если экземпляр AV создан посредством favStartViewer, то вместо faglShow следует употреблять favShowWindow |
faglLBound (array, lbnd, status) |
Устанавливает левые границы измерений отображаемого массива в видах Data или Graph Views AV. По умолчанию массив отображается с границами, равными единице. |
faglSaveAsFile (array, filename, status) |
Сохраняет текущий массив в файле с расширением AGL. Такой файл может быть загружен и отображен в AV. |
faglShow (array, |
Создает экземпляр AV и отображает данные |
status) |
массива array. Так же делает экземпляр AV видимым. |
faglStartWatch (array, status) |
Добавляет массив array в список отображаемых массивов и возвращает дескриптор hv, который используется для доступа к массиву другими подпрограммами библиотеки. Фактически faglStartWatch использует системные ресурсы для приведения array к виду, необходимому для faglShow. Чтобы освободить эти ресурсы, следует вызвать faglEndWatch. |
FaglUpdate(array, status) |
Приводит в соответствие изображение с данными, хранящимися в массиве array. Употребляется, если приложение изменило отображаемый массив array с момента последнего вызова faglUpdate или faglShow и если есть необходимость обновить изображение. Если же экземпляр AV ассоциируется с массивом, созданным favStartViewer, а не faglShow, то вместо faglUpdate нужно вызвать favUpdate. |
Параметры fagl подпрограмм:
Имя |
Смысл/вид |
Тип. |
array |
Имя отображаемого массива / входной |
Числовой |
status |
Статус вызова fagl-подпрограммы. В случае успеха равен нулю/ выходной |
integer(4) |
filename |
Строка, возвращаемая faglGetShareName/ выходной |
CHARACTER(*) |
filename |
Имя файла без расширения, если файл пишется в директорию, из которой вызвано приложение, либо полное имя файла / входной. |
CHARACTER(*) |
lbnd |
Массив ранга 1, размер которого равен рангу отображаемого массива / выходной |
INTEGER(4) |
title |
Строка, отображаемая в заголовке экземпляра AV / входной |
CHARACTER(*) |
Для вызова приведенных выше подпрограмм в использующем их программном компоненте следует выполнить ссылку:
Use avdef ! Ссылка на модуль avdef.f90
Модуль AVDEF содержит интерфейсы fagl-подпрограмм.
Перечисленные подпрограммы обычно используются следующим образом:
Для массивов отображаемых в AV рекомендуется использовать атрибут !DEC$ATTRIBUTES array_visualizer :: array. Действие этого атрибута таково: память, занимаемая массивом array, используется и AV и приложением. При отсутствии атрибута будут созданы две области данных array и при каждом обновлении массива после вызова faglUpdate данные будут копироваться из области, принадлежащей приложению, в область, используемую AV.
Заметим, что DEC-атрибут ARRAY_VISUALIZER может быть применен только с динамическими объектами, т.е. объектами, обладающими атрибутом PIONTER или ALLOCATABLE.
FAV - подпрограммы.
Fav подпрограммы управляют AV и обеспечивают взаимодействие AV с приложением. Как правило, fav- и fagl- подпрограммы используются совместно. Fav подпрограммы подразделяются на группы, имеющие названия:
Работа с fav-подпрограммами станет возможной после выполнения ссылки:
Use avviewer
в которой модуль AVVIEWER содержит интерфейсы и константы подпрограмм.
Поскольку fav подпрограмм очень много (более 100), приведем описание только тех из них, которые используются в программе.
Подпрограмма |
Что выполняет |
Запуск AV |
|
favStartViewer |
Запускает экземпляр AV |
favEndViewer |
Завершает работу экземпляра AV |
Доступ к данным |
|
favSetArray |
Загружает в AV заданный массив |
Фильтрация данных |
favUpdate |
Вызывается, когда нужно обновить изображение, созданное AV, чтобы отобразить изменения, произошедшие с момента последнего обновления данных или начальной загрузки. |
Оси координат |
|
favSetDimScale |
Ассоциирует ось координат с массивом, содержащим разметку оси. |
favSetUseAxisLabel |
Включает/отключает вывод заданных пользователем имен осей координат |
favSetAxisLabel |
Задает имя указанной оси координат. |
Виды изображений |
|
favSetGraphType |
Задает видовой режим |
Разное |
|
favSetArrayName |
Задает текст, выводимый на заголовочной полосе AV |
favShowWindow |
Отображает/скрывает окно AV |
1.4 Разработка программы визуализации
Задачей ставилось создание ПО, позволяющего просматривать результаты расчетов в графическом виде, использую при этом библиотеки AV и язык Compaq Visual Fortran (CVF).
Интерфейс с рассчитывающей программой был выбран файловый, т.е. входными данными для программы console являются два файла. Один читающийся первым с начальными установками для массива, осей координат. Второй непосредственно результаты. Тип файлов не компрессированные, текстовые. Последнее выбрано исходя из соображений совместимости не только с Fortran-программами, но и с C/C++ и даже Pascal-программами.
Требования к выводу информации.
Для вывода были поставлены следующие задачи:
Выбор пользовательского интерфейса.
Из соображений простоты программы, ее размеров, а также легкости модификации был выбран консольный интерфейс. Благодаря этому программа имеет небольшой листинг, простую структуру и легка для понимания. Для добавления новых возможностей, новых команд нет необходимости изменять файлы ресурсов (как было бы в случае WIN32 приложения), и несколько различных подпрограмм. Достаточно лишь внести в условия проверки команд новую команду и написать подпрограмму ее обработки. В дополнение к этому следует заметить, что также повышена переносимость программы на различные платформы, т.е. достаточно перекомпилировать код (может быть с небольшими изменениями) на соответствующем компиляторе для нужной платформы (естественно для этой платформы должна быть версия AV).
Структура программы.
Программу можно логически разбить на 6 блоков, выполняющих каждый свои функции (в листинге (Приложение 1) они помечены комментариями):
Графически структуру программы можно изобразить как это сделано на рис 4 (оговоримся сразу это не блок-схема программы, это только схематичное изображение структуры).
Как легко можно заметить, для модификации программы, добавления в нее новых команд и возможностей достаточно изменять только блоки 4 и 6, т. е. добавлять новые условия и подпрограммы. Так же желательно включать новые команды в подпрограмму Help. Это позволит пользователям в любой момент получить список команд программы.
Почти все подпрограммы, реализующие команды используют глобальные массивы TDMas, VMas, PXMas, PYMas, XAxis, YAxis это позволяет не передавать их, а также оперировать ими, в случае необходимости в основной программе. Так же подпрограммы используют глобальные переменные plx, ply, pld и vis.
Рис 4.
Каждая из них равна единице если соответствующий режим включен и равна нулю в противоположном случае. Эти переменные используются для того чтобы не переключаться каждый раз в новый режим. Также они используются подпрограммой Animat() для определения, какой массив ей заполнять.
Полный список всех подпрограмм и команд, им соответствующих:
Подпрограмма |
Команда |
Помощь |
|
Stat() |
status |
Help() |
help |
Анимация |
|
Animat() |
anim |
Виды отображения |
|
PlainX() |
plainx |
PlainY() |
plainy |
Plain() |
plain3d |
Visu() |
visual |
Служебные |
|
Paus() |
pause |
ChangeDelay() |
delay |
ChangeK() |
k |
- |
newfile |
- |
exit |
Команды newfile и exit не имеют своих подпрограмм они выполняются оператором goto n.
Разберем подпрограммы по видам:
API AV favUpdate, потом с помощью пустого цикла идет задержка. Пустой цикл просто перебирает числа от 1 до значения переменной delay*106. Это повторяется циклически для всех необходимых значений k.
Таким образом мы разобрали структуру и принципы работы программы console.exe. Приступим теперь к ее описанию.
1.5 Описание работы программы визуализации
В этом подразделе будут рассмотрены следующие вопросы:
Терминология программы.
Прежде чем приступить к описанию работы с программой, необходимо пояснить несколько терминов, которые будут использоваться.
Формат pre-файла.
Pre-файл (от preset предварительные установки)это файл с установками, необходимыми для работы программы, а также с оформлением шкал.
Минимальная длина этого файла в строках три, максимальная не ограничена, но читаться будут только первые восемь. Итак построчно:
Очень важно! Эти три строки обязательно должны быть в файле, иначе работа программы завершится с ошибкой. К тому же их нужно обязательно правильно и точно указать. Согласно этим параметрам формируются внутренние массивы программы и потом заполняются данными. Ошибка может повлечь за собой потерю данных или их искажение.
Далее можно вставлять свои комментарии и пояснения. Программой они не учитываются.
Команды программы.
К сожалению язык Fortran не предоставляет достаточно мощных подпрограмм обработки строк. Поэтому все команды имеют вид не команда операнды, а просто команда. Далее, при необходимости, программа требует ввод дополнительных данных, обычно координат, но помимо этого и различных значений. Внимание: все команды должны быть набраны в нижнем регистре.
Команды можно разделить на четыре группы:
Рассмотрим все команды (включая их дополнительный ввод) по их видам:
Команды помощи:
Виды отображения:
Анимация.
Служебные команды.
newfile эта команда позволяет загрузить новые файлы. Она перебрасывает в начало работы с программой.
Скриптовый режим программы.
Наличие этого режима прямое следствие консольного интерфейса программы. Т.е. для создания такой возможности не было необходимости в дополнительных затратах.
Скрипт (сценарий) состоит из команд программы и требуемого для них дополнительного ввода. Кроме этого, первые две строки скрипта это имена pre-файла и файла данных соответственно. Приведем простой пример скрипта:
out.pre
out.txt
plainx
delay
anim
pause
exit
Его работа заключается в следующем:
Заметим, что построение командного интерпретатора позволяет после первых двух строк вставлять любые комментарии. Эти комментарии программа попытается обработать как команды, но не найдя таких команд в своем списке просто их проигнорирует. Однако очень важно помнить, что первые две строки сценария это обязательно имена pre-файла и файла данных.
Запуск программы console.
Как видно из предыдущих подразделов программу можно запустить в двух режимах: командном и скриптовом.
1.6 Описание интерфейса между программой визуализации и прикладной инженерной программой.
Инженер, собирающийся воспользоваться программой console должен организовать в своей программе вывод результатов в текстовый файл. Каждое новое число с новой строки. Приведем примеры вывода результатов в файл для Fortran- и C-программ.
Fortran.
Формат выводимых чисел для языка Fortran E12.5. Т.е. в текстовом файле будет число в виде 1.23456E+02 с пробелом в начале если число положительное и знаком - если отрицательное. Пример кода:
Допустим у нас есть массив, объявленный как
Real(4) M(lbi:ubi, lbj:ubj)
Тогда записывать его значения в файл out.txt мы будем следующим образом.
Объявим формат E12.5:
90 FORMAT (E12.5)
Сначала открываем файл:
open (3,FILE='out.txt', STATUS='UNKNOWN')
Далее на каждом шаге моделирования записываем в него информацию из массива следующим образом:
do i=lbi,ubi
do j=lbj,ubj
write(3,90) M(i, j)
end do
end do
После того как пройдены все шаги моделирования, файл необходимо закрыть:
close (3)
Таким образом мы можем записать все шаги моделирования в файл данных, чтобы впоследствии им воспользоваться для работы с программой console.
C/C++
Для С/С++ программ необходим формат “%12.5E”. Все числа необходимо приводить в строки. Напомним, что файл должен быть текстовым.
Пример кода с пояснениями.
Для начала объявим переменные массива, файла и вспомогательную строку:
float M[UBI][UBJ];
FILE* f;
char str[12];
Далее в программе необходимо открыть файл:
f=fopen(“out.txt”,”wt”);
Далее на каждом шаге моделирования записываем в него информацию из массива следующим образом:
for (i=0;i<UBI;i++)
for (j=0;j<UBJ;j++) {
sprintf(str, "%12.5E", M[i][j]);
fputs(str,f);
fprintf(f,”\n”);
}
После того как пройдены все шаги моделирования, файл необходимо закрыть:
fclose(f);
Обратите внимание на использование функции sprintf. Это наиболее простой способ привести float-числа к нужному виду, идентичному с форматом E12.5 используемому в программе console для считывания данных.
1.7 Тестирование программы и результаты тестовых расчетов
Проведем тестирование программы на файлах данных созданных Fortran и C++ программами.
Приведем листинг Fortran-программы:
program Sample
IMPLICIT NONE
real(4), allocatable :: M(:,:)
integer(1), parameter :: lbi=1, ubi=20, lbj=1, ubj=20
integer(1) :: i,j
allocate (M(lbi:ubi,lbj:ubj))
do i=lbi,ubi
do j=lbj,ubj
M(i,j)=sin(real(i))+sin(real(j))
end do
end do
FORMAT (E12.5)
open (3,FILE='out.txt',STATUS='UNKNOWN')
do i=lbi,ubi
do j=lbj,ubj
write(3,90) M(i,j)
end do
end do
close(3)
end program Sample
Как видим здесь формируется двумерный массив M(1:20,1:20) который заполняется значениями M(i,j)=sin(i)+sin(j). Составим pre-файл для него (out.pre):
1
.00
.00
X-scale
Y-scale
Function
Результаты вывода программы:
рис 5.
. 3D-вид (visual) (рис 5
2. Контрастная заливка (рис 6):
рис 6.
3. Сечение по X (команда plainy с параметром 20) (рис7):
рис 7.
-30.
Проверим теперь взаимодействие с C++ программой:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define UBI 20
#define UBJ 20
FILE* f;
char str[12];
float M[UBI][UBJ];
int i,j;
void main()
{
for (i=0;i<UBI;i++)
for (j=0;j<UBJ;j++)
if (i<19) M[i][j]=(float)i+sin((float)j)
else M[i][j]=0;
f=fopen("out.txt","w+t");
for (i=0;i<UBI;i++)
for (j=0;j<UBJ;j++) {
sprintf(str, "%12.5E", M[i][j]);
fputs(str,f);
fprintf(f,”\n”);
}
fclose(f);
}
Здесь формируется массив M[20]][20] (необходимо помнить, что в C массивы начинаются с 0) и заполняется функцией M[i][j]=i+sin(j). Pre-файл для него такой же как и в предыдущем примере.
Результаты вывода программы console:
рис 8.
рис 9.
рис 10.
Мы рассмотрели все виды и варианты работы программы, протестировали ее во всех режимах. Программа прекрасно согласуется как с Fortran-программами, так и с C/C++ программами. Помимо этих тестов программа была протестирована на результатах вычисления параметров полупроводниковых приборов и показала хорошие результаты.
Системные требования.
Работа программы тестировалась на системах Windows 98, Windows 2000 и Windows XP. Минимальные системные требования Pentium 166 MMX, 32Mb RAM, 1Mb Video. Как видим поддержка OpenGL не обязательна, хотя желательна. Размер программы, вместе с пакетом Compaq Array Visualizer v1.5 Mb.
Заключение
Разработанная программа, использующая AV, является своеобразным гейтвеем (от англ. gateway) с командной оболочкой, позволяющим передавать данные из рассчитывающей программы инженера в пакет графического отображения информации. Она предоставляет более простой интерфейс для передачи данных. К тому же данные сохраняются в файл и нет необходимости в переносе программы, достаточно переносить только результаты.
Помимо этого, за счет скриптового режима программа позволяет устраивать презентации и показы. Несложная командная система не требует длительного изучения и освоения. Программу можно освоить за 30-40 минут.
Разработанную программу можно использовать на лабораторных работах студентов, для отображения полученных ими результатов. Она может использоваться сотрудниками институтов или предприятий для отображения результатов моделирования как в процессе программирования и отладки моделирующей программы, так и в процессе демонстрации результатов. Таким образом программа console имеет университетский уровень.
Раздел 2.
Технология разработки программного обеспечения для визуализации инженерных расчетов
Введение
Десять - пятнадцать лет назад ЭВМ либо не имели возможности графического вывода, либо графические дисплеи были очень слабы и не подходили для качественного вывода информации. Печатающие устройства существовали только для символьного вывода. Поэтому все результаты расчетов выводились в виде числовых распечаток, по которым проводился анализ, строились графики и т.д. Пять десять лет назад графические системы позволяли выводить графики с приемлемым качеством изображения, но только для одномерных случаев. Вывод двухмерных случаев в виде поверхностей требовал огромных вычислительных затрат, с которыми не справлялись процессоры тех лет.
В наше время, когда высокого быстродействия достигли не только ЦП и математические сопроцессоры, но и графические сопроцессоры вывод результатов в графическом виде ускорился в сотни раз, построение трехмерных изображений и их преобразование заметно упростилось. Поэтому для всех современных САПР и инженерных программ необходимо представление результатов в виде графиков, поверхностей и т.д. Как и всякий процесс, написание программ обработки результатов для последующего графического вывода и вывод имеет свою технологию. В данном разделе и будет рассмотрена такая технология.
.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.
Для начала выделим основные этапы создания ПО для визуализации инженерных расчетов (далее просто ПО).
Итак, мы видим пять основных этапов, различных по сложности и объему работ. К тому же, благодаря большому количеству разработчиков библиотек для графического вывода у нас есть два качественно разных подхода.
Рассмотрим каждый этап в отдельности более подробно.
Очень важно правильно сформулировать задачу и требования к ПО. Это поможет избежать лишних затрат на создание ненужных подпрограмм вывода, либо переделки готовых программ для дополнения необходимого. Так же при постановке задачи необходимо решить стоит ли использовать подход с построением собственных математических моделей, или достаточно ограничиться уже готовыми библиотеками и компонентами, пусть и платными. В дополнении необходимо учесть необходимость вывода числовой информации, а так же создание “твердой копии”, т. е. распечатки на принтере.
При определении вида графической информации, нужно решить для каких случаев она будет выводиться двумерных или же только одномерных. При выборе двумерных случаев у нас тоже есть выбор: можно выводить в виде поверхностей, либо в виде “контрастной заливки”, или же оба этих случая. При постановке задачи на вывод надо учитывать собственные вычислительные ресурсы и необходимую скорость создания приложения.
При определении подхода к построению математической модели вышеуказанные два фактора так же играют главную роль. Собственная модель может обойтись дороже, так как на ее создание уйдет время и, к тому же, как правило, такие модели не задействуют вообще или не на полную мощность возможности графического сопроцессора, а это шаг назад. В связи с этим в последнее время создание собственных математических моделей становится все менее целесообразным и экономически выгодным.
2.3 Создание структуры данных и интерфейса с расчетной программой
Этот этап очень важен. От структуры данных зависит быстродействие создаваемого ПО, компактность кода и файлов, в которых хранятся результаты расчетов.
Интерфейс с рассчитывающей программой может быть совершенно различным. Информация может передаваться через оперативную память (ОЗУ), через файловую систему в виде бинарных файлов или, более объемных, текстовых файлов. Файлы могут быть компрессированы или нет. Какой из способов выбирать зависит от нескольких факторов:
По этим двум факторам можно сказать еще следующее: если программа выполняет расчеты долго, или входные данные не меняются (используется итеративный процесс) целесообразней будет использование файловой системы для долгосрочного хранения.
Выбор вида файла (бинарный или текстовый) зависит от языка программирования. Однако следует учесть, что бинарный файл меньше по объему.
Компрессировать или нет файл с результатами определяется следующим фактором: если вы пишете ПО для большой САПР и программисты, принимающие участие в этом проекте используют одну и ту же подпрограмму компрессии, то в этом случае следует выбрать сжатый файл. Если же вы пишите университетскую программу или программу для предприятия, на которой будут смотреть результаты своих программ инженеры вашего коллектива, то в этом случае, для упрощения процесса написания рассчитывающих программ следует выбрать не сжатые файлы.
В структуру данных также включается управляющая информация для ПО. Она может включать в себя различные параметры как-то: границы массивов данных, значения или шаги по осям, виды представления. При выборе файлового интерфейса ее можно хранить либо отдельно от основных данных, либо вместе с ними. Это уже зависит от вкуса программиста.
.4 Построение математической модели отображаемой информации.
2.4.1 Использование готовых библиотек
В наше время, как отмечалось выше, большинство разработчиков программного обеспечения, связанного с графикой, используют стандартные библиотеки от крупных производителей программ (Microsoft, Silicon Graphics, 3Dfx). Этими библиотеками являются: OpenGL, DirectX, Direct Draw. Их использование ускоряет процесс разработки программы, к тому же они в полной мере задействуют графический и математический сопроцессоры, что увеличивает производительность. Эти библиотеки включают в себя и аппроксимацию и методы работы с двухмерными и трехмерными объектами, такие как аффинные преобразования и методы скрытия невидимых линий, т. е. Так же исчезает необходимость в затратах на сложный процесс математического моделирования.
Помимо этого, некоторые производители компиляторов поставляют пакеты обработки результатов математического анализа для отображения в графическом виде. Обычно эти пакеты поставляются в виде компонентов ActiveX (для Windows-платформ). Реже поставляются готовые универсальные оболочки. Программы, написанные для них не нуждаются в разработке интерфейса пользователя большой сложности, что, например, для языка Visual Fortran, использующего только WIN32 API, заметно сокращает время и затраты на создание ПО для визуализации. Частным примером такого пакета является рассматриваемый в данной дипломной работе Compaq Array Visualizer (версия 1.5), включающий в себя компоненты ActiveX: Avis2D (для отображения двумерных массивов данных) и AvisGrid (для отображения числовых данных в виде таблицы).
Использование таких компонент и пакетов еще больше ускоряет процесс разработки (хотя, вследствие дороговизны пакетов не дает более экономически выгодных результатов). К преимуществам разработки на готовых универсальных оболочках является стандартизация, т.е. пользователю или инженеру нет необходимости изучать новые программы и их системы интерфейсов и меню. Таким образом, недостающего экономического эффекта можно достигать путем сокращения расходов на обучение персонала.
Негативная сторона заключается в затратах на обучение программистов, а так же в затратах на оболочки визуализации. Помимо этого библиотеки, а тем более оболочки, могут не иметь нужных вам функций (например: неудобно выводить данные в логарифмическом масштабе при использовании Avis2D). Кроме того, для использования данного подхода, так как в этом случае крупные производители ПО не применяют технологию “открытого кода”, практически невозможно учесть ошибки, содержащиеся в коде скомпилированных библиотек и оболочек. Такие ошибки обнаруживаются только в процессе использования программы. Но, по сравнению с исправлением программы с собственной математической моделью, это занимает гораздо меньшее время, так как там ошибки могут содержаться не только в коде, но и в модели.
При разработке своей математической модели (далее: модели) необходимо учитывать быстродействие машин, на которых должна исполнятся программа. Таким образом можно пропустить некоторые из описанных ниже математических и алгоритмических методов.
Интерполяция.
Результаты вычисляемые рассчитывающей программой представлены в табличном виде. Для сглаживания графиков и поверхностей необходима интерполяция данных. Существует множество алгоритмов и методов интерполяции. Наиболее быстрым и часто применяемым методом является сплайн-интерполяция, которую мы рассмотрим более подробно.
Кусочно-полиномиальная интерполяция заключается в том, что между любыми соседними узлами сетки функция интерполируется кубическим полиномом (кубическая сплайн-интерполяция). Его коэффициенты на каждом интервале определяются из условий сопряжения в узлах:
fi=yi
f(xi-0)=f(xi+0)
f(xi-0)=f(xi+0)
Кроме того, на границе, при x=x0 и x=xn ставятся условия:
f'(x0)=0 и f``(xn)=0 (1)
Будем искать кубический полином в виде:
f(x)=ai+bi(x -xi-1)+ci(x-xi-1)2+di(x-xi-1)3, (2)
Из условия fi=yi имеем:
f(xi-1)=ai=yi-1
f(xi)=ai+bihi+ciIi2+dihi3=yi. (3)
hi=xi-xi-1, i=1,2,…,n-1
Вычислим производные:
f(x)=bi+2ci(x-xi-1)+3di(x-xi-1),
f(x)=2ci+6di(x-xi-1),
И потребуем их непрерывности при x=xi:
bi+1=bi+2cihi+3dihi2,
ci+1=ci+3dihi, i=1,2,…,n-1 (4)
Общее число неизвестных коэффициентов, очевидно, равно 4n, число уравнений (3) и (4) равно 4n-2. Недостающие два уравнения получаем из условий (1) при x=x0 и x=xn;
ci=0, cn+3dnhn=0.
Выражая из (4) di=(ci+1-ci)/3hi, подставляя это значение в (3) и исключая
ai=yi-1, получим:
i=1,2,…,n-1,
Подставив теперь выражения для bi, bi+1 и di в первую формулу (4),
после несложных преобразований получаем для определения ci разностное уравнение второго порядка.
i=1,2,…,n-1. (5)
C краевыми условиями:
c1=0, cn+1=0. (6)
Условие cn+1=0 эквивалентно условию cn+3dnhn=0 и уравнению ci+1=ci+dihi. Разностное уравнение (5) с условиями (6) решается методом прогонки.
Можно ввести понятие сплайна порядка m как функции, которая является полиномом степени m на каждом их отрезков сетки и во всех внутренних узлах сетки удовлетворяет условиям непрерывности функции и производной порядка m-1 включительно. Обычно для интерполяции используются случаи m=3 (рассмотренный выше кубический сплайн) и m=1 (линейный сплайн, соответствующий аппроксимации графика функции y(x) ломаной, проходящей через точки (xi,yi)).
Работа с трехмерными изображениями.
После проведения интерполяции уже можно построить графики для одномерных случаев. Но двумерные случаи (поверхности) требуют дополнительных математических и алгоритмических методов.
Изображение пространственных объектов на экранной плоскости не возможно без операции проектирования. Видов такого проектирования существует довольно много. Мы остановимся на описании проектирования пучком прямолинейных лучей. Различают два типа таких пучков: пучок лучей, исходящих из одной точки и пучок лучей, параллельный заданному направлению. Для получения проекции заданного объекта на плоскость необходимо провести через каждую его точку прямую из проектирующего пучка и затем найти координаты точек пересечения этих прямых с плоскостью изображения.
В зависимости от взаимного расположения плоскости изображения и направления пучка параллельных прямых, осуществляющих проектирование, различают несколько случаев. Самым простым является тот, когда прямые перпендикулярны плоскости изображения, а сама эта плоскость является одной из координатных плоскостей или параллельна ей.