Files
2026-09-01 09:57:03 +03:00

8.4 KiB
Raw Permalink Blame History

MKSE Elasticity

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

Проект не требует сторонних библиотек и собирается компилятором с поддержкой C++20.

Возможности

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

Численная схема

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

| K_bottom      0       M_bottom | | u_bottom |   | f_bottom |
|     0       K_top    -M_top    | | u_top    | = | f_top    |
| M_bottom^T -M_top^T      0     | | lambda   |   |    0     |

где lambda — коэффициенты множителей Лагранжа на контактной границе. Система решается LU-разложением с перестановками. В осесимметричной постановке при интегрировании учитывается вес 2*pi*r.

Поддерживаются следующие контактные разбиения:

Значение contact Метод Описание
s / slave Slave nodes Множители размещаются в активных узлах пассивного тела.
d / uniform_lambda Uniform lambda Независимая равномерная сетка множителей задаёт также интервалы интегрирования.
u / uniform_union Uniform union Равномерная сетка множителей интегрируется по объединённому разбиению обеих контактных трасс.

Требования

  • CMake 3.20 или новее;
  • компилятор C++20: MSVC 19.3+, GCC 10+ или Clang 12+.

Для Windows также включено готовое решение Visual Studio 2022 с toolset v143.

Сборка

CMake

cmake -S . -B build
cmake --build build --config Release

Для многоконфигурационных генераторов исполняемый файл появится в build/Release/, для одноконфигурационных — непосредственно в build/.

Visual Studio

Откройте mkse-elasticity.sln, выберите конфигурацию Release и платформу x64, затем выполните Build Solution. Результат будет сохранён в build/msbuild/bin/x64/Release/mkse-elasticity.exe.

Быстрый запуск

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

.\build\msbuild\bin\x64\Release\mkse-elasticity.exe .\input.txt

Путь к конфигурации необязателен. Без аргумента программа читает input.txt. Если файл не найден, запускаются все встроенные задачи с параметрами по умолчанию.

Конфигурация расчёта

Файл input.txt имеет простой INI-подобный формат. Глобальные параметры задаются до секций, каждая секция описывает отдельный запуск:

# a/axisymmetric или c/cartesian
coordinate = a

# s/slave, d/uniform_lambda или u/uniform_union
contact = u

# используется только при contact=slave
passive = top

[axisymmetric_inverse_r]
bottom_x = 5
bottom_y = 5
top_x = 9
top_y = 9
lambda = 5

Параметры сетки означают количество узлов суперэлемента по каждой координате. Для равномерных контактных методов lambda задаёт количество узлов сетки множителей Лагранжа и должен быть не меньше двух.

В исходный код включены четыре проверочные задачи с точным решением:

Имя секции Постановка Точное поле перемещений
axisymmetric_inverse_r Осесимметричная u_r = 5/r, u_z = 0
axisymmetric_linear Осесимметричная u_r = 2r + 5/r, u_z = 34z
cartesian_exp Декартова u_x = exp(x) cos(y - 0.5), u_y = -exp(x) sin(y - 0.5)
cartesian_linear Декартова u_x = -21x, u_y = 13y

Материал, геометрия, граничные условия и параметры сеток по умолчанию находятся в include/TestCases.h. Строка tests = all запускает все встроенные задачи; также поддерживается краткая запись вида test cartesian_linear bottom_x=8 bottom_y=8.

Результаты

Каждый запуск создаёт отдельный каталог res/<имя-задачи>/<параметры-запуска>/. Каталог res/ исключён из Git, поэтому повторные расчёты не загрязняют историю репозитория.

Файл Содержимое столбцов
bottom_displacement.txt, top_displacement.txt x y u_x u_y или r z u_r u_z
*_displacement_x.txt, *_displacement_y.txt x y u для выбранной компоненты
*_displacement_r.txt, *_displacement_z.txt r z u для выбранной компоненты
contact_normal_stress.txt координата, напряжение снизу, напряжение сверху
contact_normal_displacement.txt координата, перемещение снизу, перемещение сверху, разность
lagrange_multipliers.txt координата, множитель Лагранжа
error.txt относительная ошибка для каждого тела
parameters.txt полная конфигурация запуска

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

Структура репозитория

.
├── include/                 # модели данных, интерфейсы и контактные схемы
├── src/                     # МКЭ, МКСЭ, линейная алгебра и CLI
├── input.txt                # воспроизводимый пример расчёта
├── CMakeLists.txt           # переносимая сборка
├── mkse-elasticity.sln      # решение Visual Studio 2022
└── mkse-elasticity.vcxproj  # проект MSBuild

Сгенерированные файлы, кэши IDE и каталоги сборки намеренно не хранятся в репозитории.