Академический Документы
Профессиональный Документы
Культура Документы
Москва
Издательство МГТУ им. Н.Э. Баумана
2009
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
УДК 681.3.041.048(075.8)
ББК 30.2-5-05
И20
Р е ц е н з е н т ы : д-р физ.-мат. наук С.О. Старков,
д-р физ.-мат. наук, проф. С.В. Клименко
Иванов И.П.
И20 Программные средства обработки результатов расчетов
в инженерных пакетах Ansys CFX и Abaqus для высокопроизво-
дительных вычислительных установок : учеб. пособие / И.П. Ива-
нов, А.М. Чеповский. — М.: Изд-во МГТУ им. Н.Э. Баумана,
2009. — 189, [3] с.
ISBN 978-5-7038-3321-6
Приведены подробные сведения по использованию программных
средств обработки результатов инженерных расчетов. Рассмотрены
возможности и описания функций интерфейса программных средств
Ansys CFX и Abaqus. Описаны методы визуализации результатов
расчетов на примерах высокоуровневых библиотек Avango и Open
Inventor. Приведены подробные примеры использования указанных
средств разработки.
Для студентов и аспирантов технических специальностей, изу-
чающих курсы «Параллельное программирование», «Компьютерная
графика», «Современные сетевые технологии», «Распределенные
системы обработки информации», «Моделирование». Пособие будет
полезно также для всех интересующихся возможностями использова-
ния инженерных пакетов на высокопроизводительных вычислитель-
ных установках.
УДК 681.3.041.048(0.75.8)
ББК 30.2-5-05
ВВЕДЕНИЕ
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Типы элементов
Типы объемов
6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Счетчики
7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
cfxCNT_VARIABLE,
// Число тетраэдров
cfxCNT_TET,
// Число пирамид
cfxCNT_PYR,
// Число призм
cfxCNT_WDG,
// Число шестигранников
cfxCNT_HEX,
// Размер массива счетчиков
cfxCNT_SIZE
};
8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Функция
int cfxExportInit
(char *resfile, int counts[cfxCNT_SIZE])
открывает файл с результатами расчетов в Ansys CFX. Имя этого
файла задано аргументом resfile и инициализирует API экспор-
та, возвращая число зон, определенных в модели. Если в аргумен-
те counts был передан ненулевой указатель, то после вызова
функции он будет указывать на массив счетчиков. Данная функция
должна быть вызвана перед остальными функциями экспорта.
Функция
void cfxExportDone ()
закрывает файл с результатами расчетов в Ansys CFX и освобожда-
ет ресурсы, выделенные для экспорта. Данная функция должна быть
вызвана после окончания работы остальных функций экспорта.
Функция
void cfxExportError
(void (*callback) (char *errmsg))
определяет пользовательскую функцию, которая будет вызвана до
завершения работы API экспорта в случае возникновения критиче-
ской ошибки. Через параметр errmsg в пользовательскую функ-
цию передается сообщение с кратким описанием возникшей
ошибки. По умолчанию сообщение об ошибке выводится в сис-
темный поток stderr.
Функция
void cfxExportFatal (char *errmsg)
закрывает файл с результатами расчетов в Ansys CFX и вызывает
пользовательскую функцию обработки критической ошибки, ес-
ли она была задана с помощью функции cfxExportError
(см. выше), после чего завершает работу всей программы с кодом
ошибки -1.
9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Функция
int cfxExportNodeCount ()
возвращает число узлов расчетной сетки в текущей зоне.
10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Функция
cfxNode *cfxExportNodeList ()
возвращает указатель на массив структур cfxNode, содержащих
координаты узлов расчетной сетки в текущей зоне. Выделение па-
мяти под массив структур осуществляется самой функцией. Для
освобождения этой памяти необходимо вызвать функцию
cfxExportNodeFree (см. ниже).
Функция
int cfxExportNodeGet
(int nodeid, double *x, double *y, double *z)
позволяет получить координаты узла расчетной сетки (параметры
x, y и z), заданного параметром nodeid. Значение параметра дол-
жно лежать в пределах от единицы до числа узлов включительно.
Возвращаемым результатом является указанный номер узла или
нуль, если номер узла был указан неверно.
Функция
void cfxExportNodeFree ()
освобождает ресурсы, выделенные для экспорта узлов расчетной
сетки в текущей зоне.
Функция
int cfxExportElementCount ()
возвращает число элементов расчетной сетки в текущей зоне.
Функция
cfxElement *cfxExportElementList ()
возвращает указатель на массив структур cfxElement, содержа-
щих описания элементов расчетной сетки в текущей зоне. Выделе-
ние памяти под массив структур осуществляется самой функцией.
Для освобождения этой памяти необходимо вызвать функцию
cfxExportElementFree (см. ниже).
Функция
int cfxExportElementGet
(int elemid, int *elemtype, int *nodelist)
11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Функция
int cfxExportVariableCount (int usr_level)
возвращает число доступных параметров, соответствующих уров-
ню, заданному аргументом usr_level. Если задан нулевой уро-
вень, функция возвращает число всех параметров, определенных в
модели.
Функция
int cfxExportVariableSize (int varnum,
int *dim, int *length, int *bndflag)
позволяет получить размерность (аргумент dim) и длину массива
значений (аргумент length) параметра, заданного номером
varnum (номер должен лежать в пределах от единицы до числа па-
раметров, определяемого функцией cfxExportVariableSize,
см. выше). Длина массива значений параметра (аргумент length)
может быть равна либо единице, либо числу узлов расчетной сетки.
В случае если длина массива значений параметра равна единице,
параметр имеет интерпретируемые значения только в граничных
узлах модели, во внутренних областях значение параметра постоян-
но. Значение, возвращаемое аргументом bndflag, указывает на то,
содержит ли параметр скорректированные значения в граничных
узлах (bndflag = 1) или нет (bndflag = 0). В первом случае
функция возвращает значение номера параметра, во втором функ-
ция возвращает нуль.
Функция
char *cfxExportVariableName
(int varnum, int alias)
15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
16
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Ядро OSG
Граф сцены
20
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Расчет нормалей
и сглаживание поверхности модели
24
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
x1 y1 z1
N x2 y2 z2
x z3
3 y3
(y31 z21 y21 z31 ; x21 z31 x31 z21 ; x31 y21 x21 y31 ). (1.3)
26
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
28
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
30
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
32
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
protected:
// Имя файла с данными для экспорта
char* exportFileName;
// Признак начала экспорта
bool exportStarted;
// Число временных шагов
int timestepCount;
// Номер текущего временного шага
int timestepNum;
// Выполнение инициализирующих действий
// перед началом экспорта данных
void initialize();
public:
// Конструктор
// ExportFileName - имя файла с данными для экспорта
DataExporter(char* ExportFileName);
// Деструктор
~DataExporter();
// Выполнение операций, необходимых
// для осуществления экспорта данных
// Возврат признака успешного старта
// (экспорт разрешен).
bool StartExport();
// Выполнение операций, необходимых
// для корректного завершения экспорта данных
void FinishExport();
// Вывод сводной информации о данных,
// доступных для экспорта
void PrintExportDataSummary();
// Признак того, что функции экспорта поддерживают
// раздельный экспорт данных, относящихся к разным
// временным шагам
bool HandlesTimesteps();
// Экспорт числа временных шагов
int GetTimestepCount();
// Установление текущего временного шага, для которого
// будут осуществляться операции экспорта,
// и возвращение признака успешной операции
// TimestepNum - номер временного шага
bool SetCurrentTimestep(int TimestepNum);
// Выполнение необходимых установок в случае,
// когда в данных отсутствует информация
33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
34
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
38
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
for (int i = 0; i < ValCount; i++)
color->push_back(Vec4(0, 1, 0, 1));
}
else
{
// Длина диапазона значений
float range = max - min;
// Среднее значение
float middle = min + range / 2.0;
// Длина отрезка диапазона
float diap = range / 10.0;
// Номер отрезка диапазона
int dnum;
// Цикл по всем значениям параметра
for (int i = 0; i < ValCount; i++)
{
// Определение номера отрезка диапазона,
// в который попадает текущее значение
dnum = clrRangeNumberByValue(ValList[i], min,
middle, diap);
// определение составляющих цвета
float* clrcomp = clrComponentsByRangeNumber(dnum);
// Задаение цвета материала текущей точки
color->push_back(Vec4(clrcomp[0], clrcomp[1],
clrcomp[2], 1));
// Освобождение памяти
delete[] clrcomp;
}
}
return color.get();
}
Для векторных параметров (размерность больше 1, как правило,
равна 3) осуществляется построение векторной диаграммы. Цвет,
длина и направление каждого вектора на диаграмме характеризуют
значение векторного параметра в данной точке. Цвета векторов оп-
ределяются по тому же алгоритму, что и цвета точек контура рас-
пределения, только в качестве скалярной величины используется
модуль вектора. Длина вектора также пропорциональна модулю
значения. В листинге 1.3 приведен код функции, осуществляющей
построение векторных диаграмм для моделей OSG.
39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
40
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
valVector[vi] = 0.0f;
}
float vx = (*ModelVertices)[vCounter].x();
float vy = (*ModelVertices)[vCounter].y();
float vz = (*ModelVertices)[vCounter].z();
float kmod = vmod / MaxModulus;
vecVerts->push_back(Vec3(vx, vy, vz));
vecVerts->push_back(Vec3(vx + valVector[0] * kmod,
vy + valVector[1] * kmod,
vz + valVector[2] * kmod));
vecGeom->addPrimitiveSet
(new DrawArrays(PrimitiveSet::LINES, vCounter * 2,2));
}
delete[] valVector;
vecGeom->setVertexArray(vecVerts.get());
vecGeom->setColorArray(vecColors.get());
vecGeom->setColorBinding
(Geometry::AttributeBinding::BIND_PER_PRIMITIVE);
return vecGeom;
}
На заключительном шаге итерации цикла по параметрам осу-
ществляется сохранение созданной модели в файл формата .osg.
Для обеспечения уникальности имен файлов моделей для различ-
ных параметров используется следующий формат имени:
<основа имени>[_ts<номер временного шага>]_
<s|v><номер параметра>.osg
В качестве основы имени по умолчанию используется имя
файла результатов без расширения (для задания другой основы
применяют опцию –osgname, см. ниже). Затем может следовать
номер временнóго шага (в том случае, если он задан функциями
экспорта). Далее пишут спецификатор размерности: s для скаляр-
ных параметров и v для векторных. Затем указывают номер рас-
четного параметра и, наконец, расширение файла .osg.
Помимо основного файла модели для каждого расчетного па-
раметра могут быть сгенерированы также два дополнительных:
файл легенды и файл значений. Файл легенды используется при-
ложением визуализации для создания и размещения на экране
цветной легенды значений параметра. Ниже приведен формат и
пример содержимого файла легенды:
41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
42
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
44
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
Viewer* viewer = dynamic_cast<Viewer*>(&aa);
switch(ea.getEventType())
{
// Нажатие кнопки клавиатуры
case(GUIEventAdapter::KEYDOWN):
{
_sceneManager->processKeyPress(ea.getKey());
return true;
}
// Движение указателя мыши
case(GUIEventAdapter::FRAME):
{
if (viewer)
_sceneManager->processMousePick(viewer, ea);
return false;
}
// Однократное нажатие левой кнопки мыши
case(GUIEventAdapter::PUSH):
{
if (viewer)
_sceneManager->processMouseClick(viewer, ea);
return false;
}
// Двухкратное нажатие левой кнопки мыши
case(GUIEventAdapter::DOUBLECLICK):
{
if (viewer)
_sceneManager->processMouseDoubleClick(viewer, ea);
return false;
}
default:
return false;
}
}
};
...
void main(int argc, char* argv[])
{
...
ref_ptr<SceneManager> Manager = new SceneManager();
ref_ptr<Group> ModelRoot =
(Group*)osgDB::readNodeFile(modelFileName.c_str());
45
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Manager->AttachModel(ModelRoot.get());
...
osgViewer::Viewer viewer;
viewer.addEventHandler
(new SceneEventHandler(Manager.get()));
viewer.setSceneData( Manager->GetScene() );
viewer.run();
}
Класс SceneEventHandler наследуется от библиотечного
класса osgGA::GUIEventHandler и реализует единственный
метод handle, в который передаются ссылка на объект класса
osgViewer::Viewer и аргументы события. Метод определяет
тип возникшего события и вызывает соответствующий метод класса
SceneManager. Класс SceneManager является ключевым клас-
сом модуля визуализации. Он осуществляет построения графа сце-
ны приложения, реализует необходимый функционал для работы с
моделью и изменения параметров модели. Указатель на объект это-
го класса передается в конструктор класса SceneEventHandler
для последующего вызова методов обработки событий.
Функция main иллюстрирует схему запуска приложения визуа-
лизации. Сначала создается объект класса SceneManager (далее —
менеджер сцены). После этого осуществляется загрузка графа визуа-
лизируемой модели из файла с расширением .osg с помощью
функции osgDB::readNodeFile, которая возвращает указатель
на корень графа модели. Этот указатель передается в метод
AttachModel менеджера сцены, который осуществляет присоеди-
нение модели к общему графу приложения. После этого могут быть
выполнены дополнительные операции присоединения легенды и за-
грузки значений параметра из файла. Затем создается объект класса
osgViewer. С помощью метода addEventHandler, в который
передается объект класса SceneEventHandler, осуществляется
присоединение обработчиков событий. Методом setSceneData в
объект класса osgViewer::Viewer передается указатель на пол-
ный граф сцены приложения, который возвращается методом
GetScene менеджера сцены. Завершающим действием является вы-
зов метода run() объекта osgViewer, который открывает окно
приложения и запускает цикл отрисовки сцены.
46
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
47
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
48
Рис. 1.14. Внешний вид сцены для работы с моделью на примере визуализации модели смесителя
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
50
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
52
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
54
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
58
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
59
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ABSORPTION COEFFICIENT:
Absorption Coefficient = 1.0 [m^-1]
Option = Value
END
THERMAL CONDUCTIVITY:
Option = Value
Thermal Conductivity = 0.6069 [W m^-1 K^-1]
END
EQUATION OF STATE:
Density = 997.0 [kg m^-3]
Molar Mass = 18.02 [kg kmol^-1]
Option = Value
END
SPECIFIC HEAT CAPACITY:
Option = Value
Reference Pressure = 1 [atm]
Reference Specific Enthalpy = 0.0 [J/kg]
Reference Specific Entropy = 0.0 [J/kg/K]
Reference Temperature = 25 [C]
Specific Heat Capacity = 4181.7 [J kg^-1 K^-1]
Specific Heat Type = Constant Pressure
END
END
END
END
FLOW:
SOLUTION UNITS:
Angle Units = [rad]
Length Units = [m]
Mass Units = [kg]
Solid Angle Units = [sr]
Temperature Units = [K]
Time Units = [s]
END
SIMULATION TYPE:
Option = Steady State
END
OUTPUT CONTROL:
RESULTS:
File Compression Level = Default
Option = Full
END
END
60
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
DOMAIN: StaticMixer
Coord Frame = Coord 0
Domain Type = Fluid
Fluids List = Water
Location = B1.P3
DOMAIN MODELS:
DOMAIN MOTION:
Option = Stationary
END
BUOYANCY MODEL:
Option = Non Buoyant
END
REFERENCE PRESSURE:
Reference Pressure = 0 [atm]
END
END
FLUID MODELS:
HEAT TRANSFER MODEL:
Option = Thermal Energy
END
TURBULENCE MODEL:
Option = k epsilon
END
TURBULENT WALL FUNCTIONS:
Option = Scalable
END
THERMAL RADIATION MODEL:
Option = None
END
COMBUSTION MODEL:
Option = None
END
END
BOUNDARY: in1
Boundary Type = INLET
Location = in1
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
MASS AND MOMENTUM:
Normal Speed = 2 [m s^-1]
Option = Normal Speed
61
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
END
HEAT TRANSFER:
Option = Static Temperature
Static Temperature = 315 [K]
END
TURBULENCE:
Option = Medium Intensity and Eddy Viscosity Ratio
END
END
END
BOUNDARY: in2
Boundary Type = INLET
Location = in2
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
MASS AND MOMENTUM:
Normal Speed = 2 [m s^-1]
Option = Normal Speed
END
HEAT TRANSFER:
Option = Static Temperature
Static Temperature = 285 [K]
END
TURBULENCE:
Option = Medium Intensity and Eddy Viscosity Ratio
END
END
END
BOUNDARY: out
Boundary Type = OUTLET
Location = out
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
MASS AND MOMENTUM:
Option = Average Static Pressure
Relative Pressure = 0 [Pa]
END
PRESSURE AVERAGING:
Option = Average Over Whole Outlet
62
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
END
END
END
BOUNDARY: StaticMixer Default
Boundary Type = WALL
Location=
F1.B1.P3,F2.B1.P3,F4.B1.P3,F5.B1.P3,F6.B1.P3,F8.B1.P3
BOUNDARY CONDITIONS:
HEAT TRANSFER:
Option = Adiabatic
END
WALL INFLUENCE ON FLOW:
Option = No Slip
END
WALL ROUGHNESS:
Option = Smooth Wall
END
END
END
END
SOLVER CONTROL:
ADVECTION SCHEME:
Option = Upwind
END
CONVERGENCE CONTROL:
Maximum Number of Iterations = 100
Physical Timescale = 2 [s]
Timescale Control = Physical Timescale
END
CONVERGENCE CRITERIA:
Residual Target = 1.E-4
Residual Type = RMS
END
DYNAMIC MODEL CONTROL:
Global Dynamic Model Control = Yes
END
END
END
COMMAND FILE:
Version = 5.7
END
63
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
64
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рис. 1.21. Ввод имени файла задачи для загрузки параметров модели
66
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
67
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
68
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
69
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
70
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
float posX;
float posY;
virtual void InitDefaultState();
71
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
73
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
74
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2. ПРОГРАММИРОВАНИЕ В ABAQUS
76
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
*
Итератор (от англ. iterate) — объект, позволяющий перебирать все элемен-
ты коллекции без учета особенностей ее реализации.
77
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Объект Session
78
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Объект MDB
Объект ODB
80
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
81
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Данные модели
82
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Данные результатов
86
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
• узел;
• точка интегрирования;
• область;
• вся модель.
Вывод от всех запросов, которые относятся к определенному
элементу или области будет сохранен в одном объекте
HistoryRegion. На рис. 2.9 изображена иерархия объектов для
истории нагружения.
87
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
89
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Строки (odb_String)
90
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Последовательность (odb_Sequence)
Этот класс создан для хранения упорядоченного списка объек-
тов определенного типа. Информация может быть извлечена из
последовательности или добавлена в нее.
Последовательности для базовых типов некоторых объектов:
• odb_SequenceInt;
• odb_SequenceFloat;
• odb_SequenceString;
• odb_SequenceInvariant;
• odb_SequenceElementFace.
Для вложенных последовательностей также существует набор
классов (аналог двухмерных массивов):
• odb_SequenceSequenceFloat;
• odb_SequenceSequenceSequenceFloat;
• odb_SequenceSequenceInt;
• odb_SequenceSequenceElementFace.
Для базовых объектов Abaqus определены следующие классы
последовательностей:
• odb_SequenceNode;
• odb_SequenceElement;
• odb_SequenceFieldValue;
• odb_SequenceFrame;
• odb_SequenceSectionPoint;
• odb_SequenceLoadCase;
• odb_SequenceFieldOutput.
Пример работы с последовательностями показан в листинге 2.1.
91
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
92
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
cout << "step name:"<< iter.currentKey().CStr()
<< endl;
const odb_Step& step = iter.currentValue();
// Извлечение и доступ
cout << "step description:"<<
step.description().CStr();
cout << endl;
}
93
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Области (Region)
94
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Материалы (Materials)
Секции (Sections)
Секции в Abaqus позволяют задать для элементов свойства ма-
териалов или дополнить их определение.
Данные о секциях хранятся в объекте-репозитории section, яв-
ляются частью объекта odb. Для расширения Abaqus API командами
работы с секциями необходимо выполнить следующие команды:
odb_SectionApi sectionApi;
odb.extendApi(odb_Enum::odb_SECTION, sectionApi);
Пример доступа к секциям показан в листинге 2.5.
Листинг 2.5. Работа с секциями
odb_SectionContainer& sectionContainer =
sectionApi.sections();
odb_SectionContainerIT scIT(sectionContainer);
for (scIT.first(); !scIT.isDone(); scIT.next())
{
cout << "Section Name:"<< scIT.currentKey() << endl;
}
95
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
96
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
odb_SequenceSectionAssignment sectionAssignmentSeq =
instance.sectionAssignments();
int sects = sectionAssignmentSeq.size();
cout << "Instance:"<< instance.name() << endl;
for(ints=0;s< sects; ++s)
{
odb_SectionAssignment sa = sectionAssignmentSeq[s];
odb_Section section = sa.section();
cout << " Section:"<< section.name() << endl;
odb_Set set = sa.region();
const odb_SequenceElement& elements = set.elements();
int size = elements.size();
cout << " Elements associated with this section : "
<< endl;
for(inte=0;e< size; ++e)
cout << elements[e].label() << endl;
}
}
Шаги (Steps)
Шаги расчета представлены объектом-репозиторием steps и
хранятся в объекте odb. Ключом к репозиторию является название
шага расчета. Следующий пример демонстрирует вывод всех на-
званий шагов расчета:
odb_StepRepositoryIT stepIter( odb.steps() );
for (stepIter.first();
!stepIter.isDone();stepIter.next())
cout << stepIter.currentKey().CStr() << endl;
Фреймы (Frame)
Фрейм — это любое состояние расчета, помеченное к выводу.
Каждый шаг расчета содержит последовательность фреймов,
соответствующих времени расчета.
97
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
98
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
99
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
100
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
101
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
103
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
104
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
105
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
106
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
LeafFromElementSets(elementSets='PART-1-1.E1')
|------ метод -----|------- аргументы -------|
Команда интерфейса класса AFXGuiCommand представляет
собой действие, совершаемое после выхода из состояния (mode), и
содержит следующие аргументы:
• состояние (mode). Состояние активируются по нажатию
пользователем элемента управления в пользовательском интер-
фейсе (чаще всего кнопка или пункт меню). Как только состояние
активировано, можно считывать параметры ввода, передавать ко-
манду ядру и обрабатывать ошибки в процессе работы;
◦ состояния форм (Form modes). Являются интерфейсами к
диалоговым окнам и осуществляют сбор данных из одного или
нескольких диалоговых окон;
◦ процедурные состояния (Procedure modes). Позволяют
считывать последовательные цепочки пользовательского ввода и
генерировать команду ядру на основании полученных данных;
• метод (method). Строка, представляющая собой название
метода команды ядру;
• название объекта (objectName). Строка — название объек-
та ядра;
• регистрирация запроса (registerQuery). Логическое зна-
чение, обусловливающие необходимость получения информации
(флаг подписки) на изменение определенных параметров ядра.
Пример, иллюстрирующий создание команды на изменение
графических параметров:
cmd = AFXGuiCommand(self, 'setValues',
'session.graphicsOptions', TRUE)
Элементы графического интерфейса взаимодействуют между
собой посредством механизма передачи сообщений. Любой эле-
мент может запрашивать сообщения от других элементов и ста-
вить в соответствие обрабатывющую функцию. Схема процесса
взаимодействия элементов графического интерфейса представлена
на рис. 2.13.
В роли объектов могут выступать как элементы графического
интерфейса (виджеты), так и диалоговые окна.
107
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
108
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
109
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
*
VRML (от англ. Virtual Reality Modeling Language — язык моделирования
виртуальной реальности) — стандартный формат файлов для демонстрации трех-
мерной интерактивной векторной графики.
110
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
111
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
avLink<avFieldContainer>& fc);
istream& operator>>(istream& stream,
avLink<avFieldContainer>& fc);
Этот интерфейс вместе с универсальным потоковым интерфей-
сом полей позволяет системе Avango обеспечивать потоковые функ-
циональные возможности на уровне полевых контейнеров без знания
точного типа основного объекта. Этот механизм распространяется на
все классы, выведенные из класса avFieldContainer.
Адаптируемые поля используются для соединения интерфейса,
основанный на методах Performer, с полевым интерфейсом
Avango. Они передают запросы getValue() и setValue() со-
ответствующим функциям взятия и установки значения интерфей-
са Performer. Это гарантирует, что связанная с Performer информа-
ция о состоянии графа будет правильным образом обновлена в
соответствии с изменениями значения поля и возможные побоч-
ные эффекты будут должным образом обработаны.
В качестве примера можно показать процедуру подклассифи-
кации для узла pfGroup, который имеет частично унаследован-
ный интерфейс:
class pfGroup {
int setName(const char *name);
const char* getName(void);
int addChild(pfNode *child);
int insertChild(int index, pfNode *child);
int replaceChild(pfNode *old,pfNode *new);
int removeChild(pfNode *child);
int searchChild(pfNode *child);
pfNode* getChild(int index);
int getNumChildren(void);
};
Класс avGroup получен из классов pfGroup и
avFieldContainer и снабжен подходящим набором адапти-
руемых полей:
class avGroup : public pfGroup,
public avFieldContainer
{
public:
avMultiAdaptorField<avLink<avGroup>> Parents;
112
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
avSingleAdaptorField<string> Name;
avMultiAdaptorField<avLink<avGroup>> Children;
};
Поле Name реализует методы getValue() и setValue() в
терминах запросов pfGroup::getName() и pfGroup::
setName(). Поле Children является адаптацией мультиполя к
целому диапазону функций доступа Performer, используемых для
управления дочерними узлами узла группы. Возвращаемый тип
Children.getValue() — STL-вектор avLink<avNode>.
Шаблонный класс avLink<> определяет указатель на объекты
Avango, который скрывает детали подсчета ссылок от разработчи-
ка и существенно уменьшает сложность написания кода, не прове-
ряя исключительные ситуации.
Интерфейс полевых контейнеров Avango позволяет организо-
вывать потоки данных и создавать сценарии. Эти возможности
унаследованы любыми специфичными для приложения объектами,
добавленными разработчиком. Поскольку узлы Avango унаследо-
ваны от узлов Performer, узлы обоих типов могут быть свободно
объединены при построении графа сцены.
3.1.4. Узлы
3.1.5. Датчики
116
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
117
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
120
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Граф сцены
122
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Формы примитивов
123
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
124
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Свойства элементов
125
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Комплекты узлов
Сенсоры
126
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
127
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Действия
К созданному графу сцены можно применить разнообразные
действия. Действие — это объект соответствующего подкласса
класса SoAction. Применение действия — это выполнение мето-
да apply над любой частью графа. Действия содержат методы для
управления режимами своего выполнения, поэтому, хотя некото-
рые действия не следует запускать явно, доступ к ним открыт. В
Open Inventor имеются следующие действия: перестройка сцены,
обработка событий, указка, вычисление ограничивающего прямо-
угольника, аккумулирование матрицы преобразований, запись в
файл, действие обратного вызова.
Нет необходимости применять действие перестройки сцены
явно, поскольку оно вызывается автоматически при изменении
сцены. Но оно имеет несколько методов, устанавливающих гло-
бальные характеристики визуализации OpenGL: уровень качества
прозрачности, определяющий использование компонента прозрач-
ности; метод устранения лестничного эффекта (antialiasing).
128
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Обработка событий
и интерактивное взаимодействие
Выбор
Буксировщики и манипуляторы
130
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
131
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
132
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Средства расширения
Заголовок файла
133
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Описание узла
134
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
}
Material {
ambientColor .3 .1 .1
diffuseColor [.8 .7 .2,
1 .2 .2,
.2 1 .2,
.2 .2 1]
specularColor .4 .3 .1
emissiveColor .1 0 .1
}
Имеется также возможность определить многозначные поля.
Значения этих полей заключаются в квадратные скобки и перечис-
ляются через запятую, как это показано в предыдущем примере в
поле diffuseColor. После последнего значения также может
стоять запятая:
[value1, value2, value3,]
Однозначные поля не содержат в описании скобок и запятых.
Значения многозначных полей обычно заключают в квадратные
скобки, но в этом нет необходимости, если полю присваивается
только одно значение:
specularColor .4 .3 .1
или
specularColor [.4 .3 .1]
Существующие типы полей описаны в табл. 3.1.
Таблица 3.1
Типы полей узла в файлах Open Inventor
Тип поля Допустимые форматы Пример
Longs (длинные Целые числа в десятичной, 255
0xff
целые), shorts шестнадцатеричной 0177
(короткие це- или восьмеричной системе
лые), unsigned
shorts (беззна-
ковые целые)
Floats (числа Целые числа или числа 13
13.0
с плавающей с плавающей запятой 13.123
запятой) 1.3e-2
135
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
136
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Флаг игнорирования
137
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Полевые связи
Глобальные поля
138
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Создание инструмента
140
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
DirectionalLight {
}
Transform {
rotation -0.189479 0.981839 -0.00950093 0.102051
center 0 0 0
}
DrawStyle {
}
Separator {
LightModel {
model BASE_COLOR
}
Separator {
Transform {
translation -2.2 0 0
}
BaseColor {
rgb .2 .6 .3 # бледно-зеленый
}
Sphere { }
}
Separator {
BaseColor {
rgb .6 .3 .2 # цвет ржавчины
}
Sphere { }
}
Separator {
Transform {
translation 2.2 0 0
}
BaseColor {
rgb .3 .2 .6 # фиолетовый
}
Sphere { }
}
}
На рис. 3.2 представлен описанный граф сцены.
При выборе третьей сферы путь будет аналогичен представлен-
ному в листинге 3.5. В нем описан подграф главного узла, включая
индексы узлов (4 1 2) и их число (3), как показано на рис. 3.3.
141
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
142
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
model BASE_COLOR
}
Separator {
Transform {
translation 2.2 0 0
}
BaseColor {
rgb 0.3 0.2 0.6
}
Sphere {
}
}
}
}
3
4
1
2
}
143
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
144
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
145
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
146
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Separator {
SeparatorKit {
transform
Transform { translation 1 0 0 }
}
SeparatorKit {
transform
Transform { translation 0 1 0 }
}
SeparatorKit {
transform
Transform { translation 0 0 1 }
}
}
}
}
По умолчанию Open Inventor не создает внутренние части, та-
кие как сепаратор, группа или поле со значением по умолчанию.
Но если коллекция узлов стоит в пути, все элементы прописыва-
ются так, как показано в следующем примере. Вообще, Inventor
создает все части в обратном порядке по отношению к порядку,
описанному в каталоге, начиная с листов узла (листинг 3.8).
Листинг 3.8. Создание коллекции узлов
SeparatorKit {
appearance DEF +0 AppearanceKit {
material DEF +1 Material {
diffuseColor 1 0 1
}
}
childList DEF +2 NodeKitListPart {
containerTypeName "Separator"
childTypeNames "SeparatorKit"
containerNode DEF +3 Separator {
ShapeKit {
appearance DEF +4 AppearanceKit {
material DEF +5 Material {}
}
transform DEF +6 Transform {}
shape DEF +7 Cube {}
topSeparator Separator {
147
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
USE +4
USE +6
DEF +8 Separator {
USE +7
}
}
shapeSeparator USE +8
}
}
}
topSeparator Separator {
USE +0
USE +2
}
}
Класс SoSearchAction
149
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoWriteAction
Класс SoWriteAction (рис. 3.6) служит для записи графа
сцены в файл. При этом содержание сцены записывается в поток,
содержащийся в объекте SoOutput. Это может быть файл, буфер
или системный поток, такой как stdout.
Вся информация, содержащаяся в графе сцены, будет записана
в файл (не только узлы графа, но и значения полей узла, глобаль-
ные поля, связи полей внутри сцены, к которой применяется дан-
ная операция, механизмы (engines) сцены, пути и т. д).
Для класса определен метод void SoAction::apply
(SoNode * root ) [virtual], который выполняет действие
для графа сцены с корневым узлом root.
Класс SoBaseColor
Класс SoBaseColor (рис. 3.7) предназначен для указания
цвета материала. Этот класс используется, например, для задания
рассеивающего цвета для исходной геометрии сцены.
Класс SoCoordinate3
Класс SoCoordinate3 (рис. 3.8) содержит координаты уз-
лов-фигур (shape nodes). Когда при обходе графа встречаются
узлы-фигуры, координаты, содержащиеся в нем, помещаются в
стек и позднее используются узлами-фигурами, тип которых тре-
150
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoFaceSet
151
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoIndexedFaceSet
Класс SoIndexedFaceSet (рис. 3.10) используется для
управления индексируемыми коллекциями граней.
Грани определяются с помощью поля coordIndex. Коорди-
наты, нормали, материалы и текстуры выбираются в определенном
порядке в соответствии с текущим состоянием или из полей узла
vertexProperty и могут быть проиндексированы для создания
треугольников, черырехугольников или многоугольников. Далее
представлен пример простого использования узла для отображе-
ния одной грани многоугольника:
#Inventor V2.1 ascii
Separator {
Coordinate3 {
point [ 0 0 0, 1 0 0, 1 1 0 ]
}
IndexedFaceSet {
coordIndex [ 0, 1, 2, -1 ]
}
}
Общедоступные атрибуты класса:
• SoSFNode SoVertexShape::vertexProperty (теку-
щие координаты, нормали, материалы и текстуры);
152
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
153
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoIndexedLineSet
Класс SoMaterial
154
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
155
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
transparency 0
}
Класс SoMaterialBinding
156
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoNormal
157
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoNormalBinding
Класс SoNormalBinding (рис. 3.15) предназначен для опре-
деления привязки вектора нормали.
Узлы данного класса определяют, как вектор нормали узла
SoNormal связан в графе сцены с узлами-фигурами.
Класс SoSeparator
Класс SoSeparator (рис. 3.16) ассоциирован с типом груп-
повых узлов и сохраняет текущее состояние обхода графа. Под-
графы узлов SoSeparator не изменяют состояние обхода графа,
поскольку они помещают и извлекают из стека состояние обхода
до и после обхода своих дочерних узлов. Узлы SoSeparator
также содержат опции для оптимизации процесса обхода графа,
используя механизм кэширования.
Общедоступные атрибуты класса:
• SoSFEnum SoSeparator::renderCaching (кэширова-
ние инструкций);
158
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoPath
Класс SoCube
Класс SoTranslation
Класс SoRotation
Класс SoFont
160
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoText2
Класс SoText2 (рис. 3.22) предназначен для визуализации 2D-
текста, выровненного с учетом положения камеры.
161
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
162
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Класс SoLineSet
163
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
LineSet {
vertexProperty NULL
startIndex 0
numVertices -1
}
164
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
166
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
SoDB::init();
// Цикл по каждому узлу расчетной сетки
for (int i = 0; i < NodeCount; i++)
{
curNode = &(Nodes[i]);
// Добавление в узел графа точки с координатами
// текущего узла сетки
coord->point.set1Value
(i, curNode->x, curNode->y, curNode->z);
}
return coord;
}
После экспорта узлов сетки программа переходит к экспорту
описания поверхности модели. Поверхность модели Ansys CFX
строится из элементарных участков, каждый из которых задается
массивом индексов узлов расчетной сетки, являющихся вершина-
ми участка. В большинстве случаев массив содержит три индекса,
т. е. поверхность строится из элементарных треугольников, вер-
шинами которых являются узлы сетки. Для представления участка
поверхности в программе используется специальная структура
elemFace, инкапсулирующая в себе указатель на массив индек-
сов и число элементов в этом массиве:
struct elemFace{
int* nodes;
int ncount;
};
Вся поверхность модели Ansys CFX разделена на области
(regions). API экспорта Ansys CFX позволяет экспортировать
описания участков поверхности отдельно по каждой области. В
листинге 3.12 представлен код, осуществляющий экспорт поверх-
ности модели.
Листинг 3.12. Экспорт поверхности модели
// Получение числа областей поверхности
int regnum = cfxExportRegionCount();
int facenum = 0;
// Подсчет суммарного числа элементарных
// участков поверхности во всех областях
for(int i = 1; i <= regnum; i++)
167
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
facenum += cfxExportRegionSize(i, cfxREG_FACES);
}
// Выделение массива для хранения описателей
// участков поверхности
elemFace *faces = new elemFace[facenum];
// Массив для хранения индексов узлов текущей
// поверхности
int inodes[10];
// Индекс текущей поверхности
int FaceIndex = 0;
// Цикл экспорта участков поверхности по каждой облаcти
for(int i = 1; i <= regnum; i++)
{
// Получение размера области
// (числа элементарных участков)
int regsize = cfxExportRegionSize
(regnum, cfxREG_FACES);
// Получение массива идентификаторов участков
// поверхности
int* reglist = cfxExportRegionList(regnum,
cfxREG_FACES);
// Цикл по каждому участку поверхности
for(int j = 0; j < regsize; j++)
{
// Идентификатор текущего участка
int faceid = reglist[j];
// Получение массива индексов узлов расчетной сетки,
// задающих текущий участок поверхности
int facesize = cfxExportFaceNodes(faceid, inodes);
// Сохранение размера массива индексов
faces[FaceIndex].ncount = facesize;
// Выделение массива индексов заданного размера
faces[*FaceIndex].nodes = new int[facesize];
// Сохранение индексов узлов сетки
// в текущем узле описания участка поверхности
for(int k = 0; k < facesize; k++)
faces[FaceIndex].nodes[k] = inodes[k];
FaceIndex++;
}
}
168
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
170
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
root->addChild(ifaceSet);
return root;
}
Для сохранения созданного графа в файл используется функ-
ция, которая осуществляет запись в файл с использованием объек-
та SoWriteAction. В листинге 3.15 приведен код этой функции.
Листинг 3.15. Сохранение созданного графа в файл
// Функция принимает указатель на корень графа,
// имя файла, и сохраняет граф в файл
// с указанным именем
void SaveIvGraph(SoNode* GraphRoot, char* IvFileName)
{
// Объект, описывающий выходной поток
SoOutput *out = new SoOutput;
// Объект для записи графа сцены в поток
SoWriteAction writeAction(out);
// тип файла - текстовый (ASCII)
out->setBinary(false);
// Открытие файла для записи
out->openFile(IvFileName);
// Запись графа сцены в файл
writeAction.apply(GraphRoot);
// Закрытие файла
out->closeFile();
}
На рис. 3.24 представлен результат работы данного этапа про-
граммы на примере модели смесителя, входящей в комплект при-
меров, поставляемых вместе с пакетом Ansys CFX (Static Mixer).
Просмотр модели в формате Inventor осуществляется с помощью
утилиты ivview, входящей в набор инструментов Open Inventor.
На рисунке показана «чистая» модель смесителя, не содержащая
пока никаких графических результатов расчета.
cfxExportVariableSize, cfxExportVariableName и
cfxExportVariableList. В листинге 3.16 представлен код,
осуществляющей экспорт значений расчетных параметров.
172
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
173
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Таблица 3.2
Цветовые составляющие отрезков диапазона значений параметра
1 2 3 4 5 6 7 8 9 10
Номер
отрезка Минимальные Средние Максимальные
значения значения значения
Компонента R 0 0 0 0 0 0 0,5 1 1 1
Компонента G 0 0,5 1 1 1 1 1 1 0,5 0
Компонента B 1 1 1 0,5 0 0 0 0 0 0
174
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
{
// Создание узла, описывающего свойства
// материала поверхности
SoMaterial *material = new SoMaterial;
// Создание узла, описывающего тип привязки
// материала
SoMaterialBinding *mtlBind = new SoMaterialBinding;
// Тип привязки - к каждой вершине индексированно
// (данный тип необходим для того, чтобы
// каждая вершина имела свой цвет)
mtlBind->value =
SoMaterialBinding::PER_VERTEX_INDEXED;
// Задание начального поворота модели
SoTransform *transform = new SoTransform;
transform->rotation.setValue(0.27, -0.86, 0.44,
0.5);
// Задание свойств формы модели
SoShapeHints *shapeHints = new SoShapeHints;
shapeHints = new SoShapeHints;
shapeHints->vertexOrdering =
SoShapeHints::COUNTERCLOCKWISE;
shapeHints->shapeType =
SoShapeHints::UNKNOWN_SHAPE_TYPE;
shapeHints->faceType = SoShapeHints::CONVEX;
shapeHints->creaseAngle = 1.309;
// Цветовые компоненты
float r, g, b;
// Длина диапазона значений
float range = max - min;
// Среднее значение
float middle = min + range / 2.0;
// Длина отрезка диапазона
float diap = range / 10.0;
// Номер отрезка диапазона
int dnum;
// Цикл по всем значениям параметра
for (int i = 0; i < ValCount; i++)
{
// Определение номера отрезка диапазона,
// в который попадает текущее значение
dnum = GetDiapasonNumByValue
(ValList[i], min, max, middle, diap);
175
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
176
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
177
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
178
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
179
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
180
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
root->addChild(mtlBind);
// Добавление в граф узла с цветами отрезков
root->addChild(material);
// Добавление в граф узла с описанием направленных
// отрезков
root->addChild(ilineset);
return root;
}
На рис. 3.26 представлен результат работы данной функции. В
качестве примера выбрана векторная диаграмма скоростей водных
потоков в модели смесителя.
Опции экспорта
Опция
-info
При использовании этой опции программа выводит на экран пол-
ную информацию о данных, содержащихся в файле с результатами
работы пакета Ansys CFX, не генерируя iv-файлы. В листинге 3.19
показана информация, полученная из файла StaticMixer.res
(файл, содержащий результаты расчета модели смесителя), с исполь-
зованием данной опции.
Листинг 3.19. Результаты расчета модели смесителя
// Описание всех зон модели
domain 1 - "StaticMixer"
// Первая зона – «StaticMixer»
// Информация о зоне
2786 nodes
// Число узлов расчетной сетки
1 volumes
// Число объемов
13761 elements:
182
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
// Число элементов
13761 tetrahedron elements (4 vertices)
// Число тетраэдров
0 pyramid elements (5 vertices)
// Число пирамид
0 prism elements (6 vertices)
// Число призм
0 hexahedron elements (8 vertices)
// Число шестигранников
9 face regions
// Число областей поверхности
// Имена областей поверхности и число
// элементарных участков в каждой области
region 1 - "Region1" (540 faces)
region 2 - "Region2" (276 faces)
region 3 - "Region3" (20 faces)
region 4 - "Region4" (132 faces)
region 5 - "Region5" (356 faces)
region 6 - "Region6" (142 faces)
region 7 - "Region7" (14 faces)
region 8 - "Region8" (136 faces)
region 9 - "Region9" (14 faces)
***************************************************
// Статистика по всей модели
Number of timesteps: 0
// Число временных шагов
Total number of domains: 1
// Общее число зон
Total number of nodes: 2786
// Общее число узлов сетки
Total number of volumes: 1
// общее количество объемов
Total number of elements: 13761
// общее число элементов
Total number of tetrahedrons: 13761
// общее количество тетраэдров
Total number of pyramids: 0
// общее число пирамид
Total number of prisms: 0
// общее количество призм
Total number of hexahedrons: 0
183
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
184
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Опция
-domain <номер>
позволяет экспортировать геометрические данные модели и ре-
зультаты расчетов из конкретной зоны, заданной своим номером.
По умолчанию экспорт осуществляется из всех зон, определенных
в модели.
Опция
-tstep <номер>
Позволяет экспортировать результаты расчетов, относящиеся к
конкретному временнóму шагу. По умолчанию экспорт результа-
тов осуществляется для всех временных шагов. Если для модели
определено более одного временного шага, то созданные графиче-
ские модели (контуры распределения и векторные диаграммы) за-
писываются в отдельные iv-файлы для каждого шага.
Опция
-plevel <номер>
позволяет задавать уровень интереса для экспорта значений пара-
метров. По умолчанию используется первый уровень, при котором
экспортируются значения первых 10 параметров.
Опция
-params <номера параметров, разделенные
пробелом>
позволяет экспортировать значения и строить модели для кон-
кретных параметров, заданных своими номерами.
Опция
-region <номер>
позволяет экспортировать геометрические данные конкретной
области поверхности модели, заданной своим номером. При ис-
пользовании данной опции контуры распределения значений
скалярных параметров строятся только для экспортированной
области поверхности. По умолчанию экспортируется вся по-
верхность модели.
Опция
-ex-reg <номера областей поверхности,
разделенные пробелом>
185
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Опция
-ivname <имя>
позволяет задать имя, которое будет являться основой для имени
всех генерируемых файлов. По умолчанию в качестве основы ис-
пользуется имя файла с результатами работы пакета Ansys CFX.
Графическая модель, содержащая результаты расчетов по одному
параметру, сохраняется в файл, имеющий следующий формат
имени:
<основа имени>_<s|v><номер параметра>.iv
Символы s и v обозначают соответственно скалярный (контур
распределения) и векторный (векторная диаграмма) параметры.
186
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рис. 3.28. Контур распределения суммарного давления в модели смесителя с легендой и подписями значений
187
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
188
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
СПИСОК ЛИТЕРАТУРЫ
ИНТЕРНЕТ-РЕСУРСЫ
РУКОВОДСТВА ПОЛЬЗОВАТЕЛЯ
189
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ОГЛАВЛЕНИЕ
Введение ..........................................................................................................3
1. Возможности пакета Ansys CFX................................................................5
1.1. Основные сведения о пакете ...............................................................5
1.2. API экспорта пакета Ansys CFX .........................................................6
1.3. Использование библиотеки OpenSceneGraph для трехмерной
визуализации.......................................................................................17
1.4. Пример интеграции пакета Ansys CFX с библиотекой
OpenSceneGraph..................................................................................29
2. Программирование в Abaqus ...................................................................76
2.1. Описание пакета.................................................................................76
2.2. Объектная модель Abaqus .................................................................76
2.3. База данных результатов расчета......................................................81
2.4. Программные интерфейсы Abaqus ...................................................87
2.5. Интерфейс сценариев.......................................................................100
2.6. Создание пользовательских оболочек над ядром Abaqus ............104
3. Использование библиотек Avango и Open Inventor для трехмерной
визуализации...........................................................................................109
3.1. Обзор системы разработки виртуальных приложений Avango ..109
3.2. Среда для создания графических сцен Open Inventor ...................117
3.3. Построение моделей Open Inventor на основе численных
данных, экспортированных из файла результатов работы
пакета Ansys CFX .............................................................................165
Список литературы .....................................................................................189
Интернет-ресурсы .......................................................................................189
Руководства пользователя..........................................................................189
190
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Учебное издание
191
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ДЛЯ ЗАМЕТОК
192