Содержание ↓
Глава 5

Решение, реакции и равновесие

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

Полная и редуцированная системы

Исходное уравнение:

K u = F + R

Здесь R — реакции связей. Разделим строки и столбцы на свободные f и закреплённые c:

Свободная степень свободы в МКЭ — это узловое перемещение или поворот, значение которого не задано граничными условиями и должно быть найдено из расчёта. Термин относится к отдельной компоненте перемещения, а не к узлу целиком. Он не означает, что движение происходит без сопротивления: соединённые с узлом элементы могут деформироваться и создавать упругие усилия. Например, на незакреплённом конце консольной рамы свободны перемещения по X, Y и поворот, но им сопротивляется жёсткость консоли.

[ Kff  Kfc ] [ uf ] = [ Ff ] + [  0 ]
[ Kcf  Kcc ] [ uc ]   [ Fc ]   [ Rc ]

Для реализованных однородных опор uc = 0. Первая строка превращается в систему для неизвестных свободных перемещений:

Kff uf = Ff

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

Проверка перед решением

validateReducedSystem проверяет конечность коэффициентов и положительную определённость симметризованной Kff разложением Холецкого. Неуспех обычно означает одно из двух:

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

Для единственного решения рассматриваемой линейной статической задачи опоры и жёсткость элементов должны исключать движения как твёрдого тела и внутренние механизмы — возможные движения без упругого сопротивления. Свободные СС при этом допустимы: соответствующие неизвестные перемещения определяются из уравнений равновесия Kffuf = Ff, а реакции вычисляются после решения. Полностью закреплённая модель — допустимый частный случай: при нулевых заданных перемещениях свободных СС нет, все перемещения нулевые, а реакции уравновешивают приложенные нагрузки.

Расширение до полного вектора

После решения редуцированной системы создаётся нулевой вектор длиной n, и найденные компоненты записываются по адресам freeDOFs:

u = zeros(numberOfDOFs, 1);
u(freeDOFs) = K(freeDOFs, freeDOFs) \ F(freeDOFs);

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

Реакции и глобальное равновесие

Реакции вычисляются после расширения решения из полного уравнения:

R = K u − F

В идеальном решении компоненты R на свободных СС равны нулю. На закреплённых СС они показывают силы и моменты, которыми опоры действуют на модель.

Одного малого невязочного вектора Ku − F − R недостаточно: он проверяет алгебру, но не знаки и расположение внешних сил. Поэтому calculateStaticEquilibrium независимо суммирует:

ΣFx = 0,   ΣFy = 0,   ΣMz = 0

Моменты включают плечи узловых сил xFy − yFx и собственные узловые моменты Mz рам.

Две аналитические проверки

Растянутый стержень

Для стержня длиной L, площади A и модуля Юнга E под осевой силой F:

u = FL/(EA),   Rx = −F

Эта задача проверяет осевую жёсткость, карту СС, редукцию, знак реакции и глобальный баланс.

Консоль Эйлера–Бернулли

Для консоли длиной L под поперечной силой P на свободном конце:

v = PL3/(3EI),   θ = PL2/(2EI)

Ry = −P,   Mz = −PL

Один рамный элемент воспроизводит это решение точно для узловой концевой силы. Проверка находится в tests/run_verification_tests.m.

Постпроцессинг в автономном HTML/SVG-просмотрщике

После расчёта модель и результаты можно сохранить в компактный JSON-файл и открыть в автономном постпроцессоре MKE-F. Просмотрщик работает непосредственно через file://: локальный сервер, npm и подключение к интернету не требуются.

1. Выполните расчёт и экспортируйте результат

Запустите GNU Octave из корневого каталога проекта и выполните:

addpath(pwd);
setup;

problem = StructFEProblem(fullfile('examples', 'cases', 'ANSYSBeamStatic01.txt'));
model = problem.GetAnalysisModel();
result = problem.RunStatic();

exportOptions = struct( ...
    'title', 'Статическая рама', ...
    'lengthUnit', 'm', ...
    'forceUnit', 'N', ...
    'momentUnit', 'N*m', ...
    'stressUnit', 'Pa', ...
    'prettyPrint', true);

exportPostprocessorData(model, result, fullfile('output', 'static-frame.json'), exportOptions);
Тот же расчёт через GUI

Из корня репозитория выполните docker compose up --build (для старой отдельной команды — docker-compose up --build) и откройте препроцессор. Выберите Open TXT, загрузите examples/cases/CasePreprocessorStatic.txt и нажмите Run analysis. После расчёта GNU Octave результат откроется автоматически; кнопка Download JSON сохранит его вне временного контейнерного сеанса.

exportPostprocessorData проверяет размеры и конечность чисел, исключает глобальные и элементные матрицы и записывает версионированный UTF-8 JSON. Поля единиц являются только подписями: численные значения не пересчитываются. Для показанного экспорта в СИ постпроцессор выводит координаты и перемещения в метрах, силы, нагрузки и реакции — в ньютонах, моменты — в Н·м, напряжения — в Па.

2. Откройте и настройте изображение

  1. Откройте postprocessor/index.html в современном Edge, Chromium или Firefox.
  2. Нажмите Open JSON или перетащите output/static-frame.json в пунктирную область. Готовый пример также находится в examples/results/static-frame.json.
  3. Включайте исходную и деформированную геометрию, опоры, нагрузки, реакции и номера узлов или элементов в панели Layers.
  4. Оставьте Scale = Automatic для автоматического увеличения перемещений либо задайте положительный коэффициент вручную. Колесо мыши изменяет масштаб, перетаскивание перемещает вид, а Reset view возвращает модель в окно.
  5. Щёлкните узел или элемент, чтобы выделить его и увидеть идентификатор и основные данные.

3. Выберите статический результат

  • Для стержневых элементов 112 список Overlay показывает продольную силу или напряжение. Красный цвет соответствует растяжению, синий — сжатию.
  • Для рамных элементов 113 список Overlay строит эпюры N, V или M. Без распределённой нагрузки принято N = −f₁ с положительным растяжением, V = −f₂, а момент линейно изменяется от −f₃ до f₆, где f — локальные концевые усилия. При равномерной поперечной нагрузке в JSON версии 2 эпюра момента параболическая. Положительные значения откладываются в сторону локальной оси +Y.
  • Масштабы деформации, стрелок и эпюр независимы и указаны в легенде. Пустая или неподдерживаемая эпюра заменяется понятным сообщением об ошибке.

4. Сохраните иллюстрацию

Export SVG сохраняет масштабируемый векторный рисунок со встроенными стилями и контекстом расчёта. Для растрового изображения выберите разрешение 1×, 2× или 4× и нажмите Export PNG. В экспорт попадают область результата и, для переходного расчёта, текущий график, но не кнопки и боковая панель.

Если файл не открывается

Проверьте, что передан результат RunStatic, все значения конечны, а JSON создан текущей функцией экспорта. Сообщение просмотрщика содержит путь к неверному полю, например $.analysis.displacements. Старое корректное изображение не заменяется при неудачной загрузке.

Верификация: трёхэлементная рама под равномерной нагрузкой

Астахов М. Ф., Каравальцев А. В., Макаров С. Я. - Справочная книга по расчету самолета на прочность, стр.327, Табл.III.35. Одинаковые стойки AB и DC, ригель BC, жёсткие узлы B и C. В основаниях A и D запрещены оба перемещения, повороты свободны (опоры типа 4). Модель содержит ровно три элемента 113 и четыре узла. Линейный расчёт Эйлера — Бернулли, без сдвиговых деформаций и геометрической нелинейности.

Рама из трёх элементов: шарниры в основаниях A и D, жёсткие углы B и C, равномерная нагрузка вниз на ригеле BC.
Узлы: A(0; 0), B(0; 3), C(6; 3), D(6; 0), координаты в метрах. Элементы: 1 — A→B, 2 — B→C, 3 — D→C.

Назначенные данные: l = 6 м, h = 3 м, q = 10 кН/м, E = 200 ГПа, A₁ = A₂ = 0,02 м², J₁ = 8·10⁻⁵ м⁴, J₂ = 1,6·10⁻⁴ м⁴. В формате программы моменты инерции обозначаются I. Плотность 7800 кг/м³ обязательна во входных данных, но не влияет на статику; собственный вес автоматически не добавляется. Глобальные оси: X вправо, Y вверх; нагрузка только на элементе 2: 20,2,2,0,-10000.

Эталон рисунка и учёт продольных деформаций

Для положительной интенсивности q, направленной вниз, и положительного пролётного момента:

k = (J₂/J₁)(h/l) = 1;   VA = VD = ql/2
H₀ = ql² / [4h(2k + 3)];   HA = +H₀, HD = −H₀
MB = MC = −H₀h;   M(l/2) = ql²/8 − H₀h

Формулы рисунка пренебрегают продольными деформациями. Элемент 113 учитывает конечную жёсткость EA. Независимый метод сил, с освобождением горизонтальной связи D, даёт условие совместности:

H [2h³/(3EJ₁) + h²l/(EJ₂) + l/(EA₂)] = ql³h/(12EJ₂)
H = ql² / {4h[2k + 3 + 3J₂/(A₂h²)]}

Подстановка этого H в формулы моментов даёт точный эталон для принятой модели с конечным EA. Равное укорочение стоек не меняет распор, но учитывается в вертикальных перемещениях B и C. Разница распора с рисунком составляет около 0,0533%.

ВеличинаПо рисунку (EA → ∞)Конечное EA, эталон МКЭ
VA = VD, кН3030
HA = −HD, кН65,996802
MB = MC, кН·м−18−17,990405
M(l/2), кН·м+27+27,009595
MA = MD, кН·м00

Запуск и проверяемые результаты

Загрузите CasePinnedPortalUniform.txt через Open TXT в препроцессоре и выполните Run analysis. Автоматическая проверка находится в example_08_pinned_portal_uniform.m:

addpath(pwd);
setup;
addpath(fullfile(pwd, 'reference', 'examples'));
r = example_08_pinned_portal_uniform();
exportPostprocessorData(r.model, r.analysis, 'output/pinned-portal-uniform.json');

Проверяются все реакции, все 18 концевых усилий, 12 узловых перемещений, продольные силы, моменты по длине ригеля, равновесие и приближение к формуле рисунка при увеличении площади ригеля в 100 раз. Допуск для усилий: 10⁻⁷ + 10⁻⁹|эталон| в Н или Н·м; для перемещений: 10⁻¹² + 10⁻⁹|эталон| в м или рад. Пример включён в общий набор test_reference_examples.

Концевые моменты в векторе localEndForces — силы на элемент, поэтому для BC: M_B = -f(3), M_C = f(6). Эпюра ригеля восстанавливается с учётом нагрузки: M(x) = −Hh + qx(l−x)/2. Линейная интерполяция концевых моментов пропустила бы положительный максимум. Трёх элементов достаточно для этих усилий и узловых перемещений; прогиб внутри нагруженного ригеля требует также частного решения от q либо уточнения сетки.

Готовый результат JSON можно открыть в постпроцессоре через Open JSON; выберите Overlay → M для эпюры моментов.

Источник исходных формул — приложенный пользователем фрагмент «Прямоугольная рама со стойками равного сечения с шарнирно закреплёнными основаниями». Библиографические данные на фрагменте отсутствуют. Размеры и свойства сечений назначены для данного примера.

Лабораторная 03. Растяжение стержня: перемещение и опорная реакция

Цель — получить перемещение из уравнения равновесия и объяснить, как одно неизвестное превращается в полный вектор четырёх перемещений.

Горизонтальный стержень с силой вправо, неподвижным левым узлом и правой опорой, допускающей перемещение по X.
Ферменный элемент 112. Правая опора запрещает только поперечное перемещение.

Исходные данные и обозначения

Длина L = 2 м, площадь A = 0,01 м², модуль E = 200 ГПа, сила F = 1000 Н. Положительное направление X — вправо. Полный вектор имеет порядок [u₁x; u₁y; u₂x; u₂y].

Глобальная ССПеремещениеУсловие
1u₁x0, закреплено
2u₁y0, закреплено
3u₂xНеизвестно, действует F
4u₂y0, закреплено

До запуска: расчёт на бумаге

  1. По схеме определите свободное перемещение и выпишите его глобальный номер.
  2. Вычислите жёсткость k = EA/L в Н/м. Запишите уравнение k·u₂x = F и найдите u₂x = FL/(EA).
  3. Из равновесия всего стержня найдите реакцию R₁x. Составьте полный вектор перемещений, вписав нули на закреплённых СС.

Запуск в Octave

Выполните из корня проекта. Готовая функция печатает результаты; для этой работы изменять её код не требуется.

addpath(pwd);
setup;
addpath(fullfile(pwd, "reference", "examples"));
r = example_03_static_bar();

Работа с результатами

  1. В строках Fixed DOFs и Free DOFs найдите номера из своей таблицы. Номер 3 означает горизонтальное перемещение узла 2.
  2. Сопоставьте Reduced stiffness Kff [N/m] со своим EA/L, а Reduced load Ff [N] — с силой F. Разделите второе число на первое: результат должен совпасть с третьей компонентой Complete displacement vector [m].
  3. Сравните полный вектор со своим прогнозом, а первую компоненту Reaction vector [N] — с реакцией −F. Проверьте R₁x + F = 0.
  4. По формуле предскажите, как изменится перемещение при удвоении отдельно L, A и E. Объясните, почему при той же силе реакция сохранится.
Контрольные значения

Kff = 10⁹ Н/м, Ff = 1000 Н, u₂x = 10⁻⁶ м = 0,001 мм. Полные векторы: u = [0; 0; 10⁻⁶; 0] м и R = [−1000; 0; 0; 0] Н. Жёсткость, сила и перемещение связаны уравнением, поэтому непосредственно сравнивать их численные значения между собой нельзя.

Что включить в отчёт

Схему с нумерацией СС, ручное уравнение, таблицу «величина — ручной расчёт — Octave — единицы» для жёсткости, перемещения и реакции; объяснение нулевых компонент и прогноз для трёх изменений параметров.

Исходный код главы

Проверка распределённых нагрузок

Согласованные элементные нагрузки включаются в полный F до решения и вычисления R=Ku−F. Для равномерной нагрузки результирующая равна qL и приложена в середине исходного элемента; глобальное равновесие дополнительно проверяется по этим исходным результирующим. Для консоли |v(L)|=|q|L⁴/(8EI), |θ(L)|=|q|L³/(6EI); концевые усилия свободного конца равны нулю.

MPC

Для MPC решается Kr q = Fr и восстанавливается полный u = Tq. Силы вычисляются по исходной системе, включая нагрузки на зависимых и закреплённых СС. Статическое равновесие учитывает отдельно опорные реакции и силы MPC.

Подробное описание MPC · JSON v3 · CaseMPCFrame.txt · CaseMPCTruss.txt