Определение атрибутов:
vertex_count - число вершин в каждом из направлений сетки. Произведение элементов массива - это число вершин, определяющих сетку (т.е. исключая все внешние точки). Числа вершин в регулярных сетках с одно-, двух- и трехмерной топологиями приведены в таблице 1, где i, j и k соответствуют элементам массива vertex_counts[1], vertex_counts[2] и vertex_counts[3], соответственно:
cell_counts - число ячеек в каждом из направлений сетки. Произведение элементов массива - это число ячеек во внутренней части сетки;
kind - вид сетки;
index_count - (наследуемый) число индексов, требуемых для уникальной идентификации вершины или ячейки сетки, то же самое, что топологическая размерность сетки (например, одномерная, трехмерная и т.д.).
4.3.18 Объект structured_mesh_with_rind
Объект structured_mesh_with_rind является таким подтипом объекта structured_mesh, который представляет структурированную сетку с заданными внешними плоскостями.
EXPRESS-спецификация:
*)
ENTITY structured_mesh_with_rind
SUBTYPE OF (structured_mesh);
rind_planes : rind;
END_ENTITY;
(*
Определение атрибутов:
rind_planes - связанные с сеткой внешние плоскости.
4.3.19 Объект submesh
Объект submesh является таким подтипом объекта mesh, который представляет сетку, являющуюся частью другой сетки. Подсетка связана с полной родительской сеткой отношением, задаваемым объектом extraction_of_submesh. Ячейки подсетки не обязательно связаны.
EXPRESS-спецификация:
*)
ENTITY submesh
SUBTYPE OF (mesh);
END_ENTITY;
(*
4.3.20 Объект unstructured_mesh
Объект unstructured_mesh представляет неструктурированную сетку, составленную из ячеек, где ячейки не образуют регулярного шаблона и форма ячеек сетки не является однородной. Ячейки имеют вершины на концах ребер ячейки, а также могут иметь узлы на ребрах ячейки, гранях ячейки и во внутренней области ячейки.
Концептуально неструктурированная сетка состоит из вершин сетки и ячеек, образующих объем сетки. Ячейки неструктурированной сетки должны быть соединены за счет того, что каждая из ячеек имеет, по меньшей мере, одну вершину, общую с другой ячейкой. Форма каждой ячейки неструктурированной сетки задается явно.
Примечание - Вершина в углу ячейки - это вершина ячейки.
EXPRESS-спецификация:
*)
ENTITY unstructured_mesh
ABSTRACT SUPERTYPE OF (ONEOF(array_based_unstructured_mesh,
explicit_unstructured_mesh))
SUBTYPE OF (mesh);
cell_count : INTEGER;
END_ENTITY;
(*
Определение атрибутов:
cell_count - число ячеек в сетке.
![]() линейные ячейки
Таблица 2
Таблица 3
Ребра шестигранных, клиновидных, тетраэдральных
и пирамидальных ячеек
![]() Рисунок 15 - Линейные, квадратичные
и кубические треугольные ячейки
![]() Рисунок 16 - Линейные, квадратичные
и кубические четырехугольные ячейки
![]() Рисунок 17 - Линейные, квадратичные
и кубические шестигранные ячейки
![]() Рисунок 18 - Линейные, квадратичные
и кубические клиновидные ячейки
![]() Рисунок 19 - Линейные, квадратичные
и кубические тетраэдральные ячейки
Таблица 4
и пирамидальных ячеек
![]() и кубические пирамидальные ячейки
4.3.21 Объект vertex_defined_cell
Объект vertex_defined_cell является таким подтипом объекта cell, который представляет ячейку, определяемую ее вершинами. Число вершин зависит от топологической формы ячейки. Ячейка может иметь вершины на ребрах, гранях и в своей внутренней области. Наибольшее число вершин на ребрах, гранях и во внутренней области зависит от формы и порядка ячейки.
EXPRESS-спецификация:
*)
ENTITY vertex_defined_cell
SUBTYPE OF (cell);
shape : cell_shape;
order : element_order;
vertices : ARRAY [1:vn_count] OF OPTIONAL vertex;
DERIVE
bound_count : INTEGER := cell_counts(SELF)[1];
edge_node_count : INTEGER := cell_counts(SELF)[2];
opt_node_count : INTEGER := cell_counts(SELF)[3];
required_count : INTEGER := bound_count + edge_node_count;
vn_count : INTEGER := required_count + opt_node_count;
required_vertices : ARRAY [1:required_count] OF vertex
:= shorten_array(vertices, vn_count, required_count);
END_ENTITY;
(*
Определение атрибутов:
shape - топологическая форма ячейки;
order - порядок геометрической интерполяции ячейки;
vertices - вершины на концах ребер ячейки, а также на ребрах, гранях и внутри ячейки. Положение в массиве узла, размещенного в вершине или на ребре, зависит от формы ячейки и задано в графической форме в ИСО 10303-104 (рисунки 10 - 39). Заметим, что многоугольная ячейка является обобщением треугольной и четырехугольной ячейки.
Примечание - Для удобства большинство рисунков из ИСО 10303-104 представлено в настоящем стандарте, например такие рисунки 14 - 20, где узлы в вершинах и на ребрах обозначены точками. Вершина, отмеченная как "1", имеет в массиве первый индекс, вершина, помеченная как "2", имеет в массиве второй индекс и т.д. В таблицах 2 - 4 приведена информация о ребрах и гранях из ИСО 10303-104;
bound_count - число граничных вершин ячейки. Определяется значением атрибута shape, задающего форму ячейки;
edge_node_count - число внутренних узлов ячейки, расположенных на ребрах ячейки. Определяется сочетанием значений атрибутов shape, задающего форму ячейки, и order, задающего порядок интерполяции;
opt_node_count - возможное число внутренних узлов ячейки, не расположенных на ребрах ячейки. Определяется сочетанием значений атрибутов shape, задающего форму ячейки, и order, задающего порядок интерполяции.
Примечание - На рисунках 14 - 20 внутренние узлы, не принадлежащие ребрам, обозначены кружками;
vn_count - общее число граничных вершин плюс число узлов (как на ребрах, так и вне ребер);
required_vertices - массив вершин и узлов ячейки, за исключением внутренних узлов, не лежащих на ребрах. Число элементов равно значению атрибута required_count.
4.4 Определения функций схемы mesh_topology_schema
4.4.1 Функция all_mesh_vertices
Функция all_mesh_vertices принимает в качестве входного аргумента экземпляр объекта array_based_unstructured_mesh_and_vertices и возвращает значение TRUE (истина), если все вершины, входящие в набор, играющий роль атрибута vertices, точно являются вершинами сетки.
EXPRESS-спецификация:
*)
FUNCTION all_mesh_vertices(arg :
array_based_unstructured_mesh_and_vertices)
: BOOLEAN;
LOCAL
vertex_set : SET OF vertex := [];
cell : vertex_defined_cell;
END_LOCAL;
REPEAT i := 1 TO arg.cell_count;
cell := arg.cells[i];
REPEAT j := 1 TO cell.vn_count;
vertex_set := vertex_set + cell.vertices[j];
END_REPEAT;
END_REPEAT;
IF (SIZEOF(vertex_set) <> arg.index_count) THEN
RETURN(FALSE);
END_IF;
REPEAT i := 1 TO arg.index_count;
IF (NOT (arg.vertices[i] IN vertex_set)) THEN
RETURN(FALSE);
END_IF;
END_REPEAT;
RETURN(TRUE);
END_FUNCTION;
(*
Определения параметров:
arg - экземпляр объекта типа array_based_unstructured_mesh_and_vertices.
Возвращаемое значение - TRUE (истина), если все вершины, входящие в набор, играющий роль атрибута vertices объекта, играющего роль параметра arg, точно являются вершинами сетки, иначе - FALSE (ложь).
4.4.2 Функция cell_counts
Функция cell_counts принимает в качестве входного аргумента экземпляр объекта vertex_defined_cell, представляющий ячейку, и возвращает количество вершин и узлов, требуемых для определения ячейки.
EXPRESS-спецификация:
*)
FUNCTION cell_counts(arg : vertex_defined_cell) : ARRAY[1:3] OF INTEGER;
LOCAL
om1 : INTEGER := 0; -- (order - 1)
om1sq : INTEGER := om1**2; -- (order - 1) squared
vts : INTEGER; -- number of bounding vertices
eds : INTEGER; -- number of edges
qf : INTEGER := 0; - number of quadrilateral faces
tf : INTEGER := 0; - number of triangular faces
result : ARRAY [1:3] OF INTEGER := [0,0,0];
END_LOCAL;
CASE arg.order OF
linear : om1 := 0;
quadratic : om1 := 1;
cubic : om1 := 2;
OTHERWISE : RETURN(result);
END_CASE;
om1sq := om1**2;
CASE arg.shape OF
single :
BEGIN
vts := 1; eds := 0; qf := 0; tf := 0;
result[1] := vts;
result[2] := om1*eds; -- 0, 0, 0
result[3] := 0; -- 0, 0, 0
END;
line :
BEGIN
vts := 2; eds := 1; qf := 0; tf := 0;
result[1] := vts;
result[2] := om1*eds; -- 0, 1, 2
result[3] := 0; -- 0, 0, 0
END;
quadrilateral :
BEGIN
vts := 4; eds := 4; qf := 1; tf := 0;
result[1] := vts;
result[2] := om1*eds; -- 0, 4, 8
result[3] := om1sq*qf; -- 0, 1, 4
END;
triangle :
BEGIN
vts := 3; eds := 3; qf := 0; tf := 1;
result[1] := vts;
result[2] := om1*eds; -- 0, 3, 6
result[3] := (om1-1)*tf; -- 0, 1
CASE arg.order OF
linear : result[3] := 0; -- 0
END_CASE;
END;
polygon :
BEGIN
vts := arg.vn_count; eds := arg.vn_count;
result[1] := vts;
result[2] := 0;
result[3] := 0;
END;
hexahedron:
BEGIN
vts := 8; eds := 12; qf := 6; tf := 0;
result[1] := vts;
result[2] := om1*eds; -- 0, 12, 24
result[3] := om1sq*(qf+om1); -- 0, 7, 32
END;
wedge :
BEGIN
vts := 6; eds := 9; qf := 3; tf := 2;
result[1] := vts;
result[2] := om1*eds; -- 0, 9, 18
result[3] := om1sq*qf + om1*tf; -- 0, 3, 16
END;
tetrahedron :
BEGIN
vts := 4; eds := 6; qf := 0; tf := 4;
result[1] := vts;
result[2] := om1*eds; -- 0, 6, 12
result[3] :=(om1-1)*tf; --0, 4
CASE arg.order OF
linear: result[3] := 0; -- 0
END_CASE;
END;
pyramid :
BEGIN
vts := 5; eds := 8; qf := 1; tf := 4;
result[1] := vts;
result[2] := om1*eds; -- 0, 8, 16
result[3] := om1sq*qf + (om1-1)*tf; -- 1, 9
CASE arg.order OF
linear : result[3] := 0; -- 0
END_CASE;
END;
END_CASE;
RETURN(result);
END_FUNCTION;
(*
Определения параметров:
arg - объект, представляющий ячейку.
Возвращаемое значение - массив из трех значений типа INTEGER, (целое), где первый элемент массива - это число вершин, определяющих границы ячейки, второй элемент - это число внутренних узлов, расположенных на ребрах, и третий элемент - это максимальное число (возможных) внутренних узлов, не расположенных на ребрах.
4.4.3 Функция shorten_array
Функция shorten_array принимает в качестве входного аргумента одномерный массив и возвращает более короткий одномерный массив, содержащий первые newI элементов входного массива, где newI - это параметр целого типа, задающий размер результирующего массива.
EXPRESS-спецификация:
*)
FUNCTION shorten_array(longa : ARRAY OF GENERIC : T;
oldI, newI : INTEGER) : ARRAY OF GENERIC : T;
LOCAL
shorta : ARRAY [1:newI] OF GENERIC : T;
END_LOCAL;
IF (newI > oldI) THEN
RETURN(?);
ELSE
REPEAT i := 1 TO newI;
shorta[i] := longa[i];
END_REPEAT;
RETURN(shorta);
END_IF;
END_FUNCTION;
(*
Определения параметров:
longa - исходный массив;
oldI - число элементов в массиве, играющем роль параметра longa;
newI - сокращенное число элементов в результирующем массиве.
Возвращаемое значение - укороченный массив, имеющий длину, заданную аргументом newI.
4.4.4 Функция this_schema
Функция this_schema возвращает значение типа STRING (строка), содержащее наименование схемы.
EXPRESS-спецификация:
*)
FUNCTION this_schema : STRING;
RETURN('MESH_TOPOLOGY_SCHEMA');
END_FUNCTION;
(*
Определения параметров:
Возвращаемое значение - наименование схемы в верхнем регистре.
EXPRESS-спецификация:
*)
END_SCHEMA; -- end of mesh_topology_schema
(*
Далее представлен фрагмент EXPRESS-декларации, с которой начинается описание схемы mesh_connectivity_schema. В нем определены необходимые внешние ссылки.
EXPRESS-спецификация:
*)
SCHEMA mesh_connectivity_schema;
REFERENCE FROM mesh_topology_schema -- ISO 10303-52
(mesh,
unstructured_mesh,
structured_mesh,
mesh_location,
indices_group,
indices_range);
REFERENCE FROM mathematical_description_of_distribution_schema
-- ISO 10303-51
(property_distribution_description);
REFERENCE FROM mathematical_functions_schema -- ISO 10303-50
(listed_real_data);
REFERENCE FROM support_resource_schema -- ISO 10303-41
(identifier,
label,
text);
(*
Примечание - Схемы, ссылки на которые приведены выше, можно найти в следующих стандартах серии ИСО 10303:
mesh_topology_schema - раздел 4;
mathematical_description_of_distribution_schema - ИСО 10303-52;
mathematical_functions_schema - ИСО 10303-50;
support_resource_schema - ИСО 10303-41.
5.1 Общие положения
В настоящей схеме даны определение и описание структур, описывающих связи на стыке сеток.
5.2 Основополагающие концепции и предположения
Стык сеток может быть граничащим или с перекрытием. Граничащий стык может быть согласованным или рассогласованным. В настоящем разделе описаны и показаны такие стыки.
Примечание - На рисунках 21 - 23 показаны три типа стыков сеток.
Пример - На рисунке 21 показан граничащий стык сетки один к одному, называемый также согласованным или непрерывным по С0. Стык - это плоскость принадлежащих смежным сеткам вершин, которые совпадают физически (т.е. имеют одинаковые значения координат). Перпендикулярные стыку координатные линии сеток непрерывны при переходе от одной сетки к другой. В трехмерном пространстве граничащий стык один к одному всегда является логически прямоугольной областью.
![]() Пример - Второй тип стыка - это рассогласованный граничащий, когда две сетки касаются, но не пересекаются (за исключением вершин и граней ячеек в плоскости стыка). Находящиеся в плоскости стыка вершины, относящиеся к разным сеткам, не обязательно совпадают физически. На рисунке 22 обозначены относящиеся к левой из сеток вершины и центры граней, расположенные на стыке. В 3-мерном пространстве вершины сетки, образующие стыковочный лоскут, не обязательно образуют логически прямоугольную область.
Стык третьего типа называется перекрывающим и имеет место в тех случаях, когда две сетки перекрываются. В трехмерном пространстве перекрытие является трехмерной областью. При перекрывающем стыке одна из двух сеток имеет преимущество. Этим устанавливается, какой из составов в области перекрытия сохраняется, а какой удаляется. Область сетки, где состав удаляется, называется дырой перекрытия, а вершины сетки, образующие контур дыры, называются обрамляющими точками.
![]() ![]() Пример - На рисунке 23 изображена область перекрытия между двумя сетками, где сетка, изображенная справа, имеет преимущество перед сеткой, изображенной слева. Обозначенные на рисунке 23 точки - это принадлежащие левой сетке обрамляющие точки и точки дыры перекрытия. В дополнение к этому, для сетки, имеющей преимущество, должны быть обозначены все граничные точки (т.е. вершины на граничных гранях), которые расположены внутри области перекрытия.
Стыки с перекрытием могут включать несколько слоев обрамляющих точек, очерчивающих пустоты, и точек на границах сеток.
Для рассогласованных граничных сеток и стыков с перекрытием, показанных на рисунках 22 и 23, левая сетка является принимающей сеткой, а правая сетка - донорской сеткой.
Вершины сетки, входящие в стык сеток, обобщенно называются стыковочными точками.
5.3 Определение типа данных схемы mesh_connectivity_schema
5.3.1 Тип данных mismatched_region_type
Тип данных mismatched_region_type содержит перечисление типов рассогласованных областей сеток.
EXPRESS-спецификация:
*)
TYPE mismatched_region_type = EXTENSIBLE ENUMERATION OF
(abutting,
overset);
END_TYPE;
(*
Определения элементов перечислимого типа;
abutting - граничащая область;
overset - область перекрытия.
5.4 Определения объектов схемы mesh_connectivity_schema
5.4.1 Объект matched_mesh_connection
Объект matched_mesh_connection содержит информацию о связности для стыкующего лоскута, который задает на границе однозначное соответствие между индексами смежных структурированных сеток (такой случай называется также связность C0). Стыковочный лоскут является подмножеством грани сетки, которая соприкасается с одной и только одной другой сеткой. Посредством настоящей структуры обозначаются для двух смежных сеток подмножества индексов области стыка и преобразование индексов одной сетки в индексы другой. Задается также смежная сетка.
EXPRESS-спецификация:
*)
ENTITY matched_mesh_connection
SUBTYPE OF (mesh_connectivity);
SELF\mesh_connectivity.current : structured_mesh;
range : indices_range;
donor : structured_mesh;
donor_range : indices_range;
transform : ARRAY [1:index_count] OF INTEGER;
WHERE
WR1 : current :<>: donor;
WR2 : donor.index_count = index_count;
WR3 : range.nindices = index_count;
WR4 : donor_range.nindices = index_count;
END_ENTITY;
(*
Определения атрибутов:
current - (наследуемый) текущая сетка;
index_count - (наследуемый) число индексов, требуемых для обозначения вершины;
range - содержит поддиапазон индексов, образующих стыковочный лоскут в блоке;
donor - смежная сетка;
donor_range - содержит поддиапазон индексов стыковочного лоскута донорской сетки;
transform - содержит сокращенную запись матрицы преобразований, описывающей отношения между индексами смежных сеток (см. ниже).
Формальные положения:
WR1. Текущая и донорская сетка должны быть разными сетками.
WR2. Значения атрибутов index_count для текущей и донорской сеток должны быть одинаковы.
WR3. Задаваемая атрибутом index_count размерность индекса текущей сетки должна быть равна размерности, используемой при задании диапазона индексов.
WR4. Задаваемая атрибутом index_count размерность индекса донорской сетки должна быть равна размерности, используемой при задании диапазона индексов донорской сетки.
Используемая в атрибуте transform сокращенная матричная запись имеет следующие свойства. Сама матрица имеет ранг, равный значению атрибута index_count и содержит элементы +1, 0, and j1. Матрица является ортонормальной и обратная матрица является ее транспозицией. Матрица преобразования (T) действует следующим образом: если Индекс 1 и Индекс 2 - это индексы некоторой точки на стыке сеток, то Индекс 1 - это индекс точки в текущей сетке, а Индекс 2 - это индекс точки в смежной сетке, и между ними существует следующее отношение:
Index2 = T.(Index1 - Start1) + Start2
Index1 = Transpose[T].(Index2 - Start2) + Start1,
где '.' означает умножение матрицы на вектор, Start1 и Finish1 задают входящий в диапазон индексов поддиапазон, а Start2 и Finish2 задают поддиапазон индексов, входящий в диапазон индексов донорской сетки.
Краткая запись используется при преобразовании следующим образом. Для каждого элемента положительное приращение индекса в грани текущей сетки отображается в изменение индексов смежной сетки. Первый элемент - это отображение положительного приращения в направлении i; второй элемент - это отображение положительного приращения в направлении j; и третий индекс (для трехмерного случая) - это отображение положительного приращения в направлении k. Для трехмерного случая матрица преобразования T строится на основе преобразования вида [+/- a; +/- b; +/- c] следующим образом:
![]() где
![]() Пример - Преобразование = [-2, +3, +1] дает матрицу преобразования,
![]() Примечания
1 Для установления отношения между индексами смежной и текущей сеток для элементов, расположенных непосредственно на стыке, один из элементов преобразования является избыточным, поскольку один из компонентов обоих индексов на стыке остается постоянным.
2 Матрица преобразования и две пары индексов являются избыточными для определения стыковочного лоскута. Например, значение Finish2 может быть получено из преобразования Start1, Finish1 и Start2.
5.4.2 Объект mesh_connectivity
Посредством объекта mesh_connectivity задается связность стыка сеток.
EXPRESS-спецификация:
*)
ENTITY mesh_connectivity
ABSTRACT SUPERTYPE OF(ONEOF
(matched_mesh_connection,
mismatched_mesh_connection);
name : label;
description : text;
id : identifier;
current : mesh;
DERIVE
index_count : INTEGER := current.index_count;
END_ENTITY;
(*
Определения атрибутов:
name - заданное пользователем обозначение экземпляра;
description - описание;
id - идентификатор;
current - текущая (принимающая) сетка;
index_count - число индексов, требуемых для уникального обозначения вершины или ячейки в блоке.
5.4.3 Объект mesh_overset_hole
Объект mesh_overset_hole представляет дыру или дыры в месте перекрытия сеток. Для перекрывающихся сеток связность сеток может также предполагать наличие "дыр" внутри сетки, где все данные, связанные с сеткой, игнорируются или "выключаются", поскольку применяются данные, связанные с другой из перекрывающихся сеток.
EXPRESS-спецификация:
*)
ENTITY mesh_overset_hole
SUBTYPE OF (mismatched_mesh_connection);
END_ENTITY;
(*
Примечание - Если точки стыка, образующие дыру в сетке, образуют логически прямоугольную область, они могут быть заданы элементом в списке диапазона. Подобным образом другие элементы списка могут быть использованы для других логически прямоугольных дыр. Более обобщенной альтернативой является перечисление всех образующих дыры в сетке точек на стыке. Использование списка заданий диапазонов, или использование диапазона в сочетании с вершинами, могут привести к тому, что некоторая дыра может быть задана более одного раза.
5.4.4 Объект mismatched_donor_mesh
Объект mismatched_donor_mesh задает сетку, которая служит донорской сеткой для области стыка, представленной объектом mismatched_mesh_region.
EXPRESS-спецификация:
*)
ENTITY mismatched_donor_mesh
ABSTRACT SUPERTYPE OF(ONEOF structured_donor_mesh,
unstructured_donor_mesh));
donor : mesh;
INVERSE
connect : mismatched_mesh_region FOR donor;
END_ENTITY;
(*
Определения атрибутов:
donor - донорская сетка;
current - заданная объектом mismatched_mesh_region область, для которой сетка является донорской.
5.4.5 Объект mismatched_mesh_connection
Объект mismatched_mesh_connection содержит информацию о связности для всех видов стыков сеток. Настоящий объект предназначен для описания рассогласованных граничных стыков и стыков с перекрытием как для структурированных, так и для неструктурированных сеток, а также может использоваться для граничных стыков один к одному.
Для граничных стыков, называемых также лоскутными или рассогласованными, лоскут стыка - это подмножества грани сетки, касающиеся одной и только одной другой сетки. Посредством этой структуры обозначаются поддиапазоны индексов (или массивы индексов), которые образуют стык, и задается их отображение в смежную (донорскую) сетку. Также посредством данной структуры обозначается смежная сетка. Если данная грань сетки касается нескольких (скажем, N) смежных сеток, для описания стыков требуются N экземпляров объекта mismatched_mesh_connection. Для единичного граничащего стыка требуются два экземпляра объекта mismatched_mesh_connection - по одному на каждую из смежных сеток.
В случае стыка с перекрытием посредством настоящей структуры обозначаются обрамляющие точки данной сетки, которые принадлежат одной и только одной другой сетке. Если обрамляющие точки сетки принадлежат нескольким (скажем, N) смежным сеткам, для описания перекрытий требуются N экземпляров объекта mismatched_mesh_connection. В случае перекрывающихся сеток существует вероятность того, что одна обрамляющая точка в действительности принадлежит нескольким перекрывающимся сеткам (хотя в типовых случаях задается связь только с одной перекрывающейся сеткой). Не существует ограничения на то, чтобы одна обрамляющая точка принадлежала одновременно нескольким областям, заданным объектами mismatched_mesh_connection. Следовательно, настоящая структура допускает описание одной обрамляющей точки, принадлежащей нескольким перекрывающимся сеткам.
EXPRESS-спецификация:
*)
ENTITY mismatched_mesh_connection
ABSTRACT SUPERTYPE OF (ONEOF(mismatched_mesh_region,
mesh_overset_hole))
SUBTYPE OF (mesh_connectivity);
points : indices_group;
gridloc : mesh_location;
END_ENTITY;
(*
Определения атрибутов:
current - (наследуемый) текущая (принимающая) сетка;
index_count - (наследуемый) число индексов, требуемых для уникального обозначения вершины;
points - индексы принадлежащих текущей сетке точек стыка;
gridloc - описываемое точками положение индексов в текущей сетке. Также посредством настоящего атрибута обозначается положение индексов, описываемых диапазоном индексов донорской сетки. Это обеспечивает гибкость при описании стыков с перекрытием для значений, связанных с ячейками.
5.4.6 Объект mismatched_mesh_region
Объект mismatched_mesh_region представляет рассогласованное соединение, которое является граничащим или с перекрытием.
EXPRESS-спецификация:
*)
ENTITY mismatched_mesh_region
SUBTYPE OF (mismatched_mesh_connection);
donor : mismatched_donor_mesh;
kind : mismatched_region_type;
WHERE
WR1 : donor.donor :<>: SELF\mesh_connectivity.current;
END_ENTITY;
(*
Определения атрибутов:
donor - смежная структурированная или неструктурированная донорская сетка;
kind - тип соединения.
WR1. Донорская сетка не должна быть той же самой сеткой, что и текущая.
Неформальные положения:
IP1. Когда посредством атрибута kind задано, что тип стыка - граничащий, диапазон вершин должен описывать поддиапазон грани (т.е. точки на вычисляемой простым действием плоскости сетки).
IP2. Когда посредством атрибута kind задано, что тип стыка - граничащий, в описании структурированной донорской сетки также должно содержаться описание поддиапазона грани.
5.4.7 Объект multiple_mesh_block
Объект multiple_mesh_block задает группирование соединяемых сеток. В структуре объекта multiple_mesh_block содержится вся информация, касающаяся связности в группе сеток. Сюда включаются граничащие интерфейсы (рассогласованные общего вида и один к одному), стыки сеток с перекрытием и дыры на стыке сеток.
Все стыковочные лоскуты данной сетки, входящей в группу, содержатся в объекте multiple_mesh_block, относящемся к этой группе. Если грань сетки касается нескольких других сеток (скажем, N), в multiple_mesh_block должно быть включено N экземпляров mesh_connectivity, описывающих каждый стыковочный лоскут.
Примечание - Данное соглашение требует, чтобы единичный стыковочный лоскут был описан дважды - по одному разу для каждой из смежных сеток. Также это означает, что объект multiple_mesh_block симметричен относительно стыковочных лоскутов.
EXPRESS-спецификация:
*)
ENTITY multiple_mesh_block;
name : label;
description : text;
id : identifier;
connectivities : LIST OF mesh_connectivity;
END_ENTITY;
(*
Определения атрибутов:
name - заданное пользователем обозначение экземпляра;
description - описание;
id - идентификатор;
connectivities - информация о связности.
5.4.8 Объект structured_donor_mesh
Объект structured_donor_mesh является таким подтипом объекта mismatched_donor_mesh, который представляет рассогласованную донорскую сетку, являющуюся структурированной.
EXPRESS-спецификация:
*)
ENTITY structured_donor_mesh
SUBTYPE OF (mismatched_donor_mesh);
SELF\mismatched_donor_mesh.donor : structured_mesh;
points : listed_real_data;
vsize : INTEGER;
DERIVE
index_count : INTEGER := donor.index_count;
END_ENTITY;
(*
Определения атрибутов:
donor - структурированная донорская сетка;
points - отображение принадлежащих принимающей сетке точек на стыке в донорскую сетку. Это можно рассматривать как билинейную или трехлинейную интерполяцию (в зависимости от размерности) в вычислительной системе донорской сетки. Должно использоваться принятое в FORTRAN упорядочивание многомерных массивов;
vsize - размер массива данных, необходимого для содержания точек стыка;
current - текущая (принимающая) сетка;
index_count - число индексов, требуемых для задания ссылки на вершину.
5.4.9 Объект unstructured_donor_mesh
Объект unstructured_donor_mesh является таким подтипом объекта mismatched_donor_mesh, который представляет рассогласованную донорскую сетку, являющуюся неструктурированной.
EXPRESS-спецификация:
*)
ENTITY unstructured_donor_mesh
SUBTYPE OF (mismatched_donor_mesh);
SELF\mismatcned_donor_mesh.donor : unstructured_mesh;
cells : indices_group;
interpolant : property_distribution_description;
vsize : INTEGER;
DERIVE
index_count : INTEGER := donor.index_count;
END_ENTITY;
(*
Определения атрибутов:
donor - неструктурированная донорская сетка;
cells - содержит ячейку донорской сети, которой принадлежит узел;
interpolant - содержит факторы интерполяции для расположения узла в ячейке донорской сети;
vsize - размер необходимого массива данных;
index_count - число индексов, требуемых для задания ссылки на вершину.
EXPRESS-спецификация:
*)
END_SCHEMA; -- end of mesh_connectivity_schema
(*
Далее представлен фрагмент EXPRESS-декларации, с которой начинается описание схемы mesh_function_schema. В нем определены необходимые внешние ссылки.
EXPRESS-спецификация:
*)
SCHEMA mesh_connectivity_schema;
REFERENCE FROM mesh_topology_schema -- ISO 10303-52
(mesh,
unstructured_mesh,
structured_mesh,
mesh_location,
indices_group,
indices_range);
REFERENCE FROM mathematical_description_of_distribution_schema
-- ISO 10303-51
(property_distribution_description);
REFERENCE FROM mathematical_functions_schema -- ISO 10303-50
(listed_real_data);
REFERENCE FROM support_resource_schema -- ISO 10303-41
(identifier,
label,
text);
(*
Примечание - Каждую из вышеупомянутых схем можно найти в следующих частях стандартов серии ИСО 10303:
mathematical_constructs_schema - ИСО 10303-50;
mesh_topology_schema - раздел 4;
ISO13584_generic_expressions_schema - ИСО 13584-20.
6.1 Общие положения
В настоящей схеме содержатся определения и описания структур, используемых для описания определенных на сетках математических функций.
6.2 Основополагающие концепции и предположения
Функции сетки, определения которых даны в настоящей схеме, являются интерполяционными функциями, определенными на сетке. Сетка может быть структурированной или неструктурированной, и для каждой ячейки сетки могут быть определены ее собственные функции интерполяции.
6.3 Определения объектов схемы mesh_function_schema
6.3.1 Объект mesh_function
Представляющий связанную с сеткой функцию объект mesh_function - это такой подтип объекта application_defined_function, который:
- имеет область допустимых значений, задаваемую таблицей или пространствами вещественных кортежей.
Для неструктурированной сетки таблица является одномерным массивом, а для структурированной сетки может быть прямоугольным массивом любой размерности.
Если сетка содержит ячейки разной размерности, вещественные кортежи могут иметь разные размерности.
Если сетка содержит ячейки разных форм, например, пятигранники и шестигранники, пространства вещественных кортежей могут иметь разные границы;
- имеет множество управляющих значений, таких, что функция в пределах каждой ячейки определяется подмножеством управляющих значений и базисом этой ячейки.
Задание управляющих значений для ячеек определяется топологией сетки. Обычно, но не обязательно, управляющее значение - это значение функции в некоторой позиции в пределах сетки;
- интерполирует или экстраполирует отдельно в каждой ячейке управляющие значения, присвоенные этой ячейке.
EXPRESS-спецификация:
*)
ENTITY mesh_function
SUBTYPE OF (application_defined_function,
unary_generic_expression);
mesh : mesh;
basis : LIST OF mesh_function_basis;
uniform : BOOLEAN;
vertex_values : BOOLEAN;
DERIVE
control_values : maths_function :=
SELF\unary_generic_expression.operand;
WHERE
WR1 : function_is_table(control_values);
WR2 : (uniform AND (SIZEOF(basis) = 1)) XOR
(NOT uniform);
END_ENTITY;
(*
Определения атрибутов:
mesh - сетка, для которой задается функция, представляемая объектом mesh_function;
basis - объект mesh_function_basis, представляющий базис функции сетки, задающий методы интерполяции или извлечения, используемые в каждой ячейке сетки;
uniform - флаг, показывающий, имеет ли функция, представленная объектом, однородный базис:
- если атрибут uniform имеет значение true (истина), каждая ячейка сетки имеет одинаковый базис, представленный объектом mesh_function_basis;
- если атрибут uniform имеет значение false (ложь), базис, представленный объектом mesh_function_basis, задается для каждой ячейки сетки отдельно.
Таблица 5
для функции сетки, представленной объектом mesh_function
vertex_values - флаг, показывающий, задаются ли управляющие значения, представленные объектом, играющим роль атрибута control_values, вершинам сетки или ячейкам сетки:
- если атрибут vertex_values имеет значение true (истина), управляющие значения, представленные объектом, играющим роль атрибута control_values, задаются массиву уникальных вершин ячейки сетки;
- если атрибут vertex_values имеет значение false (ложь), управляющие значения, представленные объектом, играющим роль атрибута control_values, задаются отдельно для шаблонов или точек дискретизации каждой ячейки сетки;
control_values - таблица, задающая значения управляющих величин в вершинах ячеек или в точках дискретизации каждой ячейки.
Таблица должна быть функцией, имеющей:
- domain - целочисленное пространство кортежей, обозначающих вершины или точки дискретизации для задания функции сетки, представленной объектом mesh_function;
- range - это то же самое, что диапазон функции сетки, представленной объектом mesh_function.
Примечание - Диапазон и область определения функции задаются атрибутами explicit_range и explicit_domain, наследуемыми от объекта-супертипа application_defined_function.
Составляющие целочисленного пространства кортежей приведены в таблице 5.
Формальные положения:
WR1. Управляющие значения должны быть представлены в форме таблицы.
WR2. Если атрибут uniform_basis имеет значение true (истина), то длина списка базисов должна быть равна 1.
6.3.2 Объект mesh_function_basis
Объект mesh_function_basis является таким подтипом объекта appiication_defined_function, который имеет:
- область определения, являющуюся пространством вещественных кортежей; и
- диапазон, являющийся пространством табличных функций.
Примечание - Объект mesh_function_basis используется таким образом, что область определения является параметрическим пространством, в котором определяются точки внутри ячейки. Следовательно, размерность пространства вещественных кортежей та же, что и топологическая размерность ячейки.
Каждая табличная функция в диапазоне представленного объектом mesh_function_basis базиса имеет:
- область определения, являющуюся подмножеством пространства и
- диапазон вещественного типа.
Примечание - Объект mesh_function_basis используется таким образом, что:
- областью определения каждой табличной функции в ее диапазоне является параметрическое пространство, в котором обозначены управляющие значения ячейки;
- диапазон каждой табличной функции задает ее весовой коэффициент для управляющей величины.
Каждая табличная функция задает весовые коэффициенты для управляющих величин, определяя таким способом значение представленной объектом mesh_function функции сетки в точке или ячейке.
Примечание - В любом прикладном модуле, использующем настоящий ресурс, может быть определен подтип объектов mesh_function_basis и externally_defined_item, позволяющий записывать экземпляры стандартных функций, таких как общепринятая в конечно-элементном анализе "серендипова" функция.
EXPRESS-спецификация:
*)
ENTITY mesh_function_basis
SUBTYPE OF (application_defined_function,
unary_generic_expression);
cell_topological_dimension : INTEGER;
value_array_dimension : INTEGER;
value_array_order : ARRAY [1:value_array_dimension] OF INTEGER;
DERIVE
value_positions : maths_function :=
SELF\unary_generic_expression.operand;
WHERE
value_positions_as_table : function_is_table(value_positions);
END_ENTITY;
(*
Определения атрибутов:
cell_topological_dimension - размерность пространства вещественных кортежей, которое является областью определения базиса, представленного объектом mesh_function_basis;
value_array_dimension - размерность подпространства для каждой табличной функции в диапазоне базиса, заданного объектом mesh_function_basis;
value_array_order - имеющие значения не менее, чем единица, число управляющих значений в каждом из направлений массива;
value_positions - таблица, которая задает "позиции" управляющих величин в области определения базиса, представленного объектом mesh_function_basis. "Позиция" управляющей величины - это точка в пределах области определения, которая имеет весовой коэффициент 1.0 для самой управляющей величины и весовые коэффициенты, равные 0.0 для всех прочих управляющих величин.
Таблица позиций величин, играющая роль атрибута value_positions, должна быть функцией, которая имеет:
- область определения, являющуюся пространством целочисленных кортежей, обозначающих точки дискретизации ячейки и
- диапазон, являющийся пространством вещественных кортежей, обозначающих позиции в ячейке.
Управляющая величина для представленного объектом mesh_function_basis базиса функции сетки не обязательно имеет позицию. Имеет или нет управляющая величина позицию, определяется представленным объектом mesh_function_basis базисом функции сетки. Если управляющая величина не имеет позиции, то соответствующее значение функции, представленной объектом, играющим роль атрибута value_positions, не учитывается.
Формальные положения:
value_positions_as_table - объект, играющий роль атрибута value_positions, должен представлять таблицу.
Неформальные положения:
consistent_topology_dimension - размерность пространства вещественных кортежей, задаваемая атрибутом cell_topological_dimension, должна быть такая же, как заданная атрибутом topological_dimension топологическая размерность каждой ячейки, которой присвоен базис функции сетки, представленный объектом mesh_function_basis;
consistent_value_position_table_domain - область определения таблицы позиций управляющих величин должна быть совместима со значениями атрибута value_array_order. Область должна быть пространством кортежей, которое должно быть декартовым произведением целочисленных интервалов [1; n1] x [1; n2] x ···[1; nm], где:
- m - это значение атрибута value_array_dimension и
- ni - это значение элемента агрегатного атрибута value_array_order [i] + 1.
consistent_value_position_table_range - размерность пространства кортежей, которая равна рангу таблицы управляющих значений, должна быть равна топологической размерности ячейки, задаваемой атрибутом cell_topological_dimension;
valid_weighting_at_value_position - если позиции присвоено значение, то посредством объекта mesh_function_basis для этой позиции должно задаваться значение:
- 1 - для управляющего значения, присвоенного позиции;
- 0 - для всех других управляющих значений.
6.4 Ограничения, накладываемые на отношения подтип-супертип в схеме mesh_function_schema
6.4.1 Ограничение sc1_application_defined_function
Между экземплярами объектов mesh_function и mesh_function_basis, являющихся подтипами объекта application_defined_function, существует отношение ONEOF (один из).
EXPRESS-спецификация:
*)
SUBTYPE_CONSTRAINT sc1_application_defined_function FOR
application_defined_function;
ONEOF(mesh_function,
mesh_function_basis);
END_SUBTYPE_CONSTRAINT;
(*
6.4.2 Ограничение sc1_unary_generic_expression
Между экземплярами объектов mesh_function и mesh_function_basis, являющихся подтипами объекта unary_generic_expression, существует отношение ONEOF (один из).
EXPRESS-спецификация:
*)
SUBTYPE_CONSTRAINT sc1_unary_generic_expression FOR
unary_generic_expression;
ONEOF(mesh_function, mesh_function_basis);
END_SUBTYPE_CONSTRAINT;
(*
EXPRESS-спецификация:
*)
END_SCHEMA; -- end of mesh_function_schema
(*
(обязательное)
СОКРАЩЕННЫЕ НАИМЕНОВАНИЯ ОБЪЕКТОВ
Сокращенные наименования объектов, установленных в настоящем стандарте, приведены в таблице A.1.
Требования к использованию сокращенных наименований объектов содержатся в стандартах тематической группы "Методы реализации" серии ИСО 10303.
Примечание - Наименования объектов на языке EXPRESS доступны в Интернете (см. приложение C).
Таблица A.1
(обязательное)
РЕГИСТРАЦИЯ ИНФОРМАЦИОННОГО ОБЪЕКТА
B.1 Обозначение документа
Для однозначного обозначения информационного объекта в открытой системе настоящему стандарту присвоен следующий идентификатор объекта:
{iso standard 10303 part(52) version(-1)}
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
B.2 Обозначение схем
Для однозначного обозначения в открытой информационной системе схеме mesh_topology_schema, установленной в настоящем стандарте (см. 4), присвоен следующий идентификатор объекта:
{iso standard 10303 part(52) version(1) schema(1)
mesh_topology_schema(1)}
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
Для однозначного обозначения в открытой информационной системе схеме mesh_connectivity_schema, установленной в настоящем стандарте (см. 5), присвоен следующий идентификатор объекта:
{iso standard 10303 part(52) version(1) schema(1)
mesh_connectivity_schema(1)}
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
Для однозначного обозначения в открытой информационной системе схеме mesh_function_schema, установленной в настоящем стандарте (см. 6), присвоен следующий идентификатор объекта:
{iso standard 10303 part(52) version(1) schema(1)
mesh_function_schema(1)}
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
(справочное)
В настоящем приложении приведены ссылки на сайты, на которых находятся листинги наименований объектов на языке EXPRESS и соответствующих сокращенных наименований, установленных в настоящем стандарте, без комментариев и другого поясняющего текста. Эти листинги доступны в машинно-интерпретируемой форме (см. таблицу E.1) и могут быть получены по следующим адресам URL:
сокращенные наименования: /template/go.php?url=https://www.tc184-sc4.org/Short_Names/;
EXPRESS: /template/go.php?url=https://www.tc184-sc4.org/EXPRESS/.
(справочное)
EXPRESS-G ДИАГРАММЫ
Диаграммы на рисунках D.1 - D.14 получены из сокращенного листинга на языке EXPRESS, приведенного в приложении C. В диаграммах использована графическая нотация EXPRESS-G языка EXPRESS. Описание EXPRESS-G установлено в ИСО 10303-11.
![]() на уровне объектов в формате EXPRESS-G (1 из 10)
![]() Рисунок D.2 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (2 из 10)
![]() Рисунок D.3 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (3 из 10)
![]() Рисунок D.4 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (4 из 10)
![]() Рисунок D.5 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (5 из 10)
![]() Рисунок D.6 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (6 из 10)
![]() Рисунок D.7 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (7 из 10)
![]() Рисунок D.8 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (8 из 10)
![]() Рисунок D.9 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (9 из 10)
![]() Рисунок D.10 - Представление схемы mesh_topology_schema
на уровне объектов в формате EXPRESS-G (10 из 10)
![]() Рисунок D.11 - Представление схемы mesh_connectivity_schema
на уровне объектов в формате EXPRESS-G (1 из 3)
![]() Рисунок D.12 - Представление схемы mesh_connectivity_schema
на уровне объектов в формате EXPRESS-G (2 из 3)
![]() Рисунок D.13 - Представление схемы mesh_connectivity_schema
на уровне объектов в формате EXPRESS-G (3 из 3)
![]() на уровне объектов в формате EXPRESS-G
(справочное)
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
В таблице E.1 приведены элементы схемы mesh_topology_schema, используемые в других схемах.
Таблица E.1
в других схемах
(справочное)
НАЦИОНАЛЬНЫМ СТАНДАРТАМ РОССИЙСКОЙ ФЕДЕРАЦИИ
Таблица ДА.1
[1] ISO/IEC 8824-1, Information Technology - Abstract Syntax Notation One (ASN.1) - Part 1: Specification of basic notation
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/35/gost_67853.html
На правах рекламы:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||