Диссертация Методы автоматического построения пространственной гранично-элементной сетки на примере решения контактных задач

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ ВЫСШЕГО И
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Воронежская государственная технологическая академия

На правах рукописи

Вахтин Алексей Александрович

МЕТОДЫ АВТОМАТИЧЕСКОГО ПОСТРОЕНИЯ
ПРОСТРАНСТВЕННОЙ ГРАНИЧНО-ЭЛЕМЕНТНОЙ СЕТКИ
НА ПРИМЕРЕ РЕШЕНИЯ КОНТАКТНЫХ ЗАДАЧ

Специальность: 05.13.18 - «Математическое моделирование,
численные методы и комплексы программ»

ДИССЕРТАЦИЯ
на соискание ученой степени
кандидата физико-математических наук

Научный руководитель - кандидат физико-математических наук, доцент

Тюкачев Николай Аркадьевич

Воронеж, 2006

Содержание:

ВВЕДЕНИЕ....................................................................................................................5

Глава 1. Метод граничных элементов в пространственных контактных
задачах механики твердых тел...................................................................................13

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

1.1.1.    Условные обозначения............................................................................13

1.1.2.    Сосредоточенные силы в упругом теле.................................................14

1.1.3.    Тензор перемещения Грина.....................................................................14

1.1.4.    Тензор влияния Кельвина........................................................................15

1.1.5.    Решение Миндлина..................................................................................16

1.2.    Контактная задача для заглубленного в упругое полупространство

абсолютно жесткого штампа произвольной формы............................................18

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

1.2.2.    Граничные интегральные уравнения.....................................................19

1.2.3.    Численное решение..................................................................................21

1.2.4.    Упругое полупространство с условиями понижения порового
давления .............................................................................................................. 25

1.3.    Программные средства для решения контактных задач теории

упругости методом граничных элементов ............................................................28

1.3.1.    Преимущество метода граничных элементов для решения контактных
задач на ЭВМ......................................................................................................28

1.3.2.    Основные этапы решения контактных задач........................................29

1.3.3.    Проблема расширяемости и модификации существующих программ
..............................................................................................................................30

1.4.    Эффективная дискретизация поверхностей при численном решении

пространственных контактных задач ....................................................................32

1.4.1.    Основные требования к гранично-элементной дискретизации
контактных поверхностей ................................................................................. 32

1.4.2.    Гранично-элементное представление контактных поверхностей
сложной формы .................................................................................................. 33

1.4.3.    Дискретизация осесимметричных поверхностей..................................34

1.4.4.    Дискретизация плоских граничных макроэлементов...........................37

1.5.    Выводы...............................................................................................................39

Глава 2. Методы автоматической гранично-элементной дискретизации............42

2.1.    Гранично-элементные сетки на поверхности конструкций
осесимметричного и блочного типа.......................................................................42

2.1.1.    Гранично-элементные сетки на осесимметричных конструкциях.....42

2.1.2.    Гранично-элементные сетки на конструкциях блочного типа............49

2.2.    Методы интерактивного построения гранично-элементной сетки.............58

2.2.1.    Пространственное перемещение вершин..............................................58

2.2.2.    Добавление новых вершин и граней......................................................60

2.2.3.    Удаление вершин и граней......................................................................61

2.2.4.    Проверка граничной поверхности на правильность.............................62

2.2.5.    Объединение граней.................................................................................64

2.2.6.    Дискретизация граней..............................................................................65

2.2.7.    Пример интерактивного построения поверхности сложной формы .. 66

2.3.    Построение гранично-элементной сетки методом композиций..................66

2.3.1.    Проверка гранично-элементных сеток на замкнутость.......................69

2.3.2.    Приведение гранично-элементной сетки к замкнутому виду.............70

2.3.3.    Метод композиций...................................................................................71

2.3.4.    Нумерация граничных элементов...........................................................75

2.3.5.    Алгоритм метода композиций................................................................77

2.4.    Хеш-таблицы для быстрого поиска в алгоритмах построения

гранично-элементной сетки ....................................................................................78

2.4.1.    Хеш-таблица для узлов............................................................................79

2.4.2.    Хеш-таблица для граничных элементов................................................81

2.5.    Выводы...............................................................................................................84

Глава 3. Визуальная среда построения пространственных гранично¬
элементных сеток и решения контактных задач ......................................................85

3.1.    Программная модель визуальной среды SBEM-Contact..............................85

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

3.1.2.    Библиотека типов.....................................................................................89

3.1.3.    Утилиты.....................................................................................................90

3.2.    Утилиты геометрического построения гранично-элементной сетки..........93

3.2.1.    Утилиты генерации гранично-элементной сетки на осесимметричных
и блочных конструкциях...................................................................................93

3.2.2.    Утилита построения пространственных гранично-элементных сеток
методом композиций .......................................................................................... 94

3.2.3.    Утилиты корректировки гранично-элементной сетки.........................95

3.3.    Утилита решения пространственных контактных задач для абсолютно

жесткого штампа заглубленного в упругое полупространство..........................97

3.3.1.    Форма ввода..............................................................................................97

3.3.2.    Отображение контактных напряжений на поверхности цветом.........98

3.4.    Проблемы решения системы линейных алгебраических уравнений

больших размеров..................................................................................................100

3.4.1.    Параллельные вычислительные системы............................................102

3.4.2.    Алгоритм решения линейно-алгебраических систем больших

размеров на кластерах......................................................................................106

3.5.    Выводы.............................................................................................................108

ЗАКЛЮЧЕНИЕ.........................................................................................................110

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ...............................................111

Приложение 1. Библиотека типов Custom.tlb.........................................................124

Приложение 2. Пример реализации файловой утилиты визуальной среды

SBEM-Contact............................................................................................................137

Приложение 3. Функция вычисления нормали многоугольника произвольной

формы ......................................................................................................................140

Приложение 4. Реализация хеш-функций для узлов и граничных элементов ... 145
Приложение 5. Программа решения системы алгебраических уравнений для

кластеров....................................................................................................................151

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

ВВЕДЕНИЕ

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

Одним из первых приближенных методов был метод конечных разностей,
в котором разрешающие уравнения задачи аппроксимировались с помощью ло¬
кальных разложений неизвестных функций в ряды, как правило, в усеченные
ряды Тейлора [25, 110]. Метод конечных элементов привлек к себе внимание
исследователей тем свойством, что сплошная среда разбивается на ряд элемен¬
тов, которые можно рассматривать как конкретные ее части. При этом этот ме¬
тод может основываться как на вариационных принципах, так и на более общих
выражениях метода взвешенных невязок. Диапазон задач, решаемых данным
методом весьма широк, и включает в себя вопросы расчета конструкций, тече¬
ния жидкости и другие виды задач [28, 60]. Другим важным направлением ме¬
тодов приближенного анализа было развитие смешанных принципов (вариаци¬
онные методы), когда физические задачи можно выражать и решать самыми
различными способами в соответствии с видом используемых аппроксимаций
уравнений. Эти аппроксимации имеют основополагающее значение при ма¬
шинной реализации различных численных методов [31, 84]. Методы инте¬
гральных уравнений по началу рассматривались как некий тип аналитического
метода, несвязанный непосредственно с приближенными методами. Благодаря
работам Н. И. Мусхелишвили, С. Г. Михлина, В. Д. Купрадзе [73, 84, 86] и др.
эти методы стали использоваться главным образом в механике жидкости и за¬
дачах общей теории потенциала.

В начале 1970-х гг. последние достижения в формулировке конечных эле¬
ментов начали обнаруживать их связь с формулировкой граничных интеграль¬
ных уравнений и привели к появлению обобщенных криволинейных элементов.
В 1970 году К. Бреббия исследовал связь различных приближенных методов с
граничными интегральными уравнениями и впервые применил термин «Метод
граничных элементов» [28]. Развитие сравнительно нового направления, осно¬
ванного на гранично-интегральных уравнениях [5, 16, 66], позволяет решать
современные проблемы физико-математического моделирования. В настоящее
время наблюдается интенсивное развитие метода граничных элементов и при¬
менение его для приближенных решений различных задач в области теории по¬
тенциала, теплопроводности, теории упругости, механики жидкости, вязкопла-
стичности и т. п. [1-11, 16, 28, 33-42, 123-130].

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

Вместе с тем в настоящее время актуальными остаются вопросы реализа¬
ции алгоритмов метода граничных элементов в виде комплексов проблемно¬
ориентированных программ для проведения вычислительных экспериментов.
Отсутствуют соответствующие гранично-элементные алгоритмы и программ¬
ные средства. Все существующие программы (COSMOS, ЛИРА,
FEM_MODELS, SCAD, ANSYS, Z_SOIL, PLAXIS и др.) основаны на конечно¬
элементном методе [20]. До сих пор остается актуальной задача построения
пространственной гранично-элементной сетки сложной формы. Иногда для
геометрического моделирования и дискретизации пространственных поверхно¬
стей используют существующие программные средства (AutoCAD, CREDO,
SCAD и др.) [17, 18, 58, 61, 66]. Но это не решает проблемы, так как задача по¬
строения гранично-элементной сетки с желаемыми качествами по-прежнему
требует соответствующих навыков и тщательного труда (например, необходи¬
мо отслеживать соблюдение единого правила обхода узлов, а также отсутствие
пересечений и перекрытий элементов) [61, 93, 94]. Кроме того, для реализации
методов поиска наилучших (оптимальных) решений возникает существенная
необходимость в алгоритмах генерации гранично-элементной сетки с меньши¬
ми затратами счетного времени [5]. Все это обуславливает актуальность темы
исследования.

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

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

Для достижения поставленной цели сформулированы следующие задачи
исследования:

•    Рассмотреть существующие методы пространственной гранично¬
элементной дискретизации, применяемые в решении физических задач.

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

•    Разработать и реализовать эффективные программные средства для про¬
странственной гранично-элементной дискретизации (препроцессор).

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

Методы исследования. При выполнении диссертационной работы приме¬
нялись: дискретная математика и теория множеств, теория графов, численные
методы интегрирования, алгебра матриц, аналитическая геометрия, современ¬
ные методы и технологии программирования (Delphi, ООП, СОМ, OpenGL).

Научная новизна работы: В диссертационной работе получены следующие
результаты, характеризующиеся научной новизной:

•    Разработан метод композиций для геометрических объектов, характерной
новизной которого является сведение композиции к логическим операциям
над двоичными кодами. Это позволяет быстро найти любое решение с лю¬
бым количеством геометрических объектов.

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

•    Разработаны методы хеширования узлов и граничных элементов для со¬
кращения времени выполнения алгоритмов построения пространственных
гранично-элементных сеток. Хеширование узлов и граничных элементов
является дополнительным улучшением реализации существующих или
разрабатываемых методов гранично-элементной дискретизации.

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

На защиту выносятся.

•    Метод композиций для построения гранично-элементных сеток на кон¬
струкциях сложной формы путем объединения, вычитания и/или пересече¬
ния геометрических объектов, поверхность которых аппроксимирована ан¬
самблем граничных элементов.

•    Методы интерактивного построения поверхностей состоящих из набора
плоских многоугольников путем добавления, удаления или пространствен¬
ного перемещения вершин и дискретизации полученной поверхности на
граничные элементы.

•    Методы хеширования узлов и граничных элементов для сокращения вре¬
мени выполнения алгоритмов построения пространственных гранично¬
элементных сеток.

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

Научная новизна работы: В диссертационной работе получены следующие
результаты, характеризующиеся научной новизной:

•    Разработан метод композиций для геометрических объектов, характерной
новизной которого является сведение композиции к логическим операциям
над двоичными кодами. Это позволяет быстро найти любое решение с лю¬
бым количеством геометрических объектов.

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

•    Разработаны методы хеширования узлов и граничных элементов для со¬
кращения времени выполнения алгоритмов построения пространственных
гранично-элементных сеток. Хеширование узлов и граничных элементов
является дополнительным улучшением реализации существующих или
разрабатываемых методов гранично-элементной дискретизации.

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

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

Аппробация работы. Основные результаты работы доложены на всерос¬
сийской конференции «Прикладная геометрия, построение расчетных сеток и
высокопроизводительные вычисления» (г. Москва, ВЦ РАН, 2004 г.), междуна¬
родной научной конференции «Образование, наука, производство и управление
в XXI веке» (С. Оскол, СОТИ, 2004 г.), конференции международной школы-
семинара «Современные проблемы механики и прикладной математики»
(г. Воронеж, 2005 г.), международной научной конференции «Современные
проблемы прикладной математики и математического моделирования» (г. Во¬
ронеж, 2005 г.), научных конференциях профессорско-преподавательского со¬
става и научных работников ВГУ, 2001 - 2005 гг.

Публикации. По теме диссертационной работы опубликовано 16 работ, в
том числе 15 статей и патент Государственного фонда алгоритмов и программ
РФ.

Структура и объем работы. Диссертационная работа изложена на 151 стра¬
ницах, включает 5 таблиц, 39 рисунков, 4 определения и 5 утверждений с дока¬
зательствами. Состоит из введения, трех глав, заключения, списка литературы
из 129 наименований и 8 приложений.

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

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

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

Реализация программной модели визуальной среды SBEM-Contact и соот¬
ветствующих утилит приводится в третьей главе.

В приложении 1-5 приведены основные листинги программного кода
SBEM-Contact: библиотека типов, пример реализации файловой утилиты,
функция вычисления нормали и хеш-таблицы, используемые при реализации
алгоритмов геометрического построения пространственной гранично¬
элементной сетки.

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

Автор выражает глубокую благодарность научному руководителю до¬
центу Тюкачеву Н.А.

Глава 1. Метод граничных элементов в пространственных
контактных задачах механики твердых тел

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

1.1.1.Условные обозначения
Для простоты записи громоздких выражений при формулировке задач,
здесь и ниже используются тензорные обозначения в декартовой системе коор¬
динат. Нижние индексы 1, 2 и 3 используются для обозначения осей
x, у и z.
Символы суммирования заменяются простым правилом повторения индексов,
например:


Производные по пространственным координатам обозначаются запятой:



В некоторых формулировках контактных задач используется символ Кро-
некера:



и дельта-функция Дирака Л( x), значение которой равно нулю во всех точках
области, за исключением точки
x = 0, где функция обращается в бесконечность,
и обладающая следующим важным свойством:

где £ - произвольно малое положительное число. Кроме того, для произволь¬
ной функции
f (x), непрерывной в точке xt, можно написать следующее соот¬
ношение:

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

1.1.3. Тензор перемещения Грина
Пусть единичная сосредоточенная сила, действующая в упругом теле
V,

приводит к перемещениям U(j\N, K), где i = 1, 2,3 - индекс, указывающий но¬
мер компоненты вектора перемещений;
j = 1,2,3 - индекс, указывающий
направление действия сосредоточенной силы;
N (x1, x2, x3) - точка наблюдения,
K (Xj, x2, x3) - точка приложения сосредоточенной силы. Математическая зада¬
ча определения перемещений
U( j)(N, K) сводится к интегрированию системы
трех неоднородных уравнений элиптического типа в частных производных вто¬
рого порядка (фундаментальных уравнений Ламе):

с заданными граничными условиями. В (1.3) Л, - упругие постоянные
Ламе; А - оператор Лапласа в декартовой системе координат
OX г X 2 X 3. Мат¬
рица перемещений

образует симметричный тензор второго ранга, то есть
U(j)(K, K ) = U(j)(K , K) (Утверждение Максвелла о взаимности работ для со¬
средоточенных сил [89]). Следовательно, для функции перемещений
U(j),
называемых фундаментальными решениями статической теории упругости
удобно использовать тензорные обозначения
U( j) = U = U ц = U .

1.1.4. Тензор влияния Кельвина

Задача определения функций Грина в трехмерном случае для ограничен¬
ных областей наталкивается на большие трудности [89]. К настоящему времени
эта функция получена для весьма ограниченного по форме класса упругих тел.
Наиболее просто получается выражение для тензора перемещений в неограни¬
ченной области, или фундаментальное решение Кельвина для упругого про¬
странства:

Как видно, составляющие фундаментального решения Кельвина имеют в
точке
K приложения сосредоточенной силы особенность порядка 1/ R. Фунда¬
ментальное решение Кельвина (1.6) представляет собой перемещения, которые
возникают в точке
N(x1,x2,x3) бесконечного тела от действия единичной со¬
средоточенной силы, приложенной в точке
K(^1,^2,^3) по направлению оси
OX j. Это решение может быть интерпретирована как функция влияния для

бесконечной упругой среды.

Используя закон Гука, нетрудно получить напряжения, соответствующие
перемещениям Кельвина:

Фундаментальное решение Кельвина для перемещений (1.6) и напряжений
(1.7) наиболее успешно используется при решении пространственных задач
теории упругости методом граничных интегральных уравнений для тел конеч¬
ных размеров, заключенных в бесконечное пространство с теми же упругими
свойствами [28].

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

При решении пространственных контактных задач для тел конечных раз¬
меров, заключенных в бесконечное полупространство х3 > 0, граничная плос¬
кость которого
x3 = 0 свободна от нагрузок используются тензоры перемеще¬
ний
Uij и напряжений ak Миндлина:

Для получения решений (1.8) и (1.9) Р. Миндлин использовал метод супер¬
позиций специальных частных решений для бесконечного пространства. Позд¬
нее тензор перемещений был получен неоднократно с помощью других различ¬
ных подходов: методом преобразования Фурье, методом отражения, Методом
функции Грина гармонической задачи Дирихле. В явном виде фундаментальное
решение Миндлина получается с помо
щью суммирования 18 ядер деформации,
следующих из решения Кельвина (по шесть на каждой из трех компонент
силы) [5, 28, 89].

В функциях перемещений Uц и напряжений dkji Миндлина все слагаемые,
кроме первых, содержат координаты мнимой точки приложения сосредоточен¬
ной силы
K , что, как показано Миндлиным, позволяет выполнить условие об¬
ращения в нуль напряжений на граничной плоскости х3 = 0. Первые два слага¬
емых являются соответствующими решениями Кельвина. Как видно, функции
перемещений
Uц и напряжений ) убывают при увеличении расстояния от

точки наблюдения N до точки приложения сосредоточенной силы K. Следова¬
тельно, формулы (1.8) и (1.9) определяют напряженно-деформированное состо¬
яние вблизи действия сосредоточенной силы относительно точек упругого тела,
расположенных на большом растоянии от точки
K (R ^ то), где полупростран¬
ство можно считать как бы закрепленным [5].

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

1.2.1. Постановка задачи
Пусть упругое однородное полупространство
z ^ 0, со стороны поверхно¬
сти
z = 0 содержит полость S, имеющую границу Г. Механические свойства

полупространства определяются модулем упругости Е и коэффициентом Пуас¬
сона
V. Предполагается, что поверхность z = 0 свободна от нагрузок. В полость
S помещается абсолютно жесткий штамп, подверженный действию статиче¬
ской нагрузки, сводящейся к равнодействующим: силе
P = {PX, P2, P3} и моменту
M ={M1,M2,M3}, где р и Mt (i = 1,2,3) - проекции соответствующих векто¬
ров на оси декартовой системы координат (рис. 1.1).

рис. 1.1. Расчетная схема контактной задачи для объемного штампа,
заглубленного в упругое полупространство

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

1.2.2. Граничные интегральные уравнения
Приведенный в [2] вывод основных уравнений контактной задачи основан
на весьма наглядной методике, впервые рассмотренной Г. Б. Ковнеристовым
[66], а позже использованной О. В. Шишовым при решении контактных задач в
осесимметричной постановке. Данная методика основана на применении тео¬
ремы взаимности Бетти [89], требующей введения основного и вспомогатель¬
ного состояния упругого тела.

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

Для построения вспомогательных состояний необходимо рассмотреть
цельное упругое полупространство, из которого мысленно удалено упругое те¬
ло
S, имеющее поверхность Г. Пусть в некоторой точке K(^х,^1,^3), находя¬
щейся вне области, ограниченной поверхностью Г, приложена нагрузка, пред¬
ставленная единичными сосредоточенными силами (1.1), направленными соот¬
ветственно вдоль координатных осей. Чтобы ослабленное полостью полупро¬
странство осталось в равновесии, по поверхности Г следует распределить уси¬
лия (
N, K) и перемещения Utj (N, K), являющиеся фундаментальными ре¬
шениями Миндлина (1.8) и (1.9).

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

В результате решения системы (1.10) и (1.11) определяется напряженно-
деформированное состояние контактной поверхности Г с помо
щью трех функ¬
ций контактных напряжений
pt (N) и шестью параметрами перемещения
штампа как жесткого целого Аi - смещение,
\yi - поворот (i = 1, 2,3).

1.2.3.Численное решение.

До сих пор не удалось получить в аналитическом виде решение системы
интегральных уравнений (1.10) и (1.11) для заглубленных штампов ни одной
геометрической формы частного вида даже для простейших схем внешней ста¬
тической нагрузки. Основную трудность здесь представляет интегрирование
фундаментального решения Миндлина. Для численного решения поставленной
в самом общем виде контактной задачи наиболее эффективно использовать ме¬
тод граничных элементов в прямой формулировке [28].

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

1)    дискретизация граничной поверхности Г с помощью ансамбля граничных
элементов;

2)    определение для граничных элементов конечного множества узлов, отно¬
сительно которых применяется метод коллокаций, позволяющий связать
узловые значения неизвестных на основе конечномерного аналога исход¬
ных интегральных уравнений;

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

4)    решение разрешающей системы линейных алгебраических уравнений.

Использование в рассматриваемом подходе фундаментального решения
Миндлина (1.8) и (1.9) для задачи о сосредоточенной силе внутри упругого по¬
лупространства, автоматически удовлетворяющего граничным условиям на
свободной от напряжений поверхности основания, позволяет подвергать дис¬
кретизации только контактную поверхность штампа и основания (рис. 1.2).

рис. 1.2. Дискретизация поверхности штампа и упругого основания
с использованием граничных элементов

Так как подавляющее большинство объемных заглубленных штампов
ограничены фрагментами плоскостей или поверхностей второго порядка, кото¬
рые можно с требуемой степенью точности аппроксимировать набором плос¬
ких (как правило, треугольных и/или четырехугольных) граничных элементов,
то применение неплоских граничных элементов в задачах строительной меха¬
ники не является целесообразным [5].

В пределах каждого граничного элемента следует предположить, что кон¬
тактные усилия
pt изменяются по какому-либо заданному закону. Учитывая,
что напряжения
pt в теории упругости представляются через производные пе¬
ремещений
ut, то использование на граничных элементах постоянных напря¬
жений соответствует линейному изменению перемещений в плоскости каждого
граничного элемента [5]. В качестве узлов коллокаций, в которых ставится
условие удовлетворения граничным интегральным уравнениям, выбираются
точки, равномерно распределенные по дискретизированной поверхности штам¬
па [28]. Обычно они задаются в центрах тяжести граничных элементов.

В соответствии с принятым приближением, система граничных интеграль¬
ных уравнений (1.10) пространственной контактной задачи для заглубленного в
полупространство абсолютно жесткого штампа совместно с интегральными
уравнениями равновесия (1.11) может быть представлена в дискретной форме:

Система (1.12) позволяет сформировать разрешающую систему линейных
алгебраических уравнений в матричной форме:

Размерность системы (1.13) равна (3m + 6) х (3m + 6), где m - общее число
граничных элементов, посредством которых аппроксимирована контактная по¬
верхность штампа и упругого основания. Вектор неизвестных
Z включает 3m

Трудности вычисления интегралов (1.14) заключается в том, что при све¬
дении двойных интегралов к повторным первообразные найти не удается. По¬
скольку контактная поверхность Г чаще всего аппроксимируется плоскими
треугольными и четырехугольными элементами достаточно малых размеров, то
для численного интегрирования используются квадратурные схемы Г аусса, ко¬
торые в настоящее время являются лучшими с точки зрения точности при за¬
данном числе точек [5, 28, 60, 64, 73].

Вблизи точек коллокации, когда они принадлежат области интегрирования
ДГ, подынтегральные функции становятся неограниченными. В этом случае
прямое использование стандартных схем численного интегрирования не приво¬
дит к желаемым результатам, так как для двумерных несобственных интегралов
весьма трудно уловить особенности вблизи точки
K(%х, %2, %3) приложения
единичной силы конечным числом слагаемых квадратурных формул. Для вы¬
числения интегралов (1.14) при
K е ДГ? используется аналитический способ

интегрирования, предложенный в [5]. Как показывает опыт многочисленных
расчетов, численно-аналитический способ интегрирования фундаментальных
решений Миндлина является весьма эффективным и экономичным, с точки
зрения затрат счетного времени.

В общем случае блок D3mx3m матрицы A является несимметричным и пол¬
ностью заполненным. Для этого блока является характерным доминирование
диагональных коэффициентов, что гарантирует устойчивость решения системы
линейных алгебраических уравнений (1.13) методом исключений Гаусса или
L^-разложений [5, 64].

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

Используя теорему взаимности Бетти [89] и учитывая, что перемещения в
любой точке контактной поверхности могут быть выражены через смещения

Дi, и углы поворота v (i = 1, 2,3), можно получить систему интегральных
уравнений для жесткого штампа заглубленного в упругое полупространство с
условиями понижения порового давления [5]:

Таким образом, наличие в уравнениях (1.15) слагаемых, обусловленных
объемным интегрированием по области
V изменения порового давления и не
содержащего неизвестных величин, делает поровое давление совместно с
P1 ,
P2 , P3 , M1 , M2 , M3 параметром нагружения в рассматриваемой контактной за¬
даче.

Для получения конечномерного алгебраического аналога системы (1.15),

(1.16)    нужно провести аналогичные действия, как и в 1.2. Контактная поверх¬
ность аппроксимируется плоскими треугольными и четырехугольными гранич¬
ными элементами. Пусть
m - общее число граничных элементов. Каждый по¬
верхностный интеграл заменяется на сумму интегралов по отдельным гранич¬
ным элементам. Аппроксимация функций контактных напряжений предполага¬
ется кусочно-постоянной, а неизвестные контактные усилия рассматриваются в
центре тяжести граничных элементов. В итоге интегральные уравнения (1.15),

(1.16)    принимают вид:

Матричная запись системы (1.17) имеет вид:

А • Z = B,    (1.18)

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

Как указывалось ранее (п. 1.2), полученные алгебраические системы имеют
хорошую обусловленность, связанную с диагональным преобладанием, что
позволяет использовать стандартные методы их решения типа Гаусса, не при¬
бегая к специальным приемам регуляризации.

При вычислении элементов H1 i, H 2 i, H3 i (i = 1, m) необходимо подверг¬
нуть дискретизации заданную область
V на множество треугольных и четы¬
рехугольных призм. Здесь можно применять любой алгоритм дискретизации
пространственных объектов сложной формы на объемные элементы, и, в
первую очередь, широко известных при конечно-элементном моделировании
[60, 26, 27, 68, 95]. Другой способ, предложенный в [5], основан на том факте,
что источником порового давления в грунте является прямолинейный сток, а
вся зона понижения порового давления имеет вид, для которого ортогональные
к оси стока сечения принимают подобную форму. Следовательно, подвергая
дискретизации плоскую область сечения, ортогонального к выделенной оси,
можно достаточно просто произвести дискретизацию всей области
V на эле¬
ментарные пирамиды.

1.3. Программные средства для решения контактных задач теории
упругости методом граничных элементов

1.3.1. Преимущество метода граничных элементов для решения контактных

задач на ЭВМ

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

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

Программных средств, позволяющих решать контактные задачи методом
граничных элементов в настоящее время довольно мало, так как данный метод
только развивается. Все существующие программы (COSMOS, ЛИРА,
FEM_MODELS, SCAD, ANSYS, Z_SOIL, PLAXIS и др) основаны на конечно¬
элементном методе. Во первых, это объясняется тем, что методы интегрирова¬
ния функции Миндлина вблизи узлов коллокации разработаны сравнительно
недавно, а во вторых, как уже было сказано ранее, решение таких задач требует
больших затрат счетного времени и оперативной памяти вычислительных ма¬
шин, что не всегда бывает доступным.

1.3.2. Основные этапы решения контактных задач

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

1)    подготовка данных к расчетам (препроцессор);

2)    численное решение физических задач (процессор);

3)    вывод результатов расчета в виде иллюстраций и таблиц (постпроцессор).

Первый этап в основном заключается в генерации гранично-элементной

сетки на контактной поверхности рассчитываемой конструкции, от качества ко¬
торой во многом зависит точность численного решения. Решение данной зада¬
чи основано на алгоритмах и методах прикладной геометрии [6 - 10, 33 - 36,
52, 69, 96] и требует не малых затрат на разработку соответствующих алгорит¬
мов, в связи с чем большинство программных продуктов имеет ограниченный
диапазон возможностей. Иногда для геометрического моделирования и дискре¬
тизации пространственных поверхностей используют существующие про¬
граммные средства (AutoCAD, CREDO, SCAD, PLAXYS и др.) [17, 18, 58, 61,
66]. Но это не решает проблемы, так как задача построения сетки с желаемыми
качествами остается открытой [61, 93, 94]. Более того, для реализации методов
поиска оптимальных решений возникает существенная необходимость в алго¬
ритмах генерации гранично-элементной сетки с меньшими затратами счетного
времени [5].

Для реализации второго этапа требуется поиск систем интегральных урав¬
нений описывающих физическую задачу и их конечномерный аналог [5, 21, 28,
66, 79, 89]. С целью повышения точности численного решения получены анали¬
тические или численно-аналитические методы вычислений некоторых проме¬
жуточных данных [5]. При реализации данного этапа на компьютере нужно
учитывать особенности машинных вычислений (накопление погрешностей, ве¬
роятность получения бесконечно большого числа или машинного нуля и т. п.).

Во всех программах, решающих физические задачи приближенными мето¬
дами, ставится задача наглядного представления полученных результатов. С
появлением мониторов и печатных устройств диапазон данной задачи несколь¬
ко расширился: появилась возможность построения графиков, таблиц, диа¬
грамм с различными цветовыми гаммами и т. п. Накопленный за короткое вре¬
мя опыт реализации графических иллюстраций послужил появлению такого
инженерно-научного направления как инженерная или компьютерная графика
[52, 76, 98, 101].

1.3.3. Проблема расширяемости и модификации существующих программ

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

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

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

Все вышеуказанные проблемы объяснимы тем, что данные программы раз¬
рабатывались еще с 1960-х гг. и с развитием вычислительной техники и техно¬
логии программирования в основном у них меняется только внешний вид - ин¬
терфейс. И это не удивительно, так как разработка крупных программных
средств «с нуля» требует больших материальных и временных затрат.

Но научно-технический прогресс все же подводит разработчиков программ
к внедрению новых технологий программирования. Некоторые современные
программные средства разбиваются на отдельные подпрограммы (модули), ко¬
торые без труда подключаются к приложению. Управление подключенными
модулями происходит в основной программе, которая предоставляет пользова¬
телю основной интерфейс. Для этих целей очень удобно использовать совре¬
менный подход к программированию, основанный на COM (Component Object
Model) [102, 105, 114].

Разработанная компанией Microsoft технология COM позволяет разбить
программный проект на компоненты, которые разрабатываются отдельно.
Связь с компонентами осуществляется через заданный набор функций, называ¬
емый интерфейсом. Следует отметить, что в операционной системе Windows
компоненты приложения могут находиться даже на удаленной машине и рабо¬
тать как единое целое (Distributed COM). Это позволяет создавать программный
продукт с возможностью динамического расширения и изменений путем уда¬
ления или добавления новых компонент. Примером программного продукта,
основанного на данном подходе, применяемого инженерами в проектировании,
является AutoCAD 2000, CREDO, и т. п. Компоненты к данным программам
разрабатываются разработчиками из разных регионов и стран, не зависимо друг
от друга с учетом соответствующих правил.

1.4. Эффективная дискретизация поверхностей при численном решении
пространственных контактных задач

1.4.1. Основные требования к гранично-элементной дискретизации

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

1)    учет необходимых требований для гранично-элементной сетки в решаемой
задаче;

2)    реализация дискретизации как можно большего количества типов поверх¬
ностей;

3)    оптимизация алгоритмов с целью уменьшения затрат счетного времени и
памяти ЭВМ.

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

1)    граничная область контакта жесткого штампа с упругим полупростран¬
ством аппроксимируется ансамблем плоских треугольных и четырехуголь¬
ных элементов, которые не пересекаются и не перекрываются;

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

3)    строгое соблюдение правила обхода узлов граничных элементов: против
часовой стрелки, при наблюдении со стороны грунта;

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

Из перечисленных основных требований к гранично-элементной сетке
видно, что не каждый алгоритм геометрического построения поверхности при¬
меним для решения поставленной задачи. Также многие стандартные про¬
граммные продукты (AutoCAD, CREDO и др.) не применимы для генерации
гранично-элементной сетки, так как в них не учитываются многие требования
для гранично-элементной аппроксимации [61, 93, 94].

1.4.2. Гранично-элементное представление контактных поверхностей

сложной формы

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

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

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

1.4.3. Дискретизация осесимметричных поверхностей
Осесимметричная поверхность получается в результате вращения некото¬
рой кривой вокруг оси симметрии [69]. Обычно осью симметрии является ось
OZ (рис. 1.3). Тогда уравнение поверхности в цилиндрической системе коор¬
динат имеет вид


рис. 1.3. Дискретизация поверхности вращения на граничные элементы


Для нанесения сетки граничных элементов на поверхность вращения отре¬
зок [Cj, C2] делим на
m не обязательно равных частей точками (рис. 1.3)

Следует заметить, что в случае, когда F(z) = 0 (концевая точка фунда¬
ментной конструкции), вторая и третья вершины у граничных элементов сли¬
ваются в одну и четырехугольные элементы вырождаются в треугольные. Об¬
щее количество плоских граничных элементов на рассмотренном теле враще¬
ния будет равно
K = m ■ n и растет с увеличением числа разбиений как по глу¬
бине (m), так и по угловой координате (n).

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

тивный способ дискретизации макроэлементов, более удобный, чем рассмот¬
ренный выше. Используется тот факт, что любой фрагмент поверхности враще¬
ния, заключенный между плоскостями
z = C и z = C2, всегда имеет своей про¬
екцией в плоскости
XOY круг или кольцо. Тогда, имея дискретизацию этих
плоских канонических областей и применяя указанную выше функциональную
зависимость, легко осуществляется аппроксимация граничных макроэлементов
на телах вращения плоскими граничными элементами треугольного или четы¬
рехугольного типов с непосредственным выполнением требований межэле-
ментной непрерывности. В разработанных процедурах для рассмотренного
способа разбиения граничных макроэлементов на

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

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

1.4.4. Дискретизация плоских граничных макроэлементов
Плоские поверхностные фрагменты определяются заданием глобальных ко¬
ординат узловых точек (
Xt, Y, Zt), i = 1,2,..., l.

рис. 1.4. Локальные координаты для четырехугольного граничного
макроэлемента:
а) равномерная сетка; б) неравномерная сетка

Разбиение выпуклых четырехугольных граничных макроэлементов на от¬
дельные элементы производится на основе техники изопараметрических эле¬
ментов [1, 69]. Описание геометрии в плоскости четырехугольного граничного
макроэлемента получается с использованием интерполяционных формул:

Безразмерные переменные ^х,^г отождествляются с локальными коорди¬
натами в плоскости стандартного квадрата |^| < 1, |^2| < 1. Если на стандартном

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

где p, i = 1,4 - простейшие линейные функции, имеющие вид:



Интерполяционные формулы дискретизации треугольных граничных мак¬
роэлементов следуют из формул (1.20) и (1.21), с учетом, что две смежные
вершины
(X 3,Y3, Z 3) и (X 4,Y4, Z 4) сливаются в одну:

где

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

рис. 1.5. Дискретизация треугольного граничного макроэлемента

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

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

1)    разбиение области вблизи участков границы для реализации сгущения
сетки;

2)    последовательное отщепление от оставшейся области крупных блоков;

3)    расслоение блоков на полосы;

4)    разбиение полос на элементы.

1.5. Выводы

Из первой главы следуют выводы:

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

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

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

•    Не смотря на то, что ежегодно мощность современных вычислительных
машин возрастает с геометрической прогрессией, оптимизация алгоритмов
с целью уменьшения затрат счетного времени и памяти ЭВМ остается ак¬
туальной. Для уменьшения объема хранимых данных узлам гранично¬
элементной сетки задается адресация или индексация, а граничные элемен¬
ты представляются в виде последовательности ссылок или индексов вер¬
шин. Во многих алгоритмах необходим быстрый поиск индекса узла сетки
по значениям координат (x, y, z), для сопряжения макроэлементов на гра¬
ницах стыков.

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

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

Глава 2. Методы автоматической гранично-элементной
дискретизации

2.1. Гранично-элементные сетки на поверхности конструкций
осесимметричного и блочного типа

В строительстве одной из ответственных работ, требующих больших мате¬
риальных затрат, является проектирование и расчет оснований и фундаментов.
От фундамента зависит производственные, эксплуатационные и расчетно¬
конструктивные параметры здания или архитектурного сооружения [5, 21, 53,
78]. Чтобы получить экономичное решение при минимальных коэффициентах
запаса требуется тщательные инженерно-изыскательские работы и решение ря¬
да сложных задач геотехники и строительной механики, в том числе и контакт¬
ных задач. Сложность последних заключается в повышении точности расчетов,
что требует особых численно-аналитических подходов.

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

2.1.1. Гранично-элементные сетки на осесимметричных конструкциях

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

рис. 2.1. Гранично-элементной сетки на поверхностях осесимметричных
конструкций:
а) биконический; б) грибовидный; в) с коническим острием;

г) и д) с уширением ствола;

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

1)    вычисляется количество граничных элементов и узлов сетки для выделе¬
ния области памяти соответствующего размера;

2)    по интерполяционным формулам (1.19) вычисляются узлы гранично¬
элементной сетки;

3)    в соответствии с индексацией узлов задаются граничные элементы.

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

С учетом полученной формулы (2.2), числа меридиональных сечений n и
числа сечений высоты i-го элемента
m(i) можно получить формулы вычислений
количества узлов гранично-элементной сетки на

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

Общее число узлов гранично-элементной сетки получается в результате
суммы количества узлов на всех фрагментах аппроксимируемой поверхности:

Используя аналогичные рассуждения можно получить формулы для числа
граничных элементов:

Следует заметить, что число граничных элементов связано с числом узлов:

S = S + n - 2

Из анализа, проведенного в п. 1.4, следует, что при аппроксимации поверх¬

ности вращения образуется 2n треугольных и (S - 2n) четырехугольных эле¬

ментов, где n - число меридиональных сечений, S - общее число граничных
элементов.

Координаты узлов гранично-элементной сетки на основаниях в местах со¬
единения элементов (на стыках) вычисляются по формулам аппроксимации

круговых элементов:

Соответственно:


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

Конической поверхностью называется поверхность, полученная в резуль¬
тате вращения вокруг оси
OZ отрезка прямой:


Так как высота i-го элемента разбивается на m равных частей, то величи¬
ну
z можно аппроксимировать:


Используя формулы аппроксимации (1.19) можно получить координаты
узла сетки на конической поверхности i-го элемента:

где n - число меридиональных сечений осесимметричной поверхности.

Боковая поверхность элемента сферической формы получается в результате се¬
чений параллельными плоскостями сферы (рис. 2.2).

рис. 2.2. Формирование элемента со сферической боковой поверхностью:
HxH2 - высота элемента; OR - центр шара; O - центр элемента; R - радиус
сферы; Rj - радиус первого основания; R2 - радиус второго основания;

Центр и радиус сферы можно вычислить по следующим формулам:

где R - радиус сферы, R1 , R( - радиусы оснований, H - высота элемента,

Ак(1) - смещение центра сферы от центра элемента. Формулы (2.8) выводятся
из соответствующей системы уравнений:

При переходе к сферическим координатам уравнение боковой поверхности
примет вид:

так как для вычисления углов поворота используется arccos(х), который при
х < 0 принимает значение в диапазоне
[п / 2; п].

При условии, что i-я боковая поверхность имеет n меридиональных сече¬
ний и
т{1) сечений по высоте, из (2.9) можно получить координаты узла сетки:

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

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

Исходя из формул подсчета количества узлов сетки очевидно, что S - n - 2
всегда кратно
n.

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

2.1.2. Гранично-элементные сетки на конструкциях блочного типа
Конструкции блочного типа представляются в виде набора элементов
(блоков), симметричных относительно плоскости
ZOX и ZOY. Верхним и
нижним основанием каждого блока является прямоугольник параллельный
плоскости
XOY, ребро или вершина (рис. 2.3).

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

1)    вычисляется количество граничных элементов и узлов сетки для выделе¬
ния области памяти соответствующего размера;

2)    аппроксимируются плоские фрагменты поверхности и в соответствии с ин¬
дексацией узлов задаются граничные элементы.

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

Фрагмент поверхности, полученный в результате соединений блоков с ин¬
дексами
i и i+1, будет называться i-м основанием. Для однозначности считает¬
ся, что узлы гранично-элементной сетки общие для боковой поверхности и ос¬
нований принадлежат основаниям. Аналогично и для боковых фрагментов
толщины и длины элемента: общие узлы принадлежат фрагментам то
лщины.

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

рис. 2.4. Типы фрагментов в местах соединений блоков

Для подсчета числа узлов в i-м основании необходимо рассмотреть геомет¬
рическое представление полученных фрагментов в местах соединений блоков
(рис. 2.4) в общем виде (рис. 2.5). Ввиду геометрической симметрии i-го блока
получается, что

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

При аппроксимации граничными элементами поверхности блочной кон¬
струкции в местах соединений блоков могут быть не используемые в -м осно¬
вании узлы блоков c индексами i+1 и i, которые тоже необходимо учесть при
подсчете количества узлов у основания
(S®)), так как по условию общие для
боковой поверхности и основания узлы принадлежат основаниям. Математиче¬
ски вычислить
S®) не удалось, поэтому в алгоритме генерации гранично¬
элементной сетки на конструкциях блочного типа разработана процедура ите¬
рационного подсчета не смежных узлов CutPointsCount(a1, a2, n1, n2), где в ка¬
честве параметров передается длина и число разбиений первого и второго от¬
резков.

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

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


угольника (левого верхнего и правого нижнего соответственно).

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

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

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

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

2.2. Методы интерактивного построения гранично-элементной сетки

Для построения гранично-элементной сетки, состоящей из плоских много¬
угольных фрагментов, в интерактивном полуавтоматическом режиме разрабо¬
тан метод, основанный на алгоритмах геометрических преобразований [110]:

1)    пространственное перемещение вершин;

2)    добавление новых вершин и граней;

3)    удаление вершин и граней.

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

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

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

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

2.2.1. Пространственное перемещение вершин

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

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

рис. 2.6. Всевозможные разбиения пятиугольной грани при пространственном
перемещении узла:
а) на две части б) в) на три части

Как показал практический опыт в методе перемещения вершин достаточно
иметь только один вариант триангуляции грани, так как остальные можно по¬
лучить за конечное число геометрических преобразований (добавление или
удаление узлов и граней). Для однозначности построений используется отсече¬
ние треугольного элемента (рис. 2.6, а), а если это не возможно, грань предва¬
рительно разбивается на треугольные части по хордам (рис. 2.7), что по теореме

о триангуляции полигонов [76] возможно всегда.

рис. 2.7. Разбиение грани при переносе вершины не выпуклого угла:
а) исходная грань; б) предварительное разбиение грани на части;
в) отсечение треугольных элементов и перенос вершины

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

Таким образом, для добавления узла необходимо:

1)    зафиксировать вершины граничной поверхности;

2)    определить обход фиксированных вершин (называется контуром);

3)    Построить грани, связанные с узлами контура и новой вершиной;

4)    Определить и удалить фрагменты, ограниченные контуром и новыми гра¬
нями;

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

На рис. 2.9, а изображен пример добавления новой вершины R, которая со¬
единяется с вершинами 0, 2 и 3. В соответствии с обходом вершин выделяется
контур [3, 2, 0] и строятся новые грани: [0, 2, R], [2, 3, R] и [3, 0, R]. Грань [0, 1,
2, 3, 4] разбивается на части с целью выделения и удаления фрагмента, образо¬
ванного вершинами 0, 2, 3.

рис. 2.9. Добавление новой (а) и существующей (б) вершины R к граничной
поверхности (штриховкой отмечены удаляемые фрагменты)

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

2.2.3. Удаление вершин и граней.

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

Без ограничения общности считается, что существует такая грань, которой
принадлежат три фиксированных вершины. Данная грань позволяет определить
ориентацию добавляемых граней (рис. 2.8). Это следует из геометрической
структуры граничной поверхности [76].

Например, для удаления вершины 0 связанной с вершинами 1, 2, 3, 4 необ¬
ходимо вырезать фрагменты [0, 3, 4] и [0, 2, 3] (рис. 2.10, а), а затем удалить
полностью (рис. 2.10, б).

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

2.2.4. Проверка граничной поверхности на правильность

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

Определение 2.1. Поверхность Q называется связной, если для любых двух
точек M
, N е Q существует непрерывная кривая, соединяющая данные точки
и полностью принадлежавшая Q.

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

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

Доказательство.

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

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

2)    Требуется доказать, что если любые две вершины можно соединить це¬
почкой ребер, то поверхность ^ связная.

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

Алгоритм определения связности граничной поверхности основан на пред¬
ставлении граничной поверхности в виде графа [22], где вершины поверхности
являются узлами, а ребра - дугами. Очевидно, что если для одной вершины
можно найти путь, проходящий по ребрам, до всех вершин, то можно найти со¬
ответствующий путь между любыми вершинами (например, проходящий через
данную точку).

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

Утверждение 2.2. Две грани пересекаются, если их вершины лежат в раз¬
ных полупространствах, разделяемых плоскостями данных граней.

Доказательство.

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

рис. 2.11. Объединение граней: а) до операции; б) после


2.2.5. Объединение граней
После операций перемещения, добавления или удаления вершины требует¬
ся объединение граней, лежащих в одной плоскости и имеющих общие ребра.
Иными словами, строится новая ориентированная грань, содержащая все ребра
исходных (рис. 2.11).

При объединении двух граней последовательность вершин первой грани
включается в новую. Если встретится об
щий узел, то обход вершин продолжа¬
ется на следующем граничном элементе до тех пор, пока последовательность не
замкнется в вершине, с которой был начат обход. Следует заметить, что данный
алгоритм необходимо всегда начинать с не общей вершины, так как в против¬
ном случае можно получить неверное решение. На рис. 2.11 рассмотрен пример
интеграции граней [0, 1, 2, 3, 4, 5, 6,] и [0", 1", 2", 3", 4", 5", 6'].

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

2.2.6. Дискретизация граней

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

В п. 1.1 рассмотрена дискретизация треугольных и четырехугольных фраг¬
ментов используя формулы аппроксимации (1.20) - (1.23). В [5] предложено
применение алгоритма триангуляции двумерных областей для дискретизации
фрагментов произвольной формы разбиением их на полосы, которые, в свою
очередь, подвергаются триангуляции. Следует заметить, что применение триан¬
гуляции в гранично-элементных сетках не эффективно, так как это отражается
на точности численного решения поверхностных интегралов и расположение
центров масс (узлов коллокаций), которые, по условию численной реализации
контактных задач равномерно распределяются по контактной поверхности.

Для эффективной дискретизации плоских макроэлементов произвольной
формы разработан алгоритм, основанный на доказанной в [76]
теореме о три¬
ангуляции полигона:
n-угольник может быть разбит на n - 2 треугольника про¬
ведением
n - 3 хорд. Следовательно, плоский фрагмент произвольной формы
можно разбить по хордам на треугольные и выпуклые четырехугольные фраг¬
менты, для которых применимы формулы аппроксимации (1.20) - (1.23). При
разбиении фрагмента выбираются хорды, выпущенные из больших углов, что¬
бы получаемые четырехугольные фрагменты были близки к прямоугольным, а
треугольные к равносторонним.

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

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

в интерактивном режиме

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

2.3. Построение гранично-элементной сетки методом композиций

В современных САПР твердотельного проектирования сложные конструк¬
ции представляются в виде композиций геометрических объектов (рис. 2.13).

рис. 2.13. Построение геометрического объекта композицией простых:

“/“ - вычитание, “+” - объединение

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

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

Разработанный метод композиций рассчитан только для замкнутых по¬
верхностей.

Определение 2.2. Поверхность Q. называется замкнутой, если существу¬
ют такие пространственные точки g(xg
, y^, zg)и Z(, yz, Zz), что

любая непрерывная кривая, соединяющая данные точки, пересекается с по¬
верхностью Q..

Определение 2.3. Точка M (xM, yM, zM), принадлежащая кусочно-гладкой
поверхности Q., называется граничной, если для любых пространственных
точек g(Xg, y^, Zg)и Z(Xz
, yz, Zz)внутри любого шара с бесконечно
малым радиусом r и центром в M существует непрерывная кривая лежащая
внутри шара, соединяющая %, Z и не пересекающая Q. Поверхностные точ¬
ки, не являющиеся граничными называются внутренними.

Критерием определения замкнутости кусочно-гладкой поверхности явля¬
ется отсутствие граничных точек на поверхности.

Утверждение 2.3. Поверхность Q замкнута тогда и только тогда когда
на ней нет граничных точек.

Доказательство.

1)    Требуется доказать, что если поверхность ^ замкнута, то на ее поверх¬
ности нет граничных точек.

Пусть существует граничная точка M (xM, yM, zM) е ^. По определению
замкнутости поверхности ^ существуют точки
%(x%, y%, z^) £ ^ и
Z(
x^, y^, zz) £ ^ такие, что любая непрерывная кривая, выпущенная из данной
точки, пересекается с ^. Для заданных точек
% и Z можно взять такое r, что
\\M-£||< r и
\\M-Z|< r, то есть они будут принадлежать шару с центром в

точке M и радиусом r .

Тогда по определению граничности M (xM, yM, zM), точки P(xP, yP, zP) и
%(x%, y%, z%) можно соединить непрерывной кривой, не пересекающейся с ^,

что противоречит условию. Следовательно, на поверхности ^ граничных точек
не существует.

2)    Требуется доказать, что если на поверхности ^ нет граничных точек, то
она замкнута.

Если точка M (xM, yM, zM) е^ не граничная (внутренняя), то существует
шар Ф с центром в
M и бесконечно малым радиусом r, внутри которого
3%(
x%, y%, z%)£ ^ и 3Z(xz, yz, zz)£ ^, такие, что любая кривая лежащая внутри

шара и соединяющая данные точки пересекает ^.

Так как любая точка Mi (xM , yM , zM,) e^ n Ф тоже является граничной, то

любая кривая, лежащая внутри области, образованной объединением соответ¬
ствующих шаров Ф и Ф
i для точек M и Mt, соединяющая 3£(х^, у^, z^и

3 Z (х^, у^, Zz) £ ^ тоже будет пересекать ^. Иначе можно найти такой шар

принадлежащий области ФuФi с центром в M ( Xm , yM, Zm ) e^ и радиусом
r > 0, что любые две точки можно соединить кривой не пересекающей ^.

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

2.3.1. Проверка гранично-элементных сеток на замкнутость
Для того чтобы поверхность, аппроксимированная граничными элемента¬
ми, была замкнута, необходимо чтобы ребра граничных элементов принадле¬
жали не менее двум граничным элементам. Более того, ребро не может принад¬
лежать более двум граничным элементам, так как это нарушает целостность
фигуры [69, 76, 100].

Так как обход узлов граничных элементов ориентирован, то по ребру AB
можно пройти не более одного раза в одну и другую сторону (рис. 2.8).

В соответствии с данными условиями, для проверки на замкнутость удобно
использовать представление гранично-элементной сетки в виде графа [22], реа¬
лизованного в программе как матрица целых чисел
GnXn =( gij), где n - число

узлов. Изначально матрица GnXn нулевая. Если при обходе узлов в фиксирован¬
ном граничном элементе осуществляется переход из узла с индексом
i в узел с
индексом
j, то gij (элемент матрицы GnXn) увеличивается на единицу. После

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

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

Если существуют элементы матрицы ОпХп такие, что g{j ^ gj{, то необхо¬
димо добавить дополнительные поверхностные фрагменты. Исходя из геомет¬
рических свойств гранично-элементной сетки, которая по своей сути является
многоугольником, можно найти такую цепочку индексов I =
(i1, i2,..., in), что

В итоге получаются плоскости, покрывающие грани из I. Окончательным
этапом построения дополнительных поверхностей будет поиск отрезков [ik1,
ik ]

(k1 = 1, n, k2 = 1, n) на пересечении полученных плоскостей, которые будут ре¬
брами дополнительных граней.

В некоторых случаях могут быть добавлены поверхностные фрагменты с
нулевой площадью, чтобы исключить односторонний проход по соответству¬
ющим ребрам. Например, для случая представленного на рис. 2.14 нужно доба¬
вить граничный элемент [
A, C, B].

рис. 2.14. Узел B геометрически лежит на AC, но
не принадлежит граничному элементу
Gl

2.3.3. Метод композиций
Пусть заданы замкнутые поверхности двух геометрических объектов / и

/ч    /ч

Р2, охватывающие пространственные множества / сБ и Р2 сБ. Без ограни¬
/V    /V

чения общности предполагается, что / и Р2 ^ 0 . Тогда все множество Е мож¬
но разбить на четыре непересекающихся подмножества (рис. 2.15), нумерация
которых задается согласно табл. 1.

В общем случае можно рассматривать шестнадцать множеств, которые мо¬
гут быть получены в результате операций (сложение, вычитание, пересечение,

/ч    /ч

инверсия) над двумя множествами р и Рг [115]. Каждому полученному множе¬
ству сопоставляется четырехразрядный двоичный код, где единица в i-м бите
означает, что элементы i-го подмножества из табл. 1 принадлежат полученному
множеству (табл. 2).

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

0000

0

1000

/ч /ч
р1 u р2

0001

/ч /ч

P n P2

1001

(р/р) и (р2/р)

0010

/ч /ч

Р/ P

1010

р

0011

P2

1011

/ч /ч
р>1/ р>2

0100

/ч /ч
р/ р

1100

р

0101

р

1101

/ч /ч
рг/ р

0110

(р/р) и (р21 р)

1110

/ч /ч
р1 n р2

0111

/ч /ч
р1 u р2

1111

Е

Из табл. 2 очевидно, что любые логические операции над множествами р

и р соответствуют логическим операциям над двоичными кодами данных
множеств р = 0101 и Р2 = 0011 [111].

Утверждение 2.4. Пусть замкнутые поверхности n геометрических объ¬
ектов ограничивают соответствующие множества. Тогда каждому множе¬
ству можно задать такой
2Г1-разрядный двоичный код, что любые операции
над данными множествами будут соответствовать логическим операциям
над соответствующими двоичными кодами.

Доказательство.

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

Пусть данное утверждение верно для всех n < k (k > 2). Требуется дока¬
зать достоверность и для
n = k +1. Так как k множеств разбивает множество Е
на
2k непересекающихся подмножеств, то при добавлении (k +1) -го множе¬
ства, полученные подмножества будут разбиты на два: с элементами, которые
принадлежат
(k +1) -му множеству и с элементами, которые ему не принадле¬
жат. Следовательно, количество подмножеств удваивается:
2k • 2 = 2k+1, что и
требовалось доказать.

Остается найти двоичные коды множеств и доказать, что они удовлетво-

/ч /ч    /ч

ряют данному утверждению. Пусть заданы множества р, р2, ...рп, которые раз¬
/ч    /ч    /ч

бивают множество Е на 2n непересекающихся подмножеств M1, M2,... Mr .

/ч /ч    /ч

Тогда множества р, р2, . рп можно представить в следующем виде:

Так как операции над множествами коммутативны, ассоциативны и дис¬
трибутивны [115], то любое выражение можно представить в следующем виде:

2

i=1


(2.26)

Иными словами, вычисление выражений над множествами р, р2 ,... рп

можно свести к вычислению выражений над Л11, Л21,., Ani (i = 1, 2n). Из (2.25)

очевидно, что выражение F1 i, Л 2 i, ...Л ni) может принимать только два зна-

чения: подмножество Mi или 0 - пустое множество.

Если принять замену Mi ~ 1 и 0 ~ 0, то вычисление выражения
F1 i, Л 2 i, .Л ni) сводится к вычислению логических выражений над бинар¬
ными числами (0 и 1). Таким образом, вычисление выражения (2.26) будет со¬
ответствовать вычислению логического выражения над двоичными кодами

множеств /j (j = 1, n), где единица в i-м бите означает, что элементы подмно-

/ч    /ч

жества M{ принадлежат множеству . Утверждение доказано полностью.

Например, для трех множеств (рис. 2.16) будут соответствовать следующие
коды: / = 00010111, /2 = 01001011, /3 = 00101101.

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

Иными словами, если

•    каждой паре различных битов в двоичном представлении множества сопо-

/ч    /ч

ставить индексы ab, где а - номер единичного бита, b - номер нулевого
бита;

•    каждому граничному элементу геометрических объектов сопоставить ин¬
декс, состоящий из номеров подмножеств, которые они разделяют:
a.b, где
а - номер подмножества, которое охватывает поверхность геометрическо¬
го объекта,
b - номер внешнего множества (рис. 2.15, рис. 2.16);

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

a.b = b.a требуется изменить направление обхода вершин данного граничного
элемента (инверсия).

рис. 2.16. Нумерация подмножеств и границ для трех множеств

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

2.3.4. Нумерация граничных элементов
Критерием нумерации граничных элементов является определение про¬
странственного положения каждого граничного элемента (рис. 2.16). Есте¬
ственно, при классификации необходимо исключить пересечения граничных
элементов с поверхностью геометрического объекта разбиением их на части.

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

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

Алгоритм определения пространственного положения узлов основан на
методе трассировки лучей [100]. Пусть задана некоторая точка
M (xM, yM, zM),
для которой необходимо определить пространственное положение относитель¬
но поверхности ^. Пусть
n - число пересечений поверхности ^ с выпущен¬
ным из
M (Хм, Ум, Zm ) лучом


^Х = Хм;

I = * У = Ум;    (2.27)

^zzM.

Если n четно, то M - находится вне области, ограниченной рассматрива¬
емой гранично-элементной сеткой, иначе - внутри.

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

рис. 2.17. Типы пересечений лучом с гранично-элементной сеткой в ребрах
и при прохождении по граничному элементу:
а) б) касание; в) г) пересечение;

Пусть луч I пересекает граничные элементы щ1, щ2,щт в некоторой
точке, принадлежащей ребру или узлу сетки (рис. 2.17). Если проекции на луч

I нормалей ni = (n(), n(J), nZ)) граничных элементов щ (i = 1, т) сонаправлены,

то I пересекает поверхность, аппроксимированную гранично-элементной сет¬
кой. Для вычисления направления проекций необходимо определить знаки ска¬
лярного произведения
(ni, I), i = 1, т [76, 100]. Так как луч I направлен вдоль
оси
OZ, то I = (0,0,1). Следовательно, для сонаправленности нормалей гранич¬
ных элементов достаточно, чтобы совпадали знаки координат
nZ) (i = 1, т).

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

2.3.5. Алгоритм метода композиций

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

1)    проверка гранично-элементной сетки на замкнутость и в случае необхо¬
димости добавление граничных элементов;

2)    в соответствии с установленной нумерацией граничные элементы раз¬
деляются на 2n не пересекающихся множества (n - число геометриче¬
ских объектов);

3)    вычисляется двоичный код, соответствующий решению метода компо¬
зиций;

4)    в зависимости от пар несовпадающих битов в полученном двоичном ко¬
де выделяются необходимые узлы и граничные элементы.

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

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

2.4. Хеш-таблицы для быстрого поиска в алгоритмах построения

гранично-элементной сетки

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

Один из наиболее эффективных способов реализации быстрого поиска -
применение
хеш-таблиц, что позволяет сократить среднее время поиска эле¬
мента до порядка 0(1), а в наихудшем случае - 0(n), где
n - число элементов
[88].

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

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

2.4.1. Хеш-таблица для узлов
Поиск индекса узла с соответствующими координатами необходим для по¬
строения граничных элементов.

Пусть для координат узлов гранично-элементной сетки верны следующие
неравенства:


Отрезки (2.28) можно разделить на nx, ny, nz равных частей (рис. 2.18):


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

Каждому множеству узлов, заданных неравенствами (2.29) можно задать
индекс:

Из формул (2.29) и (2.30) можно получить хеш-функцию для хеш-таблицы
объемом
nxnynz, с учетом соблюдения условия (2.28) для координат узлов сет-

ки:

от деления (2.31) на объем таблицы (nxnynz):



Чтобы получить хеш-функцию для любых узлов достаточно взять остаток

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

рис. 2.19. Структура хеш-таблицы: элементы хранятся в динамическом массиве

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

узлы сетки на множества меньшего размера (~ 1/nxnynz). С увеличением раз¬
мерности таблицы уменьшается число коллизий, но, соответственно, увеличи¬
вается объем неиспользуемого пространства.

2.4.2. Хеш-таблица для граничных элементов

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

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

Утверждение 2.5. Если для вершин плоского многоугольника выполняются
неравенства (2.28), то они выполняются для всех точек данного многоугольни¬
ка.

Доказательство. Пусть неравенства (2.28) выполняются для вершин мно¬
гоугольника Р и существует хотя бы одна точка %(
x%, y%, z%)£ Р, для которой

данные неравенства не выполняются.

Без ограничения общности можно предположить, что x%> xmax. Так как

%(x%, y%, ) £ Р, то плоскость у%, перпендикулярная оси OX и проходящая че¬
рез данную точку обязательно будет пересекать или касаться (можно считать
тоже пересечением) границы многоугольника Р, которая состоит из ребер, гео¬
метрически представляющих собой отрезки прямых. Следовательно, на ребрах,
пересекаемых плоскостью существуют точки, у которых координата
x > xmax. Отсюда следует, что существует такая вершина M (xM, yM, zM), что
xM > x^. Тогда xM > xmax, что противоречит условию.

Аналогичные рассуждения применимы и для остальных случаев, когда для
точек многоугольника Р не выполняются неравенства (2.28). Следовательно,
Утверждение доказана.

Из данной теоремы следует:

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

x . < xx ; y . < yy ; z < z ;    (2.33)

min    max    min    max    max

гдеxmin, "^max , .Vmln, .ymax , zmax - минимальные и максимальные значения

координат узлов граничного элемента.

2.    Если для узлов гранично-элементной сетки выполняются неравенства
(2.28), то для любой точки гранично-элементной сетки, тоже будет вы¬
полняться данное неравенство;

Для доказательства первого утверждения достаточно рассмотреть геомет¬
рическое свойство луча (2.27) и что если луч пересекает граничный элемент, то
хотя бы одна из точек луча будет принадлежать данному граничному элементу,
для координат которой будут выполняться неравенства (2.28).

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

Таким образом, можно найти такие минимальные и максимальные значе¬
ния координат, чтобы гранично-элементная сетка была заключена в параллеле¬
пипед, представленный в виде неравенств (2.28). Полученный параллелепипед
разбивается на заданные неравенствами (2.29) равные части (рис. 2.18), кото¬
рым задается индексация согласно (2.30).

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

(2.27) имеет смысл только для координат точек множества (2.28), для которых
можно применять хеш-функцию (2.31).

Используя неравенства (2.29), (2.33) и функцию (2.30) можно получить ин¬
дексы множеств точек, для которых существует вероятность пересечения луча

(2.27) с граничным элементом сетки:

где Xmin, Xmax , Уmln, ymax , Zmln, Zmax - минимаЛьные и максимальные значения

координат узлов    а    •Xmax , ymin , .ymax , Zmax - минимальные и макси¬

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

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

84

2.5. Выводы

Во второй главе получены следующие результаты:

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

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

•    Разработан метод композиций для построения гранично-элементных сеток
на конструкциях сложной формы путем объединения, вычитания и/или пе¬
ресечения геометрических объектов, поверхность которых аппроксимиро¬
вана ансамблем граничных элементов.

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

•    Разработаны методы хеширования узлов и граничных элементов для со¬
кращения времени выполнения алгоритмов построения пространственных
гранично-элементных сеток. Хеширование узлов и граничных элементов
является дополнительным улучшением реализации существующих или
разрабатываемых методов гранично-элементной дискретизации.

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

Глава 3. Визуальная среда построения пространственных
гранично-элементных сеток и решения контактных задач

3.1. Программная модель визуальной среды SBEM-Contact

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

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

1)    должна иметься возможность модификации программы при расширении
диапазона задач;

2)    учтена возможность сопряжения разработанной программы с другими об¬
щеизвестными пакетами графических или расчетных программ;

3)    работа с программой должна быть как можно более простой и унифициро¬
ванной;

4)    затраты времени на подготовку данных и системные требования к ЭВМ
должны быть минимизированы.

Удовлетворение первого требования во многом зависит от структуры раз¬
рабатываемой программы. С развитием технологии программирования появи¬
лась возможность представить программу не как единое целое, а в виде взаимо¬
связанных блоков, которые можно замещать или удалять без нарушения це¬
лостности. В операционной системе Windows такой подход называется техно¬
логией компонентно-объектного моделирования (COM) [102, 105, 114].

Применение технологии COM оказалось весьма эффективно в разработке
визуальной среды SBEM-Contact. Структурно разрабатываемое приложение со¬
стоит из нескольких взаимосвязанных блоков:

1)    основное приложение (Uran.exe);

2)    встроенные COM-серверы построения гранично-элементной сетки (утили¬
ты проектирования);

3)    встроенные COM-серверы работы с файлами (файловые утилиты);

4)    встроенные COM-серверы решения контактных задач (утилиты решения
задач);

5)    библиотека типов (Custom.tlb), которая служит связующим звеном между
приложением и утилитами (рис. 3.1).

рис. 3.1. Схема структуры связей в SBEM-Contact

Утилиты можно подключать к программе на стадии инсталляции или при
последующих обновлениях, что обеспечивает гибкие возможности модифика¬
ции при расширении диапазона задач проектирования. Настройки визуальной
среды SBEM-Contact хранятся в системном реестре Windows и загружаются
при запуске программы.

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

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

Файл Преобразование Новый Редактирование Статический анализ Окна Настройка

рис. 3.2. Главное окно SBEM-Contact

Чтобы затраты времени на подготовку данных и системные требования
ЭВМ были минимизированы, моделируемый геометрический объект представ¬
ляет собой динамическую структуру (рис. 3.3), ссылка на которую передается
между утилитами и управляющим приложением. Это уменьшает затрачивае¬
мый объем памяти и увеличивает быстродействие, но осложняет, в тоже время,
технику программирования: корректность заполнения и работы со структурой
данных геометрического тела возлагается на программиста. Стандартные
структуры и подходы программирования высокого уровня (массивы, записи,
классы и объекты) позволяют контролировать данную работу, но при большом
количестве вершин и граней геометрического объекта требуется высокая мощ¬
ность компьютера.

рис. 3.3. Структура данных геометрического объекта

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

3.1.2. Библиотека типов
Связующим звеном между управляющим приложением Uran.exe и утили¬
тами является библиотека типов Custom.tlb. Обычно описание интерфейсов
хранится внутри COM-серверов, но ввиду того, что в одном приложении ис¬
пользуется несколько COM-серверов, интерфейсы, поддерживаемые компонен¬
тами и приложением, хранятся в отдельной библиотеке типов [102, 105]. В про¬
цессе развития программного проекта библиотека типов может меняться, но по
правилам технологии COM обязательно должны поддерживаться предыдущие
версии интерфейсов. К настоящему времени в библиотеке типов реализованы
следующие интерфейсы (полное описание см. приложение 1):

•    ICustomFile - поддерживается файловыми утилитами, в которых реализу¬
ются процедуры сохранения в файл (Save) и считывания из файла (Open)
данных геометрического объекта.

•    ICustomUtil - поддерживает все основные свойства, процедуры и функции,
реализуемые утилитами геометрического построения и решений задач.
Данный интерфейс является родительским для IGeometryUtil и IProcessUtil,
для того, чтобы можно было в визуальной среде SBEM-Contact отличать
компоненты геометрического построения гранично-элементной сетки и
решений контактных задач.

•    IMouseEditUtils - может поддерживаться утилитами геометрического по¬
строения гранично-элементной сетки для реализации обработки событий
мыши в окнах проекций.

•    IUran - интерфейс авторизации, поддерживаемый управляющим приложе¬
нием Uran.exe для обратной связи с утилитами. Обычно применяется для
передачи данных из утилит в программу или вызова процедур перерисовки
геометрического объекта.

•    IFiles, IGeometryUtils, IProcessUtils - поддерживаются управляющей про¬
граммой Uran.exe для получения списка соответствующих утилит, под¬
ключенных к визуальной среде.

Основанная на технологии COM модель визуальной среды построения про¬
странственных гранично-элементных сеток и решения контактных задач харак¬
терна простой логической структурой связей, задаваемых интерфейсами, реали¬
зованными в библиотеке типов custom.tlb. Во многих программных пакетах три
основных этапа препроцессор, процессор и постпроцессор реализованы в от¬
дельных программах, связанных друг с другом на уровне файлов данных. Фак¬
тически, утилиты в визуальной среде SBEM-Contact тоже являются реализаци¬
ей соответствующих этапов, но они все связаны набором интерфейсов в одном
приложении, что упрощает работу с программой и передача данных осуществ¬
ляется быстрее.

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

3.1.3. Утилиты

Все существующие или разрабатываемые утилиты (проектирования гра¬
нично-элементной сетки, файловые, решения контактных задач) подключаются
к среде SBEM-Contact с помощью соответствующего диалогового окна
(рис. 3.4), где имеется возможность подключать/отключать соответствующие
утилиты, или устанавливать новые, не зарегистрированные в системе Windows.

рис. 3.4. Диалоговое окно подключения утилит к визуальной среде Uran

Утилиты геометрического построения гранично-элементных сеток можно
разбить на два типа:

1)    утилиты генерации гранично-элементной сетки - моделируют сетку для
конкретных контактных поверхностей с заданными параметрами;

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

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

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

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

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

3.2. Утилиты геометрического построения гранично-элементной сетки

3.2.1. Утилиты генерации гранично-элементной сетки на осесимметричных и

блочных конструкциях
На основе предложенных методик аппроксимации поверхностей конструк¬
ций применяемых в фундаментостроении (п. 2.2) разработаны соответствую¬
щие утилиты (рис. 3.5).


рис. 3.5. Утилита генерации гранично-элементной сетки на поверхности
конструкций
а) осесимметричных б) блочных


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

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

3.2.2. Утилита построения пространственных гранично-элементных сеток

методом композиций

Так как операции композиций над геометрическими объектами соответ¬
ствует операциям над множествами (п. 2.3), то любую композицию произволь¬
ного числа геометрических объектов можно свести к последовательности опе¬
раций над двумя объектами (рис. 2.13). Следовательно, достаточно реализовать
операции метода композиций только для двух геометрических объектов. Из
рис. 2.15 и табл. 2 очевидно, что при построении поверхностей жестких штам¬
пов методом композиций целесообразно использовать только три указанные
операции (объединение, пересечение, вычитание), так как остальные через них
выражаются или могут привести к нарушению целостности фигуры (например,
отрицание).

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

рис. 3.6. Утилита построения пространственных гранично-элементных сеток
методом композиций и примеры результата работы:
а) нумерация граничных элементов (рис. 2.15); б) объединение (A+B);
в) вычитание (A/B); г) пересечение (A*B);

3.2.3. Утилиты корректировки гранично-элементной сетки
На основе предложенных методов интерактивного построения граничной
поверхности (п. 2.4) разработана утилита
редактор многогранников, в которой
реализованы методы пространственного перемещения, удаления и добавления
вершин. Данные операции можно выполнять с помо
щью диалогового окна в
соответствующем режиме (рис. 3.7) или мышью в окнах проекций визуальной
среды SBEM-Contact (рис. 3.2).

рис. 3.7. Диалоговое окно редактора многогранников в режиме
а) изменения координат; б) удаления; в) добавления

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

рис. 3.8. Утилита дискретизации плоских фрагментов

Подвергаемые дискретизации поверхностные фрагменты можно выбрать
вручную мы
шью в окнах проекций визуальной среды SBEM-Contact (рис. 3.2),
в блоке навигаций диалогового окна утилиты дискретизации (рис. 3.8), или ав¬
томатически, включая все элементы, попадающие в заданный прямоугольный
параллелепипед. Выделенные фрагменты разбиваются на треугольные и четы¬
рехугольные элементы, которые затем разбиваются по формулам аппроксима¬
ции (1.20) - (1.23) на заданное число разбиений по горизонтали и вертикали.

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

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

3.3.1. Форма ввода

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

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

Для того, чтобы получить соответствующее решение необходимо:

1)    построить гранично-элементную сетку на контактной поверхности;

2)    задать механические свойства грунта (коэффициент Пуассона V и модуль
упругости Е) и общую нагрузку на штамп (сила
P(xP, yP, zP) и момент

M (хм , Ум , Zm );

3)    определить параметры численного интегрирования и решения системы ли¬
нейных алгебраических уравнений.

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

Результатом вычислений контактной задачи с числом n граничных эле¬
ментов будут
n контактных напряжений pt(pf), p2), p3(i)), в узлах коллокаций

K(<^, ^2, %3) i = 1, n, и по три компонента для перемещений А1, А2 А3 и пово¬
ротов
щ1, щ2, y3 штампа как жесткого целого [5].

Ввиду большого количества пространственно зависящих контактных
напряжений, появляется необходимость отображать полученные решения визу¬
ально. Сложность поставленной задачи заключается в том, что требуется найти
метрику для сравнений пространственных векторов напряжений pt (xi, yi, zt)

(i = 1, n), выпущенных из центров масс плоских граничных элементов не лежа¬
щих на одной плоскости. В численном анализе решений данная задача решает¬
ся путем проекции векторов
pi (xi, yt, zi) на нормаль i-го граничного элемента
[5]:

p^P = (pi,ni^ i =1, n,    (3.1)

где pt - вектор контактного напряжения; nt - нормаль граничного элемента;

(•,•) - скалярное произведение векторов. Следует заметить, что если pПр < 0, то

наблюдается внутреннее давление упругого полупространства на штамп, что не
редко наблюдается ввиду замкнутости системы и необходимости выполнения
соответствующих законов теории упругости [21, 66, 86, 89]. В этих местах мо¬
жет возникнуть отрыв упругого полупространства от штампа и образоваться
пустоты.

3.3.2. Отображение контактных напряжений на поверхности цветом
Пусть заданы две 32-разрядные цветовые константы
cmn и cmax соответ¬
ствующие минимальным и максимальным значениям из полученных проекции

векторов контактных напряжений (3.1). Требуется найти цветовой спектр

[cmin; cmax ], соответствующий интервалу

mm рПр; max рПР

i=1,n    i=1,n

Известно, что цвет в вычислительных машинах представлен в виде трех
цветовых каналов: Red (красный), Green (зеленый) и Blue (синий) [111], что
можно представить как три координаты вектора цвета. Следовательно, цвето¬
вой спектр можно представить в следующем виде (рис. 3.10):

где Rmax , Rmin , Gшx, ^m1n, Bmax , Bmin - интенсивность красного синего и зе¬
леного канала цветов cmin и cmax; RGB - функция преобразования трех цвето¬
вых каналов в цветовую константу;
рПР - проекция вектора контактных напря¬
жений на нормаль (3.1), р™“ = min
рП), р“ах = max р{р.

г=1,и    г=1,и

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

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

3.4. Проблемы решения системы линейных алгебраических уравнений

больших размеров

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

1)    Устойчивость решения полученной системы гарантировано только в пря¬
мых методах (методом исключений Гаусса или L^-разложений) [103].

2)    Требуются большие затраты для хранения элементов матрицы.

Безусловно, при численном решении каких-либо задач на компьютере пре¬
следуются две основные задачи: сокращение времени и погрешности вычисле¬
ний. Прямые методы решения системы линейных алгебраических уравнений
(метод исключений Г аусса или L^-разложений) обладают скоростью выполне¬
ния порядка
O(n3), т. е. при увеличении порядка системы n будет существен¬
ным увеличение времени решения. Существуют другие методы решения ли¬
нейных алгебраических систем, которые позволяют сократить порядок вычис¬
лений: итерационные, градиентные, методы ортогонализации [112, 113]. Ско¬
рость выполнения данных методов зависит от свойств матрицы линейно¬
алгебраической системы: если собственные значения будут расположены на
отрезке 0
к < 1 (к = 1, n), то сходимость итерационного процесса будет иметь
порядок геометрической прогрессии [113], т. е. скорость выполнения будет по¬
рядка
O(n) .

Однако в рассматриваемых контактных задачах скорость сходимости ите¬
рационного процесса решения линейно-алгебраической системы оказывается
значительно ниже, чем скорость решения методом Гаусса, так как собственные
значения матрицы далеки от необходимого требования. В связи с этим сокра¬
щение времени вычислений возможно только на аппаратном или архитектур¬
ном уровне компьютера или операционной системы [46, 47].

Вторая проблема особенно актуальна для конструкций с большим числом
граничных элементов. Пусть задана контактная поверхность с числом гранич¬
ных элементов равным n, тогда объем занимаемого пространства для матрицы
(1.13) будет вычисляться по формуле:

Dim(n) = 3 • n • (3 • n +1) • d,    (3.3)

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

Например, для системы размерностью n > 3862 потребуется объем памяти
более 1 Гигабайта, следовательно, для таких задач «домашние» компьютеры с
неболь
шим объемом оперативной памяти и операционной системой Windows
не подходят. Также не является рациональным хранение большого объема дан¬
ных на жестком диске и непосредственное считывание/запись данных на про¬
тяжении всего решения, так как скорость вычислений существенно замедляется
даже на винчестерах c архитектурой быстрого ввода/вывода.

К счастью, в настоящее время существует возможность увеличить объем
оперативной памяти компьютера, поддерживаемой современными операцион¬
ными системами до 4 Гигабайт (в 64-разрядных компьютерах до 16 Гбайт) [107,
108], но и этот объем не является рациональным, так как при
n > 7723 возника¬
ет прежняя проблема - нехватка памяти.

Еще в середине 60-х годов для вычислительных машин типа М-20, обла¬
дающих производительностью около 20000 операций в секунду, но с малой
оперативной памятью была разработана специальная блочная технология ре¬
шения больших алгебраических задач [46]. Созданные на основе данной техно¬
логии программы были весьма эффективны, в частности, на машинах М-20 они
позволяли решать системы 200-го порядка всего за 9 минут.

Еще одним способом повышения производительности вычислительных си¬
стем используется скалярная, конвейерная и параллельная обработка данных,
ставшей базовой основой появления параллелизма в архитектуре компьюте¬
ра [47, 90].

3.4.1. Параллельные вычислительные системы
К настоящему времени существует довольно много вычислительных си¬
стем параллельной архитектуры (векторно-конвейерные компьютеры, массив¬
но-параллельные и матричные системы, компьютеры с широким командным
словом, спецпроцессоры, кластеры, компьютеры с многопоточной архитекту¬
рой, dataflow-компьютеры и т. п.). Все они характеризуются особенностями ор¬
ганизации памяти, топологией связи между процессорами, синхронностью ра¬
боты отдельных устройств или способом выполнения операций [47].

В настоящее время развитие параллельных компьютеров идет по четырем
основным направлениям: векторно-конвейерные суперкомпьютеры, SMP си¬
стемы, MPP системы и кластерные системы [30].

Первый векторно-конвейерный компьютер Cray-1 появился в 1976 году.
Архитектура его оказалась настолько удачной, что он положил начало целому
семейству компьютеров. Название этому семейству компьютеров дали два
принципа, заложенные в архитектуре процессоров: конвейерная организация
обработки потока команд и введение в систему команд набора векторных опе¬
раций, которые позволяют оперировать с целыми массивами данных [30]. Дли¬
на одновременно обрабатываемых векторов в современных векторных компью¬
терах составляет, как правило, 128 или 256 элементов. Очевидно, что векторные
процессоры должны иметь гораздо более сложную структуру и по сути дела
содержать множество арифметических устройств. Основное назначение век¬
торных операций состоит в распараллеливании выполнения операторов цикла,
в которых в основном и сосредоточена большая часть вычислительной работы.

Для этого циклы подвергаются процедуре векторизации с тем, чтобы они могли
реализовываться с использованием векторных команд. Как правило, это выпол¬
няется автоматически компиляторами при изготовлении ими исполнимого кода
программы. Поэтому векторно-конвейерные компьютеры не требовали какой-
то специальной технологии программирования, что и явилось решающим фак¬
тором в их успехе на компьютерном рынке. Тем не менее, требовалось соблю¬
дение некоторых правил при написании циклов с тем, чтобы компилятор мог их
эффективно векторизовать. Векторно-конвейерные компьютеры довольно гро¬
моздки и чрезвычайно дороги, так как уровень развития микроэлектронных
технологий не позволяет в настоящее время производить однокристальные век¬
торные процессоры. В связи с этим, начиная с середины 90-х годов, когда по¬
явились достаточно мощные суперскалярные микропроцессоры, интерес к это¬
му направлению был в значительной степени ослаблен. Суперкомпьютеры с
векторно-конвейерной архитектурой стали проигрывать системам с массовым
параллелизмом. Однако в марте 2002 г. корпорация NEC представила систему
Earth Simulator из 5120 векторно-конвейерных процессоров, которая в 5 раз
превысила производительность предыдущего обладателя рекорда - MPP систе¬
мы ASCI White из 8192 суперскалярных микропроцессоров [30].

Характерной чертой многопроцессорных систем SMP (Symmetry Multipro¬
cessing - симметричные мультипроцессорные системы) архитектуры является
то, что все процессоры имеют прямой и равноправный доступ к любой точке
общей памяти. Первые SMP системы состояли из нескольких однородных про¬
цессоров и массива общей памяти, к которой процессоры подключались через
общую системную шину. Однако такая архитектура оказалась непригодна для
создания сколь либо масштабных систем [30]. Первая возникшая проблема -
большое число конфликтов при обращении к общей шине. Остроту этой про¬
блемы удалось частично снять разделением памяти на блоки, подключение к
которым с помощью коммутаторов позволило распараллелить обращения от
различных процессоров. Однако и в таком подходе неприемлемо большими ка¬
зались накладные расходы для систем более чем с 32-мя процессорами. Совре¬
менные системы SMP архитектуры состоят из нескольких однородных серийно
выпускаемых микропроцессоров и массива общей памяти, подключение к ко¬
торой производится либо с помощью общей шины, либо с помощью коммута¬
тора. Наличие общей памяти значительно упрощает организацию взаимодей¬
ствия процессоров между собой и упрощает программирование, поскольку па¬
раллельная программа работает в едином адресном пространстве. Однако за
этой кажущейся простотой скрываются большие проблемы, связанные с опера¬
тивной памятью, скорость работы которой значительно отстала от скорости ра¬
боты процессора. Если для повышения скорости работы персональных компь¬
ютеров используются микропроцессоры со встроенной кэш-памятью, то в мно¬
гопроцессорных системах это приводит к нарушению принципа равноправного
доступа к любой точке памяти, так как данные, находящиеся в кэш-памяти не¬
которого процессора, недоступны для других процессоров. С большим или
меньшим успехом эти проблемы решаются в рамках общепринятой в настоя¬
щее время архитектуры ccNUMA (cache coherent Non Uniform Memory Access),
где память физически распределена, но логически общедоступна [47]. К сожа¬
лению, при увеличении числа процессоров в системе стоимость SMP систем
растет быстрее, чем производительность. Кроме того, из-за задержек при обра¬
щении к общей памяти неизбежно взаимное торможение при параллельном вы¬
полнении даже независимых программ.

В отличие от системы SMP, система MPP (Multiply Paralleling - массовый
параллелизм) представляет собой объединенные однородные вычислительные
узлы, состоящих из одного или нескольких процессоров, собственной опера¬
тивной памяти, коммуникационного оборудования, подсистемы ввода/вывода,
т. е. обладает всем необходимым для независимого функционирования [47].
Процессоры в таких системах имеют прямой доступ только к своей локальной
памяти. Доступ к памяти других узлов реализуется обычно с помощью меха¬
низма передачи сообщений. Такая архитектура вычислительной системы
устраняет одновременно проблему как конфликтов при обращении памяти, так
и проблему когерентности кэш-памяти. Это дает возможность практически не¬
ограниченного наращивания числа процессоров в системе, увеличивая тем са¬
мым ее производительность. Но вслед за решением проблемы системы SMP по¬
явилась очередная задача связи коммуникационными каналами большого коли¬
чества узлов в единое целое. Различные производители MPP систем использо¬
вали разные топологии [30, 47]. В компьютерах Intel Paragon процессоры обра¬
зовывали прямоугольную двумерную сетку. Для этого в каждом узле достаточ¬
но четырех коммуникационных каналов. В компьютерах Cray T3D/T3E исполь¬
зовалась топология трехмерного тора, соответственно в узлах было шесть ком¬
муникационных каналов. Фирма nCUBE использовала в своих компьютерах
топологию n-мерного гиперкуба [30]. При обмене данными между процессора¬
ми, не являющимися ближайшими соседями, происходит трансляция данных
через промежуточные узлы с помощью специальных аппаратных средств, кото¬
рые освобождают центральный процессор от участия в трансляции данных.

Кластерные технологии стали логическим продолжением развития идей,
заложенных в архитектуре MPP систем. Если процессорный модуль в MPP си¬
стеме представляет собой законченную вычислительную систему, то кластер
использует в качестве таких вычислительных узлов обычные серийно выпуска¬
емые компьютеры. Появление высокоскоростного сетевого оборудования и
специального программного обеспечения, такого как система MPI [59, 87], реа¬
лизующего механизм передачи сообщений над стандартными сетевыми прото¬
колами, сделали кластерные технологии общедоступными. Сегодня не состав¬
ляет большого труда создать небольшую кластерную систему, объединив вы¬
числительные мощности компьютеров отдельной лаборатории или учебного
класса. При этом не накладывается никаких ограничений на состав и архитек¬
туру узлов: каждый из узлов может функционировать под управлением своей
собственной операционной системы (Linux, FreeBSD, Solaris, Tru64 Unix,
Windows NT) [30, 47]. Когда узлы кластера неоднородны, говорят о гетероген¬
ных кластерах [24, 83]. Другим важным прорывом в разработке параллельных
систем кластерной архитектуры послужило появление мировой сети Internet,
так как это дало возможность соединять вычислительные узлы, находящиеся на
больших расстояниях [47], т. е. разрабатывать единую параллельную вычисли¬
тельную систему между научно-исследовательскими подразделениями. Однако,
скорость передачи данных по сети Internet весьма невысока и компьютеры
обычных пользователей (а таких, как правило, большинство в подобных проек¬
тах), не работают 24 часа в сутки, что накладывает некоторые очень серьёзные
ограничения архитектуре распределённых вычислений. Таким образом, модель
вычислений должна учитывать низкую скорость передачи данных между вы¬
числительными узлами, а также их непостоянную доступность. Очевидно, за¬
дача, которую пытаются решить, должна обладать определёнными свойствами
(например, слабой связанностью).

В заключение следует отметить, что судя по материалам сервера
http://Parallel.ru, к ноябрю 2003 года количество кластеров в списке T0P500
(мировой рейтинг суперкомпьютеров - http://www.top500.org/), составляет 208,
а в июне 2003 составляло всего л
ишь 149. Более того, судя по этой же ноябрь¬
ской редакции, на третье место вырвался кластер Virginia Polytechnic Institute
and State University, состоящий из 2200 процессоров Apple G5 2.0 GHz. Основ¬
ной причиной этой тенденции является сравнительно небольшая стоимость
кластерных систем. Как уже было сказано ранее, это объясняется прежде всего
тем, что кластеры собирают из стандартных аппаратных компонентов (в том
числе из персональных компьютеров), а это, в свою очередь, позволяет приме¬
нять совместимое программное обеспечение [24, 83].

3.4.2. Алгоритм решения линейно-алгебраических систем больших размеров

на кластерах

Для решения систем линейно-алгебраических уравнений, занимаемых объ¬
ем памяти (3.3) менее 1 гигабайта, применялся обычный персональный компь¬
ютер IBM AT с процессором Intel Pentium III 733 МГц наращиванием опера¬
тивной памяти до нужного размера. Решение систем максимальных размеров
(более 1 Гб) вызвало некоторые трудности, так как в данном случае нет воз¬
можности полностью загрузить в оперативную память матрицу системы.

Для последних случаев наиболее эффективно применять блочную техноло¬
гию решения больших алгебраических задач [46], предложенную академиком

В. В. Воеводиным в середине 60-х годов прошлого столетия. Предложенный
подход к решению поставленной задачи заключается в следующем. Матрица
линейно-алгебраических уравнений вводится в оперативную память не сразу, а
последовательно по одной строке, каждая из которых подвергается преобразо¬
ваниям метода Гаусса (вычитание предыдущих строк). Таким образом, после
k-
го шага полученную строку будет целесообразнее хранить в массиве размерно¬
стью
(n - k +1) (k = 1, n) и, соответственно, для проведения (k + 1)-го шага
необходимо

элементов для хранения треугольной матрицы. В итоге для данного метода
необходимо оперативной памяти почти в два раза меньше, чем для хранения
исходной матрицы. Если размерность матрицы уравнений такова, что превы¬
шает допустимые нормы даже в преобразованном виде, то ее необходимо раз¬
бить на блоки, которые последовательно загружаются в память компьютера для
соответствующих преобразований метода Гаусса [46].

Предложенный метод очень эффективно использовать для кластеров, так
как архитектура таких компьютеров состоит из независимых блоков (узлов) со
своей оперативной памятью и процессором. Пусть кластер состоит из
n узлов и
в оперативной памяти k-го узла может храниться
mk строк матрицы линейно¬
алгебраических уравнений
(k = 0, n -1). На каждом этапе итерации основной
узел (нулевой) будет последовательно загружать в оперативную память строки
матрицы уравнений с последующей обработкой метода Гаусса. Если
i > mk, где
k - номер кластера, i - номер строки, то обработанная строка передается кла¬
стеру с номером (k +1), иначе - сохраняется в данном кластере. Соответствен¬
но, обратный ход метода Гаусса начинается с
(n — 1) -го кластера, посылая всем

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

Чтобы минимизировать передачу данных между узлами целесообразно
разделить строки матрицы так, чтобы число строк в данном узле было не боль¬
ше, чем в предыдущем (т0
> щ >... > mn—1).Если узлы кластера будут одинако¬
выми по мощности, то строки матрицы необходимо разделить на почти равные
части для более-менее синхронной работы независимых процессов.

3.5. Выводы

В третьей главе получены следующие результаты:

•    Разработано и реализовано программное средство (SBEM-Contact) предна¬
значенное для автоматической подготовки данных к проведению вычисли¬
тельного эксперимента (гранично-элементная дискретизация).

•    Реализация SBEM-Contact основывалась на технологии СОМ, что предо¬
ставляет возможность расширения и модификации программного продукта
путем разработки и реализации новых методов гранично-элементной дис¬
кретизации без перекомпиляции и изменений всей программы, что не при¬
меняется в большинстве программ.

•    Реализованы методы и алгоритмы пространственной гранично-элементной
дискретизции рассмотренные в второй главе.

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

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

•    Рассмотрены методы решения системы линейных уравнений больших раз¬
меров и на базе метода Гаусса разработан соответствующий алгоритм для
многопроцессорных суперкомпьютеров и кластеров.

ЗАКЛЮЧЕНИЕ

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

•    Разработаны методы интерактивного построения поверхностей состоящих
из набора плоских многоугольников путем добавления, удаления или про¬
странственного перемещения вершин и дискретизации полученной по¬
верхности на граничные элементы.

•    Разработан алгоритм автоматического построения гранично-элементных
сеток на конструкциях сложной формы путем объединения, вычитания
и/или пересечения геометрических объектов, поверхность которых аппрок¬
симирована ансамблем граничных элементов.

•    Разработаны методы хеширования узлов и граничных элементов для со¬
кращения времени выполнения алгоритмов построения пространственных
гранично-элементных сеток.

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.    Абросимов Н. А., Баженов В. Г. Нелинейные задачи динамики композит¬
ных конструкций: Монография. - Нижегород. гос. ун-т им. Н.И.Лобачевского.

- Н. Новгород: Изд-во Нижегород. гос. ун-та, 2002. - 399 с.

2.    Агапов И. Е., Алейников С. М. Применение двойственных сеток в расчетах
контактного изгиба плит сложной формы. // Тр. всероссийской конф. При¬
кладная геометрия, построение расчетных сеток и высокопроизводительные
вычисления. - М.: ВЦ РАН, 2004. - Т. 2 - С. 73 - 85.

3.    Адлуцкий В. Я. Вычисление коэффициентов интенсивности напряжений в
угловых точках плоского тела прямым методом граничных элементов. // сб.
науч. тр. Компьютерные методы в задачах прикладной математики и механи¬
ки. - Киев: НАН Украины, 1998. - С. 4 - 10.

4.    Айзикович С. М. Контактные задачи теории упругости для неоднородных
сред: автореферат дис. д-ра физ.-мат. наук: 01.02.04 / Ростов. гос. ун-т; науч.
консультанты: В.М. Александров, А.В. Белоконь. - Ростов н/Д: Б.и., 2003. - 32
с.

5.    Алейников С. М. Метод граничных элементов в контактных задачах для
упругих пространственно неоднородных оснований. - М.: АСВ, 2000.- 754 с.

6.    Алейников С. М., Вахтин А. А. Генерация гранично-элементных сеток для
расчета оснований и фундаментов мостовых опор в пространственной поста¬
новке. // Научный вестник воронежского государственного архитектурно¬
строительного университета. Серия: дорожно-транспортное строительство. -
2004. - Вып. 2. - С. 3 - 11.

7.    Алейников С. М., Вахтин А. А. Генерация пространственных гранично¬
элементных сеток для осесимметричных фундаментных конструкций. // Тез.
докл. науч.-тех. конф. - Новосибирск: НГАСУ, 2004. - Вып. 61. - С. 91 - 92.

8.    Алейников С. М., Вахтин А. А. Гранично-элементная дискретизация плос¬
ких областей в пространстве. // Мат. рег. науч.-мет. конф. Информатика: про¬
блемы, методология, технологии. - Воронеж: ВГУ, 2004. - Вып. 4. - С. 6 - 9.

9.    Алейников С. М., Вахтин А. А., Тюкачев Н. А. Алгоритмы построения про¬
странственных гранично-элементных сеток. // Мат. рег. науч.-мет. конф. Ин¬
форматика: проблемы, методология, технологии. - Воронеж: ВГУ, 2004. -
Вып. 4. - С. 9 - 11.

10.    Алейников С. М., Вахтин А. А., Тюкачев Н. А. Пространственные гранично¬
элементные сетки в контактных задачах теории упругости. // Тр. всероссий¬
ской конф. Прикладная геометрия, построение расчетных сеток и высокопро¬
изводительные вычисления. - М.: ВЦ РАН, 2004. - Т. 2 - С. 61 - 72.

11.    Алейников С. М., Вахтин А. А., Тюкачев Н. А. Система автоматизации по¬
строения пространственных сеток для решений контактных задач методом
граничных элементов на основе технологии COM. // Вестник ф-та прикладной
математики, информатики и механики. - 2005. - № 5 - С. 10 - 18.

12.    Александров В. М., Чебаков М. И. Аналитические методы в контактных за¬
дачах теории упругости. - М.: Физматлит, 2004. - 301 с.

13.    Александров В. М., Пожарский Д. А. Неклассические пространственные за¬
дачи механики контактных взаимодействий упругих тел. - М.: Факториал,
1998. - 288 с.

14.    Алехин В. В., Аннин Б. Д., Коробейников С. Н. Численное решение нелиней¬
ных осесимметричных задач с учетом контактных взаимодействий. // Межвуз.
сб. науч. тр. Прикладные задачи механики сплошных сред. - Воронеж: ВГУ,
199. - С. 21 - 28.

15.    Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных
алгоритмов: пер. с англ. - М.: Мир, 1979. - 536 с.

16.    Баженов В. А., Оробей В. Ф., Дащенко А. Ф., Коломиец Л. В. Строительная
механника. Специальный курс. Применение метода граничных элементов. -
Одесса: Астропринт, 2001. - 207 с.

17.    Баранов Л. В. Актуальные вопросы технологии современных САПР. // Тр.
всероссийской конф. Прикладная геометрия, построение расчетных сеток и
высокопроизводительные вычисления. - М.: ВЦ РАН, 2004. - Т. 2 -
С.131 - 142.

18.    Баранов Л. В., Боровиков С. Н., Иванов И. Э., Крюков И. А. Опыт взаимо¬
действия сеточного генератора с САПР. // Тр. всероссийской конф. Приклад¬
ная геометрия, построение расчетных сеток и высокопроизводительные вы¬
числения. - М.: ВЦ РАН, 2004. - Т. 2 - С. 143 - 153.

19.    Басов К. А. ANSYS в примерах и задачах. / Под общ. ред.
Д. Г. Красковского. - М.: Компьютер-Пресс, 2002. - 224 c.

20.    Безволев С. Г. Программные средства для проектирования фундаментных
плит и перекрестных лент. // Промышленное и гражданское строительство. -

2003. - № 1. - С. 39 - 40.

21.    Березанцев В. Г., Ксенофонтов А. И., Платонов Е. В., Сидоров Н. Н., Яро¬
шенко В. А.
Механика грунтов, основания и фундаменты. Под ред. д. т. н.
проф.
Березанцева В. Г. - М.: ТРАНСЖЕЛДОРИЗДАТ, 1961. - 340 с.

22.    Берж К. Теория графов и ее применения: пер. с французского. - М.: изд-во
иностранной литературы, 1962. - 320 с.

23.    Бобылев А. А. Применение вариационного метода к решению задачи о кон¬
тактном взаимодействии упругой полуплоскости с жестким штампом. // сб.
науч. тр. Компьютерные методы в задачах прикладной математики и механи¬
ки. - Киев: НАН Украины, 1998. - С. 19 - 24.

24.    Богданов П., Попов М. Еда и кластеры на скорую руку. // Компьютерра. -
2002. № 5 (430). - С. 31 - 33.

25.    Боголюбов А.Н., Красильникова А.В., Минаев Д.В., Свешников А.Г. Метод
конечных разностей для решения задач синтеза волноведущих систем. // Ма¬
тематическое моделирование. - М.: РАН, 2000. - Т. 12, № 1 - С. 13 - 24.

26.    Боровиков С. Н. Использование апприорной геометрической информации
для уменьшения вычислений с применением арифметики повышенной точно¬
сти при построении трехмерных триангуляций. // Математическое моделиро¬
вание. - М.: РАН, 2000. - Т. 12, № 2 - С. 40 - 48.

27.    Боровиков С. Н. Проблемы построения трехмерной триангуляции Делоне
для тел с криволинейной границей. // Математическое моделирование. - М.:
РАН, 2000. - Т. 12, № 2 - С. 49 - 60.

28.    Бреббия К., Теллес Ж., Вроубел Л. Методы граничных элементов: пер.
с англ. - М.: Мир, 1987. - 524 с.

29.    Бреховских Л. М., Гончаров В. В. Введение в механику сплошных сред: В
приложении к теории волн / АН СССР, отд-е океанолог., физ. атмосф. и геогр.

-    М.: Наука, 1982. - 335 с.

30.    Букатов А. А., Дацюк В. Н., Жегуло А. И. Программирование многопроцес¬
сорных вычислительных систем. - Ростов-на-дону.: ЦВВР, 2003. - 208 с.

31.    Васидзу К. Вариационные принципы в теории упругости и пластичности. -
М.: Мир, 1987. - 542 с.

32.    Васик Е. В., Ковура А. Б. К решению контактной задачи для упругой полу¬
плоскости с учетом пригрузки. // сб. науч. тр. Компьютерные методы в зада¬
чах прикладной математики и механики. - Киев: НАН Украины, 1998. - С. 24

-    27.

33.    Вахтин А. А. Автоматизация построения гранично-элементных сеток для
решения статических задач теории упругости. // Мат. междун. науч. конф. об¬
разование, наука, производство и управление в XXI веке. - С. Оскол: СОТИ,
2004. - Т. I. - С. 274 - 278.

34.    Вахтин А . А. Алгоритмы автоматического моделирования многогранников.
// Межвузовский сб. науч. тр. Математическое обеспечение ЭВМ. - Воронеж:
ВГУ, 2002. - Вып. 4. - С. 27 - 31.

35.    Вахтин А. А. Генерация гранично-элементной сетки на поверхностях осе¬
симметричных конструкций. // Мат. рег. науч.-мет. конф. Информатика: про¬
блемы, методология, технологии. - Воронеж: ВГУ, 2004. - Вып. 4. -
С. 48 - 52.

36.    Вахтин А . А. Генерация пространственных гранично-элементных сеток для
фундаментных конструкций блочного типа. // Тр. междун. конф. молодых
ученых и студентов Актуальные проблемы современной науки. Ч. 17: Есте¬
ственные науки. Информатика, вычислительная техника и управление. - Са¬
мара: Поволжская молодежная академия наук, 2003. - Вып. 4 - С. 11 - 13.

37.    Вахтин А. А. Генерация пространственных сеток для решений контактных
задач методом граничных элементов. // Мат. науч.-практ. семинара Новые ин¬
формационные технологии. - М.: Российская академия естественных наук,

2004. - Вып. 7. - С. 110 - 118.

38.    Вахтин А. А. Метод композиций для гранично-элементной дискретизации.
// Науч.-техн. Журнал Системы управления и информационные технологии. -
Воронеж: Научная книга, 2005. - № 4 (21) - С. 66 - 71.

39.Вахтин    А. А. Метод композиций для построения пространственных гранич¬
но-элементных сеток. // Мат. междун. науч. конф. Современные проблемы
прикладной математики и математического моделирования. - Воронеж:
ВГТА, 2005. - С. 54.

40.    Вахтин А. А. Методы построения гранично-элементных сеток для числен¬
ного решения пространственных контактных задач теории упругости. // Сб.
тр. междун. школы-семинара «Современные проблемы механики и приклад¬
ной математики». - Воронеж: ВГУ, 2005. - С. 87 - 90.

41.    Вахтин А. А. Препроцессор гранично-элементного программного комплек¬
са для решения задач геотехники. // Науч.-техн. журнал Системы управления
и информационные технологии. - Воронеж: Научная книга, 2003. - № 1-2 (12)

- С. 68 - 72.

42.    Вахтин А. А. Программный пакет автоматизированного твердотельного
проектирования. // Мат. рег. науч.-мет. конф. Информатика: проблемы, мето¬
дология, технологии. - Воронеж: ВГУ, 2003. - Вып. 3 - С. 29 - 32.

43.    Верещагин Н. К., Шень А. Лекции по математической логике и теории ал¬
горитмов. Часть 1. Начала теории множеств. - М.: МЦНМО, 1999. - 128 с.

44.    Вервейко Н. Д., Смотрова О. А. Предельное напряженно-деформированное
состояние связной сыпучей среды. // Межвуз. сб. науч. тр. Прикладные задачи
механики сплошных сред. - ВоронежЖ ВГУ, 1999. - С. 71 - 76.

45.    Верюжский Ю. В., Бродовой В. Л., Сирота Н. А., Александрова Н. П. Взаи¬
модействие методов конечных и граничных элементов в программных ком¬
плексах для инженерных расчетов. // тезисы докладов XVI Междун. конф.
Математическое моделирование в механике деформируемых тел. Методы
граничных и конечных элементов. Т. 1 - СПб.: СПбГАСУ, 1998. - С. 12 - 13.

46.    Воеводин В. В. Численные методы алгебры (теория и алгоритмы). - М.:
Наука, 1966. - 248 с.

47.    Воеводин В. В., Воеводин В. В. Параллельные вычисления. - СПб.: БХВ,
2002. - 600 с.

48.    Ворович И. И., Александров В. М., Бабешко В. А. Неклассические смешан¬
ные задачи теории упругости. - М.: Наука, 1974. - 455 c.

49.    Виленкин Н. Я. Комбинаторика. - М.: Наука, 1969. - 328 с.

50.    Галлагер Р. Метод конечных элементов: Основы / пер. с англ. Картвели-
швили В. М. под ред. Баничука Н. В. - М.: Мир, 1984. - 428 с.

51.    Гантер Д., Барнет С., Гантер Л. Интеграция Windows NT и Unix в под¬
линнике. - СПб.: BHV, 1998. -464 с

52.    Гардан И., Люка М. Машинная графика и автоматизация конструирования:
пер. с франц. - М.: Мир, 1987. - 272 с.

53.    Гибшман Е. Е., Назратенко Б. П. Мосты и сооружения на дорогах. - М.:
Транспорт, 1972. - Ч. I - 408 с.

54.    Годунов С. К. Элементы механики сплошной среды. - М.: Наука, 1978. -
304 с.

55.    Гойхенберг М. М., Дробышевский А. Н., Зубов В. И., Котеров В. Н.,
Кривцов В. М
., Стародумов А. В. Математическая модель и пакет программ
для расчета трехмерных течений газа в многоступенчатых охлаждаемых тур¬
бинах. // Тр. всероссийской конф. Прикладная геометрия, построение расчет¬
ных сеток и высокопроизводительные вычисления. - М.: ВЦ РАН, 2004. - Т. 1

-    С. 119 - 130.

56.    Голуб Д., Ванлоун Ч. Матричные вычисления: Пер. с англ. - М.: Мир, 1999.

-    548 с.

57.    Горностаев А. В. Строительство зданий и сооружений в районах распро¬
странения вечномерзлых грунтов. // Монтаж и спец. работы в строительстве. -

2002. - № 12. - С. 14 - 19.

58.    Донченко М., Рябенький М. Особенности использования программных
средств для модификации AutoCAD. // CAD master. - 2004. - № 5. - С. 10 - 15.

59.    Дорошенко А. Е. Математические модели и методы организации высоко¬
производительных параллельных вычислений. - Киев: Наукова думка, 2002. -
180 с.

60.    Зенкевич О. Метод конечных элементов в технике: Пер. с англ. - М.: Мир,
1976. - 545 с.

61.    Зуев С., Полещук Н. САПР на базе AutoCAD - как это делается. - Спб.:
БХВ, 2004. - 1168 с.

62.    Ивлев Д. Д. Теория предельного состояния и идеальной пластичности: из¬
бранные работы. - Воронеж: ВГУ, 2005. - 357 с.

63.    Ильина О. Н. Стратегии устойчивого развития систем автоматизированного
проектирования в строительстве. // Промышленное и гражданское строитель¬
ство. - 2003. - № 7. - С. 51.

64.    Ильина В. А., Силаев П. К. Численные методы для физиков-теоретиков. -
М.-Ижевск: Ин-т комп. иссл., 2003. - Ч. I. - 132 с.

65.    Каплун А. Б., Морозов Е. М., Олферьева М. А. ANSYS в руках инженера:
Практическое руководство. - М.: УРСС, 2003. - 269 с.

66.    Ковнеристов Г. Б. Интегральные уравнения контактной задачи теории
упругости для заглубленных штампов // Сб. научн. тр. - Киев: Киевский инж.-
строит. ин-т, 1962. - Вып. 20. - С. 200-213.

67.    Козловский В. Е. Применение МГЭ для исследования напряженно-
деформированного состояния мелкозалегающего трубопровода. // тезисы до¬
кладов XVI Междун. конф. Математическое моделирование в механике де¬
формируемых тел. Методы граничных и конечных элементов. Т. 1 - СПб.:
СПбГАСУ, 1998. - С. 94.

68.    Копысов С. П., Пономарев А. Б., Рычков В. Н. Открытое визуальное окру¬
жение для взаимодействия с геометрическими ядрами, генера¬
ции/перестроения/разделения сеток и построения расчетных моделей. // Тр.
всероссийской конф. Прикладная геометрия, построение расчетных сеток и
высокопроизводительные вычисления. - М.: ВЦ РАН, 2004. - Т. 2 -
С. 154 - 164.

69.    Корнишин М. С., Паймушин В. Н., Снигирев В. Ф. Вычислительная геомет¬
рия в задачах механики оболочек. - М.: Наука, 1989. - 208 с.

70.    Коробкин В. Д. Статически определимые поля напряжений осесимметрич¬
ной задачи теории пластичности. // Межвуз. сб. науч. тр. Прикладные задачи
механики сплошных сред. - Воронеж: ВГУ, 1999. - С. 143 - 148.

71.    Кренев Л. И. Деформирование полупространства с неоднородным упругим
покрытием: Автореф. дис. . канд. физ.-мат. наук: 01.02.04 / Ростов. гос. ун-т.
Науч. исслед. ин-т механики и приклад. математики им. Воровича И.И.; Науч.
рук.С.М. Айзикович. - Ростов н/Д: Б.и., 2003. - 19 с.

72.    Кузнецов О. П., Андельсон-Вельский Г. М. Дискретная математика для ин¬
женера. - М.: Энергия, 1980. - 344 с.

73.    Купрадзе В. Д. Граничные задачи теории колебаний и интегральные урав¬
нения. - М.: Гостехиздат, 1950. - 280 с.

74.    Кутрунов В. Н., Шагисултанова Ю. Н. К вопросу о тестировании алгорит¬
мов решения интегральных уравнений теории упругости. // тезисы докладов
XVI Междун. конф. Математическое моделирование в механике деформируе¬
мых тел. Методы граничных и конечных элементов. Т. 1 - СПб.: СПбГАСУ,

1998. - С. 96 - 97.

75.    Ландау Л.Д., Лифшиц Е. М. Механика сплошных сред. - 2-е изд., перераб.
и доп. — М.: Гос. изд-во техн.-теорет. литературы, 1954. - 795 с.

76.    Ласло М. Вычислительная геометрия и компьютерная графика на С++: пер.
с англ. - М.: БИНОМ, 1997. - 304 с.

77.    Лацис А. О. Как построить и использовать суперкомпьютер. - М.: Бестел-
лер, 2003. - 238 с.

78.    Лисов В. М. Мосты и трубы: учеб. пособие. Воронеж: ВГУ, 1995. - 328 с.

79.    Ломазов В. А. Задача диагностики упругих полуограниченных тел. // При¬
кладная математика и механика. - 1989. - Т. 53. - Вып. 5. - С. 766 - 772.

80.    Максимова Л. А. К задаче о вдавливании штампа в идеальнопластическую
среду. // Межвуз. сб. науч. тр. Прикладные задачи механики сплошных сред. -
Воронеж: ВГУ, 1999. - С. 164 - 168.

81.    Малинин Н. Н. Кто есть кто в сопротивлении материалов / Под ред. Дани¬
лова В. Л. - М.: Изд-во МГТУ, 2000. - 244 с.

82.    Мейз Дж. Теория и задачи механики сплошных сред / Пер. с англ. Свеш¬
никовой Е. И.; Под ред. Эглит М.Э. - М.: Мир, 1974. - 318с.

83.    Михайленко К. Параллельный стиль. // Компьютерра. - 2002. № 5 (430). -

С. 28 - 30.

84.    Михлин С. Г. Вариационные методы в математической физике. - М.: Наука,
1970. - 512 с.

85.    Морозов Е. М. Контактные задачи механики разрушения. - М.: Машино¬
строение, 1999. - 543 с.

86.    Мусхелишвили Н. И. Некоторые основные задачи математической теории
упругости. - М.: Мир, 1966. - 707 с.

87.    Немнюгин С. А., Стесик О. Л. Параллельное программирование для мно¬
гопроцессорных вычислительных систем. - СПб.: БХВ-Петербург, 2002. -
400 с.

88.    Ниман Т. Сортировка и поиск: Рецептурный справочник: Пер. с англ. - М.:
Мир, 1998. - 50 с.

89.    Новацкий В. Теория упругости. - М.: Мир, 1975. - 872 с.

90.    Ортега Дж. Введение в параллельные и векторные методы решения ли¬
нейных систем: пер. с англ. - М.: Мир, 1991. - 367 с.

91.    Пальянов П. Повышение эффективности проектных работ на основе ин¬
формационных технологий. // CAD master. - 2004. - № 5. - С. 58 - 60.

92.    Погорелов А. В. Изгибания поверхностей и устойчивость оболочек / Нац.
АН Украины, Физико-техн. ин-т низких температур .— 2-е изд., доп. — Киев:
Наукова Думка, 1998 .— 199 с.

93.    Погорелов В. AutoCAD: трехмерное моделирование и дизайн. - Спб.: БХВ,

2003. - 288 с.

94.    Потемкин А. Трехмерное твердотельное моделирование. - М.: Компью¬
терПресс, 2002. - 296 с.

95.    Потехин А. Л., Будников В. И. Интерактивная система визуализации в про¬
грамме трехмерного расчета данных. // Тр. всероссийской конф. Прикладная
геометрия, построение расчетных сеток и высокопроизводительные вычисле¬
ния. - М.: ВЦ РАН, 2004. - Т. 2 - С. 208 - 216.

96.    Препапа Ф., Шеймос М. Вычислительная геометрия. Введение: пер. с
англ.- М.: Мир, 1989. - 478 с.

97.    Пресняков Н. И. Экономическая эффективность и систематотехника проек¬
тирования виртуальных объектов строительства. // Промышленное и граждан¬
ское строительство. - 2003. - № 7. - С. 49 - 50.

98.    Райан Д. Инженерная графика в САПР: пер. с англ. - М.: Мир, 1989. -
391 с.

99.    Ращиков В. И., Рошаль А. С. Численные методы решения физических за¬
дач: учебное пособие. - СПб.: Лань, 2005. - 208 с.

100.    Рвачев В. Л. Методы алгебры логики в математической физике. - Киев:
Наукова думка, 1974. - 260 с.

101.    Роджерс Д., Адамс Дж. Математические основы машинной графики: пер.
с англ. - М.: Мир, 2001. - 604 с.

102.    Роджерсон Д. Основы COM: пер. с англ. 2-е изд., испр. и доп. - М.: Рус¬
ская Редакция, 2000. - 400 с.

103.    Розин Л. А. Задачи теории упругости и численные методы их решения. -
СПб.: СПбГТУ, 1998. - 532 с.

104.    Романов Ю. И., Сергеев С. В., Шапошников Н. Н. Гранично-элементные
аппроксимации, основанные на методе стохастической коллокации: матема¬
тическое обеспечение и решение прикладных задач. // тезисы докладов XVI
Междун. конф. Математическое моделирование в механике деформируемых
тел. Методы граничных и конечных элементов. Т. 1 - СПб.: СПбГАСУ, 1998.

- С. 28 - 29.

105.    Рофейл Э., Шохауд Я. COM и COM+. Полное руководство: пер. с англ. -
Киев: ВЕК+, 2000. - 560 с.

106.    Саргсян А. Е. Сопротивление материалов, теории упругости и пластично¬
сти: Основы теории с примерами расчетов: Учебник для студ. вузов, обуч. по
техн. специальностям. - 3-е изд., испр. - М.: Высшая школа, 2002. - 285 с.

107.    Таненбаум Э. Архитектура компьютера. 4-е изд. - СПб.: Питер, 2002. -
704 с.

108.    Таненбаум Э. Современные операционные системы. 2-е изд. - СПб.: Питер,
2002. - 1040 с.

109.    Тимошенко С. П., Гудьер Дж. Теория упругости / Пер. с англ. М.И. Рейт-
мана, под ред. Г.С. Шапиро. - 2-е изд. - М.: Наука: Физматлит, 1979. - 560 с.

110.    Трощиев В.Е., Шагалиев P.M. Проблема совмещения конечно-разностных и
конечно-элементных схем в задачах газовой динамики с теплопроводностью.
// Математическое моделирование. - М.: РАН, 2000. - Т. 12, № 1 - С. 4 - 11.

111.    Тюкачев Н. А., Свиридов Ю. Т. Delphi 5. Создание мультимедийных прило¬
жений. - М.: Нолидж, 2000. - 384 с.

112.    Уилкинсон Р. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра:
пер. с англ. - М.: Машиностроение, 1976. - 389 с.

113.    Фаддеев, Д. К., Фаддеева В. Н. Вычислительные методы линейной алгеб¬
ры. - 3-е изд., стер. - СПб.: Лань, 2002. - 733 с.

114.Хармон    Э. Разработка COM-приложений в среде Delphi: пер. с англ. - М.:
Вильямс, 2000. - 464 с.

115.Хаусдорф    Ф. Теория множеств: пер. с нем. - М.: УРСС, 2004. - 304 с.

116.Хьюз    К., Хьюз Т. Параллельное и распределенное программирование с ис¬
пользованием С++. - Киев.: Вильямс, 2004. - 667 с.

117.    Цвелодуб И. Ю. Обратные задачи деформирования неупругих тел. //
Межвуз. сб. науч. тр. Прикладные задачи механики сплошных сред. - Воро¬
неж: ВГУ, 1999. - С. 318 - 328.

118.    Чебаков М. И. Асимпотические и численно- аналитические методы в кон¬
тактных задачах теории упругости: Специальность 01.02.04- механика дефор¬
мируемого твердого тела: Автореферат дис. на соиск. учен. степ. д-ра физ.-
мат. наук / Ростов. гос. ун-т. Науч.-исслед. ин-т механики и приклад. матема¬
тики. - Ростов н/Д: Б.и., 2002. - 34 с.

119.    Чигарев А. В. Стохастическая и регулярная динамика неоднородных сред /
Под ред. Е.И.Шемякина. - Минск: Технопринт, 2000. - 425 с.

120.    Шемякин Е. И. Введение в теорию упругости: Учеб. пособие. - М.: Изд-во
МГУ, 1993. - 95 с.

121.    Шишов О. В. Контактная задача для осесимметричных заглубленных
штампов. // Сопротивление материалов и теория сооружений. - Киев: Буди-
вельник, 1971. - Вып. 13 - С. 60-66.

122.    Berkowski P., Gracia Villa L. Graphical data processor for shape optimization of
section under saint-venant torsion by using boundary element method. // тезисы
докладов XVI Междун. конф. Математическое моделирование в механике де¬
формируемых тел. Методы граничных и конечных элементов. Т. 1 - СПб.:
СПбГАСУ, 1998. - С. 16 - 17.

123.    Cisilino A. P., Alibadi M. H. A boundary element method for three-dimensional
elastoplastic problems. // Engineering Computations. - 1998. - № 8 - P. 1011 -
1030.

124.    Dell’Erba D. N., Aliabadi M. H., Rooke D. P. Dual boundary element method
for three-dimensional thermoelastic crack problems. // International Journal of Frac¬
ture. - 1998. - № 1 - P. 89 - 101.

125.    Dmochowski G., Minch M. Y. Application of boundary element methods to anal¬
ysis of RC plates. // тезисы докладов XVI Междун. конф. Математическое мо¬
делирование в механике деформируемых тел. Методы граничных и конечных
элементов. Т. 1 - СПб.: СПбГАСУ, 1998. - С. 20.

126.    Frangi A. Fracture propagation in 3D by the symmetric Galerkin boundary ele¬
ment method. // International Journal of Fracture. - 2002. - № 4 - P. 313 - 330.

127.    Leontiev A., Huacasi W., Herskovits J. An optimization technique for solution of
the signorini problem using the boundary element method. // Structural and Multi¬
disciplinary Optimization. - 2002. - № 1 - P. 72 - 77.

128.    Minch M. Y., Dmochowski G. Boundary element method analysis of RC panels.
// тезисы докладов XVI Междун. конф. Математическое моделирование в ме¬
ханике деформируемых тел. Методы граничных и конечных элементов. Т. 1 -
СПб.: СПбГАСУ, 1998. - С. 21 - 22.

129.    Podil’chuk Yu. N., Rubtsov Yu. K. Development of the boundary-element meth¬
od for three-dimensional problems of static and nonstationary elasticity. // Interna¬
tional Applied Mechanics - 2004. - № 2. - P. 160 - 168.

130.    Shi Jun Ping, Liu Xie Hui, Chen Yi Heng A complex variable boundary element
method for solving interface crack problems. // International Journal of Fracture. -

1999. - № 2 - P. 167 - 178.

Приложение 1. Библиотека типов Custom.tlb

Библиотека Custom.tlb является связующим звеном между основным при¬
ложением и утилитами в визуальной среде построения пространственных гра¬
нично-элементных сеток и решения контактных задач.

Ниже представлен листинг библиотеки типов на языке object pascal.

unit Custom_TLB;

{$TYPEDADDRESS OFF} // Модуль компилируется без строгой типизации
interface

uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL;
const

// Версия библиотеки типов
CustomMajorVersion = 1;

CustomMinorVersion = 0;

// ID библиотеки типов

LIBID_Custom: TGUID = '{0 73A856E-A5A2-4 08F-AB4C-4EE3 9FB01E56}';

// ID интерфейсов

IID_ICustomFile: TGUID = '{BFDC702B-9FD4-4F63-9353-0EF403FE2887}';
IID_IGeometryUtils: TGUID = '{AD993797-647A-436A-8ED2-3528CC4A4851}';
IID_IMouseEditUtils: TGUID = '{2B1079A7-9170-4612-90B4-D4ED977FA9C3}';
IID_IFiles: TGUID = '{99 7EB03 4-0 42A-4 439-A5 7B-B0D1E1D5 495 7}';

IID_ICustomUtil: TGUID = '{CEEA3AB2-7233-4C0A-B3FA-9 6CAE0CF2 6B0}';

IID_IUran: TGUID = '{8F7 8E6 8 7-95D3-4 0 0 6-AA2 5-A0E501A9 46 4 0}';

IID_IGeometryUtil: TGUID = '{A65EE7E6-6785-4297-B077-0A258BC6D155}';
IID_IProcessUtil: TGUID = '{41B2EFA8-264A-48CC-BF99-303ED2869D22}';
IID_IProcessUtils: TGUID = '{F72F1520-7EAF-491C-8BFD-9933EEB9BA31}';

// Константы для типа OLEMouseButton
type

OLEMouseButton = TOleEnum;
const

mbOLELeft = $00000000;
mbOLERight = $00000001;
mbOLEMiddle = $00000002;

// Константы для типа OLEShiftState
type

OLEShiftState = TOleEnum;
const

ssOLEShift =

$00000001;

ssOLEAlt = $00000002;

ssOLECtrl =

$00000004;

ssOLELeft =

$00000008;

ssOLERight =

$00000010;

ssOLEMiddle

= $00000020

ssOLEDouble

= $00000040

// Константы для типа OLEPenStyle
type

OLEPenStyle = TOleEnum;
const

psOLESolid = $00000000;
psOLEDash = $00000001;
psOLEDot = $00000002;
psOLEDashDot = $00000003;
psOLEDashDotDot = $00000004;
psOLEClear = $00000005;
psOLEInsideFrame = $00000006;

// Константы для типа OLEPenMode

type

OLEPenMode = TOleEnum;

const

pmOLEBlack = $00000000;
pmOLEWhite = $00000001;
pmOLENop = $00000002;
pmOLENot = $00000003;
pmOLECopy = $00000004;
pmOLENotCopy = $00000005;
pmOLEMergePenNot = $00000006;
pmOLEMaskPenNot = $00000007;
pmOLEMergeNotPen = $00000008;
pmOLEMaskNotPen = $00000009;
pmOLEMerge = $0000000A;
pmOLENotMerge = $0000000B;
pmOLEMask = $0000000C;

pmOLENotMask = $0000000D;
pmOLEXor = $0000000E;
pmOLENotXor = $0000000F;

// Константы для типа OLEBrushStyle
type

OLEBrushStyle = TOleEnum;
const

bsOLESolid = $00000000;
bsOLEClear = $00000001;
bsOLEHorizontal = $00000002;
bsOLEVertical = $00000003;
bsOLEFDiagonal = $00000004;
bsOLEBDiagonal = $00000005;
bsOLECross = $00000006;
bsDiagCross = $00000007;

type

/ / *********************************************************************/ /

// Предварительное определение интерфейсов для реализации их в библиотеке типов
/ / *********************************************************************/ /
ICustomFile = interface;

ICustomFileDisp = dispinterface;

IGeometryUtils = interface;

IGeometryUtilsDisp = dispinterface;

IMouseEditUtils = interface;

IMouseEditUtilsDisp = dispinterface;

IFiles = interface;

IFilesDisp = dispinterface;

ICustomUtil = interface;

ICustomUtilDisp = dispinterface;

IUran = interface;

IUranDisp = dispinterface;

IGeometryUtil = interface;

IGeometryUtilDisp = dispinterface;

IProcessUtil = interface;

IProcessUtilDisp = dispinterface;

IProcessUtils = interface;

IProcessUtilsDisp = dispinterface;

/ / *********************************************************************/ /

// Интерфейс для файловых утилит
// Interface: ICustomFile

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {BFDC702B-9FD4-4F63-9353-0EF403FE2887}

/ / *********************************************************************/ /
ICustomFile = interface(IDispatch)

[' {BFDC7 0 2B-9FD4-4F63-9353-0EF4 03FE2 8 8 7} ']

// Получить расширение поумолчанию

function Get_DefaultExt: PWideChar; safecall;

// Сохранить данные с ссылкой Value в файл с именем Name

procedure Save(Name: PWideChar; Value: LongWord); safecall;

// Загрузить данные из файла с именем Name

function Open(Name: PWideChar): LongWord; safecall;

// Получить данные фильтра для диалогового окна
function Get_Filter: PWideChar; safecall;
property DefaultExt: PWideChar read Get_DefaultExt;
property Filter: PWideChar read Get_Filter;
end;

/ / *********************************************************************/ /

// DispIntf: ICustomFileDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {BFDC702B-9FD4-4F63-9353-0EF403FE2887}

/ / *********************************************************************/ /
ICustomFileDisp = dispinterface

[' {BFDC7 0 2B-9FD4-4F63-9353-0EF4 03FE2 8 8 7 } ' ]

property DefaultExt: {??PWideChar} OleVariant readonly dispid 1;
procedure Save(Name: {??PWideChar} OleVariant; Value: LongWord); dispid 2;
function Open(Name: {??PWideChar} OleVariant): LongWord; dispid 3;
property Filter: {??PWideChar} OleVariant readonly dispid 4;
end;

/ / *********************************************************************/ /

// Интерфейс для списка утилит геометрического проектирования
// Interface: IGeometryUtils

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {AD993797-647A-436A-8ED2-3528CC4A4851}

/ / *********************************************************************/ /
IGeometryUtils = interface(IDispatch)

['{AD993 79 7-6 4 7A-436A-8ED2-352 8CC4A4 851}']

// Количество утилит

// Получить утилиту с индексом i

function Get_Item(i: Integer): IGeometryUtil; safecall;
property Count: Integer read Get_Count;

property Item[i: Integer]: IGeometryUtil read Get_Item;
end;

/ / *********************************************************************/ /
// DispIntf: IGeometryUtilsDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {AD993797-647A-436A-8ED2-3528CC4A4851}

/ / *********************************************************************/ /
IGeometryUtilsDisp = dispinterface

['{AD993 79 7-6 4 7A-436A-8ED2-352 8CC4A4 851}']
property Count: Integer readonly dispid 1;

property Item[i: Integer]: IGeometryUtil readonly dispid 2;
end;

/ / *********************************************************************/ /
// Интерфейс обработки событий надатия или перемещений мыши
// Interface: IMouseEditUtils

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {2B10 79A7-9170-4612-90B4-D4ED977FA9C3}

/ / *********************************************************************/ /
IMouseEditUtils = interface(IDispatch)

[' {2B1079A7-9170-4612-90B4-D4ED9 7 7FA9C3} ']

// Обработка нажатия кнопки мыши в окнах проекций

procedure MouseDownXY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; X: Single; Y: Single); safecall;
procedure MouseDownZY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; Y: Single); safecall;
procedure MouseDownZX(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; X: Single); safecall;

// Обработка нажатия кнопки мыши в окнах проекций

procedure MouseMoveXY(const sender: IUran; shift: Byte; X: Single;

Y: Single); safecall;
procedure MouseMoveZY(const sender: IUran; shift: Byte; Z: Single;

Y: Single); safecall;
procedure MouseMoveZX(const sender: IUran; shift: Byte; Z: Single;

X: Single); safecall;

// Обработка сброса нажатой кнопки мыши в окнах проекций

procedure MouseUpXY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; X: Single; Y: Single); safecall;

procedure MouseUpZY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; Y: Single); safecall;
procedure MouseUpZX(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; X: Single); safecall;

end;

/ ******************************************************************** */
/ DispIntf: IMouseEditUtilsDisp

/ Flags:    (4416) Dual OleAutomation Dispatchable

/ GUID:    {2B10 79A7-9170-4612-90B4-D4ED977FA9C3}

/ ******************************************************************** */
IMouseEditUtilsDisp = dispinterface

[' {2B1079A7-9170-4612-90B4-D4ED9 7 7FA9C3} ']

procedure MouseDownXY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; X: Single; Y: Single); dispid 1;
procedure MouseDownZY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; Y: Single); dispid 2;
procedure MouseDownZX(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; X: Single); dispid 3;
procedure MouseMoveXY(const sender: IUran; shift: Byte; X: Single;

Y: Single); dispid 5;
procedure MouseMoveZY(const sender: IUran; shift: Byte; Z: Single;

Y: Single); dispid 6;
procedure MouseMoveZX(const sender: IUran; shift: Byte; Z: Single;

X: Single); dispid 7;
procedure MouseUpXY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; X: Single; Y: Single); dispid 9;
procedure MouseUpZY(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; Y: Single); dispid 10;
procedure MouseUpZX(const sender: IUran; Button: OLEMouseButton;

shift: Byte; Z: Single; X: Single); dispid 11;

end;

/ / *********************************************************************/ /
// Интерфейс для списка файловых утилит
// Interface: IFiles

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {997EB034-042A-4439-A57B-B0D1E1D54957}

/ / *********************************************************************/ /
IFiles = interface(IDispatch)

[' {9 9 7EB03 4-0 42A-4 439-A5 7B-B0D1E1D5 495 7} ']

// Количество утилит
function Get_Count: Integer; safecall;

// Получить утилиту с индексом i

function Get_Item(i: Integer): ICustomFile; safecall;
property Count: Integer read Get_Count;
property Item[i: Integer]: ICustomFile read Get_Item;
end;

/ / *********************************************************************/ /
// DispIntf: IFilesDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {997EB034-042A-4439-A57B-B0D1E1D54957}

/ / *********************************************************************/ /
IFilesDisp = dispinterface

[' {9 9 7EB03 4-0 42A-4 439-A5 7B-B0D1E1D5 495 7} ']
property Count: Integer readonly dispid 1;
property Item[i: Integer]: ICustomFile readonly dispid 2;
end;

// **************************************************

// Интерфейс поддерживаемый геометрическими утилитами
// Interface: ICustomUtil

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {CEEA3AB2-7233-4C0A-B3FA-96CAE0CF2 6B0}

// **************************************************

ICustomUtil = interface(IDispatch)

['{CEEA3AB2-7233-4C0A-B3FA-96CAE0CF26B0}']

//Получить дескриптор приложения

function Get_Application: Integer; safecall;

//Задать дескриптор приложения

procedure Set_Application(Value: Integer); safecall;

//Получить Instance COM-сервера

function Get_Instance: Integer; safecall;

//Получить дескриптор на область памяти, где хранится геометрический объект
function Get_RefBody: LongWord; safecall;

//Задать дескриптор на область памяти, где хранится геометрический объект
procedure Set_RefBody(Value: LongWord); safecall;

//Вызов диалогового окна утилиты
procedure Activate; safecall;

//Спрятать диалоговое окно утилиты
procedure Deactivate; safecall;

//Передать цвет фона в утилиту

procedure SetBackgroundColor(color: LongWord); safecall;

property Application: Integer read Get_Application write Set_Application;
property Instance: Integer read Get_Instance;

property RefBody: LongWord read Get_RefBody write Set_RefBody;
end;

/ / *********************************************************************/ /

// DispIntf: ICustomUtilDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {CEEA3AB2-7233-4C0A-B3FA-96CAE0CF2 6B0}

/ / *********************************************************************/ /
ICustomUtilDisp = dispinterface

['{CEEA3AB2-7233-4C0A-B3FA-96CAE0CF26B0}']
property Application: Integer dispid 1;
property Instance: Integer readonly dispid 5;
property RefBody: LongWord dispid 13;
procedure Activate; dispid 2;
procedure Deactivate; dispid 3;

procedure SetBackgroundColor(color: LongWord); dispid 4;
end;

/ / *********************************************************************/ /
// Интерфейс поддерживаемый приложением Uran для обратной связи с утилитами
// Interface: IUran

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {8F78E687-95D3-4006-AA25-A0E501A94640}

/ / *********************************************************************/ /
IUran = interface(IDispatch)

[' {8F78E687-95D3-40 0 6-AA2 5-A0E5 01A9 46 4 0 } ']
procedure Repaint(const sender: ICustomUtil); safecall;
procedure GetBody(const sender: ICustomUtil); safecall;
procedure StartProgress(Value: Integer); safecall;
procedure StepBy(step: Integer); safecall;
procedure Activate(const sender: ICustomUtil); safecall;
procedure Deactivate(const sender: ICustomUtil); safecall;
function PenColor(color: LongWord): LongWord; safecall;
procedure Refresh(const sender: ICustomUtil); safecall;
function PenStyle(style: OLEPenStyle): OLEPenStyle; safecall;

//Задать и получить предыдущий стиль карандаша

function PenMode(mode: OLEPenMode): OLEPenMode; safecall;

//Задать и получить предыдущую ширину карандаша

function PenWidth(width: Shortint): Shortint; safecall;

//Задать и получить предыдущий цвет кисти

function BrushColor(color: LongWord): LongWord; safecall;

//Задать и получить предыдущий стиль кисти

function BrushStyle(style: OLEBrushStyle): OLEBrushStyle; safecall;

//нарисовать линию

procedure Line(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2: Double;

Z2: Double); safecall;

//Нарисовать точку с координатами X, Y, Z цвета Color
procedure Point(X: Double; Y: Double; Z: Double;

color: LongWord); safecall;

//Записать текущие построения в буфер
procedure Write; safecall;

//Считать предыдущие построения из буфера
procedure Read; safecall;

//Отмена изменений (считать предыдущие построения из буфера)
procedure Undo; safecall;

//Вернуть изменения

procedure Redo; safecall;

//Очистить канву программы

procedure Clear; safecall;

//Нарисовать параллелепипед

procedure Rectangle3D(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2:

Double; Z2: Double); safecall;

//Нарисовать прямоугольник

procedure Rectagle(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2: Dou¬
ble; Z2: Double); safecall;

//Задать и получить предыдущий код курсора

function Cursor(Value: Integer): Integer; safecall;

//Получить текущий цвет карандаша

function GetPenColor: LongWord; safecall;

//Задать текущий цвет карандаша

procedure SetPenColor(Value: LongWord); safecall;

//Получить текущий стиль карандаша

function GetPenStyle: OLEPenStyle; safecall;

//Задать текущий цвет карандаша

procedure SetPenStyle(Value: OLEPenStyle); safecall;

//Задать стиль карандаша

function GetPenMode: OLEPenMode; safecall;

//Получить текущий стиль карандаша

procedure SetPenMode(Value: OLEPenMode); safecall;

//Получить текущую ширину карандаша

//Задать ширину карандаша

procedure SetPenWidth(Value: Shortint); safecall;

//Получить текущий цвет кисти

function GetBrushColor: LongWord; safecall;

//Задать цвет кисти

procedure SetBrushColor(Value: LongWord); safecall;

//Получить текущий стиль кисти

function GetBrushStyle: OLEBrushStyle; safecall;

//Задать стиль кисти

procedure SetBrushStyle(Value: OLEBrushStyle); safecall;

//Получить текущий код курсора

function GetCursor: Integer; safecall;

//Задать код курсора

procedure SetCursor(Value: Integer); safecall;

//Задать и получить предыдущий цвет фона

function BackgroundColor(Value: LongWord): LongWord; safecall;

//Получить предыдущий цвет фона

function GetBackgroundColor: LongWord; safecall;

//Задать цвет фона

procedure SetBackgroundColor(Value: LongWord); safecall;

//Обновить изображение в окне

procedure Invalidate(const write: ICustomUtil); safecall;

//Получить список файлов

function Files: IFiles; safecall;

//Получить список утилит геометрического проектирования
function GeometryUtils: IGeometryUtils; safecall;

//Получить список утилит решений контактных задач

function ProcessUtils: IProcessUtils; safecall;
end;

/ / *********************************************************************/ /

// DispIntf: IUranDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {8F78E687-95D3-4006-AA25-A0E501A94640}

/ / *********************************************************************/ /
IUranDisp = dispinterface

[' {8F78E687-95D3-40 0 6-AA2 5-A0E5 01A9 46 4 0 } ']
procedure Repaint(const write: ICustomUtil); dispid 1;
procedure GetBody(const write: ICustomUtil); dispid 2;
procedure StartProgress(Value: Integer); dispid 3;
procedure StepBy(step: Integer); dispid 4;
procedure Activate(const write: ICustomUtil); dispid 5;
procedure Deactivate(const write: ICustomUtil); dispid 6;

function PenColor(color: LongWord): LongWord; dispid 7;
procedure Refresh(const write: ICustomUtil); dispid 8;
function PenStyle(style: OLEPenStyle): OLEPenStyle; dispid 9;
function PenMode(mode: OLEPenMode): OLEPenMode; dispid 10;

function PenWidth(width: {??Shortint} OleVariant): {??Shortint} OleVariant;
dispid 11;

function BrushColor(color: LongWord): LongWord; dispid 12;
function BrushStyle(style: OLEBrushStyle): OLEBrushStyle; dispid 13;
procedure Line(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2: Double;
Z2: Double); dispid 14;

procedure Point(X: Double; Y: Double; Z: Double; color: LongWord); dispid

15;

procedure Write; dispid 16;
procedure Read; dispid 17;
procedure Undo; dispid 18;
procedure Redo; dispid 19;
procedure Clear; dispid 20;

procedure Rectangle3D(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2:
Double; Z2: Double); dispid 21;

procedure Rectagle(X1: Double; Y1: Double; Z1: Double; X2: Double; Y2: Dou¬
ble; Z2: Double); dispid 22;

function Cursor(Value: Integer): Integer; dispid 23;

function GetPenColor: LongWord; dispid 24;

procedure SetPenColor(Value: LongWord); dispid 25;

function GetPenStyle: OLEPenStyle; dispid 26;

procedure SetPenStyle(Value: OLEPenStyle); dispid 27;

function GetPenMode: OLEPenMode; dispid 28;

procedure SetPenMode(Value: OLEPenMode); dispid 29;

function GetPenWidth: {??Shortint} OleVariant; dispid 30;

procedure SetPenWidth(Value: {??Shortint} OleVariant); dispid 31;

function GetBrushColor: LongWord; dispid 32;

procedure SetBrushColor(Value: LongWord); dispid 33;

function GetBrushStyle: OLEBrushStyle; dispid 34;

procedure SetBrushStyle(Value: OLEBrushStyle); dispid 35;

function GetCursor: Integer; dispid 36;

procedure SetCursor(Value: Integer); dispid 37;

function BackgroundColor(Value: LongWord): LongWord; dispid 38;
function GetBackgroundColor: LongWord; dispid 39;
procedure SetBackgroundColor(Value: LongWord); dispid 40;
procedure Invalidate(const write: ICustomUtil); dispid 41;
function Files: IFiles; dispid 42;

function ProcessUtils: IProcessUtils; dispid 44;
end;

/ / *********************************************************************/ /
// Интерфейс для утилит геометрического моделирования
// Interface: IGeometryUtil

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {A65EE7E6-6785-4297-B077-0A258BC6D155}

/ / *********************************************************************/ /
IGeometryUtil = interface(ICustomUtil)

[' {A6 5EE7E6-6 7 85-42 9 7-B0 7 7-0A2 5 8BC6D155} ']
end;

/ / *********************************************************************/ /
// DispIntf: IGeometryUtilDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {A65EE7E6-6785-4297-B077-0A258BC6D155}

/ / *********************************************************************/ /
IGeometryUtilDisp = dispinterface

[ ' {A6 5EE7E6-6 7 85-42 9 7-B0 7 7-0A2 5 8BC6D155} ']
property Application: Integer dispid 1;
property Instance: Integer readonly dispid 5;
property RefBody: LongWord dispid 13;
procedure Activate; dispid 2;
procedure Deactivate; dispid 3;

procedure SetBackgroundColor(color: LongWord); dispid 4;
end;

/ / *********************************************************************/ /
// Interface: IProcessUtil

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {41B2EFA8-264A-48CC-BF99-303ED2869D22}

/ / *********************************************************************/ /
IProcessUtil = interface(ICustomUtil)

[' {41B2EFA8-2 6 4A-48CC-BF99-303ED2 8 69D22} ']
end;

/ / *********************************************************************/ /
// DispIntf: IProcessUtilDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {41B2EFA8-264A-48CC-BF99-303ED2869D22}

/ / *********************************************************************/ /

IProcessUtilDisp = dispinterface

[' {41B2EFA8-2 6 4A-48CC-BF99-303ED2 8 69D22} ']
property Application: Integer dispid 1;
property Instance: Integer readonly dispid 5;
property RefBody: LongWord dispid 13;
procedure Activate; dispid 2;
procedure Deactivate; dispid 3;

procedure SetBackgroundColor(color: LongWord); dispid 4;
end;

/ / *********************************************************************/ /
// Interface: IProcessUtils

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {F72F1520-7EAF-491C-8BFD-9933EEB9BA31}

/ / *********************************************************************/ /
IProcessUtils = interface(IDispatch)

[ ' {F72F152 0-7EAF-491C-8BFD-9933EEB9BA31} ']

// Количество утилит

function Get_Count: Integer; safecall;

// Получить утилиту с индексом i

function Item(i: Integer): IProcessUtil; safecall;
pproperty Count: Integer read Get_Count;
end;

/ / *********************************************************************/ /
// DispIntf: IProcessUtilsDisp

// Flags:    (4416) Dual OleAutomation Dispatchable

// GUID:    {F72F1520-7EAF-491C-8BFD-9933EEB9BA31}

/ / *********************************************************************/ /
IProcessUtilsDisp = dispinterface

[ ' {F72F152 0-7EAF-491C-8BFD-9933EEB9BA31} ']
property Count: Integer readonly dispid 1;
function Item(i: Integer): IProcessUtil; dispid 2;
end;

implementation
uses ComObj;

end.

Приложение 2. Пример реализации файловой утилиты
визуальной среды SBEM-Contact

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

В данном приложении представлен листинг примера файловой утилиты на
языке object pascal.

unit cUnitPolFile;

interface

uses

ComObj, ActiveX, axCtrls, PolFile_TLB, Custom_TLB, SysUtils, StdVcl,

UnitBody, windows, dialogs, classes;

type

TPolFile_ = class(TAutoObject, IConnectionPointContainer,ICustomFile)
private

FConnectionPoints: TConnectionPoints;

FConnectionPoint: TConnectionPoint;

FSinkList: TList;

FEvents: IUranDisp;
protected

{ Protected declarations }

property ConnectionPoints: TConnectionPoints read FConnectionPoints
implements IConnectionPointContainer;

//Получить расширение поумолчанию

function Get_DefaultExt: PWideChar; safecall;

//Получить фильтр для диалогового окна
function Get_Filter: PWideChar; safecall;

//Загрузить данные из файла с именем Name
function Open(Name: PWideChar): LongWord; safecall;

//Сохранить данные в файл с именем Name

procedure Save(Name: PWideChar; value: LongWord); safecall;
procedure EventSinkChanged(const EventSink: IUnknown); override;

public

procedure Initialize;override;
end;

implementation

uses ComServ;

{ TPolFile_ }

procedure TPolFile_.EventSinkChanged(const EventSink: IUnknown);
begin

FEvents := EventSink as IUranDisp;
if FConnectionPoint <> nil then

FSinkList := FConnectionPoint.SinkList;

end;

function TPolFile_.Get_DefaultExt: PWideChar;
begin

Result:=SysAllocString('ext');
end;

function TPolFile_.Get_Filter: PWideChar;
begin

Result:=SysAllocString('*.ext|*.ext');
end;

pprocedure TPolFile_.Initialize;

begin

inherited;

FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then

FConnectionPoint := FConnectionPoints.CreateConnectionPoint(
AutoFactory.EventIID, ckSingle, EventConnect)
else FConnectionPoint := nil;
end;

function TPolFile_.Open(Name: PWideChar): LongWord;

var f: File;

q: Pointer;
n,k: Cardinal;
begin

FEvents.StartProgress(3);

AssignFile(f,Name);

Reset(f,1);
n:=FileSize(f);

Result:=Alloc(n);

FEvents.StepBy(1);
q:=GlobalLock(Result);

FEvents.StepBy(1);

BlockRead(f,qA,n,k);

FEvents.StepBy(1);

if k<>n then Raise Exception.Create('Ошибка во время загрузки данных');
CloseFile(f);
end/
{Open}

pprocedure TPolFile_.Save(Name: PWideChar; value: LongWord);

var f: File;

n,k: Cardinal;
q: Pointer;

begin

FEvents.StartProgress(3);

AssignFile(f,Name);

Rewrite(f,1);
q:=GlobalLock(value);

FEvents.StepBy(1);
k:=GlobalSize(value);

BlockWrite(f,qA,k,n);

if n<>k then Raise Exception.Create('Ошибка во время загрузки данных');
FEvents.StepBy(1);

CloseFile(f);

SysFreeString(Name);

FEvents.StepBy(1);
end;

initialization

TAutoObjectFactory.Create(ComServer, TPolFile_, CLASS_CoPolFile,
end.

ciMultiInstance, tmApartment);


Приложение 3. Функция вычисления нормали многоугольника
произвольной формы

Единичный вектор n = (nx, ny, nz) перпендикулярный плоскости много¬
угольника и направленный в сторону, где обход вершин против часовой стрел¬
ки (лицевая сторона), называется
нормалью.

Пусть зафиксированы три последовательные вершины многоугольника:
Л1( x1, y1, z1),
Л2( x2, y2, z2) и A3( x3, y3, z3). Если ZA1Л2 Л3 выпуклый, то нормаль
вычисляется по следующей формуле:

где

норма вектора (длинна), Л2Л3 X Л2Л1 -произведение векторов:

В случае не выпуклого угла ^Л1Л2Л3 вектор n необходимо инвертировать
(рис. 0.1).

рис. 0.1. Выбор вершин многоугольника для вычисления нормали:
а) АЛХЛ2Л3 - не выпуклый; б) АЛ1Л2Л3 - выпуклый.

Определить не выпуклый угол без нормали не представляется возможным
[100]: произведение векторов, выпущенных из выпуклого угла вдоль ребер и
вектор нормали сонаправлены.

Для проверки ориентации полученного вектора нормали используется пра¬
вило суммы углов п-угольника [76]: если сумма углов равна
п(п - 2) - и ори¬
ентирован верно. Не трудно увидеть, что в противном случае сумма углов по¬
лучается
п(п + 2): если углы и-угольника обозначить как а, то внешний угол
будет 2п -
а и сумма внешних углов будет


и    пи

^ (2п - а) = ^ 2п - = 2п • и - п(п - 2) = п(п + 2).

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

(a, b)

где а и b - векторы, выпущенные из искомого угла вдоль ребер;
норма вектора (длинна); (•,•) - скалярное произведение векторов.

//**********************************************************************
// Перечень функций, применяемых в данной процедуре:

// Multiply - векторное умножение
// sign - функция определения знака числа
// Angle - вычисление угла между векторами а и b
//**********************************************************************
function Normal(_points,_polygon: Pointer): TVector; stdcall;

var r: Real;

i,j,k: Integer;
Polygon: TPolygon;
Points: T3DPoints;

a,b: TVector;

function SumAngles(q: Pointer; n: TVector): Extended;

var i,j,k: Integer;

Polygon: TPolygon;
zn: Boolean;
m,a,b: TVector;
r: Real;

begin

Result:=0;

Pointer(Polygon):=q;

For i:=0 to Length(Polygon)-1 do
Begin

j:=(i+1) mod Length(Polygon);
k:=(i+2) mod Length(Polygon);

a.X:=Points[Polygon[j]].X-Points[Polygon[i]].X;
a.Y:=Points[Polygon[j]].Y-Points[Polygon[i]].Y;

a.Z:=Points[Polygon[j]].Z-Points[Polygon[i]].Z;
r:=sqrt(a.X*a.X+a.Y*a.Y+a.Z*a.Z);

if Abs(r)>=E then
begin

a.X:=a.X/r;

a.Y:=a.Y/r;

a.Z:=a.Z/r;
end;

b.X:=Points[Polygon[k]].X-Points[Polygon[i]].X;
b.Y:=Points[Polygon[k]].Y-Points[Polygon[i]].Y;
b.Z:=Points[Polygon[k]].Z-Points[Polygon[i]].Z;
r:=sqrt(b.X*b.X+b.Y*b.Y+b.Z*b.Z);

if Abs(r)>=E then
begin

b.X:=b.X/r;
b.Y:=b.Y/r;
b.Z:=b.Z/r;

end;

m:=Multiply(a,b);

zn:=(Abs(m.X)>=E) or (Abs(m.Y)>=E) or (Abs(m.Z)>=E);

if zn then

begin

zn:=((sign(n.X)+sign(m.X))<>0) or ((sign(n.Y)+sign(m.Y))<>0)
((sign(n.Z)+sign(m.Z))<>0);

a.X:=Points[Polygon[i]].X-Points[Polygon[j]].X;

or


a.Y:=Points[Polygon[i]].Y-Points[Polygon[j]].Y;

a.Z:=Points[Polygon[i]].Z-Points[Polygon[j]].Z;

b.X:=Points[Polygon[k]].X-Points[Polygon[j]].X;

b.Y:=Points[Polygon[k]].Y-Points[Polygon[j]].Y;

b.Z:=Points[Polygon[k]].Z-Points[Polygon[j]].Z;
if zn then Result:=Result+Angle(a,b)

else Result:=Result+2*pi-Angle(a,b);

End else
begin

b

X:

a

-

X

b.

=

X;

b

Y:

a

-

Y

b.

=

Y;

b

Z:

a

-

Z

b.

=

Z;

a

X:

=-a.X;

a

Y:

=-a.Y;

a.

Z:

=-a.Z;

if ((sign(a.X)+sign(b.X))=0) and ((sign(a.Y)+sign(b.Y))=0
((sign(a.Z)+sign(b.Z))=0) then Result:=Result+pi;
end;

) and


End;

Pointer(Polygon):=nil;
end;{SumAngles}

begin

Try

Pointer(Polygon):=_polygon;

Pointer(Points):=_points;
if Length(Polygon)>2 then
Begin
i:=0;

Repeat

j:=(i+1) mod Length(Polygon);
k:=(i+2) mod Length(Polygon);

a.X:=Points[Polygon[j]].X-Points[Polygon[i]].X;
a.Y:=Points[Polygon[j]].Y-Points[Polygon[i]].Y;

a.Z:=Points[Polygon[j]].Z-Points[Polygon[i]].Z;

b.X:=Points[Polygon[k]].X-Points[Polygon[i]].X;

b.Y:=Points[Polygon[k]].Y-Points[Polygon[i]].Y;

b.Z:=Points[Polygon[k]].Z-Points[Polygon[i]].Z;

Result:=Multiply(a,b);

r:=Sqrt(Result.X*Result.X+Result.Y*Result.Y+Result.Z*Result.Z);

Inc(i);

Until (i=Length(Polygon)) or (Abs(r)>=E);

if Abs(r)>=E then

Begin

Result.X:=Result.X/r;

Result.Y:=Result.Y/r;

Result.Z:=Result.Z/r;

//определяется направление нормали
r:=SumAngles(_polygon,Result) ;
if (Abs(r-pi*(Length(Polygon)-2))>=E) and
(Abs(r-pi*(Length(Polygon)+2))>=E) then
Begin

Pointer(Polygon):=nil;

Pointer(Points):=nil;

Raise Exception.Create('Фатальная ошибка в процедуре CountNormal.'

+ ' Обратитесь к разработчику.');

End;

if (Abs(r-pi*(Length(Polygon)+2))<E) then
Begin

Result.X:=-Result.X;

Result.Y:=-Result.Y;

Result.Z:=-Result.Z;

End;

End;

End else FillChar(Result,SizeOfTVector,0);

Pointer(Polygon):=nil;

Pointer(Points):=nil;

FreeMem(LastError);

LastError:=nil;

Except

On e: Exception do
Begin

GetMem(LastError,Length(e.Message)+1);

CopyMemory(LastError,PChar(e.Message+#0),Length(e.Message)+1);

End;

End;
end;
{Normal}

Приложение 4. Реализация хеш-функций для узлов и гра¬
ничных элементов

В данном приложении приведен листинг модуля, написанного на языке ob¬
ject pascal, в котором реализованы хеш-таблицы для узлов и граней по алгорит¬
мам, предложенным в п. 2.4.

unit UnitCash;

interface

uses UnitBody, SysUtils;

type

TElements=Array of Pointer;

//хеш-таблица для многогранников размерность 10x10x10
TpolygonCash=class
private

fmin: Tvector;
fdim: Tvector;

Table: Array[0..999] of Telements;

//функции генерации ключей

function Key(p: Tvector): Cardinal;
function KeyXYZ(x, y, z: Cardinal): Cardinal;
function KeyX(x: Real): Cardinal;
function KeyY(y: Real): Cardinal;
function KeyZ(z: Real): Cardinal;
public

//вставка полигона p, охваченного параллелепипедом с координатами Min и Max
procedure Insert(Min,Max: Tvector; p: Pointer);

//Очистить таблицу
procedure Clear;

//Поиск полигонов по точкам

function Find(Point: Tvector): Telements;overload;

//Поиск полигона, точки которого попадают в параллелепипед Rect
function Find(Rect: T3Drect): Telements;overload;

//Инициализация хеш-таблицы

Constructor Create(min,dim: Tvector);

//Удаление хеш- та блицы

Destructor Destroy; override;
end;

//хеш-таблица для узлов размерность 10x10x10
TpointCash=class
private

fmin: Tvector;
fdim: Tvector;

Table: Array[0..999] of TintArr;

//функция генерации ключей

function Key(p: Tvector): Cardinal;
public

//Удалить из хеш-таблицы узел p c индексом i
procedure Delete(p: Tvector; i: Cardinal);

//Вставить в хеш-таблицу узел p у которого индекс i
procedure Insert(p: Tvector; i: Cardinal);

//Найти узлы, с ключами для координат p
function Find(p: Tvector): TintArr;

//Инициализация хеш-таблицы

Constructor Create(min,dim: Tvector);

//Удаление хеш-таблицы

Destructor Destroy; override;
end;

implementation

{ TpolygonCash }

constructor TpolygonCash.Create(min, dim: Tvector);

var i: Integer;

begin

inherited Create;

For i:=0 to 999 do Table[i]:=nil;
fmin:=min;
fdim:=dim;
end;

destructor TpolygonCash.Destroy;

var i: Integer;

begin

For i:=0 to 999 do Table[i]:=nil;
inherited;
end;

function TpolygonCash.Find(Point: Tvector): Telements;
begin

if (fmin.X<=Point.X) and (Point.X<=(fmin.X+fdim.X)) and
(fmin.Y<=Point.Y) and (Point.Y<=(fmin.Y+fdim.Y)) and
(Point.Z<=(fmin.Z+fdim.Z)) then
begin

if Point.Z<fmin.Z then Point.Z:=fmin.Z;
result:=Table[Key(Point)];
end else result:=nil;
end;

procedure TpolygonCash.Insert(Min,Max: Tvector; p: Pointer);
var _forX,_toX,_forY,_toY,_forZ,_toZ,x,y,z,k,j: integer;

begin

_forX:=KeyX(Min.X);

_toX :=KeyX(Max.X);

_forY:=KeyY(Min.Y);

_toY :=KeyY(Max.Y);

_forZ:=0;

_toZ :=KeyZ(Max.Z);
for x:=_forX to _toX do

for y:=_forY to _toY do

for z:=_forZ to _toZ do
begin

k:=KeyXYZ(x,y,z);

j:=°;

while (j<Length(Table[k])) and (Table[k][j]<>p) do Inc(j);

if j=Length(Table[k]) then

begin

SetLength(Table[k],Length(Table[k])+1);

Table[k][Length(Table[k])-1]:=p;
end;
end;

end;

function TpolygonCash.KeyXYZ(x,y,z: Cardinal): Cardinal;
begin

Result:=(100*x+10*y+z) mod 1000;
end;

function TpolygonCash.KeyX(x: Real): Cardinal;
begin

Result:=Abs(Trunc((x-fmin.X)/fdim.X*10));
end;

function TpolygonCash.KeyY(y: Real): Cardinal;
begin

Result:=Abs(Trunc((y-fmin.Y)/fdim.Y*10));
end;

function TpolygonCash.KeyZ(z: Real): Cardinal;
begin

Result:=Abs(Trunc((z-fmin.Z)/fdim.Z*10));
end;

function TpolygonCash.Key(p: Tvector): Cardinal;
begin

Result:=Abs((10 0*Trunc((p.X-fmin.X)/fdim.X*10)+

10*Trunc((p.Y-fmin.Y)/fdim.Y*10)+

Trunc((p.Z-fmin.Z)/fdim.Z*10))) mod 1000;

end;

procedure TpolygonCash.Clear;

var i: integer;

begin

For i:=0 to 999 do Table[i]:=nil;
end;

function TpolygonCash.Find(Rect: T3Drect): Telements;
var _forX,_forY,_toX,_toY,x,y,z,k,I,j: integer;
begin

if (Rect.Left<=(fmin.X+fdim.X)) and (Rect.Bottom<=(fmin.Y+fdim.Y)) and
(Rect.Far<=(fmin.Z+fdim.Z)) and (Rect.Right>=fmin.X) and
(Rect.Right>=fmin.X) and (Rect.Near>=fmin.Z) then
begin

if Rect.Left<fmin.X then Rect.Left:=fmin.X;
if Rect.Bottom<fmin.Y then Rect.Bottom:=fmin.Y;
if Rect.Far<fmin.Z then Rect.Far:=fmin.Z;

if Rect.Right>(fmin.X+fdim.X) then Rect.Right:=fmin.X+fdim.X;
if Rect.Top>(fmin.Y+fdim.Y) then Rect.Bottom:=fmin.Y+fdim.Y;
if Rect.Near>(fmin.Z+fdim.Z) then Rect.Near:=fmin.Z+fdim.Z;
_forX:=KeyX(Rect.Left);

_toX :=KeyX(Rect.Right);

_forY:=KeyY(Rect.Bottom);

_toY :=KeyY(Rect.Top);
z:=KeyZ(Rect.Far);
for x:=_forX to _toX do

for y:=_forY to _toY do
begin

k:=KeyXYZ(x,y,z);

for i:=0 to Length(Table[k])-1 do
begin

j:=°;

while (j<Length(result)) and (Table[k][i]<>result[j]) do Inc(j);

if j=Length(result) then

begin

SetLength(result,Length(result)+1);
result[Length(result)-1]:=Table[k][i];
end;

end;

end;

end else result:=nil;
end;

{TpointCash}

constructor TpointCash.Create(min, dim: Tvector);

var i: Integer;

begin

inherited Create;

FillChar(Table,4000,0);
fmin:=min;
fdim:=dim;
end;

procedure TpointCash.Delete(p: Tvector; i: Cardinal);
var k,j,len: Integer;

begin

k:=Key(p);
j:=0;

len:=Length(Table[k]);

while (j<len) and (Table[k][j]<>i) do Inc(j);
for j:=j+1 to len-1 do Table[k][j-1]:=Table[k][j];
SetLength(Table[k],len-1) ;
end;

destructor TpointCash.Destroy;

var i: Integer;

begin

For i:=0 to 999 do Table[i]:=nil;
inherited;
end;

function TpointCash.Find(p: Tvector): TintArr;

begin

result:=Table[Key(p)];
end;

procedure TpointCash.Insert(p: Tvector; i: Cardinal);
var k,j,len: Integer;

begin

k:=Key(p);
j:=0;

len:=Length(Table[k]);

while (j<len) and (Table[k][j]<>i) do Inc(j);

if j=len then

begin

SetLength(Table[k],len+1);

Table[k][len]:=I;
end;
end;

function TpointCash.Key(p: Tvector): Cardinal;
begin

Result:=(100*Trunc((p.X-fmin.X)/fdim.X*10)+

10*Trunc((p.Y-fmin.Y)/fdim.Y*10)+

Trunc((p.Z-fmin.Z)/fdim.Z*10)) mod 1000;

end;

end.

Приложение 5. Программа решения системы алгебраических
уравнений для кластеров

#include "mpi.h"

#include <iostream.h>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#include <exception>

int Min(int a, int b)

{

if (a<=b) return a;
return b;

};

/* arr - массив строк; buf - массив обрабатываемой строки; shift - смещение (ин¬
декс первой строки в arr); index - индекс обрабатываемой строки; size - размер¬
ность матрицы СЛАУ; count - число строк в arr */

void Gaus(double** arr, double* buf, int shift, int index, int size, int count)

{

for (int j=0; j<Min(index-shift,count); j++)

{

int shift_=shift+j;
if (buf[shift_]!=0)

{

for (int k=size; k>shift_; k—)

{

buf[k]=buf[k]-buf[shift_]*arr[j][k-shift_-1];

} ;

} ;

};

if ((index<count+shift) && (buf[index]!=1))

{

for (int k=size; k>=index; k-- )

{

buf[k]=buf[k]/buf[index];

} ;

} ;

};

/* arr - массив строк; numtasks - число задействованных процессов; rank - номер
текущего процесса index - индекс первой строки в arr; size - размерность СЛАУ;
count - число строк в arr */

double* result(double** arr, int numtasks, int rank, int index, int size, int
count)

{

double* buf=new double[size];

double x;

int dim=0;

int root=numtasks;

int i;

for (i=size-1; i>=index+count; i—)

{

if (dim==0)

{

MPI_Bcast(&dim,1,MPI_INT,—root,MPI_COMM_WORLD);
cout << "recv count from " << root << endl;

} ;

MPI_Bcast(&x,1,MPI_DOUBLE,root,MPI_COMM_WORLD);

cout << "recv x[" << i << "] from " << root << endl;

for (int j=0; j<count; j++) arr[j][size-index-j-1]-=x*arr[j][i-

index-j-1];

buf[i]=x;
dim-- ;

} ;

dim=count;

MPI_Bcast(&dim,1,MPI_INT,—root,MPI_COMM_WORLD);
cout << "send count from " << root << endl;

for (i=index+count-1; i>=index; i—)

{

buf[i]=arr[dim-1][size-i-1];

MPI_Bcast(&buf[i],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
cout << "send x[" << i << "] from " << rank << endl;

for (int j=0; j<dim-1; j++) arr[j][size-index-j-1]-=buf[i]*arr[j][i-

index-j-1];

dim-- ;

} ;

for (i=index-1; i>=0; i—)

{

if (dim==0)

{

MPI_Bcast(&dim,1,MPI_INT,—root,MPI_COMM_WORLD);
cout << "recv count from " << root << endl;

} ;

MPI_Bcast(&buf[i],1,MPI_DOUBLE,root,MPI_COMM_WORLD);
cout << "recv x[" << i << "] from " << root << endl;
dim-- ;

} ;

return buf;

};

/* numtasks - число процессов; FileName - имя файла */
void Common(int numtasks, char* FileName)

{

FILE *f;

MPI_Request request=MPI_REQUEST_NULL;

MPI_Status status;

int size;

f=fopen(FileName, "rb");

if (f==NULL) {

cout << "file \"" << FileName << "\" not open";
throw exception ();

} ;

fseek(f,0,SEEK_END);
size=ftell(f);

size=(int) (sqrt(1+size/2)-1)/2;
rewind(f);

cout << "System size: " << size << endl;

MPI_Bcast(&size,1,MPI_INT,0,MPI_COMM_WORLD);

int count=size/numtasks;
if (size%numtasks!=0) count++;

double** arr=new double*[count];
double* buf;
double* buf_=NULL;

for (int i=0; i<size; i++)

{

cout << "read row " << i << endl;
buf=new double[size+1];
fread(buf,8,size+1,f);

Gaus(arr,buf,0,i,size,count);
if (i<count)

{

arr[i]=new double[size-i];

for (int k=i+1; k<size+1; k++) arr[i][k-i-1]=buf[k];
delete[] buf;

cout << "save row " << i << endl;

} else
{

MPI_Wait(&request,&status);
if (buf_!=NULL) delete[] buf_;
buf_=buf;

MPI_Issend(buf_,size+1,MPI_DOUBLE,1,i,MPI_COMM_WORLD,&request);
cout << "send row " << i << endl;

} ;

};

fclose(f);

MPI_Wait(&request,&status);

cout << "Gaus evaluation complete rank 0" << endl;

//нахождение решения
buf=result(arr,numtasks,0,0,size,count);

cout << "Solve complete rank 0" << endl;

f=fopen(FileName, "wb");

cout << "Saved " << fwrite(buf,8,size,f) << " elements" << endl;
fclose(f);

for (i=0; i<size; i++) cout << buf[i] <<" ";

cout << endl;

delete[] buf;

for (i=0; i<count; i++) delete[] arr[i];
delete[] arr;

};

/* numtasks - число процессов; rank - номер текущего процесса */
void Process(int numtasks, int rank)

{

int size;

MPI_Request request_in=MPI_REQUEST_NULL;

MPI_Request request_out=MPI_REQUEST_NULL;

MPI_Status status;

MPI_Bcast(&size,1,MPI_INT,0,MPI_COMM_WORLD);
if (size>rank)

{

int count=size/numtasks;

int mod=size%numtasks;

int index=count*rank+Min(rank,mod);

if (mod>rank) count++;

double** arr=new double*[count];
double* buf;

double* buf_in=new double[size+1];
double* buf_out=NULL;

MPI_Irecv(buf_in,size+1,MPI_DOUBLE,rank-
1,index,MPI_COMM_WORLD,&request_in);

for (int i=index; i<size; i++)

{

MPI_Wait(&request_in, &status) ;

cout << "recv row " << i << endl;

buf=buf_in;

buf_in=new double[size+1];

if (i+1<size) MPI_Irecv(buf_in,size+1,MPI_DOUBLE,rank-
1,i+1,MPI_COMM_WORLD,&request_in);

Gaus(arr,buf,index,i,size,count);
if (i-index<count)

{

arr[i-index]=new double[size-i];

for (int k=i+1; k<size+1; k++) arr[i-index][k-i-

1]=buf[k];

delete[] buf;

cout << "save row " << i << endl;

} else
{

MPI_Wait(&request_out,&status);

if (buf_out!=NULL) delete[] buf_out;

buf_out=buf;

MPI_Issend(buf_out,size+1,MPI_DOUBLE,rank+1,i,MPI_COMM_WORLD,&request_out)

;

cout << "send row " << i << endl;

} ;

};

cout << "Gaus evaluation complete rank " << rank << endl;

MPI_Wait(&request_out,&status);

MPI_Wait(&request_in, &status) ;

//нахождение решения
delete[] result(arr,numtasks,rank,index,size,count);

cout << "Solve complete rank " << rank << endl;

if (buf_out!=NULL) delete[] buf_out;

for (i=0; i<count; i++) delete[] arr[i];

delete[] arr;

};

};

int main(int argc, char* argv[])

{

int numtasks, rank;

MPI_Init(&argc,&argv) ;

MPI_Comm_size(MPI_COMM_WORLD, &numtasks) ;

MPI_Comm_rank(MPI_COMM_WORLD, &rank) ;

if (rank==0)

{

cout << "Number processes: " << numtasks <<endl;
if (argc<2)

{

cout << "You must enter file name" << endl;
throw exception();

} else Common(numtasks,argv[1]);

} else Process(numtasks,rank);

cout << "finalize rank " << rank << endl;

MPI_Finalize();

return 0;

};

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

Механические свойства полупространства: коэффициент Пуассона v = 0,4;
модуль упругости Е = 100000.

Внешняя статическая нагрузка: сила F = (0,0,1000), момент: M = (0,0,1000)

название

к-во
г. э.

к-во

СЛАУ

смещение

поворот

стр.

рис.

А х

А у

А

z

¥х

¥у

¥z

Осесимметричная
свая с заострени¬
ем

1100

3306

0

0

0,00323

0

0

-0,00377

160

Осесимметричная
свая с поперечной
балкой

1364

4098

0

0

0,00215

0

0

-0,00184

161


Осесимметричная свая с поперечной балкой