Граничные условия и нагрузки
Опора задаёт, какие узловые движения запрещены, а нагрузка — какие обобщённые силы приложены к соответствующим компонентам. В МКЭ‑Ф эти данные не изменяют исходные матрицы: для каждого расчёта заново строятся индексы СС и вектор нагрузки.
Свободные и закреплённые СС
Функция partitionDOFs преобразует записи опор в два непересекающихся списка:
fixedDOFs— СС с заданным нулевым перемещением;freeDOFs— все СС, не закреплённые SPC; при наличии только SPC это неизвестные редуцированной системы.
fixedDOFs ∪ freeDOFs = {1, …, n}, fixedDOFs ∩ freeDOFs = ∅
Исходные глобальные матрицы K и M при этом не меняются и могут храниться разреженно. Такое разделение сохраняет физический смысл исходной модели и позволяет корректно вычислить реакции.
Типы опор
Запись имеет вид type,node,0,0,0. Ненулевые заданные перемещения пока не поддерживаются.
Для рамы 113 действуют все семь комбинаций:
| Тип | Закреплено | Свободно | Физический смысл |
|---|---|---|---|
1 | ux, uy, thetaZ | — | Полная заделка |
2 | uy, thetaZ | ux | Свободно только ux; поворот запрещён |
3 | ux, thetaZ | uy | Свободно только uy; поворот запрещён |
4 | ux, uy | thetaZ | Неподвижный шарнир |
5 | ux | uy, thetaZ | Каток: запрещён ux, поворот свободен |
6 | uy | ux, thetaZ | Каток: запрещён uy, поворот свободен |
7 | thetaZ | ux, uy | Только запрет поворота |
У фермы 112 нет поворота: типы 1 и 4 закрепляют ux, uy; типы 3 и 5 — только ux; типы 2 и 6 — только uy. Тип 7 запрещён. Редактор показывает три уникальные комбинации, а экспорт использует типы 1, 3 и 2 соответственно.
Внутреннее представление — маски fixUx/fixUy/fixThetaZ. При смене семейства маски сохраняются; перед переходом к ферме нужно убрать thetaZ. Повторное закрепление одной СС — ошибка с указанием узла и компоненты. Пример шарнира и катка: CaseRollerFrame.txt.
Сопряжённые перемещения и силы
Каждой узловой СС соответствует обобщённая сила, совершающая на ней работу:
| Модель | Степени свободы | Компоненты нагрузки |
|---|---|---|
| ферма 112 | [ux, uy] | [Fx, Fy] |
| рама 113 | [ux, uy, θz] | [Fx, Fy, Mz] |
Mz — момент вокруг оси Z, сопряжённый повороту θz. Это не сила Fz: пространственного перемещения uz в плоской модели нет. Поэтому ненулевой Mz у ферменного узла отклоняется, а не игнорируется.
Четыре истории нагрузки
Узловые компоненты задаются в глобальных осях: type,node,Fx,Fy,Mz; у гармоники добавляется положительная частота f в Гц. В модальном анализе нагрузки не допускаются. Нагрузка на закреплённую СС сохраняется в полном векторе и учитывается в реакции.
Столбцы временной истории соответствуют t = 0, Δt, …, NΔt. Если несколько записей действуют на одну СС, их значения суммируются.
| Секция / тип | Значение | Допустимый расчёт |
|---|---|---|
bcforce_stat / 10 | постоянный вектор в статике; в динамике — совместимый одношаговый импульс при t = Δt | статический и переходный |
bcforce_harm / 11 | F(t) = F0 sin(2πft) | переходный |
bcforce_pulse / 12 | F0 только при t = Δt | переходный |
bcforce_step / 13 | F0 во всех столбцах, включая t = 0 | переходный |
Для одношагового прямоугольного импульса дискретный импульс равен F0Δt. Поэтому изменение шага времени при неизменной амплитуде меняет переданный импульс.
% Пять столбцов: t = [0, dt, 2dt, 3dt, 4dt]
pulse = [0, F0, 0, 0, 0];
step = [F0, F0, F0, F0, F0];
Распределённая нагрузка на элемент
eload_uniform поддерживается только в статике для рамы 113. Строка 20,elementId,coordinateSystem,qx,qy задаёт силу на единицу фактической длины конечного элемента. Код системы 1 означает локальные оси (x — от первого узла ко второму, y — поворот x на +90°), 2 — глобальные X, Y. Повторные записи складываются; обе компоненты одновременно нулевыми быть не могут.
После перевода q в локальные оси согласованный вектор равен:
fe = [qₓL/2, qᵧL/2, qᵧL²/12, qₓL/2, qᵧL/2, −qᵧL²/12]ᵀ
При ulocal = R uglobal глобальный вклад равен Rᵀfe. Он добавляется к узловым нагрузкам. Не вводите его вручную второй раз. В редакторе изменение элемента или координат его концов удаляет связанные распределённые нагрузки; Undo восстанавливает их. Переключение Local/Global сохраняет физическое направление нагрузки.
Формат и пример: eload_uniform. В переходном и модальном анализе распределённые нагрузки отклоняются.
Линейная нагрузка: трапеция и треугольник
Секция eload_linear задаёт 21,elementId,coordinateSystem,qx1,qy1,qx2,qy2. Значения относятся к первому и второму узлам элемента: q(ξ) = (1 − ξ)q₁ + ξq₂. Нагрузка действует на всю длину. Нулевой конец даёт треугольник; равные концы — равномерную нагрузку. Разные знаки разрешены; полностью нулевая запись запрещена.
Для локальных концевых векторов a и b точное интегрирование функций формы даёт:
fₑ = [L(2aₓ+bₓ)/6, L(7aᵧ+3bᵧ)/20, L²(3aᵧ+2bᵧ)/60, L(aₓ+2bₓ)/6, L(3aᵧ+7bᵧ)/20, −L²(2aᵧ+3bᵧ)/60]ᵀ
Эпюры N и V квадратичны, M — кубическая; внутренние экстремумы учитываются при отображении. Нагрузки обоих типов суммируются и совместимы с MPC и освобождениями Mz. В редакторе выберите Linear и задайте компоненты на концах; Local/Global преобразует оба вектора. Переход к Uniform берёт средние компоненты, сохраняя силу, но в общем случае меняя её момент.
Лабораторная 04. Узловые нагрузки: сумма сил и история во времени
Цель — восстановить по таблице, какая сила действует в каждый момент времени, и различить статическую нагрузку, одношаговый импульс и ступень.
Исходные данные и обозначения
Порядок СС: [u₁x; u₁y; θ₁; u₂x; u₂y; θ₂]. Временные амплитуды узла 2: [10; −20; 3] (Н, Н, Н·м); частота гармоники 1 Гц. Сетка: t = [0; 0,25; 0,5; 0,75; 1] с. В отдельном статическом случае складываются нагрузки [10; −20; 3] и [5; 2; −1].
До запуска: расчёт на бумаге
- Найдите три компоненты суммарной статической нагрузки узла 2.
- Составьте таблицу Fₓ(t) для трёх случаев: импульс действует только при t = Δt, ступень — с t = 0, гармоника задаётся как 10·sin(2πt).
- Найдите дискретный импульс каждой компоненты F₀Δt; единица для момента — Н·м·с.
Запуск в Octave
Выполните из корня проекта. Готовая функция печатает результаты; для этой работы изменять её код не требуется.
addpath(pwd);
setup;
addpath(fullfile(pwd, "reference", "examples"));
r = example_04_load_histories();
Работа с результатами
- Сверьте статическую сумму с последними тремя строками
Summed static load vector. Первые три строки относятся к ненагруженному узлу 1. - Подпишите пять столбцов трёх напечатанных временных таблиц значениями из
Time grid [s]. В этих таблицах показаны только СС 4–6: первая строка — Fₓ, вторая — Fᵧ, третья — M_z. - Сверьте первую строку каждой таблицы со своим прогнозом. Восстановите две остальные строки умножением той же временной функции на −20 и 3. Малые числа около нуля у гармоники объясняются округлением.
- Сверьте
Discrete pulse impulse components F0*dtсо своим расчётом. Предскажите импульс при уменьшении Δt вдвое с той же амплитудой; определите, как изменить амплитуду, чтобы сохранить импульс.
Статическая сумма: [15; −18; 2]. Для Fₓ строки равны [0 10 0 0 0], [10 10 10 10 10] и [0 10 0 −10 0]. Импульс: [2,5; −5; 0,75] (Н·с, Н·с, Н·м·с). При половинном шаге с той же амплитудой он уменьшается вдвое; для сохранения нужна двойная амплитуда.
Что включить в отчёт
Сумму статических нагрузок, таблицу или эскиз трёх историй Fₓ(t), единицы импульса и объяснение влияния шага времени.
Исходный код главы
partitionDOFs.m— проверка опор и разбиение СС;getNodalLoadComponents.m— соответствие нагрузок узловым СС;buildStaticLoad.m— свежий статический вектор;buildElementLoadVector.m— согласованные элементные нагрузки;buildTransientLoad.m— временные истории;example_04_load_histories.m— исполняемая лабораторная.
Связи между перемещениями нескольких узлов описаны отдельно в главе 4a: MPC. Там рассматриваются зависимые СС, помощник оси и силы связей.
Концевые освобождения Mz
Освобождение Mz разрывает передачу момента конкретным концом и не закрепляет перемещения узла. SPC отсутствующего thetaZ пропускается с предупреждением. Ненулевой узловой момент, MPC и монитор на отсутствующий поворот запрещены. Эквивалентные распределённые нагрузки действуют и на внутренние вращательные СС.
JSON v4 · CaseReleaseStatic · CaseReleaseModal · CaseReleaseTransient