Концевые освобождения Mz
Концевое освобождение Mz позволяет рамному элементу 113 вращаться относительно общего узла, сохраняя совместность поступательных перемещений. Освобождение задаётся для конкретного конца конкретного элемента. Оно доступно в статическом, модальном и переходном расчётах.
Что именно освобождается
У обычного рамного соединения все присоединённые элементы используют один узловой поворот thetaZ. Освобождённый конец получает собственный поворот, а его ux и uy остаются общими с узлом. Сам узел не закрепляется и не раздваивается.
| Механизм | К чему относится | Действие |
|---|---|---|
| Опора типа 4 | Узел | Закрепляет ux и uy относительно основания; узловой поворот свободен. |
| MPC | Несколько узловых СС | Задаёт линейное соотношение их перемещений. |
| Освобождение Mz | Конец элемента | Разделяет поворот конца и общий поворот узла, не закрепляя перемещения. |
Для разрыва передачи момента между двумя элементами достаточно освободить один из сходящихся концов. Если к узлу примыкают и другие неосвобождённые концы, они по-прежнему имеют общий поворот и могут передавать момент друг другу. Нельзя заменять освобождение опорой типа 4: такая замена добавит поступательные закрепления.
Запись в файле
После секции элементов добавьте блок releases. Первая строка блока — количество записей, каждая запись имеет вид elementId,end,Mz:
releases
2
1,1,Mz
1,2,Mz
Пример освобождает оба конца элемента 1. end=1 соответствует первому узлу в записи элемента, end=2 — второму. Это порядок узлов, а не «лево/право» на экране. Номера элементов сквозные, начиная с 1; координаты и направление элемента могут быть любыми.
Блок допускается повторять. Редактор сохраняет одну секцию, отсортированную по элементу и концу. Запись elems_113 не меняется; отсутствие releases или пустой блок сохраняет прежнюю модель. В текущей версии допустимо только точное имя Mz; освобождения N, V и числовые коды компонентов не поддерживаются.
Работа в препроцессоре
- Выберите раму 113 и откройте таблицу Elements.
- Включите Release at end 1 или Release at end 2 у нужного элемента. Каждый переключатель освобождает Mz своего конца.
- Проверьте кружок у конца на схеме и подпись
Mz1 released/Mz2 releasedв карточке элемента. - Проверьте опоры, нагрузки и сообщения модели, затем выполните расчёт.
Освобождения сохраняются при изменении геометрии и свойств элемента и остаются привязаны к позициям node1/node2. При удалении элемента удаляются его освобождения; оставшиеся номера обновляются. Удаление узла удаляет связанные элементы и их освобождения. Undo/Redo восстанавливает всю операцию.
Переключение Mz не удаляет элементную нагрузку. Изменение геометрии или свойств элемента по существующему правилу редактора удаляет связанные элементные нагрузки; это отдельное действие.
Как меняется карта степеней свободы
Общий узловой thetaZ существует, пока хотя бы один присоединённый конец не освобождён. Если освобождены все концы в узле, общий поворот удаляется из системы: он больше не связан с элементами. Каждый освобождённый конец имеет собственную внутреннюю вращательную СС.
Реестр dofRegistry различает узловые СС и внутренние СС концов. Фактический размер системы — numberOfDOFs. Значение dofPerNode=3 обозначает возможные рамные компоненты и больше не означает, что размер всегда равен 3N. В dofMap и iMnod ноль в третьей колонке означает отсутствие общего поворота, а не закреплённый или нулевой поворот.
Для одного элемента с двумя узлами и освобождением обоих концов карта имеет вид:
dofMap = [1 2 0; 3 4 0]
element.dofs = [1; 2; 5; 3; 4; 6]
u = [ux1; uy1; ux2; uy2; thetaEnd1; thetaEnd2]
Сначала нумеруются существующие узловые СС в порядке узел/компонента, затем внутренние повороты в порядке элемент/конец. Модели без освобождений сохраняют старую нумерацию.
Сборка и статическое восстановление
Исходные локальные матрицы жёсткости и согласованной массы элемента сохраняются целиком. Меняются только глобальные номера, в которые собираются их коэффициенты. Строки матриц не зануляются; статическая конденсация не применяется. Эквивалентная распределённая нагрузка собирается по той же карте, включая моменты на внутренних вращательных СС.
ue,local = Re u[element.dofs]
fe,end = Ke,local ue,local − fe,load
Здесь Re переводит глобальные компоненты элемента в локальные оси, а fe,load — согласованный локальный вектор элементной нагрузки.
В статике строка равновесия свободного внутреннего поворота обеспечивает нулевой момент на освобождённом конце с численным допуском. В localEndForces это компоненты 3 и 6 в порядке [N1,V1,Mz1,N2,V2,Mz2]. Эти значения вычисляются, а не заменяются нулями после решения. Оси и знаки соответствуют главе о восстановлении результатов.
Почему в динамике проверяется полный баланс
При согласованной массе внутренний поворот участвует в инерции элемента. Условие для освобождённой обобщённой координаты проверяется по соответствующей строке:
rrelease = (Ma + Ku − F)release ≈ 0
rrelease,mode = (Kφ − ω²Mφ)release ≈ 0
Упругий вклад Ku сам по себе может быть ненулевым: его уравновешивает инерционный вклад. Поэтому статический тест «концевой момент равен нулю» нельзя механически переносить на упругие силы динамической модели. Удаление массы или принудительное обнуление усилия изменило бы расчёт.
Внутренние повороты входят в собственные формы и истории Ньюмарка. Возможны изгибные формы с неподвижными геометрическими узлами: деформация внутри элемента определяется поворотами его концов. Начальные условия программного переходного решателя задаются вектором длины numberOfDOFs, включая внутренние СС, и должны удовлетворять SPC/MPC.
Опоры, MPC и ошибки модели
| Ситуация | Поведение МКЭ-Ф |
|---|---|
| SPC закрепляет отсутствующий thetaZ | Закрепление поворота игнорируется с предупреждением. Поступательные закрепления сохраняются; внутренние повороты остаются свободными. |
| Ненулевой узловой Mz на отсутствующем thetaZ | Ошибка. Такой момент нельзя автоматически распределить по независимым концам. |
| MPC или узловой монитор ссылается на отсутствующий thetaZ | Ошибка. Можно использовать существующие узловые компоненты; внутренние повороты не адресуются через SPC/MPC входного файла. |
| Дубликат освобождения, неизвестный элемент, конец вне 1/2, ферма 112 или другая компонента | Ошибка входа с диагностикой; неверная запись не исправляется автоматически. |
| После освобождений возник механизм | Расчёт отклоняется. Освобождение момента не заменяет необходимые опоры и связи. |
Если общий поворот ещё связан с неосвобождёнными концами, узловые Mz, SPC и MPC действуют именно на него, не закрепляя и не нагружая напрямую освобождённый конец. Внутреннюю СС можно выбрать для графика результатов; это не создаёт право ссылаться на неё номером узловой компоненты в файле модели.
Чтение результатов и JSON v4
Постпроцессор строит деформированную схему по шести фактическим СС каждого элемента. Кружки показывают освобождённые концы. В карточке элемента доступны оба thetaZ; отсутствие общего узлового поворота показывается как not defined. В модальной карточке значения относятся к сохранённому собственному вектору, а не к визуальному масштабу формы.
Для переходного графика выберите элемент в Node / element, затем нужный конец и thetaZ. Если экспортирована лишь часть СС, доступные графики остаются работоспособны. Для анимации нужны истории перемещений всех глобальных СС; при неполном экспорте она отключается с пояснением.
JSON v4 содержит releases, dofRegistry, numberOfDOFs, elements[].globalDOFs и предупреждения. Поля MPC и распределённых нагрузок включаются по наличию этих возможностей. Модели без освобождений продолжают использовать v1/v2/v3.
Проверяемый пример: балка под равномерной нагрузкой
Откройте CaseReleaseStatic.txt: один элемент длиной L = 4 м, E = 2·10¹¹ Па, I = 8·10⁻⁶ м⁴, qy = −1000 Н/м. Оба конца освобождены; узел 1 закреплён по ux/uy, узел 2 — по uy.
Ry1 = Ry2 = |qy|L/2 = 2000 Н
θ1 = −|qy|L³/(24EI) = −0.00166667 рад
θ2 = +0.00166667 рад, Mz1 ≈ Mz2 ≈ 0
addpath(pwd);
setup;
problem = StructFEProblem(fullfile(pwd, 'examples', 'cases', 'CaseReleaseStatic.txt'));
model = problem.GetAnalysisModel();
result = problem.RunSelected();
disp(model.dofMap);
disp(result.displacements(model.elementData(1).dofs([3 6])));
disp(result.elementResults(1).localEndForces);
disp(result.equilibriumResidual);
В этом примере реакции и концевые повороты совпадают с аналитическим решением. Однако постпроцессор интерполирует перемещения кубическими функциями элемента: для одного элемента прогиб в середине равен |q|L⁴/(96EI), а точное решение балки даёт 5|q|L⁴/(384EI). Не следует оценивать точность всего поля только по нулевым концевым моментам; для прогиба уточняйте сетку, сохраняя освобождения на физических концах балки.
CaseReleaseModal.txt показывает изгибную форму с неподвижными узлами. CaseReleaseTransient.txt содержит два элемента, освобождения на внешних концах и ступенчатую нагрузку в середине. Внутренний стык этой балки остаётся жёстким: освобождать каждый конец при измельчении сетки не нужно.
Реализация и проверки
- buildDOFRegistry.m — общие узловые и внутренние концевые СС;
- recoverElementResults.m — перемещения и концевые усилия;
- shared/releases.js — семантика освобождений, диагностика и маркеры;
- test_releases.m — аналитические реакции, наклонная геометрия, эквивалентная модель на MPC, частоты, энергия и ошибки;
- test_releases_browser.cjs — редактор, предупреждения, v4, формы и графики внутренних СС.
Реализация относится к линейной плоской раме 113 и освобождению Mz. Она не добавляет освобождения N/V, упругие или пластические шарниры, контакт, большие повороты и полное исследование NAFEMS.