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

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

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

рис 8.

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

рис 9.

3. Сечение по 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) с командной оболочкой, позволяющим передавать данные из рассчитывающей программы инженера в пакет графического отображения информации. Она предоставляет более простой интерфейс для передачи данных. К тому же данные сохраняются в файл и нет необходимости в переносе программы, достаточно переносить только результаты.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.