Наклонные сечения (СП 63.13330, пп. 8.1.32–8.1.35)
Задачи shear_inclined и shear_inclined_batch проверяют прочность бетонной полосы, наклонного сечения на поперечную силу и наклонного сечения на момент по пп. 8.1.32–8.1.35 СП 63.13330. Реализация — CScore/Sp63Shear/.
Проверяются все три группы условий раздела 8.1.32–8.1.35, формулы (8.55)–(8.65):
- полоса между наклонными сечениями — (8.55), ограничение по бетону сжатой полосы (
ShearFormulas.StripCapacity); - наклонное сечение на поперечную силу — точная проверка (8.56) с составляющими Qb (8.57) и Qsw (8.58); упрощённое условие (8.60) с приопорными поправками (8.61)/(8.62) выводится отдельно как справочная оценка;
- наклонное сечение на момент — (8.63) с Ms (8.64) и Msw (8.65), и упрощённый вариант при C = 2·h0.
Область применимости и режим расчёта
Формулы этого раздела СП заданы для одной поперечной силы Q в плоскости элемента. Они не содержат правила взаимодействия Vy и Vx. Для плит такое правило дано отдельно в п. 8.1.55, а к стержням его переносить нельзя. Кручение относится к отдельной пространственной модели (п. 8.1.36) и этой задачей не учитывается.
Поэтому OpenCS перед вычислением формул квалифицирует каждую строку усилий:
| Режим | Когда доступен нормативный вердикт | Что делает программа |
|---|---|---|
| Нормативный: авто для прямоугольника | Одна ненулевая поперечная сила, T = 0, без ручного φn; одна сплошная прямоугольная бетонная область без отверстий |
Автоматически определяет геометрию и выдаёт нормативный коэффициент. |
| Нормативный: эквивалентное сечение | Те же условия по усилиям; пользователь задал положительную b для нужной плоскости и подтвердил эквивалентное сечение |
Использует нормативные формулы, но фиксирует ручное инженерное допущение в результате. |
| Исследовательская оценка | Любая геометрия и сочетание усилий | Может показать результат работы алгоритма, но не выдаёт нормативного «проходит/не проходит». |
Если в нормативном режиме одновременно ненулевые Vy и Vx, задан T, геометрия не прошла автоматическую классификацию или не подтверждено эквивалентное сечение, результат имеет статус «Нормативный вердикт недоступен» и не подменяется числом коэффициента использования. В пакетной задаче этот статус сохраняется у соответствующей строки и поднимается в итог пакета.
Ручное φn разрешено только для исследовательского режима. Для изгибаемого ненапрягаемого элемента по п. 8.1.34 принимается φn = 1.
Расчётная ширина b — автоматическое предложение, а не универсальная норма
Величина b участвует в формулах (8.55)–(8.65). Для автоматического нормативного режима OpenCS ограничен сплошным прямоугольным сечением. Для сложной геометрии алгоритм минимальной суммы хорд — инженерное предложение для исследования или для подбора эквивалентного сечения, а не самостоятельное нормативное доказательство.
ChordWidthScanner предлагает b как минимальную суммарную длину хорд бетона на диапазоне уровней от сжатой грани до центра тяжести растянутой арматуры (InclinedSectionGeometry.ResolveForTensionSide вызывает MinWidth(concrete, plane, compressedEdge, compressedEdge ± h0)). Хорда на уровне — это сумма длин отрезков пересечения горизонтальной (или вертикальной, для Vx) прямой с полигоном бетона; отверстия вычитаются, несколько бетонных областей суммируются.
Если автоматическое сканирование возвращает b = 0, программа не подставляет другое число молча: выводится причина, а пользователь может задать положительную b отдельно для Vy и Vx. Такое переопределение становится нормативным только в режиме эквивалентного сечения с явным подтверждением; иначе это исследовательская оценка.
Длина хорды между вершинами контура — кусочно-линейная функция уровня, поэтому минимум ищется точно, без сканирования по равномерной сетке:
- собираются уровни всех вершин контуров (
CollectLevels), попадающие в открытый диапазон(from; to); - пробы берутся на серединах подынтервалов между соседними уровнями и вплотную у самих уровней (
level ± 1e-9) — но никогда в узловом уровне; - по всем пробам берётся минимум
ChordLengthAt.
Проба никогда не ставится точно на уровень вершины из-за отдельного вырождения: пересечения считаются по полуоткрытому правилу level < max, поэтому на самой верхней границе тела хорда обращается в ноль. Без сдвига внутрь этот ноль стал бы «минимальной шириной» на любом сечении.
Хомуты любой формы приводятся к qsw
Поперечное армирование в OpenCS — это замкнутые контуры и открытые срезы с реальной геометрией центровой линии (StirrupElement.CenterlineContour), а не «число ветвей заданного диаметра». StirrupResolver.BranchArea определяет, какая площадь ветви работает в данной плоскости сдвига, по общему правилу:
где Δᵢ — проекция участка центровой линии на направление поперечной силы (Δy для Vy, Δx для Vx), а ℓᵢ — его полная длина. Вертикальные участки полностью работают на Vy, горизонтальные — на Vx, наклонные дают вклад в обе плоскости пропорционально своему наклону — без ручного подсчёта «числа ветвей».
Погонное усилие в хомутах:
Rsw берётся по табл. 6.15 (170/280/300 МПа для классов A240/A400/A500 — StirrupResolver.ResolveRsw) и в любом случае ограничивается MaxRsw = 300 МПа; при ручном вводе с превышением в отчёт добавляется оговорка.
Перебор: стоянки × проекция C
Норма говорит о «наиболее опасном наклонном сечении» — это не одна расчётная точка, а двойной перебор (InclinedSectionModel, ShearInclinedChecker):
- стоянки вдоль элемента — сечения, в которых проверяется продольная и поперечная арматура (
Station); - проекция C в каждой стоянке — бетонная составляющая точной проверки перебирается от
0,6·h0до3·h0(границы — из отсечекQbпо (8.57):Qb ≤ 2,5Rbt·b·h0даётCmin = 0,6h0,Qb ≥ 0,5Rbt·b·h0даётCmax = 3,0h0), с ограничением по фактическому расстоянию до опоры; эффективная длина хомутов на этом же диапазоне ограничена снизу1,0·h0и сверху2,0·h0по прямому указанию нормы к формуле (8.58).
Наклонное сечение откладывается от стоянки в сторону опоры на длину C; Point0 = Station + sign(Direction) · C — конец сечения, противоположный проверяемой арматуре. Для каждой пары (стоянка, C) считается своя несущая способность, и в итог идёт худшее сочетание. По поперечной силе и по моменту критическая проекция может оказаться разной — они хранятся раздельно.
Поперечная сила в наклонном сечении определяется статически, в самой стоянке (InclinedSectionModel.AppliedShear → IForceProfile.Q(Station)) — это прямое прочтение п. 8.1.33: «Q… определяемая от всех внешних сил, расположенных по одну сторону от рассматриваемого наклонного сечения». Отдельная оговорка нормы про «наиболее опасное загружение в пределах наклонного сечения» относится к выбору худшего варианта загружения (сочетания нагрузок, положения подвижной нагрузки) — это уже обеспечивается перебором стоянок и, для shear_inclined_batch, перебором строк набора усилий, а не пространственным сканированием одного и того же загружения внутри проекции C.
Стоянки ближе 0,6h0 к опоре — для них наклонное сечение с минимально допустимой проекцией не помещается до опоры — исключаются из точной проверки (8.56) с явной оговоркой в результате; для них остаётся приопорное условие (8.60). При малом расстоянии до опоры диапазон проекции для более удалённых стоянок ограничивается этим расстоянием. Упрощённое условие (8.60) — MinConcreteShear/MinStirrupShear с поправками (8.61)/(8.62) — остаётся доступным как справочная приопорная оценка и не меняет нормативный вердикт.
Момент меняет знак — меняется всё
При переходе через нулевой момент растянутой становится другая грань. Вместе с ней меняются рабочая высота h0, усилие в растянутой арматуре Ns и расчётная ширина b — почти все входные величины.
InclinedSectionGeometryPair.Resolve вычисляет геометрию сечения сразу для обеих сторон (TensionPositive/TensionNegative), а For(moment) в каждой стоянке подставляет ту, что отвечает знаку момента именно там:
public InclinedSectionGeometry For(double moment)
{
if (moment > MomentEpsilon) return TensionPositive;
if (moment < -MomentEpsilon) return TensionNegative;
return TensionPositive.H0 <= TensionNegative.H0 ? TensionPositive : TensionNegative;
}
При нулевом моменте берётся сторона с меньшей рабочей высотой — в запас. Ручные переопределения b, h0 или Ns при этом не затираются: если они заданы вручную, они остаются такими во всех стоянках.
Три источника усилий
IForceProfile абстрагирует источник усилий вдоль элемента:
ConstantProfile— одна строка набора (или введённые вручную усилия), принятая неизменной на длине наклонного сечения, плюс расстояние до опоры;UniformLoadProfile— аналитический профиль равномерной нагрузки,Q(s) = Q₀ − q·s,M(s) = M₀ + Q₀·s − q·s²/2, с указанием, какой из концов участка действительно опора;SampledProfile— эпюра усилий конструктивного стержня из результата расчёта схемы OpenSees (fem_profile).
В табличном профиле (SampledProfile) поперечная и продольная силы интерполируются линейно, а момент — эрмитовым кубическим полиномом с Q в качестве производной (M′ = Q). Это воспроизводит параболу момента под равномерной нагрузкой между узлами вместо линейной аппроксимации; согласованность M′ = Q дополнительно проверяется по интервалам, и там, где она нарушена, интерполяция понижается до линейной.
Пакетный режим (shear_inclined_batch) прогоняет все строки набора усилий и собирает сводку с худшим коэффициентом использования и виновной формулой по каждой строке.
Честные допущения вместо тихих
Три места, где расчёт намеренно не делает вид, что знает больше, чем знает:
Конструктивные требования 10.3 не проверяются по геометрии
П. 8.1.33 разрешает учитывать хомуты только при соблюдении конструктивных требований 10.3. Проверить это по геометрии сечения нельзя, поэтому пока пользователь не подтвердил требования отдельным параметром задачи, поперечная арматура в расчёт не включается (qsw = 0, расчёт идёт по одному бетону). Подтверждение фиксируется в оговорках результата.
Шаг хомутов ограничен по факту, а не занижён
Ограничение sw,max = Rbt·b·h0²/Q (ShearFormulas.MaxStirrupSpacing) проверяется в каждой стоянке отдельно. Если фактический шаг больше — хомуты не учитываются вовсе, с указанием конкретного предельного значения в оговорке, а не с молчаливым занижением несущей способности.
Точный и справочный коэффициенты использования
Упрощённые условия (8.60) и (8.63′) показываются для оценочной проверки и могут быть жёстче точных. Итоговый вердикт строится только по точным проверкам (8.55), (8.56), (8.63). Справочный коэффициент выводится рядом, но не может сделать точный вердикт «не проходит».
Анкеровка по 10.3.21–10.3.28 не проверяется: коэффициент включения продольной арматуры k (ShearInclinedInput.AnchorageFactor) задаёт пользователь, и об этом тоже сказано в оговорках.
Коэффициент φn (п. 8.1.34)
PhiNCalculator.Compute учитывает влияние продольной силы N на прочность по наклонным сечениям по п. 8.1.34 в редакции Изменения № 2:
- для изгибаемого элемента без предварительного напряжения (
ElementKind.BendingUnstressed) или приN ≈ 0:φn = 1; -
при сжатии,
σcp = N/A_red:\[ \varphi_n = \begin{cases} 1 + \sigma_{cp}/R_b, & \sigma_{cp} \le 0{,}25\,R_b,\\ 1{,}25, & 0{,}25\,R_b < \sigma_{cp} \le 0{,}5\,R_b,\\ 2{,}5\,(1 - \sigma_{cp}/R_b) \ge 0, & \sigma_{cp} > 0{,}5\,R_b; \end{cases} \]коэффициент применяется и к условию (8.55) по бетонной полосе (
AppliesToStrip = true); - при растяжении,σtp = N/A_red:φn = 1 − σtp/(2·Rbt) ≥ 0; к условию (8.55) не применяется.
Приведённая площадь A_red = A_b + (Es/Eb)/ν·As учитывает всю продольную арматуру; ν = Rb/(εb0·Eb) при сжатии и ν = Rbt/(εbt0·Eb) при растяжении. Во всех случаях φn умножает Qb (8.57) и Qb,min (8.61). Ветвь формулы и значение σcp (σtp) выводятся в пояснении результата. Если φn = 0, а поперечной арматуры нет, несущая способность равна нулю, и Кисп принимается бесконечным.
Это тот нюанс нормы, который легко потерять при реализации «одним множителем по месту»: AppliesToStrip вынесен в отдельное поле результата, а не подмешан в саму формулу.
Что видно в результате
- сводка проверок, сгруппированная по пунктам нормы, с коэффициентом использования и цветовой отметкой по каждой формуле;
- таблица стоянок вдоль элемента:
s,N,φn, растянутая грань,Q, критическая проекцияC,Qb,QswиКисп— отдельно по поперечной силе и по моменту; - график коэффициента использования по длине элемента;
- диаграмма несущей способности по длине проекции
C— кривыеQb,Qsw, их суммы и действующейQв выбранной стоянке, для обеих плоскостей; - список оговорок: неоднородный бетон, отсутствие поперечной арматуры, смена знака момента, стоянки у опоры, ручные переопределения.
Шаги перебора (стоянок и проекции) вынесены в общие настройки расчёта, но их можно переопределить в задаче.
Контроль
Приёмочный пример — балка 300×600, бетон B25, хомуты ⌀8 A240 с шагом 150 мм, Q = 150 кН:
| Величина | Значение |
|---|---|
| полоса (8.55) | 717,8 кН |
| Qb при C = 2·h0 | 129,9 кН |
| Qsw при C = 2·h0 | 95,2 кН |
| Qb + Qsw | 225,1 кН → Кисп = 0,666 |
Значения сверены с ручным расчётом. Отдельные наборы тестов покрывают: формулы (8.55)–(8.65), φn, профили усилий, приведение хомутов к qsw, определение ширины по хордам (ChordWidthScannerTests) и перебор стоянок целиком.
Диагностика
- если продольный расчёт НДС (
rc-section) не видит хомуты — это ожидаемо:AreaCategory.Stirrupsисключается черезMaterialArea.IsCalcActive, проверка поперечного армирования запускается отдельной задачейshear_inclined; - нулевой
qswпри заданных хомутах почти всегда означает не отсутствие арматуры, а неподтверждённые конструктивные требования 10.3 или превышенный шаг — проверяйте оговорки, а не считайте это багом; - разный
Кисппо поперечной силе и по моменту в одной стоянке — норма: критическая проекцияCдля них ищется независимо; - проверяйте знак момента и то, какая грань считается растянутой (
TensionOnPositiveSide) — при смене знака момента вдоль элемента расчёт фактически сам разбивается на участки.
Что дальше
Своего расчётного обоснования у наклонных сечений пока нет: документатор отчётов (OpenCS.Reporting) охватывает НДС, предельные усилия, трещины и кривизну, а IReportProvider для shear_inclined ещё не написан. Архитектура отчётов к этому готова — нужен только провайдер, рендереры и картинки уже общие.
Из содержательного в очереди: автоматическая проверка конструктивных требований 10.3 по геометрии армирования и учёт анкеровки вместо ручного коэффициента k.