Визуализация инженерных и научных расчетов

Государственный комитет РФ по высшему образованию.

Московский Государственный Институт Электронной Техники (Технический Университет).

Факультет ЭКТ.

Кафедра ПКИМС.















Пояснительная записка к

Дипломному Проекту

на тему

«Визуализация инженерных и научных расчетов»



























Москва 2002г.


Оглавление



Введение

Раздел 1. Специальный раздел. Создание средств визуализации научных и инженерных расчетов.

Введение

Обзор средств визуализации расчетов

Описание визуализатора Compaq Array Visualizer 

Описание библиотеки Array Visualizer

Разработка программы визуализации

Работа программы визуализации

Описание интерфейса между программой визуализации и прикладной инженерной программой.

Тестирование программы и результаты тестовых расчетов.

Заключение

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

Введение.

2.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.

2.2 Постановка задачи.

2.3 Создание структуры данных и интерфейса с расчетной программой.

2.4 Построение математической модели отображаемой информации.

2.4.1 Использование готовых библиотек.

2.4.2 Построение собственных математических моделей.

2.5. Создание интерфейса пользователя.

Заключение.

Раздел 3. Организационно-экономический раздел. Оценка целесообразности создания ПО с применением методики оценки конкурентоспособности.

Введение

3.1 Понятие конкурентоспособности.

3.2 Оценка конкурентоспособности.

Заключение.

Раздел 4. Производственно-экологическая безопасность и охрана труда. Анализ нормативных документов при работе с ПК.

Введение

4.1 Требования к производственному освещению

4.2 Защита от излучений

4.3 Электробезопасность

4.4 Пожарная безопасность

4.5 Защита от шума и вибраций.

4.6 Психофизические опасные и вредные производственные факторы.

4.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 содержит:

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

библиотеку Aview процедур, вызываемых из приложений Фортрана и предназначенных для управления ОМ

ActiveX-процедуры библиотек Avis2D и AvisGrid

дополнительные визуальные средства

Массив, переданный AV, отображается в двух видах:

в виде числовой таблицы, выводимой в верхней части окна AV

в графическом виде как трехмерное изображение (3D-вид), или как цветовая карта, или как векторные граф, или как рисунок на плоскости.

 Процедуры библиотеки 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.



Растровая карта (контрастная заливка) или Image Map(рис 2):



рис 2.

Векторный граф, или Vector Graph. (В данной работе не используется).



рис. 3

График или Plane View (рис 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-подпрограмм.

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

до отображения массива array вызовите faglStartWatch с параметром array;

если необходимо отображать массив, имея нижнюю левую границу, отличную от единицы, примените faglLBound;

для отображения сообщения, сопровождающего выводимые данные, вызовите faglName;

для запуска AV и отображения массива array вызовите faglShow с первым параметром, равным array. AV будет функционировать до тех пор, пока не выполнена команда faglClose;

если хранимые массивом данные подверглись изменениям, то для их отображения вызовите faglClose;

для сохранения массива array в виде файла с расширением AGL (Array Graphing Language) вызовите faglSaveAsFile, использовав array в качестве первого параметра. При этом AV может быть некактивным;

при необходимости можно вызвать faglGetShareName и получить строку filename, позволяющую процедурам Avis2D и AvisGrid осуществлять доступ к памяти, занятой массивом.

после завершения просмотра массива вызовите faglEndWatch.

Для массивов отображаемых в AV рекомендуется использовать атрибут !DEC$ATTRIBUTES array_visualizer :: array. Действие этого атрибута таково: память, занимаемая массивом array, используется и AV и приложением. При отсутствии атрибута будут созданы две области данных array и при каждом обновлении массива после вызова faglUpdate данные будут копироваться из области, принадлежащей приложению, в область, используемую AV.

Заметим, что DEC-атрибут ARRAY_VISUALIZER может быть применен только с динамическими объектами, т.е. объектами, обладающими атрибутом PIONTER или ALLOCATABLE.

FAV - подпрограммы.

Fav – подпрограммы управляют AV и обеспечивают взаимодействие AV с приложением. Как правило, fav- и fagl- подпрограммы используются совместно. Fav – подпрограммы подразделяются на группы, имеющие названия:

запуск AV

доступ к данным

зона вывода

фильтрация данных

палитра

оси координат

выбор

виды изображений

3D вид

растровая карта

векторный граф

отображение данных

камера

маркер

разное

Работа с 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-программами.

Требования к выводу информации.

Для вывода были поставлены следующие задачи:

для двумерных массивов – вывод в 3D виде с возможностью анимации

для двумерных массивов – вывод в виде растровой карты (контрастной заливки)

вывод одномерных случаев (сечений массива) с возможностью анимации.

Выбор пользовательского интерфейса.

Из соображений простоты программы, ее размеров, а также легкости модификации был выбран консольный интерфейс. Благодаря этому программа имеет небольшой листинг, простую структуру и легка для понимания. Для добавления новых возможностей, новых команд нет необходимости изменять файлы ресурсов (как было бы в случае WIN32 приложения), и несколько различных подпрограмм. Достаточно лишь внести в условия проверки команд новую команду и написать подпрограмму ее обработки. В дополнение к этому следует заметить, что также повышена переносимость программы на различные платформы, т.е. достаточно перекомпилировать код (может быть с небольшими изменениями) на соответствующем компиляторе для нужной платформы (естественно для этой платформы должна быть версия AV).

Структура программы.

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

Block_1: описание переменных и массивов. Все массивы имеют атрибут allocatable, для совместимости с DEC-атрибутом ARRAY_VISUALIZER. Рабочие массивы следующие: TDMas – трехмерный массив, в который заносятся все результаты расчетов. VMas – двумерный массив, отображаемый в 3D-виде и в растровой заливке. PXMas и PYMas – одномерные массивы, соответствующие сечениям по координатам. XAxis и YAxis – одномерные массивы, содержащие разбивку шкал.

Block_2: считывание служебной информации, результатов расчетов, формирование массивов шкал. Этот блок начинается с оператора call Help(), вызывающего соответствующую подпрограмму, показывающую команды программы. Потом задаются значения по умолчанию для имен и масштабов шкал. Далее организовывается ввод имен файлов – сначала файла со служебной информацией, потом файла с данными. Имена должны быть не больше 70 символов (включая пути). Далее идет считывание файла со служебной информацией, потом размещение массивов в памяти, после чего задаются массивы шкал и, наконец считываются отображаемые данные, которые распределяются между всеми массивами, участвующими в визуализации (начальное состояние: для PXMas i=1, для PYMas j=1, для всех массивов k=1)

Block_3: задание начальных установок AV с помощью подпрограмм API.

Block_4: блок обработки команд. Состоит из операторов if..then…end if . Если команда распознана, то передается управление соответствующей подпрограмме. При вводе команды newfile передается управление блоку 2, а при вводе команды exit передается управление блоку 5.

Block_5: завершение программы. Освобождение ресурсов, задействованных для связи с AV, освобождение памяти, выделенной под массивы и закрытие оболочки AV.

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

Графически структуру программы можно изобразить как это сделано на рис 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.

Разберем подпрограммы по видам:

Подпрограммы помощи: Help() и Stat(): в реализации этих подпрограмм нет ничего сложного – они просто выводят информацию с помощью оператора write.

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

API AV favUpdate, потом с помощью пустого цикла идет задержка. Пустой цикл просто перебирает числа от 1 до значения переменной delay*106. Это повторяется циклически для всех необходимых значений k.

Подпрограммы вида отображения: Visu(), Plain(), PlainX, PlainY(): в них сначала происходит проверка на текущий тип отображения. Если он не совпадает с тем, который выбран сейчас, то производится подготовка оболочки AV (масштабы шкал, их названия, тип отображения). Потом заполняется необходимый массив и вызывается favUpdate.

Служебные подпрограммы: ChangeK(): изменяет текущий шаг моделирования (переменная k), затем заполняет все массивы новой информацией, после чего вызывает favUpdate. ChangeDelay(): изменяет значение переменной delay, которая влияет на время задержки при анимации, а также на время задержки при исполнении команды pause. Paus(): подпрограмма сделана специально для скриптового режима. Она обеспечивает задержку. Состоит из пустого вложенного цикла.

Таким образом мы разобрали структуру и принципы работы программы console.exe. Приступим теперь к ее описанию.



1.5 Описание работы программы визуализации



В этом подразделе будут рассмотрены следующие вопросы:

Терминология программы

Формат файла со служебной информацией (pre-файла).

Команды программы

Скриптовый режим программы

Запуска программы.

Терминология программы.

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

k – шаг моделирования. Т.е. если у вас прибор промоделирован в нескольких режимах (например, при разных потенциалах на контактах полупроводника), то число k отражает номер этого режима.

pre-файл – файл со служебной информацией (например, размерности массива)

скрипт – последовательность команд (сценарий), записанных в текстовый файл, которые программа может интерпретировать.

i – переменная в трехмерном массиве TDMas. Ее аналог – координата y

j – переменная в трехмерном массиве TDMas. Ее аналог – координата x.

Формат данных – формат по которому записываются данные в файл.

Формат pre-файла.

Pre-файл (от preset – предварительные установки)– это файл с установками, необходимыми для работы программы, а также с оформлением шкал.

Минимальная длина этого файла в строках – три, максимальная не ограничена, но читаться будут только первые восемь. Итак построчно:

Максимальное значение k. Формат: I2 (integer, две цифры)

Максимальное значение i. Формат: I2

Максимальное значение j. Формат: I2

Очень важно! Эти три строки обязательно должны быть в файле, иначе работа программы завершится с ошибкой. К тому же их нужно обязательно правильно и точно указать. Согласно этим параметрам формируются внутренние массивы программы и потом заполняются данными. Ошибка может повлечь за собой потерю данных или их искажение.

Коэффициент по оси X (j). Это позволяет отобразить данные не с теми координатами, которые предлагает AV, а с необходимыми вам. Т.е. индексы массива будут переведены, например, в микроны. По умолчанию равен 1 (т.е. на шкале отображаются индексы массива). Формат: E4.2 (т.е. вещественный, две цифры после запятой. Например, 0.50)

Коэффициент по оси Y (i). По умолчанию равен 1. Формат: E4.2

Имя оси X. Это имя отображается как имя заданной оси. Длина – не более 20 символов. По умолчанию : ‘X’.

Имя оси Y. Не более 20 символов. По умолчанию: ‘Y’.

Имя оси Z. (ось результатов). Не более 20 символов. По умолчанию: ‘Z’

Далее можно вставлять свои комментарии и пояснения. Программой они не учитываются.

Команды программы.

К сожалению язык Fortran не предоставляет достаточно мощных подпрограмм обработки строк. Поэтому все команды имеют вид не команда операнды, а просто команда. Далее, при необходимости, программа требует ввод дополнительных данных, обычно – координат, но помимо этого и различных значений. Внимание: все команды должны быть набраны в нижнем регистре. 

Команды можно разделить на четыре группы:

Команды помощи

Виды отображения

Анимация

Служебные

Рассмотрим все команды (включая их дополнительный ввод) по их видам:

Команды помощи:

help – эта команда выводит информацию о программе, ее версии и список всех доступных команд. Упоминание о ней есть в строке приглашения к вводу (Enter comand (help for comand list)>).

status – эта команда выводит сообщение о текущих установках: максимальное и минимальное i, максимальное и минимальное j, максимальное k, текущее k, значение delay.

Виды отображения:

visual – эта команда включает 3D-вид отображения. При запуске программы включается именно он. Она не требует дополнительного ввода.

plain3d – эта команда включает отображение в виде растровой карты (контрастной заливки). В этом виде нельзя проводить анимацию. Не имеет дополнительного ввода.

plainx – эта команда переключает в режим отображения одномерных массивов. Она позволяет отобразить сечение по Y. (Т.е. будет отображаться массив с изменяющейся координатой X и постоянной координатой Y). Требует ввод i.

plainy – эта команда также переключает в режим отображения одномерных массивов. Она позволяет отобразить сечение по X. (Т.е. будет отображаться массив с изменяющейся координатой Y и постоянной координатой X). Требует ввод j.

Анимация.

anim – эта команда позволяет провести анимацию при выбранном типе отображения (кроме контрастной заливки). При 3D –виде (команда visual) она требует только ввода начального значения k (k1) и конечного значения k (k2). При сечении по Y (команда plainx) она требует ввода координаты i, при каком значении этой переменной будет происходить анимация. При сечении по X (команда plainy) она требует ввода координаты j, при каком значении этой переменной будет происходить анимация. По окончании анимации текущее k принимает значение k2.

Служебные команды.

k – эта команда позволяет изменить текущее значение k. При наборе k<0 k становится равным 1. При наборе k>max k, k становится равным max k.

delay – эта команда позволяет изменить значение переменной delay, которая определяет задержку между кадрами анимации. Это значение нисколько не указывает на количество секунд или миллисекунд, на которые происходит задержка. При равных значениях переменной delay, более быстрые компьютеры будут давать более маленькую задержку. Начальное значение – 80.

pause – эта команда предназначена для скриптового режима работы. Она позволяет приостановить программу. Требует дополнительного ввода количества задержек.

newfile – эта команда позволяет загрузить новые файлы. Она перебрасывает в начало работы с программой.

exit – выход из программы.

Скриптовый режим программы.

Наличие этого режима – прямое следствие консольного интерфейса программы. Т.е. для создания такой возможности не было необходимости в дополнительных затратах.

Скрипт (сценарий) состоит из команд программы и требуемого для них дополнительного ввода. Кроме этого, первые две строки скрипта это имена pre-файла и файла данных соответственно. Приведем простой пример скрипта:



out.pre

out.txt

plainx

20

delay

50

anim

2

12

20

pause

2

exit



Его работа заключается в следующем:

Считывается pre-файл out.pre из директории где находится программа console.

Считывается файл данных out.txt из директории где находится программа console.

Выполняется команда plainx (сечение по Y) с координатой i=20. Координата задается в следующей строке после команды. Любой дополнительный ввод начинается с новой строки скрипта.

Замена стандартного значения задержки (80) на новое – 50.

Далее выполняется анимация этого вида. После команды anim следуют три строки с ее параметрами – начальное k (2), конечное k (12) и координата i (20), по которой будет происходить сечение.

Потом выполняется команда pause с параметром 2. Это дает двойную задержку перед выполнением следующей команды.

Далее идет команда exit, закрывающая экземпляр AV и программу console.

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

Запуск программы console.

Как видно из предыдущих подразделов программу можно запустить в двух режимах: командном и скриптовом.

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

Запуск в скриптовом режиме: это можно осуществить только при помощи сеанса MS-DOS (Windows 95/98) или программ-оболочек с командной строкой DOS (например Far, Dos Navigator, Norton Commander). Скриптовый режим обеспечивается при помощи перенаправления ввода. Т.е. в командной строке указывается имя программы, потом символ перенаправления ‘<, затем имя файла со скриптом. Пример командной строки: console.exe < in.txt. При выполнении этой команды весь ввод будет браться из файла скрипта in.txt.

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



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)



end program Sample



Как видим здесь формируется двумерный массив M(1:20,1:20) который заполняется значениями M(i,j)=sin(i)+sin(j). Составим pre-файл для него (out.pre):



1

20

20

1.00

1.00

X-scale

Y-scale

Function



Результаты вывода программы:

рис 5.


1. 3D-вид (visual) (рис 5 

2. Контрастная заливка (рис 6):



рис 6.



3. Сечение по X (команда plainy с параметром 20) (рис7):



рис 7.




1-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:

3D-вид (рис 8):



рис 8.



Контрастная заливка (рис 9):




рис 9.



Сечение по X (команда plainy) (рис 10):

рис 10.



Мы рассмотрели все виды и варианты работы программы, протестировали ее во всех режимах. Программа прекрасно согласуется как с Fortran-программами, так и с C/C++ программами. Помимо этих тестов программа была протестирована на результатах вычисления параметров полупроводниковых приборов и показала хорошие результаты.

Системные требования.

Работа программы тестировалась на системах Windows 98, Windows 2000 и Windows XP. Минимальные системные требования – Pentium 166 MMX, 32Mb RAM, 1Mb Video. Как видим поддержка OpenGL не обязательна, хотя желательна. Размер программы, вместе с пакетом Compaq Array Visualizer v1.5 – 16Mb.




Заключение



Разработанная программа, использующая AV, является своеобразным гейтвеем (от англ. gateway) с командной оболочкой, позволяющим передавать данные из рассчитывающей программы инженера в пакет графического отображения информации. Она предоставляет более простой интерфейс для передачи данных. К тому же данные сохраняются в файл и нет необходимости в переносе программы, достаточно переносить только результаты.

Помимо этого, за счет скриптового режима программа позволяет устраивать презентации и показы. Несложная командная система не требует длительного изучения и освоения. Программу можно освоить за 30-40 минут.

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




Раздел 2.

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



Введение



Десять - пятнадцать лет назад ЭВМ либо не имели возможности графического вывода, либо графические дисплеи были очень слабы и не подходили для качественного вывода информации. Печатающие устройства существовали только для символьного вывода. Поэтому все результаты расчетов выводились в виде числовых распечаток, по которым проводился анализ, строились графики и т.д. Пять – десять лет назад графические системы позволяли выводить графики с приемлемым качеством изображения, но только для одномерных случаев. Вывод двухмерных случаев в виде поверхностей требовал огромных вычислительных затрат, с которыми не справлялись процессоры тех лет.

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




2.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.



Для начала выделим основные этапы создания ПО для визуализации инженерных расчетов (далее просто ПО).

Постановка задачи. Формирование требований к выводимой информации.

Создание структуры данных и интерфейса с рассчитывающими программами.

Построение математической модели отображаемой информации (2 подхода):

Использование готовых библиотек OpenGL или DirectX, а также готовых компонент ActiveX.

Построение собственных математических моделей.

Создание интерфейса пользователя.

Итак, мы видим пять основных этапов, различных по сложности и объему работ. К тому же, благодаря большому количеству разработчиков библиотек для графического вывода у нас есть два качественно разных подхода.

Рассмотрим каждый этап в отдельности более подробно.



		Постановка задачи



Очень важно правильно сформулировать задачу и требования к ПО. Это поможет избежать лишних затрат на создание ненужных подпрограмм вывода, либо переделки готовых программ для дополнения необходимого. Так же при постановке задачи необходимо решить стоит ли использовать подход с построением собственных математических моделей, или достаточно ограничиться уже готовыми библиотеками и компонентами, пусть и платными. В дополнении необходимо учесть необходимость вывода числовой информации, а так же создание “твердой копии”, т. е. распечатки на принтере.

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

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



2.3 Создание структуры данных и интерфейса с расчетной программой



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

Интерфейс с рассчитывающей программой может быть совершенно различным. Информация может передаваться через оперативную память (ОЗУ), через файловую систему в виде бинарных файлов или, более объемных, текстовых файлов. Файлы могут быть компрессированы или нет. Какой из способов выбирать зависит от нескольких факторов:

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

Частота изменения входных данных – при частой смене входных данных для расчетов намного эффективнее будет применение передачи результатов через ОЗУ, с вызовом программы визуализации как подпрограммы.

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

Объем передаваемой информации – если объем очень большой, то эффективнее будет хранить его в виде файла. 

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

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

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




2.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)).

Работа с трехмерными изображениями.

После проведения интерполяции уже можно построить графики для одномерных случаев. Но двумерные случаи (поверхности) требуют дополнительных математических и алгоритмических методов.

 Изображение пространственных объектов на экранной плоскости не возможно без операции проектирования. Видов такого проектирования существует довольно много. Мы остановимся на описании проектирования пучком прямолинейных лучей. Различают два типа таких пучков: пучок лучей, исходящих из одной точки и пучок лучей, параллельный заданному направлению. Для получения проекции заданного объекта на плоскость необходимо провести через каждую его точку прямую из проектирующего пучка и затем найти координаты точек пересечения этих прямых с плоскостью изображения.

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






Для описания преобразований проектирования также удобно пользоваться матрицами. Например, матрица проектирования на плоскость 

0yz вдоль оси 0x имеет следующий вид:

Если M(x,y,z) – заданная точка, то соответствующая ей точка на плоскости изображения находится так:v

Таким образом, точка M проектируется в точку M*(0,y,z).

В случае, если плоскость проектирования параллельна координатной 





плоскости 0yz, матрица несколько изменяется:

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

Матрицы, соответствующие другим случаям взаимного расположения проектирующего пучка параллельных лучей и координатной системы, разумеется, также существуют. Рассмотрим, например, случай косоугольного проектирования, при котором пучок прямых пересекает координатную плоскость 0xy по углом 45o (кабинетная проекция). Тогда соответствующая матрица будет иметь следующий вид:






Для просмотра построенной поверхности необходимо включить операции вращения 3D-объекта и, иногда увеличения. Увеличение целесообразно делать по полученным после процесса интерполяции данным, т.е. пересчитывать функцию снова. А вот вращение, перемещение а также зеркальное отображение необходимо делать при помощи общего аффинного преобразования:



x*=a1x+b1y+c1z+d1,

y*=a2x+b2y+c2z+d2,

z*=a3x+b3y+c3z+d3.



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

 Следует, однако, заметить, что при составлении программ приведенная выше покоординатная формула записи простейших преобразований, как правило, не используется. Ее заменяют другой, более удобной матричной записью:








Рассмотрим частный случай для вращения:

матрица поворота вокруг оси 0x.





матрица поворота вокруг оси 0y.

матрица поворота вокруг оси 0z





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





Для построения качественного изображения желательно удалить те линии, которые при проектировании на плоскость экрана оказываются невидимыми. Для этого можно использовать различные алгоритмы как-то: алгоритм плавающего горизонта, алгоритм использующий список приоритетов, алгоритм использующий трассировку лучей, алгоритм использующий z-буфер. Последний, наиболее простой разберем подробно.

Это один из простейших алгоритмов удаления невидимых поверхностей. Работает этот алгоритм в пространстве изображения. Идея z-буфера является простым обобщением идеи о буфере кадра. Буфер кадра используется для запоминания атрибутов (интенсивности) каждого пиксела в пространстве изображения, z-буфер - это отдельный буфер глубины, используемый для запоминания координаты z или глубины каждого видимого пиксела в пространстве изображения. В процессе работы глубина или значение z каждого нового пиксела, который нужно занести в буфер кадра, сравнивается с глубиной того пиксела, который уже занесен в z-буфер. Если это сравнение показывает, что новый пиксел расположен впереди пиксела, находящегося в буфере кадра, то новый пиксел заносится в этот буфер и, кроме того, производится корректировка z-буфера новым значением z. Если же сравнение дает противоположный результат, то никаких действий не производится. По сути, алгоритм является поиском по х и у наибольшего значения функции z (х, у).

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

 Основной недостаток алгоритма - большой объем требуемой памяти. Если сцена подвергается видовому преобразованию и отсекается до фиксированного диапазона координат z значений, то можно использовать z-буфер с фиксированной точностью. Информацию о глубине нужно обрабатывать с большей точностью, чем координатную информацию на плоскости (х, y); обычно бывает достаточно 20 бит. Буфер кадра размером 512х512х24 бит в комбинации с z-буфером размером 512х512х20 бит требует почти 1.5 мегабайт памяти. Однако снижение цен на память делает экономически оправданным создание специализированных запоминающих устройств для z-буфера и связанной с ним аппаратуры.

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

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

 Хотя реализация методов устранения лестничного эффекта, основывающихся на префильтрации, в принципе возможна, практически это сделать трудно. Однако относительно легко реализуются методы постфильтрации (усреднение подпикселов). Напомним, что в методах устранения лестничного эффекта, основывающихся на постфильтрации, сцена вычисляется в таком пространстве изображения, разрешающая способность которого выше, чем разрешающая способность экрана. Поэтому возможны два подхода к устранению лестничного эффекта на основе постфильтрации. В первом используется буфер кадра, заданный в пространстве изображения, разрешение которого выше, чем у экрана, и z-буфер, разрешение которого совпадает с разрешением экрана. Глубина изображения вычисляется только в центре той группы подпикселов, которая усредняется. Если для имитации расстояния от наблюдателя используется масштабирование интенсивности, то этот метод может оказаться неадекватным.

Во втором методе оба буфера, заданные в пространстве изображения, имеют повышенную разрешающую способность. При визуализации изображения.

Как мы видим построение собственных математических моделей – процесс трудоемкий и сложный. В моделях могут содержаться ошибки, которые исправить гораздо сложнее, чем ошибки в программах. К тому же использование аппаратных функций видеоадаптеров и графических ускорителей требует специальных знаний, на обучение которым тратится много времени. А без таких знаний выполнение графических программ заметно замедляется.



		Создание интерфейса пользователя



Этот этап выделен как заключающий, потому что от вида интерфейса зависит только удобство работы с программой. Однако любой пользователь достаточно быстро привыкает к любому интерфейсу.

С другой стороны, создание хорошего интерфейса пользователя позволит ему быстрее освоить программу и эффективнее с ней работать.

На данный момент существует 2 вида интерфейса пользователя: интерфейс командной строки (называемый так же DOS-интерфейс, UNIX-интерфейс или консольный интерфейс) и графический интерфейс (называемый так же GUI – Graphics Users Interface (графическая среда пользователя) или оконный интерфейс).

Написание консольного интерфейса не трудоемко в плане написания программы, но весьма сложно в плане разработки системы команд. Если система команд разработана неправильно, то зачастую приходится много раз повторять один и тот же ввод, одни и те же команды, что заметно усложняет процесс работы с программой. Для создания программ с консольным интерфейсом достаточно знаний обработки строк и перевода данных из строкового типа в различные числовые.

Написание графического интерфейса наоборот, требует специальных знаний графических библиотек и упрощает разработку структуры интерфейса, так как все GUI стандартизированы и строятся одинаково. Однако программы с графическим интерфейсом занимают больше места, и гораздо больше времени на создания, которое, однако можно сократить используя определенные языки программирования и определенные IDE, например: Object Pascal – Delphi, C++ - C++ Builder с библиотекой OWL, C++ - Visual C++ с библиотекой MFC. Однако не все современные языки программирования имеют развитые IDE и хорошие библиотеки для создания GUI. Частный пример – язык Fortran. Compaq Visual Fortran 6.5 входящий в пакет Visual Studio 6 не поддерживает библиотеку MFC и способен работать только с WIN32 API, что заметно замедляет скорость написания программы, и увеличивает количество строк кода.




Заключение



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




Раздел 3.

Организационно-экономический раздел

Оценка целесообразности создания программного продукта с применением методики оценки конкурентоспособности.



Введение



Созданная в процессе дипломного проектирования программа использует пакет Compaq Array Visualizer v1.5 для своей работы. Целью данного раздела является показать целесообразность такого выбора, а так же экономические выгоды от использования данной программы. 

Созданное ПО имеет массу конкурентов на рынке. В основном это большие САПР для ИМС такие как, например Cadence имеющие свои, встроенные, программы визуализации.

Оговоримся сразу, что использование созданного ПО предполагается в рамках университетской программы, к тому же работающей по расчетам программ инженеров. Таким образом основными техническими характеристиками будут являться системные требования программ, так как компьютерная техника в России остается достаточно дорогой и поставить мощные рабочие станции во всех классах и лабораториях института не представляется возможным. К тому же по всем остальным параметрам очень сложно определить различия узкоспециализированной программы от САПР более общего назначения. Можно еще заметить, что алгоритмы визуализации программы Array Visualizer ничем не уступают тому же Cadence.

Оценим конкурентоспособность созданного товара с этими условиями (т.е. как университетской программы).




3.1 Понятие конкурентоспособности



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

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

По степени конкурентоспособности товара производитель может судить о целесообразности вывода данного товара на рынок. Конкурентоспособность характеризует способность товара быть купленным в числе первых на рынке среди товаров-конкурентов. А покупателю конкурентоспособность товара раскрывает уровень привлекательности данного товара и степень его конкурентных преимуществ.

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

Классификационную схему, отражающую факторы привлекательности товара и его конкурентоспособности, можно представить в виде цепочки: цена – качество – сервис – маркетинговое окружение. Или в виде следующей таблицы:



Фактор.

Характеристика критериев.

Цена

Соотношение уровня цены с ценами основных конкурентов. 

Развитость системы дифференциации цен в зависимости от соотношения спроса и предложения, а также политики конкурентов.

Привлекательность для потребителей системы скидок.

Качество

Технико-эксплуатационные характеристики продукции (функциональность, надежность, удобство эксплуатации и т.д.).

Престижность, дизайн, экологичность товара.

Сервис

Качество поставки товара.

Уровень торгового обслуживания.

Наличие запасных материалов и центров по сервисному обслуживанию.

Маркетинговое окружение.



Уровень организации маркетинг-логистики.

Эффективность рекламных мероприятий.

Уровень дизайна и содержательности упаковки.

Разработанность брэндинга товара.

Уровень гарантийного обслуживания покупателей до и после приобретения товара.

Возможность покупки товара с помощью средств мультимедиатехноглогий.



Качественные показатели конкурентоспособности характеризуют свойства товара, его характеристики с точки зрения готовности товара удовлетворить конкурентную потребность.

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

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

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

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

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

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

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

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

Для оценки уровня нормативных параметров используется специальный показатель, который имеет только два значения – 1 или 0. 





где qi – частный показатель по i-му нормативному параметру;

m – число нормативных параметров, подлежащих оценке.

Если изделие соответствует нормам и стандартам, то этот показатель равен 1, если нет, - то 0. Общий показатель по нормативным параметрам (Iнп) рассчитывается как произведение частных показателей по каждому параметру:

Как видно, если один из частных показателей будет равен 0, то общий показатель также будет равен 0, а значит изделие или товар в этом случае являются неконкурентоспособными.

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



Цп=Цт+Цэ.



Оценка соответствия свойств товара конкретной потребности производится чаще всего в процессе использования товара. Поэтому эту группу оценочных показателей условно можно называть консументной (от англ. consume – потреблять).

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





где Ki – частный консументный показатель по i-му параметру;

Pнi – величина i-го параметра анализируемого изделия;

Pэi – величина i-го параметра эталонного изделия (например, товара–конкурента ).

После расчета частных консументных показателей определяют общий показатель по консументным параметрам (Kкп):





где ai – удельный вес i-го параметра.

m – число параметров

Рассчитанный общий показатель Kкп показывает, на сколько создаваемый (или уже созданный) товар соответствует эталонному товару по данному параметру. На практике сопоставление возможно с товаром-конурентом. Поэтому реальное значение Kкп должно быть проверено на соответствие конкретной потребности (1):





где Pнi – величина консументного параметра создаваемого изделия;

Pкi – величина консументного параметра изделия-конкурента.

Оценка экономических параметров конкурентоспособности связана с определением цены потребления анализируемого (или создаваемого) изделия и сравнением ее с ценой потребления товара-конкурента. Сравнение цен потребления производится по формуле (2):





где Э – общий показатель по экономическим параметрам;

Цпа – цена потребления анализируемого изделия;

Цпк – цена потребления товара-конкурента.

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



При Kип>=1 изделие считается конкурентоспособным.

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



3.2 Оценка конкурентоспособности



В качестве товара-конкурента возьмем популярную САПР для ИМС Cadence.

Созданное в процессе дипломного проектирования ПО соответствует минимальным нормативным требованиям, предъявляемым к ПО. Поэтому Iнп=1.

Рассчитаем экономический параметр Э. Цена используемой программы Compaq Array Visualizer 1.5 составляет от $200 до $500 в зависимости от поставки. Будем брать максимальную. Система Cadence для ПК стоит порядка $5000 (не будем брать в учет затраты на обучение персонала считаем что сотрудники уже обучены). В соответствии с формулой (2):



Э = 500/5000=0.1.



Выделим теперь консументные параметры (поскольку системные требования – чем меньше – тем лучше, то взята обратная величина, за идеальное принята минимальная величина).



Название параметра

Array Visualizer + созданное ПО

Cadence

AV Ki

Cadence Ki

Мин. рабочая частота процессора, MHz

166

300

1

0.55

Мин. объем ОЗУ, Mb

32

64

1

0.5

Занимаемое место на HDD, Mb

16

1300

1

0.01

Удобство использования 

-

-

0.4

1



Расчет относительных значений технических параметров:

Название параметра

AV Ki

Cadence Ki

ai

(Pнi/Pкi)*ai

Мин. рабочая частота процессора

1

0.55

0.20

0.36

Мин. объем ОЗУ

1

0.5

0.20

0.4

Занимаемое место на HDD

1

0.01

0.01

1

Удобство использования

0.4

1

0.59

0.24

Общий Kкп

2



С учетом экономического параметра Э=0.1 интегральный показатель 



Kин=(Kкп / Э)=(2 / 0.1)=20.



 Обоснуем выбор коэффициентов ai. Наиболее дешевой компонентой компьютера из всех системных требований является жесткий диск. Величина в 1.5 Gb уже не является заоблачной. Однако процессоры по-прежнему дороги, как и модули ОЗУ. А вот удобство использования - очень важный параметр. Итак общий Kкп в соответствии с формулой (1) : Kкп=2. Тогда, исходя из формулы (3) интегральный показатель уровня конкурентоспособности изделия Kин=20. Это означает что производимое ПО конкурентоспособно.




Заключение.



Естественно, что мы сравнивали созданное ПО с САПР для ИМС Cadence только в узкой, специализированной нише. Т.е. наша программа ни в коей мере не заменяет полностью такую систему как Cadence. Однако для выводов инженерных расчетов на уровне университетской программы она может в некоторых случаях оказаться экономически выгоднее, чем большие системы (например: лабораторные работы студентов, проектирование новых приборов с написанием собственных программ сотрудниками института).




Раздел 4.



Производственно-экологическая безопасность и охрана труда.

Анализ нормативных документов при работе с ПК.



Введение



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

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

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

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

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



4.1 Требования к производственному освещению



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

Производственное освещение должно удовлетворять следующим требованиям:

1. Освещенность должна соответствовать характеру труда, который определяется объектом различия, фоном, контрастом объекта с фоном.

2. Необходимо обеспечить достаточно равномерное распределение яркости на рабочей поверхности, а также в пределах окружающего пространства. Светлая окраска потолка, стен и производственного оборудования способствует созданию равномерного распределения яркости в поле зрения.

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

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

5. Величина освещенности должна быть постоянной во времени. Колебания освещенности, вызванные резким изменением напряжения в сети, приводят к значительному утомлению. Пульсация освещенности связана также с особенностями работы газоразрядной лампы. Снижение коэффициента пульсации с 55 до 5% (при трехфазном включении) приводит к повышению производительности труда на 15%.

6. Следует выбирать оптимальную направленность светового потока. Наибольшая видимость достигается при падении света под углом 60 градусов к его нормали, а наихудшая при нуле градусов.

7. Следует выбирать необходимый состав спектра освещения. Это существенно при работах, где требуется правильная цветопередача.

8. Все элементы осветительных установок должны быть достаточно долговечными, электро- и взрыво- безопасными.

Обеспечение этого условия достигается применением зануления или заземления, ограничением напряжения для питания местных или переносных светильников до 42 вольт и ниже.

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

- наименьшая допустимая освещенность от общего освещения составляет 300 лк;

- при работе за компьютером желательно, чтобы освещенность рабочего места не превышала 2/3 нормальной освещенности помещения;

- экран дисплея не должен быть ориентирован в сторону источников света (окон, настольных ламп и т.п.);

 при размещении рабочего места рядом с окном угол между экраном дисплея и плоскостью окна должен составлять не менее 90 градусов (для исключения бликов), прилегающую часть окна желательно зашторить;

- не следует располагать дисплей непосредственно под источником освещения или вплотную с ним;

- стена позади дисплея должна быть освещена примерно так же, как и его экран;

- яркость для блестящих поверхностей более 0.2 кв.м не должна превышать 500 кд/кв.м;

- показатель ослепленности не должен превышать 40 единиц;

коэффициент пульсаций 10 - 20 %.

Специфика работы за ПК, состоит в том, что работать приходится с так называемым самосветящимся объектом.

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



4.2 Защита от излучений



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

История исследования этого вопроса достаточно длительная и непростая, но полученные результаты носят пока еще преимущественно статистический характер и не имеют адекватного объяснения. Частотный состав (спектр) излучения монитора характеризуется наличием рентгеновских, ультрафиолетовых, инфракрасных и других электромагнитных колебаний. Опасность рентгеновского и части других излучений большинством ученых признается пренебрежимо малой, поскольку их уровень достаточно невелик и в основном поглощается покрытием экрана. Наиболее тяжелая ситуация связана, по-видимому, с полями излучений очень низких частот (ОНЧ) и крайне низких частот (КНЧ), которые, как выяснилось, способны вызывать биологические эффекты при воздействии на живые организмы. Было обнаружено, что электромагнитные поля с частотой порядка 60 Гц могут инициировать изменения в клетках животных (вплоть до нарушения синтеза ДНК). Особенно поразительным для исследователей оказался тот факт, что, в отличие, например, от рентгеновского излучения, электромагнитные волны обладают необычным свойством: опасность их воздействия при снижении	 интенсивности излучения не уменьшается, мало того, некоторые поля действуют на клетки тела только при малых интенсивностях или на конкретных частотах.

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

Исследователи из Macworld обнаружили, что если на расстоянии 10 см перед мониторами, обычно используемыми с компьютерами Macintosh, напряженность магнитного поля составляет примерно от 5 до 23 мГс, то на расстоянии 70 см от экрана ни у одного из обследованных мониторов напряженность поля не превышала величины 1 мГс. (Интенсивность поля вне указанных пределов составляла 0.1 - 0.5 мГс.)

Как это ни странно, но до сих пор нет нормативов для излучений КНЧ-магнитных полей, хотя в некоторых странах (в том числе в Швеции и Канаде) разработаны стандарты для излучений ОНЧ-магнитных полей. Большое число поставщиков - например, фирмы IBM, DEC и Philips - продают мониторы, удовлетворяющие указанным стандартам. Кроме того, любой монитор, работающий не на ЭЛТ, имеет то преимущество, что не излучает переменных компонент, связанных с наличием систем вертикального и горизонтального отклонения электронного луча.

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



4.3 Электробезопасность



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

С применением ПК эта проблема встает особенно остро, поскольку систему электропитания нужно проложить по всему помещению, где расположены ПЭВМ.

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

ГОСТ 12.4.011-75 в разделе "Средства коллективной защиты" определяет следующий перечень основных видов средств защиты от поражения электрическим током: устройства оградительные, автоматического контроля и сигнализации, защитного заземления и зануления, автоматического отключения, выравнивания потенциалов и понижения напряжения, дистанционного управления; изолирующие устройства и покрытия; предохранительные устройства; молниеотводы и разрядники; знаки безопасности.

ГОСТ 12.2.007-75 устанавливает требования безопасности, предотвращающие или уменьшающие до допустимого уровня воздействие на человека электрического тока; электрической искры или дуги; движущихся частей изделия; частей изделия, нагревающихся до высоких температур; опасных и вредных материалов, используемых в конструкции изделия, а также опасных и вредных веществ, выделяющихся при эксплуатации.

Основными средствами защиты от поражения электрическим током при работе на компьютере являются защитное заземление и зануление.

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

Защитное заземление является простым, эффективным и широко распространенным способом защиты человека от поражения электрическим током при прикосновении к металлическим поверхностям, оказавшимся под напряжением. Обеспечивается это снижением напряжения между оборудованием, оказавшимся под напряжением, и землей до безопасной величины.

При установке ПК типа IBM PC с использованием защитного заземления наибольшее допустимое сопротивление защитных заземляющих устройств составляет 4 Ома.

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

Наибольшее допустимое сопротивление заземляющих устройств и заземлителей в системе зануления при подключении ПК типа IBM PC составляет 30 Ом.

Изоляция имеет важное значение в электроустановках, она защищает их от чрезмерной утечки токов, предохраняет людей от поражения током и исключает возникновение пожаров.

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

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

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



4.4 Пожарная безопасность



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

Для тушения пожара должны применяться ручные огнетушители и переносные установки. Электросети и электроустановки, которые находятся под напряжением, тушить водой нельзя ни в коем случае, т.к. через струю воды может произойти поражение электрическим током. Именно поэтому для тушения пожара, который возник из-за неисправности электроприборов, применяют только пенные огнетушители.

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



4.5 Защита от шума и вибрации



Шум - это беспорядочное сочетание звуков различной частоты и интенсивности.

Шум на рабочих местах в помещениях, где приходится работать программистам, создается внутренними источниками: техническими средствами, установками кондиционирования воздуха и другим оборудованием.

Допустимые шумовые характеристики рабочих мест регламентируются ГОСТ 12.1.003-83.

Мероприятия, проводимые для снижения уровня шума определяются ГОСТ 12.1.029-80 "ССБТ. Средства и методы защиты от шума. Классификация".

Снижение уровня производственных шумов в машинных залах достигается ослаблением шумов самих источников и специальными архитектурно-планировочными мероприятиями, такими как:

- облицовка стен и колонн звукопоглощающими перфорированными плитами с прокладкой из пористых поглотителей шума;

- уменьшение площади стеклянных ограждений и оконных проемов;

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

- применение на рабочих местах звукогасящих экранов;

- отделение помещений с высоким уровнем шума от других помещений звукоизолирующими перегородками.

Колебания тел с частотой, меньшей 16 Гц, воспринимаются организмом человека только как вибрация. Сопровождающие шум механические вибрации не только вредно воздействуют на организм, но и мешают человеку выполнять как мыслительные, так и двигательные операции. Зрительное восприятие также ухудшается под воздействием вибрации.

Нормируются параметры вибрации в соответствии с требованиями ГОСТ 12.1.012-78 "ССБТ. Вибрация. Общие требования безопасности".

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



4.6 Психофизиологические опасные и вредные производственные факторы



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

Монотонность или монотония - психическое состояние человека, вызванное однообразием восприятий или действий.

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

Для уменьшения влияния этих факторов необходимо применять оптимальные режимы труда и отдыха в течении рабочего дня:

- общее время работы за дисплеем не должно превышать 50% всего рабочего времени программиста;

- при обычной работе за компьютером необходимо делать 15-минутные перерывы через каждые два часа, а при интенсивной работе - через каждый час;

- не следует превышать темп работы порядка 10 тысяч нажатий клавиш в час (примерно 1500 слов);

- предпочтительнее использовать дисплеи с высокой разрешающей способностью (разрешением) и удобным размером экрана (лучше не применять CGA и EGA-мониторы и малоразмерные, менее 15" по диагонали, экраны);

- лучше выбирать видеоадаптеры с высоким разрешением и, по возможности (если есть на рынке и цена приемлемая), частотой обновления экранного изображения не менее 70-72 Гц;

- обязательно ставить на дисплеи экранные, в частности, поляризационные, фильтры, в несколько раз снижающие утомляемость глаз;

- наконец, при вводе данных с клавиатуры рекомендуется не зажимать телефонную трубку между плечом и ухом.

Рабочая поза оказывает значительное влияние на эффективность работы человека. Основные требования к рабочим местам при выполнении работы сидя приведены в ГОСТ 12.2.033-78 "ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования".

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

- рабочее место должно быть оборудовано так, чтобы исключать неудобные позы и длительные статические напряжения тела;

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

К обслуживанию и работе на ПК допускаются лица прошедшие медосмотр при поступлении на работу. Последующий медосмотр проводится раз в два года.

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



4.7 Расчет воздухообмена



Одним из основных параметров по оптимизации микроклимата и состава воздуха в помещении является обеспечение надлежащего воздухообмена.

Санитарными нормами установлено, что объем производственных помещений на одного работающего должен составлять не менее 15 кубометров, а площадь помещения - не менее 4.5 кв.м.

В производственных помещениях объемом до 20 кубометров на одного работающего при отсутствии загрязнения воздуха производственными вредностями вентиляция должна обеспечивать подачу наружного воздуха в количестве не менее 30 куб.м/час на одного работника, а в помещениях объемом 20 - 40 кубометров на одного работающего - не менее 20 куб.м/час. Во всех указанных случаях при этом должны быть выдержаны нормы по температуре и влажности воздуха.

Помещение, где располагается рабочее место программиста, имеет площадь 24.5 кв.м и объем 81 кубометр. Учитывая вышеприведенные 

требования найдем допустимое количество одновременно работающих человек:



а) N < 24.5 / 4.5 = 5.5

б) N < 81 / 15 = 5.4



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

Произведем расчет воздухообмена.

Исходные данные:

1. норма температуры в рабочей зоне для помещений, характеризуемых избытком [>23 Вт/м3] теплоты для легкой работы t = 20 - 22 °C ;

2. Объем помещения: 81 кубометр.

3. Количество аппаратуры и выделяемая ей мощность:

		Монитор SK-3142	- K1=4 шт. - W1=150 Вт

			ЭВМ IBM PC/AT	- K2=4 шт.	- W2=250 Вт

5. Количество работающих: n = 4.

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

Для одного человека необходимо L'=30м3/ч воздуха. Для удаления тепла выделенного аппаратурой тоже необходим воздухообмен.

Исходя из количества работающих, необходим следующий воздухообмен

L1 = n * L' = 4 * 20 = 120 м3/ч.



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





где:

Qя - явно выделяемое тепло в помещении в Дж/ч;

p - плотность воздуха - 1,2 кг/м3;

c - теплоемкость воздуха - 1 кДж/кг К;

tух - температура воздуха, уходящего из помещения;

tпр - температура воздуха, подаваемого в помещение.

tух обычно определяется по следующей формуле:



tух=tрз + t(H-L) , 



где

tрз - температура в рабочей зоне;

H - высота от пола до центра вытяжного отверстия;

t - температурный градиент (0,5 - 1,5 °C/м);

L - высота от пола до рабочей зоны.

Избыточное тепло выделяемое аппаратурой:



Qа = 3600*(W1*K1 + W2*K2) =

= 3600*(4*150+4*250) =

= 3600*1600 Дж/ч = 5760 кДж/ч



Избыточное тепло выделяемое людьми:

Qл = 4 чел * 355 кДж/ч = 1420 кДж/ч.



Явно выделяющееся избыточное тепло:



Qя = Qа + Qл = 5760 + 1420 = 7180 кДж/ч.



Температура удаляемого воздуха:



tух = 22 oC+1.5 ( 2.2-1 ) = 24 °C.



Пусть температура поступающего воздуха



tп=20 °C.



Тогда





Таким образом получаем, что система воздухообмена должна обеспечивать собственную производительность 1496 м3/ч для поддержания нормального микроклимата, при обеспечении кондиционером температура поступающего воздуха не более 20 °С.




Заключение



В данном разделе проведен анализ нормативов по освещенности, защите от шума и вибрации, электро и пожаробезопасности, защите от излучений, психофизиологических факторов при работе с персональными компьютерами, нормативов помещений дисплейных классов. Так же произведен расчет воздухообмена для дисплейного класса кафедры, который показал что при работе четырех человек в помещении объемом 81 кубометр необходим воздухообмен примерно 1500м3/ч.




Выводы по дипломному проекту



В процессе дипломного проектирования была создана программа – расширение для визуализатора инженерных и научных расчетов Compaq Array Visualizer. Эта программа написана на языке Фортран и рассчитана на визуализацию расчетов полупроводниковых приборов, хотя может быть использована для визуализации любых инженерных и научных расчетов. Программа согласуется с инженерными программами на языках C++ и Fortran и может быть использована как на этапе отладки, так и на этапе демонстрации. Режим сценариев (скриптов) позволяет проводить презентации. 

Программа, в совокупности с визуализатором Compaq Array Visualizer показала индекс конкурентоспособности по отношению к САПР Cadence в нише визуализации Kкп=20, в основном из-за малой цены.




Литература



1. Братеньев О.В. Современный Фортран. Москва. Диалог-МИФИ, 1998г.

2. Братеньев О.В. Фортран для профессионалов. Математическая библиотека IMSL. Москва. Диалог-МИФИ. 2000г.

3. Шелеств В.Д. Программирование. Санкт-Петербург. BHV. 2001г.

4. Самарский А.А. Введение в численные методы.

5. Боресков А.В. Шикин Е.В. Шикина Г.Е. Компьютерная графика: первое знакомство. Москва. Финансы и статистика. 1996г.

6. Константинова Л.А. Ларионов Н.М. Писеев В.М. Методические указания по выполнению раздела “Охрана Труда” в дипломном проекте для студентов МИЭТ. Москва. МИЭТ. 1988г.

7. Багиев Г.Л., Тарасевич В.М., Х. Анн “Маркетинг: учебник”. Москва. “Экономика”. 2001г.




Приложение 1.



Листинг программы console



program Diplom_console



 use AVDef

 use DFLib

 use AVViewer



!Block_1

implicit none

integer :: lbi=1,ubi,lbj=1,ubj,lbk=1,ubk,i,j,k,status,hav

integer(2) :: plx, ply, vis, pld

integer(4) :: delay

real(4) :: hx,hy,ii,jj

real(4), allocatable :: TDMas(:,:,:)

real(4), allocatable :: VMas(:,:)

!DEC$ATTRIBUTES array_visualizer :: VMas

real(4), allocatable :: PXMas(:)

!DEC$ATTRIBUTES array_visualizer :: PXMas

real(4), allocatable :: PYMas(:)

!DEC$ATTRIBUTES array_visualizer :: PYMas

!Sclaes

real(4), allocatable :: XAxis (:)

!DEC$ATTRIBUTES array_visualizer :: XAxis

real(4), allocatable :: YAxis (:)

!DEC$ATTRIBUTES array_visualizer :: YAxis

character (8) :: com

character (70) :: preFile, txtFile

character (20) :: xname, yname, zname



!Block_2

!reading filenames

call Help()

1 write (*,'(a\)') 'Enter name of file with presets values >'

read *,preFile

write (*,'(a\)') 'Enter name of file with matrix values >'

read *,txtFile



!default values

hx=1

hy=1

xname='X'

yname='Y'

zname='Z'



!reading presets

98 format (E4.2)

open (3,FILE=trim(preFile))

 read(3,'(I2)', END=2) ubk,ubi,ubj

 read(3,98, END=2) hx,hy

 read(3,'(a)', END=2) xname

 read(3,'(a)', END=2) yname

 read(3,'(a)', END=2) zname

2 close (3)



!allocate arrays

 allocate (TDMas(lbk:ubk,lbi:ubi,lbj:ubj))

 allocate (VMas(lbi:ubi,lbj:ubj))

 allocate (PXMas(lbj:ubj))

 allocate (PYMas(lbi:ubi))

 allocate (XAxis(lbj:ubj))

 allocate (YAxis(lbi:ubi))



!set axis scales

do j=lbj,ubj

 XAxis(j) = real(j)*hx

end do

do i=lbi,ubi

 YAxis(i) = real(i)*hy

end do



!reading values

99 format (E12.5)

open (3,FILE=trim(txtFile))

 do k=lbk,ubk

 do i=lbi,ubi

 do j=lbj,ubj

 read(3,99,END=3) TDMas(k,i,j);

 end do

end do

 end do

close (3)

!starting state k=1, i=1, j=1

3 k=1

do i=lbi,ubi

 do j=lbj,ubj

 VMas(i,j)=TDMas(k,i,j)

 end do

end do

j=1

do i=lbi,ubi

 PYMas(i)=VMas(i,j)

end do

i=1

do j=lbj,ubj

 PXMas(j)=VMas(i,j)

end do

delay = 80



!Block_3

!prepare to start AV

call faglStartWatch(VMas, status)

call faglStartWatch(PXMas, status)

call faglStartWatch(PYMas, status)

call faglStartWatch(XAxis, status)

call faglStartWatch(YAxis, status)

!starting graph is 'visual' k=1

plx=0;

ply=0;

pld=0;

vis=1;

call favStartViewer(hav, status)

call favSetArray(hav, VMas, status)

call favSetDimScale(hav, 1, YAxis, status)

call favSetDimScale(hav, 2, XAxis, status)

call favShowWindow(hav, av_true, status)

call favSetUseAxisLabel(hav, X_AXIS, 1, status)

call favSetAxisLabel(hav,X_AXIS, trim(xname), status)

call favSetUseAxisLabel(hav, Y_AXIS, 1, status)

call favSetAxisLabel(hav,Y_AXIS, trim(yname), status)

call favSetUseAxisLabel(hav, Z_AXIS, 1, status)

call favSetAxisLabel(hav,Z_AXIS, trim(zname), status)

call Stat()

!Block_4

4 call favSetArrayName(hav, 'Array Visualizer Extender Shell', status)

write (*,'(a\)') 'Enter comand (help for comand list)> '

read(*,'(a)') com

if (trim(com) == 'status') then

 call Stat()

end if

if (trim(com) == 'anim') then

 call Animat()

end if

if (trim(com) == 'delay') then

 call ChangeDelay()

end if

if (trim(com) == 'k') then

 call ChangeK()

end if

if (trim(com) == 'plainx') then

 call PlainX()

end if

if (trim(com) == 'plainy') then

 call PlainY()

end if

if (trim(com) == 'plain3d') then

 call Plain()

end if

if (trim(com) == 'visual') then 

 call Visu()

end if

if (trim(com) == 'help') then

 call Help()

end if

if (trim(com) == 'exit') then

 goto 5



end if

if (trim(com) == 'pause') then

call Paus()

end if

if (trim(com) == 'newfile') then

 goto 1

end if

goto 4



!Block_5

5 print *, "Ending work"

 call faglEndWatch(Vmas, status)

 call faglEndWatch(PXMas, status)

 call faglEndWatch(PYMas, status)

 call faglEndWatch(XAxis, status)

 call faglEndWatch(YAxis, status)

 deallocate(TDMas)

 deallocate(VMas)

 deallocate(PXMas)

 deallocate(PYMas)

 deallocate(XAxis)

 deallocate(YAxis)

 call favEndViewer(hav, status)

 

contains

!Block_6

!Subroutins



subroutine Stat()

 print *, "Matrix information"

 write (*,*) 'min i=',lbi,' max i=',ubi

 write (*,*) 'min j=',lbj,' max j=',ubj

 write (*,*) 'max k=', ubk

 print *, "Current position"

 write (*,*) 'k=', k

 write (*,*) 'Animate delay is ', delay

end subroutine





subroutine ChangeDelay()

 write (*,*) 'Current animate delay is ', delay

 write (*,'(a\)') 'Enter new value of delay > '

 read *, delay

 return

end subroutine



subroutine Animat()

 integer :: k1, k2, tmp

 if (pld==1) then

 print *, "Can't animate in this view type"

 return

 end if

 write (*, '(a\)') 'Current k is '

 print *, k

 write (*, '(a\)') 'Enter start k > '

 read *, k1

 if (k1>ubk) then

 k1=ubk

 end if

 if (k1<lbk) then

 k1=lbk

 end if

 write (*, '(a\)') 'Enter end k > '

 read *, k2

 if (k2>ubk) then

 k2=ubk

 end if

 if (k2<lbk) then

 k2=lbk

 end if

 if (k2<k1) then

 tmp=k1

 k1=k2

 k2=tmp

 end if



 if (plx==1) then

 write(*,'(a\)') 'Enter i > '

read *,ii

 i=int(ii/hy)

 if (i>ubi) then

 i=ubi

 end if

 if (i<lbi) then

 i=lbi

 end if

 end if



 if (ply==1) then

 write(*,'(a\)') 'Enter j > '

 read *,jj

 j=int(jj/hx)

 if (j>ubj) then

 j=ubj

 end if

 if (j<lbj) then

 j=lbj

 end if

 end if



 print *, "Start animation"



 if (vis==1) then

 print *, "3D animation"

 do k=k1,k2

 write (*,*) 'k=', k

 do i=lbi,ubi

 do j=lbj,ubj

 VMas(i,j)=TDMas(k,i,j)

 end do

 end do

 call favUpdate(hav,0,status) 

 do tmp=1,(delay*1000000)

 end do

 end do

 end if



if (plx==1) then

 do k=k1,k2

 write (*,*) 'k=', k

 do j=lbj,ubj

 PXMas(j)=TDMas(k,i,j)

 end do

 call favUpdate(hav,0,status) 

 do tmp=1,(delay*1000000)

 end do

 end do

 end if



 if (ply==1) then

 do k=k1,k2

 write (*,*) 'k=', k

 do i=lbi,ubi

 PYMas(i)=TDMas(k,i,j)

 end do

 print *, k

 call favUpdate(hav,0,status) 

 do tmp=1,(delay*1000000)

 end do

 end do

 end if



 k=k-1

 print *, "End animation"

 return

end subroutine



subroutine Help()

 print *, "Array Visualizer extender v1.01"

 print *, "by V. Sidorin (year 2002)"

 print *, "View comands:"

 print *, "anim, plainx, plainy, plain3d, visual"

 print *, "Other comands:"

 print *, "newfile, help, k, delay, status, exit"

 return

end subroutine



subroutine ChangeK()

 write (*,*) 'Current k is: ', k

 write(*,'(a\)') 'Enter k > '

 read *,k

 if (k>ubk) then

 k=ubk

 end if

 if (k<lbk) then 

 k=lbk

 end if

 do i=lbi,ubi

 do j=lbj,ubj

 VMas(i,j)=TDMas(k,i,j)

 end do

 end do

 j=1

 do i=lbi,ubi

 PYMas(i)=VMas(i,j)

 end do

 i=1

 do j=lbj,ubj

 PXMas(j)=VMas(i,j)

 end do

 call favUpdate(hav, 0, status)

 return

end subroutine

 

subroutine PlainX()

 if (plx==0) then

 plx=1

 ply=0

 pld=0

 vis=0

 call favSetArray(hav, PXMas, status)

 call favSetDimScale(hav, 1, XAxis, status)

 call favSetUseAxisLabel(hav, X_AXIS, 1, status)

 call favSetAxisLabel(hav,X_AXIS, trim(xname), status)

 call favSetUseAxisLabel(hav, Z_AXIS, 1, status)

call favSetAxisLabel(hav,Z_AXIS, trim(zname), status)

 end if

 write(*,'(a\)') 'Enter i > '

 read *,ii

 i=int(ii/hy)

 if (i>ubi) then

 i=ubi

 end if

 if (i<lbi) then

 i=lbi

 end if

 do j=lbj,ubj

 PXMas(j)=TDMas(k,i,j)

 end do

 call favUpdate(hav,0,status)

 return

end subroutine



subroutine PlainY()

 if (ply==0) then

 plx=0

 ply=1

 pld=0

 vis=0

 call favSetArray(hav, PYMas, status)

 call favSetDimScale(hav, 1, YAxis, status)

 call favSetUseAxisLabel(hav, X_AXIS, 1, status)

 call favSetAxisLabel(hav,X_AXIS, trim(yname), status)

 call favSetUseAxisLabel(hav, Z_AXIS, 1, status)

 call favSetAxisLabel(hav,Z_AXIS, trim(zname), status)

 end if

 write(*,'(a\)') 'Enter j > '

 read *,jj

 j=int(jj/hx)

 if (j>ubi) then

 j=ubj

 end if

 if (j<lbj) then

 j=lbj

end if

 do i=lbi,ubi

 PYMas(i)=TDMas(k,i,j)

 end do

 call favUpdate(hav,0,status)

 return

end subroutine



subroutine Plain()

 if (pld==0) then

 plx=0

 ply=0

 pld=1

 vis=0

 call favSetArray(hav, VMas, status)

 call favSetDimScale(hav, 1, YAxis, status)

 call favSetDimScale(hav, 2, XAxis, status)

 call favSetGraphType(hav, 2, status)

 call favSetUseAxisLabel(hav, X_AXIS, 1, status)

 call favSetAxisLabel(hav,X_AXIS, trim(xname), status)

 call favSetUseAxisLabel(hav, Y_AXIS, 1, status)

 call favSetAxisLabel(hav,Y_AXIS, trim(yname), status)

 end if

 do i=lbi,ubi

 do j=lbj,ubj

 VMas(i,j)=TDMas(k,i,j)

 end do

 end do

 call favUpdate(hav,0,status)

 return

end subroutine



subroutine Visu()

 if (vis==0) then

 plx=0

 ply=0

 pld=0

 vis=1

 call favSetArray(hav, VMas, status)

call favSetDimScale(hav, 1, YAxis, status)

 call favSetDimScale(hav, 2, XAxis, status)

 call favSetGraphType(hav, 1, status)

 call favSetUseAxisLabel(hav, X_AXIS, 1, status)

 call favSetAxisLabel(hav,X_AXIS, trim(xname), status)

 call favSetUseAxisLabel(hav, Y_AXIS, 1, status)

 call favSetAxisLabel(hav,Y_AXIS, trim(yname), status)

 call favSetUseAxisLabel(hav, Z_AXIS, 1, status)

 call favSetAxisLabel(hav,Z_AXIS, trim(zname), status)

 end if

 do i=lbi,ubi

 do j=lbj,ubj

 VMas(i,j)=TDMas(k,i,j)

 end do

 end do

 call favUpdate(hav,0,status)

 return

end subroutine



subroutine Paus()

 integer(4) :: tmp, a, b

 write(*,'(a\)') 'Enter number of delays > '

 read *, a

 if (a<1) then

 a=1

 end if

 do b=1,a

 do tmp=1,(delay*1000000)

 end do

 end do

end subroutine



end program