НДС железобетонного сечения
Задача НДС ищет такую плоскость деформаций, при которой интегральные усилия сечения совпадают с заданными N, Mx, My.
Это обратная задача. Прямая — «дана плоскость деформаций, найти усилия» — решается одним интегрированием без итераций (см. фибровый метод и контурное интегрирование). Здесь известен результат интегрирования, а искать нужно его аргумент, поэтому без итераций не обойтись.
Идентификаторы задач: strain_state для одного набора усилий и strain_state_batch для всего набора.
Входные данные
CrossSectionс активными материальными областями;- диаграмма материала для выбранного
CalcType; - геометрия контуров и отверстий;
- точечная арматура и её
HostArea; - заданные усилия;
- флаги работы бетона в растяжении и сжатии;
- настройки фибровой сетки или контурного пути.
Постановка задачи
Неизвестных три — параметры плоскости деформаций:
Уравнений тоже три — условия равновесия сечения:
где k = (e0, ky, kz), а левые части — результат интегрирования по сечению. Система нелинейна: связь между деформацией и напряжением задаёт диаграмма материала, и она нелинейна почти всегда.
Мерой отклонения служит евклидова норма невязки:
flowchart LR
Load[Заданные N Mx My] --> Solver[Решатель плоскости деформаций]
Solver --> K[e0 ky kz]
K --> Integral[CrossSection.Integral]
Integral --> Response[Фактические N Mx My]
Response --> Residual[Невязка]
Residual --> Solver
Как решается: метод Ньютона–Рафсона
Начальное приближение
Стартовая плоскость берётся из упругого решения по геометрическим жёсткостям сечения:
Для слабо нагруженного сечения это почти ответ. Для сечения с трещинами упругая оценка сильно завышает жёсткость и, соответственно, занижает кривизну — итерации начнутся далеко от решения. Поэтому задачи, где ожидается трещинообразование, могут передавать решателю своё начальное приближение вместо упругого.
Итерация
На каждой итерации вычисляется невязка, затем численный якобиан 3×3 — матрица чувствительности усилий к параметрам плоскости:
Строки идут в порядке N, Mx, My, столбцы — e0, ky, kz. Производные берутся конечными разностями с шагом h: односторонними (forward) либо центральными (central). Односторонняя схема требует трёх дополнительных интегрирований сечения на итерацию, центральная — шести, зато она точнее.
Затем решается система J·Δk = r методом Гаусса с выбором ведущего элемента, и плоскость смещается на −λ·Δk.
Демпфирование шага
Полный ньютоновский шаг на сильно нелинейной диаграмме легко перелетает решение: линейный прогноз по касательной оказывается верен только вблизи текущей точки. Поэтому шаг не применяется вслепую.
Решатель пробует полный шаг, затем половину, четверть и так далее, принимая первую долю, которая уменьшает норму невязки. Делений не больше 30, что доводит λ примерно до 1e-9.
Начальная доля шага дополнительно ограничена: она не должна вывести крайнее волокно сечения за деформацию 0,05. Это заведомо больше предельных деформаций любых диаграмм, но не даёт итерациям уйти туда, где все волокна выключены — там отклик почти постоянен, невязка формально «улучшается», а якобиан вырождается в ноль.
Если ни одна доля шага не улучшила невязку или якобиан оказался вырожденным, решатель один раз откатывается к упругому приближению и пробует снова. Повторный откат бессмыслен: он привёл бы в ту же точку.
Критерий остановки
Итерации прекращаются, когда ‖r‖ < NewtonTolerance.
Допуск абсолютный, а не относительный
Для стержневых сечений допуск задан в килоньютонах — это норма невязки, а не её отношение к заданным усилиям. Умолчание 0,1 означает разные вещи для разных задач: при усилиях порядка 10 000 кН это относительная точность 1e-5, а при усилиях порядка 1 кН — 10 %.
Если сечение слабо нагружено, допуск имеет смысл ужесточить; если усилия очень велики, а расчёт упирается в предел итераций — ослабить. Относительный критерий применяется только для пластинчатых сечений, у него отдельная настройка.
Параметры решателя
| Параметр | Умолчание | Смысл |
|---|---|---|
newtonTol |
0,1 кН |
допуск сходимости по норме невязки |
newtonMaxIter |
25 |
предел числа итераций |
newtonH |
1e-7 |
шаг численного дифференцирования якобиана |
newtonJacobian |
forward |
схема разностей: односторонняя или центральная |
Переключение на central удваивает стоимость итерации, но помогает, когда расчёт «дёргается» около решения: односторонняя разность вносит погрешность порядка h, и вблизи сходимости она может оказаться сравнимой с самой невязкой.
Учёт гибкости элемента
Задача решает сечение, а не стержень: она ничего не знает о длине элемента и его прогибе. Между тем у гибкого внецентренно сжатого элемента прогиб увеличивает эксцентриситет, а значит и момент в расчётном сечении.
Поэтому в задаче предусмотрен необязательный учёт этого эффекта по СП 63.13330, п. 8.1.15: перед решением заданные моменты умножаются на коэффициент η, и дальше решается обычная задача НДС с усиленными моментами.
Поправка требуется при гибкости l0/h > 14 (п. 8.1.2); ниже порога η = 1 и моменты не меняются. Не применяется она и тогда, когда продольная сила не сжимающая — прогиб тогда момент не наращивает.
Величины, участвующие в расчёте. Жёсткость элемента и условная критическая сила:
Коэффициент при бетоне и входящие в него поправки на длительность и эксцентриситет:
Итоговое усиление момента:
Коэффициент при арматуре в выражении для D фиксирован и равен 0,7. Критическая сила здесь условная: она вычисляется по нормативной жёсткости и не является эйлеровой силой реального стержня. Пределы у φl и δe — не защита от численных ошибок, а требование нормы: значения вне интервала обрезаются.
Задаются расчётные длины l0 отдельно по каждой оси и доля длительности ψ = M1l/M1.
Доступны два режима:
- по формуле — жёсткость
Dвычисляется по нормативному выражению,ηнаходится один раз; - уточнённый —
ηуточняется итерационно по фактической жёсткости из решателя НДС, с ускорением сходимости экстраполяцией Эйткена по трём последовательным значениям. Если последовательность расходится или осциллирует, экстраполяция не применяется, берётся последнее значение, и результат помечается соответствующим признаком.
Потеря устойчивости
При |N| ≥ Ncr коэффициент η не существует: знаменатель обращается в ноль или становится отрицательным. Это не численный сбой, а физический результат — элемент теряет устойчивость раньше, чем исчерпывает прочность сечения. Увеличивать число итераций бессмысленно, нужно менять сечение, армирование или расчётную длину.
Что возвращает задача
| Группа | Содержание |
|---|---|
| Сходимость | признак сходимости, число итераций, достигнутая невязка |
| Плоскость деформаций | e0, ky, kz |
| Равновесие | заданные и фактические N, Mx, My |
| Жёсткость | секущая матрица 3×3 и её источник: contour, fiber, mixed или none |
| Якобиан | значения матрицы, схема разностей и шаг h |
| Экстремумы деформаций | минимум и максимум отдельно по бетону и по арматуре |
| Арматура | по каждому стержню: группа, материал, координаты, диаметр, площадь, ε, σ, секущий модуль |
| Преднапряжение | усилия обжатия, приведённые к сечению |
| Гибкость | параметры и результат расчёта η, если он включён |
Статус результата принимает значения ok, not_converged или error.
Две детали, важные при чтении результата. Экстремумы деформаций считаются как ε + εp, то есть включают начальную деформацию преднапряжения, и берутся не только по фибрам, но и по вершинам контура области. Хомуты в экстремумы не попадают: они исключены из продольного интеграла и проверяются отдельной задачей.
Источник жёсткости стоит читать вместе с результатом: он показывает, каким путём фактически шло интегрирование, и значение none почти всегда означает ошибку постановки — у областей нет ни фибр, ни пригодного контура с диаграммой. Подробнее — гибридный путь.
Расчёт по набору усилий
Задача strain_state_batch повторяет то же решение для каждой строки набора. Строки независимы: каждая получает свой решатель и своё упругое начальное приближение, результат предыдущей строки не переиспользуется.
При включённом параллельном режиме каждая строка работает с собственной копией сечения — иначе потоки затирали бы друг другу состояние фибр, ведь SetEps пишет деформации прямо в них.
Несошедшаяся строка не прерывает пакет: в результат попадают число сошедшихся строк и общий признак, а разбираться нужно построчно.
Порядок проверки перед запуском
- Убедиться, что единицы нагрузки согласованы с геометрией и материалами.
- Проверить знак момента относительно расположения арматуры.
- Проверить
tenиca: включена ли работа бетона в растяжении и сжатии. - Проверить диаграмму
CalcTypeи материал каждой области. - Проверить, что отверстия находятся внутри
Hullи не заданы отдельным бетоном. - Для сеточного пути выполнить контроль сгущением.
Если расчёт не сошёлся
Начинать разбор нужно с постановки, а не с параметров итератора.
| Признак | Вероятная причина | Что делать |
|---|---|---|
| Невязка велика и не убывает | заданное состояние недостижимо | проверить знак момента и запас несущей способности |
η не вычислен, отмечена неустойчивость |
продольная сила достигла условной критической | менять сечение, армирование или расчётную длину |
| Итерации упёрлись в предел, невязка мала | слишком жёсткий абсолютный допуск | ослабить newtonTol или поднять предел итераций |
| Невязка колеблется около решения | погрешность односторонних разностей | переключить якобиан на central |
Источник жёсткости none |
у областей нет ни фибр, ни контура с диаграммой | исправить постановку сечения |
Несходимость не всегда является численной проблемой
Если заданный момент требует растяжения стороны без арматуры или превышает предельную способность сечения, решение может отсутствовать. В такой ситуации сначала измените постановку/знак нагрузки, а не параметры итератора. Проверить, лежит ли заданная точка внутри поверхности несущей способности, помогает задача предельных усилий.
Где это в коде
| Что | Где |
|---|---|
| Обработчик задачи | OpenCS/Tasks/StrainStateHandler.cs |
| Пакетный вариант | OpenCS/Tasks/StrainStateBatchHandler.cs |
| Решатель Ньютона | CScore/StrainSolver.cs |
| Интегрирование сечения | CScore/CrossSection.cs, методы IntegralOf и CalculateSecantStiffness |
| Упругое приближение | CScore/MaterialArea.cs, метод Guess |
Коэффициент η |
CScore/Sp63/EccentricityAmplifier.cs |
| Параметры решателя | OpenCS/Utilites/CalcSettings.cs |