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
enddo
После того как пройдены все шаги моделирования, файл необходимо закрыть:
close (3)
Таким образом мы можем записать все шаги моделирования в файл данных, чтобы впоследствии им воспользоваться для работы с программой console.
C/C++
Для С/С++ программ необходим формат “%12.5E”. Все числа необходимо приводить в строки. Напомним, что файл должен быть текстовым.
Пример кода с пояснениями.
Для начала объявим переменные массива, файла и вспомогательную строку:
float M[UBI][UBJ];
FILE* f;
charstr[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-программы:
programSample
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
Результаты вывода программы:
1. 3D-вид (visual) (рис 5
2. Контрастная заливка (рис 6):
3. Сечение по X (команда plainy с параметром 20) (рис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-файл для него такой же как и в предыдущем примере.
1. 3D-вид (рис 8):
рис 8.
2. Контрастная заливка (рис 9):
3. Сечение по X (команда plainy) (рис 10):
Мы рассмотрели все виды и варианты работы программы, протестировали ее во всех режимах. Программа прекрасно согласуется как с Fortran-программами, так и с C/C++ программами. Помимо этих тестов программа была протестирована на результатах вычисления параметров полупроводниковых приборов и показала хорошие результаты.
Системные требования.
Работа программы тестировалась на системах Windows 98, Windows 2000 и WindowsXP. Минимальные системные требования – Pentium 166 MMX, 32MbRAM, 1MbVideo. Как видим поддержка OpenGL не обязательна, хотя желательна. Размер программы, вместе с пакетом CompaqArrayVisualizerv1.5 – 16Mb.
Заключение
Разработанная программа, использующая AV, является своеобразным гейтвеем (от англ. gateway) с командной оболочкой, позволяющим передавать данные из рассчитывающей программы инженера в пакет графического отображения информации. Она предоставляет более простой интерфейс для передачи данных. К тому же данные сохраняются в файл и нет необходимости в переносе программы, достаточно переносить только результаты.
Помимо этого, за счет скриптового режима программа позволяет устраивать презентации и показы. Несложная командная система не требует длительного изучения и освоения. Программу можно освоить за 30-40 минут.
Разработанную программу можно использовать на лабораторных работах студентов, для отображения полученных ими результатов. Она может использоваться сотрудниками институтов или предприятий для отображения результатов моделирования как в процессе программирования и отладки моделирующей программы, так и в процессе демонстрации результатов. Таким образом программа console имеет университетский уровень.
Раздел 2.
Технология разработки программного обеспечения для визуализации инженерных расчетов
Введение
Десять - пятнадцать лет назад ЭВМ либо не имели возможности графического вывода, либо графические дисплеи были очень слабы и не подходили для качественного вывода информации. Печатающие устройства существовали только для символьного вывода. Поэтому все результаты расчетов выводились в виде числовых распечаток, по которым проводился анализ, строились графики и т.д. Пять – десять лет назад графические системы позволяли выводить графики с приемлемым качеством изображения, но только для одномерных случаев. Вывод двухмерных случаев в виде поверхностей требовал огромных вычислительных затрат, с которыми не справлялись процессоры тех лет.
В наше время, когда высокого быстродействия достигли не только ЦП и математические сопроцессоры, но и графические сопроцессоры вывод результатов в графическом виде ускорился в сотни раз, построение трехмерных изображений и их преобразование заметно упростилось. Поэтому для всех современных САПР и инженерных программ необходимо представление результатов в виде графиков, поверхностей и т.д. Как и всякий процесс, написание программ обработки результатов для последующего графического вывода и вывод имеет свою технологию. В данном разделе и будет рассмотрена такая технология.
2.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.
Для начала выделим основные этапы создания ПО для визуализации инженерных расчетов (далее просто ПО).
1. Постановка задачи. Формирование требований к выводимой информации.
2. Создание структуры данных и интерфейса с рассчитывающими программами.
3. Построение математической модели отображаемой информации (2 подхода):
4. Создание интерфейса пользователя.
Итак, мы видим пять основных этапов, различных по сложности и объему работ. К тому же, благодаря большому количеству разработчиков библиотек для графического вывода у нас есть два качественно разных подхода.
Рассмотрим каждый этап в отдельности более подробно.
2.2 Постановка задачи
Очень важно правильно сформулировать задачу и требования к ПО. Это поможет избежать лишних затрат на создание ненужных подпрограмм вывода, либо переделки готовых программ для дополнения необходимого. Так же при постановке задачи необходимо решить стоит ли использовать подход с построением собственных математических моделей, или достаточно ограничиться уже готовыми библиотеками и компонентами, пусть и платными. В дополнении необходимо учесть необходимость вывода числовой информации, а так же создание “твердой копии”, т. е. распечатки на принтере.
При определении вида графической информации, нужно решить для каких случаев она будет выводиться – двумерных или же только одномерных. При выборе двумерных случаев у нас тоже есть выбор: можно выводить в виде поверхностей, либо в виде “контрастной заливки”, или же оба этих случая. При постановке задачи на вывод надо учитывать собственные вычислительные ресурсы и необходимую скорость создания приложения.
При определении подхода к построению математической модели вышеуказанные два фактора так же играют главную роль. Собственная модель может обойтись дороже, так как на ее создание уйдет время и, к тому же, как правило, такие модели не задействуют вообще или не на полную мощность возможности графического сопроцессора, а это шаг назад. В связи с этим в последнее время создание собственных математических моделей становится все менее целесообразным и экономически выгодным.
2.3 Создание структуры данных и интерфейса с расчетной программой